From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Jakub Jelinek To: git-commits@fedoraproject.org Subject: [rpms/gcc] rhel-f41-base: 4.1.2-28 Date: Mon, 29 Jun 2026 12:23:27 GMT Message-ID: <178273580739.1.10587400054994066847.rpms-gcc-e198454f27be@fedoraproject.org> List-ID: X-Git-Repo: rpms/gcc X-Git-Branch: rhel-f41-base X-Git-Rev: e198454f27bea7458aaa19bfa033c410ccaf3579 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZ2NjCkJyYW5jaCA6 IHJoZWwtZjQxLWJhc2UKQ29tbWl0IDogZTE5ODQ1NGYyN2JlYTc0NThhYWExOWJmYTAzM2M0MTBj Y2FmMzU3OQpBdXRob3IgOiBKYWt1YiBKZWxpbmVrIDxqYWt1YkBmZWRvcmFwcm9qZWN0Lm9yZz4K RGF0ZSAgIDogMjAwNy0wOS0yNVQxNjowOTowNSswMDowMApTdGF0cyAgOiArNTA2Mi8tMzU1NiBp biAyNSBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMv Z2NjL2MvZTE5ODQ1NGYyN2JlYTc0NThhYWExOWJmYTAzM2M0MTBjY2FmMzU3OT9icmFuY2g9cmhl bC1mNDEtYmFzZQoKTG9nOgo0LjEuMi0yOAoKLS0tCmRpZmYgLS1naXQgYS8uY3ZzaWdub3JlIGIv LmN2c2lnbm9yZQppbmRleCBmZDcyZjcxLi4wNDE1MGViIDEwMDY0NAotLS0gYS8uY3ZzaWdub3Jl CisrKyBiLy5jdnNpZ25vcmUKQEAgLTEgKzEgQEAKLWdjYy00LjEuMi0yMDA3MDgyMS50YXIuYnoy CitnY2MtNC4xLjItMjAwNzA5MjUudGFyLmJ6MgoKZGlmZiAtLWdpdCBhL2djYzQxLWFydGlmaWNp YWwtYXR0cmliLnBhdGNoIGIvZ2NjNDEtYXJ0aWZpY2lhbC1hdHRyaWIucGF0Y2gKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiMWRkOAotLS0gL2Rldi9udWxsCisrKyBiL2dj YzQxLWFydGlmaWNpYWwtYXR0cmliLnBhdGNoCkBAIC0wLDAgKzEsNDE5OCBAQAorMjAwNy0wOS0y MyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHRyZWUuaCAoYmxvY2tf bm9uYXJ0aWZpY2lhbF9sb2NhdGlvbik6IE5ldyBwcm90b3R5cGUuCisJKiB0cmVlLmMgKGJsb2Nr X25vbmFydGlmaWNpYWxfbG9jYXRpb24pOiBOZXcgZnVuY3Rpb24uCisJKiBkd2FyZjJvdXQuYyAo Z2VuX3N1YnByb2dyYW1fZGllKTogQWRkIERXX0FUX2FydGlmaWNpYWwKKwlpZiBhcnRpZmljaWFs IGF0dHJpYnV0ZSBpcyBwcmVzZW50IG9uIGFic3RyYWN0IGlubGluZSBkZWNsLgorCSogYy1jb21t b24uYyAoaGFuZGxlX2FydGlmaWNpYWxfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgorCShjX2Nv bW1vbl9hdHRyaWJ1dGVfdGFibGUpOiBBZGQgYXJ0aWZpY2lhbCBhdHRyaWJ1dGUuCisJKiBmaW5h bC5jIChvdmVycmlkZV9maWxlbmFtZSwgb3ZlcnJpZGVfbGluZW51bSk6IE5ldyB2YXJpYWJsZXMu CisJKGZpbmFsX3NjYW5faW5zbik6IEZvciBEQlhfREVCVUcgb3IgU0RCX0RFQlVHLCBzZXQgb3Zl cnJpZGVfZmlsZW5hbWUKKwlhbmQgb3ZlcnJpZGVfbGluZW51bSBpZiBpbnNpZGUgb2YgYSBibG9j ayBpbmxpbmVkIGZyb20KKwlfX2F0dHJpYnV0ZV9fKChfX2FydGlmaWNpYWxfXykpIGZ1bmN0aW9u LgorCShub3RpY2Vfc291cmNlX2xpbmUpOiBIb25vciBvdmVycmlkZV9maWxlbmFtZSBhbmQgb3Zl cnJpZGVfbGluZW51bS4KKwkqIGRvYy9leHRlbmQudGV4aTogRG9jdW1lbnQgX19hdHRyaWJ1dGVf XygoX19hcnRpZmljaWFsX18pKS4KKwkqIGNvbmZpZy9pMzg2L2VtbWludHJpbi5oOiBBZGQgX19h cnRpZmljaWFsX18gYXR0cmlidXRlIHRvCisJYWxsIF9fYWx3YXlzX2lubGluZV9fIGZ1bmN0aW9u cy4KKwkqIGNvbmZpZy9pMzg2L21taW50cmluLmg6IExpa2V3aXNlLgorCSogY29uZmlnL2kzODYv bW0zZG5vdy5oOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pMzg2L3BtbWludHJpbi5oOiBMaWtld2lz ZS4KKwkqIGNvbmZpZy9pMzg2L2FtbWludHJpbi5oOiBMaWtld2lzZS4KKwkqIGNvbmZpZy9pMzg2 L3htbWludHJpbi5oOiBMaWtld2lzZS4KKworLS0tIGdjYy9kb2MvZXh0ZW5kLnRleGkuamoJMjAw Ny0wOS0yNSAxMjoyMzowNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MvZG9jL2V4dGVuZC50ZXhp CTIwMDctMDktMjUgMTU6MDQ6MTUuMDAwMDAwMDAwICswMjAwCitAQCAtMTU4OSw3ICsxNTg5LDgg QEAgYXR0cmlidXRlcyBhcmUgY3VycmVudGx5IGRlZmluZWQgZm9yIGZ1bgorIEBjb2Rle3NlY3Rp b259LCBAY29kZXtjb25zdHJ1Y3Rvcn0sIEBjb2Rle2Rlc3RydWN0b3J9LCBAY29kZXt1c2VkfSwK KyBAY29kZXt1bnVzZWR9LCBAY29kZXtkZXByZWNhdGVkfSwgQGNvZGV7d2Vha30sIEBjb2Rle21h bGxvY30sCisgQGNvZGV7YWxpYXN9LCBAY29kZXt3YXJuX3VudXNlZF9yZXN1bHR9LCBAY29kZXtu b25udWxsfSwKKy1AY29kZXtnbnVfaW5saW5lfSBhbmQgQGNvZGV7ZXh0ZXJuYWxseV92aXNpYmxl fS4gIFNldmVyYWwgb3RoZXIKKytAY29kZXtnbnVfaW5saW5lfSwgQGNvZGV7ZXh0ZXJuYWxseV92 aXNpYmxlfSBhbmQgQGNvZGV7YXJ0aWZpY2lhbH0uCisrU2V2ZXJhbCBvdGhlcgorIGF0dHJpYnV0 ZXMgYXJlIGRlZmluZWQgZm9yIGZ1bmN0aW9ucyBvbiBwYXJ0aWN1bGFyIHRhcmdldCBzeXN0ZW1z LiAgT3RoZXIKKyBhdHRyaWJ1dGVzLCBpbmNsdWRpbmcgQGNvZGV7c2VjdGlvbn0gYXJlIHN1cHBv cnRlZCBmb3IgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIChAcHhyZWZ7VmFyaWFibGUgQXR0cmli dXRlc30pIGFuZCBmb3IgdHlwZXMgKEBweHJlZntUeXBlIEF0dHJpYnV0ZXN9KS4KK0BAIC0xNjcx LDYgKzE2NzIsMTQgQEAgSW4gQysrLCB0aGlzIGF0dHJpYnV0ZSBkb2VzIG5vdCBkZXBlbmQgbwor IGJ1dCBpdCBzdGlsbCByZXF1aXJlcyB0aGUgQGNvZGV7aW5saW5lfSBrZXl3b3JkIHRvIGVuYWJs ZSBpdHMgc3BlY2lhbAorIGJlaGF2aW9yLgorIAorK0BjaW5kZXggQGNvZGV7YXJ0aWZpY2lhbH0g ZnVuY3Rpb24gYXR0cmlidXRlCisrQGl0ZW0gYXJ0aWZpY2lhbAorK1RoaXMgYXR0cmlidXRlIGlz IHVzZWZ1bCBmb3Igc21hbGwgaW5saW5lIHdyYXBwZXJzIHdoaWNoIGlmIHBvc3NpYmxlCisrc2hv dWxkIGFwcGVhciBkdXJpbmcgZGVidWdnaW5nIGFzIGEgdW5pdCwgZGVwZW5kaW5nIG9uIHRoZSBk ZWJ1ZworK2luZm8gZm9ybWF0IGl0IHdpbGwgZWl0aGVyIG1lYW4gbWFya2luZyB0aGUgZnVuY3Rp b24gYXMgYXJ0aWZpY2lhbAorK29yIHVzaW5nIHRoZSBjYWxsZXIgbG9jYXRpb24gZm9yIGFsbCBp bnN0cnVjdGlvbnMgd2l0aGluIHRoZSBpbmxpbmVkCisrYm9keS4KKysKKyBAY2luZGV4IEBjb2Rl e2ZsYXR0ZW59IGZ1bmN0aW9uIGF0dHJpYnV0ZQorIEBpdGVtIGZsYXR0ZW4KKyBHZW5lcmFsbHks IGlubGluaW5nIGludG8gYSBmdW5jdGlvbiBpcyBsaW1pdGVkLiAgRm9yIGEgZnVuY3Rpb24gbWFy a2VkIHdpdGgKKy0tLSBnY2MvdHJlZS5jLmpqCTIwMDctMDQtMDMgMTM6MTg6MjYuMDAwMDAwMDAw ICswMjAwCisrKysgZ2NjL3RyZWUuYwkyMDA3LTA5LTI1IDE1OjAxOjQ5LjAwMDAwMDAwMCArMDIw MAorQEAgLTc2MzgsNCArNzYzOCw0MCBAQCBlbXB0eV9ib2R5X3AgKHRyZWUgc3RtdCkKKyAgIHJl dHVybiB0cnVlOworIH0KKyAKKysvKiBJZiBCTE9DSyBpcyBpbmxpbmVkIGZyb20gYW4gX19hdHRy aWJ1dGVfXygoX19hcnRpZmljaWFsX18pKQorKyAgIHJvdXRpbmUsIHJldHVybiBwb2ludGVyIHRv IGxvY2F0aW9uIGZyb20gd2hlcmUgaXQgaGFzIGJlZW4KKysgICBjYWxsZWQuICAqLworK2xvY2F0 aW9uX3QgKgorK2Jsb2NrX25vbmFydGlmaWNpYWxfbG9jYXRpb24gKHRyZWUgYmxvY2spCisrewor KyAgbG9jYXRpb25fdCAqcmV0ID0gTlVMTDsKKysKKysgIHdoaWxlIChibG9jayAmJiBUUkVFX0NP REUgKGJsb2NrKSA9PSBCTE9DSworKwkgJiYgQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOIChibG9jaykp CisrICAgIHsKKysgICAgICB0cmVlIGFvID0gQkxPQ0tfQUJTVFJBQ1RfT1JJR0lOIChibG9jayk7 CisrCisrICAgICAgd2hpbGUgKFRSRUVfQ09ERSAoYW8pID09IEJMT0NLICYmIEJMT0NLX0FCU1RS QUNUX09SSUdJTiAoYW8pKQorKwlhbyA9IEJMT0NLX0FCU1RSQUNUX09SSUdJTiAoYW8pOworKwor KyAgICAgIGlmIChUUkVFX0NPREUgKGFvKSA9PSBGVU5DVElPTl9ERUNMKQorKwl7CisrCSAgLyog SWYgQU8gaXMgYW4gYXJ0aWZpY2lhbCBpbmxpbmUsIHBvaW50IFJFVCB0byB0aGUKKysJICAgICBj YWxsIHNpdGUgbG9jdXMgYXQgd2hpY2ggaXQgaGFzIGJlZW4gaW5saW5lZCBhbmQgY29udGludWUK KysJICAgICB0aGUgbG9vcCwgaW4gY2FzZSBBTydzIGNhbGxlciBpcyBhbHNvIGFuIGFydGlmaWNp YWwKKysJICAgICBpbmxpbmUuICAqLworKwkgIGlmIChERUNMX0RFQ0xBUkVEX0lOTElORV9QIChh bykKKysJICAgICAgJiYgbG9va3VwX2F0dHJpYnV0ZSAoImFydGlmaWNpYWwiLCBERUNMX0FUVFJJ QlVURVMgKGFvKSkpCisrCSAgICByZXQgPSAmQkxPQ0tfU09VUkNFX0xPQ0FUSU9OIChibG9jayk7 CisrCSAgZWxzZQorKwkgICAgYnJlYWs7CisrCX0KKysgICAgICBlbHNlIGlmIChUUkVFX0NPREUg KGFvKSAhPSBCTE9DSykKKysJYnJlYWs7CisrCisrICAgICAgYmxvY2sgPSBCTE9DS19TVVBFUkNP TlRFWFQgKGJsb2NrKTsKKysgICAgfQorKyAgcmV0dXJuIHJldDsKKyt9CisrCisgI2luY2x1ZGUg Imd0LXRyZWUuaCIKKy0tLSBnY2MvdHJlZS5oLmpqCTIwMDctMDktMjUgMTI6MjA6MTIuMDAwMDAw MDAwICswMjAwCisrKysgZ2NjL3RyZWUuaAkyMDA3LTA5LTI1IDE1OjAyOjM3LjAwMDAwMDAwMCAr MDIwMAorQEAgLTQyNzAsNiArNDI3MCw4IEBAIGV4dGVybiB0cmVlIGJ1aWxkX2FkZHIgKHRyZWUs IHRyZWUpOworIGV4dGVybiBib29sIGZpZWxkc19jb21wYXRpYmxlX3AgKHRyZWUsIHRyZWUpOwor IGV4dGVybiB0cmVlIGZpbmRfY29tcGF0aWJsZV9maWVsZCAodHJlZSwgdHJlZSk7CisgCisrZXh0 ZXJuIGxvY2F0aW9uX3QgKmJsb2NrX25vbmFydGlmaWNpYWxfbG9jYXRpb24gKHRyZWUpOworKwor IC8qIEluIGZ1bmN0aW9uLmMgKi8KKyBleHRlcm4gdm9pZCBleHBhbmRfbWFpbl9mdW5jdGlvbiAo dm9pZCk7CisgZXh0ZXJuIHZvaWQgaW5pdF9kdW1teV9mdW5jdGlvbl9zdGFydCAodm9pZCk7Cist LS0gZ2NjL2ZpbmFsLmMuamoJMjAwNy0wMi0yMCAyMjozOToxMi4wMDAwMDAwMDAgKzAxMDAKKysr KyBnY2MvZmluYWwuYwkyMDA3LTA5LTI1IDE1OjAxOjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTE0 MSw2ICsxNDEsMTAgQEAgc3RhdGljIGludCBoaWdoX2Z1bmN0aW9uX2xpbmVudW07CisgLyogRmls ZW5hbWUgb2YgbGFzdCBOT1RFLiAgKi8KKyBzdGF0aWMgY29uc3QgY2hhciAqbGFzdF9maWxlbmFt ZTsKKyAKKysvKiBPdmVycmlkZSBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIuICAqLworK3N0YXRp YyBjb25zdCBjaGFyICpvdmVycmlkZV9maWxlbmFtZTsKKytzdGF0aWMgaW50IG92ZXJyaWRlX2xp bmVudW07CisrCisgLyogV2hldGhlciB0byBmb3JjZSBlbWlzc2lvbiBvZiBhIGxpbmUgbm90ZSBi ZWZvcmUgdGhlIG5leHQgaW5zbi4gICovCisgc3RhdGljIGJvb2wgZm9yY2Vfc291cmNlX2xpbmUg PSBmYWxzZTsKKyAgIAorQEAgLTE4MjIsNiArMTgyNiwxOCBAQCBmaW5hbF9zY2FuX2luc24gKHJ0 eCBpbnNuLCBGSUxFICpmaWxlLCBpCisgCSAgICAgIC8qIE1hcmsgdGhpcyBibG9jayBhcyBvdXRw dXQuICAqLworIAkgICAgICBUUkVFX0FTTV9XUklUVEVOIChOT1RFX0JMT0NLIChpbnNuKSkgPSAx OworIAkgICAgfQorKwkgIGlmICh3cml0ZV9zeW1ib2xzID09IERCWF9ERUJVRworKwkgICAgICB8 fCB3cml0ZV9zeW1ib2xzID09IFNEQl9ERUJVRykKKysJICAgIHsKKysJICAgICAgbG9jYXRpb25f dCAqbG9jdXNfcHRyCisrCQk9IGJsb2NrX25vbmFydGlmaWNpYWxfbG9jYXRpb24gKE5PVEVfQkxP Q0sgKGluc24pKTsKKysKKysJICAgICAgaWYgKGxvY3VzX3B0ciAhPSBOVUxMKQorKwkJeworKwkJ ICBvdmVycmlkZV9maWxlbmFtZSA9IExPQ0FUSU9OX0ZJTEUgKCpsb2N1c19wdHIpOworKwkJICBv dmVycmlkZV9saW5lbnVtID0gTE9DQVRJT05fTElORSAoKmxvY3VzX3B0cik7CisrCQl9CisrCSAg ICB9CisgCSAgYnJlYWs7CisgCisgCWNhc2UgTk9URV9JTlNOX0JMT0NLX0VORDoKK0BAIC0xODQx LDYgKzE4NTcsMjQgQEAgZmluYWxfc2Nhbl9pbnNuIChydHggaW5zbiwgRklMRSAqZmlsZSwgaQor IAorIAkgICAgICAoKmRlYnVnX2hvb2tzLT5lbmRfYmxvY2spIChoaWdoX2Jsb2NrX2xpbmVudW0s IG4pOworIAkgICAgfQorKwkgIGlmICh3cml0ZV9zeW1ib2xzID09IERCWF9ERUJVRworKwkgICAg ICB8fCB3cml0ZV9zeW1ib2xzID09IFNEQl9ERUJVRykKKysJICAgIHsKKysJICAgICAgdHJlZSBv dXRlcl9ibG9jayA9IEJMT0NLX1NVUEVSQ09OVEVYVCAoTk9URV9CTE9DSyAoaW5zbikpOworKwkg ICAgICBsb2NhdGlvbl90ICpsb2N1c19wdHIKKysJCT0gYmxvY2tfbm9uYXJ0aWZpY2lhbF9sb2Nh dGlvbiAob3V0ZXJfYmxvY2spOworKworKwkgICAgICBpZiAobG9jdXNfcHRyICE9IE5VTEwpCisr CQl7CisrCQkgIG92ZXJyaWRlX2ZpbGVuYW1lID0gTE9DQVRJT05fRklMRSAoKmxvY3VzX3B0cik7 CisrCQkgIG92ZXJyaWRlX2xpbmVudW0gPSBMT0NBVElPTl9MSU5FICgqbG9jdXNfcHRyKTsKKysJ CX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBvdmVycmlkZV9maWxlbmFtZSA9IE5VTEw7Cisr CQkgIG92ZXJyaWRlX2xpbmVudW0gPSAwOworKwkJfQorKwkgICAgfQorIAkgIGJyZWFrOworIAor IAljYXNlIE5PVEVfSU5TTl9ERUxFVEVEX0xBQkVMOgorQEAgLTI1MjEsOCArMjU1NSwxOSBAQCBm aW5hbF9zY2FuX2luc24gKHJ0eCBpbnNuLCBGSUxFICpmaWxlLCBpCisgc3RhdGljIGJvb2wKKyBu b3RpY2Vfc291cmNlX2xpbmUgKHJ0eCBpbnNuKQorIHsKKy0gIGNvbnN0IGNoYXIgKmZpbGVuYW1l ID0gaW5zbl9maWxlIChpbnNuKTsKKy0gIGludCBsaW5lbnVtID0gaW5zbl9saW5lIChpbnNuKTsK KysgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworKyAgaW50IGxpbmVudW07CisrCisrICBpZiAob3Zl cnJpZGVfZmlsZW5hbWUpCisrICAgIHsKKysgICAgICBmaWxlbmFtZSA9IG92ZXJyaWRlX2ZpbGVu YW1lOworKyAgICAgIGxpbmVudW0gPSBvdmVycmlkZV9saW5lbnVtOworKyAgICB9CisrICBlbHNl CisrICAgIHsKKysgICAgICBmaWxlbmFtZSA9IGluc25fZmlsZSAoaW5zbik7CisrICAgICAgbGlu ZW51bSA9IGluc25fbGluZSAoaW5zbik7CisrICAgIH0KKyAKKyAgIGlmIChmaWxlbmFtZQorICAg ICAgICYmIChmb3JjZV9zb3VyY2VfbGluZQorLS0tIGdjYy9kd2FyZjJvdXQuYy5qagkyMDA3LTA0 LTAzIDEzOjEzOjI3LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy9kd2FyZjJvdXQuYwkyMDA3LTA5 LTI1IDE1OjAxOjQ5LjAwMDAwMDAwMCArMDIwMAorQEAgLTExNjY3LDYgKzExNjY3LDEwIEBAIGdl bl9zdWJwcm9ncmFtX2RpZSAodHJlZSBkZWNsLCBkd19kaWVfcmUKKyAgICAgICAgICAgICBhZGRf QVRfdW5zaWduZWQgKHN1YnJfZGllLCBEV19BVF9pbmxpbmUsIERXX0lOTF9ub3RfaW5saW5lZCk7 CisgCX0KKyAKKysgICAgICBpZiAoREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoZGVjbCkKKysJICAm JiBsb29rdXBfYXR0cmlidXRlICgiYXJ0aWZpY2lhbCIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkp KQorKwlhZGRfQVRfZmxhZyAoc3Vicl9kaWUsIERXX0FUX2FydGlmaWNpYWwsIDEpOworKworICAg ICAgIGVxdWF0ZV9kZWNsX251bWJlcl90b19kaWUgKGRlY2wsIHN1YnJfZGllKTsKKyAgICAgfQor ICAgZWxzZSBpZiAoIURFQ0xfRVhURVJOQUwgKGRlY2wpKQorLS0tIGdjYy9jLWNvbW1vbi5jLmpq CTIwMDctMDMtMjcgMTU6NDA6MTUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjL2MtY29tbW9uLmMJ MjAwNy0wOS0yNSAxNTowMTo0OS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01MDUsOCArNTA1LDggQEAg c3RhdGljIHRyZWUgaGFuZGxlX25vcmV0dXJuX2F0dHJpYnV0ZSAodAorIHN0YXRpYyB0cmVlIGhh bmRsZV9ub2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICop OworIHN0YXRpYyB0cmVlIGhhbmRsZV9hbHdheXNfaW5saW5lX2F0dHJpYnV0ZSAodHJlZSAqLCB0 cmVlLCB0cmVlLCBpbnQsCisgCQkJCQkgICAgYm9vbCAqKTsKKy1zdGF0aWMgdHJlZSBoYW5kbGVf Z251X2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LAorLQkJCQkJIGJv b2wgKik7Cisrc3RhdGljIHRyZWUgaGFuZGxlX2dudV9pbmxpbmVfYXR0cmlidXRlICh0cmVlICos IHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKKytzdGF0aWMgdHJlZSBoYW5kbGVfYXJ0aWZpY2lh bF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworIHN0YXRpYyB0 cmVlIGhhbmRsZV9mbGF0dGVuX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJv b2wgKik7Cisgc3RhdGljIHRyZWUgaGFuZGxlX3VzZWRfYXR0cmlidXRlICh0cmVlICosIHRyZWUs IHRyZWUsIGludCwgYm9vbCAqKTsKKyBzdGF0aWMgdHJlZSBoYW5kbGVfdW51c2VkX2F0dHJpYnV0 ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitAQCAtNTc3LDYgKzU3Nyw4IEBA IGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBjX2NvbW1vbl9hdHQKKyAJCQkgICAgICBoYW5k bGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUgfSwKKyAgIHsgImdudV9pbmxpbmUiLCAgICAgICAg ICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLAorIAkJCSAgICAgIGhhbmRsZV9nbnVfaW5s aW5lX2F0dHJpYnV0ZSB9LAorKyAgeyAiYXJ0aWZpY2lhbCIsICAgICAgICAgICAgIDAsIDAsIHRy dWUsICBmYWxzZSwgZmFsc2UsCisrCQkJICAgICAgaGFuZGxlX2FydGlmaWNpYWxfYXR0cmlidXRl IH0sCisgICB7ICJmbGF0dGVuIiwgICAgICAgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBm YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmxhdHRlbl9hdHRy aWJ1dGUgfSwKKyAgIHsgInVzZWQiLCAgICAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFs c2UsIGZhbHNlLAorQEAgLTQxODAsNiArNDE4MiwyOSBAQCBoYW5kbGVfZ251X2lubGluZV9hdHRy aWJ1dGUgKHRyZWUgKm5vZGUsCisgICByZXR1cm4gTlVMTF9UUkVFOworIH0KKyAKKysvKiBIYW5k bGUgYW4gImFydGlmaWNpYWwiIGF0dHJpYnV0ZTsgYXJndW1lbnRzIGFzIGluCisrICAgc3RydWN0 IGF0dHJpYnV0ZV9zcGVjLmhhbmRsZXIuICAqLworKworK3N0YXRpYyB0cmVlCisraGFuZGxlX2Fy dGlmaWNpYWxfYXR0cmlidXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsCisrCQkJICAgICB0cmVl IEFSR19VTlVTRUQgKGFyZ3MpLAorKwkJCSAgICAgaW50IEFSR19VTlVTRUQgKGZsYWdzKSwKKysJ CQkgICAgIGJvb2wgKm5vX2FkZF9hdHRycykKKyt7CisrICBpZiAoVFJFRV9DT0RFICgqbm9kZSkg PT0gRlVOQ1RJT05fREVDTCAmJiBERUNMX0RFQ0xBUkVEX0lOTElORV9QICgqbm9kZSkpCisrICAg IHsKKysgICAgICAvKiBEbyBub3RoaW5nIGVsc2UsIGp1c3Qgc2V0IHRoZSBhdHRyaWJ1dGUuICBX ZSdsbCBnZXQgYXQKKysJIGl0IGxhdGVyIHdpdGggbG9va3VwX2F0dHJpYnV0ZS4gICovCisrICAg IH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVx RSBhdHRyaWJ1dGUgaWdub3JlZCIsIG5hbWUpOworKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVl OworKyAgICB9CisrCisrICByZXR1cm4gTlVMTF9UUkVFOworK30KKysKKyAvKiBIYW5kbGUgYSAi ZmxhdHRlbiIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgICBzdHJ1Y3QgYXR0cmlidXRl X3NwZWMuaGFuZGxlci4gICovCisgCistLS0gZ2NjL2NvbmZpZy9pMzg2L21taW50cmluLmguamoJ MjAwNy0wMy0yNyAxNTo0MDoxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnY2MvY29uZmlnL2kzODYv bW1pbnRyaW4uaAkyMDA3LTA5LTI1IDE1OjA2OjMwLjAwMDAwMDAwMCArMDIwMAorQEAgLTQzLDI2 ICs0MywyNiBAQCB0eXBlZGVmIHNob3J0IF9fdjRoaSBfX2F0dHJpYnV0ZV9fICgoX192CisgdHlw ZWRlZiBjaGFyIF9fdjhxaSBfX2F0dHJpYnV0ZV9fICgoX192ZWN0b3Jfc2l6ZV9fICg4KSkpOwor IAorIC8qIEVtcHR5IHRoZSBtdWx0aW1lZGlhIHN0YXRlLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUg dm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fZW1wdHkgKHZvaWQpCisgeworICAgX19idWlsdGluX2lhMzJfZW1tcyAoKTsKKyB9Cisg Cistc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21fZW1wdHkgKHZvaWQpCisgeworICAgX21tX2VtcHR5ICgp OworIH0KKyAKKyAvKiBDb252ZXJ0IEkgdG8gYSBfX202NCBvYmplY3QuICBUaGUgaW50ZWdlciBp cyB6ZXJvLWV4dGVuZGVkIHRvIDY0LWJpdHMuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCAg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202 NCAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fY3Z0c2kzMl9zaTY0IChpbnQgX19pKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRp bl9pYTMyX3ZlY19pbml0X3Yyc2kgKF9faSwgMCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBf X202NCAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX202NCAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbV9mcm9tX2ludCAoaW50IF9faSkKKyB7CisgICByZXR1cm4gX21tX2N2dHNpMzJfc2k2 NCAoX19pKTsKK0BAIC03MiwyNiArNzIsMjYgQEAgX21fZnJvbV9pbnQgKGludCBfX2kpCisgLyog Q29udmVydCBJIHRvIGEgX19tNjQgb2JqZWN0LiAgKi8KKyAKKyAvKiBJbnRlbCBpbnRyaW5zaWMu ICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9mcm9tX2ludDY0IChsb25nIGxvbmcgX19p KQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9faTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9f bTY0ICBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTY0ICBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tbV9jdnRzaTY0X202NCAobG9uZyBsb25nIF9faSkKKyB7CisgICByZXR1cm4gKF9fbTY0 KSBfX2k7CisgfQorIAorIC8qIE1pY3Jvc29mdCBpbnRyaW5zaWMuICAqLworLXN0YXRpYyBfX2lu bGluZSBfX202NCAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCAgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKKyBfbW1fY3Z0c2k2NHhfc2k2NCAobG9uZyBsb25nIF9faSkKKyB7CisgICByZXR1 cm4gKF9fbTY0KSBfX2k7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCAgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCAgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2V0X3Bp NjR4IChsb25nIGxvbmcgX19pKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9faTsKK0BAIC05OSwx MyArOTksMTMgQEAgX21tX3NldF9waTY0eCAobG9uZyBsb25nIF9faSkKKyAjZW5kaWYKKyAKKyAv KiBDb252ZXJ0IHRoZSBsb3dlciAzMiBiaXRzIG9mIHRoZSBfX202NCBvYmplY3QgaW50byBhbiBp bnRlZ2VyLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHNpNjRfc2kzMiAoX19tNjQgX19p KQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Yyc2kgKChfX3Yyc2kpX19p LCAwKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3RvX2ludCAoX19tNjQgX19pKQorIHsK KyAgIHJldHVybiBfbW1fY3Z0c2k2NF9zaTMyIChfX2kpOworQEAgLTExNSwyMCArMTE1LDIwIEBA IF9tX3RvX2ludCAoX19tNjQgX19pKQorIC8qIENvbnZlcnQgdGhlIF9fbTY0IG9iamVjdCB0byBh IDY0Yml0IGludGVnZXIuICAqLworIAorIC8qIEludGVsIGludHJpbnNpYy4gICovCistc3RhdGlj IF9faW5saW5lIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tX3RvX2ludDY0IChfX202NCBfX2kpCisgeworICAgcmV0 dXJuIChsb25nIGxvbmcpX19pOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgbG9uZyBsb25nIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgbG9uZyBs b25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX2N2dG02NF9zaTY0IChfX202NCBfX2kpCisgeworICAgcmV0dXJuIChsb25nIGxvbmcpX19p OworIH0KKyAKKyAvKiBNaWNyb3NvZnQgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUg bG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX2N2dHNpNjRfc2k2NHggKF9fbTY0IF9faSkKKyB7CisgICByZXR1cm4g KGxvbmcgbG9uZylfX2k7CitAQCAtMTM4LDEzICsxMzgsMTMgQEAgX21tX2N2dHNpNjRfc2k2NHgg KF9fbTY0IF9faSkKKyAvKiBQYWNrIHRoZSBmb3VyIDE2LWJpdCB2YWx1ZXMgZnJvbSBNMSBpbnRv IHRoZSBsb3dlciBmb3VyIDgtYml0IHZhbHVlcyBvZgorICAgIHRoZSByZXN1bHQsIGFuZCB0aGUg Zm91ciAxNi1iaXQgdmFsdWVzIGZyb20gTTIgaW50byB0aGUgdXBwZXIgZm91ciA4LWJpdAorICAg IHZhbHVlcyBvZiB0aGUgcmVzdWx0LCBhbGwgd2l0aCBzaWduZWQgc2F0dXJhdGlvbi4gICovCist c3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkK KytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fcGFja3NfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19t MikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWNrc3N3YiAoKF9fdjRo aSlfX20xLCAoX192NGhpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3Bh Y2tzc3diIChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1fcGFja3Nf cGkxNiAoX19tMSwgX19tMik7CitAQCAtMTUzLDEzICsxNTMsMTMgQEAgX21fcGFja3Nzd2IgKF9f bTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgLyogUGFjayB0aGUgdHdvIDMyLWJpdCB2YWx1ZXMgZnJv bSBNMSBpbiB0byB0aGUgbG93ZXIgdHdvIDE2LWJpdCB2YWx1ZXMgb2YKKyAgICB0aGUgcmVzdWx0 LCBhbmQgdGhlIHR3byAzMi1iaXQgdmFsdWVzIGZyb20gTTIgaW50byB0aGUgdXBwZXIgdHdvIDE2 LWJpdAorICAgIHZhbHVlcyBvZiB0aGUgcmVzdWx0LCBhbGwgd2l0aCBzaWduZWQgc2F0dXJhdGlv bi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fcGFja3NfcGkzMiAoX19tNjQgX19tMSwg X19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWNrc3Nk dyAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUg X19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tX3BhY2tzc2R3IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBf bW1fcGFja3NfcGkzMiAoX19tMSwgX19tMik7CitAQCAtMTY4LDEzICsxNjgsMTMgQEAgX21fcGFj a3NzZHcgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgLyogUGFjayB0aGUgZm91ciAxNi1iaXQg dmFsdWVzIGZyb20gTTEgaW50byB0aGUgbG93ZXIgZm91ciA4LWJpdCB2YWx1ZXMgb2YKKyAgICB0 aGUgcmVzdWx0LCBhbmQgdGhlIGZvdXIgMTYtYml0IHZhbHVlcyBmcm9tIE0yIGludG8gdGhlIHVw cGVyIGZvdXIgOC1iaXQKKyAgICB2YWx1ZXMgb2YgdGhlIHJlc3VsdCwgYWxsIHdpdGggdW5zaWdu ZWQgc2F0dXJhdGlvbi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fcGFja3NfcHUxNiAo X19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5f aWEzMl9wYWNrdXN3YiAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworIH0KKyAKKy1zdGF0 aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tX3BhY2t1c3diIChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsK KyAgIHJldHVybiBfbW1fcGFja3NfcHUxNiAoX19tMSwgX19tMik7CitAQCAtMTgyLDEzICsxODIs MTMgQEAgX21fcGFja3Vzd2IgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgCisgLyogSW50ZXJs ZWF2ZSB0aGUgZm91ciA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0xIHdpdGgg dGhlIGZvdXIKKyAgICA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0yLiAgKi8K Ky1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tbV91bnBhY2toaV9waTggKF9fbTY0IF9fbTEsIF9fbTY0 IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNraGJ3ICgo X192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202 NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9f bTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21fcHVucGNraGJ3IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1f dW5wYWNraGlfcGk4IChfX20xLCBfX20yKTsKK0BAIC0xOTYsMTMgKzE5NiwxMyBAQCBfbV9wdW5w Y2toYncgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgCisgLyogSW50ZXJsZWF2ZSB0aGUgdHdv IDE2LWJpdCB2YWx1ZXMgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0xIHdpdGggdGhlIHR3bworICAg IDE2LWJpdCB2YWx1ZXMgZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0yLiAgKi8KKy1zdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV91bnBhY2toaV9waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsK KyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2h3ZCAoKF9fdjRoaSlfX20x LCAoX192NGhpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3B1bnBja2h3 ZCAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gX21tX3VucGFja2hpX3Bp MTYgKF9fbTEsIF9fbTIpOworQEAgLTIxMCwxMyArMjEwLDEzIEBAIF9tX3B1bnBja2h3ZCAoX19t NjQgX19tMSwgX19tNjQgX19tMikKKyAKKyAvKiBJbnRlcmxlYXZlIHRoZSAzMi1iaXQgdmFsdWUg ZnJvbSB0aGUgaGlnaCBoYWxmIG9mIE0xIHdpdGggdGhlIDMyLWJpdAorICAgIHZhbHVlIGZyb20g dGhlIGhpZ2ggaGFsZiBvZiBNMi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fdW5wYWNr aGlfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBf X2J1aWx0aW5faWEzMl9wdW5wY2toZHEgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlfX20yKTsKKyB9 CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wdW5wY2toZHEgKF9fbTY0IF9fbTEsIF9fbTY0 IF9fbTIpCisgeworICAgcmV0dXJuIF9tbV91bnBhY2toaV9waTMyIChfX20xLCBfX20yKTsKK0BA IC0yMjQsMTMgKzIyNCwxMyBAQCBfbV9wdW5wY2toZHEgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIp CisgCisgLyogSW50ZXJsZWF2ZSB0aGUgZm91ciA4LWJpdCB2YWx1ZXMgZnJvbSB0aGUgbG93IGhh bGYgb2YgTTEgd2l0aCB0aGUgZm91cgorICAgIDgtYml0IHZhbHVlcyBmcm9tIHRoZSBsb3cgaGFs ZiBvZiBNMi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fdW5wYWNrbG9fcGk4IChfX202 NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMy X3B1bnBja2xidyAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMg X19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQorIF9tX3B1bnBja2xidyAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7Cisg ICByZXR1cm4gX21tX3VucGFja2xvX3BpOCAoX19tMSwgX19tMik7CitAQCAtMjM4LDEzICsyMzgs MTMgQEAgX21fcHVucGNrbGJ3IChfX202NCBfX20xLCBfX202NCBfX20yKQorIAorIC8qIEludGVy bGVhdmUgdGhlIHR3byAxNi1iaXQgdmFsdWVzIGZyb20gdGhlIGxvdyBoYWxmIG9mIE0xIHdpdGgg dGhlIHR3bworICAgIDE2LWJpdCB2YWx1ZXMgZnJvbSB0aGUgbG93IGhhbGYgb2YgTTIuICAqLwor LXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21tX3VucGFja2xvX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0 IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHVucGNrbHdkICgo X192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202 NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9f bTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21fcHVucGNrbHdkIChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1f dW5wYWNrbG9fcGkxNiAoX19tMSwgX19tMik7CitAQCAtMjUyLDU5ICsyNTIsNTkgQEAgX21fcHVu cGNrbHdkIChfX202NCBfX20xLCBfX202NCBfX20yKQorIAorIC8qIEludGVybGVhdmUgdGhlIDMy LWJpdCB2YWx1ZSBmcm9tIHRoZSBsb3cgaGFsZiBvZiBNMSB3aXRoIHRoZSAzMi1iaXQKKyAgICB2 YWx1ZSBmcm9tIHRoZSBsb3cgaGFsZiBvZiBNMi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0 IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19t NjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fdW5wYWNrbG9fcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4g KF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wdW5wY2tsZHEgKChfX3Yyc2kpX19tMSwgKF9fdjJzaSlf X20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wdW5wY2tsZHEgKF9fbTY0IF9f bTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIF9tbV91bnBhY2tsb19waTMyIChfX20xLCBf X20yKTsKKyB9CisgCisgLyogQWRkIHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTEgdG8gdGhlIDgtYml0 IHZhbHVlcyBpbiBNMi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fYWRkX3BpOCAoX19t NjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEz Ml9wYWRkYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tX3BhZGRiIChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVy biBfbW1fYWRkX3BpOCAoX19tMSwgX19tMik7CisgfQorIAorIC8qIEFkZCB0aGUgMTYtYml0IHZh bHVlcyBpbiBNMSB0byB0aGUgMTYtYml0IHZhbHVlcyBpbiBNMi4gICovCistc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0 dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHcgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlf X20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wYWRkdyAoX19tNjQgX19tMSwg X19tNjQgX19tMikKKyB7CisgICByZXR1cm4gX21tX2FkZF9waTE2IChfX20xLCBfX20yKTsKKyB9 CisgCisgLyogQWRkIHRoZSAzMi1iaXQgdmFsdWVzIGluIE0xIHRvIHRoZSAzMi1iaXQgdmFsdWVz IGluIE0yLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9hZGRfcGkzMiAoX19tNjQgX19t MSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wYWRk ZCAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUg X19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tX3BhZGRkIChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1f YWRkX3BpMzIgKF9fbTEsIF9fbTIpOworIH0KKyAKKyAvKiBBZGQgdGhlIDY0LWJpdCB2YWx1ZXMg aW4gTTEgdG8gdGhlIDY0LWJpdCB2YWx1ZXMgaW4gTTIuICAqLworLXN0YXRpYyBfX2lubGluZSBf X202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX2FkZF9zaTY0IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiAo X19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhZGRxICgobG9uZyBsb25nKV9fbTEsIChsb25nIGxvbmcp X19tMik7CitAQCAtMzEyLDEzICszMTIsMTMgQEAgX21tX2FkZF9zaTY0IChfX202NCBfX20xLCBf X202NCBfX20yKQorIAorIC8qIEFkZCB0aGUgOC1iaXQgdmFsdWVzIGluIE0xIHRvIHRoZSA4LWJp dCB2YWx1ZXMgaW4gTTIgdXNpbmcgc2lnbmVkCisgICAgc2F0dXJhdGVkIGFyaXRobWV0aWMuICAq LworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2FkZHNfcGk4IChfX202NCBfX20xLCBfX202NCBf X20yKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BhZGRzYiAoKF9fdjhx aSlfX20xLCAoX192OHFpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3Bh ZGRzYiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gX21tX2FkZHNfcGk4 IChfX20xLCBfX20yKTsKK0BAIC0zMjYsMTMgKzMyNiwxMyBAQCBfbV9wYWRkc2IgKF9fbTY0IF9f bTEsIF9fbTY0IF9fbTIpCisgCisgLyogQWRkIHRoZSAxNi1iaXQgdmFsdWVzIGluIE0xIHRvIHRo ZSAxNi1iaXQgdmFsdWVzIGluIE0yIHVzaW5nIHNpZ25lZAorICAgIHNhdHVyYXRlZCBhcml0aG1l dGljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9hZGRzX3BpMTYgKF9fbTY0IF9fbTEs IF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGFkZHN3 ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBf X202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21fcGFkZHN3IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1f YWRkc19waTE2IChfX20xLCBfX20yKTsKK0BAIC0zNDAsMTMgKzM0MCwxMyBAQCBfbV9wYWRkc3cg KF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgCisgLyogQWRkIHRoZSA4LWJpdCB2YWx1ZXMgaW4g TTEgdG8gdGhlIDgtYml0IHZhbHVlcyBpbiBNMiB1c2luZyB1bnNpZ25lZAorICAgIHNhdHVyYXRl ZCBhcml0aG1ldGljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9hZGRzX3B1OCAoX19t NjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEz Ml9wYWRkdXNiICgoX192OHFpKV9fbTEsIChfX3Y4cWkpX19tMik7CisgfQorIAorLXN0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGlj IF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21fcGFkZHVzYiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICBy ZXR1cm4gX21tX2FkZHNfcHU4IChfX20xLCBfX20yKTsKK0BAIC0zNTQsNTkgKzM1NCw1OSBAQCBf bV9wYWRkdXNiIChfX202NCBfX20xLCBfX202NCBfX20yKQorIAorIC8qIEFkZCB0aGUgMTYtYml0 IHZhbHVlcyBpbiBNMSB0byB0aGUgMTYtYml0IHZhbHVlcyBpbiBNMiB1c2luZyB1bnNpZ25lZAor ICAgIHNhdHVyYXRlZCBhcml0aG1ldGljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9h ZGRzX3B1MTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkg X19idWlsdGluX2lhMzJfcGFkZHVzdyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworIH0K KyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BhZGR1c3cgKF9fbTY0IF9fbTEsIF9fbTY0IF9f bTIpCisgeworICAgcmV0dXJuIF9tbV9hZGRzX3B1MTYgKF9fbTEsIF9fbTIpOworIH0KKyAKKyAv KiBTdWJ0cmFjdCB0aGUgOC1iaXQgdmFsdWVzIGluIE0yIGZyb20gdGhlIDgtYml0IHZhbHVlcyBp biBNMS4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3ViX3BpOCAoX19tNjQgX19tMSwg X19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3ViYiAo KF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19t NjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tX3BzdWJiIChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1fc3Vi X3BpOCAoX19tMSwgX19tMik7CisgfQorIAorIC8qIFN1YnRyYWN0IHRoZSAxNi1iaXQgdmFsdWVz IGluIE0yIGZyb20gdGhlIDE2LWJpdCB2YWx1ZXMgaW4gTTEuICAqLworLXN0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21tX3N1Yl9waTE2IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVy biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19t Mik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcHN1YncgKF9fbTY0IF9fbTEsIF9f bTY0IF9fbTIpCisgeworICAgcmV0dXJuIF9tbV9zdWJfcGkxNiAoX19tMSwgX19tMik7CisgfQor IAorIC8qIFN1YnRyYWN0IHRoZSAzMi1iaXQgdmFsdWVzIGluIE0yIGZyb20gdGhlIDMyLWJpdCB2 YWx1ZXMgaW4gTTEuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N1Yl9waTMyIChfX202 NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMy X3BzdWJkICgoX192MnNpKV9fbTEsIChfX3Yyc2kpX19tMik7CisgfQorIAorLXN0YXRpYyBfX2lu bGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9f aW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21fcHN1YmQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJu IF9tbV9zdWJfcGkzMiAoX19tMSwgX19tMik7CisgfQorIAorIC8qIEFkZCB0aGUgNjQtYml0IHZh bHVlcyBpbiBNMSB0byB0aGUgNjQtYml0IHZhbHVlcyBpbiBNMi4gICovCistc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fc3ViX3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0 dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHN1YnEgKChsb25nIGxvbmcpX19tMSwgKGxvbmcg bG9uZylfX20yKTsKK0BAIC00MTQsMTMgKzQxNCwxMyBAQCBfbW1fc3ViX3NpNjQgKF9fbTY0IF9f bTEsIF9fbTY0IF9fbTIpCisgCisgLyogU3VidHJhY3QgdGhlIDgtYml0IHZhbHVlcyBpbiBNMiBm cm9tIHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTEgdXNpbmcgc2lnbmVkCisgICAgc2F0dXJhdGluZyBh cml0aG1ldGljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zdWJzX3BpOCAoX19tNjQg X19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9w c3Vic2IgKChfX3Y4cWkpX19tMSwgKF9fdjhxaSlfX20yKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbV9wc3Vic2IgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJu IF9tbV9zdWJzX3BpOCAoX19tMSwgX19tMik7CitAQCAtNDI4LDEzICs0MjgsMTMgQEAgX21fcHN1 YnNiIChfX202NCBfX20xLCBfX202NCBfX20yKQorIAorIC8qIFN1YnRyYWN0IHRoZSAxNi1iaXQg dmFsdWVzIGluIE0yIGZyb20gdGhlIDE2LWJpdCB2YWx1ZXMgaW4gTTEgdXNpbmcKKyAgICBzaWdu ZWQgc2F0dXJhdGluZyBhcml0aG1ldGljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9z dWJzX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkg X19idWlsdGluX2lhMzJfcHN1YnN3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19tMik7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcHN1YnN3IChfX202NCBfX20xLCBfX202NCBfX20y KQorIHsKKyAgIHJldHVybiBfbW1fc3Vic19waTE2IChfX20xLCBfX20yKTsKK0BAIC00NDIsMTMg KzQ0MiwxMyBAQCBfbV9wc3Vic3cgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgCisgLyogU3Vi dHJhY3QgdGhlIDgtYml0IHZhbHVlcyBpbiBNMiBmcm9tIHRoZSA4LWJpdCB2YWx1ZXMgaW4gTTEg dXNpbmcKKyAgICB1bnNpZ25lZCBzYXR1cmF0aW5nIGFyaXRobWV0aWMuICAqLworLXN0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGlj IF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX3N1YnNfcHU4IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAg IHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1c2IgKChfX3Y4cWkpX19tMSwgKF9f djhxaSlfX20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wc3VidXNiIChfX202 NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1fc3Vic19wdTggKF9fbTEsIF9f bTIpOworQEAgLTQ1NiwxMyArNDU2LDEzIEBAIF9tX3BzdWJ1c2IgKF9fbTY0IF9fbTEsIF9fbTY0 IF9fbTIpCisgCisgLyogU3VidHJhY3QgdGhlIDE2LWJpdCB2YWx1ZXMgaW4gTTIgZnJvbSB0aGUg MTYtYml0IHZhbHVlcyBpbiBNMSB1c2luZworICAgIHVuc2lnbmVkIHNhdHVyYXRpbmcgYXJpdGht ZXRpYy4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3Vic19wdTE2IChfX202NCBfX20x LCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzdWJ1 c3cgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbV9wc3VidXN3IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBf bW1fc3Vic19wdTE2IChfX20xLCBfX20yKTsKK0BAIC00NzEsMTMgKzQ3MSwxMyBAQCBfbV9wc3Vi dXN3IChfX202NCBfX20xLCBfX202NCBfX20yKQorIC8qIE11bHRpcGx5IGZvdXIgMTYtYml0IHZh bHVlcyBpbiBNMSBieSBmb3VyIDE2LWJpdCB2YWx1ZXMgaW4gTTIgcHJvZHVjaW5nCisgICAgZm91 ciAzMi1iaXQgaW50ZXJtZWRpYXRlIHJlc3VsdHMsIHdoaWNoIGFyZSB0aGVuIHN1bW1lZCBieSBw YWlycyB0bworICAgIHByb2R1Y2UgdHdvIDMyLWJpdCByZXN1bHRzLiAgKi8KKy1zdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9tYWRkX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAg cmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcG1hZGR3ZCAoKF9fdjRoaSlfX20xLCAoX192 NGhpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BtYWRkd2QgKF9fbTY0 IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIF9tbV9tYWRkX3BpMTYgKF9fbTEsIF9f bTIpOworQEAgLTQ4NSwxMyArNDg1LDEzIEBAIF9tX3BtYWRkd2QgKF9fbTY0IF9fbTEsIF9fbTY0 IF9fbTIpCisgCisgLyogTXVsdGlwbHkgZm91ciBzaWduZWQgMTYtYml0IHZhbHVlcyBpbiBNMSBi eSBmb3VyIHNpZ25lZCAxNi1iaXQgdmFsdWVzIGluCisgICAgTTIgYW5kIHByb2R1Y2UgdGhlIGhp Z2ggMTYgYml0cyBvZiB0aGUgMzItYml0IHJlc3VsdHMuICAqLworLXN0YXRpYyBfX2lubGluZSBf X202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX211bGhpX3BpMTYgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJu IChfX202NCkgX19idWlsdGluX2lhMzJfcG11bGh3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19t Mik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcG11bGh3IChfX202NCBfX20xLCBf X202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1fbXVsaGlfcGkxNiAoX19tMSwgX19tMik7CitA QCAtNDk5LDIyNiArNDk5LDIyNiBAQCBfbV9wbXVsaHcgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIp CisgCisgLyogTXVsdGlwbHkgZm91ciAxNi1iaXQgdmFsdWVzIGluIE0xIGJ5IGZvdXIgMTYtYml0 IHZhbHVlcyBpbiBNMiBhbmQgcHJvZHVjZQorICAgIHRoZSBsb3cgMTYgYml0cyBvZiB0aGUgcmVz dWx0cy4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbXVsbG9fcGkxNiAoX19tNjQgX19t MSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbXVs bHcgKChfX3Y0aGkpX19tMSwgKF9fdjRoaSlfX20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbV9wbXVsbHcgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIF9t bV9tdWxsb19waTE2IChfX20xLCBfX20yKTsKKyB9CisgCisgLyogU2hpZnQgZm91ciAxNi1iaXQg dmFsdWVzIGluIE0gbGVmdCBieSBDT1VOVC4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1f c2xsX3BpMTYgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKKyB7CisgICByZXR1cm4gKF9fbTY0 KSBfX2J1aWx0aW5faWEzMl9wc2xsdyAoKF9fdjRoaSlfX20sIChsb25nIGxvbmcpX19jb3VudCk7 CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcHNsbHcgKF9fbTY0IF9fbSwgX19tNjQg X19jb3VudCkKKyB7CisgICByZXR1cm4gX21tX3NsbF9waTE2IChfX20sIF9fY291bnQpOworIH0K KyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zbGxpX3BpMTYgKF9fbTY0IF9fbSwgaW50IF9f Y291bnQpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNsbHcgKChfX3Y0 aGkpX19tLCBfX2NvdW50KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wc2xsd2kg KF9fbTY0IF9fbSwgaW50IF9fY291bnQpCisgeworICAgcmV0dXJuIF9tbV9zbGxpX3BpMTYgKF9f bSwgX19jb3VudCk7CisgfQorIAorIC8qIFNoaWZ0IHR3byAzMi1iaXQgdmFsdWVzIGluIE0gbGVm dCBieSBDT1VOVC4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2xsX3BpMzIgKF9fbTY0 IF9fbSwgX19tNjQgX19jb3VudCkKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEz Ml9wc2xsZCAoKF9fdjJzaSlfX20sIChsb25nIGxvbmcpX19jb3VudCk7CisgfQorIAorLXN0YXRp YyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21fcHNsbGQgKF9fbTY0IF9fbSwgX19tNjQgX19jb3VudCkKKyB7Cisg ICByZXR1cm4gX21tX3NsbF9waTMyIChfX20sIF9fY291bnQpOworIH0KKyAKKy1zdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9zbGxpX3BpMzIgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCisgeworICAg cmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNsbGQgKChfX3Yyc2kpX19tLCBfX2NvdW50 KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wc2xsZGkgKF9fbTY0IF9fbSwgaW50 IF9fY291bnQpCisgeworICAgcmV0dXJuIF9tbV9zbGxpX3BpMzIgKF9fbSwgX19jb3VudCk7Cisg fQorIAorIC8qIFNoaWZ0IHRoZSA2NC1iaXQgdmFsdWUgaW4gTSBsZWZ0IGJ5IENPVU5ULiAgKi8K Ky1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zbGxfc2k2NCAoX19tNjQgX19tLCBfX202NCBfX2Nv dW50KQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzbGxxICgobG9uZyBs b25nKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9f bTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUg X19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbV9wc2xscSAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQorIHsKKyAgIHJldHVybiBfbW1f c2xsX3NpNjQgKF9fbSwgX19jb3VudCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0 IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21t X3NsbGlfc2k2NCAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKKyB7CisgICByZXR1cm4gKF9fbTY0 KSBfX2J1aWx0aW5faWEzMl9wc2xscSAoKGxvbmcgbG9uZylfX20sIChsb25nIGxvbmcpX19jb3Vu dCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcHNsbHFpIChfX202NCBfX20sIGlu dCBfX2NvdW50KQorIHsKKyAgIHJldHVybiBfbW1fc2xsaV9zaTY0IChfX20sIF9fY291bnQpOwor IH0KKyAKKyAvKiBTaGlmdCBmb3VyIDE2LWJpdCB2YWx1ZXMgaW4gTSByaWdodCBieSBDT1VOVDsg c2hpZnQgaW4gdGhlIHNpZ24gYml0LiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zcmFf cGkxNiAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9f YnVpbHRpbl9pYTMyX3BzcmF3ICgoX192NGhpKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKKyB9 CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wc3JhdyAoX19tNjQgX19tLCBfX202NCBfX2Nv dW50KQorIHsKKyAgIHJldHVybiBfbW1fc3JhX3BpMTYgKF9fbSwgX19jb3VudCk7CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NyYWlfcGkxNiAoX19tNjQgX19tLCBpbnQgX19jb3Vu dCkKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JhdyAoKF9fdjRoaSlf X20sIF9fY291bnQpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BzcmF3aSAoX19t NjQgX19tLCBpbnQgX19jb3VudCkKKyB7CisgICByZXR1cm4gX21tX3NyYWlfcGkxNiAoX19tLCBf X2NvdW50KTsKKyB9CisgCisgLyogU2hpZnQgdHdvIDMyLWJpdCB2YWx1ZXMgaW4gTSByaWdodCBi eSBDT1VOVDsgc2hpZnQgaW4gdGhlIHNpZ24gYml0LiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19t NjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9zcmFfcGkzMiAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQorIHsKKyAgIHJldHVybiAo X19tNjQpIF9fYnVpbHRpbl9pYTMyX3BzcmFkICgoX192MnNpKV9fbSwgKGxvbmcgbG9uZylfX2Nv dW50KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wc3JhZCAoX19tNjQgX19tLCBf X202NCBfX2NvdW50KQorIHsKKyAgIHJldHVybiBfbW1fc3JhX3BpMzIgKF9fbSwgX19jb3VudCk7 CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NyYWlfcGkzMiAoX19tNjQgX19tLCBp bnQgX19jb3VudCkKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3JhZCAo KF9fdjJzaSlfX20sIF9fY291bnQpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3Bz cmFkaSAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKKyB7CisgICByZXR1cm4gX21tX3NyYWlfcGkz MiAoX19tLCBfX2NvdW50KTsKKyB9CisgCisgLyogU2hpZnQgZm91ciAxNi1iaXQgdmFsdWVzIGlu IE0gcmlnaHQgYnkgQ09VTlQ7IHNoaWZ0IGluIHplcm9zLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUg X19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tbV9zcmxfcGkxNiAoX19tNjQgX19tLCBfX202NCBfX2NvdW50KQorIHsKKyAgIHJldHVy biAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3Bzcmx3ICgoX192NGhpKV9fbSwgKGxvbmcgbG9uZylf X2NvdW50KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wc3JsdyAoX19tNjQgX19t LCBfX202NCBfX2NvdW50KQorIHsKKyAgIHJldHVybiBfbW1fc3JsX3BpMTYgKF9fbSwgX19jb3Vu dCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NybGlfcGkxNiAoX19tNjQgX19t LCBpbnQgX19jb3VudCkKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wc3Js dyAoKF9fdjRoaSlfX20sIF9fY291bnQpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202 NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9t X3Bzcmx3aSAoX19tNjQgX19tLCBpbnQgX19jb3VudCkKKyB7CisgICByZXR1cm4gX21tX3NybGlf cGkxNiAoX19tLCBfX2NvdW50KTsKKyB9CisgCisgLyogU2hpZnQgdHdvIDMyLWJpdCB2YWx1ZXMg aW4gTSByaWdodCBieSBDT1VOVDsgc2hpZnQgaW4gemVyb3MuICAqLworLXN0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21tX3NybF9waTMyIChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCisgeworICAgcmV0 dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNybGQgKChfX3Yyc2kpX19tLCAobG9uZyBsb25n KV9fY291bnQpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BzcmxkIChfX202NCBf X20sIF9fbTY0IF9fY291bnQpCisgeworICAgcmV0dXJuIF9tbV9zcmxfcGkzMiAoX19tLCBfX2Nv dW50KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3JsaV9waTMyIChfX202NCBf X20sIGludCBfX2NvdW50KQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3Bz cmxkICgoX192MnNpKV9fbSwgX19jb3VudCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202 NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9f bTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21fcHNybGRpIChfX202NCBfX20sIGludCBfX2NvdW50KQorIHsKKyAgIHJldHVybiBfbW1fc3Js aV9waTMyIChfX20sIF9fY291bnQpOworIH0KKyAKKyAvKiBTaGlmdCB0aGUgNjQtYml0IHZhbHVl IGluIE0gbGVmdCBieSBDT1VOVDsgc2hpZnQgaW4gemVyb3MuICAqLworLXN0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21tX3NybF9zaTY0IChfX202NCBfX20sIF9fbTY0IF9fY291bnQpCisgeworICAgcmV0 dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNybHEgKChsb25nIGxvbmcpX19tLCAobG9uZyBs b25nKV9fY291bnQpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BzcmxxIChfX202 NCBfX20sIF9fbTY0IF9fY291bnQpCisgeworICAgcmV0dXJuIF9tbV9zcmxfc2k2NCAoX19tLCBf X2NvdW50KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3JsaV9zaTY0IChfX202 NCBfX20sIGludCBfX2NvdW50KQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMy X3BzcmxxICgobG9uZyBsb25nKV9fbSwgKGxvbmcgbG9uZylfX2NvdW50KTsKKyB9CisgCistc3Rh dGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytz dGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKKyBfbV9wc3JscWkgKF9fbTY0IF9fbSwgaW50IF9fY291bnQpCisgewor ICAgcmV0dXJuIF9tbV9zcmxpX3NpNjQgKF9fbSwgX19jb3VudCk7CisgfQorIAorIC8qIEJpdC13 aXNlIEFORCB0aGUgNjQtYml0IHZhbHVlcyBpbiBNMSBhbmQgTTIuICAqLworLXN0YXRpYyBfX2lu bGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9f aW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX2FuZF9zaTY0IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJl dHVybiBfX2J1aWx0aW5faWEzMl9wYW5kIChfX20xLCBfX20yKTsKKyB9CisgCistc3RhdGljIF9f aW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMg X19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKKyBfbV9wYW5kIChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVy biBfbW1fYW5kX3NpNjQgKF9fbTEsIF9fbTIpOworQEAgLTcyNiwzOSArNzI2LDM5IEBAIF9tX3Bh bmQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgCisgLyogQml0LXdpc2UgY29tcGxlbWVudCB0 aGUgNjQtYml0IHZhbHVlIGluIE0xIGFuZCBiaXQtd2lzZSBBTkQgaXQgd2l0aCB0aGUKKyAgICA2 NC1iaXQgdmFsdWUgaW4gTTIuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2FuZG5vdF9z aTY0IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEz Ml9wYW5kbiAoX19tMSwgX19tMik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcGFu ZG4gKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIF9tbV9hbmRub3Rfc2k2 NCAoX19tMSwgX19tMik7CisgfQorIAorIC8qIEJpdC13aXNlIGluY2x1c2l2ZSBPUiB0aGUgNjQt Yml0IHZhbHVlcyBpbiBNMSBhbmQgTTIuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX29y X3NpNjQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9p YTMyX3BvciAoX19tMSwgX19tMik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcG9y IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1fb3Jfc2k2NCAoX19t MSwgX19tMik7CisgfQorIAorIC8qIEJpdC13aXNlIGV4Y2x1c2l2ZSBPUiB0aGUgNjQtYml0IHZh bHVlcyBpbiBNMSBhbmQgTTIuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3hvcl9zaTY0 IChfX202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9w eG9yIChfX20xLCBfX20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9weG9yIChf X202NCBfX20xLCBfX202NCBfX20yKQorIHsKKyAgIHJldHVybiBfbW1feG9yX3NpNjQgKF9fbTEs IF9fbTIpOworQEAgLTc2NiwyNSArNzY2LDI1IEBAIF9tX3B4b3IgKF9fbTY0IF9fbTEsIF9fbTY0 IF9fbTIpCisgCisgLyogQ29tcGFyZSBlaWdodCA4LWJpdCB2YWx1ZXMuICBUaGUgcmVzdWx0IG9m IHRoZSBjb21wYXJpc29uIGlzIDB4RkYgaWYgdGhlCisgICAgdGVzdCBpcyB0cnVlIGFuZCB6ZXJv IGlmIGZhbHNlLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBlcV9waTggKF9fbTY0 IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf cGNtcGVxYiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tX3BjbXBlcWIgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0 dXJuIF9tbV9jbXBlcV9waTggKF9fbTEsIF9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUg X19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tbV9jbXBndF9waTggKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJu IChfX202NCkgX19idWlsdGluX2lhMzJfcGNtcGd0YiAoKF9fdjhxaSlfX20xLCAoX192OHFpKV9f bTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BjbXBndGIgKF9fbTY0IF9fbTEs IF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIF9tbV9jbXBndF9waTggKF9fbTEsIF9fbTIpOwor QEAgLTc5MiwyNSArNzkyLDI1IEBAIF9tX3BjbXBndGIgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIp CisgCisgLyogQ29tcGFyZSBmb3VyIDE2LWJpdCB2YWx1ZXMuICBUaGUgcmVzdWx0IG9mIHRoZSBj b21wYXJpc29uIGlzIDB4RkZGRiBpZgorICAgIHRoZSB0ZXN0IGlzIHRydWUgYW5kIHplcm8gaWYg ZmFsc2UuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcGVxX3BpMTYgKF9fbTY0IF9f bTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcGNt cGVxdyAoKF9fdjRoaSlfX20xLCAoX192NGhpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQorIF9tX3BjbXBlcXcgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJu IF9tbV9jbXBlcV9waTE2IChfX20xLCBfX20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9f bTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUg X19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fY21wZ3RfcGkxNiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4g KF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZ3R3ICgoX192NGhpKV9fbTEsIChfX3Y0aGkpX19t Mik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcGNtcGd0dyAoX19tNjQgX19tMSwg X19tNjQgX19tMikKKyB7CisgICByZXR1cm4gX21tX2NtcGd0X3BpMTYgKF9fbTEsIF9fbTIpOwor QEAgLTgxOCw1MyArODE4LDUzIEBAIF9tX3BjbXBndHcgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIp CisgCisgLyogQ29tcGFyZSB0d28gMzItYml0IHZhbHVlcy4gIFRoZSByZXN1bHQgb2YgdGhlIGNv bXBhcmlzb24gaXMgMHhGRkZGRkZGRiBpZgorICAgIHRoZSB0ZXN0IGlzIHRydWUgYW5kIHplcm8g aWYgZmFsc2UuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcGVxX3BpMzIgKF9fbTY0 IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJf cGNtcGVxZCAoKF9fdjJzaSlfX20xLCAoX192MnNpKV9fbTIpOworIH0KKyAKKy1zdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tX3BjbXBlcWQgKF9fbTY0IF9fbTEsIF9fbTY0IF9fbTIpCisgeworICAgcmV0 dXJuIF9tbV9jbXBlcV9waTMyIChfX20xLCBfX20yKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fY21wZ3RfcGkzMiAoX19tNjQgX19tMSwgX19tNjQgX19tMikKKyB7CisgICByZXR1 cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wY21wZ3RkICgoX192MnNpKV9fbTEsIChfX3Yyc2kp X19tMik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcGNtcGd0ZCAoX19tNjQgX19t MSwgX19tNjQgX19tMikKKyB7CisgICByZXR1cm4gX21tX2NtcGd0X3BpMzIgKF9fbTEsIF9fbTIp OworIH0KKyAKKyAvKiBDcmVhdGVzIGEgNjQtYml0IHplcm8uICAqLworLXN0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21tX3NldHplcm9fc2k2NCAodm9pZCkKKyB7CisgICByZXR1cm4gKF9fbTY0KTBMTDsK KyB9CisgCisgLyogQ3JlYXRlcyBhIHZlY3RvciBvZiB0d28gMzItYml0IHZhbHVlczsgSTAgaXMg bGVhc3Qgc2lnbmlmaWNhbnQuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldF9waTMy IChpbnQgX19pMSwgaW50IF9faTApCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lh MzJfdmVjX2luaXRfdjJzaSAoX19pMCwgX19pMSk7CisgfQorIAorIC8qIENyZWF0ZXMgYSB2ZWN0 b3Igb2YgZm91ciAxNi1iaXQgdmFsdWVzOyBXMCBpcyBsZWFzdCBzaWduaWZpY2FudC4gICovCist c3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkK KytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2V0X3BpMTYgKHNob3J0IF9fdzMsIHNob3J0IF9fdzIs IHNob3J0IF9fdzEsIHNob3J0IF9fdzApCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGlu X2lhMzJfdmVjX2luaXRfdjRoaSAoX193MCwgX193MSwgX193MiwgX193Myk7CisgfQorIAorIC8q IENyZWF0ZXMgYSB2ZWN0b3Igb2YgZWlnaHQgOC1iaXQgdmFsdWVzOyBCMCBpcyBsZWFzdCBzaWdu aWZpY2FudC4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2V0X3BpOCAoY2hhciBfX2I3 LCBjaGFyIF9fYjYsIGNoYXIgX19iNSwgY2hhciBfX2I0LAorIAkgICAgIGNoYXIgX19iMywgY2hh ciBfX2IyLCBjaGFyIF9fYjEsIGNoYXIgX19iMCkKKyB7CitAQCAtODczLDE5ICs4NzMsMTkgQEAg X21tX3NldF9waTggKGNoYXIgX19iNywgY2hhciBfX2I2LCBjaGFyIAorIH0KKyAKKyAvKiBTaW1p bGFyLCBidXQgd2l0aCB0aGUgYXJndW1lbnRzIGluIHJldmVyc2Ugb3JkZXIuICAqLworLXN0YXRp YyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX3NldHJfcGkzMiAoaW50IF9faTAsIGludCBfX2kxKQorIHsKKyAg IHJldHVybiBfbW1fc2V0X3BpMzIgKF9faTEsIF9faTApOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQorIF9tbV9zZXRyX3BpMTYgKHNob3J0IF9fdzAsIHNob3J0IF9fdzEsIHNob3J0IF9fdzIs IHNob3J0IF9fdzMpCisgeworICAgcmV0dXJuIF9tbV9zZXRfcGkxNiAoX193MywgX193MiwgX193 MSwgX193MCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldHJfcGk4IChjaGFy IF9fYjAsIGNoYXIgX19iMSwgY2hhciBfX2IyLCBjaGFyIF9fYjMsCisgCSAgICAgIGNoYXIgX19i NCwgY2hhciBfX2I1LCBjaGFyIF9fYjYsIGNoYXIgX19iNykKKyB7CitAQCAtODkzLDIxICs4OTMs MjEgQEAgX21tX3NldHJfcGk4IChjaGFyIF9fYjAsIGNoYXIgX19iMSwgY2hhcgorIH0KKyAKKyAv KiBDcmVhdGVzIGEgdmVjdG9yIG9mIHR3byAzMi1iaXQgdmFsdWVzLCBib3RoIGVsZW1lbnRzIGNv bnRhaW5pbmcgSS4gICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2V0MV9waTMyIChpbnQg X19pKQorIHsKKyAgIHJldHVybiBfbW1fc2V0X3BpMzIgKF9faSwgX19pKTsKKyB9CisgCisgLyog Q3JlYXRlcyBhIHZlY3RvciBvZiBmb3VyIDE2LWJpdCB2YWx1ZXMsIGFsbCBlbGVtZW50cyBjb250 YWluaW5nIFcuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldDFfcGkxNiAoc2hvcnQg X193KQorIHsKKyAgIHJldHVybiBfbW1fc2V0X3BpMTYgKF9fdywgX193LCBfX3csIF9fdyk7Cisg fQorIAorIC8qIENyZWF0ZXMgYSB2ZWN0b3Igb2YgZWlnaHQgOC1iaXQgdmFsdWVzLCBhbGwgZWxl bWVudHMgY29udGFpbmluZyBCLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXQxX3Bp OCAoY2hhciBfX2IpCisgeworICAgcmV0dXJuIF9tbV9zZXRfcGk4IChfX2IsIF9fYiwgX19iLCBf X2IsIF9fYiwgX19iLCBfX2IsIF9fYik7CistLS0gZ2NjL2NvbmZpZy9pMzg2L3BtbWludHJpbi5o LmpqCTIwMDctMDYtMjYgMTM6Mzg6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjL2NvbmZpZy9p Mzg2L3BtbWludHJpbi5oCTIwMDctMDktMjUgMTU6MDE6NTIuMDAwMDAwMDAwICswMjAwCitAQCAt NDgsNzkgKzQ4LDc5IEBACisgI2RlZmluZSBfTU1fR0VUX0RFTk9STUFMU19aRVJPX01PREUoKSBc CisgICAoX21tX2dldGNzcigpICYgX01NX0RFTk9STUFMU19aRVJPX01BU0spCisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9hZGRzdWJfcHMgKF9fbTEyOCBfX1gsIF9fbTEyOCBfX1kpCisg eworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2FkZHN1YnBzICgoX192NHNmKV9f WCwgKF9fdjRzZilfX1kpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2hhZGRf cHMgKF9fbTEyOCBfX1gsIF9fbTEyOCBfX1kpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVp bHRpbl9pYTMyX2hhZGRwcyAoKF9fdjRzZilfX1gsIChfX3Y0c2YpX19ZKTsKKyB9CisgCistc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9oc3ViX3BzIChfX20xMjggX19YLCBfX20xMjggX19ZKQor IHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9oc3VicHMgKChfX3Y0c2YpX19Y LCAoX192NHNmKV9fWSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbW92ZWhk dXBfcHMgKF9fbTEyOCBfX1gpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMy X21vdnNoZHVwICgoX192NHNmKV9fWCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjgg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20x MjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fbW92ZWxkdXBfcHMgKF9fbTEyOCBfX1gpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVp bHRpbl9pYTMyX21vdnNsZHVwICgoX192NHNmKV9fWCk7CisgfQorIAorLXN0YXRpYyBfX2lubGlu ZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9hZGRzdWJfcGQgKF9fbTEyOGQgX19YLCBfX20xMjhkIF9fWSkKKyB7Cisg ICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX2FkZHN1YnBkICgoX192MmRmKV9fWCwg KF9fdjJkZilfX1kpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1faGFkZF9w ZCAoX19tMTI4ZCBfX1gsIF9fbTEyOGQgX19ZKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZCkgX19i dWlsdGluX2lhMzJfaGFkZHBkICgoX192MmRmKV9fWCwgKF9fdjJkZilfX1kpOworIH0KKyAKKy1z dGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1faHN1Yl9wZCAoX19tMTI4ZCBfX1gsIF9fbTEyOGQg X19ZKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfaHN1YnBkICgoX192 MmRmKV9fWCwgKF9fdjJkZilfX1kpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEy OGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fbG9hZGR1cF9wZCAoZG91YmxlIGNvbnN0ICpfX1ApCisgeworICAgcmV0dXJuIF9tbV9sb2Fk MV9wZCAoX19QKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX21vdmVkdXBf cGQgKF9fbTEyOGQgX19YKQorIHsKKyAgIHJldHVybiBfbW1fc2h1ZmZsZV9wZCAoX19YLCBfX1gs IF9NTV9TSFVGRkxFMiAoMCwwKSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4 aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9t bV9sZGRxdV9zaTEyOCAoX19tMTI4aSBjb25zdCAqX19QKQorIHsKKyAgIHJldHVybiAoX19tMTI4 aSkgX19idWlsdGluX2lhMzJfbGRkcXUgKChjaGFyIGNvbnN0ICopX19QKTsKKyB9CisgCistc3Rh dGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX21vbml0b3IgKHZvaWQgY29uc3QgKiBfX1AsIHVuc2lnbmVkIGlu dCBfX0UsIHVuc2lnbmVkIGludCBfX0gpCisgeworICAgX19idWlsdGluX2lhMzJfbW9uaXRvciAo X19QLCBfX0UsIF9fSCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9td2FpdCAodW5z aWduZWQgaW50IF9fRSwgdW5zaWduZWQgaW50IF9fSCkKKyB7CisgICBfX2J1aWx0aW5faWEzMl9t d2FpdCAoX19FLCBfX0gpOworLS0tIGdjYy9jb25maWcvaTM4Ni9tbTNkbm93LmguamoJMjAwNy0w Mi0yMCAyMjozODo1OS4wMDAwMDAwMDAgKzAxMDAKKysrKyBnY2MvY29uZmlnL2kzODYvbW0zZG5v dy5oCTIwMDctMDktMjUgMTU6MDE6NTIuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAK Ky0vKiBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisr LyogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LgorIAorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKyAKKy0tLSBnY2MvY29uZmlnL2kz ODYveG1taW50cmluLmguamoJMjAwNy0wNi0yNiAxMzozODo0Ni4wMDAwMDAwMDAgKzAyMDAKKysr KyBnY2MvY29uZmlnL2kzODYveG1taW50cmluLmgJMjAwNy0wOS0yNSAxNTowNjo0Ny4wMDAwMDAw MDAgKzAyMDAKK0BAIC04OCw3ICs4OCw3IEBAIGVudW0gX21tX2hpbnQKKyAjZGVmaW5lIF9NTV9G TFVTSF9aRVJPX09GRiAgICAweDAwMDAKKyAKKyAvKiBDcmVhdGUgYSB2ZWN0b3Igb2YgemVyb3Mu ICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2V0emVyb19wcyAodm9pZCkKKyB7Cisg ICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tMTI4KXsgMC4wZiwgMC4wZiwgMC4wZiwgMC4wZiB9 OworQEAgLTk4LDU1ICs5OCw1NSBAQCBfbW1fc2V0emVyb19wcyAodm9pZCkKKyAgICBmbG9hdGlu Zy1wb2ludCkgdmFsdWVzIG9mIEEgYW5kIEI7IHRoZSB1cHBlciB0aHJlZSBTUEZQIHZhbHVlcyBh cmUKKyAgICBwYXNzZWQgdGhyb3VnaCBmcm9tIEEuICAqLworIAorLXN0YXRpYyBfX2lubGluZSBf X20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fYWRkX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiAo X19tMTI4KSBfX2J1aWx0aW5faWEzMl9hZGRzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsK KyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zdWJfc3MgKF9fbTEyOCBfX0EsIF9f bTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3N1YnNzICgo X192NHNmKV9fQSwgKF9fdjRzZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4 IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19t MTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX211bF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEy OCkgX19idWlsdGluX2lhMzJfbXVsc3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fZGl2X3NzIChfX20xMjggX19BLCBfX20xMjgg X19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9kaXZzcyAoKF9fdjRz ZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9z cXJ0X3NzIChfX20xMjggX19BKQorIHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEz Ml9zcXJ0c3MgKChfX3Y0c2YpX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEy OCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9t bV9yY3Bfc3MgKF9fbTEyOCBfX0EpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9p YTMyX3JjcHNzICgoX192NHNmKV9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjgg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20x MjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fcnNxcnRfc3MgKF9fbTEyOCBfX0EpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRp bl9pYTMyX3JzcXJ0c3MgKChfX3Y0c2YpX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9f bTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tbV9taW5fc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChf X20xMjgpIF9fYnVpbHRpbl9pYTMyX21pbnNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOwor IH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX21heF9zcyAoX19tMTI4IF9fQSwgX19t MTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbWF4c3MgKChf X3Y0c2YpX19BLCAoX192NHNmKV9fQik7CitAQCAtMTU0LDU1ICsxNTQsNTUgQEAgX21tX21heF9z cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyAKKyAvKiBQZXJmb3JtIHRoZSByZXNwZWN0aXZl IG9wZXJhdGlvbiBvbiB0aGUgZm91ciBTUEZQIHZhbHVlcyBpbiBBIGFuZCBCLiAgKi8KKyAKKy1z dGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkK KytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21tX2FkZF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikK KyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfYWRkcHMgKChfX3Y0c2YpX19B LCAoX192NHNmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3ViX3Bz IChfX20xMjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0 aW5faWEzMl9zdWJwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9tdWxfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgewor ICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX211bHBzICgoX192NHNmKV9fQSwgKF9f djRzZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2Rpdl9wcyAoX19t MTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lh MzJfZGl2cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lu bGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKKyBfbW1fc3FydF9wcyAoX19tMTI4IF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTEy OCkgX19idWlsdGluX2lhMzJfc3FydHBzICgoX192NHNmKV9fQSk7CisgfQorIAorLXN0YXRpYyBf X2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKKyBfbW1fcmNwX3BzIChfX20xMjggX19BKQorIHsKKyAgIHJldHVybiAoX19t MTI4KSBfX2J1aWx0aW5faWEzMl9yY3BwcyAoKF9fdjRzZilfX0EpOworIH0KKyAKKy1zdGF0aWMg X19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX3JzcXJ0X3BzIChfX20xMjggX19BKQorIHsKKyAgIHJldHVybiAo X19tMTI4KSBfX2J1aWx0aW5faWEzMl9yc3FydHBzICgoX192NHNmKV9fQSk7CisgfQorIAorLXN0 YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQor K3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWluX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQor IHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl9taW5wcyAoKF9fdjRzZilfX0Es IChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9tYXhfcHMg KF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRp bl9pYTMyX21heHBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOworQEAgLTIxMCwyNSArMjEw LDI1IEBAIF9tbV9tYXhfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgCisgLyogUGVyZm9y bSBsb2dpY2FsIGJpdC13aXNlIG9wZXJhdGlvbnMgb24gMTI4LWJpdCB2YWx1ZXMuICAqLworIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fYW5kX3BzIChfX20xMjggX19BLCBfX20xMjggX19C KQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9hbmRwcyAoX19BLCBfX0IpOworIH0KKyAK Ky1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2FuZG5vdF9wcyAoX19tMTI4IF9fQSwgX19tMTI4 IF9fQikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfYW5kbnBzIChfX0EsIF9fQik7Cisg fQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fb3JfcHMgKF9fbTEyOCBfX0EsIF9fbTEy OCBfX0IpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX29ycHMgKF9fQSwgX19CKTsKKyB9 CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV94b3JfcHMgKF9fbTEyOCBfX0EsIF9fbTEy OCBfX0IpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3hvcnBzIChfX0EsIF9fQik7CitA QCAtMjM4LDI1ICsyMzgsMjUgQEAgX21tX3hvcl9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikK KyAgICBjb21wYXJpc29uIGlzIHRydWUsIHBsYWNlIGEgbWFzayBvZiBhbGwgb25lcyBpbiB0aGUg cmVzdWx0LCBvdGhlcndpc2UgYQorICAgIG1hc2sgb2YgemVyb3MuICBUaGUgdXBwZXIgdGhyZWUg U1BGUCB2YWx1ZXMgYXJlIHBhc3NlZCB0aHJvdWdoIGZyb20gQS4gICovCisgCistc3RhdGljIF9f aW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGlj IF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQorIF9tbV9jbXBlcV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7Cisg ICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wZXFzcyAoKF9fdjRzZilfX0EsIChf X3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBsdF9zcyAo X19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGlu X2lhMzJfY21wbHRzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9jbXBsZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7 CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wbGVzcyAoKF9fdjRzZilfX0Es IChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBndF9z cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWls dGluX2lhMzJfbW92c3MgKChfX3Y0c2YpIF9fQSwKK0BAIC0yNjYsNyArMjY2LDcgQEAgX21tX2Nt cGd0X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIAkJCQkJCQkJX19BKSk7CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wZ2Vfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBf X0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21vdnNzICgoX192NHNm KSBfX0EsCitAQCAtMjc2LDI1ICsyNzYsMjUgQEAgX21tX2NtcGdlX3NzIChfX20xMjggX19BLCBf X20xMjggX19CKQorIAkJCQkJCQkJX19BKSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20x MjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fY21wbmVxX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiAo X19tMTI4KSBfX2J1aWx0aW5faWEzMl9jbXBuZXFzcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19C KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBubHRfc3MgKF9fbTEyOCBf X0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2Nt cG5sdHNzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX2NtcG5sZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICBy ZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wbmxlc3MgKChfX3Y0c2YpX19BLCAoX192 NHNmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wbmd0X3NzIChf X20xMjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5f aWEzMl9tb3ZzcyAoKF9fdjRzZikgX19BLAorQEAgLTMwNCw3ICszMDQsNyBAQCBfbW1fY21wbmd0 X3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIAkJCQkJCQkJIF9fQSkpOworIH0KKyAKKy1z dGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkK KytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcG5nZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9f QikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbW92c3MgKChfX3Y0c2Yp IF9fQSwKK0BAIC0zMTQsMTMgKzMxNCwxMyBAQCBfbW1fY21wbmdlX3NzIChfX20xMjggX19BLCBf X20xMjggX19CKQorIAkJCQkJCQkJIF9fQSkpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19t MTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUg X19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX2NtcG9yZF9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4g KF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wb3Jkc3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9f Qik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wdW5vcmRfc3MgKF9fbTEy OCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMy X2NtcHVub3Jkc3MgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CitAQCAtMzMwLDczICszMzAs NzMgQEAgX21tX2NtcHVub3JkX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQorICAgIGVsZW1l bnQsIGlmIHRoZSBjb21wYXJpc29uIGlzIHRydWUsIHBsYWNlIGEgbWFzayBvZiBhbGwgb25lcyBp biB0aGUKKyAgICByZXN1bHQsIG90aGVyd2lzZSBhIG1hc2sgb2YgemVyb3MuICAqLworIAorLXN0 YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQor K3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wZXFfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0Ip CisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGVxcHMgKChfX3Y0c2Yp X19BLCAoX192NHNmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21w bHRfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9f YnVpbHRpbl9pYTMyX2NtcGx0cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wbGVfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBf X0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGxlcHMgKChfX3Y0 c2YpX19BLCAoX192NHNmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjgg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1f Y21wZ3RfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgp IF9fYnVpbHRpbl9pYTMyX2NtcGd0cHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wZ2VfcHMgKF9fbTEyOCBfX0EsIF9fbTEy OCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcGdlcHMgKChf X3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjgg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20x MjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fY21wbmVxX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiAoX19t MTI4KSBfX2J1aWx0aW5faWEzMl9jbXBuZXFwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsK KyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBubHRfcHMgKF9fbTEyOCBfX0Es IF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcG5s dHBzICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUg X19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21tX2NtcG5sZV9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1 cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfY21wbmxlcHMgKChfX3Y0c2YpX19BLCAoX192NHNm KV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wbmd0X3BzIChfX20x MjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEz Ml9jbXBuZ3RwcyAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9f aW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGlj IF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQorIF9tbV9jbXBuZ2VfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgewor ICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcG5nZXBzICgoX192NHNmKV9fQSwg KF9fdjRzZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcG9yZF9w cyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWls dGluX2lhMzJfY21wb3JkcHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQorIAorLXN0 YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQor K3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wdW5vcmRfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBf X0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2NtcHVub3JkcHMgKChf X3Y0c2YpX19BLCAoX192NHNmKV9fQik7CitAQCAtNDA1LDczICs0MDUsNzMgQEAgX21tX2NtcHVu b3JkX3BzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIC8qIENvbXBhcmUgdGhlIGxvd2VyIFNQ RlAgdmFsdWVzIG9mIEEgYW5kIEIgYW5kIHJldHVybiAxIGlmIHRydWUKKyAgICBhbmQgMCBpZiBm YWxzZS4gICovCisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jb21pZXFfc3MgKF9fbTEyOCBfX0Es IF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWllcSAoKF9fdjRz ZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jb21pbHRf c3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMy X2NvbWlsdCAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tbV9jb21pbGVfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJu IF9fYnVpbHRpbl9pYTMyX2NvbWlsZSAoKF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9Cisg Cistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9jb21pZ3Rfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0Ip CisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlndCAoKF9fdjRzZilfX0EsIChfX3Y0 c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jb21pZ2Vfc3MgKF9fbTEyOCBf X0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlnZSAoKF9f djRzZilfX0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jb21p bmVxX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5f aWEzMl9jb21pbmVxICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOworIH0KKyAKKy1zdGF0aWMg X19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMg X19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX3Vjb21pZXFfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAg cmV0dXJuIF9fYnVpbHRpbl9pYTMyX3Vjb21pZXEgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7 CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fdWNvbWlsdF9zcyAoX19tMTI4IF9fQSwgX19t MTI4IF9fQikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlsdCAoKF9fdjRzZilf X0EsIChfX3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV91Y29taWxlX3Nz IChfX20xMjggX19BLCBfX20xMjggX19CKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl91 Y29taWxlICgoX192NHNmKV9fQSwgKF9fdjRzZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX3Vjb21pZ3Rfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJu IF9fYnVpbHRpbl9pYTMyX3Vjb21pZ3QgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fdWNvbWlnZV9zcyAoX19tMTI4IF9fQSwgX19tMTI4IF9f QikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlnZSAoKF9fdjRzZilfX0EsIChf X3Y0c2YpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV91Y29taW5lcV9zcyAoX19t MTI4IF9fQSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlu ZXEgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CitAQCAtNDc5LDEzICs0NzksMTMgQEAgX21t X3Vjb21pbmVxX3NzIChfX20xMjggX19BLCBfX20xMjggX19CKQorIAorIC8qIENvbnZlcnQgdGhl IGxvd2VyIFNQRlAgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdlciBhY2NvcmRpbmcgdG8gdGhlIGN1 cnJlbnQKKyAgICByb3VuZGluZyBtb2RlLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHNz X3NpMzIgKF9fbTEyOCBfX0EpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHNzMnNp ICgoX192NHNmKSBfX0EpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dF9zczJzaSAo X19tMTI4IF9fQSkKKyB7CisgICByZXR1cm4gX21tX2N2dHNzX3NpMzIgKF9fQSk7CitAQCAtNDk2 LDE0ICs0OTYsMTQgQEAgX21tX2N2dF9zczJzaSAoX19tMTI4IF9fQSkKKyAgICBjdXJyZW50IHJv dW5kaW5nIG1vZGUuICAqLworIAorIC8qIEludGVsIGludHJpbnNpYy4gICovCistc3RhdGljIF9f aW5saW5lIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRzc19zaTY0IChfX20xMjggX19BKQorIHsKKyAgIHJl dHVybiBfX2J1aWx0aW5faWEzMl9jdnRzczJzaTY0ICgoX192NHNmKSBfX0EpOworIH0KKyAKKyAv KiBNaWNyb3NvZnQgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgbG9uZyBsb25nIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgbG9uZyBs b25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX2N2dHNzX3NpNjR4IChfX20xMjggX19BKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEz Ml9jdnRzczJzaTY0ICgoX192NHNmKSBfX0EpOworQEAgLTUxMiwyNiArNTEyLDI2IEBAIF9tbV9j dnRzc19zaTY0eCAoX19tMTI4IF9fQSkKKyAKKyAvKiBDb252ZXJ0IHRoZSB0d28gbG93ZXIgU1BG UCB2YWx1ZXMgdG8gMzItYml0IGludGVnZXJzIGFjY29yZGluZyB0byB0aGUKKyAgICBjdXJyZW50 IHJvdW5kaW5nIG1vZGUuICBSZXR1cm4gdGhlIGludGVnZXJzIGluIHBhY2tlZCBmb3JtLiAgKi8K Ky1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRwc19waTMyIChfX20xMjggX19BKQorIHsKKyAg IHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX2N2dHBzMnBpICgoX192NHNmKSBfX0EpOwor IH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRfcHMycGkgKF9fbTEyOCBfX0EpCisg eworICAgcmV0dXJuIF9tbV9jdnRwc19waTMyIChfX0EpOworIH0KKyAKKyAvKiBUcnVuY2F0ZSB0 aGUgbG93ZXIgU1BGUCB2YWx1ZSB0byBhIDMyLWJpdCBpbnRlZ2VyLiAgKi8KKy1zdGF0aWMgX19p bmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21tX2N2dHRzc19zaTMyIChfX20xMjggX19BKQorIHsKKyAgIHJldHVybiBfX2J1aWx0 aW5faWEzMl9jdnR0c3Myc2kgKChfX3Y0c2YpIF9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGlu ZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fY3Z0dF9zczJzaSAoX19tMTI4IF9fQSkKKyB7CisgICByZXR1cm4gX21tX2N2dHRzc19z aTMyIChfX0EpOworQEAgLTU0MSwxNCArNTQxLDE0IEBAIF9tbV9jdnR0X3NzMnNpIChfX20xMjgg X19BKQorIC8qIFRydW5jYXRlIHRoZSBsb3dlciBTUEZQIHZhbHVlIHRvIGEgMzItYml0IGludGVn ZXIuICAqLworIAorIC8qIEludGVsIGludHJpbnNpYy4gICovCistc3RhdGljIF9faW5saW5lIGxv bmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIGxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9jdnR0c3Nfc2k2NCAoX19tMTI4IF9fQSkKKyB7CisgICByZXR1cm4gX19i dWlsdGluX2lhMzJfY3Z0dHNzMnNpNjQgKChfX3Y0c2YpIF9fQSk7CisgfQorIAorIC8qIE1pY3Jv c29mdCBpbnRyaW5zaWMuICAqLworLXN0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0 dHNzX3NpNjR4IChfX20xMjggX19BKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnR0 c3Myc2k2NCAoKF9fdjRzZikgX19BKTsKK0BAIC01NTcsMjYgKzU1NywyNiBAQCBfbW1fY3Z0dHNz X3NpNjR4IChfX20xMjggX19BKQorIAorIC8qIFRydW5jYXRlIHRoZSB0d28gbG93ZXIgU1BGUCB2 YWx1ZXMgdG8gMzItYml0IGludGVnZXJzLiAgUmV0dXJuIHRoZQorICAgIGludGVnZXJzIGluIHBh Y2tlZCBmb3JtLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnR0cHNfcGkzMiAoX19t MTI4IF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9jdnR0cHMycGkg KChfX3Y0c2YpIF9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHRfcHMy cGkgKF9fbTEyOCBfX0EpCisgeworICAgcmV0dXJuIF9tbV9jdnR0cHNfcGkzMiAoX19BKTsKKyB9 CisgCisgLyogQ29udmVydCBCIHRvIGEgU1BGUCB2YWx1ZSBhbmQgaW5zZXJ0IGl0IGFzIGVsZW1l bnQgemVybyBpbiBBLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHNpMzJfc3Mg KF9fbTEyOCBfX0EsIGludCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9p YTMyX2N2dHNpMnNzICgoX192NHNmKSBfX0EsIF9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGlu ZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fY3Z0X3NpMnNzIChfX20xMjggX19BLCBpbnQgX19CKQorIHsKKyAgIHJldHVy biBfbW1fY3Z0c2kzMl9zcyAoX19BLCBfX0IpOworQEAgLTU4NiwxNCArNTg2LDE0IEBAIF9tbV9j dnRfc2kyc3MgKF9fbTEyOCBfX0EsIGludCBfX0IpCisgLyogQ29udmVydCBCIHRvIGEgU1BGUCB2 YWx1ZSBhbmQgaW5zZXJ0IGl0IGFzIGVsZW1lbnQgemVybyBpbiBBLiAgKi8KKyAKKyAvKiBJbnRl bCBpbnRyaW5zaWMuICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0c2k2NF9zcyAo X19tMTI4IF9fQSwgbG9uZyBsb25nIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWls dGluX2lhMzJfY3Z0c2k2NDJzcyAoKF9fdjRzZikgX19BLCBfX0IpOworIH0KKyAKKyAvKiBNaWNy b3NvZnQgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHNpNjR4 X3NzIChfX20xMjggX19BLCBsb25nIGxvbmcgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4KSBf X2J1aWx0aW5faWEzMl9jdnRzaTY0MnNzICgoX192NHNmKSBfX0EsIF9fQik7CitAQCAtNjAyLDIw ICs2MDIsMjAgQEAgX21tX2N2dHNpNjR4X3NzIChfX20xMjggX19BLCBsb25nIGxvbmcgXworIAor IC8qIENvbnZlcnQgdGhlIHR3byAzMi1iaXQgdmFsdWVzIGluIEIgdG8gU1BGUCBmb3JtIGFuZCBp bnNlcnQgdGhlbQorICAgIGFzIHRoZSB0d28gbG93ZXIgZWxlbWVudHMgaW4gQS4gICovCistc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRwaTMyX3BzIChfX20xMjggX19BLCBfX202NCBfX0Ip CisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX2N2dHBpMnBzICgoX192NHNm KSBfX0EsIChfX3Yyc2kpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9j dnRfcGkycHMgKF9fbTEyOCBfX0EsIF9fbTY0IF9fQikKKyB7CisgICByZXR1cm4gX21tX2N2dHBp MzJfcHMgKF9fQSwgX19CKTsKKyB9CisgCisgLyogQ29udmVydCB0aGUgZm91ciBzaWduZWQgMTYt Yml0IHZhbHVlcyBpbiBBIHRvIFNQRlAgZm9ybS4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEy OCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9f bTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9jdnRwaTE2X3BzIChfX202NCBfX0EpCisgeworICAgX192NGhpIF9fc2lnbjsKK0BAIC02 NDEsNyArNjQxLDcgQEAgX21tX2N2dHBpMTZfcHMgKF9fbTY0IF9fQSkKKyB9CisgCisgLyogQ29u dmVydCB0aGUgZm91ciB1bnNpZ25lZCAxNi1iaXQgdmFsdWVzIGluIEEgdG8gU1BGUCBmb3JtLiAg Ki8KKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHB1MTZfcHMgKF9fbTY0IF9fQSkKKyB7 CisgICBfX3Yyc2kgX19oaXNpLCBfX2xvc2k7CitAQCAtNjYxLDcgKzY2MSw3IEBAIF9tbV9jdnRw dTE2X3BzIChfX202NCBfX0EpCisgfQorIAorIC8qIENvbnZlcnQgdGhlIGxvdyBmb3VyIHNpZ25l ZCA4LWJpdCB2YWx1ZXMgaW4gQSB0byBTUEZQIGZvcm0uICAqLworLXN0YXRpYyBfX2lubGluZSBf X20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fY3Z0cGk4X3BzIChfX202NCBfX0EpCisgeworICAgX192OHFpIF9fc2lnbjsKK0BA IC02NzgsNyArNjc4LDcgQEAgX21tX2N2dHBpOF9wcyAoX19tNjQgX19BKQorIH0KKyAKKyAvKiBD b252ZXJ0IHRoZSBsb3cgZm91ciB1bnNpZ25lZCA4LWJpdCB2YWx1ZXMgaW4gQSB0byBTUEZQIGZv cm0uICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0cHU4X3BzKF9fbTY0IF9fQSkK KyB7CisgICBfX0EgPSAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3B1bnBja2xidyAoKF9fdjhxaSlf X0EsIChfX3Y4cWkpMExMKTsKK0BAIC02ODYsNyArNjg2LDcgQEAgX21tX2N2dHB1OF9wcyhfX202 NCBfX0EpCisgfQorIAorIC8qIENvbnZlcnQgdGhlIGZvdXIgc2lnbmVkIDMyLWJpdCB2YWx1ZXMg aW4gQSBhbmQgQiB0byBTUEZQIGZvcm0uICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjgg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1f Y3Z0cGkzMngyX3BzKF9fbTY0IF9fQSwgX19tNjQgX19CKQorIHsKKyAgIF9fdjRzZiBfX3plcm8g PSAoX192NHNmKSBfbW1fc2V0emVyb19wcyAoKTsKK0BAIC02OTYsNyArNjk2LDcgQEAgX21tX2N2 dHBpMzJ4Ml9wcyhfX202NCBfX0EsIF9fbTY0IF9fQikKKyB9CisgCisgLyogQ29udmVydCB0aGUg Zm91ciBTUEZQIHZhbHVlcyBpbiBBIHRvIGZvdXIgc2lnbmVkIDE2LWJpdCBpbnRlZ2Vycy4gICov Cistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0cHNfcGkxNihfX20xMjggX19BKQorIHsKKyAg IF9fdjRzZiBfX2hpc2YgPSAoX192NHNmKV9fQTsKK0BAIC03MDcsNyArNzA3LDcgQEAgX21tX2N2 dHBzX3BpMTYoX19tMTI4IF9fQSkKKyB9CisgCisgLyogQ29udmVydCB0aGUgZm91ciBTUEZQIHZh bHVlcyBpbiBBIHRvIGZvdXIgc2lnbmVkIDgtYml0IGludGVnZXJzLiAgKi8KKy1zdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9jdnRwc19waTgoX19tMTI4IF9fQSkKKyB7CisgICBfX3Y0aGkgX190bXAg PSAoX192NGhpKSBfbW1fY3Z0cHNfcGkxNiAoX19BKTsKK0BAIC03MTYsNyArNzE2LDcgQEAgX21t X2N2dHBzX3BpOChfX20xMjggX19BKQorIAorIC8qIFNlbGVjdHMgZm91ciBzcGVjaWZpYyBTUEZQ IHZhbHVlcyBmcm9tIEEgYW5kIEIgYmFzZWQgb24gTUFTSy4gICovCisgI2lmIDAKKy1zdGF0aWMg X19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX3NodWZmbGVfcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IsIGlu dCBfX21hc2spCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX3NodWZwcyAo KF9fdjRzZilfX0EsIChfX3Y0c2YpX19CLCBfX21hc2spOworQEAgLTcyOCwxNCArNzI4LDE0IEBA IF9tbV9zaHVmZmxlX3BzIChfX20xMjggX19BLCBfX20xMjggX19CLCAKKyAKKyAKKyAvKiBTZWxl Y3RzIGFuZCBpbnRlcmxlYXZlcyB0aGUgdXBwZXIgdHdvIFNQRlAgdmFsdWVzIGZyb20gQSBhbmQg Qi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV91bnBhY2toaV9wcyAoX19tMTI4IF9f QSwgX19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfdW5w Y2tocHMgKChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQorIAorIC8qIFNlbGVjdHMgYW5k IGludGVybGVhdmVzIHRoZSBsb3dlciB0d28gU1BGUCB2YWx1ZXMgZnJvbSBBIGFuZCBCLiAgKi8K Ky1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3VucGFja2xvX3BzIChfX20xMjggX19BLCBfX20x MjggX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4KSBfX2J1aWx0aW5faWEzMl91bnBja2xwcyAo KF9fdjRzZilfX0EsIChfX3Y0c2YpX19CKTsKK0BAIC03NDMsMjggKzc0MywyOCBAQCBfbW1fdW5w YWNrbG9fcHMgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgCisgLyogU2V0cyB0aGUgdXBwZXIg dHdvIFNQRlAgdmFsdWVzIHdpdGggNjQtYml0cyBvZiBkYXRhIGxvYWRlZCBmcm9tIFA7CisgICAg dGhlIGxvd2VyIHR3byB2YWx1ZXMgYXJlIHBhc3NlZCB0aHJvdWdoIGZyb20gQS4gICovCistc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9sb2FkaF9waSAoX19tMTI4IF9fQSwgX19tNjQgY29uc3Qg Kl9fUCkKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbG9hZGhwcyAoKF9f djRzZilfX0EsIChfX3Yyc2kgKilfX1ApOworIH0KKyAKKyAvKiBTdG9yZXMgdGhlIHVwcGVyIHR3 byBTUEZQIHZhbHVlcyBvZiBBIGludG8gUC4gICovCistc3RhdGljIF9faW5saW5lIHZvaWQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N0 b3JlaF9waSAoX19tNjQgKl9fUCwgX19tMTI4IF9fQSkKKyB7CisgICBfX2J1aWx0aW5faWEzMl9z dG9yZWhwcyAoKF9fdjJzaSAqKV9fUCwgKF9fdjRzZilfX0EpOworIH0KKyAKKyAvKiBNb3ZlcyB0 aGUgdXBwZXIgdHdvIHZhbHVlcyBvZiBCIGludG8gdGhlIGxvd2VyIHR3byB2YWx1ZXMgb2YgQS4g ICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9tb3ZlaGxfcHMgKF9fbTEyOCBfX0EsIF9f bTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fYnVpbHRpbl9pYTMyX21vdmhscHMg KChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CisgfQorIAorIC8qIE1vdmVzIHRoZSBsb3dlciB0 d28gdmFsdWVzIG9mIEIgaW50byB0aGUgdXBwZXIgdHdvIHZhbHVlcyBvZiBBLiAgKi8KKy1zdGF0 aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytz dGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX21vdmVsaF9wcyAoX19tMTI4IF9fQSwgX19tMTI4IF9fQikK KyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbW92bGhwcyAoKF9fdjRzZilf X0EsIChfX3Y0c2YpX19CKTsKK0BAIC03NzIsMTQ2ICs3NzIsMTQ2IEBAIF9tbV9tb3ZlbGhfcHMg KF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgCisgLyogU2V0cyB0aGUgbG93ZXIgdHdvIFNQRlAg dmFsdWVzIHdpdGggNjQtYml0cyBvZiBkYXRhIGxvYWRlZCBmcm9tIFA7CisgICAgdGhlIHVwcGVy IHR3byB2YWx1ZXMgYXJlIHBhc3NlZCB0aHJvdWdoIGZyb20gQS4gICovCistc3RhdGljIF9faW5s aW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9f aW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9sb2FkbF9waSAoX19tMTI4IF9fQSwgX19tNjQgY29uc3QgKl9fUCkKKyB7 CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbG9hZGxwcyAoKF9fdjRzZilfX0Es IChfX3Yyc2kgKilfX1ApOworIH0KKyAKKyAvKiBTdG9yZXMgdGhlIGxvd2VyIHR3byBTUEZQIHZh bHVlcyBvZiBBIGludG8gUC4gICovCistc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N0b3JlbF9waSAo X19tNjQgKl9fUCwgX19tMTI4IF9fQSkKKyB7CisgICBfX2J1aWx0aW5faWEzMl9zdG9yZWxwcyAo KF9fdjJzaSAqKV9fUCwgKF9fdjRzZilfX0EpOworIH0KKyAKKyAvKiBDcmVhdGVzIGEgNC1iaXQg bWFzayBmcm9tIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIFNQRlAgdmFsdWVzLiAg Ki8KKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21tX21vdmVtYXNrX3BzIChfX20xMjggX19BKQorIHsKKyAg IHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3Ztc2twcyAoKF9fdjRzZilfX0EpOworIH0KKyAKKyAv KiBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250cm9sIHJlZ2lzdGVyLiAgKi8KKy1zdGF0 aWMgX19pbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2dldGNzciAodm9pZCkKKyB7CisgICBy ZXR1cm4gX19idWlsdGluX2lhMzJfc3RteGNzciAoKTsKKyB9CisgCisgLyogUmVhZCBleGNlcHRp b24gYml0cyBmcm9tIHRoZSBjb250cm9sIHJlZ2lzdGVyLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUg dW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMg X19pbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX01NX0dFVF9FWENFUFRJT05fU1RBVEUgKHZvaWQpCisgeworICAg cmV0dXJuIF9tbV9nZXRjc3IoKSAmIF9NTV9FWENFUFRfTUFTSzsKKyB9CisgCistc3RhdGljIF9f aW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9NTV9HRVRfRVhDRVBUSU9OX01BU0sgKHZvaWQpCisg eworICAgcmV0dXJuIF9tbV9nZXRjc3IoKSAmIF9NTV9NQVNLX01BU0s7CisgfQorIAorLXN0YXRp YyBfX2lubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfTU1fR0VUX1JPVU5ESU5HX01PREUgKHZvaWQp CisgeworICAgcmV0dXJuIF9tbV9nZXRjc3IoKSAmIF9NTV9ST1VORF9NQVNLOworIH0KKyAKKy1z dGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX01NX0dFVF9GTFVTSF9aRVJPX01PREUg KHZvaWQpCisgeworICAgcmV0dXJuIF9tbV9nZXRjc3IoKSAmIF9NTV9GTFVTSF9aRVJPX01BU0s7 CisgfQorIAorIC8qIFNldCB0aGUgY29udHJvbCByZWdpc3RlciB0byBJLiAgKi8KKy1zdGF0aWMg X19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGlj IF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKKyBfbW1fc2V0Y3NyICh1bnNpZ25lZCBpbnQgX19JKQorIHsKKyAgIF9fYnVpbHRp bl9pYTMyX2xkbXhjc3IgKF9fSSk7CisgfQorIAorIC8qIFNldCBleGNlcHRpb24gYml0cyBpbiB0 aGUgY29udHJvbCByZWdpc3Rlci4gICovCistc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX01NX1NFVF9FWENF UFRJT05fU1RBVEUodW5zaWduZWQgaW50IF9fbWFzaykKKyB7CisgICBfbW1fc2V0Y3NyKChfbW1f Z2V0Y3NyKCkgJiB+X01NX0VYQ0VQVF9NQVNLKSB8IF9fbWFzayk7CisgfQorIAorLXN0YXRpYyBf X2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMg X19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9NTV9TRVRfRVhDRVBUSU9OX01BU0sgKHVuc2lnbmVkIGludCBfX21hc2spCisg eworICAgX21tX3NldGNzcigoX21tX2dldGNzcigpICYgfl9NTV9NQVNLX01BU0spIHwgX19tYXNr KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX01NX1NFVF9ST1VORElOR19NT0RFICh1bnNp Z25lZCBpbnQgX19tb2RlKQorIHsKKyAgIF9tbV9zZXRjc3IoKF9tbV9nZXRjc3IoKSAmIH5fTU1f Uk9VTkRfTUFTSykgfCBfX21vZGUpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfTU1fU0VU X0ZMVVNIX1pFUk9fTU9ERSAodW5zaWduZWQgaW50IF9fbW9kZSkKKyB7CisgICBfbW1fc2V0Y3Ny KChfbW1fZ2V0Y3NyKCkgJiB+X01NX0ZMVVNIX1pFUk9fTUFTSykgfCBfX21vZGUpOworIH0KKyAK KyAvKiBDcmVhdGUgYSB2ZWN0b3Igd2l0aCBlbGVtZW50IDAgYXMgRiBhbmQgdGhlIHJlc3QgemVy by4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXRfc3MgKGZsb2F0IF9fRikKKyB7 CisgICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tMTI4KShfX3Y0c2YpeyBfX0YsIDAsIDAsIDAg fTsKKyB9CisgCisgLyogQ3JlYXRlIGEgdmVjdG9yIHdpdGggYWxsIGZvdXIgZWxlbWVudHMgZXF1 YWwgdG8gRi4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXQxX3BzIChmbG9hdCBf X0YpCisgeworICAgcmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTEyOCkoX192NHNmKXsgX19GLCBf X0YsIF9fRiwgX19GIH07CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2V0X3Bz MSAoZmxvYXQgX19GKQorIHsKKyAgIHJldHVybiBfbW1fc2V0MV9wcyAoX19GKTsKKyB9CisgCisg LyogQ3JlYXRlIGEgdmVjdG9yIHdpdGggZWxlbWVudCAwIGFzICpQIGFuZCB0aGUgcmVzdCB6ZXJv LiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2xvYWRfc3MgKGZsb2F0IGNvbnN0ICpf X1ApCisgeworICAgcmV0dXJuIF9tbV9zZXRfc3MgKCpfX1ApOworIH0KKyAKKyAvKiBDcmVhdGUg YSB2ZWN0b3Igd2l0aCBhbGwgZm91ciBlbGVtZW50cyBlcXVhbCB0byAqUC4gICovCistc3RhdGlj IF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9sb2FkMV9wcyAoZmxvYXQgY29uc3QgKl9fUCkKKyB7CisgICBy ZXR1cm4gX21tX3NldDFfcHMgKCpfX1ApOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4 IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19t MTI4IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX2xvYWRfcHMxIChmbG9hdCBjb25zdCAqX19QKQorIHsKKyAgIHJldHVybiBfbW1fbG9hZDFf cHMgKF9fUCk7CisgfQorIAorIC8qIExvYWQgZm91ciBTUEZQIHZhbHVlcyBmcm9tIFAuICBUaGUg YWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZC4gICovCistc3RhdGljIF9faW5saW5lIF9f bTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tbV9sb2FkX3BzIChmbG9hdCBjb25zdCAqX19QKQorIHsKKyAgIHJldHVybiAoX19tMTI4 KSAqKF9fdjRzZiAqKV9fUDsKKyB9CisgCisgLyogTG9hZCBmb3VyIFNQRlAgdmFsdWVzIGZyb20g UC4gIFRoZSBhZGRyZXNzIG5lZWQgbm90IGJlIDE2LWJ5dGUgYWxpZ25lZC4gICovCistc3RhdGlj IF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9sb2FkdV9wcyAoZmxvYXQgY29uc3QgKl9fUCkKKyB7CisgICBy ZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbG9hZHVwcyAoX19QKTsKKyB9CisgCisgLyog TG9hZCBmb3VyIFNQRlAgdmFsdWVzIGluIHJldmVyc2Ugb3JkZXIuICBUaGUgYWRkcmVzcyBtdXN0 IGJlIGFsaWduZWQuICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbG9hZHJfcHMgKGZs b2F0IGNvbnN0ICpfX1ApCisgeworICAgX192NHNmIF9fdG1wID0gKihfX3Y0c2YgKilfX1A7CitA QCAtOTE5LDQ4ICs5MTksNDggQEAgX21tX2xvYWRyX3BzIChmbG9hdCBjb25zdCAqX19QKQorIH0K KyAKKyAvKiBDcmVhdGUgdGhlIHZlY3RvciBbWiBZIFggV10uICAqLworLXN0YXRpYyBfX2lubGlu ZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fc2V0X3BzIChjb25zdCBmbG9hdCBfX1osIGNvbnN0IGZsb2F0IF9fWSwgY29u c3QgZmxvYXQgX19YLCBjb25zdCBmbG9hdCBfX1cpCisgeworICAgcmV0dXJuIF9fZXh0ZW5zaW9u X18gKF9fbTEyOCkoX192NHNmKXsgX19XLCBfX1gsIF9fWSwgX19aIH07CisgfQorIAorIC8qIENy ZWF0ZSB0aGUgdmVjdG9yIFtXIFggWSBaXS4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEy OCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9t bV9zZXRyX3BzIChmbG9hdCBfX1osIGZsb2F0IF9fWSwgZmxvYXQgX19YLCBmbG9hdCBfX1cpCisg eworICAgcmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTEyOCkoX192NHNmKXsgX19aLCBfX1ksIF9f WCwgX19XIH07CisgfQorIAorIC8qIFN0b3JlcyB0aGUgbG93ZXIgU1BGUCB2YWx1ZS4gICovCist c3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQor K3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX3N0b3JlX3NzIChmbG9hdCAqX19QLCBfX20xMjggX19BKQor IHsKKyAgICpfX1AgPSBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Y0c2YgKChfX3Y0c2YpX19BLCAw KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGZsb2F0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgZmxvYXQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0c3NfZjMyIChfX20xMjggX19B KQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3Y0c2YgKChfX3Y0c2YpX19B LCAwKTsKKyB9CisgCisgLyogU3RvcmUgZm91ciBTUEZQIHZhbHVlcy4gIFRoZSBhZGRyZXNzIG11 c3QgYmUgMTYtYnl0ZSBhbGlnbmVkLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3RvcmVf cHMgKGZsb2F0ICpfX1AsIF9fbTEyOCBfX0EpCisgeworICAgKihfX3Y0c2YgKilfX1AgPSAoX192 NHNmKV9fQTsKKyB9CisgCisgLyogU3RvcmUgZm91ciBTUEZQIHZhbHVlcy4gIFRoZSBhZGRyZXNz IG5lZWQgbm90IGJlIDE2LWJ5dGUgYWxpZ25lZC4gICovCistc3RhdGljIF9faW5saW5lIHZvaWQg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lk IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21t X3N0b3JldV9wcyAoZmxvYXQgKl9fUCwgX19tMTI4IF9fQSkKKyB7CisgICBfX2J1aWx0aW5faWEz Ml9zdG9yZXVwcyAoX19QLCAoX192NHNmKV9fQSk7CisgfQorIAorIC8qIFN0b3JlIHRoZSBsb3dl ciBTUEZQIHZhbHVlIGFjcm9zcyBmb3VyIHdvcmRzLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgdm9p ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZv aWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fc3RvcmUxX3BzIChmbG9hdCAqX19QLCBfX20xMjggX19BKQorIHsKKyAgIF9fdjRzZiBfX3Zh ID0gKF9fdjRzZilfX0E7CitAQCAtOTY4LDE0ICs5NjgsMTQgQEAgX21tX3N0b3JlMV9wcyAoZmxv YXQgKl9fUCwgX19tMTI4IF9fQSkKKyAgIF9tbV9zdG9yZXVfcHMgKF9fUCwgX190bXApOworIH0K KyAKKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3RvcmVfcHMxIChmbG9hdCAqX19QLCBfX20xMjgg X19BKQorIHsKKyAgIF9tbV9zdG9yZTFfcHMgKF9fUCwgX19BKTsKKyB9CisgCisgLyogU3RvcmUg Zm91ciBTUEZQIHZhbHVlcyBpbiByZXZlcnNlIG9yZGVyLiAgVGhlIGFkZHJlc3MgbXVzdCBiZSBh bGlnbmVkLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3RvcmVyX3BzIChmbG9hdCAqX19Q LCBfX20xMjggX19BKQorIHsKKyAgIF9fdjRzZiBfX3ZhID0gKF9fdjRzZilfX0E7CitAQCAtOTg0 LDcgKzk4NCw3IEBAIF9tbV9zdG9yZXJfcHMgKGZsb2F0ICpfX1AsIF9fbTEyOCBfX0EpCisgfQor IAorIC8qIFNldHMgdGhlIGxvdyBTUEZQIHZhbHVlIG9mIEEgZnJvbSB0aGUgbG93IHZhbHVlIG9m IEIuICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbW92ZV9zcyAoX19tMTI4IF9fQSwg X19tMTI4IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19idWlsdGluX2lhMzJfbW92c3Mg KChfX3Y0c2YpX19BLCAoX192NHNmKV9fQik7CitAQCAtOTkyLDEzICs5OTIsMTMgQEAgX21tX21v dmVfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOCBfX0IpCisgCisgLyogRXh0cmFjdHMgb25lIG9mIHRo ZSBmb3VyIHdvcmRzIG9mIEEuICBUaGUgc2VsZWN0b3IgTiBtdXN0IGJlIGltbWVkaWF0ZS4gICov CisgI2lmIDAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2V4dHJhY3RfcGkxNiAoX19tNjQgY29uc3Qg X19BLCBpbnQgY29uc3QgX19OKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl92ZWNfZXh0 X3Y0aGkgKChfX3Y0aGkpX19BLCBfX04pOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21fcGV4 dHJ3IChfX202NCBjb25zdCBfX0EsIGludCBjb25zdCBfX04pCisgeworICAgcmV0dXJuIF9tbV9l eHRyYWN0X3BpMTYgKF9fQSwgX19OKTsKK0BAIC0xMDExLDEzICsxMDExLDEzIEBAIF9tX3BleHRy dyAoX19tNjQgY29uc3QgX19BLCBpbnQgY29uc3QgX18KKyAvKiBJbnNlcnRzIHdvcmQgRCBpbnRv IG9uZSBvZiBmb3VyIHdvcmRzIG9mIEEuICBUaGUgc2VsZWN0b3IgTiBtdXN0IGJlCisgICAgaW1t ZWRpYXRlLiAgKi8KKyAjaWYgMAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2luc2VydF9waTE2 IChfX202NCBjb25zdCBfX0EsIGludCBjb25zdCBfX0QsIGludCBjb25zdCBfX04pCisgeworICAg cmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfdmVjX3NldF92NGhpICgoX192NGhpKV9fQSwg X19ELCBfX04pOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BpbnNydyAoX19tNjQg Y29uc3QgX19BLCBpbnQgY29uc3QgX19ELCBpbnQgY29uc3QgX19OKQorIHsKKyAgIHJldHVybiBf bW1faW5zZXJ0X3BpMTYgKF9fQSwgX19ELCBfX04pOworQEAgLTEwMjksNjUgKzEwMjksNjUgQEAg X21fcGluc3J3IChfX202NCBjb25zdCBfX0EsIGludCBjb25zdCBfXworICNlbmRpZgorIAorIC8q IENvbXB1dGUgdGhlIGVsZW1lbnQtd2lzZSBtYXhpbXVtIG9mIHNpZ25lZCAxNi1iaXQgdmFsdWVz LiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9tYXhfcGkxNiAoX19tNjQgX19BLCBfX202 NCBfX0IpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcG1heHN3ICgoX192 NGhpKV9fQSwgKF9fdjRoaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3Bt YXhzdyAoX19tNjQgX19BLCBfX202NCBfX0IpCisgeworICAgcmV0dXJuIF9tbV9tYXhfcGkxNiAo X19BLCBfX0IpOworIH0KKyAKKyAvKiBDb21wdXRlIHRoZSBlbGVtZW50LXdpc2UgbWF4aW11bSBv ZiB1bnNpZ25lZCA4LWJpdCB2YWx1ZXMuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX21h eF9wdTggKF9fbTY0IF9fQSwgX19tNjQgX19CKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVp bHRpbl9pYTMyX3BtYXh1YiAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKKyB9CisgCistc3Rh dGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytz dGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKKyBfbV9wbWF4dWIgKF9fbTY0IF9fQSwgX19tNjQgX19CKQorIHsKKyAg IHJldHVybiBfbW1fbWF4X3B1OCAoX19BLCBfX0IpOworIH0KKyAKKyAvKiBDb21wdXRlIHRoZSBl bGVtZW50LXdpc2UgbWluaW11bSBvZiBzaWduZWQgMTYtYml0IHZhbHVlcy4gICovCistc3RhdGlj IF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKKyBfbW1fbWluX3BpMTYgKF9fbTY0IF9fQSwgX19tNjQgX19CKQorIHsKKyAg IHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3BtaW5zdyAoKF9fdjRoaSlfX0EsIChfX3Y0 aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbV9wbWluc3cgKF9fbTY0IF9f QSwgX19tNjQgX19CKQorIHsKKyAgIHJldHVybiBfbW1fbWluX3BpMTYgKF9fQSwgX19CKTsKKyB9 CisgCisgLyogQ29tcHV0ZSB0aGUgZWxlbWVudC13aXNlIG1pbmltdW0gb2YgdW5zaWduZWQgOC1i aXQgdmFsdWVzLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9taW5fcHU4IChfX202NCBf X0EsIF9fbTY0IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl9wbWlu dWIgKChfX3Y4cWkpX19BLCAoX192OHFpKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBf X202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21fcG1pbnViIChfX202NCBfX0EsIF9fbTY0IF9fQikKKyB7CisgICByZXR1cm4gX21tX21p bl9wdTggKF9fQSwgX19CKTsKKyB9CisgCisgLyogQ3JlYXRlIGFuIDgtYml0IG1hc2sgb2YgdGhl IHNpZ25zIG9mIDgtYml0IHZhbHVlcy4gICovCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9tb3ZlbWFz a19waTggKF9fbTY0IF9fQSkKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfcG1vdm1za2Ig KChfX3Y4cWkpX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3Btb3Ztc2tiIChfX202 NCBfX0EpCisgeworICAgcmV0dXJuIF9tbV9tb3ZlbWFza19waTggKF9fQSk7CitAQCAtMTA5NSwx MyArMTA5NSwxMyBAQCBfbV9wbW92bXNrYiAoX19tNjQgX19BKQorIAorIC8qIE11bHRpcGx5IGZv dXIgdW5zaWduZWQgMTYtYml0IHZhbHVlcyBpbiBBIGJ5IGZvdXIgdW5zaWduZWQgMTYtYml0IHZh bHVlcworICAgIGluIEIgYW5kIHByb2R1Y2UgdGhlIGhpZ2ggMTYgYml0cyBvZiB0aGUgMzItYml0 IHJlc3VsdHMuICAqLworLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX211bGhpX3B1MTYgKF9fbTY0 IF9fQSwgX19tNjQgX19CKQorIHsKKyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3Bt dWxodXcgKChfX3Y0aGkpX19BLCAoX192NGhpKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGlu ZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21fcG11bGh1dyAoX19tNjQgX19BLCBfX202NCBfX0IpCisgeworICAgcmV0dXJuIF9t bV9tdWxoaV9wdTE2IChfX0EsIF9fQik7CitAQCAtMTExMCwxMyArMTExMCwxMyBAQCBfbV9wbXVs aHV3IChfX202NCBfX0EsIF9fbTY0IF9fQikKKyAvKiBSZXR1cm4gYSBjb21iaW5hdGlvbiBvZiB0 aGUgZm91ciAxNi1iaXQgdmFsdWVzIGluIEEuICBUaGUgc2VsZWN0b3IKKyAgICBtdXN0IGJlIGFu IGltbWVkaWF0ZS4gICovCisgI2lmIDAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zaHVmZmxl X3BpMTYgKF9fbTY0IF9fQSwgaW50IF9fTikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0 aW5faWEzMl9wc2h1ZncgKChfX3Y0aGkpX19BLCBfX04pOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQorIF9tX3BzaHVmdyAoX19tNjQgX19BLCBpbnQgX19OKQorIHsKKyAgIHJldHVybiBfbW1f c2h1ZmZsZV9waTE2IChfX0EsIF9fTik7CitAQCAtMTEzMCwzOSArMTEzMCwzOSBAQCBfbV9wc2h1 ZncgKF9fbTY0IF9fQSwgaW50IF9fTikKKyAvKiBDb25kaXRpb25hbGx5IHN0b3JlIGJ5dGUgZWxl bWVudHMgb2YgQSBpbnRvIFAuICBUaGUgaGlnaCBiaXQgb2YgZWFjaAorICAgIGJ5dGUgaW4gdGhl IHNlbGVjdG9yIE4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGUgZnJv bQorICAgIEEgaXMgc3RvcmVkLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWFza21vdmVf c2k2NCAoX19tNjQgX19BLCBfX202NCBfX04sIGNoYXIgKl9fUCkKKyB7CisgICBfX2J1aWx0aW5f aWEzMl9tYXNrbW92cSAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19OLCBfX1ApOworIH0KKyAKKy1z dGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKKyBfbV9tYXNrbW92cSAoX19tNjQgX19BLCBfX202NCBfX04sIGNoYXIg Kl9fUCkKKyB7CisgICBfbW1fbWFza21vdmVfc2k2NCAoX19BLCBfX04sIF9fUCk7CisgfQorIAor IC8qIENvbXB1dGUgdGhlIHJvdW5kZWQgYXZlcmFnZXMgb2YgdGhlIHVuc2lnbmVkIDgtYml0IHZh bHVlcyBpbiBBIGFuZCBCLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9hdmdfcHU4IChf X202NCBfX0EsIF9fbTY0IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEz Ml9wYXZnYiAoKF9fdjhxaSlfX0EsIChfX3Y4cWkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbV9wYXZnYiAoX19tNjQgX19BLCBfX202NCBfX0IpCisgeworICAgcmV0dXJuIF9t bV9hdmdfcHU4IChfX0EsIF9fQik7CisgfQorIAorIC8qIENvbXB1dGUgdGhlIHJvdW5kZWQgYXZl cmFnZXMgb2YgdGhlIHVuc2lnbmVkIDE2LWJpdCB2YWx1ZXMgaW4gQSBhbmQgQi4gICovCistc3Rh dGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytz dGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKKyBfbW1fYXZnX3B1MTYgKF9fbTY0IF9fQSwgX19tNjQgX19CKQorIHsK KyAgIHJldHVybiAoX19tNjQpIF9fYnVpbHRpbl9pYTMyX3Bhdmd3ICgoX192NGhpKV9fQSwgKF9f djRoaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3Bhdmd3IChfX202NCBf X0EsIF9fbTY0IF9fQikKKyB7CisgICByZXR1cm4gX21tX2F2Z19wdTE2IChfX0EsIF9fQik7CitA QCAtMTE3MSwxMyArMTE3MSwxMyBAQCBfbV9wYXZndyAoX19tNjQgX19BLCBfX202NCBfX0IpCisg LyogQ29tcHV0ZSB0aGUgc3VtIG9mIHRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlcyBvZiB0aGUgdW5z aWduZWQgOC1iaXQKKyAgICB2YWx1ZXMgaW4gQSBhbmQgQi4gIFJldHVybiB0aGUgdmFsdWUgaW4g dGhlIGxvd2VyIDE2LWJpdCB3b3JkOyB0aGUKKyAgICB1cHBlciB3b3JkcyBhcmUgY2xlYXJlZC4g ICovCistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2FkX3B1OCAoX19tNjQgX19BLCBfX202NCBf X0IpCisgeworICAgcmV0dXJuIChfX202NCkgX19idWlsdGluX2lhMzJfcHNhZGJ3ICgoX192OHFp KV9fQSwgKF9fdjhxaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tX3BzYWRi dyAoX19tNjQgX19BLCBfX202NCBfX0IpCisgeworICAgcmV0dXJuIF9tbV9zYWRfcHU4IChfX0Es IF9fQik7CitAQCAtMTE4Niw3ICsxMTg2LDcgQEAgX21fcHNhZGJ3IChfX202NCBfX0EsIF9fbTY0 IF9fQikKKyAvKiBMb2FkcyBvbmUgY2FjaGUgbGluZSBmcm9tIGFkZHJlc3MgUCB0byBhIGxvY2F0 aW9uICJjbG9zZXIiIHRvIHRoZQorICAgIHByb2Nlc3Nvci4gIFRoZSBzZWxlY3RvciBJIHNwZWNp ZmllcyB0aGUgdHlwZSBvZiBwcmVmZXRjaCBvcGVyYXRpb24uICAqLworICNpZiAwCistc3RhdGlj IF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX3ByZWZldGNoICh2b2lkICpfX1AsIGVudW0gX21tX2hpbnQgX19JKQor IHsKKyAgIF9fYnVpbHRpbl9wcmVmZXRjaCAoX19QLCAwLCBfX0kpOworQEAgLTExOTcsMTQgKzEx OTcsMTQgQEAgX21tX3ByZWZldGNoICh2b2lkICpfX1AsIGVudW0gX21tX2hpbnQgXworICNlbmRp ZgorIAorIC8qIFN0b3JlcyB0aGUgZGF0YSBpbiBBIHRvIHRoZSBhZGRyZXNzIFAgd2l0aG91dCBw b2xsdXRpbmcgdGhlIGNhY2hlcy4gICovCistc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N0cmVhbV9w aSAoX19tNjQgKl9fUCwgX19tNjQgX19BKQorIHsKKyAgIF9fYnVpbHRpbl9pYTMyX21vdm50cSAo KHVuc2lnbmVkIGxvbmcgbG9uZyAqKV9fUCwgKHVuc2lnbmVkIGxvbmcgbG9uZylfX0EpOworIH0K KyAKKyAvKiBMaWtld2lzZS4gIFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkLiAg Ki8KKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3RyZWFtX3BzIChmbG9hdCAqX19QLCBfX20xMjgg X19BKQorIHsKKyAgIF9fYnVpbHRpbl9pYTMyX21vdm50cHMgKF9fUCwgKF9fdjRzZilfX0EpOwor QEAgLTEyMTIsNyArMTIxMiw3IEBAIF9tbV9zdHJlYW1fcHMgKGZsb2F0ICpfX1AsIF9fbTEyOCBf X0EpCisgCisgLyogR3VhcmFudGVlcyB0aGF0IGV2ZXJ5IHByZWNlZGluZyBzdG9yZSBpcyBnbG9i YWxseSB2aXNpYmxlIGJlZm9yZQorICAgIGFueSBzdWJzZXF1ZW50IHN0b3JlLiAgKi8KKy1zdGF0 aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKKyBfbW1fc2ZlbmNlICh2b2lkKQorIHsKKyAgIF9fYnVpbHRpbl9pYTMyX3Nm ZW5jZSAoKTsKK0BAIC0xMjIxLDcgKzEyMjEsNyBAQCBfbW1fc2ZlbmNlICh2b2lkKQorIC8qIFRo ZSBleGVjdXRpb24gb2YgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgZGVsYXllZCBieSBhbiBpbXBs ZW1lbnRhdGlvbgorICAgIHNwZWNpZmljIGFtb3VudCBvZiB0aW1lLiAgVGhlIGluc3RydWN0aW9u IGRvZXMgbm90IG1vZGlmeSB0aGUKKyAgICBhcmNoaXRlY3R1cmFsIHN0YXRlLiAgKi8KKy1zdGF0 aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKKyBfbW1fcGF1c2UgKHZvaWQpCisgeworICAgX19hc21fXyBfX3ZvbGF0aWxl X18gKCJyZXA7IG5vcCIgOiA6ICk7CistLS0gZ2NjL2NvbmZpZy9pMzg2L2FtbWludHJpbi5oLmpq CTIwMDctMDYtMjYgMTM6Mzg6NDYuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjL2NvbmZpZy9pMzg2 L2FtbWludHJpbi5oCTIwMDctMDktMjUgMTU6MDU6NTYuMDAwMDAwMDAwICswMjAwCitAQCAtMzcs MTkgKzM3LDE5IEBACisgLyogV2UgbmVlZCBkZWZpbml0aW9ucyBmcm9tIHRoZSBTU0UzLCBTU0Uy IGFuZCBTU0UgaGVhZGVyIGZpbGVzKi8KKyAjaW5jbHVkZSA8cG1taW50cmluLmg+CisgCistc3Rh dGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX3N0cmVhbV9zZCAoZG91YmxlICogX19QLCBfX20xMjhkIF9fWSkK KyB7CisgICBfX2J1aWx0aW5faWEzMl9tb3ZudHNkIChfX1AsIChfX3YyZGYpIF9fWSk7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zdHJlYW1fc3MgKGZsb2F0ICogX19QLCBfX20xMjgg X19ZKQorIHsKKyAgIF9fYnVpbHRpbl9pYTMyX21vdm50c3MgKF9fUCwgKF9fdjRzZikgX19ZKTsK KyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2V4dHJhY3Rfc2k2NCAoX19tMTI4 aSBfX1gsIF9fbTEyOGkgX19ZKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lh MzJfZXh0cnEgKChfX3YyZGkpIF9fWCwgKF9fdjE2cWkpIF9fWSk7CitAQCAtNTgsNyArNTgsNyBA QCBfbW1fZXh0cmFjdF9zaTY0IChfX20xMjhpIF9fWCwgX19tMTI4aSBfCisgI2RlZmluZSBfbW1f ZXh0cmFjdGlfc2k2NChYLCBJLCBMKSBcCisgKChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl9leHRy cWkgKChfX3YyZGkpKFgpLCBJLCBMKSkKKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1f aW5zZXJ0X3NpNjQgKF9fbTEyOGkgX19YLF9fbTEyOGkgX19ZKQorIHsKKyAgIHJldHVybiAoX19t MTI4aSkgX19idWlsdGluX2lhMzJfaW5zZXJ0cSAoKF9fdjJkaSlfX1gsIChfX3YyZGkpX19ZKTsK Ky0tLSBnY2MvY29uZmlnL2kzODYvZW1taW50cmluLmguamoJMjAwNy0wNi0yNiAxMzozODo0Ni4w MDAwMDAwMDAgKzAyMDAKKysrKyBnY2MvY29uZmlnL2kzODYvZW1taW50cmluLmgJMjAwNy0wOS0y NSAxNTowNjoxOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NCw4OSArNTQsODkgQEAgdHlwZWRlZiBk b3VibGUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fICgoXworICAoKChmcDEpIDw8IDEpIHwgKGZwMCkp CisgCisgLyogQ3JlYXRlIGEgdmVjdG9yIHdpdGggZWxlbWVudCAwIGFzIEYgYW5kIHRoZSByZXN0 IHplcm8uICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXRfc2QgKGRvdWJsZSBf X0YpCisgeworICAgcmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTEyOGQpeyBfX0YsIDAgfTsKKyB9 CisgCisgLyogQ3JlYXRlIGEgdmVjdG9yIHdpdGggYm90aCBlbGVtZW50cyBlcXVhbCB0byBGLiAg Ki8KKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc2V0MV9wZCAoZG91YmxlIF9fRikKKyB7 CisgICByZXR1cm4gX19leHRlbnNpb25fXyAoX19tMTI4ZCl7IF9fRiwgX19GIH07CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXRfcGQxIChkb3VibGUgX19GKQorIHsKKyAg IHJldHVybiBfbW1fc2V0MV9wZCAoX19GKTsKKyB9CisgCisgLyogQ3JlYXRlIGEgdmVjdG9yIHdp dGggdGhlIGxvd2VyIHZhbHVlIFggYW5kIHVwcGVyIHZhbHVlIFcuICAqLworLXN0YXRpYyBfX2lu bGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMg X19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQorIF9tbV9zZXRfcGQgKGRvdWJsZSBfX1csIGRvdWJsZSBfX1gpCisgeworICAg cmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTEyOGQpeyBfX1gsIF9fVyB9OworIH0KKyAKKyAvKiBD cmVhdGUgYSB2ZWN0b3Igd2l0aCB0aGUgbG93ZXIgdmFsdWUgVyBhbmQgdXBwZXIgdmFsdWUgWC4g ICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldHJfcGQgKGRvdWJsZSBfX1csIGRv dWJsZSBfX1gpCisgeworICAgcmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTEyOGQpeyBfX1csIF9f WCB9OworIH0KKyAKKyAvKiBDcmVhdGUgYSB2ZWN0b3Igb2YgemVyb3MuICAqLworLXN0YXRpYyBf X2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9zZXR6ZXJvX3BkICh2b2lkKQorIHsKKyAgIHJldHVybiBfX2V4 dGVuc2lvbl9fIChfX20xMjhkKXsgMC4wLCAwLjAgfTsKKyB9CisgCisgLyogU2V0cyB0aGUgbG93 IERQRlAgdmFsdWUgb2YgQSBmcm9tIHRoZSBsb3cgdmFsdWUgb2YgQi4gICovCistc3RhdGljIF9f aW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX21vdmVfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7 CisgICByZXR1cm4gKF9fbTEyOGQpIF9fYnVpbHRpbl9pYTMyX21vdnNkICgoX192MmRmKV9fQSwg KF9fdjJkZilfX0IpOworIH0KKyAKKyAvKiBMb2FkIHR3byBEUEZQIHZhbHVlcyBmcm9tIFAuICBU aGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZC4gICovCistc3RhdGljIF9faW5saW5l IF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX2xvYWRfcGQgKGRvdWJsZSBjb25zdCAqX19QKQorIHsKKyAgIHJldHVybiAq KF9fbTEyOGQgKilfX1A7CisgfQorIAorIC8qIExvYWQgdHdvIERQRlAgdmFsdWVzIGZyb20gUC4g IFRoZSBhZGRyZXNzIG5lZWQgbm90IGJlIDE2LWJ5dGUgYWxpZ25lZC4gICovCistc3RhdGljIF9f aW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX2xvYWR1X3BkIChkb3VibGUgY29uc3QgKl9fUCkKKyB7CisgICBy ZXR1cm4gX19idWlsdGluX2lhMzJfbG9hZHVwZCAoX19QKTsKKyB9CisgCisgLyogQ3JlYXRlIGEg dmVjdG9yIHdpdGggYWxsIHR3byBlbGVtZW50cyBlcXVhbCB0byAqUC4gICovCistc3RhdGljIF9f aW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX2xvYWQxX3BkIChkb3VibGUgY29uc3QgKl9fUCkKKyB7CisgICBy ZXR1cm4gX21tX3NldDFfcGQgKCpfX1ApOworIH0KKyAKKyAvKiBDcmVhdGUgYSB2ZWN0b3Igd2l0 aCBlbGVtZW50IDAgYXMgKlAgYW5kIHRoZSByZXN0IHplcm8uICAqLworLXN0YXRpYyBfX2lubGlu ZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9sb2FkX3NkIChkb3VibGUgY29uc3QgKl9fUCkKKyB7CisgICByZXR1cm4g X21tX3NldF9zZCAoKl9fUCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9s b2FkX3BkMSAoZG91YmxlIGNvbnN0ICpfX1ApCisgeworICAgcmV0dXJuIF9tbV9sb2FkMV9wZCAo X19QKTsKKyB9CisgCisgLyogTG9hZCB0d28gRFBGUCB2YWx1ZXMgaW4gcmV2ZXJzZSBvcmRlci4g IFRoZSBhZGRyZXNzIG11c3QgYmUgYWxpZ25lZC4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEy OGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX2xvYWRyX3BkIChkb3VibGUgY29uc3QgKl9fUCkKKyB7CisgICBfX20xMjhkIF9fdG1w ID0gX21tX2xvYWRfcGQgKF9fUCk7CitAQCAtMTQ0LDQwICsxNDQsNDAgQEAgX21tX2xvYWRyX3Bk IChkb3VibGUgY29uc3QgKl9fUCkKKyB9CisgCisgLyogU3RvcmUgdHdvIERQRlAgdmFsdWVzLiAg VGhlIGFkZHJlc3MgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQuICAqLworLXN0YXRpYyBfX2lubGlu ZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQorIF9tbV9zdG9yZV9wZCAoZG91YmxlICpfX1AsIF9fbTEyOGQgX19BKQorIHsKKyAgICooX19t MTI4ZCAqKV9fUCA9IF9fQTsKKyB9CisgCisgLyogU3RvcmUgdHdvIERQRlAgdmFsdWVzLiAgVGhl IGFkZHJlc3MgbmVlZCBub3QgYmUgMTYtYnl0ZSBhbGlnbmVkLiAgKi8KKy1zdGF0aWMgX19pbmxp bmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fc3RvcmV1X3BkIChkb3VibGUgKl9fUCwgX19tMTI4ZCBfX0EpCisgeworICAgX19i dWlsdGluX2lhMzJfc3RvcmV1cGQgKF9fUCwgX19BKTsKKyB9CisgCisgLyogU3RvcmVzIHRoZSBs b3dlciBEUEZQIHZhbHVlLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3RvcmVfc2QgKGRv dWJsZSAqX19QLCBfX20xMjhkIF9fQSkKKyB7CisgICAqX19QID0gX19idWlsdGluX2lhMzJfdmVj X2V4dF92MmRmIChfX0EsIDApOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgZG91YmxlIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgZG91YmxlIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2 dHNkX2Y2NCAoX19tMTI4ZCBfX0EpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3ZlY19l eHRfdjJkZiAoX19BLCAwKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N0b3JlbF9w ZCAoZG91YmxlICpfX1AsIF9fbTEyOGQgX19BKQorIHsKKyAgIF9tbV9zdG9yZV9zZCAoX19QLCBf X0EpOworIH0KKyAKKyAvKiBTdG9yZXMgdGhlIHVwcGVyIERQRlAgdmFsdWUuICAqLworLXN0YXRp YyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQorIF9tbV9zdG9yZWhfcGQgKGRvdWJsZSAqX19QLCBfX20xMjhkIF9fQSkKKyB7 CisgICAqX19QID0gX19idWlsdGluX2lhMzJfdmVjX2V4dF92MmRmIChfX0EsIDEpOworQEAgLTE4 NSwyNiArMTg1LDI2IEBAIF9tbV9zdG9yZWhfcGQgKGRvdWJsZSAqX19QLCBfX20xMjhkIF9fQSkK KyAKKyAvKiBTdG9yZSB0aGUgbG93ZXIgRFBGUCB2YWx1ZSBhY3Jvc3MgdHdvIHdvcmRzLgorICAg IFRoZSBhZGRyZXNzIG11c3QgYmUgMTYtYnl0ZSBhbGlnbmVkLiAgKi8KKy1zdGF0aWMgX19pbmxp bmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fc3RvcmUxX3BkIChkb3VibGUgKl9fUCwgX19tMTI4ZCBfX0EpCisgeworICAgX21t X3N0b3JlX3BkIChfX1AsIF9fYnVpbHRpbl9pYTMyX3NodWZwZCAoX19BLCBfX0EsIF9NTV9TSFVG RkxFMiAoMCwwKSkpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3RvcmVfcGQxIChk b3VibGUgKl9fUCwgX19tMTI4ZCBfX0EpCisgeworICAgX21tX3N0b3JlMV9wZCAoX19QLCBfX0Ep OworIH0KKyAKKyAvKiBTdG9yZSB0d28gRFBGUCB2YWx1ZXMgaW4gcmV2ZXJzZSBvcmRlci4gIFRo ZSBhZGRyZXNzIG11c3QgYmUgYWxpZ25lZC4gICovCistc3RhdGljIF9faW5saW5lIHZvaWQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N0 b3Jlcl9wZCAoZG91YmxlICpfX1AsIF9fbTEyOGQgX19BKQorIHsKKyAgIF9tbV9zdG9yZV9wZCAo X19QLCBfX2J1aWx0aW5faWEzMl9zaHVmcGQgKF9fQSwgX19BLCBfTU1fU0hVRkZMRTIgKDAsMSkp KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRzaTEyOF9zaTMyIChfX20xMjhpIF9f QSkKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfdmVjX2V4dF92NHNpICgoX192NHNpKV9f QSwgMCk7CitAQCAtMjEyLDIyMSArMjEyLDIyMSBAQCBfbW1fY3Z0c2kxMjhfc2kzMiAoX19tMTI4 aSBfX0EpCisgCisgI2lmZGVmIF9feDg2XzY0X18KKyAvKiBJbnRlbCBpbnRyaW5zaWMuICAqLwor LXN0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0c2kxMjhfc2k2NCAoX19tMTI4aSBf X0EpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX3ZlY19leHRfdjJkaSAoKF9fdjJkaSlf X0EsIDApOworIH0KKyAKKyAvKiBNaWNyb3NvZnQgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19p bmxpbmUgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX2N2dHNpMTI4X3NpNjR4IChfX20xMjhpIF9fQSkKKyB7Cisg ICByZXR1cm4gX19idWlsdGluX2lhMzJfdmVjX2V4dF92MmRpICgoX192MmRpKV9fQSwgMCk7Cisg fQorICNlbmRpZgorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9hZGRfcGQgKF9fbTEy OGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lh MzJfYWRkcGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lu bGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMg X19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQorIF9tbV9hZGRfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7Cisg ICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfYWRkc2QgKChfX3YyZGYpX19BLCAoX192 MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zdWJfcGQgKF9f bTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGlu X2lhMzJfc3VicGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBf X2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9zdWJfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7 CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfc3Vic2QgKChfX3YyZGYpX19BLCAo X192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9tdWxfcGQg KF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWls dGluX2lhMzJfbXVscGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRp YyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytz dGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9tdWxfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikK KyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbXVsc2QgKChfX3YyZGYpX19B LCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9kaXZf cGQgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19i dWlsdGluX2lhMzJfZGl2cGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0 YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkK KytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tbV9kaXZfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9f QikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfZGl2c2QgKChfX3YyZGYp X19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9z cXJ0X3BkIChfX20xMjhkIF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lh MzJfc3FydHBkICgoX192MmRmKV9fQSk7CisgfQorIAorIC8qIFJldHVybiBwYWlyIHtzcXJ0IChB WzApLCBCWzFdfS4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NxcnRfc2QgKF9f bTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICBfX3YyZGYgX190bXAgPSBfX2J1aWx0aW5f aWEzMl9tb3ZzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyAgIHJldHVybiAoX19tMTI4 ZClfX2J1aWx0aW5faWEzMl9zcXJ0c2QgKChfX3YyZGYpX190bXApOworIH0KKyAKKy1zdGF0aWMg X19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3Rh dGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9f YXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWluX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisg eworICAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX21pbnBkICgoX192MmRmKV9fQSwg KF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWluX3Nk IChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhkKV9fYnVp bHRpbl9pYTMyX21pbnNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0 aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWF4X3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0Ip CisgeworICAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX21heHBkICgoX192MmRmKV9f QSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWF4 X3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhkKV9f YnVpbHRpbl9pYTMyX21heHNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1z dGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fYW5kX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBf X0IpCisgeworICAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2FuZHBkICgoX192MmRm KV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1f YW5kbm90X3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgeworICAgcmV0dXJuIChfX20x MjhkKV9fYnVpbHRpbl9pYTMyX2FuZG5wZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9 CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX29yX3BkIChfX20xMjhkIF9fQSwgX19t MTI4ZCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX29ycGQgKChf X3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhk IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19t MTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV94b3JfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9f bTEyOGQpX19idWlsdGluX2lhMzJfeG9ycGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7Cisg fQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBlcV9wZCAoX19tMTI4ZCBfX0Es IF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBl cXBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUg X19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fY21wbHRfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICBy ZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wbHRwZCAoKF9fdjJkZilfX0EsIChfX3Yy ZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcGxlX3BkIChf X20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRp bl9pYTMyX2NtcGxlcGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRp YyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytz dGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBndF9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19C KQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBndHBkICgoX192MmRm KV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1f Y21wZ2VfcGQgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEy OGQpX19idWlsdGluX2lhMzJfY21wZ2VwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9 CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcG5lcV9wZCAoX19tMTI4ZCBfX0Es IF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBu ZXFwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX2NtcG5sdF9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAg IHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubHRwZCAoKF9fdjJkZilfX0EsIChf X3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcG5sZV9w ZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1 aWx0aW5faWEzMl9jbXBubGVwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCist c3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcG5ndF9wZCAoX19tMTI4ZCBfX0EsIF9fbTEy OGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBuZ3RwZCAo KF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEy OGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX2NtcG5nZV9wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVy biAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBuZ2VwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYp X19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcG9yZF9wZCAoX19t MTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5f aWEzMl9jbXBvcmRwZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX2NtcHVub3JkX3BkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBf X0IpCisgeworICAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcHVub3JkcGQgKChf X3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhk IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19t MTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9jbXBlcV9zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAo X19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBlcXNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0Ip OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wbHRfc2QgKF9fbTEyOGQg X19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJf Y21wbHRzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX2NtcGxlX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgewor ICAgcmV0dXJuIChfX20xMjhkKV9fYnVpbHRpbl9pYTMyX2NtcGxlc2QgKChfX3YyZGYpX19BLCAo X192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBndF9z ZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZCkgX19i dWlsdGluX2lhMzJfbW92c2QgKChfX3YyZGYpIF9fQSwKK0BAIC00MzYsNyArNDM2LDcgQEAgX21t X2NtcGd0X3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgCQkJCQkJCQkgX19BKSk7Cisg fQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBnZV9zZCAoX19tMTI4ZCBfX0Es IF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbW92 c2QgKChfX3YyZGYpIF9fQSwKK0BAIC00NDYsMjUgKzQ0NiwyNSBAQCBfbW1fY21wZ2Vfc2QgKF9f bTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyAJCQkJCQkJCSBfX0EpKTsKKyB9CisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX2NtcG5lcV9zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19C KQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jbXBuZXFzZCAoKF9fdjJk ZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhk IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21t X2NtcG5sdF9zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19t MTI4ZClfX2J1aWx0aW5faWEzMl9jbXBubHRzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsK KyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcG5sZV9zZCAoX19tMTI4ZCBf X0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9j bXBubGVzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX2NtcG5ndF9zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsK KyAgIHJldHVybiAoX19tMTI4ZCkgX19idWlsdGluX2lhMzJfbW92c2QgKChfX3YyZGYpIF9fQSwK K0BAIC00NzQsNyArNDc0LDcgQEAgX21tX2NtcG5ndF9zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQg X19CKQorIAkJCQkJCQkJICBfX0EpKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20x MjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX2NtcG5nZV9zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiAo X19tMTI4ZCkgX19idWlsdGluX2lhMzJfbW92c2QgKChfX3YyZGYpIF9fQSwKK0BAIC00ODQsODUg KzQ4NCw4NSBAQCBfbW1fY21wbmdlX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgCQkJ CQkJCQkgIF9fQSkpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wb3Jk X3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhkKV9f YnVpbHRpbl9pYTMyX2NtcG9yZHNkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAK Ky1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wdW5vcmRfc2QgKF9fbTEyOGQgX19BLCBf X20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY21wdW5v cmRzZCAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9jb21pZXFfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4g X19idWlsdGluX2lhMzJfY29taXNkZXEgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY29taWx0X3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBf X0IpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGx0ICgoX192MmRmKV9fQSwg KF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NvbWlsZV9zZCAoX19t MTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jb21p c2RsZSAoKF9fdjJkZilfX0EsIChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9jb21pZ3Rfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4g X19idWlsdGluX2lhMzJfY29taXNkZ3QgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p KQorK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY29taWdlX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBf X0IpCisgeworICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2NvbWlzZGdlICgoX192MmRmKV9fQSwg KF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NvbWluZXFfc2QgKF9f bTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfY29t aXNkbmVxICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX3Vjb21pZXFfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1 cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGVxICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOwor IH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3Vjb21pbHRfc2QgKF9fbTEyOGQgX19BLCBfX20x MjhkIF9fQikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGx0ICgoX192MmRm KV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3Vjb21pbGVf c2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lh MzJfdWNvbWlzZGxlICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMg X19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMg X19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX3Vjb21pZ3Rfc2QgKF9fbTEyOGQgX19BLCBfX20xMjhkIF9fQikKKyB7Cisg ICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGd0ICgoX192MmRmKV9fQSwgKF9fdjJkZilf X0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3Vjb21pZ2Vfc2QgKF9fbTEyOGQgX19B LCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfdWNvbWlzZGdlICgo X192MmRmKV9fQSwgKF9fdjJkZilfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgaW50IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgaW50IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3Vj b21pbmVxX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfX0IpCisgeworICAgcmV0dXJuIF9fYnVp bHRpbl9pYTMyX3Vjb21pc2RuZXEgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CitAQCAtNTcw LDI1ICs1NzAsMjUgQEAgX21tX3Vjb21pbmVxX3NkIChfX20xMjhkIF9fQSwgX19tMTI4ZCBfXwor IAorIC8qIENyZWF0ZSBhIHZlY3RvciBvZiBRaSwgd2hlcmUgaSBpcyB0aGUgZWxlbWVudCBudW1i ZXIuICAqLworIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXRfZXBpNjR4IChsb25n IGxvbmcgX19xMSwgbG9uZyBsb25nIF9fcTApCisgeworICAgcmV0dXJuIF9fZXh0ZW5zaW9uX18g KF9fbTEyOGkpKF9fdjJkaSl7IF9fcTAsIF9fcTEgfTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX3NldF9lcGk2NCAoX19tNjQgX19xMSwgIF9fbTY0IF9fcTApCisgeworICAg cmV0dXJuIF9tbV9zZXRfZXBpNjR4ICgobG9uZyBsb25nKV9fcTEsIChsb25nIGxvbmcpX19xMCk7 CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXRfZXBpMzIgKGludCBfX3Ez LCBpbnQgX19xMiwgaW50IF9fcTEsIGludCBfX3EwKQorIHsKKyAgIHJldHVybiBfX2V4dGVuc2lv bl9fIChfX20xMjhpKShfX3Y0c2kpeyBfX3EwLCBfX3ExLCBfX3EyLCBfX3EzIH07CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXRfZXBpMTYgKHNob3J0IF9fcTcsIHNob3J0 IF9fcTYsIHNob3J0IF9fcTUsIHNob3J0IF9fcTQsCisgCSAgICAgICBzaG9ydCBfX3EzLCBzaG9y dCBfX3EyLCBzaG9ydCBfX3ExLCBzaG9ydCBfX3EwKQorIHsKK0BAIC01OTYsNyArNTk2LDcgQEAg X21tX3NldF9lcGkxNiAoc2hvcnQgX19xNywgc2hvcnQgX19xNiwgcworICAgICBfX3EwLCBfX3Ex LCBfX3EyLCBfX3EzLCBfX3E0LCBfX3E1LCBfX3E2LCBfX3E3IH07CisgfQorIAorLXN0YXRpYyBf X2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9zZXRfZXBpOCAoY2hhciBfX3ExNSwgY2hhciBfX3ExNCwgY2hh ciBfX3ExMywgY2hhciBfX3ExMiwKKyAJICAgICAgY2hhciBfX3ExMSwgY2hhciBfX3ExMCwgY2hh ciBfX3EwOSwgY2hhciBfX3EwOCwKKyAJICAgICAgY2hhciBfX3EwNywgY2hhciBfX3EwNiwgY2hh ciBfX3EwNSwgY2hhciBfX3EwNCwKK0BAIC02MTAsMzEgKzYxMCwzMSBAQCBfbW1fc2V0X2VwaTgg KGNoYXIgX19xMTUsIGNoYXIgX19xMTQsIGNoCisgCisgLyogU2V0IGFsbCBvZiB0aGUgZWxlbWVu dHMgb2YgdGhlIHZlY3RvciB0byBBLiAgKi8KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEy OGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fc2V0MV9lcGk2NHggKGxvbmcgbG9uZyBfX0EpCisgeworICAgcmV0dXJuIF9tbV9zZXRfZXBp NjR4IChfX0EsIF9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXQx X2VwaTY0IChfX202NCBfX0EpCisgeworICAgcmV0dXJuIF9tbV9zZXRfZXBpNjQgKF9fQSwgX19B KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldDFfZXBpMzIgKGludCBf X0EpCisgeworICAgcmV0dXJuIF9tbV9zZXRfZXBpMzIgKF9fQSwgX19BLCBfX0EsIF9fQSk7Cisg fQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXQxX2VwaTE2IChzaG9ydCBfX0Ep CisgeworICAgcmV0dXJuIF9tbV9zZXRfZXBpMTYgKF9fQSwgX19BLCBfX0EsIF9fQSwgX19BLCBf X0EsIF9fQSwgX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldDFf ZXBpOCAoY2hhciBfX0EpCisgeworICAgcmV0dXJuIF9tbV9zZXRfZXBpOCAoX19BLCBfX0EsIF9f QSwgX19BLCBfX0EsIF9fQSwgX19BLCBfX0EsCitAQCAtNjQ0LDI2ICs2NDQsMjYgQEAgX21tX3Nl dDFfZXBpOCAoY2hhciBfX0EpCisgLyogQ3JlYXRlIGEgdmVjdG9yIG9mIFFpLCB3aGVyZSBpIGlz IHRoZSBlbGVtZW50IG51bWJlci4KKyAgICBUaGUgcGFyYW1ldGVyIG9yZGVyIGlzIHJldmVyc2Vk IGZyb20gdGhlIF9tbV9zZXRfZXBpKiBmdW5jdGlvbnMuICAqLworIAorLXN0YXRpYyBfX2lubGlu ZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV9zZXRyX2VwaTY0IChfX202NCBfX3EwLCBfX202NCBfX3ExKQorIHsKKyAg IHJldHVybiBfbW1fc2V0X2VwaTY0IChfX3ExLCBfX3EwKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX3NldHJfZXBpMzIgKGludCBfX3EwLCBpbnQgX19xMSwgaW50IF9fcTIs IGludCBfX3EzKQorIHsKKyAgIHJldHVybiBfbW1fc2V0X2VwaTMyIChfX3EzLCBfX3EyLCBfX3Ex LCBfX3EwKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldHJfZXBpMTYg KHNob3J0IF9fcTAsIHNob3J0IF9fcTEsIHNob3J0IF9fcTIsIHNob3J0IF9fcTMsCisgCSAgICAg ICAgc2hvcnQgX19xNCwgc2hvcnQgX19xNSwgc2hvcnQgX19xNiwgc2hvcnQgX19xNykKKyB7Cisg ICByZXR1cm4gX21tX3NldF9lcGkxNiAoX19xNywgX19xNiwgX19xNSwgX19xNCwgX19xMywgX19x MiwgX19xMSwgX19xMCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zZXRy X2VwaTggKGNoYXIgX19xMDAsIGNoYXIgX19xMDEsIGNoYXIgX19xMDIsIGNoYXIgX19xMDMsCisg CSAgICAgICBjaGFyIF9fcTA0LCBjaGFyIF9fcTA1LCBjaGFyIF9fcTA2LCBjaGFyIF9fcTA3LAor IAkgICAgICAgY2hhciBfX3EwOCwgY2hhciBfX3EwOSwgY2hhciBfX3ExMCwgY2hhciBfX3ExMSwK K0BAIC02NzUsMTM0ICs2NzUsMTM0IEBAIF9tbV9zZXRyX2VwaTggKGNoYXIgX19xMDAsIGNoYXIg X19xMDEsIGMKKyAKKyAvKiBDcmVhdGUgYSB2ZWN0b3Igd2l0aCBlbGVtZW50IDAgYXMgKlAgYW5k IHRoZSByZXN0IHplcm8uICAqLworIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9sb2Fk X3NpMTI4IChfX20xMjhpIGNvbnN0ICpfX1ApCisgeworICAgcmV0dXJuICpfX1A7CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9sb2FkdV9zaTEyOCAoX19tMTI4aSBjb25zdCAq X19QKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSkgX19idWlsdGluX2lhMzJfbG9hZGRxdSAoKGNo YXIgY29uc3QgKilfX1ApOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbG9h ZGxfZXBpNjQgKF9fbTEyOGkgY29uc3QgKl9fUCkKKyB7CisgICByZXR1cm4gX21tX3NldF9lcGk2 NCAoKF9fbTY0KTBMTCwgKihfX202NCAqKV9fUCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSB2 b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUg dm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9zdG9yZV9zaTEyOCAoX19tMTI4aSAqX19QLCBfX20xMjhpIF9fQikKKyB7CisgICAqX19Q ID0gX19COworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3RvcmV1X3NpMTI4IChfX20x MjhpICpfX1AsIF9fbTEyOGkgX19CKQorIHsKKyAgIF9fYnVpbHRpbl9pYTMyX3N0b3JlZHF1ICgo Y2hhciAqKV9fUCwgKF9fdjE2cWkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIHZvaWQg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lk IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21t X3N0b3JlbF9lcGk2NCAoX19tMTI4aSAqX19QLCBfX20xMjhpIF9fQikKKyB7CisgICAqKGxvbmcg bG9uZyAqKV9fUCA9IF9fYnVpbHRpbl9pYTMyX3ZlY19leHRfdjJkaSAoKF9fdjJkaSlfX0IsIDAp OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX202NCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9tb3ZlcGk2NF9waTY0IChfX20xMjhp IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTY0KSBfX2J1aWx0aW5faWEzMl92ZWNfZXh0X3YyZGkg KChfX3YyZGkpX19CLCAwKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX21v dnBpNjRfZXBpNjQgKF9fbTY0IF9fQSkKKyB7CisgICByZXR1cm4gX21tX3NldF9lcGk2NCAoKF9f bTY0KTBMTCwgX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX21vdmVf ZXBpNjQgKF9fbTEyOGkgX19BKQorIHsKKyAgIHJldHVybiBfbW1fc2V0X2VwaTY0ICgoX19tNjQp MExMLCBfbW1fbW92ZXBpNjRfcGk2NCAoX19BKSk7CisgfQorIAorIC8qIENyZWF0ZSBhIHZlY3Rv ciBvZiB6ZXJvcy4gICovCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NldHplcm9fc2kx MjggKHZvaWQpCisgeworICAgcmV0dXJuIF9fZXh0ZW5zaW9uX18gKF9fbTEyOGkpKF9fdjRzaSl7 IDAsIDAsIDAsIDAgfTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dGVw aTMyX3BkIChfX20xMjhpIF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lh MzJfY3Z0ZHEycGQgKChfX3Y0c2kpIF9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20x MjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fY3Z0ZXBpMzJfcHMgKF9fbTEyOGkgX19BKQorIHsKKyAgIHJldHVybiAoX19tMTI4KV9f YnVpbHRpbl9pYTMyX2N2dGRxMnBzICgoX192NHNpKSBfX0EpOworIH0KKyAKKy1zdGF0aWMgX19p bmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGlj IF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKKyBfbW1fY3Z0cGRfZXBpMzIgKF9fbTEyOGQgX19BKQorIHsKKyAgIHJldHVy biAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnRwZDJkcSAoKF9fdjJkZikgX19BKTsKKyB9Cisg Cistc3RhdGljIF9faW5saW5lIF9fbTY0IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tNjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0cGRfcGkzMiAoX19tMTI4ZCBfX0EpCisgewor ICAgcmV0dXJuIChfX202NClfX2J1aWx0aW5faWEzMl9jdnRwZDJwaSAoKF9fdjJkZikgX19BKTsK KyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRwZF9wcyAoX19tMTI4ZCBfX0Ep CisgeworICAgcmV0dXJuIChfX20xMjgpX19idWlsdGluX2lhMzJfY3Z0cGQycHMgKChfX3YyZGYp IF9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnR0cGRfZXBpMzIg KF9fbTEyOGQgX19BKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9jdnR0 cGQyZHEgKChfX3YyZGYpIF9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX202NCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTY0IF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2 dHRwZF9waTMyIChfX20xMjhkIF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTY0KV9fYnVpbHRpbl9p YTMyX2N2dHRwZDJwaSAoKF9fdjJkZikgX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9f bTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxf XykpCisgX21tX2N2dHBpMzJfcGQgKF9fbTY0IF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTEyOGQp X19idWlsdGluX2lhMzJfY3Z0cGkycGQgKChfX3Yyc2kpIF9fQSk7CisgfQorIAorLXN0YXRpYyBf X2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9jdnRwc19lcGkzMiAoX19tMTI4IF9fQSkKKyB7CisgICByZXR1 cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfY3Z0cHMyZHEgKChfX3Y0c2YpIF9fQSk7CisgfQor IAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19p bmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnR0cHNfZXBpMzIgKF9fbTEyOCBfX0Ep CisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX2N2dHRwczJkcSAoKF9fdjRz ZikgX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHBzX3BkIChf X20xMjggX19BKQorIHsKKyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jdnRwczJw ZCAoKF9fdjRzZikgX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRzZF9zaTMy IChfX20xMjhkIF9fQSkKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0c2Qyc2kgKChf X3YyZGYpIF9fQSk7CitAQCAtODEwLDIxICs4MTAsMjEgQEAgX21tX2N2dHNkX3NpMzIgKF9fbTEy OGQgX19BKQorIAorICNpZmRlZiBfX3g4Nl82NF9fCisgLyogSW50ZWwgaW50cmluc2ljLiAgKi8K Ky1zdGF0aWMgX19pbmxpbmUgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu ZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2N2dHNkX3NpNjQgKF9fbTEyOGQgX19B KQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9jdnRzZDJzaTY0ICgoX192MmRmKSBfX0Ep OworIH0KKyAKKyAvKiBNaWNyb3NvZnQgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUg bG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX2N2dHNkX3NpNjR4IChfX20xMjhkIF9fQSkKKyB7CisgICByZXR1cm4g X19idWlsdGluX2lhMzJfY3Z0c2Qyc2k2NCAoKF9fdjJkZikgX19BKTsKKyB9CisgI2VuZGlmCisg Cistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9jdnR0c2Rfc2kzMiAoX19tMTI4ZCBfX0EpCisgeworICAg cmV0dXJuIF9fYnVpbHRpbl9pYTMyX2N2dHRzZDJzaSAoKF9fdjJkZikgX19BKTsKK0BAIC04MzIs MjcgKzgzMiwyNyBAQCBfbW1fY3Z0dHNkX3NpMzIgKF9fbTEyOGQgX19BKQorIAorICNpZmRlZiBf X3g4Nl82NF9fCisgLyogSW50ZWwgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgbG9u ZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxp bmUgbG9uZyBsb25nIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX2N2dHRzZF9zaTY0IChfX20xMjhkIF9fQSkKKyB7CisgICByZXR1cm4gX19i dWlsdGluX2lhMzJfY3Z0dHNkMnNpNjQgKChfX3YyZGYpIF9fQSk7CisgfQorIAorIC8qIE1pY3Jv c29mdCBpbnRyaW5zaWMuICAqLworLXN0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBsb25nIGxvbmcgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0 dHNkX3NpNjR4IChfX20xMjhkIF9fQSkKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfY3Z0 dHNkMnNpNjQgKChfX3YyZGYpIF9fQSk7CisgfQorICNlbmRpZgorIAorLXN0YXRpYyBfX2lubGlu ZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjggX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fY3Z0c2Rfc3MgKF9fbTEyOCBfX0EsIF9fbTEyOGQgX19CKQorIHsKKyAgIHJl dHVybiAoX19tMTI4KV9fYnVpbHRpbl9pYTMyX2N2dHNkMnNzICgoX192NHNmKSBfX0EsIChfX3Yy ZGYpIF9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRzaTMyX3Nk IChfX20xMjhkIF9fQSwgaW50IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGlu X2lhMzJfY3Z0c2kyc2QgKChfX3YyZGYpIF9fQSwgX19CKTsKK0BAIC04NjAsMjEgKzg2MCwyMSBA QCBfbW1fY3Z0c2kzMl9zZCAoX19tMTI4ZCBfX0EsIGludCBfX0IpCisgCisgI2lmZGVmIF9feDg2 XzY0X18KKyAvKiBJbnRlbCBpbnRyaW5zaWMuICAqLworLXN0YXRpYyBfX2lubGluZSBfX20xMjhk IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19t MTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9jdnRzaTY0X3NkIChfX20xMjhkIF9fQSwgbG9uZyBsb25nIF9fQikKKyB7CisgICByZXR1 cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfY3Z0c2k2NDJzZCAoKF9fdjJkZikgX19BLCBfX0Ip OworIH0KKyAKKyAvKiBNaWNyb3NvZnQgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUg X19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fY3Z0c2k2NHhfc2QgKF9fbTEyOGQgX19BLCBsb25nIGxvbmcgX19CKQorIHsK KyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl9jdnRzaTY0MnNkICgoX192MmRmKSBf X0EsIF9fQik7CisgfQorICNlbmRpZgorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9j dnRzc19zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhk KV9fYnVpbHRpbl9pYTMyX2N2dHNzMnNkICgoX192MmRmKSBfX0EsIChfX3Y0c2YpX19CKTsKK0BA IC04ODIsMjQyICs4ODIsMjQyIEBAIF9tbV9jdnRzc19zZCAoX19tMTI4ZCBfX0EsIF9fbTEyOCBf X0IpCisgCisgI2RlZmluZSBfbW1fc2h1ZmZsZV9wZChfX0EsIF9fQiwgX19DKSAoKF9fbTEyOGQp X19idWlsdGluX2lhMzJfc2h1ZnBkICgoX192MmRmKV9fQSwgKF9fdjJkZilfX0IsIChfX0MpKSkK KyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fdW5wYWNraGlfcGQgKF9fbTEyOGQgX19B LCBfX20xMjhkIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfdW5w Y2tocGQgKChfX3YyZGYpX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGlu ZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19p bmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmlj aWFsX18pKQorIF9tbV91bnBhY2tsb19wZCAoX19tMTI4ZCBfX0EsIF9fbTEyOGQgX19CKQorIHsK KyAgIHJldHVybiAoX19tMTI4ZClfX2J1aWx0aW5faWEzMl91bnBja2xwZCAoKF9fdjJkZilfX0Es IChfX3YyZGYpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2xvYWRo X3BkIChfX20xMjhkIF9fQSwgZG91YmxlIGNvbnN0ICpfX0IpCisgeworICAgcmV0dXJuIChfX20x MjhkKV9fYnVpbHRpbl9pYTMyX2xvYWRocGQgKChfX3YyZGYpX19BLCBfX0IpOworIH0KKyAKKy1z dGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbG9hZGxfcGQgKF9fbTEyOGQgX19BLCBkb3VibGUg Y29uc3QgKl9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpX19idWlsdGluX2lhMzJfbG9hZGxw ZCAoKF9fdjJkZilfX0EsIF9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBpbnQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBpbnQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbW92ZW1h c2tfcGQgKF9fbTEyOGQgX19BKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5faWEzMl9tb3Ztc2tw ZCAoKF9fdjJkZilfX0EpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fcGFj a3NfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEy OGkpX19idWlsdGluX2lhMzJfcGFja3Nzd2IxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7 CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9wYWNrc19lcGkzMiAoX19tMTI4 aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEz Ml9wYWNrc3NkdzEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsKKyB9CisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX3BhY2t1c19lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkg X19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWNrdXN3YjEyOCAo KF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEy OGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX3VucGFja2hpX2VwaTggKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICBy ZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHVucGNraGJ3MTI4ICgoX192MTZxaSlfX0Es IChfX3YxNnFpKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV91bnBh Y2toaV9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19t MTI4aSlfX2J1aWx0aW5faWEzMl9wdW5wY2tod2QxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9f Qik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV91bnBhY2toaV9lcGkzMiAo X19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0 aW5faWEzMl9wdW5wY2toZHExMjggKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV91bnBhY2toaV9lcGk2NCAoX19tMTI4aSBfX0Es IF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdW5w Y2tocWRxMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19p bmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGlj IF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0 aWZpY2lhbF9fKSkKKyBfbW1fdW5wYWNrbG9fZXBpOCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19C KQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wdW5wY2tsYncxMjggKChf X3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEy OGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBf X20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX3VucGFja2xvX2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAg cmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3B1bnBja2x3ZDEyOCAoKF9fdjhoaSlfX0Es IChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3VucGFj a2xvX2VwaTMyIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20x MjhpKV9fYnVpbHRpbl9pYTMyX3B1bnBja2xkcTEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19C KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3VucGFja2xvX2VwaTY0IChf X20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRp bl9pYTMyX3B1bnBja2xxZHExMjggKChfX3YyZGkpX19BLCAoX192MmRpKV9fQik7CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9hZGRfZXBpOCAoX19tMTI4aSBfX0EsIF9fbTEy OGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkYjEyOCAo KF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19t MTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fYWRkX2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0 dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGR3MTI4ICgoX192OGhpKV9fQSwgKF9fdjho aSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fYWRkX2VwaTMyIChf X20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRp bl9pYTMyX3BhZGRkMTI4ICgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOworIH0KKyAKKy1zdGF0 aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fYWRkX2VwaTY0IChfX20xMjhpIF9fQSwgX19tMTI4aSBf X0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGRxMTI4ICgoX192 MmRpKV9fQSwgKF9fdjJkaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEy OGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fYWRkc19lcGk4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChf X20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhZGRzYjEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlf X0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fs d2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fYWRkc19lcGkxNiAoX19t MTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5f aWEzMl9wYWRkc3cxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7CisgfQorIAorLXN0YXRp YyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytz dGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9hZGRzX2VwdTggKF9fbTEyOGkgX19BLCBfX20xMjhpIF9f QikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGFkZHVzYjEyOCAoKF9f djE2cWkpX19BLCAoX192MTZxaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4 aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9f bTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fYWRkc19lcHUxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVy biAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYWRkdXN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjho aSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3ViX2VwaTggKF9f bTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGlu X2lhMzJfcHN1YmIxMjggKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsKKyB9CisgCistc3Rh dGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQor K3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N1Yl9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkg X19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3VidzEyOCAoKF9f djhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20x MjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX3N1Yl9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAo X19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3ViZDEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19C KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3N1Yl9lcGk2NCAoX19tMTI4 aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEz Ml9wc3VicTEyOCAoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKKyB9CisgCistc3RhdGljIF9f aW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX3N1YnNfZXBpOCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQor IHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3Vic2IxMjggKChfX3YxNnFp KV9fQSwgKF9fdjE2cWkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhp IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21t X3N1YnNfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4gKF9f bTEyOGkpX19idWlsdGluX2lhMzJfcHN1YnN3MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0Ip OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3Vic19lcHU4IChfX20xMjhp IF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMy X3BzdWJ1c2IxMjggKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkpX19CKTsKKyB9CisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX3N1YnNfZXB1MTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9f QikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHN1YnVzdzEyOCAoKF9f djhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20x MjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX21hZGRfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4g KF9fbTEyOGkpX19idWlsdGluX2lhMzJfcG1hZGR3ZDEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkp X19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX211bGhpX2VwaTE2IChf X20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRp bl9pYTMyX3BtdWxodzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3Rh dGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQor K3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCisgX21tX211bGxvX2VwaTE2IChfX20xMjhpIF9fQSwgX19tMTI4 aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtdWxsdzEyOCAo KF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTY0 IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19t NjQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fbXVsX3N1MzIgKF9fbTY0IF9fQSwgX19tNjQgX19CKQorIHsKKyAgIHJldHVybiAoX19tNjQp X19idWlsdGluX2lhMzJfcG11bHVkcSAoKF9fdjJzaSlfX0EsIChfX3Yyc2kpX19CKTsKKyB9Cisg Cistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX211bF9lcHUzMiAoX19tMTI4aSBfX0EsIF9f bTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wbXVsdWRx MTI4ICgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOworIH0KKyAKKyAjaWYgMAorLXN0YXRpYyBf X2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0 aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQorIF9tbV9zbGxpX2VwaTE2IChfX20xMjhpIF9fQSwgaW50IF9fQikKKyB7 CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNsbHdpMTI4ICgoX192OGhpKV9f QSwgX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygo X19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NsbGlfZXBpMzIg KF9fbTEyOGkgX19BLCBpbnQgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5f aWEzMl9wc2xsZGkxMjggKChfX3Y0c2kpX19BLCBfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9f aW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKKyBfbW1fc2xsaV9lcGk2NCAoX19tMTI4aSBfX0EsIGludCBfX0IpCisgeworICAg cmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGxxaTEyOCAoKF9fdjJkaSlfX0EsIF9f Qik7CitAQCAtMTEzMiwxMyArMTEzMiwxMyBAQCBfbW1fc2xsaV9lcGk2NCAoX19tMTI4aSBfX0Es IGludCBfX0IpCisgI2VuZGlmCisgCisgI2lmIDAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEy OGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBf bW1fc3JhaV9lcGkxNiAoX19tMTI4aSBfX0EsIGludCBfX0IpCisgeworICAgcmV0dXJuIChfX20x MjhpKV9fYnVpbHRpbl9pYTMyX3BzcmF3aTEyOCAoKF9fdjhoaSlfX0EsIF9fQik7CisgfQorIAor LXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zcmFpX2VwaTMyIChfX20xMjhpIF9fQSwgaW50 IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNyYWRpMTI4ICgo X192NHNpKV9fQSwgX19CKTsKK0BAIC0xMTUxLDEzICsxMTUxLDEzIEBAIF9tbV9zcmFpX2VwaTMy IChfX20xMjhpIF9fQSwgaW50IF9fQikKKyAjZW5kaWYKKyAKKyAjaWYgMAorLXN0YXRpYyBfX20x MjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19tMTI4aSBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9z cmxpX3NpMTI4IChfX20xMjhpIF9fQSwgaW50IF9fQikKKyB7CisgICByZXR1cm4gKChfX20xMjhp KV9fYnVpbHRpbl9pYTMyX3BzcmxkcWkxMjggKF9fQSwgX19CICogOCkpOworIH0KKyAKKy1zdGF0 aWMgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9f bTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fc3JsaV9zaTEyOCAoX19tMTI4aSBfX0EsIGludCBfX0IpCisgeworICAgcmV0dXJuICgo X19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsZHFpMTI4IChfX0EsIF9fQiAqIDgpKTsKK0BAIC0x MTcwLDE5ICsxMTcwLDE5IEBAIF9tbV9zcmxpX3NpMTI4IChfX20xMjhpIF9fQSwgaW50IF9fQikK KyAjZW5kaWYKKyAKKyAjaWYgMAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zcmxpX2Vw aTE2IChfX20xMjhpIF9fQSwgaW50IF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWls dGluX2lhMzJfcHNybHdpMTI4ICgoX192OGhpKV9fQSwgX19CKTsKKyB9CisgCistc3RhdGljIF9f aW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRp YyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCisgX21tX3NybGlfZXBpMzIgKF9fbTEyOGkgX19BLCBpbnQgX19CKQorIHsK KyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZGkxMjggKChfX3Y0c2kpX19B LCBfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChf X2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVf XygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3JsaV9lcGk2NCAo X19tMTI4aSBfX0EsIGludCBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9p YTMyX3BzcmxxaTEyOCAoKF9fdjJkaSlfX0EsIF9fQik7CitAQCAtMTE5NiwxNDAgKzExOTYsMTQw IEBAIF9tbV9zcmxpX2VwaTY0IChfX20xMjhpIF9fQSwgaW50IF9fQikKKyAgICgoX19tMTI4aSlf X2J1aWx0aW5faWEzMl9wc3JscWkxMjggKChfX3Y0c2kpKF9fQSksIF9fQikpCisgI2VuZGlmCisg Cistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NsbF9lcGkxNiAoX19tMTI4aSBfX0EsIF9f bTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc2xsdzEy OCgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19t MTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fc2xsX2VwaTMyIChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0 dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BzbGxkMTI4KChfX3Y0c2kpX19BLCAoX192NHNp KV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zbGxfZXBpNjQgKF9f bTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGlu X2lhMzJfcHNsbHExMjgoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKKyB9CisgCistc3RhdGlj IF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0 YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCisgX21tX3NyYV9lcGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19C KQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhdzEyOCAoKF9fdjho aSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhp IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21t X3NyYV9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19t MTI4aSlfX2J1aWx0aW5faWEzMl9wc3JhZDEyOCAoKF9fdjRzaSlfX0EsIChfX3Y0c2kpX19CKTsK KyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NybF9lcGkxNiAoX19tMTI4aSBf X0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9w c3JsdzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX3NybF9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsK KyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wc3JsZDEyOCAoKF9fdjRzaSlfX0Es IChfX3Y0c2kpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0 cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX3NybF9l cGk2NCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlf X2J1aWx0aW5faWEzMl9wc3JscTEyOCAoKF9fdjJkaSlfX0EsIChfX3YyZGkpX19CKTsKKyB9Cisg Cistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2FuZF9zaTEyOCAoX19tMTI4aSBfX0EsIF9f bTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wYW5kMTI4 ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19t MTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fYW5kbm90X3NpMTI4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAg cmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BhbmRuMTI4ICgoX192MmRpKV9fQSwgKF9f djJkaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1 dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fb3Jfc2kxMjgg KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWls dGluX2lhMzJfcG9yMTI4ICgoX192MmRpKV9fQSwgKF9fdjJkaSlfX0IpOworIH0KKyAKKy1zdGF0 aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisr c3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1feG9yX3NpMTI4IChfX20xMjhpIF9fQSwgX19tMTI4aSBf X0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3B4b3IxMjggKChfX3Yy ZGkpX19BLCAoX192MmRpKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9f YXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4 aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9t bV9jbXBlcV9lcGk4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChf X20xMjhpKV9fYnVpbHRpbl9pYTMyX3BjbXBlcWIxMjggKChfX3YxNnFpKV9fQSwgKF9fdjE2cWkp X19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcGVxX2VwaTE2IChf X20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRp bl9pYTMyX3BjbXBlcXcxMjggKChfX3Y4aGkpX19BLCAoX192OGhpKV9fQik7CisgfQorIAorLXN0 YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkK KytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBlcV9lcGkzMiAoX19tMTI4aSBfX0EsIF9fbTEy OGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21wZXFkMTI4 ICgoX192NHNpKV9fQSwgKF9fdjRzaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19t MTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKKyBfbW1fY21wbHRfZXBpOCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJl dHVybiAoX19tMTI4aSlfX2J1aWx0aW5faWEzMl9wY21wZ3RiMTI4ICgoX192MTZxaSlfX0IsIChf X3YxNnFpKV9fQSk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRl X18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJp YnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jbXBsdF9l cGkxNiAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlf X2J1aWx0aW5faWEzMl9wY21wZ3R3MTI4ICgoX192OGhpKV9fQiwgKF9fdjhoaSlfX0EpOworIH0K KyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY21wbHRfZXBpMzIgKF9fbTEyOGkgX19B LCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGNt cGd0ZDEyOCAoKF9fdjRzaSlfX0IsIChfX3Y0c2kpX19BKTsKKyB9CisgCistc3RhdGljIF9faW5s aW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBf X2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCisgX21tX2NtcGd0X2VwaTggKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7 CisgICByZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcGNtcGd0YjEyOCAoKF9fdjE2cWkp X19BLCAoX192MTZxaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkg X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1f Y21wZ3RfZXBpMTYgKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICByZXR1cm4gKF9f bTEyOGkpX19idWlsdGluX2lhMzJfcGNtcGd0dzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19C KTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdh eXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2NtcGd0X2VwaTMyIChfX20x MjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9p YTMyX3BjbXBndGQxMjggKChfX3Y0c2kpX19BLCAoX192NHNpKV9fQik7CisgfQorIAorICNpZiAw Cistc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykp Cisrc3RhdGljIF9faW5saW5lIGludCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQorIF9tbV9leHRyYWN0X2VwaTE2IChfX20xMjhpIGNvbnN0IF9fQSwg aW50IGNvbnN0IF9fTikKKyB7CisgICByZXR1cm4gX19idWlsdGluX2lhMzJfdmVjX2V4dF92OGhp ICgoX192OGhpKV9fQSwgX19OKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhp IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21t X2luc2VydF9lcGkxNiAoX19tMTI4aSBjb25zdCBfX0EsIGludCBjb25zdCBfX0QsIGludCBjb25z dCBfX04pCisgeworICAgcmV0dXJuIChfX20xMjhpKSBfX2J1aWx0aW5faWEzMl92ZWNfc2V0X3Y4 aGkgKChfX3Y4aGkpX19BLCBfX0QsIF9fTik7CitAQCAtMTM0MSwzNyArMTM0MSwzNyBAQCBfbW1f aW5zZXJ0X2VwaTE2IChfX20xMjhpIGNvbnN0IF9fQSwgaW50CisgICAoKF9fbTEyOGkpIF9fYnVp bHRpbl9pYTMyX3ZlY19zZXRfdjhoaSAoKF9fdjhoaSkoQSksIChEKSwgKE4pKSkKKyAjZW5kaWYK KyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWF4X2VwaTE2IChfX20xMjhpIF9fQSwg X19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYXhz dzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX21heF9lcHU4IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAg cmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtYXh1YjEyOCAoKF9fdjE2cWkpX19BLCAo X192MTZxaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fbWluX2Vw aTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9f YnVpbHRpbl9pYTMyX3BtaW5zdzEyOCAoKF9fdjhoaSlfX0EsIChfX3Y4aGkpX19CKTsKKyB9Cisg Cistc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5l X18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu bGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX21pbl9lcHU4IChfX20xMjhpIF9fQSwgX19t MTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtaW51YjEy OCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUg aW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUg aW50IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisg X21tX21vdmVtYXNrX2VwaTggKF9fbTEyOGkgX19BKQorIHsKKyAgIHJldHVybiBfX2J1aWx0aW5f aWEzMl9wbW92bXNrYjEyOCAoKF9fdjE2cWkpX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5l IF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lu bGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNp YWxfXykpCisgX21tX211bGhpX2VwdTE2IChfX20xMjhpIF9fQSwgX19tMTI4aSBfX0IpCisgewor ICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3BtdWxodXcxMjggKChfX3Y4aGkpX19B LCAoX192OGhpKV9fQik7CitAQCAtMTM4MSw2NyArMTM4MSw2NyBAQCBfbW1fbXVsaGlfZXB1MTYg KF9fbTEyOGkgX19BLCBfX20xMjhpIF9fCisgI2RlZmluZSBfbW1fc2h1ZmZsZWxvX2VwaTE2KF9f QSwgX19CKSAoKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNodWZsdyAoKF9fdjhoaSlfX0EsIF9f QikpCisgI2RlZmluZSBfbW1fc2h1ZmZsZV9lcGkzMihfX0EsIF9fQikgKChfX20xMjhpKV9fYnVp bHRpbl9pYTMyX3BzaHVmZCAoKF9fdjRzaSlfX0EsIF9fQikpCisgCistc3RhdGljIF9faW5saW5l IHZvaWQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGlu ZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CisgX21tX21hc2ttb3ZldV9zaTEyOCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CLCBjaGFyICpf X0MpCisgeworICAgX19idWlsdGluX2lhMzJfbWFza21vdmRxdSAoKF9fdjE2cWkpX19BLCAoX192 MTZxaSlfX0IsIF9fQyk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmli dXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9hdmdf ZXB1OCAoX19tMTI4aSBfX0EsIF9fbTEyOGkgX19CKQorIHsKKyAgIHJldHVybiAoX19tMTI4aSlf X2J1aWx0aW5faWEzMl9wYXZnYjEyOCAoKF9fdjE2cWkpX19BLCAoX192MTZxaSlfX0IpOworIH0K KyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fYXZnX2VwdTE2IChfX20xMjhpIF9fQSwg X19tMTI4aSBfX0IpCisgeworICAgcmV0dXJuIChfX20xMjhpKV9fYnVpbHRpbl9pYTMyX3Bhdmd3 MTI4ICgoX192OGhpKV9fQSwgKF9fdjhoaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUg X19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5s aW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lh bF9fKSkKKyBfbW1fc2FkX2VwdTggKF9fbTEyOGkgX19BLCBfX20xMjhpIF9fQikKKyB7CisgICBy ZXR1cm4gKF9fbTEyOGkpX19idWlsdGluX2lhMzJfcHNhZGJ3MTI4ICgoX192MTZxaSlfX0EsIChf X3YxNnFpKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18o KF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9f KChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zdHJlYW1fc2kzMiAo aW50ICpfX0EsIGludCBfX0IpCisgeworICAgX19idWlsdGluX2lhMzJfbW92bnRpIChfX0EsIF9f Qik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5 c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9zdHJlYW1fc2kxMjggKF9fbTEyOGkg Kl9fQSwgX19tMTI4aSBfX0IpCisgeworICAgX19idWlsdGluX2lhMzJfbW92bnRkcSAoKF9fdjJk aSAqKV9fQSwgKF9fdjJkaSlfX0IpOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgdm9pZCBfX2F0 dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIHZvaWQgX19h dHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fc3Ry ZWFtX3BkIChkb3VibGUgKl9fQSwgX19tMTI4ZCBfX0IpCisgeworICAgX19idWlsdGluX2lhMzJf bW92bnRwZCAoX19BLCAoX192MmRmKV9fQik7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSB2b2lk IF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgdm9p ZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9t bV9jbGZsdXNoICh2b2lkIGNvbnN0ICpfX0EpCisgeworICAgX19idWlsdGluX2lhMzJfY2xmbHVz aCAoX19BKTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSB2b2lkIF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2xmZW5jZSAodm9pZCkKKyB7 CisgICBfX2J1aWx0aW5faWEzMl9sZmVuY2UgKCk7CisgfQorIAorLXN0YXRpYyBfX2lubGluZSB2 b2lkIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUg dm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQor IF9tbV9tZmVuY2UgKHZvaWQpCisgeworICAgX19idWlsdGluX2lhMzJfbWZlbmNlICgpOworIH0K KyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY3Z0c2kzMl9zaTEyOCAoaW50IF9fQSkK KyB7CisgICByZXR1cm4gX21tX3NldF9lcGkzMiAoMCwgMCwgMCwgX19BKTsKK0BAIC0xNDQ5LDE0 ICsxNDQ5LDE0IEBAIF9tbV9jdnRzaTMyX3NpMTI4IChpbnQgX19BKQorIAorICNpZmRlZiBfX3g4 Nl82NF9fCisgLyogSW50ZWwgaW50cmluc2ljLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4 aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9f bTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK KyBfbW1fY3Z0c2k2NF9zaTEyOCAobG9uZyBsb25nIF9fQSkKKyB7CisgICByZXR1cm4gX21tX3Nl dF9lcGk2NHggKDAsIF9fQSk7CisgfQorIAorIC8qIE1pY3Jvc29mdCBpbnRyaW5zaWMuICAqLwor LXN0YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f KSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jdnRzaTY0eF9zaTEyOCAobG9uZyBsb25nIF9f QSkKKyB7CisgICByZXR1cm4gX21tX3NldF9lcGk2NHggKDAsIF9fQSk7CitAQCAtMTQ2NSwzNyAr MTQ2NSwzNyBAQCBfbW1fY3Z0c2k2NHhfc2kxMjggKGxvbmcgbG9uZyBfX0EpCisgCisgLyogQ2Fz dHMgYmV0d2VlbiB2YXJpb3VzIFNQLCBEUCwgSU5UIHZlY3RvciB0eXBlcy4gIE5vdGUgdGhhdCB0 aGVzZSBkbyBubworICAgIGNvbnZlcnNpb24gb2YgdmFsdWVzLCB0aGV5IGp1c3QgY2hhbmdlIHRo ZSB0eXBlLiAgKi8KKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fKSkKKytzdGF0aWMgX19pbmxpbmUgX19tMTI4IF9fYXR0cmlidXRlX18oKF9f YWx3YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2Nhc3RwZF9wcyhfX20xMjhk IF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTEyOCkgX19BOworIH0KKyAKKy1zdGF0aWMgX19pbmxp bmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9f aW5saW5lIF9fbTEyOGkgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKKyBfbW1fY2FzdHBkX3NpMTI4KF9fbTEyOGQgX19BKQorIHsKKyAgIHJldHVybiAo X19tMTI4aSkgX19BOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmUgX19tMTI4ZCBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRy aWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKKyBfbW1fY2FzdHBz X3BkKF9fbTEyOCBfX0EpCisgeworICAgcmV0dXJuIChfX20xMjhkKSBfX0E7CisgfQorIAorLXN0 YXRpYyBfX2lubGluZSBfX20xMjhpIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkK KytzdGF0aWMgX19pbmxpbmUgX19tMTI4aSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQorIF9tbV9jYXN0cHNfc2kxMjgoX19tMTI4IF9fQSkKKyB7Cisg ICByZXR1cm4gKF9fbTEyOGkpIF9fQTsKKyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOCBf X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisrc3RhdGljIF9faW5saW5lIF9fbTEy OCBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQorIF9t bV9jYXN0c2kxMjhfcHMoX19tMTI4aSBfX0EpCisgeworICAgcmV0dXJuIChfX20xMjgpIF9fQTsK KyB9CisgCistc3RhdGljIF9faW5saW5lIF9fbTEyOGQgX19hdHRyaWJ1dGVfXygoX19hbHdheXNf aW5saW5lX18pKQorK3N0YXRpYyBfX2lubGluZSBfX20xMjhkIF9fYXR0cmlidXRlX18oKF9fYWx3 YXlzX2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCisgX21tX2Nhc3RzaTEyOF9wZChfX20xMjhp IF9fQSkKKyB7CisgICByZXR1cm4gKF9fbTEyOGQpIF9fQTsKCmRpZmYgLS1naXQgYS9nY2M0MS1i dWlsdGluLWNoay1hbnRpY2lwYXRlZC5wYXRjaCBiL2djYzQxLWJ1aWx0aW4tY2hrLWFudGljaXBh dGVkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWI3ODQ2Li4wMDAwMDAw Ci0tLSBhL2djYzQxLWJ1aWx0aW4tY2hrLWFudGljaXBhdGVkLnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsMzcgKzAsMCBAQAotMjAwNy0wOS0wNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhh dC5jb20+Ci0KLQlQUiBjKysvMzMyODkKLQkqIGRlY2wuYyAoYnVpbHRpbl9mdW5jdGlvbl8xKTog U2V0IERFQ0xfQU5USUNJUEFURUQgYWxzbwotCW9uIF9fKl9jaGsgbm9uLV9fYnVpbHRpbl8qIGRl Y2xzLgotCi0JKiBnKysuZGcvZWgvYnVpbHRpbjQuQzogTmV3IHRlc3QuCi0KLS0tLSBnY2MvY3Av ZGVjbC5jLmpqCTIwMDctMDgtMzEgMTQ6Mjg6MTkuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL2Nw L2RlY2wuYwkyMDA3LTA5LTA0IDIxOjI4OjA2LjAwMDAwMDAwMCArMDIwMAotQEAgLTM1MTcsNiAr MzUyOSwxNyBAQCBidWlsdGluX2Z1bmN0aW9uXzEgKHRyZWUgZGVjbCwgdHJlZSBjb250Ci0gICAg ICBhbnRpY2lwYXRlZCBidXQgbm90IGFjdHVhbGx5IGRlY2xhcmVkLiAgKi8KLSAgIGlmIChuYW1l WzBdICE9ICdfJyB8fCBuYW1lWzFdICE9ICdfJykKLSAgICAgREVDTF9BTlRJQ0lQQVRFRCAoZGVj bCkgPSAxOwotKyAgZWxzZSBpZiAoc3RybmNtcCAobmFtZSArIDIsICJidWlsdGluXyIsIHN0cmxl biAoImJ1aWx0aW5fIikpICE9IDApCi0rICAgIHsKLSsgICAgICBzaXplX3QgbGVuID0gc3RybGVu IChuYW1lKTsKLSsKLSsgICAgICAvKiBUcmVhdCBfXypfY2hrIGZvcnRpZmljYXRpb24gZnVuY3Rp b25zIGFzIGFudGljaXBhdGVkIGFzIHdlbGwsCi0rCSB1bmxlc3MgdGhleSBhcmUgX19idWlsdGlu XyouICAqLwotKyAgICAgIGlmIChsZW4gPiBzdHJsZW4gKCJfX19jaGsiKQotKwkgICYmIG1lbWNt cCAobmFtZSArIGxlbiAtIHN0cmxlbiAoIl9jaGsiKSwKLSsJCSAgICAgIl9jaGsiLCBzdHJsZW4g KCJfY2hrIikgKyAxKSA9PSAwKQotKwlERUNMX0FOVElDSVBBVEVEIChkZWNsKSA9IDE7Ci0rICAg IH0KLSAKLSAgIHJldHVybiBkZWNsOwotIH0KLS0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9laC9i dWlsdGluNC5DLmpqCTIwMDctMDktMDQgMjI6MDY6MDYuMDAwMDAwMDAwICswMjAwCi0rKysgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvZWgvYnVpbHRpbjQuQwkyMDA3LTA5LTA0IDIyOjA3OjAzLjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSw2IEBACi0rLy8gUFIgYysrLzMzMjg5Ci0rLy8geyBkZy1k byBjb21waWxlIH0KLSsKLSt0eXBlZGVmIF9fU0laRV9UWVBFX18gc2l6ZV90OwotK2V4dGVybiAi QyIgaW50IF9fc3ByaW50Zl9jaGsgKGNoYXIgKl9fcmVzdHJpY3QsIGludCwgc2l6ZV90LCBjb25z dCBjaGFyICosIC4uLikgdGhyb3cgKCk7Ci0rZXh0ZXJuICJDIiBpbnQgX19zcHJpbnRmX2NoayAo Y2hhciAqX19yZXN0cmljdCwgaW50LCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKSB0aHJvdyAo KTsKCmRpZmYgLS1naXQgYS9nY2M0MS1idWlsdGluLXRocm93LnBhdGNoIGIvZ2NjNDEtYnVpbHRp bi10aHJvdy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljNGVhZi4uMDAw MDAwMAotLS0gYS9nY2M0MS1idWlsdGluLXRocm93LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEs MTM0ICswLDAgQEAKLTIwMDctMDktMDYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29t PgotCi0JKiBidWlsdGluLWF0dHJzLmRlZiAoQVRUUl9OT05OVUxMXzMpOiBOZXcuCi0JKERFRl9G T1JNQVRfQVRUUklCVVRFKTogVXNlIGp1c3QgQVRUUl9OT05OVUxMXyMjRkEgaW5zdGVhZCBvZgot CUFUVFJfTk9USFJPV19OT05OVUxMXyMjRkEuCi0JKERFRl9GT1JNQVRfQVRUUklCVVRFX05PVEhS T1csIERFRl9GT1JNQVRfQVRUUklCVVRFX0JPVEgpOiBOZXcgbWFjcm9zLgotCShBVFRSX0ZPUk1B VF9QUklOVEZfTk9USFJPV18yXzAsIEFUVFJfUFJJTlRGX05PVEhST1dfMl8zLAotCUFUVFJfRk9S TUFUX1BSSU5URl9OT1RIUk9XXzNfMCwgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfM180LAot CUFUVFJfRk9STUFUX1BSSU5URl9OT1RIUk9XXzRfMCwgQVRUUl9QUklOVEZfTk9USFJPV180XzUs Ci0JQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfNV8wLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9U SFJPV181XzYsCi0JQVRUUl9GT1JNQVRfU0NBTkZfTk9USFJPV18yXzAsIEFUVFJfRk9STUFUX1ND QU5GX05PVEhST1dfMl8zLAotCUFUVFJfRk9STUFUX1NUUkZUSU1FX05PVEhST1dfM18wLCBBVFRS X0ZPUk1BVF9TVFJGTU9OX05PVEhST1dfM180KToKLQlOZXcuCi0JKEFUVFJfRk9STUFUX1BSSU5U Rl80XzAsIEFUVFJfUFJJTlRGXzRfNSwgQVRUUl9GT1JNQVRfUFJJTlRGXzVfMCwKLQlBVFRSX0ZP Uk1BVF9QUklOVEZfNV82LCBBVFRSX0ZPUk1BVF9TVFJGVElNRV8zXzAsCi0JQVRUUl9GT1JNQVRf Tk9USFJPV18zXzQpOiBSZW1vdmUuCi0JKiBidWlsdGlucy5kZWYgKHNucHJpbnRmLCBzcHJpbnRm LCBzc2NhbmYsIHZzbnByaW50ZiwgdnNwcmludGYsCi0JdnNzY2FuZiwgc3RyZm1vbiwgc3RyZnRp bWUsIF9fc25wcmludGZfY2hrLCBfX3NwcmludGZfY2hrLAotCV9fdnNucHJpbnRmX2NoaywgX192 c3ByaW50Zl9jaGspOiBVc2UgQVRUUl9GT1JNQVRfKl9OT1RIUk9XXyoKLQlpbnN0ZWFkIG9mIEFU VFJfRk9STUFUXypfKi4KLQotLS0tIGdjYy9idWlsdGluLWF0dHJzLmRlZi5qagkyMDA3LTA4LTEz IDE1OjExOjE4LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy9idWlsdGluLWF0dHJzLmRlZgkyMDA3 LTA5LTAzIDExOjI2OjEzLjAwMDAwMDAwMCArMDIwMAotQEAgLTExOCw2ICsxMTgsOCBAQCBERUZf QVRUUl9UUkVFX0xJU1QgKEFUVFJfTk9OTlVMTF9MSVNULCBBCi0gREVGX0FUVFJfVFJFRV9MSVNU IChBVFRSX05PTk5VTExfMSwgQVRUUl9OT05OVUxMLCBBVFRSX0xJU1RfMSwgQVRUUl9OVUxMKQot IC8qIEZ1bmN0aW9ucyB3aG9zZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGEgbm9ubnVsbCBwb2ludGVy LiAgKi8KLSBERUZfQVRUUl9UUkVFX0xJU1QgKEFUVFJfTk9OTlVMTF8yLCBBVFRSX05PTk5VTEws IEFUVFJfTElTVF8yLCBBVFRSX05VTEwpCi0rLyogRnVuY3Rpb25zIHdob3NlIHRoaXJkIHBhcmFt ZXRlciBpcyBhIG5vbm51bGwgcG9pbnRlci4gICovCi0rREVGX0FUVFJfVFJFRV9MSVNUIChBVFRS X05PTk5VTExfMywgQVRUUl9OT05OVUxMLCBBVFRSX0xJU1RfMywgQVRUUl9OVUxMKQotIC8qIE5v dGhyb3cgZnVuY3Rpb25zIHdpdGggdGhlIHNlbnRpbmVsKDEpIGF0dHJpYnV0ZS4gKi8KLSBERUZf QVRUUl9UUkVFX0xJU1QgKEFUVFJfTk9USFJPV19TRU5USU5FTF8xLCBBVFRSX1NFTlRJTkVMLCBB VFRSX0xJU1RfMSwgXAotIAkJCUFUVFJfTk9USFJPV19MSVNUKQotQEAgLTE1NywyNCArMTU5LDM4 IEBAIERFRl9BVFRSX1RSRUVfTElTVCAoQVRUUl9NQUxMT0NfTk9USFJPV18KLSAgIERFRl9BVFRS X1RSRUVfTElTVCAoQVRUUl8jI1RZUEUjI18jI1ZBTFVFUywgQVRUUl9OVUxMLAkJIFwKLSAJCSAg ICAgIEFUVFJfIyNUWVBFLCBBVFRSX0xJU1RfIyNWQUxVRVMpCQkJIFwKLSAgIERFRl9BVFRSX1RS RUVfTElTVCAoQVRUUl9GT1JNQVRfIyNUWVBFIyNfIyNWQUxVRVMsIEFUVFJfRk9STUFULAkgXAot KwkJICAgICAgQVRUUl8jI1RZUEUjI18jI1ZBTFVFUywgQVRUUl9OT05OVUxMXyMjRkEpCi0rI2Rl ZmluZSBERUZfRk9STUFUX0FUVFJJQlVURV9OT1RIUk9XKFRZUEUsIEZBLCBWQUxVRVMpCQkJIFwK LSsgIERFRl9BVFRSX1RSRUVfTElTVCAoQVRUUl8jI1RZUEUjI18jI1ZBTFVFUywgQVRUUl9OVUxM LAkJIFwKLSsJCSAgICAgIEFUVFJfIyNUWVBFLCBBVFRSX0xJU1RfIyNWQUxVRVMpCQkJIFwKLSsg IERFRl9BVFRSX1RSRUVfTElTVCAoQVRUUl9GT1JNQVRfIyNUWVBFIyNfTk9USFJPV18jI1ZBTFVF UywgQVRUUl9GT1JNQVQsXAotKwkJICAgICAgQVRUUl8jI1RZUEUjI18jI1ZBTFVFUywgQVRUUl9O T1RIUk9XX05PTk5VTExfIyNGQSkKLSsjZGVmaW5lIERFRl9GT1JNQVRfQVRUUklCVVRFX0JPVEgo VFlQRSwgRkEsIFZBTFVFUykJCQkgXAotKyAgREVGX0FUVFJfVFJFRV9MSVNUIChBVFRSXyMjVFlQ RSMjXyMjVkFMVUVTLCBBVFRSX05VTEwsCQkgXAotKwkJICAgICAgQVRUUl8jI1RZUEUsIEFUVFJf TElTVF8jI1ZBTFVFUykJCQkgXAotKyAgREVGX0FUVFJfVFJFRV9MSVNUIChBVFRSX0ZPUk1BVF8j I1RZUEUjI18jI1ZBTFVFUywgQVRUUl9GT1JNQVQsCSBcCi0rCQkgICAgICBBVFRSXyMjVFlQRSMj XyMjVkFMVUVTLCBBVFRSX05PTk5VTExfIyNGQSkJIFwKLSsgIERFRl9BVFRSX1RSRUVfTElTVCAo QVRUUl9GT1JNQVRfIyNUWVBFIyNfTk9USFJPV18jI1ZBTFVFUywgQVRUUl9GT1JNQVQsXAotIAkJ ICAgICAgQVRUUl8jI1RZUEUjI18jI1ZBTFVFUywgQVRUUl9OT1RIUk9XX05PTk5VTExfIyNGQSkK LSBERUZfRk9STUFUX0FUVFJJQlVURShQUklOVEYsMSwxXzApCi0gREVGX0ZPUk1BVF9BVFRSSUJV VEUoUFJJTlRGLDEsMV8yKQotLURFRl9GT1JNQVRfQVRUUklCVVRFKFBSSU5URiwyLDJfMCkKLS1E RUZfRk9STUFUX0FUVFJJQlVURShQUklOVEYsMiwyXzMpCi0tREVGX0ZPUk1BVF9BVFRSSUJVVEUo UFJJTlRGLDMsM18wKQotLURFRl9GT1JNQVRfQVRUUklCVVRFKFBSSU5URiwzLDNfNCkKLS1ERUZf Rk9STUFUX0FUVFJJQlVURShQUklOVEYsNCw0XzApCi0tREVGX0ZPUk1BVF9BVFRSSUJVVEUoUFJJ TlRGLDQsNF81KQotLURFRl9GT1JNQVRfQVRUUklCVVRFKFBSSU5URiw1LDVfMCkKLS1ERUZfRk9S TUFUX0FUVFJJQlVURShQUklOVEYsNSw1XzYpCi0rREVGX0ZPUk1BVF9BVFRSSUJVVEVfQk9USChQ UklOVEYsMiwyXzApCi0rREVGX0ZPUk1BVF9BVFRSSUJVVEVfQk9USChQUklOVEYsMiwyXzMpCi0r REVGX0ZPUk1BVF9BVFRSSUJVVEVfQk9USChQUklOVEYsMywzXzApCi0rREVGX0ZPUk1BVF9BVFRS SUJVVEVfQk9USChQUklOVEYsMywzXzQpCi0rREVGX0ZPUk1BVF9BVFRSSUJVVEVfTk9USFJPVyhQ UklOVEYsNCw0XzApCi0rREVGX0ZPUk1BVF9BVFRSSUJVVEVfTk9USFJPVyhQUklOVEYsNCw0XzUp Ci0rREVGX0ZPUk1BVF9BVFRSSUJVVEVfTk9USFJPVyhQUklOVEYsNSw1XzApCi0rREVGX0ZPUk1B VF9BVFRSSUJVVEVfTk9USFJPVyhQUklOVEYsNSw1XzYpCi0gREVGX0ZPUk1BVF9BVFRSSUJVVEUo U0NBTkYsMSwxXzApCi0gREVGX0ZPUk1BVF9BVFRSSUJVVEUoU0NBTkYsMSwxXzIpCi0tREVGX0ZP Uk1BVF9BVFRSSUJVVEUoU0NBTkYsMiwyXzApCi0tREVGX0ZPUk1BVF9BVFRSSUJVVEUoU0NBTkYs MiwyXzMpCi0tREVGX0ZPUk1BVF9BVFRSSUJVVEUoU1RSRlRJTUUsMywzXzApCi0tREVGX0ZPUk1B VF9BVFRSSUJVVEUoU1RSRk1PTiwzLDNfNCkKLStERUZfRk9STUFUX0FUVFJJQlVURV9CT1RIKFND QU5GLDIsMl8wKQotK0RFRl9GT1JNQVRfQVRUUklCVVRFX0JPVEgoU0NBTkYsMiwyXzMpCi0rREVG X0ZPUk1BVF9BVFRSSUJVVEVfTk9USFJPVyhTVFJGVElNRSwzLDNfMCkKLStERUZfRk9STUFUX0FU VFJJQlVURV9OT1RIUk9XKFNUUkZNT04sMywzXzQpCi0gI3VuZGVmIERFRl9GT1JNQVRfQVRUUklC VVRFCi0rI3VuZGVmIERFRl9GT1JNQVRfQVRUUklCVVRFX05PVEhST1cKLSsjdW5kZWYgREVGX0ZP Uk1BVF9BVFRSSUJVVEVfQk9USAotIAotIC8qIENvbnN0cnVjdCBhIHRyZWUgZm9yIGEgZm9ybWF0 X2FyZyBhdHRyaWJ1dGUuICAqLwotICNkZWZpbmUgREVGX0ZPUk1BVF9BUkdfQVRUUklCVVRFKEZB KQkJCQkJXAotLS0tIGdjYy9idWlsdGlucy5kZWYuamoJMjAwNy0wOC0zMCAxODo0Njo1OS4wMDAw MDAwMDAgKzAyMDAKLSsrKyBnY2MvYnVpbHRpbnMuZGVmCTIwMDctMDktMDMgMTA6NTI6MTguMDAw MDAwMDAwICswMjAwCi1AQCAtNTUzLDE2ICs1NTMsMTYgQEAgREVGX0VYVF9MSUJfQlVJTFRJTiAg ICAoQlVJTFRfSU5fUFVUQ0hBUgotIERFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1BV VFMsICJwdXRzIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklORywgQVRUUl9OT05OVUxMX0xJU1QpCi0g REVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fUFVUU19VTkxPQ0tFRCwgInB1dHNfdW5s b2NrZWQiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HLCBBVFRSX05PTk5VTExfTElTVCkKLSBERUZf TElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TQ0FORiwgInNjYW5mIiwgQlRfRk5fSU5UX0NP TlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1NDQU5GXzFfMikKLS1ERUZfQzk5X0JVSUxUSU4g ICAgICAgIChCVUlMVF9JTl9TTlBSSU5URiwgInNucHJpbnRmIiwgQlRfRk5fSU5UX1NUUklOR19T SVpFX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5URl8zXzQpCi0tREVGX0xJQl9C VUlMVElOICAgICAgICAoQlVJTFRfSU5fU1BSSU5URiwgInNwcmludGYiLCBCVF9GTl9JTlRfU1RS SU5HX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5URl8yXzMpCi0tREVGX0xJQl9C VUlMVElOICAgICAgICAoQlVJTFRfSU5fU1NDQU5GLCAic3NjYW5mIiwgQlRfRk5fSU5UX0NPTlNU X1NUUklOR19DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9TQ0FORl8yXzMpCi0rREVGX0M5 OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU05QUklOVEYsICJzbnByaW50ZiIsIEJUX0ZOX0lO VF9TVFJJTkdfU0laRV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJP V18zXzQpCi0rREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1BSSU5URiwgInNwcmlu dGYiLCBCVF9GTl9JTlRfU1RSSU5HX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5U Rl9OT1RIUk9XXzJfMykKLStERUZfTElCX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9TU0NBTkYs ICJzc2NhbmYiLCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19WQVIsIEFUVFJf Rk9STUFUX1NDQU5GX05PVEhST1dfMl8zKQotIERFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxU X0lOX1ZGUFJJTlRGLCAidmZwcmludGYiLCBCVF9GTl9JTlRfRklMRVBUUl9DT05TVF9TVFJJTkdf VkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGXzJfMCkKLSBERUZfQzk5X0JVSUxUSU4gICAg ICAgIChCVUlMVF9JTl9WRlNDQU5GLCAidmZzY2FuZiIsIEJUX0ZOX0lOVF9GSUxFUFRSX0NPTlNU X1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9TQ0FORl8yXzApCi0gREVGX0xJQl9CVUlM VElOICAgICAgICAoQlVJTFRfSU5fVlBSSU5URiwgInZwcmludGYiLCBCVF9GTl9JTlRfQ09OU1Rf U1RSSU5HX1ZBTElTVF9BUkcsIEFUVFJfRk9STUFUX1BSSU5URl8xXzApCi0gREVGX0M5OV9CVUlM VElOICAgICAgICAoQlVJTFRfSU5fVlNDQU5GLCAidnNjYW5mIiwgQlRfRk5fSU5UX0NPTlNUX1NU UklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9TQ0FORl8xXzApCi0tREVGX0M5OV9CVUlMVElO ICAgICAgICAoQlVJTFRfSU5fVlNOUFJJTlRGLCAidnNucHJpbnRmIiwgQlRfRk5fSU5UX1NUUklO R19TSVpFX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfM18wKQot LURFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZTUFJJTlRGLCAidnNwcmludGYiLCBC VF9GTl9JTlRfU1RSSU5HX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklO VEZfMl8wKQotLURFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZTU0NBTkYsICJ2c3Nj YW5mIiwgQlRfRk5fSU5UX0NPTlNUX1NUUklOR19DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRU Ul9GT1JNQVRfU0NBTkZfMl8wKQotK0RFRl9DOTlfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZT TlBSSU5URiwgInZzbnByaW50ZiIsIEJUX0ZOX0lOVF9TVFJJTkdfU0laRV9DT05TVF9TVFJJTkdf VkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfM18wKQotK0RFRl9MSUJfQlVJ TFRJTiAgICAgICAgKEJVSUxUX0lOX1ZTUFJJTlRGLCAidnNwcmludGYiLCBCVF9GTl9JTlRfU1RS SU5HX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV18y XzApCi0rREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVlNTQ0FORiwgInZzc2NhbmYi LCBCVF9GTl9JTlRfQ09OU1RfU1RSSU5HX0NPTlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZP Uk1BVF9TQ0FORl9OT1RIUk9XXzJfMCkKLSAKLSAvKiBDYXRlZ29yeTogY3R5cGUgYnVpbHRpbnMu ICAqLwotIERFRl9MSUJfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX0lTQUxOVU0sICJpc2FsbnVt IiwgQlRfRk5fSU5UX0lOVCwgQVRUUl9QVVJFX05PVEhST1dfTElTVCkKLUBAIC02OTMsOCArNjkz LDggQEAgREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fUkVUVVJOXwotIERFRl9HQ0Nf QlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1NBVkVSRUdTLCAic2F2ZXJlZ3MiLCBCVF9GTl9QVFJf VkFSLCBBVFRSX05VTEwpCi0gREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU0VUSk1Q LCAic2V0am1wIiwgQlRfRk5fSU5UX1BUUiwgQVRUUl9OVUxMKQotIERFRl9HQ0NfQlVJTFRJTiAg ICAgICAgKEJVSUxUX0lOX1NUREFSR19TVEFSVCwgInN0ZGFyZ19zdGFydCIsIEJUX0ZOX1ZPSURf VkFMSVNUX1JFRl9WQVIsIEFUVFJfTlVMTCkKLS1ERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlM VF9JTl9TVFJGTU9OLCAic3RyZm1vbiIsIEJUX0ZOX1NTSVpFX1NUUklOR19TSVpFX0NPTlNUX1NU UklOR19WQVIsIEFUVFJfRk9STUFUX1NUUkZNT05fM180KQotLURFRl9MSUJfQlVJTFRJTiAgICAg ICAgKEJVSUxUX0lOX1NUUkZUSU1FLCAic3RyZnRpbWUiLCBCVF9GTl9TSVpFX1NUUklOR19TSVpF X0NPTlNUX1NUUklOR19DT05TVF9QVFIsIEFUVFJfRk9STUFUX1NUUkZUSU1FXzNfMCkKLStERUZf RVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFJGTU9OLCAic3RyZm1vbiIsIEJUX0ZOX1NT SVpFX1NUUklOR19TSVpFX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1NUUkZNT05fTk9U SFJPV18zXzQpCi0rREVGX0xJQl9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fU1RSRlRJTUUsICJz dHJmdGltZSIsIEJUX0ZOX1NJWkVfU1RSSU5HX1NJWkVfQ09OU1RfU1RSSU5HX0NPTlNUX1BUUiwg QVRUUl9GT1JNQVRfU1RSRlRJTUVfTk9USFJPV18zXzApCi0gREVGX0dDQ19CVUlMVElOICAgICAg ICAoQlVJTFRfSU5fVFJBUCwgInRyYXAiLCBCVF9GTl9WT0lELCBBVFRSX05PUkVUVVJOX05PVEhS T1dfTElTVCkKLSBERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9VTldJTkRfSU5JVCwg InVud2luZF9pbml0IiwgQlRfRk5fVk9JRCwgQVRUUl9OVUxMKQotIERFRl9HQ0NfQlVJTFRJTiAg ICAgICAgKEJVSUxUX0lOX1VQREFURV9TRVRKTVBfQlVGLCAidXBkYXRlX3NldGptcF9idWYiLCBC VF9GTl9WT0lEX1BUUl9JTlQsIEFUVFJfTlVMTCkKLUBAIC03MzAsMTAgKzczMCwxMCBAQCBERUZf RVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TVFJDQVRfCi0gREVGX0VYVF9MSUJfQlVJTFRJ TiAgICAoQlVJTFRfSU5fU1RSQ1BZX0NISywgIl9fc3RyY3B5X2NoayIsIEJUX0ZOX1NUUklOR19T VFJJTkdfQ09OU1RfU1RSSU5HX1NJWkUsIEFUVFJfTk9USFJPV19OT05OVUxMKQotIERFRl9FWFRf TElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NUUk5DQVRfQ0hLLCAiX19zdHJuY2F0X2NoayIsIEJU X0ZOX1NUUklOR19TVFJJTkdfQ09OU1RfU1RSSU5HX1NJWkVfU0laRSwgQVRUUl9OT1RIUk9XX05P Tk5VTEwpCi0gREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1RSTkNQWV9DSEssICJf X3N0cm5jcHlfY2hrIiwgQlRfRk5fU1RSSU5HX1NUUklOR19DT05TVF9TVFJJTkdfU0laRV9TSVpF LCBBVFRSX05PVEhST1dfTk9OTlVMTCkKLS1ERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9J Tl9TTlBSSU5URl9DSEssICJfX3NucHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9TVFJJTkdfU0laRV9J TlRfU0laRV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfNV82KQotLURFRl9F WFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1NQUklOVEZfQ0hLLCAiX19zcHJpbnRmX2NoayIs IEJUX0ZOX0lOVF9TVFJJTkdfSU5UX1NJWkVfQ09OU1RfU1RSSU5HX1ZBUiwgQVRUUl9GT1JNQVRf UFJJTlRGXzRfNSkKLS1ERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9WU05QUklOVEZf Q0hLLCAiX192c25wcmludGZfY2hrIiwgQlRfRk5fSU5UX1NUUklOR19TSVpFX0lOVF9TSVpFX0NP TlNUX1NUUklOR19WQUxJU1RfQVJHLCBBVFRSX0ZPUk1BVF9QUklOVEZfNV8wKQotLURFRl9FWFRf TElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1ZTUFJJTlRGX0NISywgIl9fdnNwcmludGZfY2hrIiwg QlRfRk5fSU5UX1NUUklOR19JTlRfU0laRV9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9G T1JNQVRfUFJJTlRGXzRfMCkKLStERUZfRVhUX0xJQl9CVUlMVElOICAgIChCVUlMVF9JTl9TTlBS SU5URl9DSEssICJfX3NucHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9TVFJJTkdfU0laRV9JTlRfU0la RV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfTk9USFJPV181XzYpCi0rREVG X0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fU1BSSU5URl9DSEssICJfX3NwcmludGZfY2hr IiwgQlRfRk5fSU5UX1NUUklOR19JTlRfU0laRV9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1B VF9QUklOVEZfTk9USFJPV180XzUpCi0rREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5f VlNOUFJJTlRGX0NISywgIl9fdnNucHJpbnRmX2NoayIsIEJUX0ZOX0lOVF9TVFJJTkdfU0laRV9J TlRfU0laRV9DT05TVF9TVFJJTkdfVkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhS T1dfNV8wKQotK0RFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1ZTUFJJTlRGX0NISywg Il9fdnNwcmludGZfY2hrIiwgQlRfRk5fSU5UX1NUUklOR19JTlRfU0laRV9DT05TVF9TVFJJTkdf VkFMSVNUX0FSRywgQVRUUl9GT1JNQVRfUFJJTlRGX05PVEhST1dfNF8wKQotIERFRl9FWFRfTElC X0JVSUxUSU4gICAgKEJVSUxUX0lOX0ZQUklOVEZfQ0hLLCAiX19mcHJpbnRmX2NoayIsIEJUX0ZO X0lOVF9GSUxFUFRSX0lOVF9DT05TVF9TVFJJTkdfVkFSLCBBVFRSX0ZPUk1BVF9QUklOVEZfM180 KQotIERFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX1BSSU5URl9DSEssICJfX3ByaW50 Zl9jaGsiLCBCVF9GTl9JTlRfSU5UX0NPTlNUX1NUUklOR19WQVIsIEFUVFJfRk9STUFUX1BSSU5U Rl8yXzMpCi0gREVGX0VYVF9MSUJfQlVJTFRJTiAgICAoQlVJTFRfSU5fVkZQUklOVEZfQ0hLLCAi X192ZnByaW50Zl9jaGsiLCBCVF9GTl9JTlRfRklMRVBUUl9JTlRfQ09OU1RfU1RSSU5HX1ZBTElT VF9BUkcsIEFUVFJfRk9STUFUX1BSSU5URl8zXzApCgpkaWZmIC0tZ2l0IGEvZ2NjNDEtYnVpbHRp bi12YS1hcmctcGFjay1sZW4ucGF0Y2ggYi9nY2M0MS1idWlsdGluLXZhLWFyZy1wYWNrLWxlbi5w YXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcyY2VjZC4uMDAwMDAwMAotLS0g YS9nY2M0MS1idWlsdGluLXZhLWFyZy1wYWNrLWxlbi5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0x LDM2OCArMCwwIEBACi0yMDA3LTA5LTExICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNv bT4KLQotCSogYnVpbHRpbnMuZGVmIChCVUlMVF9JTl9WQV9BUkdfUEFDS19MRU4pOiBOZXcgYnVp bHRpbi4KLQkqIGJ1aWx0aW5zLmMgKGV4cGFuZF9idWlsdGluKSA8Y2FzZSBCVUlMVF9JTl9WQV9B UkdfUEFDS19MRU4+OiBJc3N1ZQotCWVycm9yIGlmIF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4g KCkgd2Fzbid0IG9wdGltaXplZCBvdXQgZHVyaW5nCi0JaW5saW5pbmcuCi0JKiB0cmVlLWlubGlu ZS5jIChjb3B5X2JiKTogUmVwbGFjZSBfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuICgpCi0Jd2l0 aCB0aGUgbnVtYmVyIG9mIGlubGluZSdzIGFub255bW91cyBhcmd1bWVudHMuCi0JKiBkb2MvZXh0 ZW5kLnRleGk6IERvY3VtZW50IF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCkuCi0KLQkqIGdj Yy5kZy92YS1hcmctcGFjay1sZW4tMS5jOiBOZXcgdGVzdC4KLQkqIGcrKy5kZy92YS1hcmctcGFj ay1sZW4tMS5DOiBOZXcgdGVzdC4KLQotLS0tIGdjYy9idWlsdGlucy5kZWYuamoJMjAwNy0wOS0w NiAxMDoxOToyNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvYnVpbHRpbnMuZGVmCTIwMDctMDkt MTQgMjE6MDc6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNjY2LDYgKzY2Niw3IEBAIERFRl9HQ0Nf QlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1ZBX0NPUFkKLSBERUZfR0NDX0JVSUxUSU4gICAgICAg IChCVUlMVF9JTl9WQV9FTkQsICJ2YV9lbmQiLCBCVF9GTl9WT0lEX1ZBTElTVF9SRUYsIEFUVFJf TlVMTCkKLSBERUZfR0NDX0JVSUxUSU4gICAgICAgIChCVUlMVF9JTl9WQV9TVEFSVCwgInZhX3N0 YXJ0IiwgQlRfRk5fVk9JRF9WQUxJU1RfUkVGX1ZBUiwgQVRUUl9OVUxMKQotIERFRl9HQ0NfQlVJ TFRJTiAgICAgICAgKEJVSUxUX0lOX1ZBX0FSR19QQUNLLCAidmFfYXJnX3BhY2siLCBCVF9GTl9J TlQsIEFUVFJfUFVSRV9OT1RIUk9XX0xJU1QpCi0rREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJ TFRfSU5fVkFfQVJHX1BBQ0tfTEVOLCAidmFfYXJnX3BhY2tfbGVuIiwgQlRfRk5fSU5ULCBBVFRS X1BVUkVfTk9USFJPV19MSVNUKQotIERFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxUX0lOX19F WElULCAiX2V4aXQiLCBCVF9GTl9WT0lEX0lOVCwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xJU1Qp Ci0gREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fX0VYSVQyLCAiX0V4aXQiLCBCVF9G Tl9WT0lEX0lOVCwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xJU1QpCi0gCi0tLS0gZ2NjL2J1aWx0 aW5zLmMuamoJMjAwNy0wOS0wNiAxMTowNDo1Ni4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvYnVp bHRpbnMuYwkyMDA3LTA5LTE0IDIxOjA3OjQxLjAwMDAwMDAwMCArMDIwMAotQEAgLTU5ODUsNiAr NTk4NSwxMiBAQCBleHBhbmRfYnVpbHRpbiAodHJlZSBleHAsIHJ0eCB0YXJnZXQsIHJ0Ci0gICAg ICAgZXJyb3IgKCJpbnZhbGlkIHVzZSBvZiAlPF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSU+Iik7 Ci0gICAgICAgcmV0dXJuIGNvbnN0MF9ydHg7Ci0gCi0rICAgIGNhc2UgQlVJTFRfSU5fVkFfQVJH X1BBQ0tfTEVOOgotKyAgICAgIC8qIEFsbCB2YWxpZCB1c2VzIG9mIF9fYnVpbHRpbl92YV9hcmdf cGFja19sZW4gKCkgYXJlIHJlbW92ZWQgZHVyaW5nCi0rCSBpbmxpbmluZy4gICovCi0rICAgICAg ZXJyb3IgKCJpbnZhbGlkIHVzZSBvZiAlPF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCklPiIp OwotKyAgICAgIHJldHVybiBjb25zdDBfcnR4OwotKwotICAgICAgIC8qIFJldHVybiB0aGUgYWRk cmVzcyBvZiB0aGUgZmlyc3QgYW5vbnltb3VzIHN0YWNrIGFyZy4gICovCi0gICAgIGNhc2UgQlVJ TFRfSU5fTkVYVF9BUkc6Ci0gICAgICAgaWYgKGZvbGRfYnVpbHRpbl9uZXh0X2FyZyAoYXJnbGlz dCkpCi0tLS0gZ2NjL3RyZWUtaW5saW5lLmMuamoJMjAwNy0wOS0wNiAxMjozNTo1Ny4wMDAwMDAw MDAgKzAyMDAKLSsrKyBnY2MvdHJlZS1pbmxpbmUuYwkyMDA3LTA5LTE0IDIxOjIyOjQ4LjAwMDAw MDAwMCArMDIwMAotQEAgLTc0MSw2ICs3NDEsMzcgQEAgY29weV9iYiAoY29weV9ib2R5X2RhdGEg KmlkLCBiYXNpY19ibG9jawotIAkgICAgICAqYSA9IGNvcHlfbGlzdCAoYXJnbGlzdCk7Ci0gCSAg ICAgIENBTExfRVhQUl9WQV9BUkdfUEFDSyAoY2FsbCkgPSAwOwotIAkgICAgfQotKwkgIGVsc2Ug aWYgKGNhbGwKLSsJCSAgICYmIGlkLT5jYWxsX2V4cHIKLSsJCSAgICYmIChkZWNsID0gZ2V0X2Nh bGxlZV9mbmRlY2wgKGNhbGwpKQotKwkJICAgJiYgREVDTF9CVUlMVF9JTl9DTEFTUyAoZGVjbCkg PT0gQlVJTFRfSU5fTk9STUFMCi0rCQkgICAmJiBERUNMX0ZVTkNUSU9OX0NPREUgKGRlY2wpCi0r CQkgICAgICA9PSBCVUlMVF9JTl9WQV9BUkdfUEFDS19MRU4pCi0rCSAgICB7Ci0rCSAgICAgIC8q IF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5Ci0rCQkg dGhlIG51bWJlciBvZiBhbm9ueW1vdXMgYXJndW1lbnRzLiAgKi8KLSsJICAgICAgaW50IG5hcmdz OwotKwkgICAgICB0cmVlIGNvdW50LCAqY2FsbF9wdHIsIHAsIGE7Ci0rCi0rCSAgICAgIGEgPSBU UkVFX09QRVJBTkQgKGlkLT5jYWxsX2V4cHIsIDEpOwotKwkgICAgICBmb3IgKHAgPSBERUNMX0FS R1VNRU5UUyAoaWQtPnNyY19mbik7IHA7IHAgPSBUUkVFX0NIQUlOIChwKSkKLSsJCWEgPSBUUkVF X0NIQUlOIChhKTsKLSsKLSsgICAgICAgICAgICAgIGZvciAobmFyZ3MgPSAwOyBhOyBhID0gVFJF RV9DSEFJTiAoYSkpCi0rCQluYXJncysrOwotKwotKwkgICAgICBjb3VudCA9IGJ1aWxkX2ludF9j c3QgKGludGVnZXJfdHlwZV9ub2RlLCBuYXJncyk7Ci0rCSAgICAgIGNhbGxfcHRyID0gJnN0bXQ7 Ci0rCSAgICAgIGlmIChUUkVFX0NPREUgKCpjYWxsX3B0cikgPT0gTU9ESUZZX0VYUFIpCi0rCQlj YWxsX3B0ciA9ICZUUkVFX09QRVJBTkQgKCpjYWxsX3B0ciwgMSk7Ci0rCSAgICAgIGlmIChUUkVF X0NPREUgKCpjYWxsX3B0cikgPT0gV0lUSF9TSVpFX0VYUFIpCi0rCQljYWxsX3B0ciA9ICZUUkVF X09QRVJBTkQgKCpjYWxsX3B0ciwgMCk7Ci0rCSAgICAgIGdjY19hc3NlcnQgKCpjYWxsX3B0ciA9 PSBjYWxsICYmIGNhbGxfcHRyICE9ICZzdG10KTsKLSsJICAgICAgKmNhbGxfcHRyID0gY291bnQ7 Ci0rCSAgICAgIHVwZGF0ZV9zdG10IChzdG10KTsKLSsJICAgICAgY2FsbCA9IE5VTExfVFJFRTsK LSsJICAgIH0KLSsKLSAJICAvKiBXZSdyZSBkdXBsaWNhdGluZyBhIENBTExfRVhQUi4gIEZpbmQg YW55IGNvcnJlc3BvbmRpbmcKLSAJICAgICBjYWxsZ3JhcGggZWRnZXMgYW5kIHVwZGF0ZSBvciBk dXBsaWNhdGUgdGhlbS4gICovCi0gCSAgaWYgKGNhbGwgJiYgKGRlY2wgPSBnZXRfY2FsbGVlX2Zu ZGVjbCAoY2FsbCkpKQotLS0tIGdjYy9kb2MvZXh0ZW5kLnRleGkuamoJMjAwNy0wOS0wNiAxMDox OToyNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvZG9jL2V4dGVuZC50ZXhpCTIwMDctMDktMTQg MjE6MDc6NDEuMDAwMDAwMDAwICswMjAwCi1AQCAtNTc4LDYgKzU3OCw0MSBAQCBteXByaW50ZiAo RklMRSAqZiwgY29uc3QgY2hhciAqZm9ybWF0LCAuCi0gQGVuZCBzbWFsbGV4YW1wbGUKLSBAZW5k IGRlZnR5cGVmbgotIAotK0BkZWZ0eXBlZm4ge0J1aWx0LWluIEZ1bmN0aW9ufSBfX2J1aWx0aW5f dmFfYXJnX3BhY2tfbGVuICgpCi0rVGhpcyBidWlsdC1pbiBmdW5jdGlvbiByZXR1cm5zIHRoZSBu dW1iZXIgb2YgYW5vbnltb3VzIGFyZ3VtZW50cyBvZgotK2FuIGlubGluZSBmdW5jdGlvbi4gIEl0 IGNhbiBiZSB1c2VkIG9ubHkgaW4gaW5saW5lIGZ1bmN0aW9ucyB3aGljaAotK3dpbGwgYmUgYWx3 YXlzIGlubGluZWQsIG5ldmVyIGNvbXBpbGVkIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24sIHN1Y2gK LSthcyB0aG9zZSB1c2luZyBAY29kZXtfX2F0dHJpYnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18p KX0gb3IKLStAY29kZXtfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKX0gZXh0ZXJuIGlu bGluZSBmdW5jdGlvbnMuCi0rRm9yIGV4YW1wbGUgZm9sbG93aW5nIHdpbGwgZG8gbGluayBvciBy dW50aW1lIGNoZWNraW5nIG9mIG9wZW4KLSthcmd1bWVudHMgZm9yIG9wdGltaXplZCBjb2RlOgot K0BzbWFsbGV4YW1wbGUKLSsjaWZkZWYgX19PUFRJTUlaRV9fCi0rZXh0ZXJuIGlubGluZSBfX2F0 dHJpYnV0ZV9fKChfX2dudV9pbmxpbmVfXykpIGludAotK215b3BlbiAoY29uc3QgY2hhciAqcGF0 aCwgaW50IG9mbGFnLCAuLi4pCi0rQHsKLSsgIGlmIChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVu ICgpID4gMSkKLSsgICAgd2Fybl9vcGVuX3Rvb19tYW55X2FyZ3VtZW50cyAoKTsKLSsKLSsgIGlm IChfX2J1aWx0aW5fY29uc3RhbnRfcCAob2ZsYWcpKQotKyAgICBAewotKyAgICAgIGlmICgob2Zs YWcgJiBPX0NSRUFUKSAhPSAwICYmIF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCkgPCAxKQot KyAgICAgICAgQHsKLSsgICAgICAgICAgd2Fybl9vcGVuX21pc3NpbmdfbW9kZSAoKTsKLSsgICAg ICAgICAgcmV0dXJuIF9fb3Blbl8yIChwYXRoLCBvZmxhZyk7Ci0rICAgICAgICBAfQotKyAgICAg IHJldHVybiBvcGVuIChwYXRoLCBvZmxhZywgX19idWlsdGluX3ZhX2FyZ19wYWNrICgpKTsKLSsg ICAgQH0KLSsgICAgCi0rICBpZiAoX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbiAoKSA8IDEpCi0r ICAgIHJldHVybiBfX29wZW5fMiAocGF0aCwgb2ZsYWcpOwotKwotKyAgcmV0dXJuIG9wZW4gKHBh dGgsIG9mbGFnLCBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwotK0B9Ci0rI2VuZGlmCi0rQGVu ZCBzbWFsbGV4YW1wbGUKLStAZW5kIGRlZnR5cGVmbgotKwotIEBub2RlIFR5cGVvZgotIEBzZWN0 aW9uIFJlZmVycmluZyB0byBhIFR5cGUgd2l0aCBAY29kZXt0eXBlb2Z9Ci0gQGZpbmRleCB0eXBl b2YKLS0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy92YS1hcmctcGFjay1sZW4tMS5jLmpqCTIwMDct MDktMTQgMjE6MDc6NDEuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv dmEtYXJnLXBhY2stbGVuLTEuYwkyMDA3LTA5LTE0IDIxOjA3OjQxLjAwMDAwMDAwMCArMDIwMAot QEAgLTAsMCArMSwxMjAgQEAKLSsvKiB7IGRnLWRvIHJ1biB9ICovCi0rLyogeyBkZy1vcHRpb25z ICItTzIiIH0gKi8KLSsKLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rCi0rZXh0ZXJuIGludCB3YXJu X29wZW5fbWlzc2luZ19tb2RlICh2b2lkKTsKLStleHRlcm4gaW50IHdhcm5fb3Blbl90b29fbWFu eV9hcmd1bWVudHMgKHZvaWQpOwotK2V4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKLSsKLStjaGFy IGV4cGVjdGVkX2NoYXI7Ci0rCi0rX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBpbnQKLStteW9w ZW4yIChjb25zdCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcpCi0rewotKyAgaWYgKGV4cGVjdGVkX2No YXIrKyAhPSBwYXRoWzBdIHx8IHBhdGhbMV0gIT0gJ1wwJykKLSsgICAgYWJvcnQgKCk7Ci0rICBz d2l0Y2ggKHBhdGhbMF0pCi0rICAgIHsKLSsgICAgY2FzZSAnZic6Ci0rICAgICAgaWYgKG9mbGFn ICE9IDB4MikKLSsJYWJvcnQgKCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgJ2cnOgotKyAg ICAgIGlmIChvZmxhZyAhPSAweDQzKQotKwlhYm9ydCAoKTsKLSsgICAgICAvKiBJbiByZWFsIF9f b3Blbl8yIHRoaXMgd291bGQgdGVybWluYXRlIHRoZSBwcm9ncmFtOgotKwkgb3BlbiB3aXRoIE9f Q1JFQVQgd2l0aG91dCB0aGlyZCBhcmd1bWVudC4gICovCi0rICAgICAgcmV0dXJuIC02OwotKyAg ICBkZWZhdWx0OgotKyAgICAgIGFib3J0ICgpOwotKyAgICB9Ci0rICByZXR1cm4gMDsKLSt9Ci0r Ci0rX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBpbnQKLStteW9wZW52YSAoY29uc3QgY2hhciAq cGF0aCwgaW50IG9mbGFnLCAuLi4pCi0rewotKyAgaW50IG1vZGUgPSAwOwotKyAgdmFfbGlzdCBh cDsKLSsgIGlmICgob2ZsYWcgJiAweDQwKSAhPSAwKQotKyAgICB7Ci0rICAgICAgdmFfc3RhcnQg KGFwLCBvZmxhZyk7Ci0rICAgICAgbW9kZSA9IHZhX2FyZyAoYXAsIGludCk7Ci0rICAgICAgdmFf ZW5kIChhcCk7Ci0rICAgIH0KLSsgIGlmIChleHBlY3RlZF9jaGFyKysgIT0gcGF0aFswXSB8fCBw YXRoWzFdICE9ICdcMCcpCi0rICAgIGFib3J0ICgpOwotKyAgc3dpdGNoIChwYXRoWzBdKQotKyAg ICB7Ci0rICAgIGNhc2UgJ2EnOgotKyAgICAgIGlmIChvZmxhZyAhPSAweDQzIHx8IG1vZGUgIT0g MDY0NCkKLSsJYWJvcnQgKCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgJ2InOgotKyAgICAg IGlmIChvZmxhZyAhPSAweDMpCi0rCWFib3J0ICgpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl ICdjJzoKLSsgICAgICBpZiAob2ZsYWcgIT0gMHgyKQotKwlhYm9ydCAoKTsKLSsgICAgICBicmVh azsKLSsgICAgY2FzZSAnZCc6Ci0rICAgICAgaWYgKG9mbGFnICE9IDB4NDMgfHwgbW9kZSAhPSAw NjAwKQotKwlhYm9ydCAoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAnZSc6Ci0rICAgICAg aWYgKG9mbGFnICE9IDB4MykKLSsJYWJvcnQgKCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1 bHQ6Ci0rICAgICAgYWJvcnQgKCk7Ci0rICAgIH0KLSsgIHJldHVybiAwOwotK30KLSsKLStleHRl cm4gaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUsIGdudV9pbmxpbmUpKSBpbnQK LStteW9wZW4gKGNvbnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZywgLi4uKQotK3sKLSsgIGlmIChf X2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuICgpID4gMSkKLSsgICAgd2Fybl9vcGVuX3Rvb19tYW55 X2FyZ3VtZW50cyAoKTsKLSsKLSsgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAob2ZsYWcpKQot KyAgICB7Ci0rICAgICAgaWYgKChvZmxhZyAmIDB4NDApICE9IDAgJiYgX19idWlsdGluX3ZhX2Fy Z19wYWNrX2xlbiAoKSA8IDEpCi0rCXsKLSsJICB3YXJuX29wZW5fbWlzc2luZ19tb2RlICgpOwot KwkgIHJldHVybiBteW9wZW4yIChwYXRoLCBvZmxhZyk7Ci0rCX0KLSsgICAgICByZXR1cm4gbXlv cGVudmEgKHBhdGgsIG9mbGFnLCBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwotKyAgICB9Ci0r Ci0rICBpZiAoX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbiAoKSA8IDEpCi0rICAgIHJldHVybiBt eW9wZW4yIChwYXRoLCBvZmxhZyk7Ci0rCi0rICByZXR1cm4gbXlvcGVudmEgKHBhdGgsIG9mbGFn LCBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwotK30KLSsKLSt2b2xhdGlsZSBpbnQgbDA7Ci0r Ci0raW50Ci0rbWFpbiAodm9pZCkKLSt7Ci0rICBleHBlY3RlZF9jaGFyID0gJ2EnOwotKyAgaWYg KG15b3BlbiAoImEiLCAweDQzLCAwNjQ0KSkKLSsgICAgYWJvcnQgKCk7Ci0rICBpZiAobXlvcGVu ICgiYiIsIDB4MywgMDc1NSkpCi0rICAgIGFib3J0ICgpOwotKyAgaWYgKG15b3BlbiAoImMiLCAw eDIpKQotKyAgICBhYm9ydCAoKTsKLSsgIGlmIChteW9wZW4gKCJkIiwgbDAgKyAweDQzLCAwNjAw KSkKLSsgICAgYWJvcnQgKCk7Ci0rICBpZiAobXlvcGVuICgiZSIsIGwwICsgMHgzLCAwNzAwKSkK LSsgICAgYWJvcnQgKCk7Ci0rICBpZiAobXlvcGVuICgiZiIsIGwwICsgMHgyKSkKLSsgICAgYWJv cnQgKCk7Ci0rICAvKiBJbnZhbGlkIHVzZSBvZiBteW9wZW4sIGJ1dCBvbmx5IGRldGVjdGFibGUg YXQgcnVudGltZS4gICovCi0rICBpZiAobXlvcGVuICgiZyIsIGwwICsgMHg0MykgIT0gLTYpCi0r ICAgIGFib3J0ICgpOwotKyAgcmV0dXJuIDA7Ci0rfQotLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRn L2V4dC92YS1hcmctcGFjay1sZW4tMS5DLmpqCTIwMDctMDktMTQgMjE6MDc6NDEuMDAwMDAwMDAw ICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L3ZhLWFyZy1wYWNrLWxlbi0xLkMJ MjAwNy0wOS0xNCAyMTowNzo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTIwIEBACi0r Ly8geyBkZy1kbyBydW4gfQotKy8vIHsgZGctb3B0aW9ucyAiLU8yIiB9Ci0rCi0rI2luY2x1ZGUg PHN0ZGFyZy5oPgotKwotK2V4dGVybiAiQyIgaW50IHdhcm5fb3Blbl9taXNzaW5nX21vZGUgKHZv aWQpOwotK2V4dGVybiAiQyIgaW50IHdhcm5fb3Blbl90b29fbWFueV9hcmd1bWVudHMgKHZvaWQp OwotK2V4dGVybiAiQyIgdm9pZCBhYm9ydCAodm9pZCk7Ci0rCi0rY2hhciBleHBlY3RlZF9jaGFy OwotKwotK19fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgaW50Ci0rbXlvcGVuMiAoY29uc3QgY2hh ciAqcGF0aCwgaW50IG9mbGFnKQotK3sKLSsgIGlmIChleHBlY3RlZF9jaGFyKysgIT0gcGF0aFsw XSB8fCBwYXRoWzFdICE9ICdcMCcpCi0rICAgIGFib3J0ICgpOwotKyAgc3dpdGNoIChwYXRoWzBd KQotKyAgICB7Ci0rICAgIGNhc2UgJ2YnOgotKyAgICAgIGlmIChvZmxhZyAhPSAweDIpCi0rCWFi b3J0ICgpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlICdnJzoKLSsgICAgICBpZiAob2ZsYWcg IT0gMHg0MykKLSsJYWJvcnQgKCk7Ci0rICAgICAgLy8gSW4gcmVhbCBfX29wZW5fMiB0aGlzIHdv dWxkIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbToKLSsgICAgICAvLyBvcGVuIHdpdGggT19DUkVBVCB3 aXRob3V0IHRoaXJkIGFyZ3VtZW50LgotKyAgICAgIHJldHVybiAtNjsKLSsgICAgZGVmYXVsdDoK LSsgICAgICBhYm9ydCAoKTsKLSsgICAgfQotKyAgcmV0dXJuIDA7Ci0rfQotKwotK19fYXR0cmli dXRlX18oKG5vaW5saW5lKSkgaW50Ci0rbXlvcGVudmEgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBv ZmxhZywgLi4uKQotK3sKLSsgIGludCBtb2RlID0gMDsKLSsgIHZhX2xpc3QgYXA7Ci0rICBpZiAo KG9mbGFnICYgMHg0MCkgIT0gMCkKLSsgICAgewotKyAgICAgIHZhX3N0YXJ0IChhcCwgb2ZsYWcp OwotKyAgICAgIG1vZGUgPSB2YV9hcmcgKGFwLCBpbnQpOwotKyAgICAgIHZhX2VuZCAoYXApOwot KyAgICB9Ci0rICBpZiAoZXhwZWN0ZWRfY2hhcisrICE9IHBhdGhbMF0gfHwgcGF0aFsxXSAhPSAn XDAnKQotKyAgICBhYm9ydCAoKTsKLSsgIHN3aXRjaCAocGF0aFswXSkKLSsgICAgewotKyAgICBj YXNlICdhJzoKLSsgICAgICBpZiAob2ZsYWcgIT0gMHg0MyB8fCBtb2RlICE9IDA2NDQpCi0rCWFi b3J0ICgpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlICdiJzoKLSsgICAgICBpZiAob2ZsYWcg IT0gMHgzKQotKwlhYm9ydCAoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAnYyc6Ci0rICAg ICAgaWYgKG9mbGFnICE9IDB4MikKLSsJYWJvcnQgKCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNh c2UgJ2QnOgotKyAgICAgIGlmIChvZmxhZyAhPSAweDQzIHx8IG1vZGUgIT0gMDYwMCkKLSsJYWJv cnQgKCk7Ci0rICAgICAgYnJlYWs7Ci0rICAgIGNhc2UgJ2UnOgotKyAgICAgIGlmIChvZmxhZyAh PSAweDMpCi0rCWFib3J0ICgpOwotKyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAg IGFib3J0ICgpOwotKyAgICB9Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0rZXh0ZXJuIGlubGluZSBf X2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lLCBnbnVfaW5saW5lKSkgaW50Ci0rbXlvcGVuIChj b25zdCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcsIC4uLikKLSt7Ci0rICBpZiAoX19idWlsdGluX3Zh X2FyZ19wYWNrX2xlbiAoKSA+IDEpCi0rICAgIHdhcm5fb3Blbl90b29fbWFueV9hcmd1bWVudHMg KCk7Ci0rCi0rICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKG9mbGFnKSkKLSsgICAgewotKyAg ICAgIGlmICgob2ZsYWcgJiAweDQwKSAhPSAwICYmIF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4g KCkgPCAxKQotKwl7Ci0rCSAgd2Fybl9vcGVuX21pc3NpbmdfbW9kZSAoKTsKLSsJICByZXR1cm4g bXlvcGVuMiAocGF0aCwgb2ZsYWcpOwotKwl9Ci0rICAgICAgcmV0dXJuIG15b3BlbnZhIChwYXRo LCBvZmxhZywgX19idWlsdGluX3ZhX2FyZ19wYWNrICgpKTsKLSsgICAgfQotKwotKyAgaWYgKF9f YnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCkgPCAxKQotKyAgICByZXR1cm4gbXlvcGVuMiAocGF0 aCwgb2ZsYWcpOwotKwotKyAgcmV0dXJuIG15b3BlbnZhIChwYXRoLCBvZmxhZywgX19idWlsdGlu X3ZhX2FyZ19wYWNrICgpKTsKLSt9Ci0rCi0rdm9sYXRpbGUgaW50IGwwOwotKwotK2ludAotK21h aW4gKHZvaWQpCi0rewotKyAgZXhwZWN0ZWRfY2hhciA9ICdhJzsKLSsgIGlmIChteW9wZW4gKCJh IiwgMHg0MywgMDY0NCkpCi0rICAgIGFib3J0ICgpOwotKyAgaWYgKG15b3BlbiAoImIiLCAweDMs IDA3NTUpKQotKyAgICBhYm9ydCAoKTsKLSsgIGlmIChteW9wZW4gKCJjIiwgMHgyKSkKLSsgICAg YWJvcnQgKCk7Ci0rICBpZiAobXlvcGVuICgiZCIsIGwwICsgMHg0MywgMDYwMCkpCi0rICAgIGFi b3J0ICgpOwotKyAgaWYgKG15b3BlbiAoImUiLCBsMCArIDB4MywgMDcwMCkpCi0rICAgIGFib3J0 ICgpOwotKyAgaWYgKG15b3BlbiAoImYiLCBsMCArIDB4MikpCi0rICAgIGFib3J0ICgpOwotKyAg Ly8gSW52YWxpZCB1c2Ugb2YgbXlvcGVuLCBidXQgb25seSBkZXRlY3RhYmxlIGF0IHJ1bnRpbWUu Ci0rICBpZiAobXlvcGVuICgiZyIsIGwwICsgMHg0MykgIT0gLTYpCi0rICAgIGFib3J0ICgpOwot KyAgcmV0dXJuIDA7Ci0rfQoKZGlmZiAtLWdpdCBhL2djYzQxLWJ1aWx0aW4tdmEtYXJnLXBhY2su cGF0Y2ggYi9nY2M0MS1idWlsdGluLXZhLWFyZy1wYWNrLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAxNzdlOTRiLi4wMDAwMDAwCi0tLSBhL2djYzQxLWJ1aWx0aW4tdmEtYXJn LXBhY2sucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3MjIgKzAsMCBAQAotMjAwNy0wOS0wNyAg SmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Ci0KLQkqIHRyZWUuYyAoY3BfY2Fubm90 X2lubGluZV90cmVlX2ZuKTogRG9uJ3QgbWFyayB2YXJhcmdzX2Z1bmN0aW9uX3AKLQlhcyB1bmlu bGluYWJsZS4KLQotCSogZysrLmRnL2V4dC92YS1hcmctcGFjay0xLkM6IE5ldyB0ZXN0LgotCSog ZysrLmRnL2V4dC92YS1hcmctcGFjay0yLkM6IE5ldyB0ZXN0LgotCi0yMDA3LTA5LTA1ICBKYWt1 YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KLQotCSogYnVpbHRpbnMuZGVmIChCVUlMVF9J Tl9WQV9BUkdfUEFDSyk6IE5ldyBidWlsdC1pbi4KLQkqIHRyZWUuaCAoQ0FMTF9FWFBSX1ZBX0FS R19QQUNLKTogRGVmaW5lLgotCSogdHJlZS1pbmxpbmUuaCAoY29weV9ib2R5X2RhdGEpOiBBZGQg Y2FsbF9leHByIGZpZWxkLgotCSogdHJlZS1pbmxpbmUuYyAoZXhwYW5kX2NhbGxfaW5saW5lKTog SW5pdGlhbGl6ZSBjYWxsX2V4cHIuCi0JKGNvcHlfYmIpOiBBcHBlbmQgYW5vbnltb3VzIGlubGlu ZSBmbiBhcmd1bWVudHMgdG8gYXJndW1lbnRzCi0Jd2hlbiBpbmxpbmluZyBhIENBTExfRVhQUl9W QV9BUkdfUEFDSyBjYWxsLgotCSogYnVpbHRpbnMuYyAoZXhwYW5kX2J1aWx0aW4pOiBJc3N1ZSBh biBlcnJvciBpZgotCUJVSUxUX0lOX1ZBX0FSR19QQUNLIGlzIHNlZW4gZHVyaW5nIGV4cGFuZC4K LQkoZm9sZF9idWlsdGluXzEpOiBEb24ndCBmb2xkIGNhbGxzIHdpdGgKLQlfX2J1aWx0aW5fdmFf YXJnX3BhY2sgKCkgY2FsbCBhcyBsYXN0IGFyZ3VtZW50LgotCSogZ2ltcGxpZnkuYyAoZ2ltcGxp ZnlfY2FsbF9leHByKTogSWYgbGFzdCBhcmd1bWVudCB0byBhIHZhcmFyZwotCWZ1bmN0aW9uIGlz IF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSwgZGVjcmVhc2UgbnVtYmVyIG9mIGNhbGwKLQlhcmd1 bWVudHMgYW5kIGluc3RlYWQgc2V0IENBTExfRVhQUl9WQV9BUkdfUEFDSyBvbiB0aGUgQ0FMTF9F WFBSLgotCSogZm9sZC1jb25zdC5jIChmb2xkKTogRG9uJ3QgZm9sZCBDQUxMX0VYUFJzIHdpdGgK LQlDQUxMX0VYUFJfVkFfQVJHX1BBQ0sgYml0IHNldC4KLQkqIGV4cHIuYyAoZXhwYW5kX2V4cHJf cmVhbF8xKTogSXNzdWUgYW4gZXJyb3IgaWYKLQlDQUxMX0VYUFJfVkFfQVJHX1BBQ0sgQ0FMTF9F WFBSIGlzIHNlZW4gZHVyaW5nIGV4cGFuZC4KLQkqIHRyZWUtcHJldHR5LXByaW50LmMgKGR1bXBf Z2VuZXJpY19ub2RlKTogSGFuZGxlIHByaW50aW5nCi0JQ0FMTF9FWFBSX1ZBX0FSR19QQUNLIGJp dCBvbiBDQUxMX0VYUFJzLgotCSogZG9jL2V4dGVuZC50ZXhpIChfX2J1aWx0aW5fdmFfYXJnX3Bh Y2spOiBEb2N1bWVudC4KLQotCSogZ2NjLmMtdG9ydHVyZS9leGVjdXRlL3ZhLWFyZy1wYWNrLTEu YzogTmV3IHRlc3QuCi0JKiBnY2MuZGcvdmEtYXJnLXBhY2stMS5jOiBOZXcgdGVzdC4KLQkqIGdj Yy5kZy92YS1hcmctcGFjay0xYS5jOiBOZXcgdGVzdC4KLQotLS0tIGdjYy9idWlsdGlucy5kZWYu amoJMjAwNy0wOS0wNiAxMDoxOTowOS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvYnVpbHRpbnMu ZGVmCTIwMDctMDktMDYgMTA6MTk6MjQuMDAwMDAwMDAwICswMjAwCi1AQCAtNjY1LDYgKzY2NSw3 IEBAIERFRl9HQ0NfQlVJTFRJTiAgICAgICAgKEJVSUxUX0lOX1VQREFURV8KLSBERUZfR0NDX0JV SUxUSU4gICAgICAgIChCVUlMVF9JTl9WQV9DT1BZLCAidmFfY29weSIsIEJUX0ZOX1ZPSURfVkFM SVNUX1JFRl9WQUxJU1RfQVJHLCBBVFRSX05VTEwpCi0gREVGX0dDQ19CVUlMVElOICAgICAgICAo QlVJTFRfSU5fVkFfRU5ELCAidmFfZW5kIiwgQlRfRk5fVk9JRF9WQUxJU1RfUkVGLCBBVFRSX05V TEwpCi0gREVGX0dDQ19CVUlMVElOICAgICAgICAoQlVJTFRfSU5fVkFfU1RBUlQsICJ2YV9zdGFy dCIsIEJUX0ZOX1ZPSURfVkFMSVNUX1JFRl9WQVIsIEFUVFJfTlVMTCkKLStERUZfR0NDX0JVSUxU SU4gICAgICAgIChCVUlMVF9JTl9WQV9BUkdfUEFDSywgInZhX2FyZ19wYWNrIiwgQlRfRk5fSU5U LCBBVFRSX1BVUkVfTk9USFJPV19MSVNUKQotIERFRl9FWFRfTElCX0JVSUxUSU4gICAgKEJVSUxU X0lOX19FWElULCAiX2V4aXQiLCBCVF9GTl9WT0lEX0lOVCwgQVRUUl9OT1JFVFVSTl9OT1RIUk9X X0xJU1QpCi0gREVGX0M5OV9CVUlMVElOICAgICAgICAoQlVJTFRfSU5fX0VYSVQyLCAiX0V4aXQi LCBCVF9GTl9WT0lEX0lOVCwgQVRUUl9OT1JFVFVSTl9OT1RIUk9XX0xJU1QpCi0gCi0tLS0gZ2Nj L3RyZWUuaC5qagkyMDA3LTAyLTIwIDIyOjM5OjEyLjAwMDAwMDAwMCArMDEwMAotKysrIGdjYy90 cmVlLmgJMjAwNy0wOS0wNiAxMTo1MDo1Ni4wMDAwMDAwMDAgKzAyMDAKLUBAIC00MTEsNiArNDEx LDggQEAgc3RydWN0IHRyZWVfY29tbW9uIEdUWSgoKSkKLSAgICAgICAgICAgIFZBUl9ERUNMIG9y IEZVTkNUSU9OX0RFQ0wgb3IgSURFTlRJRklFUl9OT0RFCi0gICAgICAgIEFTTV9WT0xBVElMRV9Q IGluCi0gICAgICAgICAgICBBU01fRVhQUgotKyAgICAgICBDQUxMX0VYUFJfVkFfQVJHX1BBQ0sg aW4KLSsJICBDQUxMX0VYUFIKLSAgICAgICAgVFlQRV9DQUNIRURfVkFMVUVTX1AgaW4KLSAgICAg ICAgICAgLi4uX1RZUEUKLSAgICAgICAgU0FWRV9FWFBSX1JFU09MVkVEX1AgaW4KLUBAIC0xMDY2 LDYgKzEwNjgsMTEgQEAgZXh0ZXJuIHZvaWQgb21wX2NsYXVzZV9yYW5nZV9jaGVja19mYWlsZQot ICNkZWZpbmUgU0FWRV9FWFBSX1JFU09MVkVEX1AoTk9ERSkgXAotICAgKFRSRUVfQ0hFQ0sgKE5P REUsIFNBVkVfRVhQUiktPmNvbW1vbi5wdWJsaWNfZmxhZykKLSAKLSsvKiBTZXQgb24gYSBDQUxM X0VYUFIgaWYgdGhpcyBzdGRhcmcgY2FsbCBzaG91bGQgYmUgcGFzc2VkIHRoZSBhcmd1bWVudAot KyAgIHBhY2suICAqLwotKyNkZWZpbmUgQ0FMTF9FWFBSX1ZBX0FSR19QQUNLKE5PREUpIFwKLSsg IChDQUxMX0VYUFJfQ0hFQ0soTk9ERSktPmNvbW1vbi5wdWJsaWNfZmxhZykKLSsKLSAvKiBJbiBh bnkgZXhwcmVzc2lvbiwgZGVjbCwgb3IgY29uc3RhbnQsIG5vbnplcm8gbWVhbnMgaXQgaGFzIHNp ZGUgZWZmZWN0cyBvcgotICAgIHJlZXZhbHVhdGlvbiBvZiB0aGUgd2hvbGUgZXhwcmVzc2lvbiBj b3VsZCBwcm9kdWNlIGEgZGlmZmVyZW50IHZhbHVlLgotICAgIFRoaXMgaXMgc2V0IGlmIGFueSBz dWJleHByZXNzaW9uIGlzIGEgZnVuY3Rpb24gY2FsbCwgYSBzaWRlIGVmZmVjdCBvciBhCi0tLS0g Z2NjL3RyZWUtaW5saW5lLmguamoJMjAwNy0wMi0yMCAyMjozOToxMy4wMDAwMDAwMDAgKzAxMDAK LSsrKyBnY2MvdHJlZS1pbmxpbmUuaAkyMDA3LTA5LTA2IDEwOjE5OjI0LjAwMDAwMDAwMCArMDIw MAotQEAgLTU3LDYgKzU3LDEwIEBAIHR5cGVkZWYgc3RydWN0IGNvcHlfYm9keV9kYXRhCi0gICAv KiBDdXJyZW50IEJMT0NLLiAgKi8KLSAgIHRyZWUgYmxvY2s7Ci0gCi0rICAvKiBDQUxMX0VYUFIg aWYgdmEgYXJnIHBhcmFtZXRlciBwYWNrcyBzaG91bGQgYmUgZXhwYW5kZWQgb3IgTlVMTAotKyAg ICAgaXMgbm90LiAgKi8KLSsgIHRyZWUgY2FsbF9leHByOwotKwotICAgLyogRXhjZXB0aW9uIHJl Z2lvbiB0aGUgaW5saW5lZCBjYWxsIGxpZSBpbi4gICovCi0gICBpbnQgZWhfcmVnaW9uOwotICAg LyogVGFrZSByZWdpb24gbnVtYmVyIGluIHRoZSBmdW5jdGlvbiBiZWluZyBjb3BpZWQsIGFkZCB0 aGlzIHZhbHVlIGFuZAotLS0tIGdjYy90cmVlLWlubGluZS5jLmpqCTIwMDctMDQtMjYgMDk6NDE6 NDkuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3RyZWUtaW5saW5lLmMJMjAwNy0wOS0wNiAxMjoz NTo1Ny4wMDAwMDAwMDAgKzAyMDAKLUBAIC03MjUsNiArNzI1LDIyIEBAIGNvcHlfYmIgKGNvcHlf Ym9keV9kYXRhICppZCwgYmFzaWNfYmxvY2sKLSAKLSAgICAgICAgICAgYnNpX2luc2VydF9hZnRl ciAoJmNvcHlfYnNpLCBzdG10LCBCU0lfTkVXX1NUTVQpOwotIAkgIGNhbGwgPSBnZXRfY2FsbF9l eHByX2luIChzdG10KTsKLSsJICBpZiAoY2FsbCAmJiBDQUxMX0VYUFJfVkFfQVJHX1BBQ0sgKGNh bGwpICYmIGlkLT5jYWxsX2V4cHIpCi0rCSAgICB7Ci0rCSAgICAgIHRyZWUgYXJnbGlzdCwgKmEs IHA7Ci0rCSAgICAgIFRSRUVfT1BFUkFORCAoY2FsbCwgMSkgPSBjb3B5X2xpc3QgKFRSRUVfT1BF UkFORCAoY2FsbCwgMSkpOwotKwotKwkgICAgICBmb3IgKGEgPSAmVFJFRV9PUEVSQU5EIChjYWxs LCAxKTsgKmE7IGEgPSAmVFJFRV9DSEFJTiAoKmEpKQotKwkJOwotKwotKwkgICAgICBwID0gREVD TF9BUkdVTUVOVFMgKGlkLT5zcmNfZm4pOwotKwkgICAgICBmb3IgKGFyZ2xpc3QgPSBUUkVFX09Q RVJBTkQgKGlkLT5jYWxsX2V4cHIsIDEpOwotKwkJICAgcDsgcCA9IFRSRUVfQ0hBSU4gKHApLCBh cmdsaXN0ID0gVFJFRV9DSEFJTiAoYXJnbGlzdCkpCi0rCQk7Ci0rCi0rCSAgICAgICphID0gY29w eV9saXN0IChhcmdsaXN0KTsKLSsJICAgICAgQ0FMTF9FWFBSX1ZBX0FSR19QQUNLIChjYWxsKSA9 IDA7Ci0rCSAgICB9Ci0gCSAgLyogV2UncmUgZHVwbGljYXRpbmcgYSBDQUxMX0VYUFIuICBGaW5k IGFueSBjb3JyZXNwb25kaW5nCi0gCSAgICAgY2FsbGdyYXBoIGVkZ2VzIGFuZCB1cGRhdGUgb3Ig ZHVwbGljYXRlIHRoZW0uICAqLwotIAkgIGlmIChjYWxsICYmIChkZWNsID0gZ2V0X2NhbGxlZV9m bmRlY2wgKGNhbGwpKSkKLUBAIC0yMDg1LDYgKzIxMDEsNyBAQCBleHBhbmRfY2FsbF9pbmxpbmUg KGJhc2ljX2Jsb2NrIGJiLCB0cmVlCi0gICAvKiBSZWNvcmQgdGhlIGZ1bmN0aW9uIHdlIGFyZSBh Ym91dCB0byBpbmxpbmUuICAqLwotICAgaWQtPnNyY19mbiA9IGZuOwotICAgaWQtPnNyY19ub2Rl ID0gY2dfZWRnZS0+Y2FsbGVlOwotKyAgaWQtPmNhbGxfZXhwciA9IHQ7Ci0gCi0gICBpbml0aWFs aXplX2lubGluZWRfcGFyYW1ldGVycyAoaWQsIGFyZ3MsIFRSRUVfT1BFUkFORCAodCwgMiksIGZu LCBiYik7Ci0gCi0tLS0gZ2NjL2J1aWx0aW5zLmMuamoJMjAwNy0wOC0zMSAwOTo0Nzo0Ni4wMDAw MDAwMDAgKzAyMDAKLSsrKyBnY2MvYnVpbHRpbnMuYwkyMDA3LTA5LTA2IDExOjA0OjU2LjAwMDAw MDAwMCArMDIwMAotQEAgLTU5NzksNiArNTk3OSwxMiBAQCBleHBhbmRfYnVpbHRpbiAodHJlZSBl eHAsIHJ0eCB0YXJnZXQsIHJ0Ci0gICAgIGNhc2UgQlVJTFRfSU5fQVJHU19JTkZPOgotICAgICAg IHJldHVybiBleHBhbmRfYnVpbHRpbl9hcmdzX2luZm8gKGFyZ2xpc3QpOwotIAotKyAgICBjYXNl IEJVSUxUX0lOX1ZBX0FSR19QQUNLOgotKyAgICAgIC8qIEFsbCB2YWxpZCB1c2VzIG9mIF9fYnVp bHRpbl92YV9hcmdfcGFjayAoKSBhcmUgcmVtb3ZlZCBkdXJpbmcKLSsJIGlubGluaW5nLiAgKi8K LSsgICAgICBlcnJvciAoImludmFsaWQgdXNlIG9mICU8X19idWlsdGluX3ZhX2FyZ19wYWNrICgp JT4iKTsKLSsgICAgICByZXR1cm4gY29uc3QwX3J0eDsKLSsKLSAgICAgICAvKiBSZXR1cm4gdGhl IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGFub255bW91cyBzdGFjayBhcmcuICAqLwotICAgICBjYXNl IEJVSUxUX0lOX05FWFRfQVJHOgotICAgICAgIGlmIChmb2xkX2J1aWx0aW5fbmV4dF9hcmcgKGFy Z2xpc3QpKQotQEAgLTkwMTcsNyArOTAyMywyNyBAQCBmb2xkX2J1aWx0aW5fMSAodHJlZSBmbmRl Y2wsIHRyZWUgYXJnbGlzCi0gewotICAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChUUkVFX1RZUEUg KGZuZGVjbCkpOwotICAgZW51bSBidWlsdF9pbl9mdW5jdGlvbiBmY29kZTsKLSsgIHRyZWUgYTsK LSsKLSsgIGlmIChhcmdsaXN0KQotKyAgICB7Ci0rICAgICAgZm9yIChhID0gYXJnbGlzdDsgVFJF RV9DSEFJTiAoYSk7IGEgPSBUUkVFX0NIQUlOIChhKSkKLSsJOwotIAotKyAgICAgIC8qIEJlZm9y ZSBnaW1wbGlmaWNhdGlvbiBDQUxMX0VYUFJfVkFfQVJHX1BBQ0sgaXMgbm90IHNldCwgYnV0Ci0r CSBpbnN0ZWFkIGxhc3QgYXJndW1lbnQgaXMgX19idWlsdGluX3ZhX2FyZ19wYWNrICgpLiAgRGVm ZXIgZm9sZGluZwotKwkgZXZlbiBpbiB0aGF0IGNhc2UsIHVudGlsIGFyZ3VtZW50cyBhcmUgZmlu YWxpemVkLiAgKi8KLSsgICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX1ZBTFVFIChhKSkgPT0gQ0FM TF9FWFBSKQotKwl7Ci0rCSAgdHJlZSBmbmRlY2wyID0gZ2V0X2NhbGxlZV9mbmRlY2wgKFRSRUVf VkFMVUUgKGEpKTsKLSsJICBpZiAoZm5kZWNsMgotKwkgICAgICAmJiBUUkVFX0NPREUgKGZuZGVj bDIpID09IEZVTkNUSU9OX0RFQ0wKLSsJICAgICAgJiYgREVDTF9CVUlMVF9JTl9DTEFTUyAoZm5k ZWNsMikgPT0gQlVJTFRfSU5fTk9STUFMCi0rCSAgICAgICYmIERFQ0xfRlVOQ1RJT05fQ09ERSAo Zm5kZWNsMikgPT0gQlVJTFRfSU5fVkFfQVJHX1BBQ0spCi0rCSAgICByZXR1cm4gTlVMTF9UUkVF OwotKwl9Ci0rICAgIH0KLSsKLSAgIGlmIChERUNMX0JVSUxUX0lOX0NMQVNTIChmbmRlY2wpID09 IEJVSUxUX0lOX01EKQotICAgICByZXR1cm4gdGFyZ2V0bS5mb2xkX2J1aWx0aW4gKGZuZGVjbCwg YXJnbGlzdCwgaWdub3JlKTsKLSAKLS0tLSBnY2MvZ2ltcGxpZnkuYy5qagkyMDA3LTA4LTMxIDA5 OjQ3OjQ2LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy9naW1wbGlmeS5jCTIwMDctMDktMDYgMTE6 NDI6MDEuMDAwMDAwMDAwICswMjAwCi1AQCAtMjAxOCw2ICsyMDE4LDU1IEBAIGdpbXBsaWZ5X2Nh bGxfZXhwciAodHJlZSAqZXhwcl9wLCB0cmVlICoKLSAgIHJldCA9IGdpbXBsaWZ5X2V4cHIgKCZU UkVFX09QRVJBTkQgKCpleHByX3AsIDApLCBwcmVfcCwgTlVMTCwKLSAJCSAgICAgICBpc19naW1w bGVfY2FsbF9hZGRyLCBmYl9ydmFsdWUpOwotIAotKyAgaWYgKHJldCAhPSBHU19FUlJPUiAmJiBU UkVFX09QRVJBTkQgKCpleHByX3AsIDEpKQotKyAgICB7Ci0rICAgICAgaW50IG5hcmdzOwotKwot KyAgICAgIGZvciAobmFyZ3MgPSAxLCBhcmdsaXN0ID0gVFJFRV9PUEVSQU5EICgqZXhwcl9wLCAx KTsKLSsJICAgVFJFRV9DSEFJTiAoYXJnbGlzdCk7Ci0rCSAgIGFyZ2xpc3QgPSBUUkVFX0NIQUlO IChhcmdsaXN0KSkKLSsJbmFyZ3MrKzsKLSsKLSsgICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX1ZB TFVFIChhcmdsaXN0KSkgPT0gQ0FMTF9FWFBSKQotKwl7Ci0rCSAgdHJlZSBsYXN0X2FyZyA9IFRS RUVfVkFMVUUgKGFyZ2xpc3QpOwotKwkgIHRyZWUgbGFzdF9hcmdfZm5kZWNsID0gZ2V0X2NhbGxl ZV9mbmRlY2wgKGxhc3RfYXJnKTsKLSsKLSsJICBpZiAobGFzdF9hcmdfZm5kZWNsCi0rCSAgICAg ICYmIFRSRUVfQ09ERSAobGFzdF9hcmdfZm5kZWNsKSA9PSBGVU5DVElPTl9ERUNMCi0rCSAgICAg ICYmIERFQ0xfQlVJTFRfSU5fQ0xBU1MgKGxhc3RfYXJnX2ZuZGVjbCkgPT0gQlVJTFRfSU5fTk9S TUFMCi0rCSAgICAgICYmIERFQ0xfRlVOQ1RJT05fQ09ERSAobGFzdF9hcmdfZm5kZWNsKSA9PSBC VUlMVF9JTl9WQV9BUkdfUEFDSykKLSsJICAgIHsKLSsJICAgICAgdHJlZSBwID0gTlVMTF9UUkVF LCAqYXB0cjsKLSsJICAgICAgaW50IGk7Ci0rCi0rCSAgICAgIGlmIChkZWNsICYmIERFQ0xfQVJH VU1FTlRTIChkZWNsKSkKLSsJCXAgPSBERUNMX0FSR1VNRU5UUyAoZGVjbCk7Ci0rCSAgICAgIGVs c2UgaWYgKGRlY2wpCi0rCQlwID0gVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAoZGVjbCkpOwot KwkgICAgICBlbHNlIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX09QRVJBTkQg KCpleHByX3AsIDApKSkpCi0rCQlwID0gVFlQRV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAoVFJFRV9U WVBFCi0rCQkJCQkJKFRSRUVfT1BFUkFORCAoKmV4cHJfcCwgMCkpKSk7Ci0rCSAgICAgIGZvciAo aSA9IDA7IHA7IHAgPSBUUkVFX0NIQUlOIChwKSkKLSsJCWkrKzsKLSsKLSsJICAgICAgaWYgKGkg PCBuYXJncykKLSsJCXsKLSsJCSAgVFJFRV9PUEVSQU5EICgqZXhwcl9wLCAxKQotKwkJICAgID0g Y29weV9saXN0IChUUkVFX09QRVJBTkQgKCpleHByX3AsIDEpKTsKLSsKLSsJCSAgZm9yIChhcHRy ID0gJlRSRUVfT1BFUkFORCAoKmV4cHJfcCwgMSk7Ci0rCQkgICAgICAgVFJFRV9DSEFJTiAoKmFw dHIpOwotKwkJICAgICAgIGFwdHIgPSAmVFJFRV9DSEFJTiAoKmFwdHIpKQotKwkJICAgIDsKLSsK LSsJCSAgKmFwdHIgPSBOVUxMX1RSRUU7Ci0rCQkgIENBTExfRVhQUl9WQV9BUkdfUEFDSyAoKmV4 cHJfcCkgPSAxOwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSAgIGlmIChQVVNIX0FS R1NfUkVWRVJTRUQpCi0gICAgIFRSRUVfT1BFUkFORCAoKmV4cHJfcCwgMSkgPSBucmV2ZXJzZSAo VFJFRV9PUEVSQU5EICgqZXhwcl9wLCAxKSk7Ci0gICBmb3IgKGFyZ2xpc3QgPSBUUkVFX09QRVJB TkQgKCpleHByX3AsIDEpOyBhcmdsaXN0OwotQEAgLTIwMzcsNyArMjA4Niw3IEBAIGdpbXBsaWZ5 X2NhbGxfZXhwciAodHJlZSAqZXhwcl9wLCB0cmVlICoKLSAgIGlmIChyZXQgIT0gR1NfRVJST1Ip Ci0gICAgIHsKLSAgICAgICBkZWNsID0gZ2V0X2NhbGxlZV9mbmRlY2wgKCpleHByX3ApOwotLSAg ICAgIGlmIChkZWNsICYmIERFQ0xfQlVJTFRfSU4gKGRlY2wpKQotKyAgICAgIGlmIChkZWNsICYm IERFQ0xfQlVJTFRfSU4gKGRlY2wpICYmICFDQUxMX0VYUFJfVkFfQVJHX1BBQ0sgKCpleHByX3Ap KQotIAl7Ci0gCSAgdHJlZSBhcmdsaXN0ID0gVFJFRV9PUEVSQU5EICgqZXhwcl9wLCAxKTsKLSAJ ICB0cmVlIG5ldyA9IGZvbGRfYnVpbHRpbiAoZGVjbCwgYXJnbGlzdCwgIXdhbnRfdmFsdWUpOwot LS0tIGdjYy9mb2xkLWNvbnN0LmMuamoJMjAwNy0wOC0zMSAwOTo0NzozOS4wMDAwMDAwMDAgKzAy MDAKLSsrKyBnY2MvZm9sZC1jb25zdC5jCTIwMDctMDktMDYgMTE6NDA6NTUuMDAwMDAwMDAwICsw MjAwCi1AQCAtMTA0MDksNiArMTA0MDksOCBAQCBmb2xkICh0cmVlIGV4cHIpCi0gCSAgb3AwID0g VFJFRV9PUEVSQU5EICh0LCAwKTsKLSAJICBvcDEgPSBUUkVFX09QRVJBTkQgKHQsIDEpOwotIAkg IG9wMiA9IFRSRUVfT1BFUkFORCAodCwgMik7Ci0rCSAgaWYgKGNvZGUgPT0gQ0FMTF9FWFBSICYm IENBTExfRVhQUl9WQV9BUkdfUEFDSyAodCkpCi0rCSAgICByZXR1cm4gZXhwcjsKLSAJICB0ZW0g PSBmb2xkX3Rlcm5hcnkgKGNvZGUsIHR5cGUsIG9wMCwgb3AxLCBvcDIpOwotIAkgIHJldHVybiB0 ZW0gPyB0ZW0gOiBleHByOwotIAlkZWZhdWx0OgotLS0tIGdjYy9leHByLmMuamoJMjAwNy0wNC0y NCAyMjo1ODo1My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvZXhwci5jCTIwMDctMDktMDYgMTA6 MTk6MjQuMDAwMDAwMDAwICswMjAwCi1AQCAtNzQ3NSw2ICs3NDc1LDEwIEBAIGV4cGFuZF9leHBy X3JlYWxfMSAodHJlZSBleHAsIHJ0eCB0YXJnZXQKLSAgICAgICByZXR1cm4gZXhwYW5kX2V4cHIg KE9CSl9UWVBFX1JFRl9FWFBSIChleHApLCB0YXJnZXQsIHRtb2RlLCBtb2RpZmllcik7Ci0gCi0g ICAgIGNhc2UgQ0FMTF9FWFBSOgotKyAgICAgIC8qIEFsbCB2YWxpZCB1c2VzIG9mIF9fYnVpbHRp bl92YV9hcmdfcGFjayAoKSBhcmUgcmVtb3ZlZCBkdXJpbmcKLSsJIGlubGluaW5nLiAgKi8KLSsg ICAgICBpZiAoQ0FMTF9FWFBSX1ZBX0FSR19QQUNLIChleHApKQotKwllcnJvciAoImludmFsaWQg dXNlIG9mICU8X19idWlsdGluX3ZhX2FyZ19wYWNrICgpJT4iKTsKLSAgICAgICAvKiBDaGVjayBm b3IgYSBidWlsdC1pbiBmdW5jdGlvbi4gICovCi0gICAgICAgaWYgKFRSRUVfQ09ERSAoVFJFRV9P UEVSQU5EIChleHAsIDApKSA9PSBBRERSX0VYUFIKLSAJICAmJiAoVFJFRV9DT0RFIChUUkVFX09Q RVJBTkQgKFRSRUVfT1BFUkFORCAoZXhwLCAwKSwgMCkpCi0tLS0gZ2NjL2RvYy9leHRlbmQudGV4 aS5qagkyMDA3LTA4LTMxIDEzOjAwOjI4LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy9kb2MvZXh0 ZW5kLnRleGkJMjAwNy0wOS0wNiAxMDoxOToyNS4wMDAwMDAwMDAgKzAyMDAKLUBAIC01NTIsNiAr NTUyLDMyIEBAIHRoZSBjb250YWluaW5nIGZ1bmN0aW9uLiAgWW91IHNob3VsZCBzcGUKLSByZXR1 cm5lZCBieSBAY29kZXtfX2J1aWx0aW5fYXBwbHl9LgotIEBlbmQgZGVmdHlwZWZuCi0gCi0rQGRl ZnR5cGVmbiB7QnVpbHQtaW4gRnVuY3Rpb259IF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKQotK1Ro aXMgYnVpbHQtaW4gZnVuY3Rpb24gcmVwcmVzZW50cyBhbGwgYW5vbnltb3VzIGFyZ3VtZW50cyBv ZiBhbiBpbmxpbmUKLStmdW5jdGlvbi4gIEl0IGNhbiBiZSB1c2VkIG9ubHkgaW4gaW5saW5lIGZ1 bmN0aW9ucyB3aGljaCB3aWxsIGJlIGFsd2F5cwotK2lubGluZWQsIG5ldmVyIGNvbXBpbGVkIGFz IGEgc2VwYXJhdGUgZnVuY3Rpb24sIHN1Y2ggYXMgdGhvc2UgdXNpbmcKLStAY29kZXtfX2F0dHJp YnV0ZV9fICgoX19hbHdheXNfaW5saW5lX18pKX0gb3IKLStAY29kZXtfX2F0dHJpYnV0ZV9fICgo X19nbnVfaW5saW5lX18pKX0gZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMuCi0rSXQgbXVzdCBiZSBv bmx5IHBhc3NlZCBhcyBsYXN0IGFyZ3VtZW50IHRvIHNvbWUgb3RoZXIgZnVuY3Rpb24KLSt3aXRo IHZhcmlhYmxlIGFyZ3VtZW50cy4gIFRoaXMgaXMgdXNlZnVsIGZvciB3cml0aW5nIHNtYWxsIHdy YXBwZXIKLStpbmxpbmVzIGZvciB2YXJpYWJsZSBhcmd1bWVudCBmdW5jdGlvbnMsIHdoZW4gdXNp bmcgcHJlcHJvY2Vzc29yCi0rbWFjcm9zIGlzIHVuZGVzaXJhYmxlLiAgRm9yIGV4YW1wbGU6Ci0r QHNtYWxsZXhhbXBsZQotK2V4dGVybiBpbnQgbXlwcmludGYgKEZJTEUgKmYsIGNvbnN0IGNoYXIg KmZvcm1hdCwgLi4uKTsKLStleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChfX2dudV9pbmxp bmVfXykpIGludAotK215cHJpbnRmIChGSUxFICpmLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikK LStAewotKyAgaW50IHIgPSBmcHJpbnRmIChmLCAibXlwcmludGY6ICIpOwotKyAgaWYgKHIgPCAw KQotKyAgICByZXR1cm4gcjsKLSsgIGludCBzID0gZnByaW50ZiAoZiwgZm9ybWF0LCBfX2J1aWx0 aW5fdmFfYXJnX3BhY2sgKCkpOwotKyAgaWYgKHMgPCAwKQotKyAgICByZXR1cm4gczsKLSsgIHJl dHVybiByICsgczsKLStAfQotK0BlbmQgc21hbGxleGFtcGxlCi0rQGVuZCBkZWZ0eXBlZm4KLSsK LSBAbm9kZSBUeXBlb2YKLSBAc2VjdGlvbiBSZWZlcnJpbmcgdG8gYSBUeXBlIHdpdGggQGNvZGV7 dHlwZW9mfQotIEBmaW5kZXggdHlwZW9mCi0tLS0gZ2NjL3RyZWUtcHJldHR5LXByaW50LmMuamoJ MjAwNy0wMi0yMCAyMjozOToxMi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBnY2MvdHJlZS1wcmV0dHkt cHJpbnQuYwkyMDA3LTA5LTA2IDEwOjI0OjUxLjAwMDAwMDAwMCArMDIwMAotQEAgLTExMjgsNiAr MTEyOCwxNSBAQCBkdW1wX2dlbmVyaWNfbm9kZSAocHJldHR5X3ByaW50ZXIgKmJ1ZmZlCi0gICAg ICAgb3AxID0gVFJFRV9PUEVSQU5EIChub2RlLCAxKTsKLSAgICAgICBpZiAob3AxKQotIAlkdW1w X2dlbmVyaWNfbm9kZSAoYnVmZmVyLCBvcDEsIHNwYywgZmxhZ3MsIGZhbHNlKTsKLSsgICAgICBp ZiAoQ0FMTF9FWFBSX1ZBX0FSR19QQUNLIChub2RlKSkKLSsJewotKwkgIGlmIChvcDEpCi0rCSAg ICB7Ci0rCSAgICAgIHBwX2NoYXJhY3RlciAoYnVmZmVyLCAnLCcpOwotKwkgICAgICBwcF9zcGFj ZSAoYnVmZmVyKTsKLSsJICAgIH0KLSsJICBwcF9zdHJpbmcgKGJ1ZmZlciwgIl9fYnVpbHRpbl92 YV9hcmdfcGFjayAoKSIpOwotKwl9Ci0gICAgICAgcHBfY2hhcmFjdGVyIChidWZmZXIsICcpJyk7 Ci0gCi0gICAgICAgb3AxID0gVFJFRV9PUEVSQU5EIChub2RlLCAyKTsKLS0tLSBnY2MvY3AvdHJl ZS5jLmpqCTIwMDctMDMtMTIgMDg6Mjg6MDEuMDAwMDAwMDAwICswMTAwCi0rKysgZ2NjL2NwL3Ry ZWUuYwkyMDA3LTA5LTA3IDA5OjAzOjA3LjAwMDAwMDAwMCArMDIwMAotQEAgLTIwNzgsMTIgKzIw NzgsNiBAQCBjcF9jYW5ub3RfaW5saW5lX3RyZWVfZm4gKHRyZWUqIGZucCkKLSAgICAgICByZXR1 cm4gMTsKLSAgICAgfQotIAotLSAgaWYgKHZhcmFyZ3NfZnVuY3Rpb25fcCAoZm4pKQotLSAgICB7 Ci0tICAgICAgREVDTF9VTklOTElOQUJMRSAoZm4pID0gMTsKLS0gICAgICByZXR1cm4gMTsKLS0g ICAgfQotLQotICAgaWYgKCEgZnVuY3Rpb25fYXR0cmlidXRlX2lubGluYWJsZV9wIChmbikpCi0g ICAgIHsKLSAgICAgICBERUNMX1VOSU5MSU5BQkxFIChmbikgPSAxOwotLS0tIGdjYy90ZXN0c3Vp dGUvZ2NjLmMtdG9ydHVyZS9leGVjdXRlL3ZhLWFyZy1wYWNrLTEuYy5qagkyMDA3LTA5LTA2IDEw OjE5OjI1LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9l eGVjdXRlL3ZhLWFyZy1wYWNrLTEuYwkyMDA3LTA5LTA2IDEwOjE5OjI1LjAwMDAwMDAwMCArMDIw MAotQEAgLTAsMCArMSwxNDMgQEAKLSsvKiBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkgYnVpbHRp biB0ZXN0cy4gICovCi0rCi0rI2luY2x1ZGUgPHN0ZGFyZy5oPgotKwotK2V4dGVybiB2b2lkIGFi b3J0ICh2b2lkKTsKLSsKLStpbnQgdjEgPSA4OwotK2xvbmcgaW50IHYyID0gMzsKLSt2b2lkICp2 MyA9ICh2b2lkICopICZ2MjsKLStzdHJ1Y3QgQSB7IGNoYXIgY1sxNl07IH0gdjQgPSB7ICJmb28i IH07Ci0rbG9uZyBkb3VibGUgdjUgPSA0MDsKLStjaGFyIHNlZW5bMjBdOwotK2ludCBjbnQ7Ci0r Ci0rX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkgaW50Ci0rZm9vMSAoaW50IHgsIGludCB5LCAu Li4pCi0rewotKyAgaW50IGk7Ci0rICBsb25nIGludCBsOwotKyAgdm9pZCAqdjsKLSsgIHN0cnVj dCBBIGE7Ci0rICBsb25nIGRvdWJsZSBsZDsKLSsgIHZhX2xpc3QgYXA7Ci0rCi0rICB2YV9zdGFy dCAoYXAsIHkpOwotKyAgaWYgKHggPCAwIHx8IHggPj0gMjAgfHwgc2Vlblt4XSkKLSsgICAgYWJv cnQgKCk7Ci0rICBzZWVuW3hdID0gKytjbnQ7Ci0rICBpZiAoeSAhPSA2KQotKyAgICBhYm9ydCAo KTsKLSsgIGkgPSB2YV9hcmcgKGFwLCBpbnQpOwotKyAgaWYgKGkgIT0gNSkKLSsgICAgYWJvcnQg KCk7Ci0rICBzd2l0Y2ggKHgpCi0rICAgIHsKLSsgICAgY2FzZSAwOgotKyAgICAgIGkgPSB2YV9h cmcgKGFwLCBpbnQpOwotKyAgICAgIGlmIChpICE9IDkgfHwgdjEgIT0gOSkKLSsJYWJvcnQgKCk7 Ci0rICAgICAgYSA9IHZhX2FyZyAoYXAsIHN0cnVjdCBBKTsKLSsgICAgICBpZiAoX19idWlsdGlu X21lbWNtcCAoYS5jLCB2NC5jLCBzaXplb2YgKGEuYykpICE9IDApCi0rCWFib3J0ICgpOwotKyAg ICAgIHYgPSAodm9pZCAqKSB2YV9hcmcgKGFwLCBzdHJ1Y3QgQSAqKTsKLSsgICAgICBpZiAodiAh PSAodm9pZCAqKSAmdjQpCi0rCWFib3J0ICgpOwotKyAgICAgIGwgPSB2YV9hcmcgKGFwLCBsb25n IGludCk7Ci0rICAgICAgaWYgKGwgIT0gMyB8fCB2MiAhPSA0KQotKwlhYm9ydCAoKTsKLSsgICAg ICBicmVhazsKLSsgICAgY2FzZSAxOgotKyAgICAgIGxkID0gdmFfYXJnIChhcCwgbG9uZyBkb3Vi bGUpOwotKyAgICAgIGlmIChsZCAhPSA0MSB8fCB2NSAhPSBsZCkKLSsJYWJvcnQgKCk7Ci0rICAg ICAgaSA9IHZhX2FyZyAoYXAsIGludCk7Ci0rICAgICAgaWYgKGkgIT0gOCkKLSsJYWJvcnQgKCk7 Ci0rICAgICAgdiA9IHZhX2FyZyAoYXAsIHZvaWQgKik7Ci0rICAgICAgaWYgKHYgIT0gJnYyKQot KwlhYm9ydCAoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAyOgotKyAgICAgIGJyZWFrOwot KyAgICBkZWZhdWx0OgotKyAgICAgIGFib3J0ICgpOwotKyAgICB9Ci0rICB2YV9lbmQgKGFwKTsK LSsgIHJldHVybiB4OwotK30KLSsKLStfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKSBpbnQKLStm b28yIChpbnQgeCwgaW50IHksIC4uLikKLSt7Ci0rICBsb25nIGxvbmcgaW50IGxsOwotKyAgdm9p ZCAqdjsKLSsgIHN0cnVjdCBBIGEsIGI7Ci0rICBsb25nIGRvdWJsZSBsZDsKLSsgIHZhX2xpc3Qg YXA7Ci0rCi0rICB2YV9zdGFydCAoYXAsIHkpOwotKyAgaWYgKHggPCAwIHx8IHggPj0gMjAgfHwg c2Vlblt4XSkKLSsgICAgYWJvcnQgKCk7Ci0rICBzZWVuW3hdID0gKytjbnQgfCA2NDsKLSsgIGlm ICh5ICE9IDEwKQotKyAgICBhYm9ydCAoKTsKLSsgIHN3aXRjaCAoeCkKLSsgICAgewotKyAgICBj YXNlIDExOgotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDEyOgotKyAgICAgIGxkID0gdmFfYXJn IChhcCwgbG9uZyBkb3VibGUpOwotKyAgICAgIGlmIChsZCAhPSA0MSB8fCB2NSAhPSA0MCkKLSsJ YWJvcnQgKCk7Ci0rICAgICAgYSA9IHZhX2FyZyAoYXAsIHN0cnVjdCBBKTsKLSsgICAgICBpZiAo X19idWlsdGluX21lbWNtcCAoYS5jLCB2NC5jLCBzaXplb2YgKGEuYykpICE9IDApCi0rCWFib3J0 ICgpOwotKyAgICAgIGIgPSB2YV9hcmcgKGFwLCBzdHJ1Y3QgQSk7Ci0rICAgICAgaWYgKF9fYnVp bHRpbl9tZW1jbXAgKGIuYywgdjQuYywgc2l6ZW9mIChiLmMpKSAhPSAwKQotKwlhYm9ydCAoKTsK LSsgICAgICB2ID0gdmFfYXJnIChhcCwgdm9pZCAqKTsKLSsgICAgICBpZiAodiAhPSAmdjIpCi0r CWFib3J0ICgpOwotKyAgICAgIGxsID0gdmFfYXJnIChhcCwgbG9uZyBsb25nIGludCk7Ci0rICAg ICAgaWYgKGxsICE9IDE2TEwpCi0rCWFib3J0ICgpOwotKyAgICAgIGJyZWFrOwotKyAgICBjYXNl IDI6Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAgYWJvcnQgKCk7Ci0rICAg IH0KLSsgIHZhX2VuZCAoYXApOwotKyAgcmV0dXJuIHggKyA4OwotK30KLSsKLStfX2F0dHJpYnV0 ZV9fICgobm9pbmxpbmUpKSBpbnQKLStmb28zICh2b2lkKQotK3sKLSsgIHJldHVybiA2OwotK30K LSsKLStleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lLCBnbnVfaW5s aW5lKSkgaW50Ci0rYmFyIChpbnQgeCwgLi4uKQotK3sKLSsgIGlmICh4IDwgMTApCi0rICAgIHJl dHVybiBmb28xICh4LCBmb28zICgpLCA1LCBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwotKyAg cmV0dXJuIGZvbzIgKHgsIGZvbzMgKCkgKyA0LCBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwot K30KLSsKLStpbnQKLSttYWluICh2b2lkKQotK3sKLSsgIGlmIChiYXIgKDAsICsrdjEsIHY0LCAm djQsIHYyKyspICE9IDApCi0rICAgIGFib3J0ICgpOwotKyAgaWYgKGJhciAoMSwgKyt2NSwgOCwg djMpICE9IDEpCi0rICAgIGFib3J0ICgpOwotKyAgaWYgKGJhciAoMikgIT0gMikKLSsgICAgYWJv cnQgKCk7Ci0rICBpZiAoYmFyICh2MSArIDIpICE9IDE5KQotKyAgICBhYm9ydCAoKTsKLSsgIGlm IChiYXIgKHYxICsgMywgdjUtLSwgdjQsIHY0LCB2MywgMTZMTCkgIT0gMjApCi0rICAgIGFib3J0 ICgpOwotKyAgcmV0dXJuIDA7Ci0rfQotLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZhLWFyZy1w YWNrLTEuYy5qagkyMDA3LTA5LTA2IDEwOjE5OjI1LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3ZhLWFyZy1wYWNrLTEuYwkyMDA3LTA5LTA2IDEyOjUyOjAwLjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSw0NiBAQAotKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0r LyogeyBkZy1vcHRpb25zICItTzIiIH0gKi8KLSsKLStpbnQgYmFyIChpbnQsIGNvbnN0IGNoYXIg KiwgaW50LCAuLi4pOwotK2ludCBiYXogKGludCwgY29uc3QgY2hhciAqLCBsb25nIGludCk7Ci0r Ci0rZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW50Ci0rZjIg KGludCB5LCAuLi4pCi0rewotKyAgcmV0dXJuIGJhciAoeSwgIiIsIF9fYnVpbHRpbl92YV9hcmdf cGFjayAoKSk7CQkvKiB7IGRnLWVycm9yICJpbnZhbGlkIHVzZSBvZiIgfSAqLwotK30KLSsKLStl eHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQKLStmMyAoaW50 IHksIC4uLikKLSt7Ci0rICByZXR1cm4gYmFyICh5LCAiIiwgNSwgX19idWlsdGluX3ZhX2FyZ19w YWNrICgpKTsKLSt9Ci0rCi0rZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5s aW5lKSkgaW50Ci0rZjQgKGludCB5LCAuLi4pCi0rewotKyAgcmV0dXJuIGJhciAoeSwgIiIsIDQs IF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSwgNik7CS8qIHsgZGctZXJyb3IgImludmFsaWQgdXNl IG9mIiB9ICovCi0rfQotKwotK2V4dGVybiBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lu bGluZSkpIGludAotK2Y1IChpbnQgeSwgLi4uKQotK3sKLSsgIHJldHVybiBiYXogKHksICIiLCBf X2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwkJLyogeyBkZy1lcnJvciAiaW52YWxpZCB1c2Ugb2Yi IH0gKi8KLSt9Ci0rCi0rZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5l KSkgaW50Ci0rZjYgKGludCB5LCAuLi4pCi0rewotKyAgcmV0dXJuIF9fYnVpbHRpbl92YV9hcmdf cGFjayAoKTsJCQkvKiB7IGRnLWVycm9yICJpbnZhbGlkIHVzZSBvZiIgfSAqLwotK30KLSsKLStp bnQKLSt0ZXN0ICh2b2lkKQotK3sKLSsgIGludCBhID0gZjIgKDUsICJhIiwgNik7Ci0rICBhICs9 IGYzICg2LCAiYWIiLCAxN0xMKTsKLSsgIGEgKz0gZjQgKDcsIDEsIDIsIDMpOwotKyAgYSArPSBm NSAoOCwgN0wpOwotKyAgYSArPSBmNiAoOSk7Ci0rICByZXR1cm4gYTsKLSt9Ci0tLS0gZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvdmEtYXJnLXBhY2stMWEuYy5qagkyMDA3LTA5LTA2IDEyOjUxOjUxLjAw MDAwMDAwMCArMDIwMAotKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ZhLWFyZy1wYWNrLTFhLmMJ MjAwNy0wOS0wNiAxMjo1MjowOS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMTEgQEAKLSsv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotKy8qIHsgZGctb3B0aW9ucyAiLU8yIiB9ICovCi0rCi0r aW50IGJhciAoaW50LCBjb25zdCBjaGFyICosIGludCwgLi4uKTsKLStpbnQgYmF6IChpbnQsIGNv bnN0IGNoYXIgKiwgbG9uZyBpbnQpOwotKwotK2ludAotK2YxIChpbnQgeCwgLi4uKQotK3sKLSsg IHJldHVybiBiYXIgKDUsICIiLCA2LCBfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwkvKiB7IGRn LWVycm9yICJpbnZhbGlkIHVzZSBvZiIgfSAqLwotK30KLS0tLSBnY2MvdGVzdHN1aXRlL2crKy5k Zy9leHQvdmEtYXJnLXBhY2stMS5DLmpqCTIwMDctMDktMDcgMDg6NTI6NTUuMDAwMDAwMDAwICsw MjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L3ZhLWFyZy1wYWNrLTEuQwkyMDA3LTA5 LTA3IDA4OjUzOjQ1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxNDUgQEAKLSsvLyBfX2J1 aWx0aW5fdmFfYXJnX3BhY2sgKCkgYnVpbHRpbiB0ZXN0cy4KLSsvLyB7IGRnLWRvIHJ1biB9Ci0r Ly8geyBkZy1vcHRpb25zICItTzIiIH0KLSsKLSsjaW5jbHVkZSA8c3RkYXJnLmg+Ci0rCi0rZXh0 ZXJuICJDIiB2b2lkIGFib3J0ICh2b2lkKTsKLSsKLStpbnQgdjEgPSA4OwotK2xvbmcgaW50IHYy ID0gMzsKLSt2b2lkICp2MyA9ICh2b2lkICopICZ2MjsKLStzdHJ1Y3QgQSB7IGNoYXIgY1sxNl07 IH0gdjQgPSB7ICJmb28iIH07Ci0rbG9uZyBkb3VibGUgdjUgPSA0MDsKLStjaGFyIHNlZW5bMjBd OwotK2ludCBjbnQ7Ci0rCi0rX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkgaW50Ci0rZm9vMSAo aW50IHgsIGludCB5LCAuLi4pCi0rewotKyAgaW50IGk7Ci0rICBsb25nIGludCBsOwotKyAgdm9p ZCAqdjsKLSsgIHN0cnVjdCBBIGE7Ci0rICBsb25nIGRvdWJsZSBsZDsKLSsgIHZhX2xpc3QgYXA7 Ci0rCi0rICB2YV9zdGFydCAoYXAsIHkpOwotKyAgaWYgKHggPCAwIHx8IHggPj0gMjAgfHwgc2Vl blt4XSkKLSsgICAgYWJvcnQgKCk7Ci0rICBzZWVuW3hdID0gKytjbnQ7Ci0rICBpZiAoeSAhPSA2 KQotKyAgICBhYm9ydCAoKTsKLSsgIGkgPSB2YV9hcmcgKGFwLCBpbnQpOwotKyAgaWYgKGkgIT0g NSkKLSsgICAgYWJvcnQgKCk7Ci0rICBzd2l0Y2ggKHgpCi0rICAgIHsKLSsgICAgY2FzZSAwOgot KyAgICAgIGkgPSB2YV9hcmcgKGFwLCBpbnQpOwotKyAgICAgIGlmIChpICE9IDkgfHwgdjEgIT0g OSkKLSsJYWJvcnQgKCk7Ci0rICAgICAgYSA9IHZhX2FyZyAoYXAsIHN0cnVjdCBBKTsKLSsgICAg ICBpZiAoX19idWlsdGluX21lbWNtcCAoYS5jLCB2NC5jLCBzaXplb2YgKGEuYykpICE9IDApCi0r CWFib3J0ICgpOwotKyAgICAgIHYgPSAodm9pZCAqKSB2YV9hcmcgKGFwLCBzdHJ1Y3QgQSAqKTsK LSsgICAgICBpZiAodiAhPSAodm9pZCAqKSAmdjQpCi0rCWFib3J0ICgpOwotKyAgICAgIGwgPSB2 YV9hcmcgKGFwLCBsb25nIGludCk7Ci0rICAgICAgaWYgKGwgIT0gMyB8fCB2MiAhPSA0KQotKwlh Ym9ydCAoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAxOgotKyAgICAgIGxkID0gdmFfYXJn IChhcCwgbG9uZyBkb3VibGUpOwotKyAgICAgIGlmIChsZCAhPSA0MSB8fCB2NSAhPSBsZCkKLSsJ YWJvcnQgKCk7Ci0rICAgICAgaSA9IHZhX2FyZyAoYXAsIGludCk7Ci0rICAgICAgaWYgKGkgIT0g OCkKLSsJYWJvcnQgKCk7Ci0rICAgICAgdiA9IHZhX2FyZyAoYXAsIHZvaWQgKik7Ci0rICAgICAg aWYgKHYgIT0gJnYyKQotKwlhYm9ydCAoKTsKLSsgICAgICBicmVhazsKLSsgICAgY2FzZSAyOgot KyAgICAgIGJyZWFrOwotKyAgICBkZWZhdWx0OgotKyAgICAgIGFib3J0ICgpOwotKyAgICB9Ci0r ICB2YV9lbmQgKGFwKTsKLSsgIHJldHVybiB4OwotK30KLSsKLStfX2F0dHJpYnV0ZV9fICgobm9p bmxpbmUpKSBpbnQKLStmb28yIChpbnQgeCwgaW50IHksIC4uLikKLSt7Ci0rICBsb25nIGxvbmcg aW50IGxsOwotKyAgdm9pZCAqdjsKLSsgIHN0cnVjdCBBIGEsIGI7Ci0rICBsb25nIGRvdWJsZSBs ZDsKLSsgIHZhX2xpc3QgYXA7Ci0rCi0rICB2YV9zdGFydCAoYXAsIHkpOwotKyAgaWYgKHggPCAw IHx8IHggPj0gMjAgfHwgc2Vlblt4XSkKLSsgICAgYWJvcnQgKCk7Ci0rICBzZWVuW3hdID0gKytj bnQgfCA2NDsKLSsgIGlmICh5ICE9IDEwKQotKyAgICBhYm9ydCAoKTsKLSsgIHN3aXRjaCAoeCkK LSsgICAgewotKyAgICBjYXNlIDExOgotKyAgICAgIGJyZWFrOwotKyAgICBjYXNlIDEyOgotKyAg ICAgIGxkID0gdmFfYXJnIChhcCwgbG9uZyBkb3VibGUpOwotKyAgICAgIGlmIChsZCAhPSA0MSB8 fCB2NSAhPSA0MCkKLSsJYWJvcnQgKCk7Ci0rICAgICAgYSA9IHZhX2FyZyAoYXAsIHN0cnVjdCBB KTsKLSsgICAgICBpZiAoX19idWlsdGluX21lbWNtcCAoYS5jLCB2NC5jLCBzaXplb2YgKGEuYykp ICE9IDApCi0rCWFib3J0ICgpOwotKyAgICAgIGIgPSB2YV9hcmcgKGFwLCBzdHJ1Y3QgQSk7Ci0r ICAgICAgaWYgKF9fYnVpbHRpbl9tZW1jbXAgKGIuYywgdjQuYywgc2l6ZW9mIChiLmMpKSAhPSAw KQotKwlhYm9ydCAoKTsKLSsgICAgICB2ID0gdmFfYXJnIChhcCwgdm9pZCAqKTsKLSsgICAgICBp ZiAodiAhPSAmdjIpCi0rCWFib3J0ICgpOwotKyAgICAgIGxsID0gdmFfYXJnIChhcCwgbG9uZyBs b25nIGludCk7Ci0rICAgICAgaWYgKGxsICE9IDE2TEwpCi0rCWFib3J0ICgpOwotKyAgICAgIGJy ZWFrOwotKyAgICBjYXNlIDI6Ci0rICAgICAgYnJlYWs7Ci0rICAgIGRlZmF1bHQ6Ci0rICAgICAg YWJvcnQgKCk7Ci0rICAgIH0KLSsgIHZhX2VuZCAoYXApOwotKyAgcmV0dXJuIHggKyA4OwotK30K LSsKLStfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKSBpbnQKLStmb28zICh2b2lkKQotK3sKLSsg IHJldHVybiA2OwotK30KLSsKLStleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNf aW5saW5lLCBnbnVfaW5saW5lKSkgaW50Ci0rYmFyIChpbnQgeCwgLi4uKQotK3sKLSsgIGlmICh4 IDwgMTApCi0rICAgIHJldHVybiBmb28xICh4LCBmb28zICgpLCA1LCBfX2J1aWx0aW5fdmFfYXJn X3BhY2sgKCkpOwotKyAgcmV0dXJuIGZvbzIgKHgsIGZvbzMgKCkgKyA0LCBfX2J1aWx0aW5fdmFf YXJnX3BhY2sgKCkpOwotK30KLSsKLStpbnQKLSttYWluICh2b2lkKQotK3sKLSsgIGlmIChiYXIg KDAsICsrdjEsIHY0LCAmdjQsIHYyKyspICE9IDApCi0rICAgIGFib3J0ICgpOwotKyAgaWYgKGJh ciAoMSwgKyt2NSwgOCwgdjMpICE9IDEpCi0rICAgIGFib3J0ICgpOwotKyAgaWYgKGJhciAoMikg IT0gMikKLSsgICAgYWJvcnQgKCk7Ci0rICBpZiAoYmFyICh2MSArIDIpICE9IDE5KQotKyAgICBh Ym9ydCAoKTsKLSsgIGlmIChiYXIgKHYxICsgMywgdjUtLSwgdjQsIHY0LCB2MywgMTZMTCkgIT0g MjApCi0rICAgIGFib3J0ICgpOwotKyAgcmV0dXJuIDA7Ci0rfQotLS0tIGdjYy90ZXN0c3VpdGUv ZysrLmRnL2V4dC92YS1hcmctcGFjay0yLkMuamoJMjAwNy0wOS0wNyAwODo1MzoyMy4wMDAwMDAw MDAgKzAyMDAKLSsrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9leHQvdmEtYXJnLXBhY2stMi5DCTIw MDctMDktMDcgMDg6NTQ6MjUuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDQ2IEBACi0rLy8g eyBkZy1kbyBjb21waWxlIH0KLSsvLyB7IGRnLW9wdGlvbnMgIi1PMiIgfQotKwotK2ludCBiYXIg KGludCwgY29uc3QgY2hhciAqLCBpbnQsIC4uLik7Ci0raW50IGJheiAoaW50LCBjb25zdCBjaGFy ICosIGxvbmcgaW50KTsKLSsKLStleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19p bmxpbmUpKSBpbnQKLStmMiAoaW50IHksIC4uLikKLSt7Ci0rICByZXR1cm4gYmFyICh5LCAiIiwg X19idWlsdGluX3ZhX2FyZ19wYWNrICgpKTsJCS8qIHsgZGctZXJyb3IgImludmFsaWQgdXNlIG9m IiB9ICovCi0rfQotKwotK2V4dGVybiBpbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu ZSkpIGludAotK2YzIChpbnQgeSwgLi4uKQotK3sKLSsgIHJldHVybiBiYXIgKHksICIiLCA1LCBf X2J1aWx0aW5fdmFfYXJnX3BhY2sgKCkpOwotK30KLSsKLStleHRlcm4gaW5saW5lIF9fYXR0cmli dXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQKLStmNCAoaW50IHksIC4uLikKLSt7Ci0rICByZXR1 cm4gYmFyICh5LCAiIiwgNCwgX19idWlsdGluX3ZhX2FyZ19wYWNrICgpLCA2KTsJLyogeyBkZy1l cnJvciAiaW52YWxpZCB1c2Ugb2YiIH0gKi8KLSt9Ci0rCi0rZXh0ZXJuIGlubGluZSBfX2F0dHJp YnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW50Ci0rZjUgKGludCB5LCAuLi4pCi0rewotKyAgcmV0 dXJuIGJheiAoeSwgIiIsIF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSk7CQkvKiB7IGRnLWVycm9y ICJpbnZhbGlkIHVzZSBvZiIgfSAqLwotK30KLSsKLStleHRlcm4gaW5saW5lIF9fYXR0cmlidXRl X18oKGFsd2F5c19pbmxpbmUpKSBpbnQKLStmNiAoaW50IHksIC4uLikKLSt7Ci0rICByZXR1cm4g X19idWlsdGluX3ZhX2FyZ19wYWNrICgpOwkJCS8qIHsgZGctZXJyb3IgImludmFsaWQgdXNlIG9m IiB9ICovCi0rfQotKwotK2ludAotK3Rlc3QgKHZvaWQpCi0rewotKyAgaW50IGEgPSBmMiAoNSwg ImEiLCA2KTsKLSsgIGEgKz0gZjMgKDYsICJhYiIsIDE3TEwpOwotKyAgYSArPSBmNCAoNywgMSwg MiwgMyk7Ci0rICBhICs9IGY1ICg4LCA3TCk7Ci0rICBhICs9IGY2ICg5KTsKLSsgIHJldHVybiBh OwotK30KCmRpZmYgLS1naXQgYS9nY2M0MS1jKystZ251X2lubGluZS5wYXRjaCBiL2djYzQxLWMr Ky1nbnVfaW5saW5lLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTc1YTNk Li4wMDAwMDAwCi0tLSBhL2djYzQxLWMrKy1nbnVfaW5saW5lLnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsNjA4ICswLDAgQEAKLTIwMDctMDgtMzEgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRo YXQuY29tPgotCi0JKiBjcC10cmVlLmggKGNwX2Rpc3JlZ2FyZF9pbmxpbmVfbGltaXRzKTogTmV3 IHByb3RvdHlwZS4KLQkqIGRlY2wuYyAoY3BfZGlzcmVnYXJkX2lubGluZV9saW1pdHMpOiBOZXcg ZnVuY3Rpb24uCi0JKiBjcC1vYmpjcC1jb21tb24uaAotCShMQU5HX0hPT0tTX1RSRUVfSU5MSU5J TkdfRElTUkVHQVJEX0lOTElORV9MSU1JVFMpOiBEZWZpbmUuCi0KLTIwMDctMDgtMzAgIEpha3Vi IEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgotCi0JKiBnY2MuZGcvaW5saW5lLTI0LmM6IE5l dyB0ZXN0LgotCSogZysrLmRnL29wdC9pbmxpbmUxMS5DOiBOZXcgdGVzdC4KLQotMjAwNy0wOC0y NyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+Ci0KLQkqIGRvYy9leHRlbmQu dGV4aSAoZ251X2lubGluZSBmdW50aW9uIGF0dHJpYnV0ZSk6IERvY3VtZW50IEMrKwotCWJlaGF2 aW9yLgotCi0JKiBkZWNsLmMgKEdOVV9JTkxJTkVfUCk6IE5ldy4KLQkoZHVwbGljYXRlX2RlY2xz KTogSGFuZGxlIGdudV9pbmxpbmUuICBNZXJnZSBhdHRyaWJ1dGVzIGFuZAotCXNvbWUgZmxhZ3Mg aW4gb3ZlcnJpZGluZyBkZWZpbml0aW9ucy4KLQkocmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdl KTogSGFuZGxlIGdudV9pbmxpbmUuCi0JKHN0YXJ0X3ByZXBhcnNlZF9mdW5jdGlvbik6IExpa2V3 aXNlLgotCi0JKiBnKysuZGcvZXh0L2dudS1pbmxpbmUtY29tbW9uLmg6IE5ldy4KLQkqIGcrKy5k Zy9leHQvZ251LWlubGluZS1nbG9iYWwtcmVqZWN0LkM6IE5ldy4KLQkqIGcrKy5kZy9leHQvZ251 LWlubGluZS1nbG9iYWwuQzogTmV3LgotCSogZysrLmRnL2V4dC9nbnUtaW5saW5lLW5hbWVzcGFj ZS5DOiBOZXcuCi0JKiBnKysuZGcvZXh0L2dudS1pbmxpbmUtYW5vbi1uYW1lc3BhY2UuQzogTmV3 LgotCSogZysrLmRnL2V4dC9nbnUtaW5saW5lLWNsYXNzLkM6IE5ldy4KLQkqIGcrKy5kZy9leHQv Z251LWlubGluZS1jbGFzcy1zdGF0aWMuQzogTmV3LgotCSogZysrLmRnL2V4dC9nbnUtaW5saW5l LXRlbXBsYXRlLWNsYXNzLkM6IE5ldy4KLQkqIGcrKy5kZy9leHQvZ251LWlubGluZS10ZW1wbGF0 ZS1mdW5jLkM6IE5ldy4KLQotLS0tIGdjYy9jcC9jcC10cmVlLmguamoJMjAwNy0wOC0zMSAwOTo0 Nzo0My4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvY3AvY3AtdHJlZS5oCTIwMDctMDgtMzEgMTQ6 MDk6MDguMDAwMDAwMDAwICswMjAwCi1AQCAtNDQxNyw2ICs0NDE3LDcgQEAgZXh0ZXJuIGxpbmth Z2Vfa2luZCBkZWNsX2xpbmthZ2UJCSh0cmVlKQotIGV4dGVybiB0cmVlIGNwX3dhbGtfc3VidHJl ZXMgKHRyZWUqLCBpbnQqLCB3YWxrX3RyZWVfZm4sCi0gCQkJICAgICAgdm9pZCosIHN0cnVjdCBw b2ludGVyX3NldF90Kik7Ci0gZXh0ZXJuIGludCBjcF9jYW5ub3RfaW5saW5lX3RyZWVfZm4JCSh0 cmVlKik7Ci0rZXh0ZXJuIGludCBjcF9kaXNyZWdhcmRfaW5saW5lX2xpbWl0cwkJKHRyZWUpOwot IGV4dGVybiB0cmVlIGNwX2FkZF9wZW5kaW5nX2ZuX2RlY2xzCQkodm9pZCosdHJlZSk7Ci0gZXh0 ZXJuIGludCBjcF9hdXRvX3Zhcl9pbl9mbl9wCQkJKHRyZWUsdHJlZSk7Ci0gZXh0ZXJuIHRyZWUg Zm9sZF9pZl9ub3RfaW5fdGVtcGxhdGUJCSh0cmVlKTsKLS0tLSBnY2MvY3AvZGVjbC5jLmpqCTIw MDctMDgtMzEgMDk6NDc6NDMuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL2NwL2RlY2wuYwkyMDA3 LTA4LTMxIDE0OjI3OjEyLjAwMDAwMDAwMCArMDIwMAotQEAgLTEwOTcsNiArMTA5NywxMCBAQCBj aGVja19yZWRlY2xhcmF0aW9uX2V4Y2VwdGlvbl9zcGVjaWZpY2F0Ci0gICAgIH0KLSB9Ci0gCi0r I2RlZmluZSBHTlVfSU5MSU5FX1AoZm4pIChERUNMX0RFQ0xBUkVEX0lOTElORV9QIChmbikJCQlc Ci0rCQkJICAmJiBsb29rdXBfYXR0cmlidXRlICgiZ251X2lubGluZSIsCQlcCi0rCQkJCQkgICAg ICAgREVDTF9BVFRSSUJVVEVTIChmbikpKQotKwotIC8qIElmIE5FV0RFQ0wgaXMgYSByZWRlY2xh cmF0aW9uIG9mIE9MRERFQ0wsIG1lcmdlIHRoZSBkZWNsYXJhdGlvbnMuCi0gICAgSWYgdGhlIHJl ZGVjbGFyYXRpb24gaXMgaW52YWxpZCwgYSBkaWFnbm9zdGljIGlzIGlzc3VlZCwgYW5kIHRoZQot ICAgIGVycm9yX21hcmtfbm9kZSBpcyByZXR1cm5lZC4gIE90aGVyd2lzZSwgT0xEREVDTCBpcyBy ZXR1cm5lZC4KLUBAIC0xNjI2LDE5ICsxNjMwLDQ1IEBAIGR1cGxpY2F0ZV9kZWNscyAodHJlZSBu ZXdkZWNsLCB0cmVlIG9sZGQKLSAJPSBjaGFpbm9uIChERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFU SU9OUyAob2xkZGVjbCksCi0gCQkgICBERUNMX1RFTVBMQVRFX1NQRUNJQUxJWkFUSU9OUyAobmV3 ZGVjbCkpOwotIAotKyAgICAgIERFQ0xfQVRUUklCVVRFUyAob2xkX3Jlc3VsdCkKLSsJPSAoKnRh cmdldG0ubWVyZ2VfZGVjbF9hdHRyaWJ1dGVzKSAob2xkX3Jlc3VsdCwgbmV3X3Jlc3VsdCk7Ci0r Ci0gICAgICAgaWYgKERFQ0xfRlVOQ1RJT05fVEVNUExBVEVfUCAobmV3ZGVjbCkpCi0gCXsKLS0J ICBERUNMX0lOTElORSAob2xkX3Jlc3VsdCkKLS0JICAgIHw9IERFQ0xfSU5MSU5FIChuZXdfcmVz dWx0KTsKLS0JICBERUNMX0RFQ0xBUkVEX0lOTElORV9QIChvbGRfcmVzdWx0KQotLQkgICAgfD0g REVDTF9ERUNMQVJFRF9JTkxJTkVfUCAobmV3X3Jlc3VsdCk7Ci0tCSAgY2hlY2tfcmVkZWNsYXJh dGlvbl9leGNlcHRpb25fc3BlY2lmaWNhdGlvbiAobmV3ZGVjbCwgb2xkZGVjbCk7Ci0rCSAgaWYg KEdOVV9JTkxJTkVfUCAob2xkX3Jlc3VsdCkgIT0gR05VX0lOTElORV9QIChuZXdfcmVzdWx0KQot KwkgICAgICAmJiBERUNMX0lOSVRJQUwgKG5ld19yZXN1bHQpKQotKwkgICAgewotKwkgICAgICBp ZiAoREVDTF9JTklUSUFMIChvbGRfcmVzdWx0KSkKLSsJCXsKLSsJCSAgREVDTF9JTkxJTkUgKG9s ZF9yZXN1bHQpID0gMDsKLSsJCSAgREVDTF9VTklOTElOQUJMRSAob2xkX3Jlc3VsdCkgPSAxOwot KwkJfQotKwkgICAgICBlbHNlCi0rCQl7Ci0rCQkgIERFQ0xfSU5MSU5FIChvbGRfcmVzdWx0KSA9 IERFQ0xfSU5MSU5FIChuZXdfcmVzdWx0KTsKLSsJCSAgREVDTF9VTklOTElOQUJMRSAob2xkX3Jl c3VsdCkgPSBERUNMX1VOSU5MSU5BQkxFIChuZXdfcmVzdWx0KTsKLSsJCX0KLSsJICAgICAgREVD TF9FWFRFUk5BTCAob2xkX3Jlc3VsdCkgPSBERUNMX0VYVEVSTkFMIChuZXdfcmVzdWx0KTsKLSsJ ICAgICAgREVDTF9OT1RfUkVBTExZX0VYVEVSTiAob2xkX3Jlc3VsdCkKLSsJCT0gREVDTF9OT1Rf UkVBTExZX0VYVEVSTiAobmV3X3Jlc3VsdCk7Ci0rCSAgICAgIERFQ0xfSU5URVJGQUNFX0tOT1dO IChvbGRfcmVzdWx0KQotKwkJPSBERUNMX0lOVEVSRkFDRV9LTk9XTiAobmV3X3Jlc3VsdCk7Ci0r CSAgICAgIERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKG9sZF9yZXN1bHQpCi0rCQk9IERFQ0xfREVD TEFSRURfSU5MSU5FX1AgKG5ld19yZXN1bHQpOwotKwkgICAgfQotKwkgIGVsc2UKLSsJICAgIHsK LSsJICAgICAgREVDTF9JTkxJTkUgKG9sZF9yZXN1bHQpCi0rCQl8PSBERUNMX0lOTElORSAobmV3 X3Jlc3VsdCk7Ci0rCSAgICAgIERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKG9sZF9yZXN1bHQpCi0r CQl8PSBERUNMX0RFQ0xBUkVEX0lOTElORV9QIChuZXdfcmVzdWx0KTsKLSsJICAgICAgY2hlY2tf cmVkZWNsYXJhdGlvbl9leGNlcHRpb25fc3BlY2lmaWNhdGlvbiAobmV3ZGVjbCwgb2xkZGVjbCk7 Ci0rCSAgICB9Ci0gCX0KLSAKLSAgICAgICAvKiBJZiB0aGUgbmV3IGRlY2xhcmF0aW9uIGlzIGEg ZGVmaW5pdGlvbiwgdXBkYXRlIHRoZSBmaWxlIGFuZAotIAkgbGluZSBpbmZvcm1hdGlvbiBvbiB0 aGUgZGVjbGFyYXRpb24uICAqLwotLSAgICAgIGlmIChERUNMX0lOSVRJQUwgKG9sZF9yZXN1bHQp ID09IE5VTExfVFJFRQotLQkgICYmIERFQ0xfSU5JVElBTCAobmV3X3Jlc3VsdCkgIT0gTlVMTF9U UkVFKQotKyAgICAgIGlmIChERUNMX0lOSVRJQUwgKG5ld19yZXN1bHQpICE9IE5VTExfVFJFRSkK LSAJewotIAkgIERFQ0xfU09VUkNFX0xPQ0FUSU9OIChvbGRkZWNsKQotIAkgICAgPSBERUNMX1NP VVJDRV9MT0NBVElPTiAob2xkX3Jlc3VsdCkKLUBAIC0xNzk1LDkgKzE4MjUsMjkgQEAgZHVwbGlj YXRlX2RlY2xzICh0cmVlIG5ld2RlY2wsIHRyZWUgb2xkZAotICAgbmV3X3RlbXBsYXRlID0gTlVM TF9UUkVFOwotICAgaWYgKERFQ0xfTEFOR19TUEVDSUZJQyAobmV3ZGVjbCkgJiYgREVDTF9MQU5H X1NQRUNJRklDIChvbGRkZWNsKSkKLSAgICAgewotLSAgICAgIERFQ0xfSU5URVJGQUNFX0tOT1dO IChuZXdkZWNsKSB8PSBERUNMX0lOVEVSRkFDRV9LTk9XTiAob2xkZGVjbCk7Ci0tICAgICAgREVD TF9OT1RfUkVBTExZX0VYVEVSTiAobmV3ZGVjbCkgfD0gREVDTF9OT1RfUkVBTExZX0VYVEVSTiAo b2xkZGVjbCk7Ci0tICAgICAgREVDTF9DT01EQVQgKG5ld2RlY2wpIHw9IERFQ0xfQ09NREFUIChv bGRkZWNsKTsKLSsgICAgICBib29sIG9sZF9kZWNsX2dudV9pbmxpbmU7Ci0rCi0rICAgICAgaWYg KChERUNMX0lOVEVSRkFDRV9LTk9XTiAob2xkZGVjbCkKLSsJICAgJiYgVFJFRV9DT0RFIChvbGRk ZWNsKSA9PSBGVU5DVElPTl9ERUNMKQotKwkgIHx8IChUUkVFX0NPREUgKG9sZGRlY2wpID09IFRF TVBMQVRFX0RFQ0wKLSsJICAgICAgJiYgVFJFRV9DT0RFIChERUNMX1RFTVBMQVRFX1JFU1VMVCAo b2xkZGVjbCkpID09IEZVTkNUSU9OX0RFQ0wpKQotKwl7Ci0rCSAgdHJlZSBmbiA9IG9sZGRlY2w7 Ci0rCi0rCSAgaWYgKFRSRUVfQ09ERSAoZm4pID09IFRFTVBMQVRFX0RFQ0wpCi0rCSAgICBmbiA9 IERFQ0xfVEVNUExBVEVfUkVTVUxUIChvbGRkZWNsKTsKLSsKLSsJICBvbGRfZGVjbF9nbnVfaW5s aW5lID0gR05VX0lOTElORV9QIChmbikgJiYgREVDTF9JTklUSUFMIChmbik7Ci0rCX0KLSsgICAg ICBlbHNlCi0rCW9sZF9kZWNsX2dudV9pbmxpbmUgPSBmYWxzZTsKLSsKLSsgICAgICBpZiAoIW9s ZF9kZWNsX2dudV9pbmxpbmUpCi0rCXsKLSsJICBERUNMX0lOVEVSRkFDRV9LTk9XTiAobmV3ZGVj bCkgfD0gREVDTF9JTlRFUkZBQ0VfS05PV04gKG9sZGRlY2wpOwotKwkgIERFQ0xfTk9UX1JFQUxM WV9FWFRFUk4gKG5ld2RlY2wpIHw9IERFQ0xfTk9UX1JFQUxMWV9FWFRFUk4gKG9sZGRlY2wpOwot KwkgIERFQ0xfQ09NREFUIChuZXdkZWNsKSB8PSBERUNMX0NPTURBVCAob2xkZGVjbCk7Ci0rCX0K LSAgICAgICBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRFRCAobmV3ZGVjbCkKLSAJfD0gREVDTF9U RU1QTEFURV9JTlNUQU5USUFURUQgKG9sZGRlY2wpOwotIAotQEAgLTE4NzEsNiArMTkyMSwxMyBA QCBkdXBsaWNhdGVfZGVjbHMgKHRyZWUgbmV3ZGVjbCwgdHJlZSBvbGRkCi0gCSAgLyogW3RlbXAu ZXhwbC5zcGVjLzE0XSBXZSBkb24ndCBpbmxpbmUgZXhwbGljaXQgc3BlY2lhbGl6YXRpb24KLSAJ ICAgICBqdXN0IGJlY2F1c2UgdGhlIHByaW1hcnkgdGVtcGxhdGUgc2F5cyBzby4gICovCi0gCX0K LSsgICAgICBlbHNlIGlmIChuZXdfZGVmaW5lc19mdW5jdGlvbiAmJiBERUNMX0lOSVRJQUwgKG9s ZGRlY2wpKQotKwl7Ci0rCSAgLyogQysrIGlzIGFsd2F5cyBpbiBpbiB1bml0LWF0LWEtdGltZSBt b2RlLCBzbyB3ZSBuZXZlcgotKwkgICAgIGlubGluZSByZS1kZWZpbmVkIGV4dGVybiBpbmxpbmUg ZnVuY3Rpb25zLiAgKi8KLSsJICBERUNMX0lOTElORSAobmV3ZGVjbCkgPSAwOwotKwkgIERFQ0xf VU5JTkxJTkFCTEUgKG5ld2RlY2wpID0gMTsKLSsJfQotICAgICAgIGVsc2UKLSAJewotIAkgIGlm IChERUNMX1BFTkRJTkdfSU5MSU5FX0lORk8gKG5ld2RlY2wpID09IDApCi1AQCAtMjExMyw5ICsy MTcwLDI1IEBAIHJlZGVjbGFyYXRpb25fZXJyb3JfbWVzc2FnZSAodHJlZSBuZXdkZWMKLSAJewot IAkgIGlmIChERUNMX05BTUUgKG9sZGRlY2wpID09IE5VTExfVFJFRSkKLSAJICAgIHJldHVybiAi JXEjRCBub3QgZGVjbGFyZWQgaW4gY2xhc3MiOwotLQkgIGVsc2UKLSsJICBlbHNlIGlmICghR05V X0lOTElORV9QIChvbGRkZWNsKQotKwkJICAgfHwgR05VX0lOTElORV9QIChuZXdkZWNsKSkKLSAJ ICAgIHJldHVybiAicmVkZWZpbml0aW9uIG9mICVxI0QiOwotIAl9Ci0rCi0rICAgICAgaWYgKERF Q0xfREVDTEFSRURfSU5MSU5FX1AgKG9sZGRlY2wpICYmIERFQ0xfREVDTEFSRURfSU5MSU5FX1Ag KG5ld2RlY2wpKQotKwl7Ci0rCSAgYm9vbCBvbGRhID0gR05VX0lOTElORV9QIChvbGRkZWNsKTsK LSsJICBib29sIG5ld2EgPSBHTlVfSU5MSU5FX1AgKG5ld2RlY2wpOwotKwotKwkgIGlmIChvbGRh ICE9IG5ld2EpCi0rCSAgICB7Ci0rCSAgICAgIGlmIChuZXdhKQotKwkJcmV0dXJuICIlcStEIHJl ZGVjbGFyZWQgaW5saW5lIHdpdGggJTxnbnVfaW5saW5lJT4gYXR0cmlidXRlIjsKLSsJICAgICAg ZWxzZQotKwkJcmV0dXJuICIlcStEIHJlZGVjbGFyZWQgaW5saW5lIHdpdGhvdXQgJTxnbnVfaW5s aW5lJT4gYXR0cmlidXRlIjsKLSsJICAgIH0KLSsJfQotKwotICAgICAgIHJldHVybiAwOwotICAg ICB9Ci0gICBlbHNlIGlmIChUUkVFX0NPREUgKG5ld2RlY2wpID09IFRFTVBMQVRFX0RFQ0wpCi1A QCAtMjE0MSw5ICsyMjE0LDI0IEBAIHJlZGVjbGFyYXRpb25fZXJyb3JfbWVzc2FnZSAodHJlZSBu ZXdkZWMKLSAgICAgICBvdCA9IERFQ0xfVEVNUExBVEVfUkVTVUxUIChvbGRkZWNsKTsKLSAgICAg ICBpZiAoREVDTF9URU1QTEFURV9JTkZPIChvdCkpCi0gCW90ID0gREVDTF9URU1QTEFURV9SRVNV TFQgKHRlbXBsYXRlX2Zvcl9zdWJzdGl0dXRpb24gKG90KSk7Ci0tICAgICAgaWYgKERFQ0xfSU5J VElBTCAobnQpICYmIERFQ0xfSU5JVElBTCAob3QpKQotKyAgICAgIGlmIChERUNMX0lOSVRJQUwg KG50KSAmJiBERUNMX0lOSVRJQUwgKG90KQotKwkgICYmICghR05VX0lOTElORV9QIChvdCkgfHwg R05VX0lOTElORV9QIChudCkpKQotIAlyZXR1cm4gInJlZGVmaW5pdGlvbiBvZiAlcSNEIjsKLSAK LSsgICAgICBpZiAoREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAob3QpICYmIERFQ0xfREVDTEFSRURf SU5MSU5FX1AgKG50KSkKLSsJewotKwkgIGJvb2wgb2xkYSA9IEdOVV9JTkxJTkVfUCAob3QpOwot KwkgIGJvb2wgbmV3YSA9IEdOVV9JTkxJTkVfUCAobnQpOwotKwotKwkgIGlmIChvbGRhICE9IG5l d2EpCi0rCSAgICB7Ci0rCSAgICAgIGlmIChuZXdhKQotKwkJcmV0dXJuICIlcStEIHJlZGVjbGFy ZWQgaW5saW5lIHdpdGggJTxnbnVfaW5saW5lJT4gYXR0cmlidXRlIjsKLSsJICAgICAgZWxzZQot KwkJcmV0dXJuICIlcStEIHJlZGVjbGFyZWQgaW5saW5lIHdpdGhvdXQgJTxnbnVfaW5saW5lJT4g YXR0cmlidXRlIjsKLSsJICAgIH0KLSsJfQotKwotICAgICAgIHJldHVybiBOVUxMOwotICAgICB9 Ci0gICBlbHNlIGlmIChUUkVFX0NPREUgKG5ld2RlY2wpID09IFZBUl9ERUNMCi1AQCAtMTA0NDcs NiArMTA1MzUsMTQgQEAgc3RhcnRfcHJlcGFyc2VkX2Z1bmN0aW9uICh0cmVlIGRlY2wxLCB0cgot ICAgICAgICYmIGxvb2t1cF9hdHRyaWJ1dGUgKCJub2lubGluZSIsIGF0dHJzKSkKLSAgICAgd2Fy bmluZyAoMCwgImlubGluZSBmdW5jdGlvbiAlcStEIGdpdmVuIGF0dHJpYnV0ZSBub2lubGluZSIs IGRlY2wxKTsKLSAKLSsgIC8qIEhhbmRsZSBnbnVfaW5saW5lIGF0dHJpYnV0ZS4gICovCi0rICBp ZiAoR05VX0lOTElORV9QIChkZWNsMSkpCi0rICAgIHsKLSsgICAgICBERUNMX0VYVEVSTkFMIChk ZWNsMSkgPSAxOwotKyAgICAgIERFQ0xfTk9UX1JFQUxMWV9FWFRFUk4gKGRlY2wxKSA9IDA7Ci0r ICAgICAgREVDTF9JTlRFUkZBQ0VfS05PV04gKGRlY2wxKSA9IDE7Ci0rICAgIH0KLSsKLSAgIGlm IChERUNMX01BWUJFX0lOX0NIQVJHRV9DT05TVFJVQ1RPUl9QIChkZWNsMSkpCi0gICAgIC8qIFRo aXMgaXMgYSBjb25zdHJ1Y3Rvciwgd2UgbXVzdCBlbnN1cmUgdGhhdCBhbnkgZGVmYXVsdCBhcmdz Ci0gICAgICAgIGludHJvZHVjZWQgYnkgdGhpcyBkZWZpbml0aW9uIGFyZSBwcm9wYWdhdGVkIHRv IHRoZSBjbG9uZXMKLUBAIC0xMDcwMiw4ICsxMDc5OCw5IEBAIHN0YXJ0X3ByZXBhcnNlZF9mdW5j dGlvbiAodHJlZSBkZWNsMSwgdHIKLSAgIGVsc2UKLSAgICAgewotICAgICAgIC8qIFRoaXMgaXMg YSBkZWZpbml0aW9uLCBub3QgYSByZWZlcmVuY2UuCi0tCSBTbyBjbGVhciBERUNMX0VYVEVSTkFM LiAgKi8KLS0gICAgICBERUNMX0VYVEVSTkFMIChkZWNsMSkgPSAwOwotKwkgU28gY2xlYXIgREVD TF9FWFRFUk5BTCwgdW5sZXNzIHRoaXMgaXMgYSBHTlUgZXh0ZXJuIGlubGluZS4gICovCi0rICAg ICAgaWYgKCFHTlVfSU5MSU5FX1AgKGRlY2wxKSkKLSsJREVDTF9FWFRFUk5BTCAoZGVjbDEpID0g MDsKLSAKLSAgICAgICBpZiAoKERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKGRlY2wxKQotIAkgICB8 fCBERUNMX1RFTVBMQVRFX0lOU1RBTlRJQVRJT04gKGRlY2wxKSkKLUBAIC0xMTY5OCw0ICsxMTc5 NSwxNyBAQCBjeHhfY29tZGF0X2dyb3VwICh0cmVlIGRlY2wpCi0gICByZXR1cm4gSURFTlRJRklF Ul9QT0lOVEVSIChuYW1lKTsKLSB9Ci0gCi0rLyogV2Ugd2FudCB0byBpbmxpbmUgX19nbnVfaW5s aW5lX18gZnVuY3Rpb25zIGV2ZW4gaWYgdGhpcyB3b3VsZAotKyAgIHZpb2xhdGUgaW5saW5pbmcg bGltaXRzLiAgU29tZSBnbGliYyBhbmQgbGludXggY29uc3RydWN0cyBkZXBlbmQgb24KLSsgICBz dWNoIGZ1bmN0aW9ucyBhbHdheXMgYmVpbmcgaW5saW5lZCB3aGVuIG9wdGltaXppbmcuICAqLwot KwotK2ludAotK2NwX2Rpc3JlZ2FyZF9pbmxpbmVfbGltaXRzICh0cmVlIGZuKQotK3sKLSsgIGlm IChsb29rdXBfYXR0cmlidXRlICgiYWx3YXlzX2lubGluZSIsIERFQ0xfQVRUUklCVVRFUyAoZm4p KSAhPSBOVUxMKQotKyAgICByZXR1cm4gMTsKLSsKLSsgIHJldHVybiAoIWZsYWdfcmVhbGx5X25v X2lubGluZSAmJiBHTlVfSU5MSU5FX1AgKGZuKSk7Ci0rfQotKwotICNpbmNsdWRlICJndC1jcC1k ZWNsLmgiCi0tLS0gZ2NjL2NwL2NwLW9iamNwLWNvbW1vbi5oLmpqCTIwMDctMDItMjAgMjI6Mzc6 MzQuMDAwMDAwMDAwICswMTAwCi0rKysgZ2NjL2NwL2NwLW9iamNwLWNvbW1vbi5oCTIwMDctMDgt MzEgMTM6NTg6MzIuMDAwMDAwMDAwICswMjAwCi1AQCAtMTA3LDYgKzEwNyw5IEBAIGV4dGVybiB0 cmVlIG9iamNwX3RzdWJzdF9jb3B5X2FuZF9idWlsZCAKLSAjdW5kZWYgTEFOR19IT09LU19UUkVF X0lOTElOSU5HX0NBTk5PVF9JTkxJTkVfVFJFRV9GTgotICNkZWZpbmUgTEFOR19IT09LU19UUkVF X0lOTElOSU5HX0NBTk5PVF9JTkxJTkVfVFJFRV9GTiBcCi0gICBjcF9jYW5ub3RfaW5saW5lX3Ry ZWVfZm4KLSsjdW5kZWYgTEFOR19IT09LU19UUkVFX0lOTElOSU5HX0RJU1JFR0FSRF9JTkxJTkVf TElNSVRTCi0rI2RlZmluZSBMQU5HX0hPT0tTX1RSRUVfSU5MSU5JTkdfRElTUkVHQVJEX0lOTElO RV9MSU1JVFMgXAotKyAgY3BfZGlzcmVnYXJkX2lubGluZV9saW1pdHMKLSAjdW5kZWYgTEFOR19I T09LU19UUkVFX0lOTElOSU5HX0FERF9QRU5ESU5HX0ZOX0RFQ0xTCi0gI2RlZmluZSBMQU5HX0hP T0tTX1RSRUVfSU5MSU5JTkdfQUREX1BFTkRJTkdfRk5fREVDTFMgXAotICAgY3BfYWRkX3BlbmRp bmdfZm5fZGVjbHMKLS0tLSBnY2MvZG9jL2V4dGVuZC50ZXhpLmpqCTIwMDctMDgtMzEgMDk6NDc6 NDAuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL2RvYy9leHRlbmQudGV4aQkyMDA3LTA4LTMxIDEz OjAwOjI4LjAwMDAwMDAwMCArMDIwMAotQEAgLTE1ODcsOCArMTU4Nyw4IEBAIHJlZmVyIHRvIHRo ZSBzaW5nbGUgY29weSBpbiB0aGUgbGlicmFyeS4KLSBkZWZpbml0aW9ucyBvZiB0aGUgZnVuY3Rp b25zIG5lZWQgbm90IGJlIHByZWNpc2VseSB0aGUgc2FtZSwgYWx0aG91Z2gKLSBpZiB0aGV5IGRv IG5vdCBoYXZlIHRoZSBzYW1lIGVmZmVjdCB5b3VyIHByb2dyYW0gbWF5IGJlaGF2ZSBvZGRseS4K LSAKLS1JZiB0aGUgZnVuY3Rpb24gaXMgbmVpdGhlciBAY29kZXtleHRlcm59IG5vciBAY29kZXtz dGF0aWN9LCB0aGVuIHRoZQotLWZ1bmN0aW9uIGlzIGNvbXBpbGVkIGFzIGEgc3RhbmRhbG9uZSBm dW5jdGlvbiwgYXMgd2VsbCBhcyBiZWluZwotK0luIEMsIGlmIHRoZSBmdW5jdGlvbiBpcyBuZWl0 aGVyIEBjb2Rle2V4dGVybn0gbm9yIEBjb2Rle3N0YXRpY30sIHRoZW4KLSt0aGUgZnVuY3Rpb24g aXMgY29tcGlsZWQgYXMgYSBzdGFuZGFsb25lIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIGJlaW5nCi0g aW5saW5lZCB3aGVyZSBwb3NzaWJsZS4KLSAKLSBUaGlzIGlzIGhvdyBHQ0MgdHJhZGl0aW9uYWxs eSBoYW5kbGVkIGZ1bmN0aW9ucyBkZWNsYXJlZAotQEAgLTE2MDYsNiArMTYwNiwxMCBAQCBhc3N1 bWUgdGhhdCBpdCBpcyBhbHdheXMgcHJlc2VudCwgd2hldGhlCi0gSW4gdmVyc2lvbnMgcHJpb3Ig dG8gNC4zLCB0aGUgb25seSBlZmZlY3Qgb2YgZXhwbGljaXRseSBpbmNsdWRpbmcgaXQgaXMKLSB0 byBkaXNhYmxlIHdhcm5pbmdzIGFib3V0IHVzaW5nIGlubGluZSBmdW5jdGlvbnMgaW4gQzk5IG1v ZGUuCi0gCi0rSW4gQysrLCB0aGlzIGF0dHJpYnV0ZSBkb2VzIG5vdCBkZXBlbmQgb24gQGNvZGV7 ZXh0ZXJufSBpbiBhbnkgd2F5LAotK2J1dCBpdCBzdGlsbCByZXF1aXJlcyB0aGUgQGNvZGV7aW5s aW5lfSBrZXl3b3JkIHRvIGVuYWJsZSBpdHMgc3BlY2lhbAotK2JlaGF2aW9yLgotKwotIEBjaW5k ZXggQGNvZGV7ZmxhdHRlbn0gZnVuY3Rpb24gYXR0cmlidXRlCi0gQGl0ZW0gZmxhdHRlbgotIEdl bmVyYWxseSwgaW5saW5pbmcgaW50byBhIGZ1bmN0aW9uIGlzIGxpbWl0ZWQuICBGb3IgYSBmdW5j dGlvbiBtYXJrZWQgd2l0aAotLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2lubGluZS0yNC5jLmpq CTIwMDctMDgtMzEgMTQ6MTE6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvaW5saW5lLTI0LmMJMjAwNy0wOC0zMCAxODo0Mzo1NS4wMDAwMDAwMDAgKzAyMDAKLUBA IC0wLDAgKzEsMjggQEAKLSsvKiBWZXJpZnkgdGhhdCBnbnVfaW5saW5lIGlubGluZXMgZGlzcmVn YXJkIGlubGluaW5nIGxpbWl0cy4gICovCi0rLyogeyBkZy1kbyBsaW5rIH0gKi8KLSsvKiB7IGRn LW9wdGlvbnMgIi1PMiIgfSAqLwotKwotK2V4dGVybiBpbnQgZm9vIChpbnQpOwotK2V4dGVybiBp bnQgYmF6IChpbnQpOwotKwotK2V4dGVybiBpbmxpbmUgX19hdHRyaWJ1dGVfXygoZ251X2lubGlu ZSkpCi0raW50IGZvbyAoaW50IHgpCi0rewotKyAgaW50IGk7Ci0rICBpZiAoIV9fYnVpbHRpbl9j b25zdGFudF9wICh4KSkKLSsgICAgewotKyNkZWZpbmUgQihuKSBiYXogKDEjI24pICsgYmF6ICgy IyNuKSArIGJheiAoMyMjbikgXAotKwkgICAgICsgYmF6ICg0IyNuKSArIGJheiAoNSMjbikgKyBi YXogKDYjI24pCi0rI2RlZmluZSBDKG4pIEIoMSMjbikgKyBCKDIjI24pICsgQigzIyNuKSArIEIo NCMjbikgKyBCKDUjI24pICsgQig2IyNuKQotKyNkZWZpbmUgRChuKSBDKDEjI24pICsgQygyIyNu KSArIEMoMyMjbikgKyBDKDQjI24pICsgQyg1IyNuKSArIEMoNiMjbikKLSsgICAgICByZXR1cm4g RCgwKSArIEQoMSkgKyBEKDIpICsgRCgzKSArIEQoNCkKLSsJICAgICArIEQoNSkgKyBEKDYpICsg RCg3KSArIEQoOCkgKyBEKDkpOwotKyAgICB9Ci0rICByZXR1cm4gMDsKLSt9Ci0rCi0raW50Ci0r bWFpbiAodm9pZCkKLSt7Ci0rICByZXR1cm4gZm9vICgwKTsKLSt9Ci0tLS0gZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvb3B0L2lubGluZTExLkMuamoJMjAwNy0wOC0zMSAxNDoxMjowNS4wMDAwMDAwMDAg KzAyMDAKLSsrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9vcHQvaW5saW5lMTEuQwkyMDA3LTA4LTMw IDE4OjQzOjU1LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwyOCBAQAotKy8qIFZlcmlmeSB0 aGF0IGdudV9pbmxpbmUgaW5saW5lcyBkaXNyZWdhcmQgaW5saW5pbmcgbGltaXRzLiAgKi8KLSsv KiB7IGRnLWRvIGxpbmsgfSAqLwotKy8qIHsgZGctb3B0aW9ucyAiLU8yIiB9ICovCi0rCi0rZXh0 ZXJuIGludCBmb28gKGludCk7Ci0rZXh0ZXJuIGludCBiYXogKGludCk7Ci0rCi0rZXh0ZXJuIGlu bGluZSBfX2F0dHJpYnV0ZV9fKChnbnVfaW5saW5lKSkKLStpbnQgZm9vIChpbnQgeCkKLSt7Ci0r ICBpbnQgaTsKLSsgIGlmICghX19idWlsdGluX2NvbnN0YW50X3AgKHgpKQotKyAgICB7Ci0rI2Rl ZmluZSBCKG4pIGJheiAoMSMjbikgKyBiYXogKDIjI24pICsgYmF6ICgzIyNuKSBcCi0rCSAgICAg KyBiYXogKDQjI24pICsgYmF6ICg1IyNuKSArIGJheiAoNiMjbikKLSsjZGVmaW5lIEMobikgQigx IyNuKSArIEIoMiMjbikgKyBCKDMjI24pICsgQig0IyNuKSArIEIoNSMjbikgKyBCKDYjI24pCi0r I2RlZmluZSBEKG4pIEMoMSMjbikgKyBDKDIjI24pICsgQygzIyNuKSArIEMoNCMjbikgKyBDKDUj I24pICsgQyg2IyNuKQotKyAgICAgIHJldHVybiBEKDApICsgRCgxKSArIEQoMikgKyBEKDMpICsg RCg0KQotKwkgICAgICsgRCg1KSArIEQoNikgKyBEKDcpICsgRCg4KSArIEQoOSk7Ci0rICAgIH0K LSsgIHJldHVybiAwOwotK30KLSsKLStpbnQKLSttYWluICh2b2lkKQotK3sKLSsgIHJldHVybiBm b28gKDApOwotK30KLS0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9leHQvZ251LWlubGluZS1nbG9i YWwtcmVqZWN0LkMuamoJMjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBn Y2MvdGVzdHN1aXRlL2crKy5kZy9leHQvZ251LWlubGluZS1nbG9iYWwtcmVqZWN0LkMJMjAwNy0w OC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsNTUgQEAKLSsvKiBUZXN0 IF9fYXR0cmlidXRlX18oKGdudV9pbmxpbmUpKS4KLSsKLSsgICBDaGVjayB0aGF0IHdlIHJlamVj dCB2YXJpb3VzIGZvcm1zIG9mIGR1cGxpY2F0ZSBkZWZpbml0aW9ucy4KLSsqLwotKwotKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCi0rCi0rI2luY2x1ZGUgImdudS1pbmxpbmUtY29tbW9uLmgiCi0r Ci0rI3VuZGVmIGZuCi0rI2RlZmluZSBmbiBwZngoZnVuY19kZWNsX2lubGluZV9iZWZvcmUpCi0r ZGVjbChpbmxpbmUsIGZuKSAvLyB7IGRnLWVycm9yICJwcmV2aW91cyIgIiIgfQotK2dudWluZGVm KGZuLCAwKSAvLyB7IGRnLWVycm9yICJyZWRlY2xhcmVkIiAiIiB9Ci0rCi0rI3VuZGVmIGZuCi0r I2RlZmluZSBmbiBwZngoZnVuY19kZWNsX2lubGluZV9hZnRlcikKLStnbnVpbmRlZihmbiwgMCkg Ly8geyBkZy1lcnJvciAicHJldmlvdXMiICIiIH0KLStkZWNsKGlubGluZSwgZm4pIC8vIHsgZGct ZXJyb3IgInJlZGVjbGFyZWQiICIiIH0KLSsKLSsjdW5kZWYgZm4KLSsjZGVmaW5lIGZuIHBmeChm dW5jX2RlZl9nbnVpbl9yZWRlZikKLStnbnVpbmRlZihmbiwgMCkgLy8geyBkZy1lcnJvciAicHJl dmlvdXMiICIiIH0KLStnbnVpbmRlZihmbiwgMSkgLy8geyBkZy1lcnJvciAicmVkZWZpbml0aW9u IiAiIiB9Ci0rCi0rI3VuZGVmIGZuCi0rI2RlZmluZSBmbiBwZngoZnVuY19kZWZfaW5saW5lX3Jl ZGVmKQotK2RlZihpbmxpbmUsIGZuLCAwKSAvLyB7IGRnLWVycm9yICJwcmV2aW91cyIgIiIgfQot K2RlZihpbmxpbmUsIGZuLCAxKSAvLyB7IGRnLWVycm9yICJyZWRlZmluaXRpb24iICIiIH0KLSsK LSsjdW5kZWYgZm4KLSsjZGVmaW5lIGZuIHBmeChmdW5jX2RlZl9pbmxpbmVfYWZ0ZXIpCi0rZ251 aW5kZWYoZm4sIDApIC8vIHsgZGctZXJyb3IgInByZXZpb3VzIiAiIiB9Ci0rZGVmKGlubGluZSwg Zm4sIDEpIC8vIHsgZGctZXJyb3IgInJlZGVjbGFyZSIgIiIgfQotKwotKyN1bmRlZiBmbgotKyNk ZWZpbmUgZm4gcGZ4KGZ1bmNfZGVmX2lubGluZV9iZWZvcmUpCi0rZGVmKGlubGluZSwgZm4sIDAp IC8vIHsgZGctZXJyb3IgInByZXZpb3VzIiAiIiB9Ci0rZ251aW5kZWYoZm4sIDEpIC8vIHsgZGct ZXJyb3IgInJlZGVmaW5pdGlvbiIgIiIgfQotKwotKyN1bmRlZiBmbgotKyNkZWZpbmUgZm4gcGZ4 KGZ1bmNfZGVmX2JlZm9yZSkKLStkZWYoLCBmbiwgMCkgLy8geyBkZy1lcnJvciAicHJldmlvdXMi ICIiIH0KLStnbnVpbmRlZihmbiwgMSkgLy8geyBkZy1lcnJvciAicmVkZWZpbml0aW9uIiAiIiB9 Ci0rCi0rI3VuZGVmIGZuCi0rI2RlZmluZSBmbiBwZngoZnVuY19kZWNsX3N0YXRpY19pbmxpbmVf YmVmb3JlKQotK2RlY2woc3RhdGljIGlubGluZSwgZm4pIC8vIHsgZGctZXJyb3IgInByZXZpb3Vz IiAiIiB9Ci0rZ251aW5kZWYoZm4sIDApIC8vIHsgZGctZXJyb3IgInJlZGVjbGFyZWQiICIiIH0K LSsKLSsjdW5kZWYgZm4KLSsjZGVmaW5lIGZuIHBmeChmdW5jX2RlZl9zdGF0aWNfaW5saW5lX2Fm dGVyKQotK2RlY2woc3RhdGljLCBmbikKLStnbnVpbmRlZihmbiwgMCkgLy8geyBkZy1lcnJvciAi cHJldmlvdXMiICIiIH0KLStkZWNsKHN0YXRpYywgZm4pCi0rZGVmKHN0YXRpYyBpbmxpbmUsIGZu LCAxKSAvLyB7IGRnLWVycm9yICJyZWRlY2xhcmUiICIiIH0KLS0tLSBnY2MvdGVzdHN1aXRlL2cr Ky5kZy9leHQvZ251LWlubGluZS10ZW1wbGF0ZS1mdW5jLkMuamoJMjAwNy0wOC0zMSAxMzowMDoy OC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9leHQvZ251LWlubGlu ZS10ZW1wbGF0ZS1mdW5jLkMJMjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAyMDAKLUBA IC0wLDAgKzEsMTcgQEAKLSsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotKy8qIHsgZGctb3B0aW9u cyAiLU8iIH0gKi8gLy8gc3VjaCB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgYXJlIG9wdGltaXplZCBv dXQKLSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmMxIiB9IH0gKi8KLSsvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmMyIiB9IH0gKi8KLSsvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJmdW5jMyIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJmdW5jNCIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLW5vdCAiZnVuYzUiIH0gfSAqLwotKwotKyNkZWZpbmUgZGVmcGZ4IHRlbXBsYXRlIDx0eXBl bmFtZSBUPgotKwotKyNpbmNsdWRlICJnbnUtaW5saW5lLWdsb2JhbC5DIgotKwotK3RlbXBsYXRl IGludCBmdW5jMTxpbnQ+KHZvaWQpOwotK3RlbXBsYXRlIGludCBmdW5jMjxpbnQ+KHZvaWQpOwot K3RlbXBsYXRlIGludCBmdW5jMzxpbnQ+KHZvaWQpOwotK3RlbXBsYXRlIGludCBmdW5jNDxpbnQ+ KHZvaWQpOwotK3RlbXBsYXRlIGludCBmdW5jNTxpbnQ+KHZvaWQpOwotLS0tIGdjYy90ZXN0c3Vp dGUvZysrLmRnL2V4dC9nbnUtaW5saW5lLWNvbW1vbi5oLmpqCTIwMDctMDgtMzEgMTM6MDA6Mjgu MDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L2dudS1pbmxpbmUt Y29tbW9uLmgJMjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEs MjQgQEAKLSsjaWZuZGVmIGdudQotKyMgZGVmaW5lIGdudV9pbmxpbmUgX19hdHRyaWJ1dGVfXygo Z251X2lubGluZSkpIGlubGluZQotKyNlbmRpZgotKwotKyNkZWZpbmUgZGVjbHNwZWMoc3BlYywg bmFtZSkgc3BlYyBpbnQgbmFtZSAodm9pZCkKLSsjaWZkZWYgSU5fQ0xBU1MKLSsjIGRlZmluZSBk ZWNsKHNwZWMsIG5hbWUpCi0rI2Vsc2UKLSsjIGRlZmluZSBkZWNsKHNwZWMsIG5hbWUpIGRlZnBm eCBkZWNsc3BlYyhzcGVjLCBuYW1lKTsKLSsjZW5kaWYKLSsjZGVmaW5lIGRlZihzcGVjLCBuYW1l LCByZXQpIGRlZnBmeCBkZWNsc3BlYyhzcGVjLCBuYW1lKSB7IHJldHVybiByZXQ7IH0KLSsjZGVm aW5lIGdudWluZGVmKG5hbWUsIHJldCkgZGVmKGdudV9pbmxpbmUsIG5hbWUsIHJldCkKLSsKLSsj aWZuZGVmIHBmeAotKyMgaWZkZWYgSU5fQ0xBU1MKLSsjICBkZWZpbmUgcGZ4KHgpIElOX0NMQVNT Ojp4Ci0rIyBlbHNlCi0rIyAgZGVmaW5lIHBmeCh4KSB4Ci0rIyBlbmRpZgotKyNlbmRpZgotKwot KyNpZm5kZWYgZGVmcGZ4Ci0rIyBkZWZpbmUgZGVmcGZ4Ci0rI2VuZGlmCi0tLS0gZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvZXh0L2dudS1pbmxpbmUtYW5vbi1uYW1lc3BhY2UuQy5qagkyMDA3LTA4LTMx IDEzOjAwOjI4LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL2V4dC9n bnUtaW5saW5lLWFub24tbmFtZXNwYWNlLkMJMjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAg KzAyMDAKLUBAIC0wLDAgKzEsMTEgQEAKLSsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotKy8qIHsg ZGctb3B0aW9ucyAiLU8iIH0gKi8gLy8gc3VjaCB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgYXJlIG9w dGltaXplZCBvdXQKLSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJmdW5jMSIg fSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiZnVuYzIiIH0gfSAq LwotKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImZ1bmMzIiB9IH0gKi8KLSsv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJmdW5jNCIgfSB9ICovCi0rLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiZnVuYzUiIH0gfSAqLwotKwotK25hbWVzcGFj ZSB7Ci0rI2luY2x1ZGUgImdudS1pbmxpbmUtZ2xvYmFsLkMiCi0rfQotLS0tIGdjYy90ZXN0c3Vp dGUvZysrLmRnL2V4dC9nbnUtaW5saW5lLWNsYXNzLXN0YXRpYy5DLmpqCTIwMDctMDgtMzEgMTM6 MDA6MjguMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L2dudS1p bmxpbmUtY2xhc3Mtc3RhdGljLkMJMjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAyMDAK LUBAIC0wLDAgKzEsMjAgQEAKLSsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotKy8qIHsgZGctb3B0 aW9ucyAiLU8iIH0gKi8gLy8gc3VjaCB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgYXJlIG9wdGltaXpl ZCBvdXQKLSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmMxIiB9IH0gKi8KLSsv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmMyIiB9IH0gKi8KLSsvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJmdW5jMyIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJmdW5jNCIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJmdW5jNSIgfSB9ICovCi0rCi0rI3VuZGVmIElOX0NMQVNTCi0rI2RlZmluZSBJTl9D TEFTUyBnbnVfdGVzdF9zdGF0aWMKLSsKLStzdHJ1Y3QgSU5fQ0xBU1MgewotKyAgc3RhdGljIGlu dCBmdW5jMSh2b2lkKTsKLSsgIHN0YXRpYyBpbnQgZnVuYzIodm9pZCk7Ci0rICBzdGF0aWMgaW50 IGZ1bmMzKHZvaWQpOwotKyAgc3RhdGljIGludCBmdW5jNCh2b2lkKTsKLSsgIHN0YXRpYyBpbnQg ZnVuYzUodm9pZCk7Ci0rfTsKLSsKLSsjaW5jbHVkZSAiZ251LWlubGluZS1nbG9iYWwuQyIKLS0t LSBnY2MvdGVzdHN1aXRlL2crKy5kZy9leHQvZ251LWlubGluZS1nbG9iYWwuQy5qagkyMDA3LTA4 LTMxIDEzOjAwOjI4LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL2V4 dC9nbnUtaW5saW5lLWdsb2JhbC5DCTIwMDctMDgtMzEgMTM6MDA6MjguMDAwMDAwMDAwICswMjAw Ci1AQCAtMCwwICsxLDUwIEBACi0rLyogVGVzdCBfX2F0dHJpYnV0ZV9fKChnbnVfaW5saW5lKSku Ci0rCi0rICAgQ2hlY2sgdGhhdCBfX2F0dHJpYnV0ZV9fKChnbnVfaW5saW5lKSkgaGFzIG5vIGVm ZmVjdCwgaW4gdGhlCi0rICAgYWJzZW5jZSBvZiBleHRlcm4gYW5kL29yIGlubGluZS4KLSsKLSsg ICBDaGVjayB0aGF0IHdlIGRvbid0IGdldCBvdXQtb2YtbGluZSBkZWZpbml0aW9ucyBmb3IgZXh0 ZXJuIGlubGluZQotKyAgIGdudV9pbmxpbmUgZnVuY3Rpb25zLCByZWdhcmRsZXNzIG9mIGRlY2xh cmF0aW9ucyBvciBkZWZpbml0aW9ucy4KLSsKLSsgICBDaGVjayB0aGF0IHN1Y2ggZnVuY3Rpb25z IGNhbiBiZSBvdmVycmlkZGVuIGJ5IG91dC1vZi1saW5lCi0rICAgZGVmaW5pdGlvbnMuCi0rCi0r ICovCi0rCi0rLyogeyBkZy1kbyBjb21waWxlIH0gKi8KLSsvKiB7IGRnLW9wdGlvbnMgIi1PIiB9 ICovIC8vIHN1Y2ggdGhhdCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBvcHRpbWl6ZWQgb3V0Ci0rLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJmdW5jMSIgfSB9ICovCi0rLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJmdW5jMiIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLW5vdCAiZnVuYzMiIH0gfSAqLwotKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt YmxlciAiZnVuYzQiIH0gfSAqLwotKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qg ImZ1bmM1IiB9IH0gKi8KLSsKLSsjaW5jbHVkZSAiZ251LWlubGluZS1jb21tb24uaCIKLSsKLSsj dW5kZWYgZm4KLSsjZGVmaW5lIGZuIHBmeChmdW5jMSkgLy8gbXVzdCBiZSBlbWl0dGVkIG91dC1v Zi1saW5lCi0rZ251aW5kZWYoZm4sIDApCi0rZGVmKCwgZm4sIDIpCi0rCi0rI3VuZGVmIGZuCi0r I2RlZmluZSBmbiBwZngoZnVuYzIpIC8vIG11c3QgYmUgZW1pdHRlZCBvdXQtb2YtbGluZQotK2Rl Y2woZXh0ZXJuLCBmbikKLStnbnVpbmRlZihmbiwgMCkKLStkZWYoLCBmbiwgMikKLSsKLSsjdW5k ZWYgZm4KLSsjZGVmaW5lIGZuIHBmeChmdW5jMykgLy8gbXVzdCBub3QgYmUgZW1pdHRlZAotK2Rl Y2woZXh0ZXJuLCBmbikKLStnbnVpbmRlZihmbiwgMCkKLSsKLSsjdW5kZWYgZm4KLSsjZGVmaW5l IGZuIHBmeChmdW5jNCkgLy8gbXVzdCBiZSBlbWl0dGVkIG91dC1vZi1saW5lCi0rZGVjbChleHRl cm4sIGZuKQotK2dudWluZGVmKGZuLCAwKQotK2RlZigsIGZuLCAxKQotKwotKyN1bmRlZiBmbgot KyNkZWZpbmUgZm4gcGZ4KGZ1bmM1KSAvLyBtdXN0IE5PVCBiZSBlbWl0dGVkLCBiZWNhdXNlIGl0 J3Mgc3RhdGljIGFuZCB1bnVzZWQKLStkZWNsKHN0YXRpYywgZm4pCi0rZ251aW5kZWYoZm4sIDAp Ci0rZGVmKCwgZm4sIDEpCi0tLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L2dudS1pbmxpbmUt dGVtcGxhdGUtY2xhc3MuQy5qagkyMDA3LTA4LTMxIDEzOjAwOjI4LjAwMDAwMDAwMCArMDIwMAot KysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL2V4dC9nbnUtaW5saW5lLXRlbXBsYXRlLWNsYXNzLkMJ MjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsMjIgQEAKLSsv KiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotKy8qIHsgZGctb3B0aW9ucyAiLU8iIH0gKi8gLy8gc3Vj aCB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgYXJlIG9wdGltaXplZCBvdXQKLSsvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmMxIiB9IH0gKi8KLSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgImZ1bmMyIiB9IH0gKi8KLSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt bm90ICJmdW5jMyIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJmdW5j NCIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJmdW5jNSIgfSB9ICov Ci0rCi0rdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBnbnVfdGVzdCB7Ci0rICBpbnQgZnVu YzEodm9pZCk7Ci0rICBpbnQgZnVuYzIodm9pZCk7Ci0rICBpbnQgZnVuYzModm9pZCk7Ci0rICBp bnQgZnVuYzQodm9pZCk7Ci0rICBpbnQgZnVuYzUodm9pZCk7Ci0rfTsKLSsKLSsjZGVmaW5lIGRl ZnBmeCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSsjZGVmaW5lIElOX0NMQVNTIGdudV90ZXN0PFQ+ Ci0rCi0rI2luY2x1ZGUgImdudS1pbmxpbmUtZ2xvYmFsLkMiCi0rCi0rdGVtcGxhdGUgc3RydWN0 IGdudV90ZXN0PGludD47Ci0tLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L2dudS1pbmxpbmUt bmFtZXNwYWNlLkMuamoJMjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBn Y2MvdGVzdHN1aXRlL2crKy5kZy9leHQvZ251LWlubGluZS1uYW1lc3BhY2UuQwkyMDA3LTA4LTMx IDEzOjAwOjI4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxMSBAQAotKy8qIHsgZGctZG8g Y29tcGlsZSB9ICovCi0rLyogeyBkZy1vcHRpb25zICItTyIgfSAqLyAvLyBzdWNoIHRoYXQgc3Rh dGljIGZ1bmN0aW9ucyBhcmUgb3B0aW1pemVkIG91dAotKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlciAiZnVuYzEiIH0gfSAqLwotKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi ZnVuYzIiIH0gfSAqLwotKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgImZ1bmMz IiB9IH0gKi8KLSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmM0IiB9IH0gKi8K LSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJmdW5jNSIgfSB9ICovCi0rCi0r bmFtZXNwYWNlIGdudV90ZXN0IHsKLSsjaW5jbHVkZSAiZ251LWlubGluZS1nbG9iYWwuQyIKLSt9 Ci0tLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L2dudS1pbmxpbmUtY2xhc3MuQy5qagkyMDA3 LTA4LTMxIDEzOjAwOjI4LjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy90ZXN0c3VpdGUvZysrLmRn L2V4dC9nbnUtaW5saW5lLWNsYXNzLkMJMjAwNy0wOC0zMSAxMzowMDoyOC4wMDAwMDAwMDAgKzAy MDAKLUBAIC0wLDAgKzEsMTkgQEAKLSsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotKy8qIHsgZGct b3B0aW9ucyAiLU8iIH0gKi8gLy8gc3VjaCB0aGF0IHN0YXRpYyBmdW5jdGlvbnMgYXJlIG9wdGlt aXplZCBvdXQKLSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmMxIiB9IH0gKi8K LSsvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImZ1bmMyIiB9IH0gKi8KLSsvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJmdW5jMyIgfSB9ICovCi0rLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJmdW5jNCIgfSB9ICovCi0rLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyICJmdW5jNSIgfSB9ICovCi0rCi0rI2RlZmluZSBJTl9DTEFTUyBnbnVfdGVzdAot KwotK3N0cnVjdCBJTl9DTEFTUyB7Ci0rICBpbnQgZnVuYzEodm9pZCk7Ci0rICBpbnQgZnVuYzIo dm9pZCk7Ci0rICBpbnQgZnVuYzModm9pZCk7Ci0rICBpbnQgZnVuYzQodm9pZCk7Ci0rICBpbnQg ZnVuYzUodm9pZCk7Ci0rfTsKLSsKLSsjaW5jbHVkZSAiZ251LWlubGluZS1nbG9iYWwuQyIKCmRp ZmYgLS1naXQgYS9nY2M0MS1lcnJvci1hdHRyaWIucGF0Y2ggYi9nY2M0MS1lcnJvci1hdHRyaWIu cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwNjgyMQotLS0gL2Rl di9udWxsCisrKyBiL2djYzQxLWVycm9yLWF0dHJpYi5wYXRjaApAQCAtMCwwICsxLDI5NSBAQAor MjAwNy0wOS0yMyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGV4cHIu YyAoZXhwYW5kX2V4cHJfcmVhbF8xKSA8Y2FzZSBDQUxMX0VYUFI+OiBVc2UgZ2V0X2NhbGxlZV9m bmRlY2wKKwlpbnN0ZWFkIG9mIGNoZWNraW5nIENBTExfRVhQUl9GTiBkaXJlY3RseSB0byB0ZXN0 IGZvciBidWlsdGlucy4KKwlJZiBlcnJvciBvciB3YXJuaW5nIGF0dHJpYnV0ZXMgYXJlIHByZXNl bnQsIHByaW50CisJZXJyb3IgcmVzcC4gd2FybmluZy4KKwkqIGMtY29tbW9uLmMgKGhhbmRsZV9l cnJvcl9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCisJKGNfY29tbW9uX2F0dHJpYnV0ZV90YWJs ZSk6IEFkZCBlcnJvciBhbmQgd2FybmluZworCWF0dHJpYnV0ZXMuCisJKiBkb2MvZXh0ZW5kLnRl eGk6IERvY3VtZW50IGVycm9yIGFuZCB3YXJuaW5nIGF0dHJpYnV0ZXMuCisKKwkqIGdjYy5kZy92 YS1hcmctcGFjay1sZW4tMS5jOiBVc2UgZXJyb3IgYW5kIHdhcm5pbmcKKwlhdHRyaWJ1dGVzLgor CSogZ2NjLmRnL3ZhLWFyZy1wYWNrLWxlbi0yLmM6IE5ldyB0ZXN0LgorCSogZysrLmRnL2V4dC92 YS1hcmctcGFjay1sZW4tMS5DOiBVc2UgZXJyb3IgYW5kIHdhcm5pbmcKKwlhdHRyaWJ1dGVzLgor CSogZysrLmRnL2V4dC92YS1hcmctcGFjay1sZW4tMi5DOiBOZXcgdGVzdC4KKworLS0tIGdjYy9k b2MvZXh0ZW5kLnRleGkuamoJMjAwNy0wOS0yNSAxNTowNDoxNS4wMDAwMDAwMDAgKzAyMDAKKysr KyBnY2MvZG9jL2V4dGVuZC50ZXhpCTIwMDctMDktMjUgMTU6MzI6MjIuMDAwMDAwMDAwICswMjAw CitAQCAtMTU4OSw4ICsxNTg5LDggQEAgYXR0cmlidXRlcyBhcmUgY3VycmVudGx5IGRlZmluZWQg Zm9yIGZ1bgorIEBjb2Rle3NlY3Rpb259LCBAY29kZXtjb25zdHJ1Y3Rvcn0sIEBjb2Rle2Rlc3Ry dWN0b3J9LCBAY29kZXt1c2VkfSwKKyBAY29kZXt1bnVzZWR9LCBAY29kZXtkZXByZWNhdGVkfSwg QGNvZGV7d2Vha30sIEBjb2Rle21hbGxvY30sCisgQGNvZGV7YWxpYXN9LCBAY29kZXt3YXJuX3Vu dXNlZF9yZXN1bHR9LCBAY29kZXtub25udWxsfSwKKy1AY29kZXtnbnVfaW5saW5lfSwgQGNvZGV7 ZXh0ZXJuYWxseV92aXNpYmxlfSBhbmQgQGNvZGV7YXJ0aWZpY2lhbH0uCistU2V2ZXJhbCBvdGhl cgorK0Bjb2Rle2dudV9pbmxpbmV9LCBAY29kZXtleHRlcm5hbGx5X3Zpc2libGV9LCBAY29kZXth cnRpZmljaWFsfSwKKytAY29kZXtlcnJvcn0gYW5kIEBjb2Rle3dhcm5pbmd9LiAgU2V2ZXJhbCBv dGhlcgorIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgZm9yIGZ1bmN0aW9ucyBvbiBwYXJ0aWN1bGFy IHRhcmdldCBzeXN0ZW1zLiAgT3RoZXIKKyBhdHRyaWJ1dGVzLCBpbmNsdWRpbmcgQGNvZGV7c2Vj dGlvbn0gYXJlIHN1cHBvcnRlZCBmb3IgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIChAcHhyZWZ7 VmFyaWFibGUgQXR0cmlidXRlc30pIGFuZCBmb3IgdHlwZXMgKEBweHJlZntUeXBlIEF0dHJpYnV0 ZXN9KS4KK0BAIC0xNjg4LDYgKzE2ODgsMzAgQEAgV2hldGhlciB0aGUgZnVuY3Rpb24gaXRzZWxm IGlzIGNvbnNpZGVyZQorIHRoZSBjdXJyZW50IGlubGluaW5nIHBhcmFtZXRlcnMuICBUaGUgQGNv ZGV7ZmxhdHRlbn0gYXR0cmlidXRlIG9ubHkgd29ya3MKKyByZWxpYWJseSBpbiB1bml0LWF0LWEt dGltZSBtb2RlLgorIAorK0BpdGVtIGVycm9yICgiQHZhcnttZXNzYWdlfSIpCisrQGNpbmRleCBA Y29kZXtlcnJvcn0gZnVuY3Rpb24gYXR0cmlidXRlCisrSWYgdGhpcyBhdHRyaWJ1dGUgaXMgdXNl ZCBvbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBhIGNhbGwgdG8gc3VjaCBhIGZ1bmN0aW9u CisraXMgbm90IGVsaW1pbmF0ZWQgdGhyb3VnaCBkZWFkIGNvZGUgZWxpbWluYXRpb24gb3Igb3Ro ZXIgb3B0aW1pemF0aW9ucywgYW4gZXJyb3IKKyt3aGljaCB3aWxsIGluY2x1ZGUgQHZhcnttZXNz YWdlfSB3aWxsIGJlIGRpYWdub3NlZC4gIFRoaXMgaXMgdXNlZnVsCisrZm9yIGNvbXBpbGUgdGlt ZSBjaGVja2luZywgZXNwZWNpYWxseSB0b2dldGhlciB3aXRoIEBjb2Rle19fYnVpbHRpbl9jb25z dGFudF9wfQorK2FuZCBpbmxpbmUgZnVuY3Rpb25zIHdoZXJlIGNoZWNraW5nIHRoZSBpbmxpbmUg ZnVuY3Rpb24gYXJndW1lbnRzIGlzIG5vdAorK3Bvc3NpYmxlIHRocm91Z2ggQGNvZGV7ZXh0ZXJu IGNoYXIgWyhjb25kaXRpb24pID8gMSA6IC0xXTt9IHRyaWNrcy4KKytXaGlsZSBpdCBpcyBwb3Nz aWJsZSB0byBsZWF2ZSB0aGUgZnVuY3Rpb24gdW5kZWZpbmVkIGFuZCB0aHVzIGludm9rZQorK2Eg bGluayBmYWlsdXJlLCB3aGVuIHVzaW5nIHRoaXMgYXR0cmlidXRlIHRoZSBwcm9ibGVtIHdpbGwg YmUgZGlhZ25vc2VkCisrZWFybGllciBhbmQgd2l0aCBleGFjdCBsb2NhdGlvbiBvZiB0aGUgY2Fs bCBldmVuIGluIHByZXNlbmNlIG9mIGlubGluZQorK2Z1bmN0aW9ucyBvciB3aGVuIG5vdCBlbWl0 dGluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisrCisrQGl0ZW0gd2FybmluZyAoIkB2YXJ7bWVz c2FnZX0iKQorK0BjaW5kZXggQGNvZGV7d2FybmluZ30gZnVuY3Rpb24gYXR0cmlidXRlCisrSWYg dGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBvbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBhIGNh bGwgdG8gc3VjaCBhIGZ1bmN0aW9uCisraXMgbm90IGVsaW1pbmF0ZWQgdGhyb3VnaCBkZWFkIGNv ZGUgZWxpbWluYXRpb24gb3Igb3RoZXIgb3B0aW1pemF0aW9ucywgYSB3YXJuaW5nCisrd2hpY2gg d2lsbCBpbmNsdWRlIEB2YXJ7bWVzc2FnZX0gd2lsbCBiZSBkaWFnbm9zZWQuICBUaGlzIGlzIHVz ZWZ1bAorK2ZvciBjb21waWxlIHRpbWUgY2hlY2tpbmcsIGVzcGVjaWFsbHkgdG9nZXRoZXIgd2l0 aCBAY29kZXtfX2J1aWx0aW5fY29uc3RhbnRfcH0KKythbmQgaW5saW5lIGZ1bmN0aW9ucy4gIFdo aWxlIGl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgZnVuY3Rpb24gd2l0aAorK2EgbWVzc2Fn ZSBpbiBAY29kZXsuZ251Lndhcm5pbmcqfSBzZWN0aW9uLCB3aGVuIHVzaW5nIHRoaXMgYXR0cmli dXRlIHRoZSBwcm9ibGVtCisrd2lsbCBiZSBkaWFnbm9zZWQgZWFybGllciBhbmQgd2l0aCBleGFj dCBsb2NhdGlvbiBvZiB0aGUgY2FsbCBldmVuIGluIHByZXNlbmNlCisrb2YgaW5saW5lIGZ1bmN0 aW9ucyBvciB3aGVuIG5vdCBlbWl0dGluZyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCisrCisgQGl0 ZW0gY2RlY2wKKyBAY2luZGV4IGZ1bmN0aW9ucyB0aGF0IGRvIHBvcCB0aGUgYXJndW1lbnQgc3Rh Y2sgb24gdGhlIDM4NgorIEBvcGluZGV4IG1ydGQKKy0tLSBnY2MvZXhwci5jLmpqCTIwMDctMDkt MjUgMTQ6NTg6NDAuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjL2V4cHIuYwkyMDA3LTA5LTI1IDE1 OjE5OjE1LjAwMDAwMDAwMCArMDIwMAorQEAgLTc1MTMsMTkgKzc1MTMsMzEgQEAgZXhwYW5kX2V4 cHJfcmVhbF8xICh0cmVlIGV4cCwgcnR4IHRhcmdldAorIAkgaW5saW5pbmcuICAqLworICAgICAg IGlmIChDQUxMX0VYUFJfVkFfQVJHX1BBQ0sgKGV4cCkpCisgCWVycm9yICgiaW52YWxpZCB1c2Ug b2YgJTxfX2J1aWx0aW5fdmFfYXJnX3BhY2sgKCklPiIpOworLSAgICAgIC8qIENoZWNrIGZvciBh IGJ1aWx0LWluIGZ1bmN0aW9uLiAgKi8KKy0gICAgICBpZiAoVFJFRV9DT0RFIChUUkVFX09QRVJB TkQgKGV4cCwgMCkpID09IEFERFJfRVhQUgorLQkgICYmIChUUkVFX0NPREUgKFRSRUVfT1BFUkFO RCAoVFJFRV9PUEVSQU5EIChleHAsIDApLCAwKSkKKy0JICAgICAgPT0gRlVOQ1RJT05fREVDTCkK Ky0JICAmJiBERUNMX0JVSUxUX0lOIChUUkVFX09QRVJBTkQgKFRSRUVfT1BFUkFORCAoZXhwLCAw KSwgMCkpKQorLQl7CistCSAgaWYgKERFQ0xfQlVJTFRfSU5fQ0xBU1MgKFRSRUVfT1BFUkFORCAo VFJFRV9PUEVSQU5EIChleHAsIDApLCAwKSkKKy0JICAgICAgPT0gQlVJTFRfSU5fRlJPTlRFTkQp CistCSAgICByZXR1cm4gbGFuZ19ob29rcy5leHBhbmRfZXhwciAoZXhwLCBvcmlnaW5hbF90YXJn ZXQsCistCQkJCQkgICB0bW9kZSwgbW9kaWZpZXIsCistCQkJCQkgICBhbHRfcnRsKTsKKy0JICBl bHNlCistCSAgICByZXR1cm4gZXhwYW5kX2J1aWx0aW4gKGV4cCwgdGFyZ2V0LCBzdWJ0YXJnZXQs IHRtb2RlLCBpZ25vcmUpOworKyAgICAgIHsKKysJdHJlZSBmbmRlY2wgPSBnZXRfY2FsbGVlX2Zu ZGVjbCAoZXhwKSwgYXR0cjsKKysKKysJaWYgKGZuZGVjbAorKwkgICAgJiYgKGF0dHIgPSBsb29r dXBfYXR0cmlidXRlICgiZXJyb3IiLAorKwkJCQkJIERFQ0xfQVRUUklCVVRFUyAoZm5kZWNsKSkp ICE9IE5VTEwpCisrCSAgZXJyb3IgKCJjYWxsIHRvICVxcyBkZWNsYXJlZCB3aXRoIGF0dHJpYnV0 ZSBlcnJvcjogJXMiLAorKwkJIGxhbmdfaG9va3MuZGVjbF9wcmludGFibGVfbmFtZSAoZm5kZWNs LCAxKSwKKysJCSBUUkVFX1NUUklOR19QT0lOVEVSIChUUkVFX1ZBTFVFIChUUkVFX1ZBTFVFIChh dHRyKSkpKTsKKysJaWYgKGZuZGVjbAorKwkgICAgJiYgKGF0dHIgPSBsb29rdXBfYXR0cmlidXRl ICgid2FybmluZyIsCisrCQkJCQkgREVDTF9BVFRSSUJVVEVTIChmbmRlY2wpKSkgIT0gTlVMTCkK KysJICB3YXJuaW5nICgwLCAiY2FsbCB0byAlcXMgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUgd2Fy bmluZzogJXMiLAorKwkJICAgbGFuZ19ob29rcy5kZWNsX3ByaW50YWJsZV9uYW1lIChmbmRlY2ws IDEpLAorKwkJICAgVFJFRV9TVFJJTkdfUE9JTlRFUiAoVFJFRV9WQUxVRSAoVFJFRV9WQUxVRSAo YXR0cikpKSk7CisrCisrCS8qIENoZWNrIGZvciBhIGJ1aWx0LWluIGZ1bmN0aW9uLiAgKi8KKysJ aWYgKGZuZGVjbCAmJiBERUNMX0JVSUxUX0lOIChmbmRlY2wpKQorKwkgIHsKKysJICAgIGlmIChE RUNMX0JVSUxUX0lOX0NMQVNTIChmbmRlY2wpID09IEJVSUxUX0lOX0ZST05URU5EKQorKwkgICAg ICByZXR1cm4gbGFuZ19ob29rcy5leHBhbmRfZXhwciAoZXhwLCBvcmlnaW5hbF90YXJnZXQsCisr CQkJCQkgICAgIHRtb2RlLCBtb2RpZmllciwgYWx0X3J0bCk7CisrCSAgICBlbHNlCisrCSAgICAg IHJldHVybiBleHBhbmRfYnVpbHRpbiAoZXhwLCB0YXJnZXQsIHN1YnRhcmdldCwgdG1vZGUsIGln bm9yZSk7CisrCSAgfQorIAl9CisgCisgICAgICAgcmV0dXJuIGV4cGFuZF9jYWxsIChleHAsIHRh cmdldCwgaWdub3JlKTsKKy0tLSBnY2MvYy1jb21tb24uYy5qagkyMDA3LTA5LTI1IDE1OjAxOjQ5 LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy9jLWNvbW1vbi5jCTIwMDctMDktMjUgMTU6MjQ6MzQu MDAwMDAwMDAwICswMjAwCitAQCAtNTA4LDYgKzUwOCw3IEBAIHN0YXRpYyB0cmVlIGhhbmRsZV9h bHdheXNfaW5saW5lX2F0dHJpYnUKKyBzdGF0aWMgdHJlZSBoYW5kbGVfZ251X2lubGluZV9hdHRy aWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworIHN0YXRpYyB0cmVlIGhh bmRsZV9hcnRpZmljaWFsX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wg Kik7Cisgc3RhdGljIHRyZWUgaGFuZGxlX2ZsYXR0ZW5fYXR0cmlidXRlICh0cmVlICosIHRyZWUs IHRyZWUsIGludCwgYm9vbCAqKTsKKytzdGF0aWMgdHJlZSBoYW5kbGVfZXJyb3JfYXR0cmlidXRl ICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKKyBzdGF0aWMgdHJlZSBoYW5kbGVf dXNlZF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworIHN0YXRp YyB0cmVlIGhhbmRsZV91bnVzZWRfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwg Ym9vbCAqKTsKKyBzdGF0aWMgdHJlZSBoYW5kbGVfZXh0ZXJuYWxseV92aXNpYmxlX2F0dHJpYnV0 ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsCitAQCAtNjQxLDYgKzY0MiwxMCBAQCBjb25zdCBz dHJ1Y3QgYXR0cmlidXRlX3NwZWMgY19jb21tb25fYXR0CisgCQkJICAgICAgaGFuZGxlX3dhcm5f dW51c2VkX3Jlc3VsdF9hdHRyaWJ1dGUgfSwKKyAgIHsgInNlbnRpbmVsIiwgICAgICAgICAgICAg ICAwLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwKKyAJCQkgICAgICBoYW5kbGVfc2VudGluZWxfYXR0 cmlidXRlIH0sCisrICB7ICJ3YXJuaW5nIiwJCSAgICAgIDEsIDEsIHRydWUsICBmYWxzZSwgZmFs c2UsCisrCQkJICAgICAgaGFuZGxlX2Vycm9yX2F0dHJpYnV0ZSB9LAorKyAgeyAiZXJyb3IiLAkJ ICAgICAgMSwgMSwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwKKysJCQkgICAgICBoYW5kbGVfZXJyb3Jf YXR0cmlidXRlIH0sCisgICB7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgMCwgMCwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgTlVMTCB9CisgfTsKKyAKK0BAIC00MjI2LDYgKzQyMzEsMjYgQEAgaGFu ZGxlX2ZsYXR0ZW5fYXR0cmlidXRlICh0cmVlICpub2RlLCB0cgorICAgcmV0dXJuIE5VTExfVFJF RTsKKyB9CisgCisrLyogSGFuZGxlIGEgIndhcm5pbmciIG9yICJlcnJvciIgYXR0cmlidXRlOyBh cmd1bWVudHMgYXMgaW4KKysgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxlci4gICovCisr Cisrc3RhdGljIHRyZWUKKytoYW5kbGVfZXJyb3JfYXR0cmlidXRlICh0cmVlICpub2RlLCB0cmVl IG5hbWUsIHRyZWUgYXJncywKKysJCQlpbnQgQVJHX1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19h ZGRfYXR0cnMpCisreworKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpID09IEZVTkNUSU9OX0RFQ0wK KysgICAgICB8fCBUUkVFX0NPREUgKFRSRUVfVkFMVUUgKGFyZ3MpKSA9PSBTVFJJTkdfQ1NUKQor KyAgICAvKiBEbyBub3RoaW5nIGVsc2UsIGp1c3Qgc2V0IHRoZSBhdHRyaWJ1dGUuICBXZSdsbCBn ZXQgYXQKKysgICAgICAgaXQgbGF0ZXIgd2l0aCBsb29rdXBfYXR0cmlidXRlLiAgKi8KKysgICAg OworKyAgZWxzZQorKyAgICB7CisrICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFF IGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisrICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7 CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMX1RSRUU7CisrfQorIAorIC8qIEhhbmRsZSBhICJ1 c2VkIiBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgIHN0cnVjdCBhdHRyaWJ1dGVfc3Bl Yy5oYW5kbGVyLiAgKi8KKy0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy92YS1hcmctcGFjay1sZW4t MS5jLmpqCTIwMDctMDktMjUgMTI6MjM6MDUuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvdmEtYXJnLXBhY2stbGVuLTEuYwkyMDA3LTA5LTI1IDE1OjE2OjAzLjAwMDAw MDAwMCArMDIwMAorQEAgLTMsOCArMywxMCBAQAorIAorICNpbmNsdWRlIDxzdGRhcmcuaD4KKyAK Ky1leHRlcm4gaW50IHdhcm5fb3Blbl9taXNzaW5nX21vZGUgKHZvaWQpOworLWV4dGVybiBpbnQg d2Fybl9vcGVuX3Rvb19tYW55X2FyZ3VtZW50cyAodm9pZCk7CisrZXh0ZXJuIGludCBlcnJvcl9v cGVuX21pc3NpbmdfbW9kZSAodm9pZCkKKysgIF9fYXR0cmlidXRlX18oKF9fZXJyb3JfXyAoIm9w ZW4gd2l0aCBPX0NSRUFUIG5lZWRzIDMgYXJndW1lbnRzLCBvbmx5IDIgd2VyZSBnaXZlbiIpKSk7 CisrZXh0ZXJuIGludCB3YXJuX29wZW5fdG9vX21hbnlfYXJndW1lbnRzICh2b2lkKQorKyAgX19h dHRyaWJ1dGVfXygoX193YXJuaW5nX18gKCJvcGVuIGNhbGxlZCB3aXRoIG1vcmUgdGhhbiAzIGFy Z3VtZW50cyIpKSk7CisgZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOworIAorIGNoYXIgZXhwZWN0 ZWRfY2hhcjsKK0BAIC04Myw3ICs4NSw3IEBAIG15b3BlbiAoY29uc3QgY2hhciAqcGF0aCwgaW50 IG9mbGFnLCAuLi4KKyAgICAgeworICAgICAgIGlmICgob2ZsYWcgJiAweDQwKSAhPSAwICYmIF9f YnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCkgPCAxKQorIAl7CistCSAgd2Fybl9vcGVuX21pc3Np bmdfbW9kZSAoKTsKKysJICBlcnJvcl9vcGVuX21pc3NpbmdfbW9kZSAoKTsKKyAJICByZXR1cm4g bXlvcGVuMiAocGF0aCwgb2ZsYWcpOworIAl9CisgICAgICAgcmV0dXJuIG15b3BlbnZhIChwYXRo LCBvZmxhZywgX19idWlsdGluX3ZhX2FyZ19wYWNrICgpKTsKKy0tLSBnY2MvdGVzdHN1aXRlL2dj Yy5kZy92YS1hcmctcGFjay1sZW4tMi5jLmpqCTIwMDctMDktMjUgMTU6MTY6MDMuMDAwMDAwMDAw ICswMjAwCisrKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmEtYXJnLXBhY2stbGVuLTIuYwkyMDA3 LTA5LTI1IDE1OjE2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0MiBAQAorKy8qIHsg ZGctZG8gY29tcGlsZSB9ICovCisrLyogeyBkZy1vcHRpb25zICItTzIiIH0gKi8KKysKKysjaW5j bHVkZSA8c3RkYXJnLmg+CisrCisrZXh0ZXJuIGludCBlcnJvcl9vcGVuX21pc3NpbmdfbW9kZSAo dm9pZCkKKysgIF9fYXR0cmlidXRlX18oKF9fZXJyb3JfXyAoIm9wZW4gd2l0aCBPX0NSRUFUIG5l ZWRzIDMgYXJndW1lbnRzLCBvbmx5IDIgd2VyZSBnaXZlbiIpKSk7CisrZXh0ZXJuIGludCB3YXJu X29wZW5fdG9vX21hbnlfYXJndW1lbnRzICh2b2lkKQorKyAgX19hdHRyaWJ1dGVfXygoX193YXJu aW5nX18gKCJvcGVuIGNhbGxlZCB3aXRoIG1vcmUgdGhhbiAzIGFyZ3VtZW50cyIpKSk7CisrCisr ZXh0ZXJuIGludCBteW9wZW4yIChjb25zdCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcpOworK2V4dGVy biBpbnQgbXlvcGVudmEgKGNvbnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZywgLi4uKTsKKysKKytl eHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUsIGdudV9pbmxpbmUpKSBp bnQKKytteW9wZW4gKGNvbnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZywgLi4uKQorK3sKKysgIGlm IChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuICgpID4gMSkKKysgICAgd2Fybl9vcGVuX3Rvb19t YW55X2FyZ3VtZW50cyAoKTsJLyogeyBkZy13YXJuaW5nICJjYWxsZWQgd2l0aCBtb3JlIHRoYW4g MyIgfSAqLworKworKyAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChvZmxhZykpCisrICAgIHsK KysgICAgICBpZiAoKG9mbGFnICYgMHg0MCkgIT0gMCAmJiBfX2J1aWx0aW5fdmFfYXJnX3BhY2tf bGVuICgpIDwgMSkKKysJeworKwkgIGVycm9yX29wZW5fbWlzc2luZ19tb2RlICgpOwkvKiB7IGRn LWVycm9yICJuZWVkcyAzIGFyZ3VtZW50cywgb25seSAyIHdlcmUgZ2l2ZW4iIH0gKi8KKysJICBy ZXR1cm4gbXlvcGVuMiAocGF0aCwgb2ZsYWcpOworKwl9CisrICAgICAgcmV0dXJuIG15b3BlbnZh IChwYXRoLCBvZmxhZywgX19idWlsdGluX3ZhX2FyZ19wYWNrICgpKTsKKysgICAgfQorKworKyAg aWYgKF9fYnVpbHRpbl92YV9hcmdfcGFja19sZW4gKCkgPCAxKQorKyAgICByZXR1cm4gbXlvcGVu MiAocGF0aCwgb2ZsYWcpOworKworKyAgcmV0dXJuIG15b3BlbnZhIChwYXRoLCBvZmxhZywgX19i dWlsdGluX3ZhX2FyZ19wYWNrICgpKTsKKyt9CisrCisraW50CisrbWFpbiAodm9pZCkKKyt7Cisr ICBteW9wZW4gKCJoIiwgMHg0Myk7CisrICBteW9wZW4gKCJpIiwgMHg0MywgMDY0NCwgMDY1NSk7 CisrICByZXR1cm4gMDsKKyt9CistLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZXh0L3ZhLWFyZy1w YWNrLWxlbi0xLkMuamoJMjAwNy0wOS0yNSAxMjoyMzowNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBn Y2MvdGVzdHN1aXRlL2crKy5kZy9leHQvdmEtYXJnLXBhY2stbGVuLTEuQwkyMDA3LTA5LTI1IDE1 OjE2OjAzLjAwMDAwMDAwMCArMDIwMAorQEAgLTMsOCArMywxMCBAQAorIAorICNpbmNsdWRlIDxz dGRhcmcuaD4KKyAKKy1leHRlcm4gIkMiIGludCB3YXJuX29wZW5fbWlzc2luZ19tb2RlICh2b2lk KTsKKy1leHRlcm4gIkMiIGludCB3YXJuX29wZW5fdG9vX21hbnlfYXJndW1lbnRzICh2b2lkKTsK KytleHRlcm4gIkMiIGludCBlcnJvcl9vcGVuX21pc3NpbmdfbW9kZSAodm9pZCkKKysgIF9fYXR0 cmlidXRlX18oKF9fZXJyb3JfXyAoIm9wZW4gd2l0aCBPX0NSRUFUIG5lZWRzIDMgYXJndW1lbnRz LCBvbmx5IDIgd2VyZSBnaXZlbiIpKSk7CisrZXh0ZXJuICJDIiBpbnQgd2Fybl9vcGVuX3Rvb19t YW55X2FyZ3VtZW50cyAodm9pZCkKKysgIF9fYXR0cmlidXRlX18oKF9fd2FybmluZ19fICgib3Bl biBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMiKSkpOworIGV4dGVybiAiQyIgdm9p ZCBhYm9ydCAodm9pZCk7CisgCisgY2hhciBleHBlY3RlZF9jaGFyOworQEAgLTgzLDcgKzg1LDcg QEAgbXlvcGVuIChjb25zdCBjaGFyICpwYXRoLCBpbnQgb2ZsYWcsIC4uLgorICAgICB7CisgICAg ICAgaWYgKChvZmxhZyAmIDB4NDApICE9IDAgJiYgX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbiAo KSA8IDEpCisgCXsKKy0JICB3YXJuX29wZW5fbWlzc2luZ19tb2RlICgpOworKwkgIGVycm9yX29w ZW5fbWlzc2luZ19tb2RlICgpOworIAkgIHJldHVybiBteW9wZW4yIChwYXRoLCBvZmxhZyk7Cisg CX0KKyAgICAgICByZXR1cm4gbXlvcGVudmEgKHBhdGgsIG9mbGFnLCBfX2J1aWx0aW5fdmFfYXJn X3BhY2sgKCkpOworLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL2V4dC92YS1hcmctcGFjay1sZW4t Mi5DLmpqCTIwMDctMDktMjUgMTU6MTY6MDMuMDAwMDAwMDAwICswMjAwCisrKysgZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvZXh0L3ZhLWFyZy1wYWNrLWxlbi0yLkMJMjAwNy0wOS0yNSAxNToxNjowMy4w MDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNDIgQEAKKysvLyB7IGRnLWRvIGNvbXBpbGUgfQor Ky8vIHsgZGctb3B0aW9ucyAiLU8yIiB9CisrCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworK2V4 dGVybiBpbnQgZXJyb3Jfb3Blbl9taXNzaW5nX21vZGUgKHZvaWQpCisrICBfX2F0dHJpYnV0ZV9f KChfX2Vycm9yX18gKCJvcGVuIHdpdGggT19DUkVBVCBuZWVkcyAzIGFyZ3VtZW50cywgb25seSAy IHdlcmUgZ2l2ZW4iKSkpOworK2V4dGVybiBpbnQgd2Fybl9vcGVuX3Rvb19tYW55X2FyZ3VtZW50 cyAodm9pZCkKKysgIF9fYXR0cmlidXRlX18oKF9fd2FybmluZ19fICgib3BlbiBjYWxsZWQgd2l0 aCBtb3JlIHRoYW4gMyBhcmd1bWVudHMiKSkpOworKworK2V4dGVybiBpbnQgbXlvcGVuMiAoY29u c3QgY2hhciAqcGF0aCwgaW50IG9mbGFnKTsKKytleHRlcm4gaW50IG15b3BlbnZhIChjb25zdCBj aGFyICpwYXRoLCBpbnQgb2ZsYWcsIC4uLik7CisrCisrZXh0ZXJuIGlubGluZSBfX2F0dHJpYnV0 ZV9fKChhbHdheXNfaW5saW5lLCBnbnVfaW5saW5lKSkgaW50CisrbXlvcGVuIChjb25zdCBjaGFy ICpwYXRoLCBpbnQgb2ZsYWcsIC4uLikKKyt7CisrICBpZiAoX19idWlsdGluX3ZhX2FyZ19wYWNr X2xlbiAoKSA+IDEpCisrICAgIHdhcm5fb3Blbl90b29fbWFueV9hcmd1bWVudHMgKCk7CS8vIHsg ZGctd2FybmluZyAiY2FsbGVkIHdpdGggbW9yZSB0aGFuIDMiIH0KKysKKysgIGlmIChfX2J1aWx0 aW5fY29uc3RhbnRfcCAob2ZsYWcpKQorKyAgICB7CisrICAgICAgaWYgKChvZmxhZyAmIDB4NDAp ICE9IDAgJiYgX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbiAoKSA8IDEpCisrCXsKKysJICBlcnJv cl9vcGVuX21pc3NpbmdfbW9kZSAoKTsJLy8geyBkZy1lcnJvciAibmVlZHMgMyBhcmd1bWVudHMs IG9ubHkgMiB3ZXJlIGdpdmVuIiB9CisrCSAgcmV0dXJuIG15b3BlbjIgKHBhdGgsIG9mbGFnKTsK KysJfQorKyAgICAgIHJldHVybiBteW9wZW52YSAocGF0aCwgb2ZsYWcsIF9fYnVpbHRpbl92YV9h cmdfcGFjayAoKSk7CisrICAgIH0KKysKKysgIGlmIChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVu ICgpIDwgMSkKKysgICAgcmV0dXJuIG15b3BlbjIgKHBhdGgsIG9mbGFnKTsKKysKKysgIHJldHVy biBteW9wZW52YSAocGF0aCwgb2ZsYWcsIF9fYnVpbHRpbl92YV9hcmdfcGFjayAoKSk7CisrfQor KworK2ludAorK21haW4gKHZvaWQpCisreworKyAgbXlvcGVuICgiaCIsIDB4NDMpOworKyAgbXlv cGVuICgiaSIsIDB4NDMsIDA2NDQsIDA2NTUpOworKyAgcmV0dXJuIDA7CisrfQoKZGlmZiAtLWdp dCBhL2djYzQxLWpkd3AucGF0Y2ggYi9nY2M0MS1qZHdwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTRiN2IKLS0tIC9kZXYvbnVsbAorKysgYi9nY2M0MS1qZHdw LnBhdGNoCkBAIC0wLDAgKzEsMjQyIEBACisyMDA3LTA5LTI0ICBLZWl0aCBTZWl0eiAgPGtlaXRo c0ByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2p2bS5oIChzdHJ1Y3QgbmF0VGhyZWFkKTogQWRk IG5ldyBmaWVsZCAnZnJhbWUnLgorCSogaW5jbHVkZS9qYXZhLWludGVycC5oIChfSnZfRnJhbWUp OiBVc2UgX0p2X1RocmVhZFN0YWNrUGVlaywKKwlfSnZfVGhyZWFkU3RhY2tQb3AsIGFuZCBfSnZf VGhyZWFkU3RhY2tQdXNoIGluc3RlYWQgb2YKKwlqYXZhLmxhbmcuVGhyZWFkLmZyYW1lLgorCSh+ X0p2X0ZyYW1lKTogVXNlIF9Kdl9UaHJlYWRTdGFja1BvcC4KKwkqIGphdmEvbGFuZy9uYXRUaHJl YWQuY2MgKF9Kdl9UaHJlYWRTdGFja1BlZWspOiBOZXcgZnVuY3Rpb24uCisJKF9Kdl9UaHJlYWRT dGFja1B1c2gpOiBOZXcgZnVuY3Rpb24uCisJKF9Kdl9UaHJlYWRTdGFja1BvcCk6IE5ldyBmdW5j dGlvbi4KKwkqIGphdmEvbGFuZy9UaHJlYWQuamF2YSAoZnJhbWUpOiBSZW1vdmUgZmllbGQgdG8g cmVzdG9yZQorCUMrKyBBQkkgY29tcGF0aWJpbGl0eS4KKwkqIGdudS9jbGFzc3BhdGgvamR3cC9u YXRWTVZpcnR1YWxNYWNoaW5lLmNjIChnZXRGcmFtZXMpOiBVc2UKKwlfSnZfVGhyZWFkU3RhY2tQ ZWVrLgorCShnZXRGcmFtZSk6IExpa2V3aXNlLgorCSogZ251L2NsYXNzcGF0aC9qZHdwL25hdFZN RnJhbWUuY2MgKGdldEZyYW1lRGVwdGgpOiBMaWtld2lzZS4KKwkqIGp2bXRpLmNjIChnZXRMb2Nh bEZyYW1lKTogTGlrZXdpc2UuCisJKF9Kdl9KVk1USV9HZXRGcmFtZUNvdW50KTogTGlrZXdpc2Uu CisJKF9Kdl9KVk1USV9HZXRUaHJlYWRTdGF0ZSk6IExpa2V3aXNlLgorCShfSnZfSlZNVElfR2V0 U3RhY2tUcmFjZSk6IExpa2V3aXNlLgorCSogaW50ZXJwcmV0LmNjIChfSnZfUmVwb3J0SlZNVElF eGNlcHRpb25UaHJvdyk6IExpa2V3aXNlLgorCSogaGVhZGVycy50eHQgKGphdmEvbGFuZy9UaHJl YWQuaCk6IFByZXBlbmQgZGVjbGFyYXRpb25zCisJZm9yIF9Kdl9UaHJlYWRTdGFja1BlZWssIF9K dl9UaHJlYWRTdGFja1B1c2gsIGFuZCBfSnZfVGhyZWFkU3RhY2tQb3AuCisJQWRkIGFzIGZyaWVu ZCBmdW5jdGlvbnMuCisJKiBqbmkuY2MgKF9Kdl9KTklNZXRob2Q6OmNhbGwpOiBQdXNoIGEgZnJh bWUgb250byB0aGUgc3RhY2sgd2hlbgorCWNhbGxpbmcgYSBKTkkgbWV0aG9kLgorCistLS0gbGli amF2YS9pbnRlcnByZXQuY2MJKHJldmlzaW9uIDEyODYwMykKKysrKyBsaWJqYXZhL2ludGVycHJl dC5jYwkod29ya2luZyBjb3B5KQorQEAgLTE3MDksNyArMTcwOSw3IEBACisgX0p2X1JlcG9ydEpW TVRJRXhjZXB0aW9uVGhyb3cgKGp0aHJvd2FibGUgZXgpCisgeworICAganRocmVhZCB0aHJlYWQg PSA6OmphdmE6Omxhbmc6OlRocmVhZDo6Y3VycmVudFRocmVhZCAoKTsKKy0gIF9Kdl9GcmFtZSAq ZnJhbWUgPSByZWludGVycHJldF9jYXN0PF9Kdl9GcmFtZSAqPiAodGhyZWFkLT5mcmFtZSk7Cisr ICBfSnZfRnJhbWUgKmZyYW1lID0gX0p2X1RocmVhZFN0YWNrUGVlayAodGhyZWFkKTsKKyAgIGpt ZXRob2RJRCB0aHJvd19tZXRoID0gZnJhbWUtPnNlbGYtPmdldF9tZXRob2QgKCk7CisgICBqbG9j YXRpb24gdGhyb3dfbG9jID0gLTE7CisgICBpZiAoZnJhbWUtPmZyYW1lX3R5cGUgPT0gZnJhbWVf aW50ZXJwcmV0ZXIpCistLS0gbGliamF2YS9pbmNsdWRlL2phdmEtaW50ZXJwLmgJKHJldmlzaW9u IDEyODYwMykKKysrKyBsaWJqYXZhL2luY2x1ZGUvamF2YS1pbnRlcnAuaAkod29ya2luZyBjb3B5 KQorQEAgLTM5MSwxNCArMzkxLDE0IEBACisgICB7CisgICAgIHNlbGYgPSBzOworICAgICBmcmFt ZV90eXBlID0gdHlwZTsKKy0gICAgbmV4dCA9IChfSnZfRnJhbWUgKikgdGhyLT5mcmFtZTsKKy0g ICAgdGhyLT5mcmFtZSA9IChnbnU6Omdjajo6UmF3RGF0YSAqKSB0aGlzOworKyAgICBuZXh0ID0g X0p2X1RocmVhZFN0YWNrUGVlayAodGhyKTsKKysgICAgX0p2X1RocmVhZFN0YWNrUHVzaCAodGhy LCB0aGlzKTsKKyAgICAgdGhyZWFkID0gdGhyOworICAgfQorIAorICAgfl9Kdl9GcmFtZSAoKQor ICAgeworLSAgICB0aHJlYWQtPmZyYW1lID0gKGdudTo6Z2NqOjpSYXdEYXRhICopIG5leHQ7Cisr ICAgIF9Kdl9UaHJlYWRTdGFja1BvcCAodGhyZWFkKTsKKyAgIH0KKyAKKyAgIGludCBkZXB0aCAo KQorLS0tIGxpYmphdmEvaW5jbHVkZS9qdm0uaAkocmV2aXNpb24gMTI4NjAzKQorKysrIGxpYmph dmEvaW5jbHVkZS9qdm0uaAkod29ya2luZyBjb3B5KQorQEAgLTM0LDYgKzM0LDggQEAKKyAKKyAj aW5jbHVkZSA8c3lzZGVwL2xvY2tzLmg+CisgCisrY2xhc3MgX0p2X0ZyYW1lOworKworIC8qIE1h Y3JvIGZvciBwb3NzaWJsZSB1bnVzZWQgYXJndW1lbnRzLiAgKi8KKyAjZGVmaW5lIE1BWUJFX1VO VVNFRCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKKyAKK0BAIC03NjcsNiArNzY5LDEyIEBA CisgCisgICAvLyBFYWNoIHRocmVhZCBoYXMgaXRzIG93biBKTkkgb2JqZWN0LgorICAgX0p2X0pO SUVudiAqam5pX2VudjsKKysKKysgIC8vIERlc2NyaWJlcyB0aGUgdG9wbW9zdCBmcmFtZSBpbiB0 aGUgdGhyZWFkJ3MgY29tcG9zaXRlCisrICAvLyAoaW50ZXJwICsgSk5JKSBzdGFjay4gQWRkZWQg aGVyZSB0byBtYWludGFpbiBDKysgQUJJCisrICAvLyBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlv dXMgdmVyc2lvbnMuIE5ld2VyIHZlcnNpb25zCisrICAvLyBvZiBnY2ogcHV0IHRoaXMgaW4gamF2 YS9sYW5nL1RocmVhZC5qYXZhLgorKyAgX0p2X0ZyYW1lICpmcmFtZTsKKyB9OworIAorICNlbmRp ZiAvKiBfX0pBVkFfSlZNX0hfXyAqLworLS0tIGxpYmphdmEvam5pLmNjCShyZXZpc2lvbiAxMjg2 MDMpCisrKysgbGliamF2YS9qbmkuY2MJKHdvcmtpbmcgY29weSkKK0BAIC0yMzQzLDYgKzIzNDMs MTAgQEAKKyAgIC8vIENvcHkgb3ZlciBwYXNzZWQtaW4gYXJndW1lbnRzLgorICAgbWVtY3B5ICgm cmVhbF9hcmdzW29mZnNldF0sIGFyZ3MsIF90aGlzLT5hcmdzX3Jhd19zaXplKTsKKyAKKysgIC8v IEFkZCBhIGZyYW1lIHRvIHRoZSBjb21wb3NpdGUgKGludGVycHJldGVkICsgSk5JKSBjYWxsIHN0 YWNrCisrICBqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZCA9IGphdmE6Omxhbmc6OlRocmVhZDo6 Y3VycmVudFRocmVhZCAoKTsKKysgIF9Kdl9OYXRpdmVGcmFtZSBuYXRfZnJhbWUgKF90aGlzLCB0 aHJlYWQpOworKworICAgLy8gVGhlIGFjdHVhbCBjYWxsIHRvIHRoZSBKTkkgZnVuY3Rpb24uCisg I2lmIEZGSV9OQVRJVkVfUkFXX0FQSQorICAgZmZpX3Jhd19jYWxsICgmX3RoaXMtPmpuaV9jaWYs ICh2b2lkICgqKSgpKSBfdGhpcy0+ZnVuY3Rpb24sCistLS0gbGliamF2YS9qdm10aS5jYwkocmV2 aXNpb24gMTI4NjAzKQorKysrIGxpYmphdmEvanZtdGkuY2MJKHdvcmtpbmcgY29weSkKK0BAIC0y MjgsNyArMjI4LDcgQEAKKyAgIFRIUkVBRF9DSEVDS19WQUxJRCAodGhyZWFkKTsKKyAgIFRIUkVB RF9DSEVDS19JU19BTElWRSAodGhyZWFkKTsKKyAgIAorLSAgX0p2X0ZyYW1lICpmcmFtZSA9IHJl aW50ZXJwcmV0X2Nhc3Q8X0p2X0ZyYW1lICo+ICh0aHJlYWQtPmZyYW1lKTsKKysgIF9Kdl9GcmFt ZSAqZnJhbWUgPSBfSnZfVGhyZWFkU3RhY2tQZWVrICh0aHJlYWQpOworICAgCisgICBmb3IgKGlu dCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgIHsgICAgCitAQCAtNTE2LDcgKzUxNiw3IEBA CisgICBUSFJFQURfQ0hFQ0tfVkFMSUQgKHRocmVhZCk7CisgICBUSFJFQURfQ0hFQ0tfSVNfQUxJ VkUgKHRocmVhZCk7CisgICAgCistICBfSnZfRnJhbWUgKmZyYW1lID0gcmVpbnRlcnByZXRfY2Fz dDxfSnZfRnJhbWUgKj4gKHRocmVhZC0+ZnJhbWUpOworKyAgX0p2X0ZyYW1lICpmcmFtZSA9IF9K dl9UaHJlYWRTdGFja1BlZWsgKHRocmVhZCk7CisgICAoKmZyYW1lX2NvdW50KSA9IGZyYW1lLT5k ZXB0aCAoKTsKKyAgIHJldHVybiBKVk1USV9FUlJPUl9OT05FOworIH0KK0BAIC01NDMsNyArNTQz LDcgQEAKKyAgICAgICBpZiAodGhyZWFkLT5pc0ludGVycnVwdGVkICgpKQorIAlzdGF0ZSB8PSBK Vk1USV9USFJFQURfU1RBVEVfSU5URVJSVVBURUQ7CisgCistICAgICAgX0p2X0ZyYW1lICpmcmFt ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8X0p2X0ZyYW1lICo+ICh0aHJlYWQtPmZyYW1lKTsKKysgICAg ICBfSnZfRnJhbWUgKmZyYW1lID0gX0p2X1RocmVhZFN0YWNrUGVlayAodGhyZWFkKTsKKyAgICAg ICBpZiAoZnJhbWUgIT0gTlVMTCAmJiBmcmFtZS0+ZnJhbWVfdHlwZSA9PSBmcmFtZV9uYXRpdmUp CisgCXN0YXRlIHw9IEpWTVRJX1RIUkVBRF9TVEFURV9JTl9OQVRJVkU7CisgCitAQCAtMTI3Myw3 ICsxMjczLDcgQEAKKyAgIElMTEVHQUxfQVJHVU1FTlQgKHN0YXJ0X2RlcHRoID49ICgqZnJhbWVf Y291bnQpKTsKKyAgIElMTEVHQUxfQVJHVU1FTlQgKHN0YXJ0X2RlcHRoIDwgKC0oKmZyYW1lX2Nv dW50KSkpOworICAgCistICBfSnZfRnJhbWUgKmZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxfSnZf RnJhbWUgKj4gKHRocmVhZC0+ZnJhbWUpOworKyAgX0p2X0ZyYW1lICpmcmFtZSA9IF9Kdl9UaHJl YWRTdGFja1BlZWsgKHRocmVhZCk7CisgCisgICAvLyBJZiBzdGFydF9kZXB0aCBpcyBuZWdhdGl2 ZSB1c2UgdGhpcyB0byBkZXRlcm1pbmUgYXQgd2hhdCBkZXB0aCB0byBzdGFydAorICAgLy8gdGhl IHRyYWNlIGJ5IGFkZGluZyBpdCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjYWxsIHN0YWNrLiAgVGhp cyBhbGxvd3MgdGhlCistLS0gbGliamF2YS9oZWFkZXJzLnR4dAkocmV2aXNpb24gMTI4NjAzKQor KysrIGxpYmphdmEvaGVhZGVycy50eHQJKHdvcmtpbmcgY29weSkKK0BAIC02LDYgKzYsNyBAQAor IAorIGNsYXNzIGphdmEvbGFuZy9UaHJlYWQKKyBwcmVwZW5kIGNsYXNzIF9Kdl9KTklFbnY7Cisr cHJlcGVuZCBjbGFzcyBfSnZfRnJhbWU7CisgcHJlcGVuZCAjZGVmaW5lIF9KVl9OT1RfT1dORVIg MQorIHByZXBlbmQgI2RlZmluZSBfSlZfSU5URVJSVVBURUQgMgorIHByZXBlbmQgX0p2X0pOSUVu diAqIF9Kdl9HZXRDdXJyZW50Sk5JRW52ICgpOworQEAgLTE3LDYgKzE4LDkgQEAKKyBwcmVwZW5k IGppbnQgX0p2X0RldGFjaEN1cnJlbnRUaHJlYWQgKCk7CisgcHJlcGVuZCBzdHJ1Y3QgX0p2X1Ro cmVhZF90OworIHByZXBlbmQgX0p2X1RocmVhZF90KiBfSnZfVGhyZWFkR2V0RGF0YSAoamF2YTo6 bGFuZzo6VGhyZWFkKiB0aHJlYWQpOworK3ByZXBlbmQgX0p2X0ZyYW1lICpfSnZfVGhyZWFkU3Rh Y2tQZWVrIChqYXZhOjpsYW5nOjpUaHJlYWQgKnRocmVhZCk7CisrcHJlcGVuZCB2b2lkIF9Kdl9U aHJlYWRTdGFja1B1c2ggKGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkLCBfSnZfRnJhbWUgKmZy YW1lKTsKKytwcmVwZW5kIHZvaWQgX0p2X1RocmVhZFN0YWNrUG9wIChqYXZhOjpsYW5nOjpUaHJl YWQgKnRocmVhZCk7CisgZnJpZW5kIF9Kdl9KTklFbnYgKiA6Ol9Kdl9HZXRDdXJyZW50Sk5JRW52 ICgpOworIGZyaWVuZCB2b2lkIDo6X0p2X1NldEN1cnJlbnRKTklFbnYgKF9Kdl9KTklFbnYgKmVu dik7CisgZnJpZW5kIHZvaWQgOjpfSnZfVGhyZWFkUnVuIChqYXZhOjpsYW5nOjpUaHJlYWQqIHRo cmVhZCk7CitAQCAtMjQsNiArMjgsOSBAQAorIGZyaWVuZCBqYXZhOjpsYW5nOjpUaHJlYWQqIDo6 X0p2X0F0dGFjaEN1cnJlbnRUaHJlYWQgKGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFk R3JvdXAqIGdyb3VwKTsKKyBmcmllbmQgamF2YTo6bGFuZzo6VGhyZWFkKiA6Ol9Kdl9BdHRhY2hD dXJyZW50VGhyZWFkQXNEYWVtb24gKGpzdHJpbmcgbmFtZSwgamF2YTo6bGFuZzo6VGhyZWFkR3Jv dXAqIGdyb3VwKTsKKyBmcmllbmQgamludCAoOjpfSnZfRGV0YWNoQ3VycmVudFRocmVhZCkgKCk7 CisrZnJpZW5kIF9Kdl9GcmFtZSAqOjpfSnZfVGhyZWFkU3RhY2tQZWVrIChqYXZhOjpsYW5nOjpU aHJlYWQgKnRocmVhZCk7CisrZnJpZW5kIHZvaWQgOjpfSnZfVGhyZWFkU3RhY2tQdXNoIChqYXZh OjpsYW5nOjpUaHJlYWQgKnRocmVhZCwgX0p2X0ZyYW1lICpmcmFtZSk7CisrZnJpZW5kIHZvaWQg OjpfSnZfVGhyZWFkU3RhY2tQb3AgKGphdmE6Omxhbmc6OlRocmVhZCAqdGhyZWFkKTsKKyAKKyBj bGFzcyBqYXZhL2xhbmcvU3RyaW5nCisgcHJlcGVuZCBqY2hhciogX0p2X0dldFN0cmluZ0NoYXJz IChqc3RyaW5nIHN0cik7CistLS0gbGliamF2YS9nbnUvY2xhc3NwYXRoL2pkd3AvbmF0Vk1GcmFt ZS5jYwkocmV2aXNpb24gMTI4NjAzKQorKysrIGxpYmphdmEvZ251L2NsYXNzcGF0aC9qZHdwL25h dFZNRnJhbWUuY2MJKHdvcmtpbmcgY29weSkKK0BAIC0xODEsNyArMTgxLDcgQEAKKyBnZXRGcmFt ZURlcHRoIChfSnZfRnJhbWUgKmZyYW1lKQorIHsKKyAgIGppbnQgZGVwdGggPSAwOworLSAgX0p2 X0ZyYW1lICp0b3BfZnJhbWUgPSAoX0p2X0ZyYW1lICopIGZyYW1lLT50aHJlYWQtPmZyYW1lOwor KyAgX0p2X0ZyYW1lICp0b3BfZnJhbWUgPSBfSnZfVGhyZWFkU3RhY2tQZWVrIChmcmFtZS0+dGhy ZWFkKTsKKyAgIGppbnQgbnVtX2ZyYW1lcyA9IFZNVmlydHVhbE1hY2hpbmU6OmdldEZyYW1lQ291 bnQgKGZyYW1lLT50aHJlYWQpOworICAgCisgICB3aGlsZSAoZnJhbWUgIT0gdG9wX2ZyYW1lKQor LS0tIGxpYmphdmEvZ251L2NsYXNzcGF0aC9qZHdwL25hdFZNVmlydHVhbE1hY2hpbmUuY2MJKHJl dmlzaW9uIDEyODYwMykKKysrKyBsaWJqYXZhL2dudS9jbGFzc3BhdGgvamR3cC9uYXRWTVZpcnR1 YWxNYWNoaW5lLmNjCSh3b3JraW5nIGNvcHkpCitAQCAtNTUzLDcgKzU1Myw3IEBACisgICAgICAK KyAgIGZyYW1lX2xpc3QgPSBuZXcgOjpqYXZhOjp1dGlsOjpBcnJheUxpc3QgKG51bV9mcmFtZXMp OworICAgCistICBfSnZfRnJhbWUgKnZtX2ZyYW1lID0gcmVpbnRlcnByZXRfY2FzdDxfSnZfRnJh bWUgKj4gKHRocmVhZC0+ZnJhbWUpOworKyAgX0p2X0ZyYW1lICp2bV9mcmFtZSA9IF9Kdl9UaHJl YWRTdGFja1BlZWsgKHRocmVhZCk7CisgICAKKyAgIC8vIFRha2Ugc3RhcnQgZnJhbWVzIG9mZiB0 aGUgdG9wIG9mIHRoZSBzdGFjaworICAgd2hpbGUgKHZtX2ZyYW1lICE9IE5VTEwgJiYgc3RhcnQg PiAwKQorQEAgLTU4NCw3ICs1ODQsNyBAQAorIHsKKyAgIHVzaW5nIG5hbWVzcGFjZSBnbnU6OmNs YXNzcGF0aDo6amR3cDo6ZXhjZXB0aW9uOworICAgCistICBfSnZfRnJhbWUgKnZtX2ZyYW1lID0g KF9Kdl9GcmFtZSAqKSB0aHJlYWQtPmZyYW1lOworKyAgX0p2X0ZyYW1lICp2bV9mcmFtZSA9IF9K dl9UaHJlYWRTdGFja1BlZWsgKHRocmVhZCk7CisgICBqaW50IGRlcHRoID0gMDsKKyAgIF9Kdl9G cmFtZSAqZnJhbWUgPSByZWludGVycHJldF9jYXN0PF9Kdl9GcmFtZSAqPiAoZnJhbWVJRCk7IAor ICAgCistLS0gbGliamF2YS9qYXZhL2xhbmcvVGhyZWFkLmphdmEJKHJldmlzaW9uIDEyODYwMykK KysrKyBsaWJqYXZhL2phdmEvbGFuZy9UaHJlYWQuamF2YQkod29ya2luZyBjb3B5KQorQEAgLTE4 Niw5ICsxODYsNiBAQAorICAgLy8gVGhpcyBkZXNjcmliZXMgdGhlIHRvcC1tb3N0IGludGVycHJl dGVyIGZyYW1lIGZvciB0aGlzIHRocmVhZC4KKyAgIFJhd0RhdGEgaW50ZXJwX2ZyYW1lOworICAg CistICAvLyBUaGlzIGRlc2NyaWJlcyB0aGUgdG9wIG1vc3QgZnJhbWUgaW4gdGhlIGNvbXBvc2l0 ZSAoaW50ZXJwICsgSk5JKSBzdGFjaworLSAgUmF3RGF0YSBmcmFtZTsKKy0KKyAgIC8vIEN1cnJl bnQgc3RhdGUuCisgICB2b2xhdGlsZSBpbnQgc3RhdGU7CisgCistLS0gbGliamF2YS9qYXZhL2xh bmcvbmF0VGhyZWFkLmNjCShyZXZpc2lvbiAxMjg2MDMpCisrKysgbGliamF2YS9qYXZhL2xhbmcv bmF0VGhyZWFkLmNjCSh3b3JraW5nIGNvcHkpCitAQCAtMTUsNiArMTUsNyBAQAorICNpbmNsdWRl IDxnY2ovY25pLmg+CisgI2luY2x1ZGUgPGp2bS5oPgorICNpbmNsdWRlIDxqYXZhLXRocmVhZHMu aD4KKysjaW5jbHVkZSA8amF2YS1pbnRlcnAuaD4KKyAKKyAjaW5jbHVkZSA8Z251L2djai9SYXdE YXRhTWFuYWdlZC5oPgorICNpbmNsdWRlIDxqYXZhL2xhbmcvVGhyZWFkLmg+CitAQCAtNTI1LDMg KzUyNiwyNSBAQAorIAorICAgcmV0dXJuIDA7CisgfQorKworK19Kdl9GcmFtZSAqCisrX0p2X1Ro cmVhZFN0YWNrUGVlayAoamF2YTo6bGFuZzo6VGhyZWFkICp0aHJlYWQpCisreworKyAgc3RydWN0 IG5hdFRocmVhZCAqbnQgPSAobmF0VGhyZWFkICopIHRocmVhZC0+ZGF0YTsKKysgIHJldHVybiBu dC0+ZnJhbWU7CisrfQorKworK3ZvaWQKKytfSnZfVGhyZWFkU3RhY2tQdXNoIChqYXZhOjpsYW5n OjpUaHJlYWQgKnRocmVhZCwgX0p2X0ZyYW1lICpmcmFtZSkKKyt7CisrICBzdHJ1Y3QgbmF0VGhy ZWFkICpudCA9IChuYXRUaHJlYWQgKikgdGhyZWFkLT5kYXRhOworKyAgbnQtPmZyYW1lID0gZnJh bWU7CisrfQorKworK3ZvaWQKKytfSnZfVGhyZWFkU3RhY2tQb3AgKGphdmE6Omxhbmc6OlRocmVh ZCAqdGhyZWFkKQorK3sKKysgIHN0cnVjdCBuYXRUaHJlYWQgKm50ID0gKG5hdFRocmVhZCAqKSB0 aHJlYWQtPmRhdGE7CisrICBfSnZfRnJhbWUgKm5leHQgPSBudC0+ZnJhbWUtPm5leHQ7CisrICBu dC0+ZnJhbWUgPSBuZXh0OworK30KCmRpZmYgLS1naXQgYS9nY2M0MS1tYWtlaW5mby12ZXIucGF0 Y2ggYi9nY2M0MS1tYWtlaW5mby12ZXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDhjNDA0N2MuLjAwMDAwMDAKLS0tIGEvZ2NjNDEtbWFrZWluZm8tdmVyLnBhdGNoCisrKyAv ZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotMjAwNy0wOS0yMiAgSmFrdWIgSmVsaW5layAgPGph a3ViQHJlZGhhdC5jb20+Ci0KLQkqIGNvbmZpZ3VyZS5hYyAoTUFLRUlORk8pOiBIYW5kbGUgbWFr ZWluZm8gdmVyc2lvbiA0LjEwIGFuZCBhYm92ZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQu Ci0KLTIwMDctMDktMTUgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+Ci0KLQkq IGNvbmZpZ3VyZS5pbjogQ29ycmVjdCBtYWtlaW5mbyB2ZXJzaW9uIGNoZWNrLgotCSogY29uZmln dXJlOiBSZWdlbmVyYXRlLgotCi0tLS0gY29uZmlndXJlLmluLmpqCTIwMDctMDItMjAgMTY6NDE6 NTUuMDAwMDAwMDAwIC0wNTAwCi0rKysgY29uZmlndXJlLmluCTIwMDctMDktMjIgMDk6MzY6MDQu MDAwMDAwMDAwIC0wNDAwCi1AQCAtMjE1OSw3ICsyMTU5LDcgQEAgY2hhbmdlcXVvdGUoLCkKLSAg ICAgIyBGb3IgYW4gaW5zdGFsbGVkIG1ha2VpbmZvLCB3ZSByZXF1aXJlIGl0IHRvIGJlIGZyb20g dGV4aW5mbyA0LjIgb3IKLSAgICAgIyBoaWdoZXIsIGVsc2Ugd2UgdXNlIHRoZSAibWlzc2luZyIg ZHVtbXkuCi0gICAgIGlmICR7TUFLRUlORk99IC0tdmVyc2lvbiBcCi0tICAgICAgIHwgZWdyZXAg J3RleGluZm9bXjAtOV0qKFsxLTNdWzAtOV18NFwuWzItOV18WzUtOV0pJyA+L2Rldi9udWxsIDI+ JjE7IHRoZW4KLSsgICAgICAgfCBlZ3JlcCAndGV4aW5mb1teMC05XSooNFwuKFsyLTldfFsxLTld WzAtOV0pfFs1LTldfFsxLTldWzAtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICA6 Ci0gICAgIGVsc2UKLSAgICAgICBNQUtFSU5GTz0iJE1JU1NJTkcgbWFrZWluZm8iCi0tLS0gY29u ZmlndXJlLmpqCTIwMDctMDItMjAgMTY6NDE6NTUuMDAwMDAwMDAwIC0wNTAwCi0rKysgY29uZmln dXJlCTIwMDctMDktMjIgMDk6MzY6MjUuMDAwMDAwMDAwIC0wNDAwCi1AQCAtMzU3NCw3ICszNTc0 LDcgQEAgY2FzZSAiICRidWlsZF9jb25maWdkaXJzICIgaW4KLSAgICAgIyBGb3IgYW4gaW5zdGFs bGVkIG1ha2VpbmZvLCB3ZSByZXF1aXJlIGl0IHRvIGJlIGZyb20gdGV4aW5mbyA0LjIgb3IKLSAg ICAgIyBoaWdoZXIsIGVsc2Ugd2UgdXNlIHRoZSAibWlzc2luZyIgZHVtbXkuCi0gICAgIGlmICR7 TUFLRUlORk99IC0tdmVyc2lvbiBcCi0tICAgICAgIHwgZWdyZXAgJ3RleGluZm9bXjAtOV0qKFsx LTNdWzAtOV18NFwuWzItOV18WzUtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSsgICAgICAg fCBlZ3JlcCAndGV4aW5mb1teMC05XSooNFwuKFsyLTldfFsxLTldWzAtOV0pfFs1LTldfFsxLTld WzAtOV0pJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICA6Ci0gICAgIGVsc2UKLSAgICAg ICBNQUtFSU5GTz0iJE1JU1NJTkcgbWFrZWluZm8iCi0tLS0gZ2NjL2NvbmZpZ3VyZS5hYy5qagky MDA3LTAyLTIwIDE2OjM5OjEyLjAwMDAwMDAwMCAtMDUwMAotKysrIGdjYy9jb25maWd1cmUuYWMJ MjAwNy0wOS0yMiAwODozODowNy4wMDAwMDAwMDAgLTA0MDAKLUBAIC04MzMsNyArODMzLDcgQEAg TUlTU0lORz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJHNyY2RpcgotICMgdGhhdCB3ZSBjYW4g dXNlIGl0LgotIGdjY19BQ19DSEVDS19QUk9HX1ZFUihNQUtFSU5GTywgbWFrZWluZm8sIC0tdmVy c2lvbiwKLSAgIFtHTlUgdGV4aW5mby4qIFwoWzAtOV1bMC05Ll0qXCldLAotLSAgWzQuWzItOV0q XSkKLSsgIFs0LlsyLTldKnw0LlsxLTldWzAtOV0qfFs1LTldKnxbMS05XVswLTldKl0pCi0gaWYg dGVzdCAkZ2NjX2N2X3Byb2dfbWFrZWluZm9fbW9kZXJuID0gbm87IHRoZW4KLSAgIE1BS0VJTkZP PSIkTUlTU0lORyBtYWtlaW5mbyIKLSAgIEFDX01TR19XQVJOKFsKLS0tLSBnY2MvY29uZmlndXJl LmpqCTIwMDctMDItMjAgMTY6Mzk6MTIuMDAwMDAwMDAwIC0wNTAwCi0rKysgZ2NjL2NvbmZpZ3Vy ZQkyMDA3LTA5LTIyIDA4OjM4OjMwLjAwMDAwMDAwMCAtMDQwMAotQEAgLTc0OTYsNyArNzQ5Niw3 IEBAIGVsc2UKLSAgIGVjaG8gImNvbmZpZ3VyZTo3NDk2OiB2ZXJzaW9uIG9mIG1ha2VpbmZvIGlz ICRhY19wcm9nX3ZlcnNpb24iID4mNQotICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCi0gICAg ICcnKSAgICAgZ2NjX2N2X3Byb2dfbWFrZWluZm9fbW9kZXJuPW5vOzsKLS0gICAgNC5bMi05XSop Ci0rICAgIDQuWzItOV0qfDQuWzEtOV1bMC05XSp8WzUtOV0qfFsxLTldWzAtOV0qKQotICAgICAg ICAgICAgIGdjY19jdl9wcm9nX21ha2VpbmZvX21vZGVybj15ZXM7OwotICAgICAqKSAgICAgIGdj Y19jdl9wcm9nX21ha2VpbmZvX21vZGVybj1ubzs7Ci0gICBlc2FjCgpkaWZmIC0tZ2l0IGEvZ2Nj NDEtcHBjLXN5bmMtcWloaS5wYXRjaCBiL2djYzQxLXBwYy1zeW5jLXFpaGkucGF0Y2gKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzNlOGEuLjAwMDAwMDAKLS0tIGEvZ2NjNDEtcHBj LXN5bmMtcWloaS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTIwMDctMDgt MjkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgotCi0JKiBjb25maWcvcnM2MDAw L3JzNjAwMC5jIChyczYwMDBfZW1pdF9zeW5jKTogRm9yIFFJIG9yIEhJIG1vZGUKLQl1c2VkX20s IGV2ZW4gaWYgaXQgaXMgMzItYml0IGFsaWduZWQsIGFkanVzdCB1c2VkX20gTUVNIHRvIGhhdmUK LQlTSW1vZGUgYW5kIHVwZGF0ZSBtLiAgRG9uJ3QgcnVuIGdlbl9sb3dwYXJ0X2NvbW1vbiBvbiBh cmJpdHJhcnkKLQltZW1vcnkgYWRkcmVzcywgZm9yY2UgaXQgdG8gcmVnaXN0ZXIgZmlyc3QuCi0K LQkqIGdjYy5kZy9zeW5jLTIuYyAoQUlfQUxJR04pOiBEZWZpbmUgaWYgbm90IGRlZmluZWQuCi0J KEFJKTogQWRkIEFJX0FMSUdOLgotCSogZ2NjLmRnL3N5bmMtMy5jOiBOZXcgdGVzdC4KLQotLS0t IGdjYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jLmpqCTIwMDctMDgtMjcgMTQ6NTY6MzYuMDAwMDAw MDAwICswMjAwCi0rKysgZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMJMjAwNy0wOC0yOSAyMjox NTo0MS4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xMjc1NywxNCArMTI3NTcsMTYgQEAgcnM2MDAwX2Vt aXRfc3luYyAoZW51bSBydHhfY29kZSBjb2RlLCBlbgotIAkgICAgaXNoaWZ0ID0gR0VUX01PREVf QklUU0laRSAoU0ltb2RlKSAtIEdFVF9NT0RFX0JJVFNJWkUgKG1vZGUpOwotIAotIAkgIHNoaWZ0 ID0gR0VOX0lOVCAoaXNoaWZ0KTsKLSsJICB1c2VkX20gPSBjaGFuZ2VfYWRkcmVzcyAodXNlZF9t LCBTSW1vZGUsIDApOwotIAl9Ci0gICAgICAgZWxzZQotIAl7Ci0gCSAgcnR4IGFkZHJTSSwgYWxp Z25lZF9hZGRyOwotIAkgIGludCBzaGlmdF9tYXNrID0gbW9kZSA9PSBRSW1vZGUgPyAweDE4IDog MHgxMDsKLSAKLS0JICBhZGRyU0kgPSBmb3JjZV9yZWcgKFNJbW9kZSwgZ2VuX2xvd3BhcnRfY29t bW9uIChTSW1vZGUsCi0tCQkJCQkJCSAgWEVYUCAodXNlZF9tLCAwKSkpOwotKwkgIGFkZHJTSSA9 IGdlbl9sb3dwYXJ0X2NvbW1vbiAoU0ltb2RlLAotKwkJCQkgICAgICAgZm9yY2VfcmVnIChQbW9k ZSwgWEVYUCAodXNlZF9tLCAwKSkpOwotKwkgIGFkZHJTSSA9IGZvcmNlX3JlZyAoU0ltb2RlLCBh ZGRyU0kpOwotIAkgIHNoaWZ0ID0gZ2VuX3JlZ19ydHggKFNJbW9kZSk7Ci0gCi0gCSAgZW1pdF9p bnNuIChnZW5fcmx3aW5tIChzaGlmdCwgYWRkclNJLCBHRU5fSU5UICgzKSwKLUBAIC0xMjc3Nywx NCArMTI3NzksMTQgQEAgcnM2MDAwX2VtaXRfc3luYyAoZW51bSBydHhfY29kZSBjb2RlLCBlbgot IAkJCQkgICAgICAgMSwgT1BUQUJfTElCX1dJREVOKTsKLSAJICB1c2VkX20gPSBjaGFuZ2VfYWRk cmVzcyAodXNlZF9tLCBTSW1vZGUsIGFsaWduZWRfYWRkcik7Ci0gCSAgc2V0X21lbV9hbGlnbiAo dXNlZF9tLCAzMik7Ci0tCSAgLyogSXQncyBzYWZlIHRvIGtlZXAgdGhlIG9sZCBhbGlhcyBzZXQg b2YgVVNFRF9NLCBiZWNhdXNlCi0tCSAgICAgdGhlIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIG9u bHkgYWZmZWN0cyB0aGUgb3JpZ2luYWwKLS0JICAgICBVU0VEX00uICAqLwotLQkgIGlmIChHRVRf Q09ERSAobSkgPT0gTk9UKQotLQkgICAgbSA9IGdlbl9ydHhfTk9UIChTSW1vZGUsIHVzZWRfbSk7 Ci0tCSAgZWxzZQotLQkgICAgbSA9IHVzZWRfbTsKLSAJfQotKyAgICAgIC8qIEl0J3Mgc2FmZSB0 byBrZWVwIHRoZSBvbGQgYWxpYXMgc2V0IG9mIFVTRURfTSwgYmVjYXVzZQotKwkgdGhlIG9wZXJh dGlvbiBpcyBhdG9taWMgYW5kIG9ubHkgYWZmZWN0cyB0aGUgb3JpZ2luYWwKLSsJIFVTRURfTS4g ICovCi0rICAgICAgaWYgKEdFVF9DT0RFIChtKSA9PSBOT1QpCi0rCW0gPSBnZW5fcnR4X05PVCAo U0ltb2RlLCB1c2VkX20pOwotKyAgICAgIGVsc2UKLSsJbSA9IHVzZWRfbTsKLSAKLSAgICAgICBp ZiAoR0VUX0NPREUgKG9wKSA9PSBOT1QpCi0gCXsKLS0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy9z eW5jLTIuYy5qagkyMDA2LTEwLTA1IDAwOjI1OjMyLjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL3N5bmMtMi5jCTIwMDctMDgtMjkgMjE6NDk6NDcuMDAwMDAwMDAwICsw MjAwCi1AQCAtOCw3ICs4LDExIEBACi0gZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOwotIGV4dGVy biB2b2lkICptZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBfX1NJWkVfVFlQRV9fKTsKLSAK LS1zdGF0aWMgY2hhciBBSVsxOF07Ci0rI2lmbmRlZiBBSV9BTElHTgotKyNkZWZpbmUgQUlfQUxJ R04KLSsjZW5kaWYKLSsKLStzdGF0aWMgY2hhciBBSVsxOF0gQUlfQUxJR047Ci0gc3RhdGljIGNo YXIgaW5pdF9xaVsxOF0gPSB7IDMsNSw3LDksMCwwLDAsMCwtMSwwLDAsMCwwLDAsLTEsMCwwLDAg fTsKLSBzdGF0aWMgY2hhciB0ZXN0X3FpWzE4XSA9IHsgMyw1LDcsOSwxLDQsMjIsLTEyLDcsOCw5 LDcsMSwtMTIsNyw4LDksNyB9OwotIAotLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3N5bmMtMy5j LmpqCTIwMDctMDgtMjkgMjE6NDk6NTkuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvc3luYy0zLmMJMjAwNy0wOC0yOSAyMjowMDozMS4wMDAwMDAwMDAgKzAyMDAKLUBA IC0wLDAgKzEsMTAgQEAKLSsvKiB7IGRnLWRvIHJ1biB9ICovCi0rLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgc3luY19jaGFyX3Nob3J0IH0gKi8KLSsvKiB7IGRnLW9wdGlvbnMgIi1P MiIgfSAqLwotKy8qIHsgZGctb3B0aW9ucyAiLW1hcmNoPWk0ODYgLU8yIiB7IHRhcmdldCB7IHsg aT84Ni0qLSogeDg2XzY0LSotKiB9ICYmIGlscDMyIH0gfSB9ICovCi0rLyogeyBkZy1vcHRpb25z ICItbWNwdT12OSAtTzIiIHsgdGFyZ2V0IHNwYXJjKi0qLSogfSB9ICovCi0rCi0rLyogVGVzdCBm dW5jdGlvbmFsaXR5IG9mIHRoZSBpbnRyaW5zaWNzIGZvciAnc2hvcnQnIGFuZCAnY2hhcicuICAq LwotKwotKyNkZWZpbmUgQUlfQUxJR04gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18gKDQpKSkK LSsjaW5jbHVkZSAic3luYy0yLmMiCgpkaWZmIC0tZ2l0IGEvZ2NjNDEtcHBjLXRyYW1wLnBhdGNo IGIvZ2NjNDEtcHBjLXRyYW1wLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx NDViNjI4Li4wMDAwMDAwCi0tLSBhL2djYzQxLXBwYy10cmFtcC5wYXRjaAorKysgL2Rldi9udWxs CkBAIC0xLDM0ICswLDAgQEAKLTIwMDctMDgtMjAgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRo YXQuY29tPgotCi0JKiBjb25maWcvcnM2MDAwL3RyYW1wLmFzbTogSW5jbHVkZSBjb25maWcuaC4K LQlDaGVjayBfX1BJQ19fIG9yIF9fcGljX18gbWFjcm8gaW5zdGVhZCBvZiBTSEFSRUQuCi0KLS0t LSBnY2MvY29uZmlnL3JzNjAwMC90cmFtcC5hc20uamoJMjAwNi0xMC0wNSAwMDoyODozMy4wMDAw MDAwMDAgKzAyMDAKLSsrKyBnY2MvY29uZmlnL3JzNjAwMC90cmFtcC5hc20JMjAwNy0wOC0yMCAy MzoyMDo1Mi4wMDAwMDAwMDAgKzAyMDAKLUBAIC0xLDYgKzEsNiBAQAotIC8qICBTcGVjaWFsIHN1 cHBvcnQgZm9yIHRyYW1wb2xpbmVzCi0gICoKLS0gKiAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5 NywgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSsgKiAgIENvcHlyaWdodCAo QykgMTk5NiwgMTk5NywgMjAwMCwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K LSAgKiAgIFdyaXR0ZW4gQnkgTWljaGFlbCBNZWlzc25lcgotICAqIAotICAqIFRoaXMgZmlsZSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 Ci1AQCAtMzcsNyArMzcsOCBAQAotIAotIAkuZmlsZQkidHJhbXAuYXNtIgotIAkuc2VjdGlvbiAi LnRleHQiCi0tCSNpbmNsdWRlICJwcGMtYXNtLmgiCi0rI2luY2x1ZGUgInBwYy1hc20uaCIKLSsj aW5jbHVkZSAiY29uZmlnLmgiCi0gCi0gI2lmbmRlZiBfX3Bvd2VycGM2NF9fCi0gCS50eXBlCXRy YW1wb2xpbmVfaW5pdGlhbCxAb2JqZWN0Ci1AQCAtMTA1LDcgKzEwNiw3IEBAIEZVTkNfU1RBUlQo X190cmFtcG9saW5lX3NldHVwKQotIAlibHIKLSAKLSAuTGFib3J0OgotLSNpZiBkZWZpbmVkIFNI QVJFRCAmJiBkZWZpbmVkIEhBVkVfQVNfUkVMMTYKLSsjaWYgKGRlZmluZWQgX19QSUNfXyB8fCBk ZWZpbmVkIF9fcGljX18pICYmIGRlZmluZWQgSEFWRV9BU19SRUwxNgotIAliY2wJMjAsMzEsMWYK LSAxOgltZmxyCXIzMAotIAlhZGRpcwlyMzAscjMwLF9HTE9CQUxfT0ZGU0VUX1RBQkxFXy0xYkBo YQoKZGlmZiAtLWdpdCBhL2djYzQxLXByMjA4ODAucGF0Y2ggYi9nY2M0MS1wcjIwODgwLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNzJhODEKLS0tIC9kZXYvbnVs bAorKysgYi9nY2M0MS1wcjIwODgwLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKKzIwMDYtMTEtMjQg IFBhdWwgVGhvbWFzICA8cGF1bHRAZ2NjLmdudS5vcmc+CisKKwlQUiBmb3J0cmFuLzIwODgwCisJ KiBwYXJzZS5jIChwYXJzZV9pbnRlcmZhY2UpOiBFcnJvciBpZiBwcm9jZWR1cmUgbmFtZSBpcyB0 aGF0IG9mCisJZW5jb21wYXNzaW5nIHNjb3BlLgorCisJKiBnZm9ydHJhbi5kZy9pbnRlcmZhY2Vf M2EuZjkwOiBOZXcgdGVzdC4KKworLS0tIGdjYy9mb3J0cmFuL3BhcnNlLmMJKHJldmlzaW9uIDEx OTE3MikKKysrKyBnY2MvZm9ydHJhbi9wYXJzZS5jCShyZXZpc2lvbiAxMTkxNzMpCitAQCAtMTY5 NCw2ICsxNjk0LDcgQEAgcGFyc2VfaW50ZXJmYWNlICh2b2lkKQorICAgZ2ZjX2ludGVyZmFjZV9p bmZvIHNhdmU7CisgICBnZmNfc3RhdGVfZGF0YSBzMSwgczI7CisgICBnZmNfc3RhdGVtZW50IHN0 OworKyAgbG9jdXMgcHJvY19sb2N1czsKKyAKKyAgIGFjY2VwdF9zdGF0ZW1lbnQgKFNUX0lOVEVS RkFDRSk7CisgCitAQCAtMTc4MSw2ICsxNzgyLDcgQEAgbG9vcDoKKyAgIGFjY2VwdF9zdGF0ZW1l bnQgKHN0KTsKKyAgIHByb2dfdW5pdCA9IGdmY19uZXdfYmxvY2s7CisgICBwcm9nX3VuaXQtPmZv cm1hbF9ucyA9IGdmY19jdXJyZW50X25zOworKyAgcHJvY19sb2N1cyA9IGdmY19jdXJyZW50X2xv Y3VzOworIAorIGRlY2w6CisgICAvKiBSZWFkIGRhdGEgZGVjbGFyYXRpb24gc3RhdGVtZW50cy4g ICovCitAQCAtMTc5Niw4ICsxNzk4LDE1IEBAIGRlY2w6CisgCisgICBjdXJyZW50X2ludGVyZmFj ZSA9IHNhdmU7CisgICBnZmNfYWRkX2ludGVyZmFjZSAocHJvZ191bml0KTsKKy0KKyAgIHBvcF9z dGF0ZSAoKTsKKysKKysgIGlmIChjdXJyZW50X2ludGVyZmFjZS5ucworKwkmJiBjdXJyZW50X2lu dGVyZmFjZS5ucy0+cHJvY19uYW1lCisrCSYmIHN0cmNtcCAoY3VycmVudF9pbnRlcmZhY2UubnMt PnByb2NfbmFtZS0+bmFtZSwKKysJCSAgIHByb2dfdW5pdC0+bmFtZSkgPT0gMCkKKysgICAgZ2Zj X2Vycm9yICgiSU5URVJGQUNFIHByb2NlZHVyZSAnJXMnIGF0ICVMIGhhcyB0aGUgc2FtZSBuYW1l IGFzIHRoZSAiCisrCSAgICAgICAiZW5jbG9zaW5nIHByb2NlZHVyZSIsIHByb2dfdW5pdC0+bmFt ZSwgJnByb2NfbG9jdXMpOworKworICAgZ290byBsb29wOworIAorIGRvbmU6CistLS0gZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9pbnRlcmZhY2VfM2EuZjkwCisrKysgZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9pbnRlcmZhY2VfM2EuZjkwCitAQCAtMCwwICsxLDEzIEBACisrISB7IGRnLWRv IGNvbXBpbGUgfQorKyEgQ29udHJpYnV0ZWQgYnkgSm9vc3QgVmFuZGVWb25kZWxlICA8anYyNDRA Y2FtLmFjLnVrPgorKyEKKyshIFRoaXMgd2FzIGZvdW5kIHdoaWxzdCBpbnZlc3RpZ2F0aW5nID0+ IHNlZ2ZhdWx0Cisrc3Vicm91dGluZSB0aHlfc3ViIChhKQorKyAgaW50ZXJmYWNlIAorKyAgICBz dWJyb3V0aW5lIHRoeV9zdWIgKGEpICEgeyBkZy1lcnJvciAiZW5jbG9zaW5nIHByb2NlZHVyZSIg fQorKyAgICAgIHJlYWwgYQorKyAgICBlbmQgc3Vicm91dGluZQorKyAgZW5kIGludGVyZmFjZQor KyAgcmVhbCBhCisrICBwcmludCAqLCBhCisrZW5kIHN1YnJvdXRpbmUKCmRpZmYgLS1naXQgYS9n Y2M0MS1wcjIyMjQ0LnBhdGNoIGIvZ2NjNDEtcHIyMjI0NC5wYXRjaApkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggYjdlMDM3ZS4uMDAwMDAwMAotLS0gYS9nY2M0MS1wcjIyMjQ0LnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotMjAwNy0wOC0xNCAgSmFrdWIgSmVsaW5l ayAgPGpha3ViQHJlZGhhdC5jb20+Ci0KLQlQUiBmb3J0cmFuLzIyMjQ0Ci0JKiBNYWtlLWxhbmcu aW4gKGZvcnRyYW4vdHJhbnMtdHlwZXMubyk6IERlcGVuZCBvbiAkKEZMQUdTX0gpLgotCSogdHJh bnMtdHlwZXMuYzogSW5jbHVkZSBmbGFncy5oLgotCShnZmNfZ2V0X25vZGVzY19hcnJheV90eXBl KTogQWRkIFRZUEVfREVDTCBUWVBFX05BTUUgd2l0aAotCWNvcnJlY3QgYm91bmRzIGFuZCBkaW1l bnNpb25zIGZvciBwYWNrZWQgYXJyYXlzLgotCi0tLS0gZ2NjL2ZvcnRyYW4vTWFrZS1sYW5nLmlu CShyZXZpc2lvbiAxMjczOTUpCi0rKysgZ2NjL2ZvcnRyYW4vTWFrZS1sYW5nLmluCSh3b3JraW5n IGNvcHkpCi1AQCAtMjkyLDcgKzI5Miw3IEBAIGZvcnRyYW4vdHJhbnMtZGVjbC5vOiAkKEdGT1JU UkFOX1RSQU5TX0QKLSAgIGNncmFwaC5oICQoVEFSR0VUX0gpIGZ1bmN0aW9uLmggJChGTEFHU19I KSAkKFJUTF9IKSB0cmVlLWdpbXBsZS5oIFwKLSAgIHRyZWUtZHVtcC5oCi0gZm9ydHJhbi90cmFu cy10eXBlcy5vOiAkKEdGT1JUUkFOX1RSQU5TX0RFUFMpIGd0LWZvcnRyYW4tdHJhbnMtdHlwZXMu aCBcCi0tICByZWFsLmggdG9wbGV2LmggJChUQVJHRVRfSCkKLSsgIHJlYWwuaCB0b3BsZXYuaCAk KFRBUkdFVF9IKSAkKEZMQUdTX0gpCi0gZm9ydHJhbi90cmFucy1jb25zdC5vOiAkKEdGT1JUUkFO X1RSQU5TX0RFUFMpCi0gZm9ydHJhbi90cmFucy1leHByLm86ICQoR0ZPUlRSQU5fVFJBTlNfREVQ UykgZm9ydHJhbi9kZXBlbmRlbmN5LmgKLSBmb3J0cmFuL3RyYW5zLXN0bXQubzogJChHRk9SVFJB Tl9UUkFOU19ERVBTKSBmb3J0cmFuL2RlcGVuZGVuY3kuaAotLS0tIGdjYy9mb3J0cmFuL3RyYW5z LXR5cGVzLmMJKHJldmlzaW9uIDEyNzM5NSkKLSsrKyBnY2MvZm9ydHJhbi90cmFucy10eXBlcy5j CSh3b3JraW5nIGNvcHkpCi1AQCAtMzUsNiArMzUsNyBAQCBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1 MSBGcmFua2xpbiBTdHJlZXQsCi0gI2luY2x1ZGUgInRyYW5zLXR5cGVzLmgiCi0gI2luY2x1ZGUg InRyYW5zLWNvbnN0LmgiCi0gI2luY2x1ZGUgInJlYWwuaCIKLSsjaW5jbHVkZSAiZmxhZ3MuaCIK LSAMCi0gCi0gI2lmIChHRkNfTUFYX0RJTUVOU0lPTlMgPCAxMCkKLUBAIC0xMDA1LDcgKzEwMDYs NyBAQCBnZmNfZ2V0X25vZGVzY19hcnJheV90eXBlICh0cmVlIGV0eXBlLCBnCi0gICAgIHsKLSAg ICAgICAvKiBGaWxsIGluIHRoZSBzdHJpZGUgYW5kIGJvdW5kIGNvbXBvbmVudHMgb2YgdGhlIHR5 cGUuICAqLwotICAgICAgIGlmIChrbm93bl9zdHJpZGUpCi0tCXRtcCA9ICBnZmNfY29udl9tcHpf dG9fdHJlZSAoc3RyaWRlLCBnZmNfaW5kZXhfaW50ZWdlcl9raW5kKTsKLSsJdG1wID0gZ2ZjX2Nv bnZfbXB6X3RvX3RyZWUgKHN0cmlkZSwgZ2ZjX2luZGV4X2ludGVnZXJfa2luZCk7Ci0gICAgICAg ZWxzZQotICAgICAgICAgdG1wID0gTlVMTF9UUkVFOwotICAgICAgIEdGQ19UWVBFX0FSUkFZX1NU UklERSAodHlwZSwgbikgPSB0bXA7Ci1AQCAtMTEwMyw2ICsxMTA0LDI0IEBAIGdmY19nZXRfbm9k ZXNjX2FycmF5X3R5cGUgKHRyZWUgZXR5cGUsIGcKLSAgIG1wel9jbGVhciAoc3RyaWRlKTsKLSAg IG1wel9jbGVhciAoZGVsdGEpOwotIAotKyAgLyogSW4gZGVidWcgaW5mbyByZXByZXNlbnQgcGFj a2VkIGFycmF5cyBhcyBtdWx0aS1kaW1lbnNpb25hbAotKyAgICAgaWYgdGhleSBoYXZlIHJhbmsg PiAxIGFuZCB3aXRoIHByb3BlciBib3VuZHMsIGluc3RlYWQgb2YgZmxhdAotKyAgICAgYXJyYXlz LiAgKi8KLSsgIGlmIChrbm93bl9zdHJpZGUgJiYgd3JpdGVfc3ltYm9scyAhPSBOT19ERUJVRykK LSsgICAgewotKyAgICAgIHRyZWUgZ3R5cGUgPSBldHlwZSwgcnR5cGUsIHR5cGVfZGVjbDsKLSsK LSsgICAgICBmb3IgKG4gPSBhcy0+cmFuayAtIDE7IG4gPj0gMDsgbi0tKQotKwl7Ci0rCSAgcnR5 cGUgPSBidWlsZF9yYW5nZV90eXBlIChnZmNfYXJyYXlfaW5kZXhfdHlwZSwKLSsJCQkJICAgIEdG Q19UWVBFX0FSUkFZX0xCT1VORCAodHlwZSwgbiksCi0rCQkJCSAgICBHRkNfVFlQRV9BUlJBWV9V Qk9VTkQgKHR5cGUsIG4pKTsKLSsJICBndHlwZSA9IGJ1aWxkX2FycmF5X3R5cGUgKGd0eXBlLCBy dHlwZSk7Ci0rCX0KLSsgICAgICBUWVBFX05BTUUgKHR5cGUpID0gdHlwZV9kZWNsID0gYnVpbGRf ZGVjbCAoVFlQRV9ERUNMLCBOVUxMLCBndHlwZSk7Ci0rICAgICAgREVDTF9PUklHSU5BTF9UWVBF ICh0eXBlX2RlY2wpID0gZ3R5cGU7Ci0rICAgIH0KLSsKLSAgIGlmIChwYWNrZWQgPCAzIHx8ICFr bm93bl9zdHJpZGUpCi0gICAgIHsKLSAgICAgICAvKiBGb3IgZHVtbXkgYXJyYXlzIGFuZCBhdXRv bWF0aWMgKGhlYXAgYWxsb2NhdGVkKSBhcnJheXMgd2UKCmRpZmYgLS1naXQgYS9nY2M0MS1wcjI3 OTU0LnBhdGNoIGIvZ2NjNDEtcHIyNzk1NC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggZGIxMWMzYS4uMDAwMDAwMAotLS0gYS9nY2M0MS1wcjI3OTU0LnBhdGNoCisrKyAvZGV2 L251bGwKQEAgLTEsODQgKzAsMCBAQAotMjAwNi0xMC0yNyAgSmVycnkgRGVMaXNsZSAgPGp2ZGVs aXNsZUBnY2MuZ251Lm9yZz4KLQotCVBSIGZvcnRyYW4vMjc5NTQKLQkqIGRlY2wuYyAoZ2ZjX2Zy ZWVfZGF0YV9hbGwpOiBOZXcgZnVuY3Rpb24gdG8gZnJlZSBhbGwgZGF0YSBzdHJ1Y3R1cmVzCi0J YWZ0ZXIgZXJyb3JzIGluIERBVEEgc3RhdGVtZW50cyBhbmQgZGVjbGFyYXRpb25zLgotCSh0b3Bf dmFyX2xpc3QpOiBVc2UgbmV3IGZ1bmN0aW9uLih0b3BfdmFsX2xpc3QpOiBVc2UgbmV3IGZ1bmN0 aW9uLgotCShnZmNfbWF0Y2hfZGF0YV9kZWNsKTogVXNlIG5ldyBmdW5jdGlvbi4KLQotCVBSIGxp Ymdmb3J0cmFuLzI3OTU0Ci0JKiBnZm9ydHJhbi5kZy9lcnJvcl9yZWNvdmVyeV8yLmY5MDogTmV3 IHRlc3QuCi0KLS0tLSBnY2MvZm9ydHJhbi9kZWNsLmMJKHJldmlzaW9uIDExODA4MykKLSsrKyBn Y2MvZm9ydHJhbi9kZWNsLmMJKHJldmlzaW9uIDExODA4NikKLUBAIC0xMjgsNiArMTI4LDIxIEBA IGdmY19mcmVlX2RhdGEgKGdmY19kYXRhICogcCkKLSB9Ci0gCi0gCi0rLyogRnJlZSBhbGwgZGF0 YSBpbiBhIG5hbWVzcGFjZS4gICovCi0rc3RhdGljIHZvaWQKLStnZmNfZnJlZV9kYXRhX2FsbCAo Z2ZjX25hbWVzcGFjZSAqIG5zKQotK3sKLSsgIGdmY19kYXRhICpkOwotKwotKyAgZm9yICg7bnMt PmRhdGE7KQotKyAgICB7Ci0rICAgICAgZCA9IG5zLT5kYXRhLT5uZXh0OwotKyAgICAgIGdmY19m cmVlIChucy0+ZGF0YSk7Ci0rICAgICAgbnMtPmRhdGEgPSBkOwotKyAgICB9Ci0rfQotKwotKwot IHN0YXRpYyBtYXRjaCB2YXJfZWxlbWVudCAoZ2ZjX2RhdGFfdmFyaWFibGUgKik7Ci0gCi0gLyog TWF0Y2ggYSBsaXN0IG9mIHZhcmlhYmxlcyB0ZXJtaW5hdGVkIGJ5IGFuIGl0ZXJhdG9yIGFuZCBh IHJpZ2h0Ci1AQCAtMjYyLDYgKzI3Nyw3IEBAIHRvcF92YXJfbGlzdCAoZ2ZjX2RhdGEgKiBkKQot IAotIHN5bnRheDoKLSAgIGdmY19zeW50YXhfZXJyb3IgKFNUX0RBVEEpOwotKyAgZ2ZjX2ZyZWVf ZGF0YV9hbGwgKGdmY19jdXJyZW50X25zKTsKLSAgIHJldHVybiBNQVRDSF9FUlJPUjsKLSB9Ci0g Ci1AQCAtMzc0LDYgKzM5MCw3IEBAIHRvcF92YWxfbGlzdCAoZ2ZjX2RhdGEgKiBkYXRhKQotIAot IHN5bnRheDoKLSAgIGdmY19zeW50YXhfZXJyb3IgKFNUX0RBVEEpOwotKyAgZ2ZjX2ZyZWVfZGF0 YV9hbGwgKGdmY19jdXJyZW50X25zKTsKLSAgIHJldHVybiBNQVRDSF9FUlJPUjsKLSB9Ci0gCi1A QCAtMjM2OCw2ICsyMzg1LDggQEAgb2s6Ci0gICBnZmNfZXJyb3IgKCJTeW50YXggZXJyb3IgaW4g ZGF0YSBkZWNsYXJhdGlvbiBhdCAlQyIpOwotICAgbSA9IE1BVENIX0VSUk9SOwotIAotKyAgZ2Zj X2ZyZWVfZGF0YV9hbGwgKGdmY19jdXJyZW50X25zKTsKLSsKLSBjbGVhbnVwOgotICAgZ2ZjX2Zy ZWVfYXJyYXlfc3BlYyAoY3VycmVudF9hcyk7Ci0gICBjdXJyZW50X2FzID0gTlVMTDsKLS0tLSBn Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Vycm9yX3JlY292ZXJ5XzIuZjkwCShyZXZpc2lvbiAw KQotKysrIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZXJyb3JfcmVjb3ZlcnlfMi5mOTAJKHJl dmlzaW9uIDExODA4NikKLUBAIC0wLDAgKzEsMjEgQEAKLSshIHsgZGctZG8gY29tcGlsZSB9Ci0r ISBQUjI3OTU0IEludGVybmFsIGNvbXBpbGVyIGVycm9yIG9uIGJhZCBzdGF0ZW1lbnRzCi0rISBE ZXJpdmVkIGZyb20gdGVzdCBjYXNlIHN1Ym1pdHRlZCBpbiBQUi4KLStzdWJyb3V0aW5lIGJhZDEK LSsgIGNoYXJhY3RlcioyMCA6OiB5LCB4IDAwICAhIHsgZGctZXJyb3IgIlN5bnRheCBlcnJvciIg fQotKyAgZGF0YSAgeSAvJ2FiY2RlZicvLCB4IC8namJuaGprJy8gcHAgICEgeyBkZy1lcnJvciAi U3ludGF4IGVycm9yIiB9Ci0rZW5kIHN1YnJvdXRpbmUgYmFkMQotKwotK3N1YnJvdXRpbmUgYmFk MgotKyAgY2hhcmFjdGVyKjIwIDo6IHksIHggMDAgICEgeyBkZy1lcnJvciAiU3ludGF4IGVycm9y IiB9Ci0rICBkYXRhICB5IC8nYWJjZGVmJy8sIHggLydqYm5oamsnLyBwcCAgISB7IGRnLWVycm9y ICJTeW50YXggZXJyb3IiIH0KLSsgIHByaW50ICosICJiYXNrZXQgY2FzZS4iCi0rZW5kIHN1YnJv dXRpbmUgYmFkMgotKwotK3N1YnJvdXRpbmUgYmFkMwotKyAgaW1wbGljaXQgbm9uZQotKyAgY2hh cmFjdGVyKjIwIDo6IHksIHggMDAgICEgeyBkZy1lcnJvciAiU3ludGF4IGVycm9yIiB9Ci0rICBk YXRhICB5IC8nYWJjZGVmJy8sIHggLydqYm5oamsnLyBwcCAgISB7IGRnLWVycm9yICJTeW50YXgg ZXJyb3IiIH0KLSsgIHByaW50ICosICJiYXNrZXQgY2FzZSB0aGF0IHNlZ2ZhdWx0cyB3aXRob3V0 IHBhdGNoLiIKLStlbmQgc3Vicm91dGluZSBiYWQzCi0rCgpkaWZmIC0tZ2l0IGEvZ2NjNDEtcHIy ODc1NS5wYXRjaCBiL2djYzQxLXByMjg3NTUucGF0Y2gKaW5kZXggYmVmOGNlOC4uZDZiYjkwYSAx MDA2NDQKLS0tIGEvZ2NjNDEtcHIyODc1NS5wYXRjaAorKysgYi9nY2M0MS1wcjI4NzU1LnBhdGNo CkBAIC0xLDQ0ICsxLDIxMCBAQAotMjAwNi0wOC0xNyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJl ZGhhdC5jb20+CisyMDA3LTA5LTIzICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4K IAogCVBSIG1pZGRsZS1lbmQvMjg3NTUKLQkqIGV4cHIuYyAoZXhwYW5kX2V4cHJfcmVhbF8xKSA8 Y2FzZSBBUlJBWV9SRUY+OiBNYWtlIHN1cmUKLQl0aGUgY29uc3QgYXJyYXkgZmllbGQgb3B0aW1p emF0aW9uIGRvZXNuJ3QgY3JlYXRlIGFuIGV4dHJhIGNvbnN0YW50Ci0JTUVNLgorCSogZXhwci5j IChleHBhbmRfY29uc3RydWN0b3IpOiBOZXcgZnVuY3Rpb24uCisJKGV4cGFuZF9leHByX3JlYWxf MSkgPGNhc2UgQ09OU1RSVUNUT1I+OiBDYWxsIGl0LgorCShleHBhbmRfZXhwcl9yZWFsXzEpIDxj YXNlIEFSUkFZX1JFRj46IENhbGwgaXQgaWYgVkFMVUUgaXMKKwlDT05TVFJVQ1RPUi4KIAogCSog Z2NjLmRnL3ByMjg3NTUuYzogTmV3IHRlc3QuCiAKLS0tLSBnY2MvZXhwci5jLmpqCTIwMDYtMDgt MDkgMTc6NTQ6MDMuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL2V4cHIuYwkyMDA2LTA4LTE3IDEz OjAwOjMzLjAwMDAwMDAwMCArMDIwMAotQEAgLTcxMDUsMTMgKzcxMDUsMjUgQEAgZXhwYW5kX2V4 cHJfcmVhbF8xICh0cmVlIGV4cCwgcnR4IHRhcmdldAorLS0tIGdjYy9leHByLmMJKHJldmlzaW9u IDEyODY4NCkKKysrKyBnY2MvZXhwci5jCShyZXZpc2lvbiAxMjg2ODUpCitAQCAtNjQzNSw2ICs2 NDM1LDg5IEBAIGV4cGFuZF9leHByX2FkZHJfZXhwciAodHJlZSBleHAsIHJ0eCB0YXIKKyAgIHJl dHVybiByZXN1bHQ7CisgfQorIAorKy8qIEdlbmVyYXRlIGNvZGUgZm9yIGNvbXB1dGluZyBDT05T VFJVQ1RPUiBFWFAuCisrICAgQW4gcnR4IGZvciB0aGUgY29tcHV0ZWQgdmFsdWUgaXMgcmV0dXJu ZWQuICBJZiBBVk9JRF9URU1QX01FTQorKyAgIGlzIFRSVUUsIGluc3RlYWQgb2YgY3JlYXRpbmcg YSB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gbWVtb3J5CisrICAgTlVMTCBpcyByZXR1cm5lZCBhbmQg dGhlIGNhbGxlciBuZWVkcyB0byBoYW5kbGUgaXQgZGlmZmVyZW50bHkuICAqLworKworK3N0YXRp YyBydHgKKytleHBhbmRfY29uc3RydWN0b3IgKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBlbnVtIGV4 cGFuZF9tb2RpZmllciBtb2RpZmllciwKKysJCSAgICBib29sIGF2b2lkX3RlbXBfbWVtKQorK3sK KysgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoZXhwKTsKKysgIGVudW0gbWFjaGluZV9tb2RlIG1v ZGUgPSBUWVBFX01PREUgKHR5cGUpOworKworKyAgLyogVHJ5IHRvIGF2b2lkIGNyZWF0aW5nIGEg dGVtcG9yYXJ5IGF0IGFsbC4gIFRoaXMgaXMgcG9zc2libGUKKysgICAgIGlmIGFsbCBvZiB0aGUg aW5pdGlhbGl6ZXIgaXMgemVyby4KKysgICAgIEZJWE1FOiB0cnkgdG8gaGFuZGxlIGFsbCBbMC4u MjU1XSBpbml0aWFsaXplcnMgd2UgY2FuIGhhbmRsZQorKyAgICAgd2l0aCBtZW1zZXQuICAqLwor KyAgaWYgKFRSRUVfU1RBVElDIChleHApCisrICAgICAgJiYgIVRSRUVfQUREUkVTU0FCTEUgKGV4 cCkKKysgICAgICAmJiB0YXJnZXQgIT0gMCAmJiBtb2RlID09IEJMS21vZGUKKysgICAgICAmJiBh bGxfemVyb3NfcCAoZXhwKSkKKysgICAgeworKyAgICAgIGNsZWFyX3N0b3JhZ2UgKHRhcmdldCwg ZXhwcl9zaXplIChleHApLCBCTE9DS19PUF9OT1JNQUwpOworKyAgICAgIHJldHVybiB0YXJnZXQ7 CisrICAgIH0KKysKKysgIC8qIEFsbCBlbHRzIHNpbXBsZSBjb25zdGFudHMgPT4gcmVmZXIgdG8g YSBjb25zdGFudCBpbiBtZW1vcnkuICBCdXQKKysgICAgIGlmIHRoaXMgaXMgYSBub24tQkxLbW9k ZSBtb2RlLCBsZXQgaXQgc3RvcmUgYSBmaWVsZCBhdCBhIHRpbWUKKysgICAgIHNpbmNlIHRoYXQg c2hvdWxkIG1ha2UgYSBDT05TVF9JTlQgb3IgQ09OU1RfRE9VQkxFIHdoZW4gd2UKKysgICAgIGZv bGQuICBMaWtld2lzZSwgaWYgd2UgaGF2ZSBhIHRhcmdldCB3ZSBjYW4gdXNlLCBpdCBpcyBiZXN0 IHRvCisrICAgICBzdG9yZSBkaXJlY3RseSBpbnRvIHRoZSB0YXJnZXQgdW5sZXNzIHRoZSB0eXBl IGlzIGxhcmdlIGVub3VnaAorKyAgICAgdGhhdCBtZW1jcHkgd2lsbCBiZSB1c2VkLiAgSWYgd2Ug YXJlIG1ha2luZyBhbiBpbml0aWFsaXplciBhbmQKKysgICAgIGFsbCBvcGVyYW5kcyBhcmUgY29u c3RhbnQsIHB1dCBpdCBpbiBtZW1vcnkgYXMgd2VsbC4KKysKKysgICAgIEZJWE1FOiBBdm9pZCB0 cnlpbmcgdG8gZmlsbCB2ZWN0b3IgY29uc3RydWN0b3JzIHBpZWNlLW1lYWwuCisrICAgICBPdXRw dXQgdGhlbSB3aXRoIG91dHB1dF9jb25zdGFudF9kZWYgYmVsb3cgdW5sZXNzIHdlJ3JlIHN1cmUK KysgICAgIHRoZXkncmUgemVyb3MuICBUaGlzIHNob3VsZCBnbyBhd2F5IHdoZW4gdmVjdG9yIGlu aXRpYWxpemVycworKyAgICAgYXJlIHRyZWF0ZWQgbGlrZSBWRUNUT1JfQ1NUIGluc3RlYWQgb2Yg YXJyYXlzLiAgKi8KKysgIGlmICgoVFJFRV9TVEFUSUMgKGV4cCkKKysgICAgICAgJiYgKChtb2Rl ID09IEJMS21vZGUKKysJICAgICYmICEgKHRhcmdldCAhPSAwICYmIHNhZmVfZnJvbV9wICh0YXJn ZXQsIGV4cCwgMSkpKQorKwkJICB8fCBUUkVFX0FERFJFU1NBQkxFIChleHApCisrCQkgIHx8ICho b3N0X2ludGVnZXJwIChUWVBFX1NJWkVfVU5JVCAodHlwZSksIDEpCisrCQkgICAgICAmJiAoISBN T1ZFX0JZX1BJRUNFU19QCisrCQkJCSAgICAgKHRyZWVfbG93X2NzdCAoVFlQRV9TSVpFX1VOSVQg KHR5cGUpLCAxKSwKKysJCQkJICAgICAgVFlQRV9BTElHTiAodHlwZSkpKQorKwkJICAgICAgJiYg ISBtb3N0bHlfemVyb3NfcCAoZXhwKSkpKQorKyAgICAgIHx8ICgobW9kaWZpZXIgPT0gRVhQQU5E X0lOSVRJQUxJWkVSIHx8IG1vZGlmaWVyID09IEVYUEFORF9DT05TVF9BRERSRVNTKQorKwkgICYm IFRSRUVfQ09OU1RBTlQgKGV4cCkpKQorKyAgICB7CisrICAgICAgcnR4IGNvbnN0cnVjdG9yOwor KworKyAgICAgIGlmIChhdm9pZF90ZW1wX21lbSkKKysJcmV0dXJuIE5VTExfUlRYOworKworKyAg ICAgIGNvbnN0cnVjdG9yID0gb3V0cHV0X2NvbnN0YW50X2RlZiAoZXhwLCAxKTsKKysKKysgICAg ICBpZiAobW9kaWZpZXIgIT0gRVhQQU5EX0NPTlNUX0FERFJFU1MKKysJICAmJiBtb2RpZmllciAh PSBFWFBBTkRfSU5JVElBTElaRVIKKysJICAmJiBtb2RpZmllciAhPSBFWFBBTkRfU1VNKQorKwlj b25zdHJ1Y3RvciA9IHZhbGlkaXplX21lbSAoY29uc3RydWN0b3IpOworKworKyAgICAgIHJldHVy biBjb25zdHJ1Y3RvcjsKKysgICAgfQorKworKyAgLyogSGFuZGxlIGNhbGxzIHRoYXQgcGFzcyB2 YWx1ZXMgaW4gbXVsdGlwbGUgbm9uLWNvbnRpZ3VvdXMKKysgICAgIGxvY2F0aW9ucy4gIFRoZSBJ cml4IDYgQUJJIGhhcyBleGFtcGxlcyBvZiB0aGlzLiAgKi8KKysgIGlmICh0YXJnZXQgPT0gMCB8 fCAhIHNhZmVfZnJvbV9wICh0YXJnZXQsIGV4cCwgMSkKKysgICAgICB8fCBHRVRfQ09ERSAodGFy Z2V0KSA9PSBQQVJBTExFTCB8fCBtb2RpZmllciA9PSBFWFBBTkRfU1RBQ0tfUEFSTSkKKysgICAg eworKyAgICAgIGlmIChhdm9pZF90ZW1wX21lbSkKKysJcmV0dXJuIE5VTExfUlRYOworKworKyAg ICAgIHRhcmdldAorKwk9IGFzc2lnbl90ZW1wIChidWlsZF9xdWFsaWZpZWRfdHlwZSAodHlwZSwg KFRZUEVfUVVBTFMgKHR5cGUpCisrCQkJCQkJICAgIHwgKFRSRUVfUkVBRE9OTFkgKGV4cCkKKysJ CQkJCQkgICAgICAgKiBUWVBFX1FVQUxfQ09OU1QpKSksCisrCQkgICAgICAgMCwgVFJFRV9BRERS RVNTQUJMRSAoZXhwKSwgMSk7CisrICAgIH0KKysKKysgIHN0b3JlX2NvbnN0cnVjdG9yIChleHAs IHRhcmdldCwgMCwgaW50X2V4cHJfc2l6ZSAoZXhwKSk7CisrICByZXR1cm4gdGFyZ2V0OworK30K KysKKyAKKyAvKiBleHBhbmRfZXhwcjogZ2VuZXJhdGUgY29kZSBmb3IgY29tcHV0aW5nIGV4cHJl c3Npb24gRVhQLgorICAgIEFuIHJ0eCBmb3IgdGhlIGNvbXB1dGVkIHZhbHVlIGlzIHJldHVybmVk LiAgVGhlIHZhbHVlIGlzIG5ldmVyIG51bGwuCitAQCAtNjg5OSw3MSArNjk4Miw3IEBAIGV4cGFu ZF9leHByX3JlYWxfMSAodHJlZSBleHAsIHJ0eCB0YXJnZXQKKyAJICByZXR1cm4gY29uc3QwX3J0 eDsKKyAJfQorIAorLSAgICAgIC8qIFRyeSB0byBhdm9pZCBjcmVhdGluZyBhIHRlbXBvcmFyeSBh dCBhbGwuICBUaGlzIGlzIHBvc3NpYmxlCistCSBpZiBhbGwgb2YgdGhlIGluaXRpYWxpemVyIGlz IHplcm8uCistCSBGSVhNRTogdHJ5IHRvIGhhbmRsZSBhbGwgWzAuLjI1NV0gaW5pdGlhbGl6ZXJz IHdlIGNhbiBoYW5kbGUKKy0JIHdpdGggbWVtc2V0LiAgKi8KKy0gICAgICBlbHNlIGlmIChUUkVF X1NUQVRJQyAoZXhwKQorLQkgICAgICAgJiYgIVRSRUVfQUREUkVTU0FCTEUgKGV4cCkKKy0JICAg ICAgICYmIHRhcmdldCAhPSAwICYmIG1vZGUgPT0gQkxLbW9kZQorLQkgICAgICAgJiYgYWxsX3pl cm9zX3AgKGV4cCkpCistCXsKKy0JICBjbGVhcl9zdG9yYWdlICh0YXJnZXQsIGV4cHJfc2l6ZSAo ZXhwKSwgQkxPQ0tfT1BfTk9STUFMKTsKKy0JICByZXR1cm4gdGFyZ2V0OworLQl9CistCistICAg ICAgLyogQWxsIGVsdHMgc2ltcGxlIGNvbnN0YW50cyA9PiByZWZlciB0byBhIGNvbnN0YW50IGlu IG1lbW9yeS4gIEJ1dAorLQkgaWYgdGhpcyBpcyBhIG5vbi1CTEttb2RlIG1vZGUsIGxldCBpdCBz dG9yZSBhIGZpZWxkIGF0IGEgdGltZQorLQkgc2luY2UgdGhhdCBzaG91bGQgbWFrZSBhIENPTlNU X0lOVCBvciBDT05TVF9ET1VCTEUgd2hlbiB3ZQorLQkgZm9sZC4gIExpa2V3aXNlLCBpZiB3ZSBo YXZlIGEgdGFyZ2V0IHdlIGNhbiB1c2UsIGl0IGlzIGJlc3QgdG8KKy0JIHN0b3JlIGRpcmVjdGx5 IGludG8gdGhlIHRhcmdldCB1bmxlc3MgdGhlIHR5cGUgaXMgbGFyZ2UgZW5vdWdoCistCSB0aGF0 IG1lbWNweSB3aWxsIGJlIHVzZWQuICBJZiB3ZSBhcmUgbWFraW5nIGFuIGluaXRpYWxpemVyIGFu ZAorLQkgYWxsIG9wZXJhbmRzIGFyZSBjb25zdGFudCwgcHV0IGl0IGluIG1lbW9yeSBhcyB3ZWxs LgorLQorLQlGSVhNRTogQXZvaWQgdHJ5aW5nIHRvIGZpbGwgdmVjdG9yIGNvbnN0cnVjdG9ycyBw aWVjZS1tZWFsLgorLQlPdXRwdXQgdGhlbSB3aXRoIG91dHB1dF9jb25zdGFudF9kZWYgYmVsb3cg dW5sZXNzIHdlJ3JlIHN1cmUKKy0JdGhleSdyZSB6ZXJvcy4gIFRoaXMgc2hvdWxkIGdvIGF3YXkg d2hlbiB2ZWN0b3IgaW5pdGlhbGl6ZXJzCistCWFyZSB0cmVhdGVkIGxpa2UgVkVDVE9SX0NTVCBp bnN0ZWFkIG9mIGFycmF5cy4KKy0gICAgICAqLworLSAgICAgIGVsc2UgaWYgKChUUkVFX1NUQVRJ QyAoZXhwKQorLQkJJiYgKChtb2RlID09IEJMS21vZGUKKy0JCSAgICAgJiYgISAodGFyZ2V0ICE9 IDAgJiYgc2FmZV9mcm9tX3AgKHRhcmdldCwgZXhwLCAxKSkpCistCQkgICAgfHwgVFJFRV9BRERS RVNTQUJMRSAoZXhwKQorLQkJICAgIHx8IChob3N0X2ludGVnZXJwIChUWVBFX1NJWkVfVU5JVCAo dHlwZSksIDEpCistCQkJJiYgKCEgTU9WRV9CWV9QSUVDRVNfUAorLQkJCSAgICAodHJlZV9sb3df Y3N0IChUWVBFX1NJWkVfVU5JVCAodHlwZSksIDEpLAorLQkJCSAgICAgVFlQRV9BTElHTiAodHlw ZSkpKQorLQkJCSYmICEgbW9zdGx5X3plcm9zX3AgKGV4cCkpKSkKKy0JICAgICAgIHx8ICgobW9k aWZpZXIgPT0gRVhQQU5EX0lOSVRJQUxJWkVSCistCQkgICAgfHwgbW9kaWZpZXIgPT0gRVhQQU5E X0NPTlNUX0FERFJFU1MpCistCQkgICAmJiBUUkVFX0NPTlNUQU5UIChleHApKSkKKy0JeworLQkg IHJ0eCBjb25zdHJ1Y3RvciA9IG91dHB1dF9jb25zdGFudF9kZWYgKGV4cCwgMSk7CistCistCSAg aWYgKG1vZGlmaWVyICE9IEVYUEFORF9DT05TVF9BRERSRVNTCistCSAgICAgICYmIG1vZGlmaWVy ICE9IEVYUEFORF9JTklUSUFMSVpFUgorLQkgICAgICAmJiBtb2RpZmllciAhPSBFWFBBTkRfU1VN KQorLQkgICAgY29uc3RydWN0b3IgPSB2YWxpZGl6ZV9tZW0gKGNvbnN0cnVjdG9yKTsKKy0KKy0J ICByZXR1cm4gY29uc3RydWN0b3I7CistCX0KKy0gICAgICBlbHNlCistCXsKKy0JICAvKiBIYW5k bGUgY2FsbHMgdGhhdCBwYXNzIHZhbHVlcyBpbiBtdWx0aXBsZSBub24tY29udGlndW91cworLQkg ICAgIGxvY2F0aW9ucy4gIFRoZSBJcml4IDYgQUJJIGhhcyBleGFtcGxlcyBvZiB0aGlzLiAgKi8K Ky0JICBpZiAodGFyZ2V0ID09IDAgfHwgISBzYWZlX2Zyb21fcCAodGFyZ2V0LCBleHAsIDEpCist CSAgICAgIHx8IEdFVF9DT0RFICh0YXJnZXQpID09IFBBUkFMTEVMCistCSAgICAgIHx8IG1vZGlm aWVyID09IEVYUEFORF9TVEFDS19QQVJNKQorLQkgICAgdGFyZ2V0CistCSAgICAgID0gYXNzaWdu X3RlbXAgKGJ1aWxkX3F1YWxpZmllZF90eXBlICh0eXBlLAorLQkJCQkJCSAgIChUWVBFX1FVQUxT ICh0eXBlKQorLQkJCQkJCSAgICB8IChUUkVFX1JFQURPTkxZIChleHApCistCQkJCQkJICAgICAg ICogVFlQRV9RVUFMX0NPTlNUKSkpLAorLQkJCSAgICAgMCwgVFJFRV9BRERSRVNTQUJMRSAoZXhw KSwgMSk7CistCistCSAgc3RvcmVfY29uc3RydWN0b3IgKGV4cCwgdGFyZ2V0LCAwLCBpbnRfZXhw cl9zaXplIChleHApKTsKKy0JICByZXR1cm4gdGFyZ2V0OworLQl9CisrICAgICAgcmV0dXJuIGV4 cGFuZF9jb25zdHJ1Y3RvciAoZXhwLCB0YXJnZXQsIG1vZGlmaWVyLCBmYWxzZSk7CisgCisgICAg IGNhc2UgTUlTQUxJR05FRF9JTkRJUkVDVF9SRUY6CisgICAgIGNhc2UgQUxJR05fSU5ESVJFQ1Rf UkVGOgorQEAgLTcxMDUsMTAgKzcxMjQsMjUgQEAgZXhwYW5kX2V4cHJfcmVhbF8xICh0cmVlIGV4 cCwgcnR4IHRhcmdldAogIAkJCQkJICAgICAgZmllbGQsIHZhbHVlKQogIAkJICAgICAgaWYgKHRy ZWVfaW50X2NzdF9lcXVhbCAoZmllbGQsIGluZGV4KSkKICAJCQl7CiAtCQkJICBpZiAoIVRSRUVf U0lERV9FRkZFQ1RTICh2YWx1ZSkpCistCQkJICAgIHJldHVybiBleHBhbmRfZXhwciAoZm9sZCAo dmFsdWUpLCB0YXJnZXQsIHRtb2RlLAorLQkJCQkJCW1vZGlmaWVyKTsKKy0JCQkgIGJyZWFrOwog KwkJCSAgaWYgKFRSRUVfU0lERV9FRkZFQ1RTICh2YWx1ZSkpCiArCQkJICAgIGJyZWFrOwogKwot KwkJCSAgaWYgKFRSRUVfQ09ERSAodmFsdWUpICE9IENPTlNUUlVDVE9SKQotIAkJCSAgICByZXR1 cm4gZXhwYW5kX2V4cHIgKGZvbGQgKHZhbHVlKSwgdGFyZ2V0LCB0bW9kZSwKLSAJCQkJCQltb2Rp Zmllcik7Ci0rCi0rCQkJICAvKiBGb3IgQ09OU1RSVUNUT1IgdGhpcyBvcHRpbWl6YXRpb24gaXMg bm90IGFsd2F5cwotKwkJCSAgICAgYSB3aW4gLSBpZiBleHBhbmRfZXhwciBjcmVhdGVzIGEgdGVt cG9yYXJ5Ci0rCQkJICAgICBjb25zdGFudCwgd2UganVzdCB3YXN0ZSB1bm5lY2Vzc2FyaWx5IHJv ZGF0YQotKwkJCSAgICAgc3BhY2UuICAqLwotKwkJCSAgdGVtcCA9IGV4cGFuZF9leHByICh2YWx1 ZSwgdGFyZ2V0LCB0bW9kZSwgbW9kaWZpZXIpOwotKwkJCSAgaWYgKHRlbXAgPT0gdGFyZ2V0Ci0r CQkJICAgICAgfHwgKHRlbXAgJiYgR0VUX0NPREUgKHRlbXApICE9IE1FTSkpCi0rCQkJICAgIHJl dHVybiB0ZW1wOwotIAkJCSAgYnJlYWs7CisrCQkJICBpZiAoVFJFRV9DT0RFICh2YWx1ZSkgPT0g Q09OU1RSVUNUT1IpCisrCQkJICAgIHsKKysJCQkgICAgICAvKiBJZiBWQUxVRSBpcyBhIENPTlNU UlVDVE9SLCB0aGlzCisrCQkJCSBvcHRpbWl6YXRpb24gaXMgb25seSB1c2VmdWwgaWYKKysJCQkJ IHRoaXMgZG9lc24ndCBzdG9yZSB0aGUgQ09OU1RSVUNUT1IKKysJCQkJIGludG8gbWVtb3J5LiAg SWYgaXQgZG9lcywgaXQgaXMgbW9yZQorKwkJCQkgZWZmaWNpZW50IHRvIGp1c3QgbG9hZCB0aGUg ZGF0YSBmcm9tCisrCQkJCSB0aGUgYXJyYXkgZGlyZWN0bHkuICAqLworKwkJCSAgICAgIHJ0eCBy ZXQgPSBleHBhbmRfY29uc3RydWN0b3IgKHZhbHVlLCB0YXJnZXQsCisrCQkJCQkJCSAgICBtb2Rp ZmllciwgdHJ1ZSk7CisrCQkJICAgICAgaWYgKHJldCA9PSBOVUxMX1JUWCkKKysJCQkJYnJlYWs7 CisrCQkJICAgIH0KKysKKysJCQkgIHJldHVybiBleHBhbmRfZXhwciAoZm9sZCAodmFsdWUpLCB0 YXJnZXQsIHRtb2RlLAorKwkJCQkJICAgICAgbW9kaWZpZXIpOwogIAkJCX0KICAJCSAgfQotLQkJ ZWxzZSBpZihUUkVFX0NPREUgKGluaXQpID09IFNUUklOR19DU1QpCi0rCQllbHNlIGlmIChUUkVF X0NPREUgKGluaXQpID09IFNUUklOR19DU1QpCi0gCQkgIHsKLSAJCSAgICB0cmVlIGluZGV4MSA9 IGluZGV4OwotIAkJICAgIHRyZWUgbG93X2JvdW5kID0gYXJyYXlfcmVmX2xvd19ib3VuZCAoZXhw KTsKLS0tLSBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjI4NzU1LmMuamoJMjAwNi0wOC0xNyAxMjo1 OTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjI4NzU1LmMJ MjAwNi0wOC0xNyAxMjo1OTo1Ny4wMDAwMDAwMDAgKzAyMDAKKyAJCWVsc2UgaWYoVFJFRV9DT0RF IChpbml0KSA9PSBTVFJJTkdfQ1NUKQorLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMjg3NTUu YwkocmV2aXNpb24gMCkKKysrKyBnY2MvdGVzdHN1aXRlL2djYy5kZy9wcjI4NzU1LmMJKHJldmlz aW9uIDEyODY4NSkKIEBAIC0wLDAgKzEsMjIgQEAKICsvKiBQUiBtaWRkbGUtZW5kLzI4NzU1ICov CiArLyogeyBkZy1kbyBjb21waWxlIH0gKi8KCmRpZmYgLS1naXQgYS9nY2M0MS1wcjMyNjc4LnBh dGNoIGIvZ2NjNDEtcHIzMjY3OC5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NjE2OTJiYi4uMDAwMDAwMAotLS0gYS9nY2M0MS1wcjMyNjc4LnBhdGNoCisrKyAvZGV2L251bGwK QEAgLTEsNjMgKzAsMCBAQAotMjAwNy0wNy0yMSAgSmVycnkgRGVMaXNsZSAgPGp2ZGVsaXNsZUBn Y2MuZ251Lm9yZz4KLQotCVBSIGxpYmdmb3J0cmFuLzMyNjc4Ci0JKiBpby90cmFuc2Zlci5jIChm b3JtYXR0ZWRfdHJhbnNmZXJfc2NhbGFyKTogRml4IG9mZiBieSBvbmUgZXJyb3IgaW4KLQljYWxj dWxhdGlvbiBvZiBwb3MgYW5kIHNraXBzLiBEb24ndCBhbGxvdyBwZW5kaW5nX3NwYWNlcyB0byBn bwotCW5lZ2F0aXZlLgotCi0JUFIgZm9ydHJhbi8zMjY3OAotCSogZ2ZvcnRyYW4uZGcvZm10X3Rf NS5mOTA6IE5ldyB0ZXN0LgotCi0tLS0gbGliZ2ZvcnRyYW4vaW8vdHJhbnNmZXIuYwkocmV2aXNp b24gMTI2ODIxKQotKysrIGxpYmdmb3J0cmFuL2lvL3RyYW5zZmVyLmMJKHJldmlzaW9uIDEyNjgy MykKLUBAIC04OTMsOSArODkzLDkgQEAgZm9ybWF0dGVkX3RyYW5zZmVyX3NjYWxhciAoc3RfcGFy YW1ldGVyXwotIAljYXNlIEZNVF9UUjoKLSAJICBjb25zdW1lX2RhdGFfZmxhZyA9IDAgOwotIAot LQkgIHBvcyA9IGJ5dGVzX3VzZWQgKyBmLT51Lm4gKyBkdHAtPnUucC5za2lwczsKLS0JICBkdHAt PnUucC5za2lwcyA9IGYtPnUubiArIGR0cC0+dS5wLnNraXBzOwotLQkgIGR0cC0+dS5wLnBlbmRp bmdfc3BhY2VzID0gcG9zIC0gZHRwLT51LnAubWF4X3BvczsKLSsJICBkdHAtPnUucC5za2lwcyAr PSBmLT51Lm47Ci0rCSAgcG9zID0gYnl0ZXNfdXNlZCArIGR0cC0+dS5wLnNraXBzIC0gMTsKLSsJ ICBkdHAtPnUucC5wZW5kaW5nX3NwYWNlcyA9IHBvcyAtIGR0cC0+dS5wLm1heF9wb3MgKyAxOwot IAotIAkgIC8qIFdyaXRlcyBvY2N1ciBqdXN0IGJlZm9yZSB0aGUgc3dpdGNoIG9uIGYtPmZvcm1h dCwgYWJvdmUsIHNvCi0gCSAgICAgdGhhdCB0cmFpbGluZyBibGFua3MgYXJlIHN1cHByZXNzZWQs IHVubGVzcyB3ZSBhcmUgZG9pbmcgYQotQEAgLTkyMiw4ICs5MjIsNiBAQCBmb3JtYXR0ZWRfdHJh bnNmZXJfc2NhbGFyIChzdF9wYXJhbWV0ZXJfCi0gCSAgICAgIGlmIChieXRlc191c2VkID09IDAp Ci0gCQl7Ci0gCQkgIGR0cC0+dS5wLnBlbmRpbmdfc3BhY2VzIC09IGYtPnUubjsKLS0JCSAgZHRw LT51LnAucGVuZGluZ19zcGFjZXMgPSBkdHAtPnUucC5wZW5kaW5nX3NwYWNlcyA8IDAgPyAwCi0t CQkJCQkgICAgOiBkdHAtPnUucC5wZW5kaW5nX3NwYWNlczsKLSAJCSAgZHRwLT51LnAuc2tpcHMg LT0gZi0+dS5uOwotIAkJICBkdHAtPnUucC5za2lwcyA9IGR0cC0+dS5wLnNraXBzIDwgMCA/IDAg OiBkdHAtPnUucC5za2lwczsKLSAJCX0KLUBAIC05NDUsNiArOTQzLDggQEAgZm9ybWF0dGVkX3Ry YW5zZmVyX3NjYWxhciAoc3RfcGFyYW1ldGVyXwotIAkgIGR0cC0+dS5wLnNraXBzID0gZHRwLT51 LnAuc2tpcHMgKyBwb3MgLSBieXRlc191c2VkOwotIAkgIGR0cC0+dS5wLnBlbmRpbmdfc3BhY2Vz ID0gZHRwLT51LnAucGVuZGluZ19zcGFjZXMKLSAJCQkJICAgICsgcG9zIC0gZHRwLT51LnAubWF4 X3BvczsKLSsJICBkdHAtPnUucC5wZW5kaW5nX3NwYWNlcyA9IGR0cC0+dS5wLnBlbmRpbmdfc3Bh Y2VzIDwgMAotKwkJCQkgICAgPyAwIDogZHRwLT51LnAucGVuZGluZ19zcGFjZXM7Ci0gCi0gCSAg aWYgKGR0cC0+dS5wLnNraXBzID09IDApCi0gCSAgICBicmVhazsKLS0tLSBnY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL2ZtdF90XzUuZjkwCShyZXZpc2lvbiAxMjY4MjEpCi0rKysgZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9mbXRfdF81LmY5MAkocmV2aXNpb24gMTI2ODIzKQotQEAgLTAsMCAr MSwxNyBAQAotKyEgeyBkZy1kbyBydW4gfQotKyEgUFIzMjY3OCBHRm9ydGFuIHdvcmtzIGluY29y cmVjdGx5IHdoZW4gd3JpdGluZyB3aXRoIEZPUk1BVCBUeAotKyEgQmVmb3JlIHBhdGNoLCBOVUxM cyB3ZXJlIGluc2VydGVkIGluIG91dHB1dC4KLSshIFRlc3QgY2FzZSBmcm9tIHJlcG9ydGVyIGVu aGFuY2VkIHRvIGRldGVjdCB0aGlzIHByb2JsZW0uCi0rICAgICAgY2hhcmFjdGVyKDI1KSA6OiBv dXRwdXQKLSsgICAgICBjaGFyYWN0ZXIoMSkgIDo6IGMKLSsgICAgICBvdXRwdXQgPSAiIgotKyAg ICAgIG9wZW4gKHVuaXQ9MTAsIGZpbGU9InByMzI2Nzh0ZXN0ZmlsZSIsIHN0YXR1cz0icmVwbGFj ZSIpCi0rICAgICAgd3JpdGUgKDEwLDEwKSAnMTInLCdhJywnYicKLSsgICAgICBjbG9zZSAoMTAs IHN0YXR1cz0ia2VlcCIpCi0rICAgICAgb3BlbiAodW5pdD0xMCwgZmlsZT0icHIzMjY3OHRlc3Rm aWxlIikKLSsgICAgICByZWFkKDEwLDIwKSBvdXRwdXQoMToyMSkKLSsgICAgICBpZiAob3V0cHV0 KDE6MjEpLm5lLiJhYiAgICAgICAgICAgICAgICAgIHgiKSBjYWxsIGFib3J0Ci0rICAgICAgY2xv c2UgKDEwLCBzdGF0dXM9ImRlbGV0ZSIpCi0rIDEwICAgZm9ybWF0IChhMix0MSxhMSx0MixhMSx0 MjAsJyB4JykKLSsgMjAgICBmb3JtYXQgKGEyMSkKLSsgICAgICBlbmQKCmRpZmYgLS1naXQgYS9n Y2M0MS1wcjMyNjk0LnBhdGNoIGIvZ2NjNDEtcHIzMjY5NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi40YjE3MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjNDEtcHIz MjY5NC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACisyMDA3LTA5LTI1ICBKYWt1YiBKZWxpbmVrICA8 amFrdWJAcmVkaGF0LmNvbT4KKworCVBSIHRyZWUtb3B0aW1pemF0aW9uLzMyNjk0CisJMjAwNi0x MS0wOCAgUm9nZXIgU2F5bGUgIDxyb2dlckBleWVzb3Blbi5jb20+CisJKiB0cmVlLXNzYS1wcm9w YWdhdGUuYyAoc2V0X3Jocyk6IFZlcmlmeSB0Y2NfY29tcGFyaXNvbiB0aGUgc2FtZSB3YXkKKwlh cyB0Y2NfYmluYXJ5LgorCisJKiBnY2MuYy10b3J0dXJlL2NvbXBpbGUvMjAwNzA5MjUtMS5jOiBO ZXcgdGVzdC4KKworLS0tIGdjYy90cmVlLXNzYS1wcm9wYWdhdGUuYy5qagkyMDA3LTA5LTIzIDE5 OjQzOjM2LjAwMDAwMDAwMCArMDIwMAorKysrIGdjYy90cmVlLXNzYS1wcm9wYWdhdGUuYwkyMDA3 LTA5LTI1IDA5OjMwOjUwLjAwMDAwMDAwMCArMDIwMAorQEAgLTU3MCw3ICs1NzAsOCBAQCBzZXRf cmhzICh0cmVlICpzdG10X3AsIHRyZWUgZXhwcikKKyAgIHNzYV9vcF9pdGVyIGl0ZXI7CisgCisg ICAvKiBWZXJpZnkgdGhlIGNvbnN0YW50IGZvbGRlZCByZXN1bHQgaXMgdmFsaWQgZ2ltcGxlLiAg Ki8KKy0gIGlmIChUUkVFX0NPREVfQ0xBU1MgKGNvZGUpID09IHRjY19iaW5hcnkpCisrICBpZiAo VFJFRV9DT0RFX0NMQVNTIChjb2RlKSA9PSB0Y2NfYmluYXJ5CisrICAgICAgfHwgVFJFRV9DT0RF X0NMQVNTIChjb2RlKSA9PSB0Y2NfY29tcGFyaXNvbikKKyAgICAgeworICAgICAgIGlmICghaXNf Z2ltcGxlX3ZhbCAoVFJFRV9PUEVSQU5EIChleHByLCAwKSkKKyAJICB8fCAhaXNfZ2ltcGxlX3Zh bCAoVFJFRV9PUEVSQU5EIChleHByLCAxKSkpCistLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0 dXJlL2NvbXBpbGUvMjAwNzA5MjUtMS5jLmpqCTIwMDctMDktMjUgMDk6Mjg6MzcuMDAwMDAwMDAw ICswMjAwCisrKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuYy10b3J0dXJlL2NvbXBpbGUvMjAwNzA5MjUt MS5jCTIwMDctMDktMjUgMDk6Mjk6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIyIEBA CisrLyogUFIgdHJlZS1vcHRpbWl6YXRpb24vMzI2OTQgKi8KKysKKyt0eXBlZGVmIHNpZ25lZCBs b25nIGxvbmcgaW50IFdvcmRTNjQ7CisrdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFdv cmQ2NDsKKysKKytpbnQKKytmb28gKFdvcmQ2NCAqIHApCisreworKyAgd2hpbGUgKDEpCisrICAg IHsKKysgICAgICBXb3JkUzY0IGMgPSAweDFsbHU7CisrICAgICAgV29yZFM2NCB4ID0gKnA7Cisr ICAgICAgaWYgKGMgPj0gMCkKKysJeworKwkgIGlmICh4ID4gKFdvcmRTNjQpIDB4N0ZGRkZGRkZG RkZGRkZGRmxsIC0gYykKKysJICAgIHJldHVybiA2OworKwl9CisrICAgICAgZWxzZSBpZiAoeCA8 IChXb3JkUzY0KSAweDgwMDAwMDAwMDAwMDAwMDBsbCAtIGMpCisrCXJldHVybiA3OworKyAgICAg IHArKzsKKysgICAgfQorK30KCmRpZmYgLS1naXQgYS9nY2M0MS1wcjMyOTEyLnBhdGNoIGIvZ2Nj NDEtcHIzMjkxMi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdjZTgzMC4u MDAwMDAwMAotLS0gYS9nY2M0MS1wcjMyOTEyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTM4 ICswLDAgQEAKLTIwMDctMDgtMjAgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgot Ci0JUFIgbWlkZGxlLWVuZC8zMjkxMgotCSogZm9sZC1jb25zdC5jIChmb2xkX2JpbmFyeSk6IE9u bHkgb3B0aW1pemUgWCB8IH5YIGFuZCBYIF4gflggZm9yCi0JaW50ZWdyYWwgdHlwZXMuCi0KLQkq IGdjYy5kZy9wcjMyOTEyLTEuYzogTmV3IHRlc3QuCi0JKiBnY2MuZGcvcHIzMjkxMi0yLmM6IE5l dyB0ZXN0LgotCi0tLS0gZ2NjL2ZvbGQtY29uc3QuYy5qagkyMDA3LTA4LTEzIDE1OjExOjE4LjAw MDAwMDAwMCArMDIwMAotKysrIGdjYy9mb2xkLWNvbnN0LmMJMjAwNy0wOC0yMCAxNTo0OTowNS4w MDAwMDAwMDAgKzAyMDAKLUBAIC04MDc5LDYgKzgwNzksNyBAQCBmb2xkX2JpbmFyeSAoZW51bSB0 cmVlX2NvZGUgY29kZSwgdHJlZSB0Ci0gCi0gICAgICAgLyogflggfCBYIGlzIC0xLiAgKi8KLSAg ICAgICBpZiAoVFJFRV9DT0RFIChhcmcwKSA9PSBCSVRfTk9UX0VYUFIKLSsJICAmJiBJTlRFR1JB TF9UWVBFX1AgKFRSRUVfVFlQRSAoYXJnMSkpCi0gCSAgJiYgb3BlcmFuZF9lcXVhbF9wIChUUkVF X09QRVJBTkQgKGFyZzAsIDApLCBhcmcxLCAwKSkKLSAJewotIAkgIHQxID0gYnVpbGRfaW50X2Nz dCAodHlwZSwgLTEpOwotQEAgLTgwODgsNiArODA4OSw3IEBAIGZvbGRfYmluYXJ5IChlbnVtIHRy ZWVfY29kZSBjb2RlLCB0cmVlIHQKLSAKLSAgICAgICAvKiBYIHwgflggaXMgLTEuICAqLwotICAg ICAgIGlmIChUUkVFX0NPREUgKGFyZzEpID09IEJJVF9OT1RfRVhQUgotKwkgICYmIElOVEVHUkFM X1RZUEVfUCAoVFJFRV9UWVBFIChhcmcwKSkKLSAJICAmJiBvcGVyYW5kX2VxdWFsX3AgKGFyZzAs IFRSRUVfT1BFUkFORCAoYXJnMSwgMCksIDApKQotIAl7Ci0gCSAgdDEgPSBidWlsZF9pbnRfY3N0 ICh0eXBlLCAtMSk7Ci1AQCAtODE3NSw2ICs4MTc3LDcgQEAgZm9sZF9iaW5hcnkgKGVudW0gdHJl ZV9jb2RlIGNvZGUsIHRyZWUgdAotIAotICAgICAgIC8qIH5YIF4gWCBpcyAtMS4gICovCi0gICAg ICAgaWYgKFRSRUVfQ09ERSAoYXJnMCkgPT0gQklUX05PVF9FWFBSCi0rCSAgJiYgSU5URUdSQUxf VFlQRV9QIChUUkVFX1RZUEUgKGFyZzEpKQotIAkgICYmIG9wZXJhbmRfZXF1YWxfcCAoVFJFRV9P UEVSQU5EIChhcmcwLCAwKSwgYXJnMSwgMCkpCi0gCXsKLSAJICB0MSA9IGJ1aWxkX2ludF9jc3Qg KHR5cGUsIC0xKTsKLUBAIC04MTg0LDYgKzgxODcsNyBAQCBmb2xkX2JpbmFyeSAoZW51bSB0cmVl X2NvZGUgY29kZSwgdHJlZSB0Ci0gCi0gICAgICAgLyogWCBeIH5YIGlzIC0xLiAgKi8KLSAgICAg ICBpZiAoVFJFRV9DT0RFIChhcmcxKSA9PSBCSVRfTk9UX0VYUFIKLSsJICAmJiBJTlRFR1JBTF9U WVBFX1AgKFRSRUVfVFlQRSAoYXJnMCkpCi0gCSAgJiYgb3BlcmFuZF9lcXVhbF9wIChhcmcwLCBU UkVFX09QRVJBTkQgKGFyZzEsIDApLCAwKSkKLSAJewotIAkgIHQxID0gYnVpbGRfaW50X2NzdCAo dHlwZSwgLTEpOwotLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMzI5MTItMS5jLmpqCTIwMDct MDgtMjAgMTQ6NDM6MDUuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv cHIzMjkxMi0xLmMJMjAwNy0wOC0yMCAxNDo0MzoyMy4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAg KzEsNDQgQEAKLSsvKiBQUiBtaWRkbGUtZW5kLzMyOTEyICovCi0rLyogeyBkZy1kbyBydW4gfSAq LwotKy8qIHsgZGctb3B0aW9ucyAiLU8yIC13IiB9ICovCi0rCi0rZXh0ZXJuIHZvaWQgYWJvcnQg KHZvaWQpOwotKwotK3R5cGVkZWYgaW50IF9fbTEyOGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9y X3NpemVfXyAoMTYpKSk7Ci0rCi0rX19tMTI4aSBhLCBiLCBjLCBkLCBlLCBmOwotKwotK3ZvaWQK LStmb28gKF9fbTEyOGkgeCkKLSt7Ci0rICBhID0geCBeIH54OwotKyAgYiA9IH54IF4geDsKLSsg IGMgPSB4IHwgfng7Ci0rICBkID0gfnggfCB4OwotKyAgZSA9IHggJiB+eDsKLSsgIGYgPSB+eCAm IHg7Ci0rfQotKwotK2ludAotK21haW4gKHZvaWQpCi0rewotKyAgdW5pb24geyBfX20xMjhpIHY7 IGludCBpW3NpemVvZiAoX19tMTI4aSkgLyBzaXplb2YgKGludCldOyB9IHU7Ci0rICBpbnQgaTsK LSsKLSsgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHUuaSkgLyBzaXplb2YgKHUuaVswXSk7IGkr KykKLSsgICAgdS5pW2ldID0gaSAqIDQ5IC0gMzY7Ci0rICBmb28gKHUudik7Ci0rI2RlZmluZSBj aGVjayh4LCB2YWwpIFwKLSsgIHUudiA9ICh4KTsgXAotKyAgZm9yIChpID0gMDsgaSA8IHNpemVv ZiAodS5pKSAvIHNpemVvZiAodS5pWzBdKTsgaSsrKSBcCi0rICAgIGlmICh1LmlbaV0gIT0gKHZh bCkpIFwKLSsgICAgICBhYm9ydCAoKQotKwotKyAgY2hlY2sgKGEsIH4wKTsKLSsgIGNoZWNrIChi LCB+MCk7Ci0rICBjaGVjayAoYywgfjApOwotKyAgY2hlY2sgKGQsIH4wKTsKLSsgIGNoZWNrIChl LCAwKTsKLSsgIGNoZWNrIChmLCAwKTsKLSsgIHJldHVybiAwOwotK30KLS0tLSBnY2MvdGVzdHN1 aXRlL2djYy5kZy9wcjMyOTEyLTIuYy5qagkyMDA3LTA4LTIwIDE1OjU4OjQ3LjAwMDAwMDAwMCAr MDIwMAotKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMzI5MTItMi5jCTIwMDctMDgtMjAgMTU6 NTU6MzIuMDAwMDAwMDAwICswMjAwCi1AQCAtMCwwICsxLDQ1IEBACi0rLyogeyBkZy1kbyBydW4g fSAqLwotKy8qIHsgZGctb3B0aW9ucyAiLU8yIC13IiB9ICovCi0rCi0rZXh0ZXJuIHZvaWQgYWJv cnQgKHZvaWQpOwotKwotK3R5cGVkZWYgaW50IF9fbTEyOGkgX19hdHRyaWJ1dGVfXyAoKF9fdmVj dG9yX3NpemVfXyAoMTYpKSk7Ci0rCi0rX19tMTI4aSBhLCBiLCBjLCBkLCBlLCBmOwotKwotK19f bTEyOGkKLStmb28gKHZvaWQpCi0rewotKyAgX19tMTI4aSB4ID0geyAweDExMTExMTExLCAweDIy MjIyMjIyLCAweDQ0NDQ0NDQ0IH07Ci0rICByZXR1cm4geDsKLSt9Ci0rCi0rX19tMTI4aQotK2Jh ciAodm9pZCkKLSt7Ci0rICBfX20xMjhpIHggPSB7IDB4MTExMTExMTEsIDB4MjIyMjIyMjIsIDB4 NDQ0NDQ0NDQgfTsKLSsgIHJldHVybiB+eDsKLSt9Ci0rCi0raW50Ci0rbWFpbiAodm9pZCkKLSt7 Ci0rICB1bmlvbiB7IF9fbTEyOGkgdjsgaW50IGlbc2l6ZW9mIChfX20xMjhpKSAvIHNpemVvZiAo aW50KV07IH0gdSwgdjsKLSsgIGludCBpOwotKwotKyAgdS52ID0gZm9vICgpOwotKyAgdi52ID0g YmFyICgpOwotKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAodS5pKSAvIHNpemVvZiAodS5pWzBd KTsgaSsrKQotKyAgICB7Ci0rICAgICAgaWYgKHUuaVtpXSAhPSB+di5pW2ldKQotKwlhYm9ydCAo KTsKLSsgICAgICBpZiAoaSA8IDMpCi0rCXsKLSsJICBpZiAodS5pW2ldICE9ICgweDExMTExMTEx IDw8IGkpKQotKwkgICAgYWJvcnQgKCk7Ci0rCX0KLSsgICAgICBlbHNlIGlmICh1LmlbaV0pCi0r CWFib3J0ICgpOwotKyAgICB9Ci0rICByZXR1cm4gMDsKLSt9CgpkaWZmIC0tZ2l0IGEvZ2NjNDEt cHIzMzQyMy5wYXRjaCBiL2djYzQxLXByMzM0MjMucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDQ2Y2ZlMjkuLjAwMDAwMDAKLS0tIGEvZ2NjNDEtcHIzMzQyMy5wYXRjaAorKysg L2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLTIwMDctMDktMTUgIEpha3ViIEplbGluZWsgIDxq YWt1YkByZWRoYXQuY29tPgotCi0JUFIgbWlkZGxlLWVuZC8zMzQyMwotCSogYnVpbHRpbnMuYyAo ZXhwYW5kX2J1aWx0aW5fbWVtb3J5X2Noayk6IEhhbmRsZSBDT01QT1VORF9FWFBScwotCXJldHVy bmVkIGJ5IGJ1aWxkX2NhbGxfZXhwci4KLQotCSogZ2NjLmMtdG9ydHVyZS9jb21waWxlLzIwMDcw OTE1LTEuYzogTmV3IHRlc3QuCi0KLS0tLSBnY2MvYnVpbHRpbnMuYy5qagkyMDA3LTA5LTE0IDIx OjA3OjQxLjAwMDAwMDAwMCArMDIwMAotKysrIGdjYy9idWlsdGlucy5jCTIwMDctMDktMTYgMjI6 MzE6NDAuMDAwMDAwMDAwICswMjAwCi1AQCAtMTAzODMsNiArMTAzODMsMTMgQEAgZXhwYW5kX2J1 aWx0aW5fbWVtb3J5X2NoayAodHJlZSBleHAsIHJ0eAotIAlyZXR1cm4gMDsKLSAKLSAgICAgICBm biA9IGJ1aWxkX2Z1bmN0aW9uX2NhbGxfZXhwciAoZm4sIGFyZ2xpc3QpOwotKyAgICAgIFNUUklQ X1RZUEVfTk9QUyAoZm4pOwotKyAgICAgIHdoaWxlIChUUkVFX0NPREUgKGZuKSA9PSBDT01QT1VO RF9FWFBSKQotKwl7Ci0rCSAgZXhwYW5kX2V4cHIgKFRSRUVfT1BFUkFORCAoZm4sIDApLCBjb25z dDBfcnR4LCBWT0lEbW9kZSwKLSsJCSAgICAgICBFWFBBTkRfTk9STUFMKTsKLSsJICBmbiA9IFRS RUVfT1BFUkFORCAoZm4sIDEpOwotKwl9Ci0gICAgICAgaWYgKFRSRUVfQ09ERSAoZm4pID09IENB TExfRVhQUikKLSAJQ0FMTF9FWFBSX1RBSUxDQUxMIChmbikgPSBDQUxMX0VYUFJfVEFJTENBTEwg KGV4cCk7Ci0gICAgICAgcmV0dXJuIGV4cGFuZF9leHByIChmbiwgdGFyZ2V0LCBtb2RlLCBFWFBB TkRfTk9STUFMKTsKLUBAIC0xMDQzMiw2ICsxMDQzOSwxMyBAQCBleHBhbmRfYnVpbHRpbl9tZW1v cnlfY2hrICh0cmVlIGV4cCwgcnR4Ci0gCSAgICAgIGlmICghZm4pCi0gCQlyZXR1cm4gMDsKLSAJ ICAgICAgZm4gPSBidWlsZF9mdW5jdGlvbl9jYWxsX2V4cHIgKGZuLCBhcmdsaXN0KTsKLSsJICAg ICAgU1RSSVBfVFlQRV9OT1BTIChmbik7Ci0rCSAgICAgIHdoaWxlIChUUkVFX0NPREUgKGZuKSA9 PSBDT01QT1VORF9FWFBSKQotKwkJewotKwkJICBleHBhbmRfZXhwciAoVFJFRV9PUEVSQU5EIChm biwgMCksIGNvbnN0MF9ydHgsIFZPSURtb2RlLAotKwkJCSAgICAgICBFWFBBTkRfTk9STUFMKTsK LSsJCSAgZm4gPSBUUkVFX09QRVJBTkQgKGZuLCAxKTsKLSsJCX0KLSAJICAgICAgaWYgKFRSRUVf Q09ERSAoZm4pID09IENBTExfRVhQUikKLSAJCUNBTExfRVhQUl9UQUlMQ0FMTCAoZm4pID0gQ0FM TF9FWFBSX1RBSUxDQUxMIChleHApOwotIAkgICAgICByZXR1cm4gZXhwYW5kX2V4cHIgKGZuLCB0 YXJnZXQsIG1vZGUsIEVYUEFORF9OT1JNQUwpOwotLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmMtdG9y dHVyZS9jb21waWxlLzIwMDcwOTE1LTEuYy5qagkyMDA3LTA5LTE2IDIyOjI5OjM3LjAwMDAwMDAw MCArMDIwMAotKysrIGdjYy90ZXN0c3VpdGUvZ2NjLmMtdG9ydHVyZS9jb21waWxlLzIwMDcwOTE1 LTEuYwkyMDA3LTA5LTE2IDIyOjI5OjM3LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwyMCBA QAotKy8qIFBSIG1pZGRsZS1lbmQvMzM0MjMgKi8KLSsKLStzdGF0aWMgc3RydWN0Ci0rewotKyAg Y2hhciBidWZbMTVdOwotK30gdTI7Ci0rCi0rdm9pZAotK3Rlc3Q2ICh2b2lkKQotK3sKLSsgIGlu dCBsZW47Ci0rICBjaGFyICpwOwotKwotKyAgZm9yIChsZW4gPSAwOyBsZW4gPCAyOyBsZW4rKykK LSsgICAgewotKyAgICAgIHAgPSBfX2J1aWx0aW5fX19tZW1zZXRfY2hrICh1Mi5idWYsICdcMCcs IGxlbiwgMTUpOwotKyAgICAgIGlmIChwICE9IHUyLmJ1ZikKLSsJcmV0dXJuOwotKyAgICB9Ci0r fQoKZGlmZiAtLWdpdCBhL2djYzQxLXJoMjUzMTAyLnBhdGNoIGIvZ2NjNDEtcmgyNTMxMDIucGF0 Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0Y2FkNGYuLjAwMDAwMDAKLS0tIGEv Z2NjNDEtcmgyNTMxMDIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0yMDA3 LTA4LTE3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KLQotCSogZGVjbC5jICh2 YXJpYWJsZV9kZWNsKTogRG9uJ3Qgc2hhcmUgY2hhcmxlbiBzdHJ1Y3RzIGlmCi0JbGVuZ3RoID09 IE5VTEwuCi0JKiB0cmFucy1kZWNsLmMgKGNyZWF0ZV9mdW5jdGlvbl9hcmdsaXN0KTogQXNzZXJ0 Ci0JZi0+c3ltLT50cy5jbC0+YmFja2VuZF9kZWNsIGlzIE5VTEwgaW5zdGVhZCBvZiB1bnNoYXJp bmcKLQljaGFybGVuIHN0cnVjdCBoZXJlLgotCi0JKiBnZm9ydHJhbi5kZy9hc3N1bWVkX2NoYXJs ZW5fc2hhcmluZy5mOTA6IE5ldyB0ZXN0LgotCi0tLS0gZ2NjL2ZvcnRyYW4vZGVjbC5jLmpqCTIw MDctMDItMjAgMjI6Mzg6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgZ2NjL2ZvcnRyYW4vZGVjbC5j CTIwMDctMDgtMjEgMjA6NTA6MzMuMDAwMDAwMDAwICswMjAwCi1AQCAtMTA4NiwxMCArMTA4Niwx MSBAQCB2YXJpYWJsZV9kZWNsIChpbnQgZWxlbSkKLSAJICBicmVhazsKLSAKLSAJLyogTm9uLWNv bnN0YW50IGxlbmd0aHMgbmVlZCB0byBiZSBjb3BpZWQgYWZ0ZXIgdGhlIGZpcnN0Ci0tCSAgIGVs ZW1lbnQuICAqLwotKwkgICBlbGVtZW50LiAgQWxzbyBjb3B5IGFzc3VtZWQgbGVuZ3Rocy4gICov Ci0gCWNhc2UgTUFUQ0hfTk86Ci0tCSAgaWYgKGVsZW0gPiAxICYmIGN1cnJlbnRfdHMuY2wtPmxl bmd0aAotLQkJJiYgY3VycmVudF90cy5jbC0+bGVuZ3RoLT5leHByX3R5cGUgIT0gRVhQUl9DT05T VEFOVCkKLSsJICBpZiAoZWxlbSA+IDEKLSsJICAgICAgJiYgKGN1cnJlbnRfdHMuY2wtPmxlbmd0 aCA9PSBOVUxMCi0rCQkgIHx8IGN1cnJlbnRfdHMuY2wtPmxlbmd0aC0+ZXhwcl90eXBlICE9IEVY UFJfQ09OU1RBTlQpKQotIAkgICAgewotIAkgICAgICBjbCA9IGdmY19nZXRfY2hhcmxlbiAoKTsK LSAJICAgICAgY2wtPm5leHQgPSBnZmNfY3VycmVudF9ucy0+Y2xfbGlzdDsKLS0tLSBnY2MvZm9y dHJhbi90cmFucy1kZWNsLmMuamoJMjAwNy0wMy0xMiAwODoyODoxMy4wMDAwMDAwMDAgKzAxMDAK LSsrKyBnY2MvZm9ydHJhbi90cmFucy1kZWNsLmMJMjAwNy0wOC0yMSAyMDo1MDozMy4wMDAwMDAw MDAgKzAyMDAKLUBAIC0xNDE3LDI1ICsxNDE3LDggQEAgY3JlYXRlX2Z1bmN0aW9uX2FyZ2xpc3Qg KGdmY19zeW1ib2wgKiBzeQotIAkgIGlmICghZi0+c3ltLT50cy5jbC0+bGVuZ3RoKQotIAkgICAg ewotIAkgICAgICBUUkVFX1VTRUQgKGxlbmd0aCkgPSAxOwotLQkgICAgICBpZiAoIWYtPnN5bS0+ dHMuY2wtPmJhY2tlbmRfZGVjbCkKLS0JCWYtPnN5bS0+dHMuY2wtPmJhY2tlbmRfZGVjbCA9IGxl bmd0aDsKLS0JICAgICAgZWxzZQotLQkJewotLQkJICAvKiB0aGVyZSBpcyBhbHJlYWR5IGFub3Ro ZXIgdmFyaWFibGUgdXNpbmcgdGhpcwotLQkJICAgICBnZmNfY2hhcmxlbiBub2RlLCBidWlsZCBh IG5ldyBvbmUgZm9yIHRoaXMgdmFyaWFibGUKLS0JCSAgICAgYW5kIGNoYWluIGl0IGludG8gdGhl IGxpc3Qgb2YgZ2ZjX2NoYXJsZW5zLgotLQkJICAgICBUaGlzIGhhcHBlbnMgZm9yIGUuZy4gaW4g dGhlIGNhc2UKLS0JCSAgICAgQ0hBUkFDVEVSKCopOjpjMSxjMgotLQkJICAgICBzaW5jZSBDSEFS QUNURVIgZGVjbGFyYXRpb25zIG9uIHRoZSBzYW1lIGxpbmUgc2hhcmUKLS0JCSAgICAgdGhlIHNh bWUgZ2ZjX2NoYXJsZW4gbm9kZS4gICovCi0tCQkgIGdmY19jaGFybGVuICpjbDsKLS0JICAgICAg Ci0tCQkgIGNsID0gZ2ZjX2dldF9jaGFybGVuICgpOwotLQkJICBjbC0+YmFja2VuZF9kZWNsID0g bGVuZ3RoOwotLQkJICBjbC0+bmV4dCA9IGYtPnN5bS0+dHMuY2wtPm5leHQ7Ci0tCQkgIGYtPnN5 bS0+dHMuY2wtPm5leHQgPSBjbDsKLS0JCSAgZi0+c3ltLT50cy5jbCA9IGNsOwotLQkJfQotKwkg ICAgICBnY2NfYXNzZXJ0ICghZi0+c3ltLT50cy5jbC0+YmFja2VuZF9kZWNsKTsKLSsJICAgICAg Zi0+c3ltLT50cy5jbC0+YmFja2VuZF9kZWNsID0gbGVuZ3RoOwotIAkgICAgfQotIAotIAkgIGhp ZGRlbl90eXBlbGlzdCA9IFRSRUVfQ0hBSU4gKGhpZGRlbl90eXBlbGlzdCk7Ci0tLS0gZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3N1bWVkX2NoYXJsZW5fc2hhcmluZy5mOTAuamoJMjAwNy0w OC0yMSAwODoyOTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBnY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2Fzc3VtZWRfY2hhcmxlbl9zaGFyaW5nLmY5MAkyMDA3LTA4LTIxIDA4OjI5OjU3LjAwMDAw MDAwMCArMDIwMAotQEAgLTAsMCArMSwyOSBAQAotKyEgVGhpcyB0ZXN0Y2FzZSB3YXMgbWlzY29t cGlsZWQsIGJlY2F1c2UgdHMuY2wKLSshIGluIGZ1bmN0aW9uIGJhciB3YXMgaW5pdGlhbGx5IHNo YXJlZCBiZXR3ZWVuIGJvdGgKLSshIGR1bW15IGFyZ3VtZW50cy4gIEFsdGhvdWdoIGl0IHdhcyBs YXRlciB1bnNoYXJlZCwKLSshIGFsbCBleHByZXNzaW9ucyB3aGljaCBjb3BpZWQgdHMuY2wgZnJv bSBiYXIyCi0rISBiZWZvcmUgdGhhdCB1c2VkIGluY29ycmVjdGx5IGJhcjEncyBsZW5ndGgKLSsh IGluc3RlYWQgb2YgYmFyMi4KLSshIHsgZGctZG8gcnVuIH0KLSsKLStzdWJyb3V0aW5lIGZvbyAo Zm9vMSwgZm9vMikKLSsgIGltcGxpY2l0IG5vbmUKLSsgIGludGVnZXIsIGludGVudChpbikgOjog Zm9vMgotKyAgY2hhcmFjdGVyKCopLCBpbnRlbnQoaW4pIDo6IGZvbzEoZm9vMikKLStlbmQgc3Vi cm91dGluZSBmb28KLSsKLStzdWJyb3V0aW5lIGJhciAoYmFyMSwgYmFyMikKLSsgIGltcGxpY2l0 IG5vbmUKLSsgIGNoYXJhY3RlcigqKSwgaW50ZW50KGluKSA6OiBiYXIxLCBiYXIyCi0rCi0rICBj YWxsIGZvbyAoKC8gYmFyMiAvKSwgMSkKLStlbmQgc3Vicm91dGluZSBiYXIKLSsKLStwcm9ncmFt IHRlc3QKLSsgIGNoYXJhY3Rlcig4MCkgOjogc3RyMQotKyAgY2hhcmFjdGVyKDUpIDo6IHN0cjIK LSsKLSsgIHN0cjEgPSAnU3RyaW5nJwotKyAgc3RyMiA9ICdTdHJuZycKLSsgIGNhbGwgYmFyIChz dHIyLCBzdHIxKQotK2VuZCBwcm9ncmFtIHRlc3QKCmRpZmYgLS1naXQgYS9nY2M0MS1zY2FuZi1m bXQtY2hlY2sucGF0Y2ggYi9nY2M0MS1zY2FuZi1mbXQtY2hlY2sucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDQxNDNlMzguLjAwMDAwMDAKLS0tIGEvZ2NjNDEtc2NhbmYtZm10 LWNoZWNrLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDMzICswLDAgQEAKLTIwMDctMDktMTcg IEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgotCi0JKiBjLWZvcm1hdC5oIChmb3Jt YXRfa2luZF9pbmZvKTogQWRkIGFsbG9jX2NoYXIgZmllbGQuCi0JKiBjLWZvcm1hdC5jIChzY2Fu Zl9mbGFnX3NwZWNzKTogQWRkICdtJy4KLQkoc2NhbmZfZmxhZ19wYWlycyk6IEFkZCAnYScsICdt JyBwYWlyLgotCShzY2FuX2NoYXJfdGFibGUpOiBBbGxvdyAnbScgbW9kaWZpZXIgZm9yIGMsIHMs IFssIEMgYW5kIFMuCi0JKGZvcm1hdF90eXBlc19vcmlnKTogQWRkIGFsbG9jX2NoYXIgZmllbGRz LgotCShjaGVja19mb3JtYXRfaW5mb19tYWluKTogUmVuYW1lIGFmbGFnIHRvIGFsbG9jX2ZsYWcu Ci0JSGFuZGxlIGZraS0+YWxsb2NfY2hhci4gbW9kaWZpZXIgYWZ0ZXIgd2lkdGggYW5kIGJlZm9y ZSBsZW5ndGgKLQltb2RpZmllcnMuICBNb3ZlIEZNVF9GTEFHX1NDQU5GX0FfS0xVREdFIGhhbmRs aW5nIGJlZm9yZQotCWxlbmd0aCBtb2RpZmllcnMgYXMgd2VsbC4KLQkqIGNvbmZpZy9zb2wyLWMu YyAoc29sYXJpc19mb3JtYXRfdHlwZXMpOiBBZGQgYWxsb2NfY2hhciBmaWVsZC4KLQotCSogZ2Nj LmRnL2Zvcm1hdC9jOTAtc2NhbmYtNS5jOiBOZXcgdGVzdC4KLQkqIGdjYy5kZy9mb3JtYXQvYzk5 LXNjYW5mLTQuYzogTmV3IHRlc3QuCi0JKiBnY2MuZGcvZm9ybWF0L2V4dC03LmM6IE5ldyB0ZXN0 LgotCSogZ2NjLmRnL2Zvcm1hdC9leHQtOC5jOiBOZXcgdGVzdC4KLQotLS0tIGdjYy9jLWZvcm1h dC5oLmpqCTIwMDctMDItMjAgMjI6Mzk6MTIuMDAwMDAwMDAwICswMTAwCi0rKysgZ2NjL2MtZm9y bWF0LmgJMjAwNy0wOS0xNyAyMjo0NDoxNy4wMDAwMDAwMDAgKzAyMDAKLUBAIC0yMzQsNiArMjM0 LDggQEAgdHlwZWRlZiBzdHJ1Y3QKLSAgICAgIHNwZWNpZmllcnMsIGJ1dCBpcyB1c2VkIHRvIGNo ZWNrIGZvciBiYWQgY29tYmluYXRpb25zIHN1Y2ggYXMgbGVuZ3RoCi0gICAgICBtb2RpZmllciB3 aXRoIGFzc2lnbm1lbnQgc3VwcHJlc3Npb24gaW4gc2NhbmYuICAqLwotICAgaW50IGxlbmd0aF9j b2RlX2NoYXI7Ci0rICAvKiBBc3NpZ25tZW50LWFsbG9jYXRpb24gZmxhZyBjaGFyYWN0ZXIgKCdt JyBpbiBzY2FuZiksIG90aGVyd2lzZSAwLiAgKi8KLSsgIGludCBhbGxvY19jaGFyOwotICAgLyog UG9pbnRlciB0byB0eXBlIG9mIGFyZ3VtZW50IGV4cGVjdGVkIGlmICcqJyBpcyB1c2VkIGZvciBh IHdpZHRoLAotICAgICAgb3IgTlVMTCBpZiAnKicgbm90IHVzZWQgZm9yIHdpZHRocy4gICovCi0g ICB0cmVlICp3aWR0aF90eXBlOwotLS0tIGdjYy9jLWZvcm1hdC5jLmpqCTIwMDctMDItMjAgMjI6 Mzk6MTIuMDAwMDAwMDAwICswMTAwCi0rKysgZ2NjL2MtZm9ybWF0LmMJMjAwNy0wOS0xNyAyMjo1 MTowOC4wMDAwMDAwMDAgKzAyMDAKLUBAIC00MjMsNiArNDIzLDcgQEAgc3RhdGljIGNvbnN0IGZv cm1hdF9mbGFnX3NwZWMgc2NhbmZfZmxhZwotIHsKLSAgIHsgJyonLCAgMCwgMCwgTl8oImFzc2ln bm1lbnQgc3VwcHJlc3Npb24iKSwgTl8oInRoZSBhc3NpZ25tZW50IHN1cHByZXNzaW9uIHNjYW5m IGZlYXR1cmUiKSwgU1REX0M4OSB9LAotICAgeyAnYScsICAwLCAwLCBOXygiJ2EnIGZsYWciKSwg ICAgICAgICAgICAgICBOXygidGhlICdhJyBzY2FuZiBmbGFnIiksICAgICAgICAgICAgICAgICAg ICAgICBTVERfRVhUIH0sCi0rICB7ICdtJywgIDAsIDAsIE5fKCInbScgZmxhZyIpLCAgICAgICAg ICAgICAgIE5fKCJ0aGUgJ20nIHNjYW5mIGZsYWciKSwgICAgICAgICAgICAgICAgICAgICAgIFNU RF9FWFQgfSwKLSAgIHsgJ3cnLCAgMCwgMCwgTl8oImZpZWxkIHdpZHRoIiksICAgICAgICAgICAg Tl8oImZpZWxkIHdpZHRoIGluIHNjYW5mIGZvcm1hdCIpLCAgICAgICAgICAgICAgU1REX0M4OSB9 LAotICAgeyAnTCcsICAwLCAwLCBOXygibGVuZ3RoIG1vZGlmaWVyIiksICAgICAgICBOXygibGVu Z3RoIG1vZGlmaWVyIGluIHNjYW5mIGZvcm1hdCIpLCAgICAgICAgICBTVERfQzg5IH0sCi0gICB7 ICdcJycsIDAsIDAsIE5fKCInJycgZmxhZyIpLCAgICAgICAgICAgICAgIE5fKCJ0aGUgJycnIHNj YW5mIGZsYWciKSwgICAgICAgICAgICAgICAgICAgICAgIFNURF9FWFQgfSwKLUBAIC00MzQsNiAr NDM1LDcgQEAgc3RhdGljIGNvbnN0IGZvcm1hdF9mbGFnX3NwZWMgc2NhbmZfZmxhZwotIHN0YXRp YyBjb25zdCBmb3JtYXRfZmxhZ19wYWlyIHNjYW5mX2ZsYWdfcGFpcnNbXSA9Ci0gewotICAgeyAn KicsICdMJywgMCwgMCB9LAotKyAgeyAnYScsICdtJywgMCwgMCB9LAotICAgeyAwLCAwLCAwLCAw IH0KLSB9OwotIAotQEAgLTY0OCwxNiArNjUwLDE2IEBAIHN0YXRpYyBjb25zdCBmb3JtYXRfY2hh cl9pbmZvIHNjYW5fY2hhcl8KLSAgIHsgInUiLCAgICAgMSwgU1REX0M4OSwgeyBUODlfVUksICBU OTlfVUMsICBUODlfVVMsICBUODlfVUwsICBUOUxfVUxMLCBURVhfVUxMLCBUOTlfU1QsICBUOTlf VVBELCBUOTlfVUlNIH0sICIqdydJIiwgIlciLCAgIE5VTEwgfSwKLSAgIHsgIm94WCIsICAgMSwg U1REX0M4OSwgeyBUODlfVUksICBUOTlfVUMsICBUODlfVVMsICBUODlfVUwsICBUOUxfVUxMLCBU RVhfVUxMLCBUOTlfU1QsICBUOTlfVVBELCBUOTlfVUlNIH0sICIqdyIsICAgIlciLCAgIE5VTEwg fSwKLSAgIHsgImVmZ0VHIiwgMSwgU1REX0M4OSwgeyBUODlfRiwgICBCQURMRU4sICBCQURMRU4s ICBUODlfRCwgICBCQURMRU4sICBUODlfTEQsICBCQURMRU4sICBCQURMRU4sICBCQURMRU4gIH0s ICIqdyciLCAgIlciLCAgIE5VTEwgfSwKLS0gIHsgImMiLCAgICAgMSwgU1REX0M4OSwgeyBUODlf QywgICBCQURMRU4sICBCQURMRU4sICBUOTRfVywgICBCQURMRU4sICBCQURMRU4sICBCQURMRU4s ICBCQURMRU4sICBCQURMRU4gIH0sICIqdyIsICAgImNXIiwgIE5VTEwgfSwKLS0gIHsgInMiLCAg ICAgMSwgU1REX0M4OSwgeyBUODlfQywgICBCQURMRU4sICBCQURMRU4sICBUOTRfVywgICBCQURM RU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4gIH0sICIqYXciLCAgImNXIiwg IE5VTEwgfSwKLS0gIHsgIlsiLCAgICAgMSwgU1REX0M4OSwgeyBUODlfQywgICBCQURMRU4sICBC QURMRU4sICBUOTRfVywgICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURM RU4gIH0sICIqYXciLCAgImNXWyIsIE5VTEwgfSwKLSsgIHsgImMiLCAgICAgMSwgU1REX0M4OSwg eyBUODlfQywgICBCQURMRU4sICBCQURMRU4sICBUOTRfVywgICBCQURMRU4sICBCQURMRU4sICBC QURMRU4sICBCQURMRU4sICBCQURMRU4gIH0sICIqbXciLCAgImNXIiwgIE5VTEwgfSwKLSsgIHsg InMiLCAgICAgMSwgU1REX0M4OSwgeyBUODlfQywgICBCQURMRU4sICBCQURMRU4sICBUOTRfVywg ICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4gIH0sICIqYW13Iiwg ImNXIiwgIE5VTEwgfSwKLSsgIHsgIlsiLCAgICAgMSwgU1REX0M4OSwgeyBUODlfQywgICBCQURM RU4sICBCQURMRU4sICBUOTRfVywgICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4s ICBCQURMRU4gIH0sICIqYW13IiwgImNXWyIsIE5VTEwgfSwKLSAgIHsgInAiLCAgICAgMiwgU1RE X0M4OSwgeyBUODlfViwgICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4sICBCQURM RU4sICBCQURMRU4sICBCQURMRU4sICBCQURMRU4gIH0sICIqdyIsICAgIlciLCAgIE5VTEwgfSwK LSAgIHsgIm4iLCAgICAgMSwgU1REX0M4OSwgeyBUODlfSSwgICBUOTlfU0MsICBUODlfUywgICBU ODlfTCwgICBUOUxfTEwsICBCQURMRU4sICBUOTlfU1NULCBUOTlfUEQsICBUOTlfSU0gIH0sICIi LCAgICAgIlciLCAgIE5VTEwgfSwKLSAgIC8qIEM5OSBjb252ZXJzaW9uIHNwZWNpZmllcnMuICAq LwotICAgeyAiRmFBIiwgICAxLCBTVERfQzk5LCB7IFQ5OV9GLCAgIEJBRExFTiwgIEJBRExFTiwg IFQ5OV9ELCAgIEJBRExFTiwgIFQ5OV9MRCwgIEJBRExFTiwgIEJBRExFTiwgIEJBRExFTiAgfSwg Iip3JyIsICAiVyIsICAgTlVMTCB9LAotICAgLyogWC9PcGVuIGNvbnZlcnNpb24gc3BlY2lmaWVy cy4gICovCi0tICB7ICJDIiwgICAgIDEsIFNURF9FWFQsIHsgVEVYX1csICAgQkFETEVOLCAgQkFE TEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVO ICB9LCAiKnciLCAgICJXIiwgICBOVUxMIH0sCi0tICB7ICJTIiwgICAgIDEsIFNURF9FWFQsIHsg VEVYX1csICAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFE TEVOLCAgQkFETEVOLCAgQkFETEVOICB9LCAiKmF3IiwgICJXIiwgICBOVUxMIH0sCi0rICB7ICJD IiwgICAgIDEsIFNURF9FWFQsIHsgVEVYX1csICAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAg QkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOICB9LCAiKm13IiwgICJX IiwgICBOVUxMIH0sCi0rICB7ICJTIiwgICAgIDEsIFNURF9FWFQsIHsgVEVYX1csICAgQkFETEVO LCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAgQkFETEVOLCAg QkFETEVOICB9LCAiKmFtdyIsICJXIiwgICBOVUxMIH0sCi0gICB7IE5VTEwsIDAsIDAsIE5PTEVO R1RIUywgTlVMTCwgTlVMTCwgTlVMTCB9Ci0gfTsKLSAKLUBAIC03MDAsNTkgKzcwMiw1OSBAQCBz dGF0aWMgY29uc3QgZm9ybWF0X2tpbmRfaW5mbyBmb3JtYXRfdHlwCi0gICB7ICJwcmludGYiLCAg IHByaW50Zl9sZW5ndGhfc3BlY3MsICBwcmludF9jaGFyX3RhYmxlLCAiICsjMC0nSSIsIE5VTEws IAotICAgICBwcmludGZfZmxhZ19zcGVjcywgcHJpbnRmX2ZsYWdfcGFpcnMsCi0gICAgIEZNVF9G TEFHX0FSR19DT05WRVJUfEZNVF9GTEFHX0RPTExBUl9NVUxUSVBMRXxGTVRfRkxBR19VU0VfRE9M TEFSfEZNVF9GTEFHX0VNUFRZX1BSRUNfT0ssCi0tICAgICd3JywgMCwgJ3AnLCAwLCAnTCcsCi0r ICAgICd3JywgMCwgJ3AnLCAwLCAnTCcsIDAsCi0gICAgICZpbnRlZ2VyX3R5cGVfbm9kZSwgJmlu dGVnZXJfdHlwZV9ub2RlCi0gICB9LAotICAgeyAiYXNtX2ZwcmludGYiLCAgIGFzbV9mcHJpbnRm X2xlbmd0aF9zcGVjcywgIGFzbV9mcHJpbnRmX2NoYXJfdGFibGUsICIgKyMwLSIsIE5VTEwsIAot ICAgICBhc21fZnByaW50Zl9mbGFnX3NwZWNzLCBhc21fZnByaW50Zl9mbGFnX3BhaXJzLAotICAg ICBGTVRfRkxBR19BUkdfQ09OVkVSVHxGTVRfRkxBR19FTVBUWV9QUkVDX09LLAotLSAgICAndycs IDAsICdwJywgMCwgJ0wnLAotKyAgICAndycsIDAsICdwJywgMCwgJ0wnLCAwLAotICAgICBOVUxM LCBOVUxMCi0gICB9LAotICAgeyAiZ2NjX2RpYWciLCAgIGdjY19kaWFnX2xlbmd0aF9zcGVjcywg IGdjY19kaWFnX2NoYXJfdGFibGUsICJxKyIsIE5VTEwsIAotICAgICBnY2NfZGlhZ19mbGFnX3Nw ZWNzLCBnY2NfZGlhZ19mbGFnX3BhaXJzLAotICAgICBGTVRfRkxBR19BUkdfQ09OVkVSVCwKLS0g ICAgMCwgMCwgJ3AnLCAwLCAnTCcsCi0rICAgIDAsIDAsICdwJywgMCwgJ0wnLCAwLAotICAgICBO VUxMLCAmaW50ZWdlcl90eXBlX25vZGUKLSAgIH0sCi0gICB7ICJnY2NfdGRpYWciLCAgIGdjY190 ZGlhZ19sZW5ndGhfc3BlY3MsICBnY2NfdGRpYWdfY2hhcl90YWJsZSwgInErIiwgTlVMTCwgCi0g ICAgIGdjY190ZGlhZ19mbGFnX3NwZWNzLCBnY2NfdGRpYWdfZmxhZ19wYWlycywKLSAgICAgRk1U X0ZMQUdfQVJHX0NPTlZFUlQsCi0tICAgIDAsIDAsICdwJywgMCwgJ0wnLAotKyAgICAwLCAwLCAn cCcsIDAsICdMJywgMCwKLSAgICAgTlVMTCwgJmludGVnZXJfdHlwZV9ub2RlCi0gICB9LAotICAg eyAiZ2NjX2NkaWFnIiwgICBnY2NfY2RpYWdfbGVuZ3RoX3NwZWNzLCAgZ2NjX2NkaWFnX2NoYXJf dGFibGUsICJxKyIsIE5VTEwsIAotICAgICBnY2NfY2RpYWdfZmxhZ19zcGVjcywgZ2NjX2NkaWFn X2ZsYWdfcGFpcnMsCi0gICAgIEZNVF9GTEFHX0FSR19DT05WRVJULAotLSAgICAwLCAwLCAncCcs IDAsICdMJywKLSsgICAgMCwgMCwgJ3AnLCAwLCAnTCcsIDAsCi0gICAgIE5VTEwsICZpbnRlZ2Vy X3R5cGVfbm9kZQotICAgfSwKLSAgIHsgImdjY19jeHhkaWFnIiwgICBnY2NfY3h4ZGlhZ19sZW5n dGhfc3BlY3MsICBnY2NfY3h4ZGlhZ19jaGFyX3RhYmxlLCAicSsjIiwgTlVMTCwgCi0gICAgIGdj Y19jeHhkaWFnX2ZsYWdfc3BlY3MsIGdjY19jeHhkaWFnX2ZsYWdfcGFpcnMsCi0gICAgIEZNVF9G TEFHX0FSR19DT05WRVJULAotLSAgICAwLCAwLCAncCcsIDAsICdMJywKLSsgICAgMCwgMCwgJ3An LCAwLCAnTCcsIDAsCi0gICAgIE5VTEwsICZpbnRlZ2VyX3R5cGVfbm9kZQotICAgfSwKLSAgIHsg ImdjY19nZmMiLCBOVUxMLCBnY2NfZ2ZjX2NoYXJfdGFibGUsICIiLCBOVUxMLCAKLSAgICAgTlVM TCwgZ2NjX2dmY19mbGFnX3BhaXJzLAotICAgICBGTVRfRkxBR19BUkdfQ09OVkVSVCwKLS0gICAg MCwgMCwgMCwgMCwgMCwKLSsgICAgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgTlVMTCwgTlVMTAot ICAgfSwKLSAgIHsgInNjYW5mIiwgICAgc2NhbmZfbGVuZ3RoX3NwZWNzLCAgIHNjYW5fY2hhcl90 YWJsZSwgICIqJ0kiLCBOVUxMLCAKLSAgICAgc2NhbmZfZmxhZ19zcGVjcywgc2NhbmZfZmxhZ19w YWlycywKLSAgICAgRk1UX0ZMQUdfQVJHX0NPTlZFUlR8Rk1UX0ZMQUdfU0NBTkZfQV9LTFVER0V8 Rk1UX0ZMQUdfVVNFX0RPTExBUnxGTVRfRkxBR19aRVJPX1dJRFRIX0JBRHxGTVRfRkxBR19ET0xM QVJfR0FQX1BPSU5URVJfT0ssCi0tICAgICd3JywgMCwgMCwgJyonLCAnTCcsCi0rICAgICd3Jywg MCwgMCwgJyonLCAnTCcsICdtJywKLSAgICAgTlVMTCwgTlVMTAotICAgfSwKLSAgIHsgInN0cmZ0 aW1lIiwgTlVMTCwgICAgICAgICAgICAgICAgIHRpbWVfY2hhcl90YWJsZSwgICJfLTBeIyIsICJF TyIsCi0gICAgIHN0cmZ0aW1lX2ZsYWdfc3BlY3MsIHN0cmZ0aW1lX2ZsYWdfcGFpcnMsCi0tICAg IEZNVF9GTEFHX0ZBTkNZX1BFUkNFTlRfT0ssICd3JywgMCwgMCwgMCwgMCwKLSsgICAgRk1UX0ZM QUdfRkFOQ1lfUEVSQ0VOVF9PSywgJ3cnLCAwLCAwLCAwLCAwLCAwLAotICAgICBOVUxMLCBOVUxM Ci0gICB9LAotICAgeyAic3RyZm1vbiIsICBzdHJmbW9uX2xlbmd0aF9zcGVjcywgbW9uZXRhcnlf Y2hhcl90YWJsZSwgIj1eKyghLSIsIE5VTEwsIAotICAgICBzdHJmbW9uX2ZsYWdfc3BlY3MsIHN0 cmZtb25fZmxhZ19wYWlycywKLS0gICAgRk1UX0ZMQUdfQVJHX0NPTlZFUlQsICd3JywgJyMnLCAn cCcsIDAsICdMJywKLSsgICAgRk1UX0ZMQUdfQVJHX0NPTlZFUlQsICd3JywgJyMnLCAncCcsIDAs ICdMJywgMCwKLSAgICAgTlVMTCwgTlVMTAotICAgfQotIH07Ci1AQCAtMTQ2Miw3ICsxNDY0LDcg QEAgY2hlY2tfZm9ybWF0X2luZm9fbWFpbiAoZm9ybWF0X2NoZWNrX3JlcwotICAgICAgIGNvbnN0 IGZvcm1hdF9sZW5ndGhfaW5mbyAqZmxpID0gTlVMTDsKLSAgICAgICBjb25zdCBmb3JtYXRfY2hh cl9pbmZvICpmY2kgPSBOVUxMOwotICAgICAgIGNoYXIgZmxhZ19jaGFyc1syNTZdOwotLSAgICAg IGludCBhZmxhZyA9IDA7Ci0rICAgICAgaW50IGFsbG9jX2ZsYWcgPSAwOwotICAgICAgIGNvbnN0 IGNoYXIgKmZvcm1hdF9zdGFydCA9IGZvcm1hdF9jaGFyczsKLSAgICAgICBpZiAoKmZvcm1hdF9j aGFycyA9PSAwKQotIAl7Ci1AQCAtMTcyMSw2ICsxNzIzLDMxIEBAIGNoZWNrX2Zvcm1hdF9pbmZv X21haW4gKGZvcm1hdF9jaGVja19yZXMKLSAJICAgIH0KLSAJfQotIAotKyAgICAgIGlmIChma2kt PmFsbG9jX2NoYXIgJiYgZmtpLT5hbGxvY19jaGFyID09ICpmb3JtYXRfY2hhcnMpCi0rCXsKLSsJ ICBpID0gc3RybGVuIChmbGFnX2NoYXJzKTsKLSsJICBmbGFnX2NoYXJzW2krK10gPSBma2ktPmFs bG9jX2NoYXI7Ci0rCSAgZmxhZ19jaGFyc1tpXSA9IDA7Ci0rCSAgZm9ybWF0X2NoYXJzKys7Ci0r CX0KLSsKLSsgICAgICAvKiBIYW5kbGUgdGhlIHNjYW5mIGFsbG9jYXRpb24ga2x1ZGdlLiAgKi8K LSsgICAgICBpZiAoZmtpLT5mbGFncyAmIChpbnQpIEZNVF9GTEFHX1NDQU5GX0FfS0xVREdFKQot Kwl7Ci0rCSAgaWYgKCpmb3JtYXRfY2hhcnMgPT0gJ2EnICYmICFmbGFnX2lzb2M5OSkKLSsJICAg IHsKLSsJICAgICAgaWYgKGZvcm1hdF9jaGFyc1sxXSA9PSAncycgfHwgZm9ybWF0X2NoYXJzWzFd ID09ICdTJwotKwkJICB8fCBmb3JtYXRfY2hhcnNbMV0gPT0gJ1snKQotKwkJewotKwkJICAvKiAn YScgaXMgdXNlZCBhcyBhIGZsYWcuICAqLwotKwkJICBpID0gc3RybGVuIChmbGFnX2NoYXJzKTsK LSsJCSAgZmxhZ19jaGFyc1tpKytdID0gJ2EnOwotKwkJICBmbGFnX2NoYXJzW2ldID0gMDsKLSsJ CSAgZm9ybWF0X2NoYXJzKys7Ci0rCQl9Ci0rCSAgICB9Ci0rCX0KLSsKLSAgICAgICAvKiBSZWFk IGFueSBsZW5ndGggbW9kaWZpZXIsIGlmIHRoaXMga2luZCBvZiBmb3JtYXQgaGFzIHRoZW0uICAq LwotICAgICAgIGZsaSA9IGZraS0+bGVuZ3RoX2NoYXJfc3BlY3M7Ci0gICAgICAgbGVuZ3RoX2No YXJzID0gTlVMTDsKLUBAIC0xNzgzLDIzICsxODEwLDYgQEAgY2hlY2tfZm9ybWF0X2luZm9fbWFp biAoZm9ybWF0X2NoZWNrX3JlcwotIAkgICAgfQotIAl9Ci0gCi0tICAgICAgLyogSGFuZGxlIHRo ZSBzY2FuZiBhbGxvY2F0aW9uIGtsdWRnZS4gICovCi0tICAgICAgaWYgKGZraS0+ZmxhZ3MgJiAo aW50KSBGTVRfRkxBR19TQ0FORl9BX0tMVURHRSkKLS0JewotLQkgIGlmICgqZm9ybWF0X2NoYXJz ID09ICdhJyAmJiAhZmxhZ19pc29jOTkpCi0tCSAgICB7Ci0tCSAgICAgIGlmIChmb3JtYXRfY2hh cnNbMV0gPT0gJ3MnIHx8IGZvcm1hdF9jaGFyc1sxXSA9PSAnUycKLS0JCSAgfHwgZm9ybWF0X2No YXJzWzFdID09ICdbJykKLS0JCXsKLS0JCSAgLyogJ2EnIGlzIHVzZWQgYXMgYSBmbGFnLiAgKi8K LS0JCSAgaSA9IHN0cmxlbiAoZmxhZ19jaGFycyk7Ci0tCQkgIGZsYWdfY2hhcnNbaSsrXSA9ICdh JzsKLS0JCSAgZmxhZ19jaGFyc1tpXSA9IDA7Ci0tCQkgIGZvcm1hdF9jaGFycysrOwotLQkJfQot LQkgICAgfQotLQl9Ci0tCi0gICAgICAgZm9ybWF0X2NoYXIgPSAqZm9ybWF0X2NoYXJzOwotICAg ICAgIGlmIChmb3JtYXRfY2hhciA9PSAwCi0gCSAgfHwgKCEoZmtpLT5mbGFncyAmIChpbnQpIEZN VF9GTEFHX0ZBTkNZX1BFUkNFTlRfT0spCi1AQCAtMTg3Miw3ICsxODgyLDkgQEAgY2hlY2tfZm9y bWF0X2luZm9fbWFpbiAoZm9ybWF0X2NoZWNrX3JlcwotIAotICAgICAgIGlmICgoZmtpLT5mbGFn cyAmIChpbnQpIEZNVF9GTEFHX1NDQU5GX0FfS0xVREdFKQotIAkgICYmIHN0cmNociAoZmxhZ19j aGFycywgJ2EnKSAhPSAwKQotLQlhZmxhZyA9IDE7Ci0rCWFsbG9jX2ZsYWcgPSAxOwotKyAgICAg IGlmIChma2ktPmFsbG9jX2NoYXIgJiYgc3RyY2hyIChmbGFnX2NoYXJzLCBma2ktPmFsbG9jX2No YXIpICE9IDApCi0rCWFsbG9jX2ZsYWcgPSAxOwotIAotICAgICAgIGlmIChma2ktPnN1cHByZXNz aW9uX2NoYXIKLSAJICAmJiBzdHJjaHIgKGZsYWdfY2hhcnMsIGZraS0+c3VwcHJlc3Npb25fY2hh cikgIT0gMCkKLUBAIC0yMDQ0LDEzICsyMDU2LDEzIEBAIGNoZWNrX2Zvcm1hdF9pbmZvX21haW4g KGZvcm1hdF9jaGVja19yZXMKLSAKLSAJICAgICAgd2FudGVkX3R5cGVfcHRyLT53YW50ZWRfdHlw ZSA9IHdhbnRlZF90eXBlOwotIAkgICAgICB3YW50ZWRfdHlwZV9wdHItPndhbnRlZF90eXBlX25h bWUgPSB3YW50ZWRfdHlwZV9uYW1lOwotLQkgICAgICB3YW50ZWRfdHlwZV9wdHItPnBvaW50ZXJf Y291bnQgPSBmY2ktPnBvaW50ZXJfY291bnQgKyBhZmxhZzsKLSsJICAgICAgd2FudGVkX3R5cGVf cHRyLT5wb2ludGVyX2NvdW50ID0gZmNpLT5wb2ludGVyX2NvdW50ICsgYWxsb2NfZmxhZzsKLSAJ ICAgICAgd2FudGVkX3R5cGVfcHRyLT5jaGFyX2xlbmllbnRfZmxhZyA9IDA7Ci0gCSAgICAgIGlm IChzdHJjaHIgKGZjaS0+ZmxhZ3MyLCAnYycpICE9IDApCi0gCQl3YW50ZWRfdHlwZV9wdHItPmNo YXJfbGVuaWVudF9mbGFnID0gMTsKLSAJICAgICAgd2FudGVkX3R5cGVfcHRyLT53cml0aW5nX2lu X2ZsYWcgPSAwOwotIAkgICAgICB3YW50ZWRfdHlwZV9wdHItPnJlYWRpbmdfZnJvbV9mbGFnID0g MDsKLS0JICAgICAgaWYgKGFmbGFnKQotKwkgICAgICBpZiAoYWxsb2NfZmxhZykKLSAJCXdhbnRl ZF90eXBlX3B0ci0+d3JpdGluZ19pbl9mbGFnID0gMTsKLSAJICAgICAgZWxzZQotIAkJewotLS0t IGdjYy9jb25maWcvc29sMi1jLmMuamoJMjAwNy0wMi0yMCAyMjozOToxMS4wMDAwMDAwMDAgKzAx MDAKLSsrKyBnY2MvY29uZmlnL3NvbDItYy5jCTIwMDctMDktMTcgMjI6NDQ6MTcuMDAwMDAwMDAw ICswMjAwCi1AQCAtNzQsNyArNzQsNyBAQCBjb25zdCBmb3JtYXRfa2luZF9pbmZvIHNvbGFyaXNf Zm9ybWF0X3R5Ci0gICB7ICJjbW5fZXJyIiwgIGNtbl9lcnJfbGVuZ3RoX3NwZWNzLCAgY21uX2Vy cl9jaGFyX3RhYmxlLCAiIiwgTlVMTCwKLSAgICAgY21uX2Vycl9mbGFnX3NwZWNzLCBjbW5fZXJy X2ZsYWdfcGFpcnMsCi0gICAgIEZNVF9GTEFHX0FSR19DT05WRVJUfEZNVF9GTEFHX0VNUFRZX1BS RUNfT0ssCi0tICAgICd3JywgMCwgMCwgMCwgJ0wnLAotKyAgICAndycsIDAsIDAsIDAsICdMJywg MCwKLSAgICAgJmludGVnZXJfdHlwZV9ub2RlLCAmaW50ZWdlcl90eXBlX25vZGUKLSAgIH0KLSB9 OwotLS0tIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2Zvcm1hdC9jOTAtc2NhbmYtNS5jLmpqCTIwMDct MDktMTcgMjI6NDQ6MTcuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv Zm9ybWF0L2M5MC1zY2FuZi01LmMJMjAwNy0wOS0xNyAyMjo0NDoxNy4wMDAwMDAwMDAgKzAyMDAK LUBAIC0wLDAgKzEsMTkgQEAKLSsvKiBUZXN0IGZvciBzY2FuZiBmb3JtYXRzLiAgRm9ybWF0cyB1 c2luZyBleHRlbnNpb25zIHRvIHRoZSBzdGFuZGFyZAotKyAgIHNob3VsZCBiZSByZWplY3RlZCBp biBzdHJpY3QgcGVkYW50aWMgbW9kZS4KLSsqLwotKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0r LyogeyBkZy1vcHRpb25zICItc3RkPWlzbzk4OTk6MTk5MCAtcGVkYW50aWMgLVdmb3JtYXQiIH0g Ki8KLSsKLSsjaW5jbHVkZSAiZm9ybWF0LmgiCi0rCi0rdm9pZAotK2ZvbyAoY2hhciAqKnNwLCB3 Y2hhcl90ICoqbHNwKQotK3sKLSsgIC8qIG0gYXNzaWdubWVudC1hbGxvY2F0aW9uIG1vZGlmaWVy LCByZWNvZ25pemVkIGluIGJvdGggQzkwCi0rICAgICBhbmQgQzk5IG1vZGVzLCBpcyBhIFBPU0lY IGFuZCBJU08vSUVDIFdEVFIgMjQ3MzEtMiBleHRlbnNpb24uICAqLwotKyAgc2NhbmYgKCIlbXMi LCBzcCk7IC8qIHsgZGctd2FybmluZyAiQyIgIiVtcyIgfSAqLwotKyAgc2NhbmYgKCIlbVMiLCBs c3ApOyAvKiB7IGRnLXdhcm5pbmcgIkMiICIlbVMiIH0gKi8KLSsgIHNjYW5mICgiJW1scyIsIGxz cCk7IC8qIHsgZGctd2FybmluZyAiQyIgIiVtbHMiIH0gKi8KLSsgIHNjYW5mICgiJW1bYmNkXSIs IHNwKTsgLyogeyBkZy13YXJuaW5nICJDIiAiJW1bXSIgfSAqLwotKyAgc2NhbmYgKCIlbWxbYmNk XSIsIGxzcCk7IC8qIHsgZGctd2FybmluZyAiQyIgIiVtbFtdIiB9ICovCi0rfQotLS0tIGdjYy90 ZXN0c3VpdGUvZ2NjLmRnL2Zvcm1hdC9jOTktc2NhbmYtNC5jLmpqCTIwMDctMDktMTcgMjI6NDQ6 MTcuMDAwMDAwMDAwICswMjAwCi0rKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZm9ybWF0L2M5OS1z Y2FuZi00LmMJMjAwNy0wOS0xNyAyMjo0NDoxNy4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEs MTkgQEAKLSsvKiBUZXN0IGZvciBzY2FuZiBmb3JtYXRzLiAgRm9ybWF0cyB1c2luZyBleHRlbnNp b25zIHRvIHRoZSBzdGFuZGFyZAotKyAgIHNob3VsZCBiZSByZWplY3RlZCBpbiBzdHJpY3QgcGVk YW50aWMgbW9kZS4KLSsqLwotKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCi0rLyogeyBkZy1vcHRp b25zICItc3RkPWlzbzk4OTk6MTk5OSAtcGVkYW50aWMgLVdmb3JtYXQiIH0gKi8KLSsKLSsjaW5j bHVkZSAiZm9ybWF0LmgiCi0rCi0rdm9pZAotK2ZvbyAoY2hhciAqKnNwLCB3Y2hhcl90ICoqbHNw KQotK3sKLSsgIC8qIG0gYXNzaWdubWVudC1hbGxvY2F0aW9uIG1vZGlmaWVyLCByZWNvZ25pemVk IGluIGJvdGggQzkwCi0rICAgICBhbmQgQzk5IG1vZGVzLCBpcyBhIFBPU0lYIGFuZCBJU08vSUVD IFdEVFIgMjQ3MzEtMiBleHRlbnNpb24uICAqLwotKyAgc2NhbmYgKCIlbXMiLCBzcCk7IC8qIHsg ZGctd2FybmluZyAiQyIgIiVtcyIgfSAqLwotKyAgc2NhbmYgKCIlbVMiLCBsc3ApOyAvKiB7IGRn LXdhcm5pbmcgIkMiICIlbVMiIH0gKi8KLSsgIHNjYW5mICgiJW1scyIsIGxzcCk7IC8qIHsgZGct d2FybmluZyAiQyIgIiVtbHMiIH0gKi8KLSsgIHNjYW5mICgiJW1bYmNkXSIsIHNwKTsgLyogeyBk Zy13YXJuaW5nICJDIiAiJW1bXSIgfSAqLwotKyAgc2NhbmYgKCIlbWxbYmNkXSIsIGxzcCk7IC8q IHsgZGctd2FybmluZyAiQyIgIiVtbFtdIiB9ICovCi0rfQotLS0tIGdjYy90ZXN0c3VpdGUvZ2Nj LmRnL2Zvcm1hdC9leHQtNy5jLmpqCTIwMDctMDktMTcgMjI6NDQ6MTcuMDAwMDAwMDAwICswMjAw Ci0rKysgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZm9ybWF0L2V4dC03LmMJMjAwNy0wOS0xNyAyMjo0 NDoxNy4wMDAwMDAwMDAgKzAyMDAKLUBAIC0wLDAgKzEsODUgQEAKLSsvKiBUZXN0IGZvciBzY2Fu ZiBmb3JtYXRzLiAgJWEgYW5kICVtIGV4dGVuc2lvbnMuICAqLwotKy8qIHsgZGctZG8gY29tcGls ZSB9ICovCi0rLyogeyBkZy1vcHRpb25zICItc3RkPWdudTg5IC1XZm9ybWF0IiB9ICovCi0rCi0r I2luY2x1ZGUgImZvcm1hdC5oIgotKwotK3ZvaWQKLStmb28gKGNoYXIgKipzcCwgd2NoYXJfdCAq KmxzcCwgaW50ICppcCwgZmxvYXQgKmZwLCB2b2lkICoqcHAsIGRvdWJsZSAqZHApCi0rewotKyAg LyogJWEgZm9ybWF0cyBmb3IgYWxsb2NhdGlvbiwgb25seSByZWNvZ25pemVkIGluIEM5MCBtb2Rl LCBhcmUgYQotKyAgICAgR05VIGV4dGVuc2lvbi4gIEZvbGxvd2VkIGJ5IG90aGVyIGNoYXJhY3Rl cnMsICVhIGlzIG5vdCB0cmVhdGVkCi0rICAgICBzcGVjaWFsbHkuCi0rICAqLwotKyAgc2NhbmYg KCIlYXMiLCBzcCk7Ci0rICBzY2FuZiAoIiVhUyIsIGxzcCk7Ci0rICBzY2FuZiAoIiVsYXMiLCBk cCk7Ci0rICBzY2FuZiAoIiVsYSIsIGxzcCk7CS8qIHsgZGctd2FybmluZyAiYnV0IGFyZ3VtZW50 IDIgaGFzIHR5cGUiIH0gKi8KLSsgIHNjYW5mICgiJWxhcyIsIGxzcCk7CS8qIHsgZGctd2Fybmlu ZyAiYnV0IGFyZ3VtZW50IDIgaGFzIHR5cGUiIH0gKi8KLSsgIHNjYW5mICgiJWFbYmNkXSIsIHNw KTsKLSsgIHNjYW5mICgiJWxhW2JjZF0iLCBkcCk7Ci0rICBzY2FuZiAoIiUqYXMiKTsKLSsgIHNj YW5mICgiJSphUyIpOwotKyAgc2NhbmYgKCIlKmxhcyIpOwkvKiB7IGRnLXdhcm5pbmcgImFzc2ln bm1lbnQgc3VwcHJlc3Npb24gYW5kIGxlbmd0aCBtb2RpZmllciIgfSAqLwotKyAgc2NhbmYgKCIl KmFbYmNkXSIpOwotKyAgc2NhbmYgKCIlKmxhW2JjZF0iKTsJLyogeyBkZy13YXJuaW5nICJhc3Np Z25tZW50IHN1cHByZXNzaW9uIGFuZCBsZW5ndGggbW9kaWZpZXIiIH0gKi8KLSsgIHNjYW5mICgi JTEwYXMiLCBzcCk7Ci0rICBzY2FuZiAoIiU1YVMiLCBsc3ApOwotKyAgc2NhbmYgKCIlOWxhcyIs IGRwKTsKLSsgIHNjYW5mICgiJTI1YVtiY2RdIiwgc3ApOwotKyAgc2NhbmYgKCIlNDhsYVtiY2Rd IiwgZHApOwotKyAgc2NhbmYgKCIlKjEwYXMiKTsKLSsgIHNjYW5mICgiJSo1YVMiKTsKLSsgIHNj YW5mICgiJSo5bGFzIik7CS8qIHsgZGctd2FybmluZyAiYXNzaWdubWVudCBzdXBwcmVzc2lvbiBh bmQgbGVuZ3RoIG1vZGlmaWVyIiB9ICovCi0rICBzY2FuZiAoIiUqMjVhW2JjZF0iKTsKLSsgIHNj YW5mICgiJSo0OGxhW2JjZF0iKTsgLyogeyBkZy13YXJuaW5nICJhc3NpZ25tZW50IHN1cHByZXNz aW9uIGFuZCBsZW5ndGggbW9kaWZpZXIiIH0gKi8KLSsKLSsgIC8qIG0gYXNzaWdubWVudC1hbGxv Y2F0aW9uIG1vZGlmaWVyLCByZWNvZ25pemVkIGluIGJvdGggQzkwCi0rICAgICBhbmQgQzk5IG1v ZGVzLCBpcyBhIFBPU0lYIGFuZCBJU08vSUVDIFdEVFIgMjQ3MzEtMiBleHRlbnNpb24uICAqLwot KyAgc2NhbmYgKCIlbXMiLCBzcCk7Ci0rICBzY2FuZiAoIiVtUyIsIGxzcCk7Ci0rICBzY2FuZiAo IiVtbHMiLCBsc3ApOwotKyAgc2NhbmYgKCIlbVtiY2RdIiwgc3ApOwotKyAgc2NhbmYgKCIlbWxb YmNkXSIsIGxzcCk7Ci0rICBzY2FuZiAoIiVtYyIsIHNwKTsKLSsgIHNjYW5mICgiJW1sYyIsIGxz cCk7Ci0rICBzY2FuZiAoIiVtQyIsIGxzcCk7Ci0rICBzY2FuZiAoIiUqbXMiKTsKLSsgIHNjYW5m ICgiJSptUyIpOwotKyAgc2NhbmYgKCIlKm1scyIpOwkvKiB7IGRnLXdhcm5pbmcgImFzc2lnbm1l bnQgc3VwcHJlc3Npb24gYW5kIGxlbmd0aCBtb2RpZmllciIgfSAqLwotKyAgc2NhbmYgKCIlKm1b YmNkXSIpOwotKyAgc2NhbmYgKCIlKm1sW2JjZF0iKTsJLyogeyBkZy13YXJuaW5nICJhc3NpZ25t ZW50IHN1cHByZXNzaW9uIGFuZCBsZW5ndGggbW9kaWZpZXIiIH0gKi8KLSsgIHNjYW5mICgiJSpt YyIpOwotKyAgc2NhbmYgKCIlKm1sYyIpOwkvKiB7IGRnLXdhcm5pbmcgImFzc2lnbm1lbnQgc3Vw cHJlc3Npb24gYW5kIGxlbmd0aCBtb2RpZmllciIgfSAqLwotKyAgc2NhbmYgKCIlKm1DIik7Ci0r ICBzY2FuZiAoIiUxMG1zIiwgc3ApOwotKyAgc2NhbmYgKCIlNW1TIiwgbHNwKTsKLSsgIHNjYW5m ICgiJTltbHMiLCBsc3ApOwotKyAgc2NhbmYgKCIlMjVtW2JjZF0iLCBzcCk7Ci0rICBzY2FuZiAo IiU0MW1sW2JjZF0iLCBsc3ApOwotKyAgc2NhbmYgKCIlMTMxbWMiLCBzcCk7Ci0rICBzY2FuZiAo IiUyN21sYyIsIGxzcCk7Ci0rICBzY2FuZiAoIiUybUMiLCBsc3ApOwotKyAgc2NhbmYgKCIlKjEw bXMiKTsKLSsgIHNjYW5mICgiJSo1bVMiKTsKLSsgIHNjYW5mICgiJSo5bWxzIik7CS8qIHsgZGct d2FybmluZyAiYXNzaWdubWVudCBzdXBwcmVzc2lvbiBhbmQgbGVuZ3RoIG1vZGlmaWVyIiB9ICov Ci0rICBzY2FuZiAoIiUqMjVtW2JjZF0iKTsKLSsgIHNjYW5mICgiJSo0MW1sW2JjZF0iKTsgLyog eyBkZy13YXJuaW5nICJhc3NpZ25tZW50IHN1cHByZXNzaW9uIGFuZCBsZW5ndGggbW9kaWZpZXIi IH0gKi8KLSsgIHNjYW5mICgiJSoxMzFtYyIpOwotKyAgc2NhbmYgKCIlKjI3bWxjIik7CS8qIHsg ZGctd2FybmluZyAiYXNzaWdubWVudCBzdXBwcmVzc2lvbiBhbmQgbGVuZ3RoIG1vZGlmaWVyIiB9 ICovCi0rICBzY2FuZiAoIiUqMm1DIik7Ci0rCi0rICBzY2FuZiAoIiVtZCIsIGlwKTsJLyogeyBk Zy13YXJuaW5nICJmbGFnIHVzZWQgd2l0aCIgfSAqLwotKyAgc2NhbmYgKCIlbWkiLCBpcCk7CS8q IHsgZGctd2FybmluZyAiZmxhZyB1c2VkIHdpdGgiIH0gKi8KLSsgIHNjYW5mICgiJW1vIiwgaXAp OwkvKiB7IGRnLXdhcm5pbmcgImZsYWcgdXNlZCB3aXRoIiB9ICovCi0rICBzY2FuZiAoIiVtdSIs IGlwKTsJLyogeyBkZy13YXJuaW5nICJmbGFnIHVzZWQgd2l0aCIgfSAqLwotKyAgc2NhbmYgKCIl bXgiLCBpcCk7CS8qIHsgZGctd2FybmluZyAiZmxhZyB1c2VkIHdpdGgiIH0gKi8KLSsgIHNjYW5m ICgiJW1lIiwgZnApOwkvKiB7IGRnLXdhcm5pbmcgImZsYWcgdXNlZCB3aXRoIiB9ICovCi0rICBz Y2FuZiAoIiVtZiIsIGZwKTsJLyogeyBkZy13YXJuaW5nICJmbGFnIHVzZWQgd2l0aCIgfSAqLwot KyAgc2NhbmYgKCIlbWciLCBmcCk7CS8qIHsgZGctd2FybmluZyAiZmxhZyB1c2VkIHdpdGgiIH0g Ki8KLSsgIHNjYW5mICgiJW1wIiwgcHApOwkvKiB7IGRnLXdhcm5pbmcgImZsYWcgdXNlZCB3aXRo IiB9ICovCi0rCi0rICBzY2FuZiAoIiVtYXMiLCBzcCk7CS8qIHsgZGctd2FybmluZyAiZmxhZyB0 b2dldGhlciIgfSAqLwotKyAgc2NhbmYgKCIlbWFTIiwgbHNwKTsJLyogeyBkZy13YXJuaW5nICJm bGFnIHRvZ2V0aGVyIiB9ICovCi0rICBzY2FuZiAoIiVtYVtiY2RdIiwgc3ApOwkvKiB7IGRnLXdh cm5pbmcgImZsYWcgdG9nZXRoZXIiIH0gKi8KLSt9Ci0tLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv Zm9ybWF0L2V4dC04LmMuamoJMjAwNy0wOS0xNyAyMjo0NDoxNy4wMDAwMDAwMDAgKzAyMDAKLSsr KyBnY2MvdGVzdHN1aXRlL2djYy5kZy9mb3JtYXQvZXh0LTguYwkyMDA3LTA5LTE3IDIyOjQ0OjE3 LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSw1NiBAQAotKy8qIFRlc3QgZm9yIHNjYW5mIGZv cm1hdHMuICAlbSBleHRlbnNpb25zLiAgKi8KLSsvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLwotKy8q IHsgZGctb3B0aW9ucyAiLXN0ZD1nbnU5OSAtV2Zvcm1hdCIgfSAqLwotKwotKyNpbmNsdWRlICJm b3JtYXQuaCIKLSsKLSt2b2lkCi0rZm9vIChjaGFyICoqc3AsIHdjaGFyX3QgKipsc3AsIGludCAq aXAsIGZsb2F0ICpmcCwgdm9pZCAqKnBwKQotK3sKLSsgIC8qIG0gYXNzaWdubWVudC1hbGxvY2F0 aW9uIG1vZGlmaWVyLCByZWNvZ25pemVkIGluIGJvdGggQzkwCi0rICAgICBhbmQgQzk5IG1vZGVz LCBpcyBhIFBPU0lYIGFuZCBJU08vSUVDIFdEVFIgMjQ3MzEtMiBleHRlbnNpb24uICAqLwotKyAg c2NhbmYgKCIlbXMiLCBzcCk7Ci0rICBzY2FuZiAoIiVtUyIsIGxzcCk7Ci0rICBzY2FuZiAoIiVt bHMiLCBsc3ApOwotKyAgc2NhbmYgKCIlbVtiY2RdIiwgc3ApOwotKyAgc2NhbmYgKCIlbWxbYmNk XSIsIGxzcCk7Ci0rICBzY2FuZiAoIiVtYyIsIHNwKTsKLSsgIHNjYW5mICgiJW1sYyIsIGxzcCk7 Ci0rICBzY2FuZiAoIiVtQyIsIGxzcCk7Ci0rICBzY2FuZiAoIiUqbXMiKTsKLSsgIHNjYW5mICgi JSptUyIpOwotKyAgc2NhbmYgKCIlKm1scyIpOwkvKiB7IGRnLXdhcm5pbmcgImFzc2lnbm1lbnQg c3VwcHJlc3Npb24gYW5kIGxlbmd0aCBtb2RpZmllciIgfSAqLwotKyAgc2NhbmYgKCIlKm1bYmNk XSIpOwotKyAgc2NhbmYgKCIlKm1sW2JjZF0iKTsJLyogeyBkZy13YXJuaW5nICJhc3NpZ25tZW50 IHN1cHByZXNzaW9uIGFuZCBsZW5ndGggbW9kaWZpZXIiIH0gKi8KLSsgIHNjYW5mICgiJSptYyIp OwotKyAgc2NhbmYgKCIlKm1sYyIpOwkvKiB7IGRnLXdhcm5pbmcgImFzc2lnbm1lbnQgc3VwcHJl c3Npb24gYW5kIGxlbmd0aCBtb2RpZmllciIgfSAqLwotKyAgc2NhbmYgKCIlKm1DIik7Ci0rICBz Y2FuZiAoIiUxMG1zIiwgc3ApOwotKyAgc2NhbmYgKCIlNW1TIiwgbHNwKTsKLSsgIHNjYW5mICgi JTltbHMiLCBsc3ApOwotKyAgc2NhbmYgKCIlMjVtW2JjZF0iLCBzcCk7Ci0rICBzY2FuZiAoIiU0 MW1sW2JjZF0iLCBsc3ApOwotKyAgc2NhbmYgKCIlMTMxbWMiLCBzcCk7Ci0rICBzY2FuZiAoIiUy N21sYyIsIGxzcCk7Ci0rICBzY2FuZiAoIiUybUMiLCBsc3ApOwotKyAgc2NhbmYgKCIlKjEwbXMi KTsKLSsgIHNjYW5mICgiJSo1bVMiKTsKLSsgIHNjYW5mICgiJSo5bWxzIik7CS8qIHsgZGctd2Fy bmluZyAiYXNzaWdubWVudCBzdXBwcmVzc2lvbiBhbmQgbGVuZ3RoIG1vZGlmaWVyIiB9ICovCi0r ICBzY2FuZiAoIiUqMjVtW2JjZF0iKTsKLSsgIHNjYW5mICgiJSo0MW1sW2JjZF0iKTsgLyogeyBk Zy13YXJuaW5nICJhc3NpZ25tZW50IHN1cHByZXNzaW9uIGFuZCBsZW5ndGggbW9kaWZpZXIiIH0g Ki8KLSsgIHNjYW5mICgiJSoxMzFtYyIpOwotKyAgc2NhbmYgKCIlKjI3bWxjIik7CS8qIHsgZGct d2FybmluZyAiYXNzaWdubWVudCBzdXBwcmVzc2lvbiBhbmQgbGVuZ3RoIG1vZGlmaWVyIiB9ICov Ci0rICBzY2FuZiAoIiUqMm1DIik7Ci0rCi0rICBzY2FuZiAoIiVtZCIsIGlwKTsJLyogeyBkZy13 YXJuaW5nICJmbGFnIHVzZWQgd2l0aCIgfSAqLwotKyAgc2NhbmYgKCIlbWkiLCBpcCk7CS8qIHsg ZGctd2FybmluZyAiZmxhZyB1c2VkIHdpdGgiIH0gKi8KLSsgIHNjYW5mICgiJW1vIiwgaXApOwkv KiB7IGRnLXdhcm5pbmcgImZsYWcgdXNlZCB3aXRoIiB9ICovCi0rICBzY2FuZiAoIiVtdSIsIGlw KTsJLyogeyBkZy13YXJuaW5nICJmbGFnIHVzZWQgd2l0aCIgfSAqLwotKyAgc2NhbmYgKCIlbXgi LCBpcCk7CS8qIHsgZGctd2FybmluZyAiZmxhZyB1c2VkIHdpdGgiIH0gKi8KLSsgIHNjYW5mICgi JW1hIiwgZnApOwkvKiB7IGRnLXdhcm5pbmcgImZsYWcgdXNlZCB3aXRoIiB9ICovCi0rICBzY2Fu ZiAoIiVtQSIsIGZwKTsJLyogeyBkZy13YXJuaW5nICJmbGFnIHVzZWQgd2l0aCIgfSAqLwotKyAg c2NhbmYgKCIlbWUiLCBmcCk7CS8qIHsgZGctd2FybmluZyAiZmxhZyB1c2VkIHdpdGgiIH0gKi8K LSsgIHNjYW5mICgiJW1mIiwgZnApOwkvKiB7IGRnLXdhcm5pbmcgImZsYWcgdXNlZCB3aXRoIiB9 ICovCi0rICBzY2FuZiAoIiVtZyIsIGZwKTsJLyogeyBkZy13YXJuaW5nICJmbGFnIHVzZWQgd2l0 aCIgfSAqLwotKyAgc2NhbmYgKCIlbXAiLCBwcCk7CS8qIHsgZGctd2FybmluZyAiZmxhZyB1c2Vk IHdpdGgiIH0gKi8KLSt9CgpkaWZmIC0tZ2l0IGEvZ2NjNDEtc3BhcmMtbmlhZ2FyYS5wYXRjaCBi L2djYzQxLXNwYXJjLW5pYWdhcmEucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGM5ZTYxYmEuLjAwMDAwMDAKLS0tIGEvZ2NjNDEtc3BhcmMtbmlhZ2FyYS5wYXRjaAorKysgL2Rl di9udWxsCkBAIC0xLDUxOSArMCwwIEBACi0yMDA2LTAzLTAyICBEYXZpZCBTLiBNaWxsZXIgIDxk YXZlbUBzdW5zZXQuZGF2ZW1sb2Z0Lm5ldD4KLQotCVN1biBOaWFnYXJhIHNwZWNpZmljIG9wdGlt aXphdGlvbnMuCi0JKiBjb25maWcuZ2NjOiBSZWNvZ25pemUgbmlhZ2FyYSBhcyB0YXJnZXQuCi0J KiBjb25maWcvc3BhcmMvc3BhcmMuaCAoU1BBUkNfUkVMQVhFRF9PUkRFUklORyk6IE1lbnRpb24g TmlhZ2FyYS4KLQkoVEFSR0VUX0NQVV9uaWFnYXJhKTogRGVmaW5lLgotCShDUFBfQ1BVNjRfREVG QVVMVF9TUEVDKTogRGVmaW5lIF9fc3BhcmNfdjlfXyBmb3IgTmlhZ2FyYS4KLQkoQVNNX0NQVTY0 X0RFRkFVTFRfU1BFQyk6IFBhc3MgLUF2OWIgZm9yIE5pYWdhcmEuCi0JKENQUF9DUFVfU1BFQyk6 IEhhbmRsZSAtbWNwdT1uaWFnYXJhLgotCShBU01fQ1BVX1NQRUMpOiBMaWtld2lzZS4KLQkoUFJP Q0VTU09SX05JQUdBUkEpOiBOZXcgZW51bSBlbnRyeS4KLQkoUkVHSVNURVJfTU9WRV9DT1NUKTog SGFuZGxlIE5pYWdhcmEuCi0JKEJSQU5DSF9DT1NULCBQUkVGRVRDSF9CTE9DSywgU0lNVUxUQU5F T1VTX1BSRUZFVENIRVMpOiBMaWtld2lzZS4KLQkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChuaWFn YXJhX2Nvc3RzKTogTmV3IHByb2Nlc3Nvcl9jb3N0cyBlbnRyeS4KLQkoc3BhcmNfb3ZlcnJpZGVf b3B0aW9ucyk6IFJlY29nbml6ZSAibmlhZ2FyYSIsIHNldCBhcHByb3ByaWF0ZQotCWRlZmF1bHQg TUFTS18qIHZhbHVlcyBmb3IgaXQsIGFuZCBhbGlnbiBmdW5jdGlvbnMgdG8gMzItYnl0ZXMKLQli eSBkZWZhdWx0IGp1c3QgbGlrZSBVTFRSQVNQQVJDL1VMVFJBU1BBUkMzLgotCShzcGFyY19pbml0 aWFsaXplX3RyYW1wb2xpbmUpOiBIYW5kbGUgbmlhZ2FyYSBsaWtlIHVsdHJhc3BhcmMuCi0JKHNw YXJjNjRfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogTGlrZXdpc2UuCi0JKHNwYXJjX3VzZV9zY2hl ZF9sb29rYWhlYWQpOiBVc2UgemVybyBmb3IgbmlhZ2FyYS4KLQkoc3BhcmNfaXNzdWVfcmF0ZSk6 IFVzZSBvbmUgZm9yIG5pYWdhcmEuCi0JKiBjb25maWcvc3BhcmMvbmlhZ2FyYS5tZDogTmV3IGZp bGUuCi0JKiBjb25maWcvc3BhcmMvc3BhcmMubWQ6IEluY2x1ZGUgaXQuCi0JKiBjb25maWcvc3Bh cmMvc29sMi1iaS5oIChDUFBfQ1BVNjRfREVGQVVMVF9TUEVDLAotCUFTTV9DUFUzMl9ERUZBVUxU X1NQRUMsIEFTTV9DUFU2NF9ERUZBVUxUX1NQRUMpOiBTZXQgYXBwcm9wcmlhdGVseQotCXdoZW4g ZGVmYXVsdCBjcHUgaXMgbmlhZ2FyYS4KLQkoQ1BQX0NQVV9TUEVDKTogSGFuZGxlIC1tY3B1PW5p YWdhcmEuCi0JKEFTTV9DUFVfU1BFQyk6IExpa2V3aXNlLgotCSogY29uZmlnL3NwYXJjL3NvbDIu aCAoQVNNX0NQVV9ERUZBVUxUX1NQRUMpOiBTZXQgYXBwcm9wcmlhdGVseQotCXdoZW4gZGVmYXVs dCBjcHUgaXMgbmlhZ2FyYS4KLQkoQVNNX0NQVV9TUEVDKTogSGFuZGxlIC1tY3B1PW5pYWdhcmEu Ci0JKiBjb25maWcvc3BhcmMvbGludXg2NC5oOiBIYW5kbGUgYSBkZWZhdWx0IG9mIFRBUkdFVF9D UFVfbmlhZ2FyYQotCWp1c3QgbGlrZSB2OS91bHRyYXNwYXJjL3VsdHJhc3BhcmMzLgotCSogZG9j L2ludm9rZS50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgIm5pYWdhcmEiIGFuZCBpbXByb3Zl Ci0JZXhpc3RpbmcgZG9jdW1lbnRhdGlvbiBmb3IgdWx0cmFzcGFyYyB2YXJpYW50cy4KLQotLS0t IGdjYy9kb2MvaW52b2tlLnRleGkJKHJldmlzaW9uIDExMTY0NykKLSsrKyBnY2MvZG9jL2ludm9r ZS50ZXhpCShyZXZpc2lvbiAxMTE2NDgpCi1AQCAtMTIyNjgsOCArMTIyNjgsOCBAQCBTZXQgdGhl IGluc3RydWN0aW9uIHNldCwgcmVnaXN0ZXIgc2V0LCBhCi0gZm9yIG1hY2hpbmUgdHlwZSBAdmFy e2NwdV90eXBlfS4gIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIEB2YXJ7Y3B1X3R5cGV9IGFyZQotIEBz YW1we3Y3fSwgQHNhbXB7Y3lwcmVzc30sIEBzYW1we3Y4fSwgQHNhbXB7c3VwZXJzcGFyY30sIEBz YW1we3NwYXJjbGl0ZX0sCi0gQHNhbXB7ZjkzMH0sIEBzYW1we2Y5MzR9LCBAc2FtcHtoeXBlcnNw YXJjfSwgQHNhbXB7c3BhcmNsaXRlODZ4fSwKLS1Ac2FtcHtzcGFyY2xldH0sIEBzYW1we3RzYzcw MX0sIEBzYW1we3Y5fSwgQHNhbXB7dWx0cmFzcGFyY30sIGFuZAotLUBzYW1we3VsdHJhc3BhcmMz fS4KLStAc2FtcHtzcGFyY2xldH0sIEBzYW1we3RzYzcwMX0sIEBzYW1we3Y5fSwgQHNhbXB7dWx0 cmFzcGFyY30sCi0rQHNhbXB7dWx0cmFzcGFyYzN9LCBhbmQgQHNhbXB7bmlhZ2FyYX0uCi0gCi0g RGVmYXVsdCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgYXJlIHVzZWQgZm9yIHZh bHVlcyB0aGF0IHNlbGVjdAotIGFuIGFyY2hpdGVjdHVyZSBhbmQgbm90IGFuIGltcGxlbWVudGF0 aW9uLiAgVGhlc2UgYXJlIEBzYW1we3Y3fSwgQHNhbXB7djh9LAotQEAgLTEyMjgzLDcgKzEyMjgz LDcgQEAgaW1wbGVtZW50YXRpb25zLgotICAgICB2ODogICAgICAgICAgICAgc3VwZXJzcGFyYywg aHlwZXJzcGFyYwotICAgICBzcGFyY2xpdGU6ICAgICAgZjkzMCwgZjkzNCwgc3BhcmNsaXRlODZ4 Ci0gICAgIHNwYXJjbGV0OiAgICAgICB0c2M3MDEKLS0gICAgdjk6ICAgICAgICAgICAgIHVsdHJh c3BhcmMsIHVsdHJhc3BhcmMzCi0rICAgIHY5OiAgICAgICAgICAgICB1bHRyYXNwYXJjLCB1bHRy YXNwYXJjMywgbmlhZ2FyYQotIEBlbmQgc21hbGxleGFtcGxlCi0gCi0gQnkgZGVmYXVsdCAodW5s ZXNzIGNvbmZpZ3VyZWQgb3RoZXJ3aXNlKSwgR0NDIGdlbmVyYXRlcyBjb2RlIGZvciB0aGUgVjcK LUBAIC0xMjMxNyw5ICsxMjMxNywxMSBAQCBXaXRoIEBvcHRpb257LW1jcHU9djl9LCBHQ0MgZ2Vu ZXJhdGVzIGNvCi0gYXJjaGl0ZWN0dXJlLiAgVGhpcyBhZGRzIDY0LWJpdCBpbnRlZ2VyIGFuZCBm bG9hdGluZy1wb2ludCBtb3ZlIGluc3RydWN0aW9ucywKLSAzIGFkZGl0aW9uYWwgZmxvYXRpbmct cG9pbnQgY29uZGl0aW9uIGNvZGUgcmVnaXN0ZXJzIGFuZCBjb25kaXRpb25hbCBtb3ZlCi0gaW5z dHJ1Y3Rpb25zLiAgV2l0aCBAb3B0aW9uey1tY3B1PXVsdHJhc3BhcmN9LCB0aGUgY29tcGlsZXIg YWRkaXRpb25hbGx5Ci0tb3B0aW1pemVzIGl0IGZvciB0aGUgU3VuIFVsdHJhU1BBUkMgSS9JSSBj aGlwcy4gIFdpdGgKLStvcHRpbWl6ZXMgaXQgZm9yIHRoZSBTdW4gVWx0cmFTUEFSQyBJL0lJL0lJ aSBjaGlwcy4gIFdpdGgKLSBAb3B0aW9uey1tY3B1PXVsdHJhc3BhcmMzfSwgdGhlIGNvbXBpbGVy IGFkZGl0aW9uYWxseSBvcHRpbWl6ZXMgaXQgZm9yIHRoZQotLVN1biBVbHRyYVNQQVJDIElJSSBj aGlwLgotK1N1biBVbHRyYVNQQVJDIElJSS9JSUkrL0lJSWkvSUlJaSsvSVYvSVYrIGNoaXBzLiAg V2l0aAotK0BvcHRpb257LW1jcHU9bmlhZ2FyYX0sIHRoZSBjb21waWxlciBhZGRpdGlvbmFsbHkg b3B0aW1pemVzIGl0IGZvcgotK1N1biBVbHRyYVNQQVJDIFQxIGNoaXBzLgotIAotIEBpdGVtIC1t dHVuZT1AdmFye2NwdV90eXBlfQotIEBvcGluZGV4IG10dW5lCi1AQCAtMTIzMzEsOCArMTIzMzMs OCBAQCBUaGUgc2FtZSB2YWx1ZXMgZm9yIEBvcHRpb257LW1jcHU9QHZhcntjCi0gQG9wdGlvbnst bXR1bmU9QHZhcntjcHVfdHlwZX19LCBidXQgdGhlIG9ubHkgdXNlZnVsIHZhbHVlcyBhcmUgdGhv c2UKLSB0aGF0IHNlbGVjdCBhIHBhcnRpY3VsYXIgY3B1IGltcGxlbWVudGF0aW9uLiAgVGhvc2Ug YXJlIEBzYW1we2N5cHJlc3N9LAotIEBzYW1we3N1cGVyc3BhcmN9LCBAc2FtcHtoeXBlcnNwYXJj fSwgQHNhbXB7ZjkzMH0sIEBzYW1we2Y5MzR9LAotLUBzYW1we3NwYXJjbGl0ZTg2eH0sIEBzYW1w e3RzYzcwMX0sIEBzYW1we3VsdHJhc3BhcmN9LCBhbmQKLS1Ac2FtcHt1bHRyYXNwYXJjM30uCi0r QHNhbXB7c3BhcmNsaXRlODZ4fSwgQHNhbXB7dHNjNzAxfSwgQHNhbXB7dWx0cmFzcGFyY30sCi0r QHNhbXB7dWx0cmFzcGFyYzN9LCBhbmQgQHNhbXB7bmlhZ2FyYX0uCi0gCi0gQGl0ZW0gLW12OHBs dXMKLSBAaXRlbXggLW1uby12OHBsdXMKLS0tLSBnY2MvY29uZmlnLmdjYwkocmV2aXNpb24gMTEx NjQ3KQotKysrIGdjYy9jb25maWcuZ2NjCShyZXZpc2lvbiAxMTE2NDgpCi1AQCAtMjgzMCw3ICsy ODMwLDcgQEAgY2FzZSAiJHt0YXJnZXR9IiBpbgotIAkJCSIiIHwgc3BhcmMgfCBzcGFyY3Y5IHwg c3BhcmM2NCB8IHNwYXJjODZ4IFwKLSAJCQl8IHY3IHwgY3lwcmVzcyB8IHY4IHwgc3VwZXJzcGFy YyB8IHNwYXJjbGl0ZSB8IGY5MzAgXAotIAkJCXwgZjkzNCB8IGh5cGVyc3BhcmMgfCBzcGFyY2xp dGU4NnggfCBzcGFyY2xldCB8IHRzYzcwMSBcCi0tCQkJfCB2OSB8IHVsdHJhc3BhcmMgfCB1bHRy YXNwYXJjMykKLSsJCQl8IHY5IHwgdWx0cmFzcGFyYyB8IHVsdHJhc3BhcmMzIHwgbmlhZ2FyYSkK LSAJCQkJIyBPSwotIAkJCQk7OwotIAkJCSopCi0tLS0gZ2NjL2NvbmZpZy9zcGFyYy9uaWFnYXJh Lm1kCShyZXZpc2lvbiAwKQotKysrIGdjYy9jb25maWcvc3BhcmMvbmlhZ2FyYS5tZAkocmV2aXNp b24gMTExNjQ4KQotQEAgLTAsMCArMSwxMTkgQEAKLSs7OyBTY2hlZHVsaW5nIGRlc2NyaXB0aW9u IGZvciBOaWFnYXJhLgotKzs7ICAgQ29weXJpZ2h0IChDKSAyMDA2IEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLgotKzs7Ci0rOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgotKzs7Ci0r OzsgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKLSs7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSs7OyBhbnkgbGF0ZXIgdmVy c2lvbi4KLSs7OwotKzs7IEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotKzs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKzs7IEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0rOzsKLSs7OyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKzs7IGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KLSs7OyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs b29yLAotKzs7IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKwotKzs7IE5pYWdhcmEgaXMg YSBzaW5nbGUtaXNzdWUgcHJvY2Vzc29yLgotKwotKyhkZWZpbmVfYXV0b21hdG9uICJuaWFnYXJh XzAiKQotKwotKyhkZWZpbmVfY3B1X3VuaXQgIm5pYWdfcGlwZSIgIm5pYWdhcmFfMCIpCi0rCi0r KGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJuaWFnXzVjeWNsZSIgNQotKyAgKGFuZCAoZXFfYXR0 ciAiY3B1IiAibmlhZ2FyYSIpCi0rICAgIChlcV9hdHRyICJ0eXBlIiAibXVsdGksZmx1c2h3LGlm bHVzaCx0cmFwIikpCi0rICAibmlhZ19waXBlKjUiKQotKwotKyhkZWZpbmVfaW5zbl9yZXNlcnZh dGlvbiAibmlhZ180Y3ljbGUiIDQKLSsgIChhbmQgKGVxX2F0dHIgImNwdSIgIm5pYWdhcmEiKQot KyAgICAoZXFfYXR0ciAidHlwZSIgInNhdmV3IikpCi0rICAibmlhZ19waXBlKjQiKQotKwotKy8q IE1vc3QgYmFzaWMgb3BlcmF0aW9ucyBhcmUgc2luZ2xlLWN5Y2xlLiAqLwotKyhkZWZpbmVfaW5z bl9yZXNlcnZhdGlvbiAibmlhZ19pYWx1IiAxCi0rIChhbmQgKGVxX2F0dHIgImNwdSIgIm5pYWdh cmEiKQotKyAgIChlcV9hdHRyICJ0eXBlIiAiaWFsdSxzaGlmdCxjb21wYXJlLGNtb3ZlIikpCi0r ICJuaWFnX3BpcGUiKQotKwotKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAibmlhZ19pbXVsIiAx MQotKyAoYW5kIChlcV9hdHRyICJjcHUiICJuaWFnYXJhIikKLSsgICAoZXFfYXR0ciAidHlwZSIg ImltdWwiKSkKLSsgIm5pYWdfcGlwZSoxMSIpCi0rCi0rKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9u ICJuaWFnX2lkaXYiIDcyCi0rIChhbmQgKGVxX2F0dHIgImNwdSIgIm5pYWdhcmEiKQotKyAgIChl cV9hdHRyICJ0eXBlIiAiaWRpdiIpKQotKyAibmlhZ19waXBlKjcyIikKLSsKLSsoZGVmaW5lX2lu c25fcmVzZXJ2YXRpb24gIm5pYWdfYnJhbmNoIiAzCi0rICAoYW5kIChlcV9hdHRyICJjcHUiICJu aWFnYXJhIikKLSsgICAgKGVxX2F0dHIgInR5cGUiICJjYWxsLHNpYmNhbGwsY2FsbF9ub19kZWxh eV9zbG90LHVuY29uZF9icmFuY2gsYnJhbmNoIikpCi0rICAibmlhZ19waXBlKjMiKQotKwotKyhk ZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAibmlhZ18zY3ljbGVfbG9hZCIgMwotKyAgKGFuZCAoZXFf YXR0ciAiY3B1IiAibmlhZ2FyYSIpCi0rICAgIChlcV9hdHRyICJ0eXBlIiAibG9hZCIpKQotKyAg Im5pYWdfcGlwZSozIikKLSsKLSsoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gIm5pYWdfOWN5Y2xl X2xvYWQiIDkKLSsgIChhbmQgKGVxX2F0dHIgImNwdSIgIm5pYWdhcmEiKQotKyAgICAoZXFfYXR0 ciAidHlwZSIgImZwbG9hZCIpKQotKyAgIm5pYWdfcGlwZSo5IikKLSsKLSsoZGVmaW5lX2luc25f cmVzZXJ2YXRpb24gIm5pYWdfMWN5Y2xlX3N0b3JlIiAxCi0rICAoYW5kIChlcV9hdHRyICJjcHUi ICJuaWFnYXJhIikKLSsgICAgKGVxX2F0dHIgInR5cGUiICJzdG9yZSIpKQotKyAgIm5pYWdfcGlw ZSIpCi0rCi0rKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJuaWFnXzhjeWNsZV9zdG9yZSIgOAot KyAgKGFuZCAoZXFfYXR0ciAiY3B1IiAibmlhZ2FyYSIpCi0rICAgIChlcV9hdHRyICJ0eXBlIiAi ZnBzdG9yZSIpKQotKyAgIm5pYWdfcGlwZSo4IikKLSsKLSsvKiBUaGluZ3MgaW5jb3JyZWN0bHkg bW9kZWxsZWQgaGVyZToKLSsgKiAgRlBBRER7cyxkfTogMjYgY3ljbGVzCi0rICogIEZQU1VCe3Ms ZH06IDI2IGN5Y2xlcwotKyAqICBGQUJTRDogMjYgY3ljbGVzCi0rICogIEZ7cyxkfVRPe3MsZH06 IDI2IGN5Y2xlcwotKyAqICBGe3MsZH1UT3tpLHh9OiAyNiBjeWNsZXMKLSsgKiAgRlNNVUxEOiAy OSBjeWNsZXMKLSsgKi8KLSsoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gIm5pYWdfZm1vdiIgOAot KyAgKGFuZCAoZXFfYXR0ciAiY3B1IiAibmlhZ2FyYSIpCi0rICAgIChlcV9hdHRyICJ0eXBlIiAi ZnBtb3ZlLGZwY21vdmUsZnBjcm1vdmUiKSkKLSsgICJuaWFnX3BpcGUqOCIpCi0rCi0rKGRlZmlu ZV9pbnNuX3Jlc2VydmF0aW9uICJuaWFnX2ZwY21wIiAyNgotKyAgKGFuZCAoZXFfYXR0ciAiY3B1 IiAibmlhZ2FyYSIpCi0rICAgIChlcV9hdHRyICJ0eXBlIiAiZnBjbXAiKSkKLSsgICJuaWFnX3Bp cGUqMjYiKQotKwotKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAibmlhZ19mbXVsdCIgMjkKLSsg KGFuZCAoZXFfYXR0ciAiY3B1IiAibmlhZ2FyYSIpCi0rICAgIChlcV9hdHRyICJ0eXBlIiAiZnBt dWwiKSkKLSsgICJuaWFnX3BpcGUqMjkiKQotKwotKyhkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAi bmlhZ19mZGl2cyIgNTQKLSsgIChhbmQgKGVxX2F0dHIgImNwdSIgIm5pYWdhcmEiKQotKyAgICAo ZXFfYXR0ciAidHlwZSIgImZwZGl2cyIpKQotKyAgIm5pYWdfcGlwZSo1NCIpCi0rCi0rKGRlZmlu ZV9pbnNuX3Jlc2VydmF0aW9uICJuaWFnX2ZkaXZkIiA4MwotKyAgKGFuZCAoZXFfYXR0ciAiY3B1 IiAibmlhZ2FyYSIpCi0rICAgIChlcV9hdHRyICJ0eXBlIiAiZnBkaXZkIikpCi0rICAibmlhZ19w aXBlKjgzIikKLSsKLSsvKiBUaGluZ3MgaW5jb3JyZWN0bHkgbW9kZWxsZWQgaGVyZToKLSsgKiAg RlBBRER7MTYsMzJ9OiAxMCBjeWNsZXMKLSsgKiAgRlBTVUJ7MTYsMzJ9OiAxMCBjeWNsZXMKLSsg KiAgRkFMSUdOREFUQTogMTAgY3ljbGVzCi0rICovCi0rKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9u ICJuaWFnX3ZpcyIgOAotKyAgKGFuZCAoZXFfYXR0ciAiY3B1IiAibmlhZ2FyYSIpCi0rICAgIChl cV9hdHRyICJ0eXBlIiAiZmdhLGZnbV9wYWNrLGZnbV9tdWwsZmdtX2NtcCxmZ21fcGRpc3QiKSkK LSsgICJuaWFnX3BpcGUqOCIpCi0tLS0gZ2NjL2NvbmZpZy9zcGFyYy9zcGFyYy5tZAkocmV2aXNp b24gMTExNjQ3KQotKysrIGdjYy9jb25maWcvc3BhcmMvc3BhcmMubWQJKHJldmlzaW9uIDExMTY0 OCkKLUBAIC05NCw3ICs5NCw4IEBAIChkZWZpbmVfYXR0ciAiY3B1IgotICAgIHNwYXJjbGV0LHRz YzcwMSwKLSAgICB2OSwKLSAgICB1bHRyYXNwYXJjLAotLSAgIHVsdHJhc3BhcmMzIgotKyAgIHVs dHJhc3BhcmMzLAotKyAgIG5pYWdhcmEiCi0gICAoY29uc3QgKHN5bWJvbF9yZWYgInNwYXJjX2Nw dV9hdHRyIikpKQotIAotIDs7IEF0dHJpYnV0ZSBmb3IgdGhlIGluc3RydWN0aW9uIHNldC4KLUBA IC0zMTUsNiArMzE2LDcgQEAgKGRlZmluZV9kZWxheSAoZXFfYXR0ciAidHlwZSIgInJldHVybiIp Ci0gKGluY2x1ZGUgInNwYXJjbGV0Lm1kIikKLSAoaW5jbHVkZSAidWx0cmExXzIubWQiKQotIChp bmNsdWRlICJ1bHRyYTMubWQiKQotKyhpbmNsdWRlICJuaWFnYXJhLm1kIikKLSAKLSAKLSA7OyBP cGVyYW5kIGFuZCBvcGVyYXRvciBwcmVkaWNhdGVzLgotLS0tIGdjYy9jb25maWcvc3BhcmMvc3Bh cmMuYwkocmV2aXNpb24gMTExNjQ3KQotKysrIGdjYy9jb25maWcvc3BhcmMvc3BhcmMuYwkocmV2 aXNpb24gMTExNjQ4KQotQEAgLTE5Nyw2ICsxOTcsMzAgQEAgc3RydWN0IHByb2Nlc3Nvcl9jb3N0 cyB1bHRyYXNwYXJjM19jb3N0cwotICAgMCwgLyogc2hpZnQgcGVuYWx0eSAqLwotIH07Ci0gCi0r c3RhdGljIGNvbnN0Ci0rc3RydWN0IHByb2Nlc3Nvcl9jb3N0cyBuaWFnYXJhX2Nvc3RzID0gewot KyAgQ09TVFNfTl9JTlNOUyAoMyksIC8qIGludCBsb2FkICovCi0rICBDT1NUU19OX0lOU05TICgz KSwgLyogaW50IHNpZ25lZCBsb2FkICovCi0rICBDT1NUU19OX0lOU05TICgzKSwgLyogaW50IHpl cm9lZCBsb2FkICovCi0rICBDT1NUU19OX0lOU05TICg5KSwgLyogZmxvYXQgbG9hZCAqLwotKyAg Q09TVFNfTl9JTlNOUyAoOCksIC8qIGZtb3YsIGZuZWcsIGZhYnMgKi8KLSsgIENPU1RTX05fSU5T TlMgKDgpLCAvKiBmYWRkLCBmc3ViICovCi0rICBDT1NUU19OX0lOU05TICgyNiksIC8qIGZjbXAg Ki8KLSsgIENPU1RTX05fSU5TTlMgKDgpLCAvKiBmbW92LCBmbW92ciAqLwotKyAgQ09TVFNfTl9J TlNOUyAoMjkpLCAvKiBmbXVsICovCi0rICBDT1NUU19OX0lOU05TICg1NCksIC8qIGZkaXZzICov Ci0rICBDT1NUU19OX0lOU05TICg4MyksIC8qIGZkaXZkICovCi0rICBDT1NUU19OX0lOU05TICgx MDApLCAvKiBmc3FydHMgLSBub3QgaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUgKi8KLSsgIENPU1RT X05fSU5TTlMgKDEwMCksIC8qIGZzcXJ0ZCAtIG5vdCBpbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSAq LwotKyAgQ09TVFNfTl9JTlNOUyAoMTEpLCAvKiBpbXVsICovCi0rICBDT1NUU19OX0lOU05TICgx MSksIC8qIGltdWxYICovCi0rICAwLCAvKiBpbXVsIGJpdCBmYWN0b3IgKi8KLSsgIENPU1RTX05f SU5TTlMgKDcyKSwgLyogaWRpdiAqLwotKyAgQ09TVFNfTl9JTlNOUyAoNzIpLCAvKiBpZGl2WCAq LwotKyAgQ09TVFNfTl9JTlNOUyAoMSksIC8qIG1vdmNjL21vdnIgKi8KLSsgIDAsIC8qIHNoaWZ0 IHBlbmFsdHkgKi8KLSt9OwotKwotIGNvbnN0IHN0cnVjdCBwcm9jZXNzb3JfY29zdHMgKnNwYXJj X2Nvc3RzID0gJmN5cHJlc3NfY29zdHM7Ci0gCi0gI2lmZGVmIEhBVkVfQVNfUkVMQVhfT1BUSU9O Ci1AQCAtNTk3LDYgKzYyMSw3IEBAIHNwYXJjX292ZXJyaWRlX29wdGlvbnMgKHZvaWQpCi0gICAg IHsgVEFSR0VUX0NQVV92OSwgInY5IiB9LAotICAgICB7IFRBUkdFVF9DUFVfdWx0cmFzcGFyYywg InVsdHJhc3BhcmMiIH0sCi0gICAgIHsgVEFSR0VUX0NQVV91bHRyYXNwYXJjMywgInVsdHJhc3Bh cmMzIiB9LAotKyAgICB7IFRBUkdFVF9DUFVfbmlhZ2FyYSwgIm5pYWdhcmEiIH0sCi0gICAgIHsg MCwgMCB9Ci0gICB9OwotICAgY29uc3Qgc3RydWN0IGNwdV9kZWZhdWx0ICpkZWY7Ci1AQCAtNjMy LDYgKzY1Nyw4IEBAIHNwYXJjX292ZXJyaWRlX29wdGlvbnMgKHZvaWQpCi0gICAgIC8qIFRJIHVs dHJhc3BhcmMgSUlJICovCi0gICAgIC8qID8/PyBDaGVjayBpZiAleSBpc3N1ZSBzdGlsbCBob2xk cyB0cnVlIGluIHVsdHJhMy4gICovCi0gICAgIHsgInVsdHJhc3BhcmMzIiwgUFJPQ0VTU09SX1VM VFJBU1BBUkMzLCBNQVNLX0lTQSwgTUFTS19WOXxNQVNLX0RFUFJFQ0FURURfVjhfSU5TTlN9LAot KyAgICAvKiBVbHRyYVNQQVJDIFQxICovCi0rICAgIHsgIm5pYWdhcmEiLCBQUk9DRVNTT1JfTklB R0FSQSwgTUFTS19JU0EsIE1BU0tfVjl8TUFTS19ERVBSRUNBVEVEX1Y4X0lOU05TfSwKLSAgICAg eyAwLCAwLCAwLCAwIH0KLSAgIH07Ci0gICBjb25zdCBzdHJ1Y3QgY3B1X3RhYmxlICpjcHU7Ci1A QCAtNzQxLDcgKzc2OCw4IEBAIHNwYXJjX292ZXJyaWRlX29wdGlvbnMgKHZvaWQpCi0gICAvKiBT dXBwbHkgYSBkZWZhdWx0IHZhbHVlIGZvciBhbGlnbl9mdW5jdGlvbnMuICAqLwotICAgaWYgKGFs aWduX2Z1bmN0aW9ucyA9PSAwCi0gICAgICAgJiYgKHNwYXJjX2NwdSA9PSBQUk9DRVNTT1JfVUxU UkFTUEFSQwotLQkgIHx8IHNwYXJjX2NwdSA9PSBQUk9DRVNTT1JfVUxUUkFTUEFSQzMpKQotKwkg IHx8IHNwYXJjX2NwdSA9PSBQUk9DRVNTT1JfVUxUUkFTUEFSQzMKLSsJICB8fCBzcGFyY19jcHUg PT0gUFJPQ0VTU09SX05JQUdBUkEpKQotICAgICBhbGlnbl9mdW5jdGlvbnMgPSAzMjsKLSAKLSAg IC8qIFZhbGlkYXRlIFBDQ19TVFJVQ1RfUkVUVVJOLiAgKi8KLUBAIC03OTAsNiArODE4LDkgQEAg c3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyAodm9pZCkKLSAgICAgY2FzZSBQUk9DRVNTT1JfVUxUUkFT UEFSQzM6Ci0gICAgICAgc3BhcmNfY29zdHMgPSAmdWx0cmFzcGFyYzNfY29zdHM7Ci0gICAgICAg YnJlYWs7Ci0rICAgIGNhc2UgUFJPQ0VTU09SX05JQUdBUkE6Ci0rICAgICAgc3BhcmNfY29zdHMg PSAmbmlhZ2FyYV9jb3N0czsKLSsgICAgICBicmVhazsKLSAgICAgfTsKLSAKLSAjaWZkZWYgVEFS R0VUX0RFRkFVTFRfTE9OR19ET1VCTEVfMTI4Ci1AQCAtNzA5OSw3ICs3MTMwLDggQEAgc3BhcmNf aW5pdGlhbGl6ZV90cmFtcG9saW5lIChydHggdHJhbXAsIAotICAgICAgYWxpZ25lZCBvbiBhIDE2 IGJ5dGUgYm91bmRhcnkgc28gb25lIGZsdXNoIGNsZWFycyBpdCBhbGwuICAqLwotICAgZW1pdF9p bnNuIChnZW5fZmx1c2ggKHZhbGlkaXplX21lbSAoZ2VuX3J0eF9NRU0gKFNJbW9kZSwgdHJhbXAp KSkpOwotICAgaWYgKHNwYXJjX2NwdSAhPSBQUk9DRVNTT1JfVUxUUkFTUEFSQwotLSAgICAgICYm IHNwYXJjX2NwdSAhPSBQUk9DRVNTT1JfVUxUUkFTUEFSQzMpCi0rICAgICAgJiYgc3BhcmNfY3B1 ICE9IFBST0NFU1NPUl9VTFRSQVNQQVJDMwotKyAgICAgICYmIHNwYXJjX2NwdSAhPSBQUk9DRVNT T1JfTklBR0FSQSkKLSAgICAgZW1pdF9pbnNuIChnZW5fZmx1c2ggKHZhbGlkaXplX21lbSAoZ2Vu X3J0eF9NRU0gKFNJbW9kZSwKLSAJCQkJCQkgICAgIHBsdXNfY29uc3RhbnQgKHRyYW1wLCA4KSkp KSk7Ci0gCi1AQCAtNzE0MSw3ICs3MTczLDggQEAgc3BhcmM2NF9pbml0aWFsaXplX3RyYW1wb2xp bmUgKHJ0eCB0cmFtcAotICAgZW1pdF9pbnNuIChnZW5fZmx1c2hkaSAodmFsaWRpemVfbWVtIChn ZW5fcnR4X01FTSAoREltb2RlLCB0cmFtcCkpKSk7Ci0gCi0gICBpZiAoc3BhcmNfY3B1ICE9IFBS T0NFU1NPUl9VTFRSQVNQQVJDCi0tICAgICAgJiYgc3BhcmNfY3B1ICE9IFBST0NFU1NPUl9VTFRS QVNQQVJDMykKLSsgICAgICAmJiBzcGFyY19jcHUgIT0gUFJPQ0VTU09SX1VMVFJBU1BBUkMzCi0r ICAgICAgJiYgc3BhcmNfY3B1ICE9IFBST0NFU1NPUl9OSUFHQVJBKQotICAgICBlbWl0X2luc24g KGdlbl9mbHVzaGRpICh2YWxpZGl6ZV9tZW0gKGdlbl9ydHhfTUVNIChESW1vZGUsIHBsdXNfY29u c3RhbnQgKHRyYW1wLCA4KSkpKSk7Ci0gCi0gICAvKiBDYWxsIF9fZW5hYmxlX2V4ZWN1dGVfc3Rh Y2sgYWZ0ZXIgd3JpdGluZyBvbnRvIHRoZSBzdGFjayB0byBtYWtlIHN1cmUKLUBAIC03MzIxLDYg KzczNTQsOCBAQCBzcGFyY19zY2hlZF9pbml0IChGSUxFICpkdW1wIEFUVFJJQlVURV9VCi0gc3Rh dGljIGludAotIHNwYXJjX3VzZV9zY2hlZF9sb29rYWhlYWQgKHZvaWQpCi0gewotKyAgaWYgKHNw YXJjX2NwdSA9PSBQUk9DRVNTT1JfTklBR0FSQSkKLSsgICAgcmV0dXJuIDA7Ci0gICBpZiAoc3Bh cmNfY3B1ID09IFBST0NFU1NPUl9VTFRSQVNQQVJDCi0gICAgICAgfHwgc3BhcmNfY3B1ID09IFBS T0NFU1NPUl9VTFRSQVNQQVJDMykKLSAgICAgcmV0dXJuIDQ7Ci1AQCAtNzMzNiw2ICs3MzcxLDcg QEAgc3BhcmNfaXNzdWVfcmF0ZSAodm9pZCkKLSB7Ci0gICBzd2l0Y2ggKHNwYXJjX2NwdSkKLSAg ICAgewotKyAgICBjYXNlIFBST0NFU1NPUl9OSUFHQVJBOgotICAgICBkZWZhdWx0OgotICAgICAg IHJldHVybiAxOwotICAgICBjYXNlIFBST0NFU1NPUl9WOToKLS0tLSBnY2MvY29uZmlnL3NwYXJj L3NvbDItYmkuaAkocmV2aXNpb24gMTExNjQ3KQotKysrIGdjYy9jb25maWcvc3BhcmMvc29sMi1i aS5oCShyZXZpc2lvbiAxMTE2NDgpCi1AQCAtMzksNiArMzksMTUgQEAKLSAjZGVmaW5lIEFTTV9D UFU2NF9ERUZBVUxUX1NQRUMgQVNfU1BBUkM2NF9GTEFHICJiIgotICNlbmRpZgotIAotKyNpZiBU QVJHRVRfQ1BVX0RFRkFVTFQgPT0gVEFSR0VUX0NQVV9uaWFnYXJhCi0rI3VuZGVmIENQUF9DUFU2 NF9ERUZBVUxUX1NQRUMKLSsjZGVmaW5lIENQUF9DUFU2NF9ERUZBVUxUX1NQRUMgIiIKLSsjdW5k ZWYgQVNNX0NQVTMyX0RFRkFVTFRfU1BFQwotKyNkZWZpbmUgQVNNX0NQVTMyX0RFRkFVTFRfU1BF QyAiLXhhcmNoPXY4cGx1c2IiCi0rI3VuZGVmIEFTTV9DUFU2NF9ERUZBVUxUX1NQRUMKLSsjZGVm aW5lIEFTTV9DUFU2NF9ERUZBVUxUX1NQRUMgQVNfU1BBUkM2NF9GTEFHICJiIgotKyNlbmRpZgot KwotICNpZiBERUZBVUxUX0FSQ0gzMl9QCi0gI2RlZmluZSBERUZfQVJDSDMyX1NQRUMoX19zdHIp ICIleyFtNjQ6IiBfX3N0ciAifSIKLSAjZGVmaW5lIERFRl9BUkNINjRfU1BFQyhfX3N0cikgIiV7 bTY0OiIgX19zdHIgIn0iCi1AQCAtNTcsNyArNjYsNyBAQAotICV7bWNwdT1zcGFyY2xpdGV8bWNw dS1mOTMwfG1jcHU9ZjkzNDotRF9fc3BhcmNsaXRlX199IFwKLSAle21jcHU9djg6IiBERUZfQVJD SDMyX1NQRUMoIi1EX19zcGFyY3Y4IikgIn0gXAotICV7bWNwdT1zdXBlcnNwYXJjOi1EX19zdXBl cnNwYXJjX18gIiBERUZfQVJDSDMyX1NQRUMoIi1EX19zcGFyY3Y4IikgIn0gXAotLSV7bWNwdT12 OXxtY3B1PXVsdHJhc3BhcmN8bWNwdT11bHRyYXNwYXJjMzoiIERFRl9BUkNIMzJfU1BFQygiLURf X3NwYXJjdjgiKSAifSBcCi0rJXttY3B1PXY5fG1jcHU9dWx0cmFzcGFyY3xtY3B1PXVsdHJhc3Bh cmMzfG1jcHU9bmlhZ2FyYToiIERFRl9BUkNIMzJfU1BFQygiLURfX3NwYXJjdjgiKSAifSBcCi0g JXshbWNwdSo6JXshbWN5cHJlc3M6JXshbXNwYXJjbGl0ZToleyFtZjkzMDoleyFtZjkzNDoleyFt djg6JXshbXN1cGVyc3BhcmM6JShjcHBfY3B1X2RlZmF1bHQpfX19fX19fSBcCi0gIgotIAotQEAg LTY2LDcgKzc1LDggQEAKLSAle21jcHU9djk6IiBERUZfQVJDSDMyX1NQRUMoIi14YXJjaD12OHBs dXMiKSBERUZfQVJDSDY0X1NQRUMoQVNfU1BBUkM2NF9GTEFHKSAifSBcCi0gJXttY3B1PXVsdHJh c3BhcmM6IiBERUZfQVJDSDMyX1NQRUMoIi14YXJjaD12OHBsdXNhIikgREVGX0FSQ0g2NF9TUEVD KEFTX1NQQVJDNjRfRkxBRyAiYSIpICJ9IFwKLSAle21jcHU9dWx0cmFzcGFyYzM6IiBERUZfQVJD SDMyX1NQRUMoIi14YXJjaD12OHBsdXNiIikgREVGX0FSQ0g2NF9TUEVDKEFTX1NQQVJDNjRfRkxB RyAiYiIpICJ9IFwKLS0leyFtY3B1PXVsdHJhc3BhcmMzOiV7IW1jcHU9dWx0cmFzcGFyYzoleyFt Y3B1PXY5OiV7bWNwdSo6IiBERUZfQVJDSDMyX1NQRUMoIi14YXJjaD12OCIpIERFRl9BUkNINjRf U1BFQyhBU19TUEFSQzY0X0ZMQUcpICJ9fX19IFwKLSsle21jcHU9bmlhZ2FyYToiIERFRl9BUkNI MzJfU1BFQygiLXhhcmNoPXY4cGx1c2IiKSBERUZfQVJDSDY0X1NQRUMoQVNfU1BBUkM2NF9GTEFH ICJiIikgIn0gXAotKyV7IW1jcHU9bmlhZ2FyYToleyFtY3B1PXVsdHJhc3BhcmMzOiV7IW1jcHU9 dWx0cmFzcGFyYzoleyFtY3B1PXY5OiV7bWNwdSo6IiBERUZfQVJDSDMyX1NQRUMoIi14YXJjaD12 OCIpIERFRl9BUkNINjRfU1BFQyhBU19TUEFSQzY0X0ZMQUcpICJ9fX19fSBcCi0gJXshbWNwdSo6 JShhc21fY3B1X2RlZmF1bHQpfSBcCi0gIgotIAotLS0tIGdjYy9jb25maWcvc3BhcmMvc3BhcmMu aAkocmV2aXNpb24gMTExNjQ3KQotKysrIGdjYy9jb25maWcvc3BhcmMvc3BhcmMuaAkocmV2aXNp b24gMTExNjQ4KQotQEAgLTIwNiw3ICsyMDYsNyBAQCBleHRlcm4gZW51bSBjbW9kZWwgc3BhcmNf Y21vZGVsOwotICAgIHdoaWNoIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gYmUgdHJ1 ZSBpZiBlbmFibGVkLiAgUHJpb3IgdG8gVjksCi0gICAgdGhlcmUgYXJlIG5vIGluc3RydWN0aW9u cyB0byBldmVuIHRhbGsgYWJvdXQgbWVtb3J5IHN5bmNocm9uaXphdGlvbi4KLSAgICBOb3RlIHRo YXQgdGhlIFVsdHJhU1BBUkMgSUlJIHByb2Nlc3NvcnMgZG9uJ3QgaW1wbGVtZW50IFJNTywgdW5s aWtlIHRoZQotLSAgIFVsdHJhU1BBUkMgSUkgcHJvY2Vzc29ycy4KLSsgICBVbHRyYVNQQVJDIElJ IHByb2Nlc3NvcnMuICBOaWFnYXJhIGRvZXMgbm90IGltcGxlbWVudCBSTU8gZWl0aGVyLgotIAot ICAgIERlZmF1bHQgdG8gZmFsc2U7IGZvciBleGFtcGxlLCBTb2xhcmlzIG5ldmVyIGVuYWJsZXMg Uk1PLCBvbmx5IGV2ZXIgdXNlcwotICAgIHRvdGFsIG1lbW9yeSBvcmRlcmluZyAoVE1PKS4gICov Ci1AQCAtMjM4LDEwICsyMzgsMTIgQEAgZXh0ZXJuIGVudW0gY21vZGVsIHNwYXJjX2Ntb2RlbDsK LSAjZGVmaW5lIFRBUkdFVF9DUFVfc3BhcmM2NAk3CS8qIGFsaWFzICovCi0gI2RlZmluZSBUQVJH RVRfQ1BVX3VsdHJhc3BhcmMJOAotICNkZWZpbmUgVEFSR0VUX0NQVV91bHRyYXNwYXJjMwk5Ci0r I2RlZmluZSBUQVJHRVRfQ1BVX25pYWdhcmEJMTAKLSAKLSAjaWYgVEFSR0VUX0NQVV9ERUZBVUxU ID09IFRBUkdFVF9DUFVfdjkgXAotICB8fCBUQVJHRVRfQ1BVX0RFRkFVTFQgPT0gVEFSR0VUX0NQ VV91bHRyYXNwYXJjIFwKLS0gfHwgVEFSR0VUX0NQVV9ERUZBVUxUID09IFRBUkdFVF9DUFVfdWx0 cmFzcGFyYzMKLSsgfHwgVEFSR0VUX0NQVV9ERUZBVUxUID09IFRBUkdFVF9DUFVfdWx0cmFzcGFy YzMgXAotKyB8fCBUQVJHRVRfQ1BVX0RFRkFVTFQgPT0gVEFSR0VUX0NQVV9uaWFnYXJhCi0gCi0g I2RlZmluZSBDUFBfQ1BVMzJfREVGQVVMVF9TUEVDICIiCi0gI2RlZmluZSBBU01fQ1BVMzJfREVG QVVMVF9TUEVDICIiCi1AQCAtMjYyLDYgKzI2NCwxMCBAQCBleHRlcm4gZW51bSBjbW9kZWwgc3Bh cmNfY21vZGVsOwotICNkZWZpbmUgQ1BQX0NQVTY0X0RFRkFVTFRfU1BFQyAiLURfX3NwYXJjX3Y5 X18iCi0gI2RlZmluZSBBU01fQ1BVNjRfREVGQVVMVF9TUEVDICItQXY5YiIKLSAjZW5kaWYKLSsj aWYgVEFSR0VUX0NQVV9ERUZBVUxUID09IFRBUkdFVF9DUFVfbmlhZ2FyYQotKyNkZWZpbmUgQ1BQ X0NQVTY0X0RFRkFVTFRfU1BFQyAiLURfX3NwYXJjX3Y5X18iCi0rI2RlZmluZSBBU01fQ1BVNjRf REVGQVVMVF9TUEVDICItQXY5YiIKLSsjZW5kaWYKLSAKLSAjZWxzZQotIAotQEAgLTM1Miw2ICsz NTgsNyBAQCBleHRlcm4gZW51bSBjbW9kZWwgc3BhcmNfY21vZGVsOwotICV7bWNwdT12OTotRF9f c3BhcmNfdjlfX30gXAotICV7bWNwdT11bHRyYXNwYXJjOi1EX19zcGFyY192OV9ffSBcCi0gJXtt Y3B1PXVsdHJhc3BhcmMzOi1EX19zcGFyY192OV9ffSBcCi0rJXttY3B1PW5pYWdhcmE6LURfX3Nw YXJjX3Y5X199IFwKLSAleyFtY3B1KjoleyFtY3lwcmVzczoleyFtc3BhcmNsaXRlOiV7IW1mOTMw OiV7IW1mOTM0OiV7IW12ODoleyFtc3VwZXJzcGFyYzolKGNwcF9jcHVfZGVmYXVsdCl9fX19fX19 IFwKLSAiCi0gI2RlZmluZSBDUFBfQVJDSDMyX1NQRUMgIiIKLUBAIC00MDEsNiArNDA4LDcgQEAg ZXh0ZXJuIGVudW0gY21vZGVsIHNwYXJjX2Ntb2RlbDsKLSAle21jcHU9djk6LUF2OX0gXAotICV7 bWNwdT11bHRyYXNwYXJjOiV7IW12OHBsdXM6LUF2OWF9fSBcCi0gJXttY3B1PXVsdHJhc3BhcmMz OiV7IW12OHBsdXM6LUF2OWJ9fSBcCi0rJXttY3B1PW5pYWdhcmE6JXshbXY4cGx1czotQXY5Yn19 IFwKLSAleyFtY3B1KjoleyFtY3lwcmVzczoleyFtc3BhcmNsaXRlOiV7IW1mOTMwOiV7IW1mOTM0 OiV7IW12ODoleyFtc3VwZXJzcGFyYzolKGFzbV9jcHVfZGVmYXVsdCl9fX19fX19IFwKLSAiCi0g Ci1AQCAtNTI0LDcgKzUzMiw4IEBAIGVudW0gcHJvY2Vzc29yX3R5cGUgewotICAgUFJPQ0VTU09S X1RTQzcwMSwKLSAgIFBST0NFU1NPUl9WOSwKLSAgIFBST0NFU1NPUl9VTFRSQVNQQVJDLAotLSAg UFJPQ0VTU09SX1VMVFJBU1BBUkMzCi0rICBQUk9DRVNTT1JfVUxUUkFTUEFSQzMsCi0rICBQUk9D RVNTT1JfTklBR0FSQQotIH07Ci0gCi0gLyogVGhpcyBpcyBzZXQgZnJvbSAtbXtjcHUsdHVuZX09 eHh4LiAgKi8KLUBAIC0yMTM3LDcgKzIxNDYsOCBAQCBkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCi0gICAgIHx8IChHRU5FUkFMX09SX0k2NCAoQ0xBU1MxKSAmJiBGUF9S RUdfQ0xBU1NfUCAoQ0xBU1MyKSkgXAotICAgICB8fCAoQ0xBU1MxKSA9PSBGUENDX1JFR1MgfHwg KENMQVNTMikgPT0gRlBDQ19SRUdTKQkJXAotICAgID8gKChzcGFyY19jcHUgPT0gUFJPQ0VTU09S X1VMVFJBU1BBUkMgXAotLSAgICAgICB8fCBzcGFyY19jcHUgPT0gUFJPQ0VTU09SX1VMVFJBU1BB UkMzKSA/IDEyIDogNikgOiAyKQotKyAgICAgICB8fCBzcGFyY19jcHUgPT0gUFJPQ0VTU09SX1VM VFJBU1BBUkMzIFwKLSsgICAgICAgfHwgc3BhcmNfY3B1ID09IFBST0NFU1NPUl9OSUFHQVJBKSA/ IDEyIDogNikgOiAyKQotIAotIC8qIFByb3ZpZGUgdGhlIGNvc3Qgb2YgYSBicmFuY2guICBGb3Ig cHJlLXY5IHByb2Nlc3NvcnMgd2UgdXNlCi0gICAgYSB2YWx1ZSBvZiAzIHRvIHRha2UgaW50byBh Y2NvdW50IHRoZSBwb3RlbnRpYWwgYW5udWxsaW5nIG9mCi1AQCAtMjE0NywyMiArMjE1NywzMCBA QCBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gCi0gICAgT24gdjkg YW5kIGxhdGVyLCB3aGljaCBoYXZlIGJyYW5jaCBwcmVkaWN0aW9uIGZhY2lsaXRpZXMsIHdlIHNl dAotICAgIGl0IHRvIHRoZSBkZXB0aCBvZiB0aGUgcGlwZWxpbmUgYXMgdGhhdCBpcyB0aGUgY29z dCBvZiBhCi0tICAgbWlzcHJlZGljdGVkIGJyYW5jaC4gICovCi0rICAgbWlzcHJlZGljdGVkIGJy YW5jaC4KLSsKLSsgICBPbiBOaWFnYXJhLCBub3JtYWwgYnJhbmNoZXMgaW5zZXJ0IDMgYnViYmxl cyBpbnRvIHRoZSBwaXBlCi0rICAgYW5kIGFubnVsbGVkIGJyYW5jaGVzIGluc2VydCA0IGJ1YmJs ZXMuICAqLwotIAotICNkZWZpbmUgQlJBTkNIX0NPU1QgXAotIAkoKHNwYXJjX2NwdSA9PSBQUk9D RVNTT1JfVjkgXAotIAkgIHx8IHNwYXJjX2NwdSA9PSBQUk9DRVNTT1JfVUxUUkFTUEFSQykgXAot IAkgPyA3IFwKLSAgICAgICAgICA6IChzcGFyY19jcHUgPT0gUFJPQ0VTU09SX1VMVFJBU1BBUkMz IFwKLS0gICAgICAgICAgICA/IDkgOiAzKSkKLSsgICAgICAgICAgICA/IDkgXAotKwkgOiAoc3Bh cmNfY3B1ID09IFBST0NFU1NPUl9OSUFHQVJBIFwKLSsJICAgID8gNCBcCi0rCSA6IDMpKSkKLSAK LSAjZGVmaW5lIFBSRUZFVENIX0JMT0NLIFwKLSAJKChzcGFyY19jcHUgPT0gUFJPQ0VTU09SX1VM VFJBU1BBUkMgXAotLSAgICAgICAgICB8fCBzcGFyY19jcHUgPT0gUFJPQ0VTU09SX1VMVFJBU1BB UkMzKSBcCi0rICAgICAgICAgIHx8IHNwYXJjX2NwdSA9PSBQUk9DRVNTT1JfVUxUUkFTUEFSQzMg XAotKwkgIHx8IHNwYXJjX2NwdSA9PSBQUk9DRVNTT1JfTklBR0FSQSkgXAotICAgICAgICAgID8g NjQgOiAzMikKLSAKLSAjZGVmaW5lIFNJTVVMVEFORU9VU19QUkVGRVRDSEVTIFwKLS0JKChzcGFy Y19jcHUgPT0gUFJPQ0VTU09SX1VMVFJBU1BBUkMpIFwKLSsJKChzcGFyY19jcHUgPT0gUFJPQ0VT U09SX1VMVFJBU1BBUkMgXAotKwkgIHx8IHNwYXJjX2NwdSA9PSBQUk9DRVNTT1JfTklBR0FSQSkg XAotICAgICAgICAgID8gMiBcCi0gICAgICAgICAgOiAoc3BhcmNfY3B1ID09IFBST0NFU1NPUl9V TFRSQVNQQVJDMyBcCi0gICAgICAgICAgICAgPyA4IDogMykpCi0tLS0gZ2NjL2NvbmZpZy9zcGFy Yy9saW51eDY0LmgJKHJldmlzaW9uIDExMTY0NykKLSsrKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4 NjQuaAkocmV2aXNpb24gMTExNjQ4KQotQEAgLTQzLDcgKzQzLDggQEAgQm9zdG9uLCBNQSAwMjEx MC0xMzAxLCBVU0EuICAqLwotIAotICNpZiBUQVJHRVRfQ1BVX0RFRkFVTFQgPT0gVEFSR0VUX0NQ VV92OSBcCi0gICAgIHx8IFRBUkdFVF9DUFVfREVGQVVMVCA9PSBUQVJHRVRfQ1BVX3VsdHJhc3Bh cmMgXAotLSAgICB8fCBUQVJHRVRfQ1BVX0RFRkFVTFQgPT0gVEFSR0VUX0NQVV91bHRyYXNwYXJj MwotKyAgICB8fCBUQVJHRVRfQ1BVX0RFRkFVTFQgPT0gVEFSR0VUX0NQVV91bHRyYXNwYXJjMyBc Ci0rICAgIHx8IFRBUkdFVF9DUFVfREVGQVVMVCA9PSBUQVJHRVRfQ1BVX25pYWdhcmEKLSAvKiBB IDY0IGJpdCB2OSBjb21waWxlciB3aXRoIHN0YWNrLWJpYXMsCi0gICAgaW4gYSBNZWRpdW0vTG93 IGNvZGUgbW9kZWwgZW52aXJvbm1lbnQuICAqLwotIAotLS0tIGdjYy9jb25maWcvc3BhcmMvc29s Mi5oCShyZXZpc2lvbiAxMTE2NDcpCi0rKysgZ2NjL2NvbmZpZy9zcGFyYy9zb2wyLmgJKHJldmlz aW9uIDExMTY0OCkKLUBAIC00MSwxMSArNDEsMTcgQEAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV U0EuICAqLwotICNkZWZpbmUgQVNNX0NQVV9ERUZBVUxUX1NQRUMgIi14YXJjaD12OHBsdXNiIgot ICNlbmRpZgotIAotKyNpZiBUQVJHRVRfQ1BVX0RFRkFVTFQgPT0gVEFSR0VUX0NQVV9uaWFnYXJh Ci0rI3VuZGVmIEFTTV9DUFVfREVGQVVMVF9TUEVDCi0rI2RlZmluZSBBU01fQ1BVX0RFRkFVTFRf U1BFQyAiLXhhcmNoPXY4cGx1c2IiCi0rI2VuZGlmCi0rCi0gI3VuZGVmIEFTTV9DUFVfU1BFQwot ICNkZWZpbmUgQVNNX0NQVV9TUEVDICJcCi0gJXttY3B1PXY5Oi14YXJjaD12OHBsdXN9IFwKLSAl e21jcHU9dWx0cmFzcGFyYzoteGFyY2g9djhwbHVzYX0gXAotICV7bWNwdT11bHRyYXNwYXJjMzot eGFyY2g9djhwbHVzYn0gXAotKyV7bWNwdT1uaWFnYXJhOi14YXJjaD12OHBsdXNifSBcCi0gJXsh bWNwdSo6JShhc21fY3B1X2RlZmF1bHQpfSBcCi0gIgotIAoKZGlmZiAtLWdpdCBhL2djYzQxLnNw ZWMgYi9nY2M0MS5zcGVjCmluZGV4IDQyYzMxNDIuLjBlMDgxODAgMTAwNjQ0Ci0tLSBhL2djYzQx LnNwZWMKKysrIGIvZ2NjNDEuc3BlYwpAQCAtMSw2ICsxLDYgQEAKLSVkZWZpbmUgREFURSAyMDA3 MDgyMQorJWRlZmluZSBEQVRFIDIwMDcwOTI1CiAlZGVmaW5lIGdjY192ZXJzaW9uIDQuMS4yCi0l ZGVmaW5lIGdjY19yZWxlYXNlIDI2CislZGVmaW5lIGdjY19yZWxlYXNlIDI4CiAlZGVmaW5lIF91 bnBhY2thZ2VkX2ZpbGVzX3Rlcm1pbmF0ZV9idWlsZCAwCiAlZGVmaW5lIG11bHRpbGliXzY0X2Fy Y2hzIHNwYXJjNjQgcHBjNjQgczM5MHggeDg2XzY0CiAlZGVmaW5lIGluY2x1ZGVfZ2FwcGxldHZp ZXdlciAxCkBAIC0xMzgsMjQgKzEzOCwxMyBAQCBQYXRjaDIxOiBnY2M0MS1yaDIzNTAwOC5wYXRj aAogUGF0Y2gyMjogZ2NjNDEtYnVpbGQtaWQucGF0Y2gKIFBhdGNoMjM6IGdjYzQxLXByMjg2OTAu cGF0Y2gKIFBhdGNoMjQ6IGdjYzQxLXJoMjQ3MjU2LnBhdGNoCi1QYXRjaDI1OiBnY2M0MS1wcjIy MjQ0LnBhdGNoCi1QYXRjaDI2OiBnY2M0MS1wcjMyNjc4LnBhdGNoCi1QYXRjaDI3OiBnY2M0MS1w cjMyOTEyLnBhdGNoCi1QYXRjaDI4OiBnY2M0MS1zcGFyYy1uaWFnYXJhLnBhdGNoCi1QYXRjaDI5 OiBnY2M0MS1wcGMtdHJhbXAucGF0Y2gKLVBhdGNoMzA6IGdjYzQxLXJoMjUzMTAyLnBhdGNoCi1Q YXRjaDMxOiBnY2M0MS1jKystZ251X2lubGluZS5wYXRjaAotUGF0Y2gzMjogZ2NjNDEtcHBjLXN5 bmMtcWloaS5wYXRjaAotUGF0Y2gzMzogZ2NjNDEtcHBjNjQtaWE2NC1HTlUtc3RhY2sucGF0Y2gK LVBhdGNoMzQ6IGdjYzQxLWJ1aWx0aW4tY2hrLWFudGljaXBhdGVkLnBhdGNoCi1QYXRjaDM1OiBn Y2M0MS1idWlsdGluLXRocm93LnBhdGNoCi1QYXRjaDM2OiBnY2M0MS1idWlsdGluLXZhLWFyZy1w YWNrLnBhdGNoCi1QYXRjaDM3OiBnY2M0MS1idWlsdGluLXZhLWFyZy1wYWNrLWxlbi5wYXRjaAot UGF0Y2gzODogZ2NjNDEtcHIyNzk1NC5wYXRjaAotUGF0Y2gzOTogZ2NjNDEtcHIzMzQyMy5wYXRj aAotUGF0Y2g0MDogZ2NjNDEtc2NhbmYtZm10LWNoZWNrLnBhdGNoCi1QYXRjaDQxOiBnY2M0MS1w cjMzNTA2LnBhdGNoCi1QYXRjaDQyOiBnY2M0MS1tYWtlaW5mby12ZXIucGF0Y2gKK1BhdGNoMjU6 IGdjYzQxLXBwYzY0LWlhNjQtR05VLXN0YWNrLnBhdGNoCitQYXRjaDI2OiBnY2M0MS1wcjMzNTA2 LnBhdGNoCitQYXRjaDI3OiBnY2M0MS1hcnRpZmljaWFsLWF0dHJpYi5wYXRjaAorUGF0Y2gyODog Z2NjNDEtZXJyb3ItYXR0cmliLnBhdGNoCitQYXRjaDI5OiBnY2M0MS1qZHdwLnBhdGNoCitQYXRj aDMwOiBnY2M0MS1wcjIwODgwLnBhdGNoCitQYXRjaDMxOiBnY2M0MS1wcjMyNjk0LnBhdGNoCiAK ICMgT24gQVJNIEVBQkkgc3lzdGVtcywgd2UgZG8gd2FudCAtZ251ZWFiaSB0byBiZSBwYXJ0IG9m IHRoZQogIyB0YXJnZXQgdHJpcGxlLgpAQCAtNDYzLDI0ICs0NTIsMTMgQEAgd2hpY2ggYXJlIHJl cXVpcmVkIHRvIHJ1biBwcm9ncmFtcyBjb21waWxlZCB3aXRoIHRoZSBHTkFULgogJXBhdGNoMjIg LXAwIC1iIC5idWlsZC1pZH4KICVwYXRjaDIzIC1wMCAtYiAucHIyODY5MH4KICVwYXRjaDI0IC1w MCAtYiAucmgyNDcyNTZ+Ci0lcGF0Y2gyNSAtcDAgLWIgLnByMjIyNDR+Ci0lcGF0Y2gyNiAtcDAg LWIgLnByMzI2Nzh+Ci0lcGF0Y2gyNyAtcDAgLWIgLnByMzI5MTJ+Ci0lcGF0Y2gyOCAtcDAgLWIg LnNwYXJjLW5pYWdhcmF+Ci0lcGF0Y2gyOSAtcDAgLWIgLnBwYy10cmFtcH4KLSVwYXRjaDMwIC1w MCAtYiAucmgyNTMxMDJ+Ci0lcGF0Y2gzMSAtcDAgLWIgLmMrKy1nbnVfaW5saW5lfgotJXBhdGNo MzIgLXAwIC1iIC5wcGMtc3luYy1xaWhpfgotJXBhdGNoMzMgLXAwIC1iIC5wcGM2NC1pYTY0LUdO VS1zdGFja34KLSVwYXRjaDM0IC1wMCAtYiAuYnVpbHRpbi1jaGstYW50aWNpcGF0ZWR+Ci0lcGF0 Y2gzNSAtcDAgLWIgLmJ1aWx0aW4tdGhyb3d+Ci0lcGF0Y2gzNiAtcDAgLWIgLmJ1aWx0aW4tdmEt YXJnLXBhY2t+Ci0lcGF0Y2gzNyAtcDAgLWIgLmJ1aWx0aW4tdmEtYXJnLXBhY2stbGVufgotJXBh dGNoMzggLXAwIC1iIC5wcjI3OTU0fgotJXBhdGNoMzkgLXAwIC1iIC5wcjMzNDIzfgotJXBhdGNo NDAgLXAwIC1iIC5zY2FuZi1mbXQtY2hlY2t+Ci0lcGF0Y2g0MSAtcDAgLWIgLnByMzM1MDZ+Ci0l cGF0Y2g0MiAtcDAgLWIgLm1ha2VpbmZvLXZlcn4KKyVwYXRjaDI1IC1wMCAtYiAucHBjNjQtaWE2 NC1HTlUtc3RhY2t+CislcGF0Y2gyNiAtcDAgLWIgLnByMzM1MDZ+CislcGF0Y2gyNyAtcDAgLWIg LmFydGlmaWNpYWwtYXR0cmlifgorJXBhdGNoMjggLXAwIC1iIC5lcnJvci1hdHRyaWJ+CislcGF0 Y2gyOSAtcDAgLWIgLmpkd3B+CislcGF0Y2gzMCAtcDAgLWIgLnByMjA4ODB+CislcGF0Y2gzMSAt cDAgLWIgLnByMzI2OTR+CiAKIHNlZCAtaSAtZSAncy80XC4xXC4zLzQuMS4yLycgZ2NjL0JBU0Ut VkVSIGdjYy92ZXJzaW9uLmMKIHNlZCAtaSAtZSAncy8iIChSZWQgSGF0W14pXSopIi8iIChSZWQg SGF0ICV7dmVyc2lvbn0tJXtnY2NfcmVsZWFzZX0pIi8nIGdjYy92ZXJzaW9uLmMKQEAgLTE2MzUs NiArMTYxMywxNyBAQCBmaQogJWRvYyBycG0uZG9jL2NoYW5nZWxvZ3MvbGlibXVkZmxhcC9DaGFu Z2VMb2cqCiAKICVjaGFuZ2Vsb2cKKyogVHVlIFNlcCAyNSAyMDA3IEpha3ViIEplbGluZWsgPGph a3ViQHJlZGhhdC5jb20+IDQuMS4yLTI4CistIHVwZGF0ZSBmcm9tIGdjYy00XzEtYnJhbmNoICgt cjEyNzY3MjoxMjg3MzYpCisgIC0gUFJzIGJvb3RzdHJhcC8zMzQxOCwgYysrLzMxOTQxLCBjKysv MzIxMTMsIGphdmEvMzE4NDIsIHRhcmdldC8zMzI1NiwKKwl0cmVlLW9wdGltaXphdGlvbi8zMzE0 MgorLSBhZGQgc3VwcG9ydCBmb3IgYXJ0aWZpY2lhbCwgZXJyb3IgYW5kIHdhcm5pbmcgYXR0cmli dXRlcworLSByZXN0b3JlIEphdmEgQ05JIEFCSSBjb21wYXRpYmlsaXR5IGJyb2tlbiBieSBKRFdQ IGNoYW5nZXMgKEtlaXRoIFNlaXR6KQorLSBmaXggSUNFIHdpdGggc2V0X3JocyBhbGxvd2luZyBu b24tZ2ltcGxlIChSb2dlciBTYXlsZSwgIzI0NzQwNywKKyAgUFIgdHJlZS1vcHRpbWl6YXRpb24v MzI2OTQpCistIGZpeCBJQ0Ugb24gRm9ydHJhbiBpbnRlcmZhY2UtYm9keSBkZWNsYXJpbmcgY3Vy cmVudCBzdWJyb3V0aW5lIG5hbWUKKyAgKFBhdWwgVGhvbWFzLCAjMzAwODUxLCBQUiBmb3J0cmFu LzIwODgwKQorCiAqIFNhdCBTZXAgMjIgMjAwNyBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQu Y29tPiA0LjEuMi0yNgogLSBkb24ndCBpZ25vcmUgdGhyb3cgc3BlY2lmaWNhdGlvbiBvZiBmdW5j dGlvbiB0eXBlcyBpbiB0eXBlIGhhc2hpbmcKICAgKFBSIGMrKy8zMzUwNikKCmRpZmYgLS1naXQg YS9zb3VyY2VzIGIvc291cmNlcwppbmRleCA5NDFiY2IwLi42NGVlZDQwIDEwMDY0NAotLS0gYS9z b3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEgKzEgQEAKLTY1Nzc4NzA2ZDZiOWMwMjlhMDZmY2E5 NjhhNDVhYjdmICBnY2MtNC4xLjItMjAwNzA4MjEudGFyLmJ6MgorNTYyYWIyNDQ2YzYwYTkxNDVk YTM4NWFjNTZjZjc3MTUgIGdjYy00LjEuMi0yMDA3MDkyNS50YXIuYnoyCg==