ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggMjMzYjY1Ny4uYzQwNmUyMyAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTYsMyArNiw0IEBACiBTdXp1a2ksIFRvc2hpeWEgKOmItOacqOS/iuWTiSkgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPiBzc3NhIDxzc3NhQElQQTIwMDQtbXBzLmxvY2FsPgogU3V6dWtpLCBUb3NoaXlhICjpiLTmnKjkv4rlk4kpIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4gc3V6dWtpIHRvc2hpeWEgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgogQmVuIFdhZ25lciA8YnVuZ2VtYW5AZ21haWwuY29tPiBCdW5nZW1hbiA8YnVuZ2VtYW5AZ21haWwuY29tPgorRXdhbGQgSGV3IChIZXcgWWloIFNoaXVhbiDkuJjmr4XlrqMpIDxld2FsZGhld0BnbWFpbC5jb20+CmRpZmYgLS1naXQgYS9BbmRyb2lkLmJwIGIvQW5kcm9pZC5icAppbmRleCBiMDg5NWYzLi4yOTAxNWYzIDEwMDY0NAotLS0gYS9BbmRyb2lkLmJwCisrKyBiL0FuZHJvaWQuYnAKQEAgLTMzLDYgKzMzLDcgQEAKICAgICAgICAgInNyYy9jZmYvY2ZmLmMiLAogICAgICAgICAic3JjL3BzbmFtZXMvcHNuYW1lcy5jIiwKICAgICAgICAgInNyYy9wc2hpbnRlci9wc2hpbnRlci5jIiwKKyAgICAgICAgInNyYy9wc2F1eC9wc2F1eC5jIiwKICAgICBdLAogCiAgICAgZXhwb3J0X2luY2x1ZGVfZGlyczogWyJpbmNsdWRlIl0sCkBAIC01Miw2ICs1Myw4IEBACiAKICAgICAgICAgLy8gVXBzdHJlYW0gaWdub3JlcyB1bnVzZWQgcGFyYW1ldGVyIHdhcm5pbmcKICAgICAgICAgIi1Xbm8tdW51c2VkLXBhcmFtZXRlciIsCisgICAgICAgIC8vIERpc2FibGluZyBzb21lIG9mIG1vZHVsZXMgcmVzdWx0cyBpbiB3YXJuaW5ncworICAgICAgICAiLVduby11bnVzZWQtdmFyaWFibGUiLAogICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGlzIGZvciB0ZXN0aW5nIG9ubHksIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gZmluYWwKICAgICAgICAgLy8gYnVpbGRzIG9mIHRoZSBwcm9kdWN0CiAgICAgICAgIC8vICItRFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIiLApkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAppbmRleCA2M2Y1NzY3Li44M2YyNmI5IDEwMDY0NAotLS0gYS9DTWFrZUxpc3RzLnR4dAorKysgYi9DTWFrZUxpc3RzLnR4dApAQCAtMSw2ICsxLDYgQEAKICMgQ01ha2VMaXN0cy50eHQKICMKLSMgQ29weXJpZ2h0IDIwMTMtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgV3JpdHRlbiBvcmlnaW5hbGx5IGJ5IEpvaG4gQ2FyeSA8Y2FyeUB0eGNvcnAuY29tPgpAQCAtMTUzLDggKzE1Myw4IEBACiAKIAogc2V0KFZFUlNJT05fTUFKT1IgIjIiKQotc2V0KFZFUlNJT05fTUlOT1IgIjciKQotc2V0KFZFUlNJT05fUEFUQ0ggIjEiKQorc2V0KFZFUlNJT05fTUlOT1IgIjkiKQorc2V0KFZFUlNJT05fUEFUQ0ggIjAiKQogCiBzZXQoUFJPSkVDVF9WRVJTSU9OICR7VkVSU0lPTl9NQUpPUn0uJHtWRVJTSU9OX01JTk9SfS4ke1ZFUlNJT05fUEFUQ0h9KQogc2V0KFNIQVJFRF9MSUJSQVJZX1ZFUlNJT04gJHtWRVJTSU9OX01BSk9SfS4ke1ZFUlNJT05fTUlOT1J9KQpAQCAtMTYyLDYgKzE2Miw5IEBACiAKICMgQ29tcGlsZXIgZGVmaW5pdGlvbnMgZm9yIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5CiBhZGRfZGVmaW5pdGlvbnMoLURGVDJfQlVJTERfTElCUkFSWSkKK2lmIChXSU4zMikKKyAgYWRkX2RlZmluaXRpb25zKC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MpCitlbmRpZiAoKQogCiAKICMgRmluZCBkZXBlbmRlbmNpZXMKQEAgLTMzMSw3ICszMzQsOSBAQAogICApCiBlbmRpZiAoKQogCi1zZXQoQ01BS0VfREVCVUdfUE9TVEZJWCBkKQoraWYgKE5PVCBESVNBQkxFX0ZPUkNFX0RFQlVHX1BPU1RGSVgpCisgIHNldChDTUFLRV9ERUJVR19QT1NURklYIGQpCitlbmRpZigpCiAKIGFkZF9saWJyYXJ5KGZyZWV0eXBlCiAgICR7UFVCTElDX0hFQURFUlN9CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggN2VkYTlmOC4uMDcwOGU1ZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2ODMgQEAKKzIwMTgtMDEtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQmV0dGVyIHByb3RlY3Rpb24gYWdhaW5zdCBpbnZhbGlkIFZGIGRhdGEuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD01NzM5CisKKwlCdWcgaW50cm9kdWNlZCBpbiBjb21taXQgMDhjZDYyZGVlZGVmZTIxN2YyZWE1MGUzOTI5MjNjZThiNWJjN2FjNy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfU2V0X1Zhcl9EZXNpZ24pOiBBbHdheXMgaW5pdGlhbGl6ZQorCWBub3JtYWxpemVkY29vcmRzJy4KKworMjAxOC0wMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0dFVFZBUklBVElPTik6IEF2b2lkIE5VTEwgcmVmZXJlbmNlLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NTczNgorCisyMDE4LTAxLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X3NldF9tbV9ibGVuZCk6IE1pbm9yLgorCisyMDE4LTAxLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEJldHRlciB0cmFjZSBWRiBpbnN0YW5jZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl90b19ub3JtYWxpemVkKTogRG9uJ3QgZW1pdCBudW1iZXIKKwlvZiBjb29yZGluYXRlcy4KKwkoVFRfR2V0X01NX1Zhcik6IFRyYWNlIGluc3RhbmNlIGluZGljZXMgbmFtZXMuCisJKFRUX1NldF9WYXJfRGVzaWduKTogVXBkYXRlZC4KKworMjAxOC0wMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBCZWF1dGlmeSB0cmFjaW5nIG9mIFZGIGF4aXMgcmVjb3Jkcy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IFNob3cgYXhpcyByZWNvcmRzIGluIGEKKwl0YWJsZS1saWtlIG1hbm5lci4KKworMjAxOC0wMS0yNiAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGdvb2dsZS5jb20+CisKKwlbdHJ1ZXR5cGVdIEZpeCBtdWx0aXBsZSBjYWxscyBvZiBgRlRfR2V0X01NX1ZhcicgKCM1Mjk1NSkuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBTZXQKKwlgZmFjZS0+YmxlbmQtPm51bV9heGlzJyBpbiBjYXNlIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUKKwlgZmFjZS0+YmxlbmQnLgorCisyMDE4LTAxLTIzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYXBpbmFtZXNdIEFub255bW91cyB2ZXJzaW9uIG1hcCBmb3IgR05VIGxpbmtlci4KKworCSogc3JjL3Rvb2xzL2FwaW5hbWVzLmMgKFBST0dSQU1fVkVSU0lPTik6IFNldCB0byAwLjMuCisJKE91dHB1dEZvcm1hdCk6IEFkZCBgT1VUUFVUX0dOVV9WRVJNQVAnLgorCShuYW1lc19kdW1wKTogSGFuZGxlIGl0LgorCSh1c2FnZSk6IFVwZGF0ZWQuCisJKG1haW4pOiBIYW5kbGUgbmV3IGNvbW1hbmQgbGluZSBmbGFnIGAtd0wnLgorCisyMDE4LTAxLTIxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbdW5peF0gQ2FsbCBsaWJ0b29sIHRvIGNsZWFuIHVwLgorCisJKiBidWlsZHMvdW5peC9pbnN0YWxsLm1rIChjbGVhbl9wcm9qZWN0X3VuaXgsIGRpc3RjbGVhbl9wcm9qZWN0X3VuaXgpOgorCVVzZSBsaWJ0b29sLgorCSogYnVpbGRzL2ZyZWV0eXBlLm1rOiBNaW5vci4KKworMjAxOC0wMS0xOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdHZlci5yYzogRml4IG1pbmd3LXc2NCBjb21waWxhdGlvbi4KKworMjAxOC0wMS0xOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2J1aWxkXSBFbmFibGUgVkVSU0lPTklORk8gcmVzb3VyY2UgZm9yIEN5Z3dpbi9NaW5HVy4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogQ2hlY2sgZm9yIHJlc291cmNlIGNvbXBpbGVyLgorCSogYnVpbGRzL3VuaXgvdW5peC1jYy5pbjogQ29uZGl0aW9uYWxseSBzZXQgdXAgcmVzb3VyY2UgY29tcGlsZXIuCisJKiBidWlsZHMvZnJlZXR5cGUubWs6IEFkZCBjb25kaXRpb25hbCBydWxlIGZvciBgZnR2ZXIucmMnLgorCSogc3JjL2Jhc2UvZnR2ZXIucmM6IENvcHlyaWdodCBub3RpY2UgYW5kIHllYXIgdXBkYXRlLgorCisyMDE4LTAxLTE4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYnVpbGRdIE1vdmUgVkVSU0lPTklORk8gcmVzb3VyY2UuCisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qOiBVcGRhdGVkLgorCSogYnVpbGRzL3dpbmRvd3MvZnR2ZXIucmM6IE1vdmUgZmlsZSBmcm9tIGhlcmUuLi4KKwkqIHNyYy9iYXNlL2Z0dmVyLnJjOiAuLi4gdG8gaGVyZS4KKworMjAxOC0wMS0xMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2J1aWxkXSBFeHBhbmQgZGxsZXhwb3J0L2RsbGltcG9ydCB0byBDeWd3aW4vTWluR1cuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmg6IFJlc3BlY3QgRExMX0VYUE9SVCwKKwlzL19NU0NfVkVSL19XSU4zMi8uCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogUmVwbGljYXRlIGhlcmUuCisJKiBidWlsZHMvdm1zL2Z0Y29uZmlnLmg6IFJlcGxpY2F0ZSBoZXJlLgorCisyMDE4LTAxLTEyICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYnVpbGRdIEltcHJvdmUgYW5kIGRvY3VtZW50IE1TVkMgYnVpbGQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmg6IEd1YXJkIGRsbGV4cG9ydC9kbGxpbXBvcnQKKwlhdHRyaWJ1dGVzIHdpdGggX0RMTCBhbmQgRlQyX0RMTElNUE9SVC4KKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4KKworMjAxOC0wMS0xMCAgU3RldmUgUm9iaW5zb24gIDxzc3JvYmluc0BnbWFpbC5jb20+CisKKwkqIENNYWtlTGlzdHMudHh0IFt3aW4zMl06IFN1cHByZXNzIHdhcm5pbmdzIGZvciBQT1NJWCBmdW5jdGlvbnMuCisKKzIwMTgtMDEtMTAgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gQ29ycmVjdGx5IGhhbmRsZSBGbGV4IGZlYXR1cmVzICgjNTI4NDYpLgorCisJKiBzcmMvcHNhdXgvcHNpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2NtZFZNT1ZFVE8sCisJY2YyX2NtZEhNT1ZFVE8+OiBEbyBub3QgbW92ZSBpZiBkb2luZyBGbGV4LgorCisyMDE4LTAxLTA5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS5zbG46IFN5bmNocm9uaXplIHdpdGggdGhlIHByb2plY3QuCisKKzIwMTgtMDEtMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjkgcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItOScuCisKKwkqIGRvY3MvVkVSU0lPTi5UWFQ6IEFkZCBlbnRyeSBmb3IgdmVyc2lvbiAyLjkuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwgYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvZnR2ZXIucmMsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjguMS8yLjkvLCBzLzI4MS8yOS8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfTUlOT1IpOiBTZXQgdG8gOS4KKwkoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDIyOjA6MTYuCisJKiBDTWFrZUxpc3RzLnR4dCAoVkVSU0lPTl9QQVRDSCk6IFNldCB0byAxLgorCisyMDE4LTAxLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgY2hlY2sgZm9yIGxpYnJ0LCBuZWVkZWQgZm9yIGBmdGJlbmNoJyAoIzUyODI0KS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAoTElCX0NMT0NLX0dFVFRJTUUpOiBEZWZpbmU7IHRoaXMgd2lsbAorCWhvbGQgYC1scnQnIGlmIG5lY2Vzc2FyeS4KKworCSogYnVpbGRzL3VuaXgvdW5peC1jYy5pbiAoTElCX0NMT0NLX0dFVFRJTUUpOiBOZXcgdmFyaWFibGUuCisKKzIwMTgtMDEtMDcgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRml4IFR5cGUgMSBnbHlwaHMgd2l0aCB0b28gbWFueSBzdGVtIGhpbnRzLgorCisJQWNjb3JkaW5nIHRvIHRoZSBDRkYgc3BlY2lmaWNhdGlvbiwgY2hhcnN0cmluZ3MgY2FuIGhhdmUgdXAgdG8gOTYgc3RlbQorCWhpbnRzLiBEdWUgdG8gaGludCByZXBsYWNlbWVudCByb3V0aW5lcyBpbiBUeXBlIDEgY2hhcnN0cmluZ3MsIHNvbWUKKwlnbHlwaHMgYXJlIHJlamVjdGVkIGJ5IHRoZSBBZG9iZSBlbmdpbmUsIHdoaWNoIGltcGxlbWVudHMgdGhlIGFib3ZlCisJbGltaXQuIFRoaXMgZml4IHR1cm5zIG9mZiBoaW50aW5nIGZvciBzdWNoIGdseXBocy4KKworCSogc3JjL3BzYXV4L3BzaGludHMuYyAoY2YyX2hpbnRtYXBfYnVpbGQpOiBSZXNldCB0aGUgZXJyb3IgZnJvbSBjYWxsaW5nCisJYGNmMl9oaW50bWFza19zZXRBbGwnIG9uIGEgcHJvYmxlbWF0aWMgVHlwZSAxIGNoYXJzdHJpbmcgYW5kIHR1cm4gb2ZmCisJaGludGluZy4KKworMjAxOC0wMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIGBGVF9Eb25lX01NX1ZhcicuCisKKwlUaGlzIGlzIG5lY2Vzc2FyeSBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbidzIG1lbW9yeSByb3V0aW5lcyBkaWZmZXIKKwlmcm9tIEZyZWVUeXBlLiAgQSB0eXBpY2FsIGV4YW1wbGUgaXMgYSBQeXRob24gYXBwbGljYXRpb24gb24gV2luZG93cworCXRoYXQgY2FsbHMgRnJlZVR5cGUgY29tcGlsZWQgYXMgYSBETEwgdmlhIHRoZSBgY3R5cGVzJyBpbnRlcmZhY2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oLCBzcmMvYmFzZS9mdG1tLmMgKEZUX0RvbmVfTU1fVmFyKTogRGVjbGFyZQorCWFuZCBkZWZpbmUuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxOC0wMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBSb3VuZCBvZmZzZXRzIG9mIGdseXBoIGNvbXBvbmVudHMgb25seSBpZiBoaW50aW5nIGlzIG9uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX0NvbXBvc2l0ZV9Db21wb25lbnQpOiBJbXBsZW1lbnQKKwlpdC4KKworMjAxOC0wMS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfdG9fZGVzaWduKTogUmVtb3ZlIGRlYWQgY29kZS4KKworCVRoaXMgaXMgYSBiZXR0ZXIgZml4IHRoYW4gdGhlIHByZXZpb3VzIGNvbW1pdCwgd2hpY2ggaXMgbm93CisJcmV2ZXJ0ZWQuCisKKzIwMTgtMDEtMDMgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCU1vdmUgaW50ZXJuYWwgTENELXJlbGF0ZWQgZGVjbGFyYXRpb25zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmggKGZ0X2xjZF9wYWRkaW5nLCBmdF9sY2RfZmlsdGVyX2Zpcik6CisJTW92ZSBmcm9tIGhlcmUuLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmg6IC4uLiB0byBoZXJlLgorCisyMDE4LTAxLTAzICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX0VYUE9SVCwgRlRfRVhQT1JUX0RFRikKKwlbX01TQ19WRVJdOiBMaW1pdCBWaXN1YWwgQysrIGF0dHJpYnV0ZXMuCisKKzIwMTgtMDEtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gTWFrZSBibGVuZC9kZXNpZ24gY29vcmRpbmF0ZSByb3VuZC10cmlwcGluZyB3b3JrLgorCisJQmVoZGFkIHJlcG9ydGVkIHRoYXQgc2V0dGluZyBibGVuZCBjb29yZGluYXRlcywgdGhlbiBnZXR0aW5nIGRlc2lnbgorCWNvb3JkaW5hdGVzIGRpZCBpbmNvcnJlY3RseSByZXR1cm4gdGhlIGRlZmF1bHQgaW5zdGFuY2UncworCWNvb3JkaW5hdGVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9zZXRfbW1fYmxlbmQpOiBGaXggaXQuCisKKzIwMTctMTItMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXAyX2NoYXJfbmV4dCk6IEZpeCBlbmRsZXNzIGxvb3AuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD00ODM4CisKKzIwMTctMTItMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVN5bmNocm9uaXplIG90aGVyIFdpbmRvd3MgcHJvamVjdCBmaWxlcy4KKworCSogYnVpbGRzL3dpbmRvd3MvKjogQWRkIG1pc3NpbmcgZmlsZXMuCisKKzIwMTctMTItMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVVwZGF0ZSBWaXN1YWwgQyAyMDEwIHByb2plY3QgZmlsZXMuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsuCisKKwkqIGJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qOiBBZGQgZmlsZXMgYGZ0YmRmLmMnIGFuZAorCWBmdGNpZC5jJy4KKwlTb3J0IGVudHJpZXMuCisJKiBidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvai5maWx0ZXI6IERpdHRvLgorCUZpeCBtZW1iZXJzIG9mIGBGVF9NT0RVTEUnIGdyb3VwLgorCisyMDE3LTEyLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy92bXMvZnRjb25maWcuaDogU3luY2hyb25pemUgd2l0aCB1bml4IGBmdGNvbmZpZy5pbicgZmlsZS4KKworMjAxNy0xMi0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvdW5peC9mdGNvbmZpZy5pbjogU3luY2hyb25pemUgd2l0aCBtYWluIGBmdGNvbmZpZy5oJyBmaWxlLgorCisJUmVwb3J0ZWQgYnkgTmlrb2xhdXMuCisKKzIwMTctMTItMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxlciB3YXJuaW5ncy4KKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfYml0bWFwX2Fzc3VyZV9idWZmZXIpOiBNYWtlIGBwaXRjaCcgYW5kCisJYG5ld19waXRjaCcgdW5zaWduZWQuCisKKwkqIHNyYy9iYXNlL2Z0cHNwcm9wLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19ILgorCisyMDE3LTEyLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXhlcyBmb3IgYG1ha2UgbXVsdGknLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cHNwcm9wLmg6IFVzZSBgRlRfQkFTRV9DQUxMQkFDSycuCisJKHBzX3Byb3BlcnR5X2dldCk6IEhhcm1vbml6ZSBkZWNsYXJhdGlvbiB3aXRoIGNvcnJlc3BvbmRpbmcKKwlmdW5jdGlvbiB0eXBlZGVmLgorCisJKiBpbmNsdWRlL2ZyZWV0eVtlL2ludGVybmFsL2Z0dHJhY2UuaDogQWRkIGB0cmFjZV9wc3Byb3BzJy4KKworCSogc3JjL2Jhc2UvZnRwc3Byb3AuYzogSW5jbHVkZSBuZWNlc3NhcnkgaGVhZGVyIGZpbGVzLgorCShGVF9DT01QT05FTlQpOiBEZWZpbmUuCisJKHBzX3Byb3BlcnR5X3NldCk6IFRhZyB3aXRoIGBGVF9CQVNFX0NBTExCQUNLX0RFRicuCisJKHBzX3Byb3BlcnR5X2dldCk6IFRhZyB3aXRoIGBGVF9CQVNFX0NBTExCQUNLX0RFRicuCisJSGFybW9uaXplIGRlY2xhcmF0aW9uIHdpdGggY29ycmVzcG9uZGluZyBmdW5jdGlvbiB0eXBlZGVmLgorCisyMDE3LTEyLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlQcm92aWRlIHN1cHBvcnQgZm9yIGludHJhLW1vZHVsZSBjYWxsYmFjayBmdW5jdGlvbnMuCisKKwlUaGlzIGlzIG5lZWRlZCBlc3BlY2lhbGx5IGZvciBgbWFrZSBtdWx0aScgd2l0aCBDKysuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmggKEZUX0JBU0VfQ0FMTEJBQ0ssCisJRlRfQkFTRV9DQUxMQkFDS19ERUYpOiBOZXcgbWFjcm9zLgorCisyMDE3LTEyLTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlNb3ZlIFBvc3RTY3JpcHQgZHJpdmVycycgcHJvcGVydHkgaGFuZGxlcnMgdG8gYGJhc2UnLgorCisJVGhpcyByZWR1Y2VzIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBjb2RlIGFjcm9zcyBQb3N0U2NyaXB0CisJZHJpdmVycy4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2lkL2NpZHJpdmVyLmMsIHNyYy90eXBlMS90MWRyaXZlci5jCisJKHtjZmYsY2lkLHQxfV9wcm9wZXJ0eV97Z2V0LHNldH0pOiBNb3ZlZCB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oOiAuLi50aGlzIG5ldyBmaWxlLgorCShwc19wcm9wZXJ0eV97Z2V0LHNldH0pOiBOZXcgZnVuY3Rpb25zIHRvIHJlcGxhY2UgbW92ZWQgb25lcy4KKworCSogc3JjL2Jhc2UvZnRwc3Byb3AuYzogTmV3IGZpbGUgdGhhdCBpbXBsZW1lbnRzIGFib3ZlIGZ1bmN0aW9ucy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oCisJKEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfUFJPUFNfSCk6IE5ldyBtYWNyby4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2lkL2NpZHJpdmVyLmMsIHNyYy90eXBlMS90MWRyaXZlci5jOgorCVVwZGF0ZWQuCisKKwkqIHNyYy9iYXNlL0phbWZpbGUsIHNyYy9iYXNlL3J1bGVzLm1rIChCQVNFX1NSQyksIHNyYy9iYXNlL2Z0YmFzZS5jOgorCVVwZGF0ZWQuCisKKzIwMTctMTItMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVNwZWVkIHVwIEZUX1NldF9WYXJfe0Rlc2lnbixCbGVuZH1fQ29vcmRpbmF0ZXMgaWYgY3VyciA9PSBuZXcuCisKKwlXZSBleGl0IGVhcmx5IGlmIHRoZSBjdXJyZW50IGRlc2lnbiBvciBibGVuZCBjb29yZGluYXRlcyBhcmUKKwlpZGVudGljYWwgdG8gdGhlIG5ldyBvbmVzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9zZXRfbW1fYmxlbmQsIFRUX1NldF9WYXJfRGVzaWduKToKKwlJbXBsZW1lbnQgaXQsIHJldHVybmluZyBpbnRlcm5hbCBlcnJvciBjb2RlIC0xIGlmIHRoZXJlIHdpbGwgYmUgbm8KKwl2YXJpYXRpb24gY2hhbmdlLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHQxX3NldF9tbV9ibGVuZCk6IERpdHRvLgorCisJKiBzcmMvYmFzZS9mdG1tLmMgKEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzLAorCUZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcywgRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyk6IFVwZGF0ZWQuCisKKzIwMTctMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggY2hhcm1hcCB0eXBlIDIgaXRlcmF0b3IgKCM1MjY0NikuCisKKwlUaGUgc3Vic2V0dGVkIGRlbW8gZm9udCBvZiB0aGUgcmVwb3J0IHRoYXQgZXhoaWJpdHMgdGhlIGJ1ZyBoYXMgYQorCXZlcnkgdW51c3VhbCB0eXBlIDIgY21hcCBmb3IgVW5pY29kZSghKTogSXQgY29udGFpbnMgb25seSB0d28KKwlzdWItaGVhZGVycywgb25lIGZvciBvbmUtYnl0ZSBjaGFyYWN0ZXJzIChjb3ZlcmluZyB0aGUgcmFuZ2UgMHgyMCB0bworCTB4RkEpLCBhbmQgYSBzZWNvbmQgb25lIGZvciBoaWdoZXIgYnl0ZSAweDAxIChqdXN0IGZvciBjaGFyYWN0ZXIKKwljb2RlIFUrMDEzMSkuCisKKwlCZWZvcmUgdGhpcyBjb21taXQsIHRoZSBpdGVyYXRvciB3YXNuJ3QgYWJsZSB0byBjb3JyZWN0bHkgaGFuZGxlIGEKKwlzdWItaGVhZGVyIGZvciBoaWdoZXIgYnl0ZSAweDAxLgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDJfY2hhcl9uZXh0KTogRml4IGNoYXJhY3RlciBpbmNyZW1lbnQKKwlmb3Igb3V0ZXIgbG9vcC4KKworMjAxNy0xMi0xOCAgTWF0dGhpYXMgQ2xhc2VuICA8bWF0dGhpYXMuY2xhc2VuQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gRml4IGNsYW1waW5nLCBtaW5vciB0cmFjaW5nIGNvZGUgYmVhdXRpZmljYXRpb24uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl90b19ub3JtYWxpemVkKTogVHJhY2UgbnVtYmVyIG9mCisJZGVzaWduIGNvb3JkaW5hdGVzLgorCVVzZSBjbGFtcGVkIHZhbHVlLgorCisyMDE3LTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy8qLyo6IE9ubHkgdXNlIGBmdF8nIGFuZCBgRlRfJyB2YXJpYW50cyBvZiBzdGRjIGxpYnJhcnkgc3R1ZmYuCisKKzIwMTctMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfZmFjZV92YXJ5X2N2dCk6IEFkZCBzaXplIGd1YXJkICgjNTI2ODgpLgorCisyMDE3LTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBwcmV2aW91cyBjb21taXQuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoKTogQ29ycmVjdGx5IGhhbmRsZQorCXVuaGludGVkIHBoYW50b20gcG9pbnRzLCB3aGljaCBtdXN0IGJlIHByb3Blcmx5IHNjYWxlZC4KKworMjAxNy0xMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBEb24ndCBhcHBseSBIVkFSIGFuZCBWVkFSIGRlbHRhcyB0d2ljZSAoIzUyNjgzKS4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgpOiBBbHdheXMgYWRqdXN0CisJYHBwMScgdG8gYHBwNCcsIGV4Y2VwdCBpZiB3ZSBoYXZlIGFuIEhWQVIgYW5kL29yIFZWQVIgdGFibGUuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogSGFuZGxlCisJYWx0ZXJuYXRpdmUgY29kZSBicmFuY2ggaWRlbnRpY2FsbHkgdy5yLnQuIHByZXNlbmNlIG9mIGFuIEhWQVIKKwlhbmQvb3IgVlZBUiB0YWJsZS4KKworMjAxNy0xMi0xNyAgSm9uYXRoYW4gS2V3ICA8amZrdGhhbWVAZ21haWwuY29tPgorCisJW3RydWV0eXBlXSBDb3JyZWN0bHkgaGFuZGxlIHZhcmlhdGlvbiBmb250IHBoYW50b20gcG9pbnRzICgjNTI2ODMpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IEZpeCBwaGFudG9tCisJcG9pbnQgaW5kaWNlcy4KKworMjAxNy0xMi0xNyAgSm9uYXRoYW4gS2V3ICA8amZrdGhhbWVAZ21haWwuY29tPgorCisJRml4IGluY29ycmVjdCBhZHZhbmNlIHdpZHRoIHNjYWxpbmcgKCM1MjY4MykuCisKKwkqIHNyYy9iYXNlL2Z0YWR2YW5jZS5jIChGVF9HZXRfQWR2YW5jZXMpOiBBbHdheXMgcmVzcGVjdCB0aGUKKwlGVF9MT0FEX05PX1NDQUxFIGZsYWcgaWYgcHJlc2VudC4KKworMjAxNy0xMi0xNiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvajogQWZ0ZXJCdWlsZCBjb3B5LgorCSogb2Jqcy8uZ2l0aWdub3JlOiBJZ25vcmUgYWxtb3N0IGV2ZXJ5dGhpbmcuCisKKzIwMTctMTItMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjb21waWxlciB3YXJuaW5nICgjNTI2NDApLgorCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChmdF9iaXRtYXBfYXNzdXJlX2J1ZmZlcik6IFJlbW92ZSB1bnVzZWQKKwl2YXJpYWJsZS4KKworMjAxNy0xMi0wOCAgQXp6dXJvICA8YXp6dXJvQHRlYW0tbWVkaWFwb3J0YWwuY29tPgorCisJKiBidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvajogQWRqdXN0IG91dHB1dCBkaXJlY3RvcnkuCisKKwlUaGlzIGFsbG93cyBidWlsZHMgd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMgaW4gcGFyYWxsZWwuCisKKzIwMTctMTItMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBgbWFrZSBzZXR1cCBkb3MnLCBzZWNvbmQgdHJ5ICgjNTI2MjIpLgorCisJKiBidWlsZHMvZGV0ZWN0Lm1rIChkb3Nfc2V0dXApOiBEb24ndCB1c2UgbGl0ZXJhbCBgPicgY2hhcmFjdGVyIGF0CisJYWxsLiAgTWl4aW5nIHRoZSBkaWZmZXJlbnQgZXNjYXBpbmcgcnVsZXMgZnJvbSBtYWtlLCBkb3MsIGFuZAorCXdpbmRvd3MgaXMgdG9vIGZyYWdpbGUuCisKKzIwMTctMTItMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtkb2NtYWtlcl0gRml4IGNvZGUgc2VjdGlvbiBwYXJzaW5nLgorCisJU3R1ZmYgbGlrZQorCisJICB7CisJICAgIDxibGE+CisJICB9CisKKwljb25mdXNlZCB0aGUgcGFyc2VyLCB3aGljaCBpbmNvcnJlY3RseSB0cmVhdGVkIGA8YmxhPicgYXMgYSBtYXJrdXAKKwl0YWcuCisKKwkqIHNyYy90b29scy9kb2NtYWtlci9jb250ZW50LnB5IChDb250ZW50UHJvY2Vzc29yOjpwcm9jZXNzX2NvbnRlbnQpOgorCUFwcGx5IGByZV9tYXJrdXBfdGFncycgb25seSBvdXRzaWRlIG9mIGNvZGUgc2VjdGlvbnMuCisKKzIwMTctMTItMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU5ldyBgZnRkcml2ZXIuaCcgZmlsZSwgY292ZXJpbmcgYWxsIGRyaXZlciBtb2R1bGVzLgorCisJVGhpcyByZWR1Y2VzIHJlZHVuZGFuY3kgYW5kIGluY3JlYXNlcyBzeW5lcmd5OyBpdCBhbHNvIHJlZHVjZXMgdGhlCisJbnVtYmVyIG9mIGhlYWRlciBmaWxlcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCAoRlRfRFJJVkVSX0gpOiBOZXcgbWFjcm8uCisJKEZUX0FVVE9ISU5URVJfSCwgRlRfQ0ZGX0RSSVZFUl9ILCBGVF9UUlVFVFlQRV9EUklWRVJfSCwKKwlGVF9QQ0ZfRFJJVkVSX0gsIEZUX1RZUEUxX0RSSVZFUl9IKTogTWFrZSB0aGVtIGFsaWFzZXMgdG8KKwlGVF9EUklWRVJfSC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGF1dG9oLmgsIGluY2x1ZGUvZnJlZXR5cGUvZnRjZmZkcnYuaCwKKwlpbmNsdWRlL2ZyZWV0eXBlL2Z0cGNmZHJ2LmgsIGluY2x1ZGUvZnJlZXR5cGUvZnR0MWRydi5oLAorCWluY2x1ZGUvZnJlZXR5cGUvZnR0dGRydi5oOiBSZXBsYWNlZCB3aXRoLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZHJpdmVyLmg6IC4uLnRoaXMgbmV3IGZpbGUuCisJKEZUX0NGRl9ISU5USU5HX0FET0JFLCBGVF9UMV9ISU5USU5HX0FET0JFKTogUmVuYW1lZCB0by4uLgorCShGVF9ISU5USU5HX0FET0JFKTogLi4uIHRoaXMgbmV3IG1hY3JvLgorCShGVF9DRkZfSElOVElOR19GUkVFVFlQRSwgRlRfVDFfSElOVElOR19GUkVFVFlQRSk6IFJlbmFtZWQgdG8uLi4KKwkoRlRfSElOVElOR19GUkVFVFlQRSk6IC4uLiB0aGlzIG5ldyBtYWNyby4KKworCSogc3JjLyovKjogVXBkYXRlZCBhY2NvcmRpbmdseS4KKworMjAxNy0xMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTW92ZSBgZnRkcml2ZXIuaCcgdG8gYGZ0ZHJ2LmgnLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmg6IFJlbmFtZWQgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcnYuaDogLi4uIHRoaXMgbmFtZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIChGVF9JTlRFUk5BTF9EUklWRVJfSCk6CisJVXBkYXRlZC4KKworMjAxNy0xMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGFjY2VzcyB0byB1bmluaXRhbGl6ZWQgbWVtb3J5ICgjNTI2MTMpLgorCisJQWxzbyByZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD03OTEzMTcKKworCSogc3JjL2Jhc2UvZnRiaXRtYXAuYyAoZnRfYml0bWFwX2Fzc3VyZV9idWZmZXIpOiBJZiBpbmNyZWFzaW5nIHRoZQorCWJpdG1hcCBzaXplIG5lZWRzIGEgbGFyZ2VyIGJpdG1hcCBidWZmZXIsIGFzc3VyZSB0aGF0IHRoZSBuZXcgbWVtb3J5CisJYXJlYXMgYXJlIGluaXRpYWxpemVkIGFsc28uCisKKzIwMTctMTItMDggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBgbWFrZSBzZXR1cCBkb3MnICgjNTI2MjIpLgorCisJKiBidWlsZHMvZGV0ZWN0Lm1rIChkb3Nfc2V0dXApOiBQcm9wZXJseSBlc2NhcGUgbGl0ZXJhbCBgPicKKwljaGFyYWN0ZXIuCisKKzIwMTctMTItMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBDKysgY29tcGlsYXRpb24uCisKKwkqIHNyYy9wc2F1eC9wc2F1eG1vZC5oOiBVc2UgRlRfQ0FMTEJBQ0tfVEFCTEUgbWFjcm8gd2hlcmUgbmVjZXNzYXJ5LgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IEZpeCB3YXJuaW5nLgorCisyMDE3LTEyLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlGaXggYG1ha2UgbXVsdGknLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaDogUmVtb3ZlIHVudXNlZCB0cmFjaW5nIG1hY3Jvcy4KKwlzL3BzaGFsZ28yL3BzaGFsZ28vLgorCUFkZCBgdHJhY2VfY2ZmZGVjb2RlJy4KKwkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKEZUX0NPTVBPTkVOVCk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0guCisJKiBzcmMvY2ZmL2NmZm9ianMuYzogSW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19IIGFuZAorCUZUX1NFUlZJQ0VfQ0ZGX1RBQkxFX0xPQURfSC4KKworCSogc3JjL2NpZC9jaWRyaXZlci5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0guCisKKwkqIHNyYy9wc2F1eC9jZmZkZWNvZGUuYzogSW5jbHVkZSBGVF9GUkVFVFlQRV9IIGFuZAorCUZUX0lOVEVSTkFMX0RFQlVHX0guCisJKEZUX0NPTVBPTkVOVCk6IERlZmluZS4KKwkqIHNyYy9wc2F1eC9jZmZkZWNvZGUuaDogSW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ILgorCSogc3JjL3BzYXV4L3BzYXV4bW9kLmg6IEluY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSC4KKwlEZWNsYXJlIGBjZmZfYnVpbGRlcl9mdW5jcycgYW5kIGBwc19idWlsZGVyX2Z1bmNzJy4KKwkqIHNyYy9wc2F1eC9wc2Z0LmM6IEluY2x1ZGUgYHBzb2Jqcy5oJyBhbmQgYGNmZmRlY29kZS5oJy4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyA6IEluY2x1ZGUgYHBzYXV4bW9kLmgnLgorCisyMDE3LTEyLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmg6IFNvbWUgY2xlYW4tdXAuCisKKwlUaGlzIGNvbW1pdCByZW1vdmVzIGRvY3VtZW50YXRpb24gb2YgZGVwcmVjYXRlZCBtYWNyb3MgYW5kIGRvZXMgc29tZQorCW1pbm9yIHN0cmVhbWxpbmluZy4KKworMjAxNy0xMi0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBidWlsZHMvc3ltYmlhbi9ibGQuaW5mOiBVcGRhdGVkLgorCisyMDE3LTEyLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlOZXcgaGVhZGVyIGZpbGUgYGZ0cGFyYW1zLmgnIHRoYXQgY29sbGVjdHMgYWxsIHBhcmFtZXRlciB0YWdzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9QQVJBTUVURVJfVEFHU19IKTogTmV3CisJbWFjcm8uCisJKEZUX1RSVUVUWVBFX1VOUEFURU5URURfSCwgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0gpOiBEZWZpbmUgaXQgdG8KKwlgZnRwYXJhbXMuaCcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRhdXRvaC5oLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2ZmZHJ2LmgsCisJaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgsCisJaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oLCBpbmNsdWRlL2ZyZWV0eXBlL2Z0dDFkcnYuaDogSW5jbHVkZQorCUZUX1BBUkFNRVRFUl9UQUdTX0guCisJTW92ZSBGVF9QQVJBTV9UQUdfWFhYIGRlZmluaXRpb25zIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0cGFyYW1zLmg6IC4uLnRoaXMgbmV3IGZpbGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvdHR1bnBhdC5oOiBSZW1vdmUuICBObyBsb25nZXIgbmVlZGVkLgorCisyMDE3LTEyLTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbXByb3ZlIHRyYWNpbmcgbWVzc2FnZXMgYnkgdXNpbmcgc2luZ3VsYXIgYW5kIHBsdXJhbCBmb3Jtcy4KKworCSogc3JjLyovKi5jOiBJbXBsZW1lbnQgaXQuCisKKzIwMTctMTItMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWxsb3cgc2hhcmVkIHBvaW50cyBpbiBgY3ZhcicgdGFibGUgKCM1MjUzMikuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2ZhY2VfdmFyeV9jdnQpOiBJbXBsZW1lbnQgaXQgYnkgY29weWluZworCWFuZCBhZGp1c3RpbmcgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSBmcm9tCisJYFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzJy4KKworMjAxNy0xMS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbXByb3ZpbmcgdHJhY2luZyBvZiBjb21wb3NpdGUgZ2x5cGhzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0NvbXBvc2l0ZV9HbHlwaCkKKwlbRlRfREVCVUdfTEVWRUxfVFJBQ0VdOiBTaG93IGNvbXBvc2l0ZSBnbHlwaCBpbmZvcm1hdGlvbi4KKworMjAxNy0xMS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3R5cGUxXSBBbGxvdyAoYWdhaW4pIGAvRW5jb2RpbmcnIHdpdGggPjI1NiBlbGVtZW50cyAoIzUyNDY0KS4KKworCUluIHZlcnNpb24gMi42LjEsIHRoaXMgaGFzIGJlZW4gZGlzYWxsb3dlZCB0byBiZXR0ZXIgcmVqZWN0CisJbWFsZm9ybWVkIGZvbnRzOyBob3dldmVyLCB0aGlzIHJlc3RyaWN0aW9uIHdhcyB0b28gc3Ryb25nLiAgVGhpcworCXRpbWUsIHdlIG9ubHkgdGFrZSB0aGUgZmlyc3QgMjU2IGVsZW1lbnRzIGludG8gYWNjb3VudCwgc2luY2UKKwllbmNvZGluZyBhcnJheXMgYXJlIGFsd2F5cyBhY2Nlc3NlZCB3aXRoIGEgOGJpdCBpbnRlZ2VyLCBhY2NvcmRpbmcKKwl0byB0aGUgUG9zdFNjcmlwdCBMYW5ndWFnZSBSZWZlcmVuY2UuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfZW5jb2RpbmcpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTctMTEtMjcgIEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgIDxqYW4uc3RlZmZlbnNAZ21haWwuY29tPgorCisJRml4IGxhc3QgY29tbWl0ICgjNTI1MjIpLgorCisJKiBidWlsZHMvZnJlZXR5cGUubWs6IFNldCBgRlRfT1BUSU9OX0gnIGFuZCBgRlRPUFRJT05fRkxBRycKKwlwcm9wZXJseSBpZiB3ZSBoYXZlIGBmdG9wdGlvbi5oJyBpbiBgQlVJTERfRElSJy4KKworMjAxNy0xMS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3VuaXhdIEluc3RhbGwgYSBtYXNzYWdlZCBgZnRvcHRpb24uaCcgZmlsZSAoIzUxNzgwKS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAoZnRvcHRpb25fc2V0LCBmdG9wdGlvbl91bnNldCk6IE5ldworCWF1eGlsaWFyeSBmdW5jdGlvbnMgdG8gY29uc3RydWN0Li4uCisJKEZUT1BUSU9OX0hfU0VEKTogLi4uIHRoaXMgbmV3IHZhcmlhYmxlLgorCUFwcGx5IGl0IGFzIGEgc2VkIGFyZ3VtZW50IHdoaWxlIGNvcHlpbmcgYGZ0b3B0aW9uLmgnIHRvIHRoZQorCWBidWlsZHMvdW5peCcgZGlyZWN0b3J5ICh1c2luZyBgQUNfQ09ORklHX0ZJTEVTJykuCisJU2ltcGxpZnkgY29kZSBvZiB0ZXN0IHRoYXQgY2hlY2tzIGNwcCdzIGNvbXB1dGF0aW9uIG9mIGJpdCBsZW5ndGgKKwkodGhlIHRlc3QgcHJldmlvdXNseSBjcmVhdGVkIGFuIGVtcHR5IGBmdG9wdGlvbi5oJyBmaWxlIGFuZCBkZWxldGVkCisJaXQgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcyk7IHdpdGhvdXQgdGhpcyBjaGFuZ2UsIGl0IGNhbiBoYXBwZW4gb24gbXkKKwlHTlUvTGludXggYm94IHRoYXQgYGNvbmZpZ3VyZSdzIGV4ZWN1dGlvbiBvZiBgY29uZmlnLnN0YXR1cycgZG9lc24ndAorCWNyZWF0ZSBgZnRvcHRpb24uaCcgKG5vIGlkZWEgd2h5IHRoaXMgaGFwcGVucykuCisKKwkqIGJ1aWxkcy91bml4L2luc3RhbGwubWsgKGluc3RhbGwpOiBJbnN0YWxsCisJYGJ1aWxkcy91bml4L2Z0b3B0aW9uLmgnLgorCisJKiBidWlsZHMvdW5peC91bml4LWRlZi5pbiAoRElTVENMRUFOKTogVXBkYXRlZC4KKworCSogYnVpbGRzL3VuaXgvLmdpdGlnbm9yZTogVXBkYXRlZC4KKworMjAxNy0xMS0yMyAgVG9yIEFuZGVyc3NvbiAgPHRvci5hbmRlcnNzb25AYXJ0aWZleC5jb20+CisKKwlTaWxlbmNlIHVudXNlZCBmdW5jdGlvbiB3YXJuaW5ncyAoIzUyNDY1KS4KKworCVNvbWUgc3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBjYXVzZSB1bnVzZWQgZnVuY3Rpb24gd2FybmluZ3MgaWYKKwljZXJ0YWluIGNvbmZpZyBvcHRpb25zIGFyZSB0dXJuZWQgb2ZmIHZpYSBgZnRvcHRpb24uaCcuCisKKwkqIHNyYy9iYXNlL2Z0YmFzZS5oLCBzcmMvYmFzZS9mdHJmb3JrLmMsIHNyYy9zZm50L3R0YmRmLmgsCisJc3JjL3RydWV0eXBlL3R0Z3h2YXIuaDogQWRkICNpZmRlZiBndWFyZHMgYXJvdW5kIHRoZXNlIHNlY3Rpb25zLgorCisyMDE3LTExLTIyICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwkqIHNyYy9wc2F1eC9wc2Z0LmMgKGNmMl9zZXRHbHlwaFdpZHRoKTogQ2hlY2sgZm9ybWF0IGJlZm9yZSBzZXR0aW5nLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NDM3NworCisyMDE3LTExLTIyICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEZpeCBDRkYgYWR2YW5jZSB3aWR0aHMuICgjNTI0NjYpCisKKwlHbHlwaCBhZHZhbmNlIHdpZHRocyB3ZXJlIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIG5ldyBgUFNfRGVjb2RlcicgYnV0IG5vdAorCXNhdmVkIHRvIHRoZSB1bmRlcmx5aW5nIGZvcm1hdCBzcGVjaWZpYyBkZWNvZGVyLiBUaGlzIGNhdXNlZCBwdXJlIENGRgorCWZvbnRzIHRvIGhhdmUgYmFkIGFkdmFuY2Ugd2lkdGguCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoUFNfRGVjb2Rlcik6IENoYW5nZSBgZ2x5cGhfd2lkdGgnCisJZmllbGQgdG8gcG9pbnRlci4KKwlSZW1vdmUgdW51c2VkIGZpZWxkcy4KKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfZGVjb2Rlcl9pbml0KTogQ2hhbmdlIGBnbHlwaF93aWR0aCcgZnJvbSBjb3B5CisJdG8gcmVmZXJlbmNlLgorCVJlbW92ZSB1bnVzZWQuCisJKiBzcmMvcHNhdXgvcHNmdC5jIChjZjJfc2V0R2x5cGhXaWR0aCk6IFVwZGF0ZSBjb2RlLgorCisyMDE3LTExLTE1ICBWbGFkIFRzeXJrbGV2aWNoICA8dnRzeXJrbGV2aWNoQGdvb2dsZS5jb20+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaDogRml4IGBGVF9SZW5kZXJlcl9SZW5kZXJGdW5jJyB0eXBlLgorCisyMDE3LTExLTE0ICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+CisKKwlVc2UgQWRvYmUgaGludGluZyBlbmdpbmUgZm9yIGBsaWdodCcgaGludGluZyBvZiBib3RoIENGRiBhbmQgVHlwZSAxLgorCisJU2luY2UgRXdhbGQgSGV3IGZhY3RvcmVkIHRoZSBBZG9iZSBoaW50aW5nIGVuZ2luZSBvdXQgb2YgdGhlIENGRgorCWRyaXZlciBjb2RlLCB3ZSBjYW4gbm93IHVzZSBpdCBvbiBUeXBlIDEgKGFuZCBDSUQpIGZvbnQgZm9ybWF0cywgYXMKKwlib3RoIGhhdmUgdGhlIHNhbWUgaGludGluZyBwaGlsb3NvcGh5LgorCisJVGhpcyBjaGFuZ2UgYWN0aXZhdGVzIHRoZSBBZG9iZSBoaW50ZXIgd2hlbiBpbiBMSUdIVCBtb2RlLCBhbmQKKwl0aGVyZWZvcmUgYWx3YXlzIHVubGVzcyBleHBsaWNpdGx5IGFza2luZyBmb3IgdGhlIGF1dG8taGludGVyLiAgVGhpcworCW1ha2VzIExJR0hUIGJlaGF2aW9yIGNvbnNpc3RlbnQgd2l0aCBDRkYgZm9udHMuICBBcyBvZiB0aGlzIGNvbW1pdCwKKwl0aGUgaGludGluZyBlbmdpbmUgdGFibGUgbG9va3MgYXMgZm9sbG93cy4KKworCSAgICAgICAgICAgICBMSUdIVCAgTk9STUFMCisJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAgVHJ1ZVR5cGUgIEF1dG8gICB2NDAKKwkgICBDRkYgICAgICAgQWRvYmUgIEFkb2JlCisJICAgVHlwZSAxICAgIEFkb2JlICBBZG9iZQorCisyMDE3LTExLTEwICBZdXJpIExldmNoZW5rbyAgPHl1cmlfbGV2Y2hlbmtvQGJvb2xhdC5jb20+CisKKwkqIENNYWtlTGlzdHMudHh0OiBBZGQgYERJU0FCTEVfRk9SQ0VfREVCVUdfUFJFRklYJyBvcHRpb24uCisKKzIwMTctMTEtMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBSZWxvY2F0ZSBjb25kaXRpb24uCisKKzIwMTctMTEtMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfc2V0X2NlbGwpOiBGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuCisKKzIwMTctMTEtMDMgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRml4IFBvc3RTY3JpcHQgaW50ZXJwcmV0ZXIgcmV3aW5kaW5nIGluIFR5cGUgMSBtb2RlLiAoIzUyMjUxKQorCisJVGhlIGludGVycHJldGVyIGluIFR5cGUgMSBtb2RlIHJld2luZHMgdGhlIGNoYXJzdHJpbmcgYWZ0ZXIgY29sbGVjdGluZworCWFsbCBoaW50cyBmb3IgYnVpbGRpbmcgdGhlIGluaXRpYWwgaGludG1hcCAoY29tbWl0IGQ1MmRkN2YpLiBIb3dldmVyLAorCXNvbWUgY2hhcnN0cmluZ3MgdXNlIGBlbmRjaGFyJyBpbiBhIGZpbmFsIHN1YnJvdXRpbmUgY2FsbCwgcmV3aW5kaW5nIHRvCisJdGhlIHN0YXJ0IG9mIHRoYXQgc3Vicm91dGluZSwgYW5kIG9ubHkgYSBzbWFsbCBzZWN0aW9uIG9mIHRoZSBhY3R1YWwKKwlnbHlwaCBpcyBkcmF3bi4KKworCSogc3JjL3BzYXV4L3BzaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRFTkRDSEFSPjoKKwlFbnN1cmUgd2UgYXJlIG9uIHRoZSB0b3AgbGV2ZWwgY2hhcnN0cmluZyBiZWZvcmUgcmV3aW5kaW5nLgorCisyMDE3LTExLTAzICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgorCisJW3RydWV0eXBlXSBBZGQgbW9yZSB0cmlja3kgZm9udHMuCisKKwlTZWUgdGhlIHJlcG9ydCBieSBZYW5nIFlpbnNlbi4KKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTctMTEvbXNnMDAwMDAuaHRtbAorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHRyaWNrX25hbWVzKTogQWRkIGBERkdvdGhpYy1FQicsCisJYERGR3lvU2hvLUx0JywgYERGSFNHb3RoaWMtVzUnLCBgREZIU01pbmNoby1XMycgYW5kIGBERkhTTWluY2hvLVc3Jy4KKwkodHRfY2hlY2tfdHJpY2t5bmVzc19zZm50X2lkcyk6IEFkZCBjaGVja3N1bXMgZm9yIERGR290aGljLUVCLAorCURGR3lvU2hvLUx0LCBERkhTR290aGljLVc1LCBERkhTTWluY2hvLVczIGFuZCBERkhTTWluY2hvLVc3LiAgQWxzbworCWFkZCBjaGVja3N1bXMgZm9yIERMQ0xpU2h1IGFuZCBETENIYXlCb2xkIHdoaWNoIHRoZWlyIGZhbWlseSBuYW1lcworCXdlcmUgYWxyZWFkeSBsaXN0ZWQgYnV0IHRoZWlyIGNoZWNrc3VtcyB3ZXJlIHByZXZpb3VzbHkgdW5rbm93bi4KKworMjAxNy0xMS0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gRml4IGNvbXBsZXggcmVuZGVyaW5nIGF0IGhpZ2ggcHBlbS4KKworCVdlIHVzZWQgdG8gc3BsaXQgbGFyZ2UgZ2x5cGhzIGludG8gaG9yaXpvbnRhbCBiYW5kcyBhbmQgY29udGludWUKKwliaXNlY3RpbmcgdGhlbSBzdGlsbCBob3Jpem9udGFsbHkgaWYgdGhhdCB3YXMgbm90IGVub3VnaC4gIFRoaXMgaXMKKwlndWFyYW50ZWVkIHRvIGZhaWwgd2hlbiBhIHNpbmdsZSBzY2FubGluZSBjYW5ub3QgZml0IGludG8gdGhlCisJcmVuZGVyaW5nIG1lbW9yeSBwb29sLiAgTm93IHdlIGJpc2VjdCB0aGUgYmFuZHMgdmVydGljYWxseSBzbyB0aGF0CisJdGhlIHNtYWxsZXN0IHVuaXQgaXMgYSBjb2x1bW4gb2YgdGhlIGJhbmQgaGVpZ2h0LCB3aGljaCBpcyBndXJhbnRlZWQKKwl0byBmaXQgaW50byBtZW1vcnkuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2NvbnZlcnRfZ2x5cGgpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTctMTAtMjAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIEltcHJvdmUgY29tcGxleCByZW5kZXJpbmcgYXQgaGlnaCBwcGVtLgorCisJQXQgbGFyZ2Ugc2l6ZXMgYWxtb3N0IGJ1dCBub3QgZXhhY3RseSBob3Jpem9udGFsIHNlZ21lbnRzIGNhbiBxdWlja2x5CisJZHJhaW4gdGhlIHJlbmRlcmluZyBwb29sLiBUaGlzIHBhdGNoIGF0IGxlYXN0IGF2b2lkcyBmaWxsaW5nIHRoZSBwb29sCisJd2l0aCB0cml2aWFsIGNlbGxzLiBCZXlvbmQgdGhpcywgd2UgY2FuIG9ubHkgaW5jcmVhc2UgdGhlIHBvb2wgc2l6ZS4KKworCVJlcG9ydGVkLCBhbmFseXplZCwgYW5kIHRlc3RlZCBieSBDb2xpbiBGYWhleS4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfc2V0X2NlbGwpOiBEbyBub3QgcmVjb3JkIHRyaXZpYWwgY2VsbHMuCisKKzIwMTctMTAtMjAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBJbXByb3ZlIHRyYWNpbmcgaW4gRlRfTG9hZF9HbHlwaCwgRlRfKl9TaXplLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFRhZyB0cmFjaW5nIG1lc3NhZ2VzIHdpdGgKKwlmdW5jdGlvbiBuYW1lLCBnbHlwaCBpbmRleCwgYW5kIGxvYWQgZmxhZ3MuCisJKEZUX1NlbGVjdF9NZXRyaWNzLCBGVF9SZXF1ZXN0X01ldHJpY3MpOiBSZW1vdmUgYWxsIHRyYWNpbmcuCisJKEZUX1NlbGVjdF9TaXplLCBGVF9SZXF1ZXN0X1NpemUpOiBJbXByb3ZlIHRyYWNpbmcuCisKKzIwMTctMTAtMTggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtiYXNlXSBJbXByb3ZlIHRyYWNpbmcgaW4gRlRfUmVuZGVyX0dseXBoLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfUmVuZGVyX0dseXBoX0ludGVybmFsKTogQWRkIHRvdGFsIGNvdmVyYWdlCisJY2FsY3VsYXRpb25zIGFuZCBkb3duZ3JhZGUgTmV0cGJtIGR1bXAgdG8gYml0bWFwOjcuCisKKzIwMTctMTAtMTUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtjZmZdIEZpeCBzZWdmYXVsdCBvbiBtaXNzaW5nIGBwc2F1eCcgKCM1MjIxOCkKKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9kb25lX2JsZW5kKTogQWRkIGEgY2hlY2sgZm9yIHBvc3NpYmxlIG51bGxwdHIuCisKKwkqIG1vZHVsZXMuY2ZnOiBVcGRhdGUgZGVwZW5kZW5jeSBsaXN0LgorCisyMDE3LTEwLTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZSwgY2ZmXSBGaXggTVNWQyB3YXJuaW5ncy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19MaWJyYXJ5KTogQzQ3MDI6IHVucmVhY2hhYmxlIGNvZGUuCisJKGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwKTogQzQyNDQ6IHBvc3NpYmxlIGxvc3Mgb2YgZGF0YS4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfYmxlbmRfZG9CbGVuZCk6IEM0MjQ0OiBwb3NzaWJsZSBsb3NzIG9mIGRhdGEuCisJVHVybiBgc3VtJyBpbnRvIHVuc2lnbmVkLgorCisyMDE3LTEwLTE0ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYmFzZV0gTmV0cGJtIGltYWdlIHRyYWNpbmcuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogVHJhY2UgYml0bWFwIHNpemUuCisJKEZUX1JlbmRlcl9HbHlwaF9JbnRlcm5hbCk6IFRyYWNlIGJpdG1hcCBpbiBOZXRwYm0gZm9ybWF0LgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9zd2VlcCk6IFN3ZWVwIHJlbW5hbnRzIG9mIHNwYW4gdHJhY2luZy4KKworMjAxNy0xMC0xNCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBidWlsZHMvd2luZG93cy9mdGRlYnVnLmMgKEZUX01lc3NhZ2UpOiBQcmludCB0byBzdGRlcnIuCisJKiBidWlsZHMvd2luY2UvZnRkZWJ1Zy5jIChGVF9NZXNzYWdlKTogRGl0dG8uCisKKzIwMTctMTAtMTQgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW2Fmc2hhcGVyXSBEZWxheSBjcmVhdGluZyBgaGJfc2V0JyBvYmplY3RzIHVudGlsIG5lZWRlZC4KKworCUluIHJ1bnMgb24gTm90byBOYXNraCBBcmFiaWMsIHRoaXMgcmVzdWx0cyBpbiA4OSBzZXRzIGNyZWF0ZWQKKwlpbnN0ZWFkIG9mIDM0MCBiZWZvcmUuICBNYWtlcyBhdXRvLWhpbnRlciBzZXR1cCB3aXRoIEhhcmZCdXp6CisJZW5hYmxlZCAyMCUgdG8gMzAlIGZhc3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZzaGFwZXIuYyAoYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSk6IEltcGxlbWVudCBpdC4KKworMjAxNy0xMC0xMiAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3R5cGUxLCBjaWRdIEFkZCBoaW50aW5nIGVuZ2luZSBzd2l0Y2guCisKKwlJbXBsZW1lbnQgcHJvcGVydHkgc2VydmljZSBpbiBgdHlwZTEnIGFuZCBgY2lkJyBkcml2ZXJzIHRvIGFsbG93CisJc3dpdGNoaW5nIGJldHdlZW4gRnJlZVR5cGUgb3IgQWRvYmUgaGludGluZyBlbmdpbmUgd2hlbiBib3RoIGFyZQorCWF2YWlsYWJsZS4KKworCSogc3JjL2NpZC9jaWRyaXZlci5jIChjaWRfcHJvcGVydHlfe3NldCxnZXR9LCBjaWRfc2VydmljZXMpLAorCXNyYy90eXBlMS90MWRyaXZlci5jICh0MV9wcm9wZXJ0eV97c2V0LGdldH0sIHQxX3NlcnZpY2VzKTogQWRkCisJUHJvcGVydGllcyBzZXJ2aWNlLgorCisJKiBzcmMvY2lkL2NpZG9ianMuYyAoY2lkX2RyaXZlcl9pbml0KSwgc3JjL3R5cGUxL3Qxb2Jqcy5jCisJKFQxX0RyaXZlcl9Jbml0KTogQWRkIGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzLgorCisyMDE3LTEwLTEyICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlBZGQgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgorCisJVGhpcyBjb250cm9scyB3aGV0aGVyIHRoZSBvbGQgVHlwZSAxIGVuZ2luZSBnZXRzIGNvbXBpbGVkIGludG8gRnJlZVR5cGUuCisJSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworCSogZGV2ZWwvZnRvcHRpb24uaCwgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAorCShUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUpOiBOZXcgbWFjcm8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoUFNfRGVjb2Rlcik6IFJlbW92ZSB1bnVzZWQgZmllbGQuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgsIHNyYy9jaWQvY2lkZ2xvYWQuYworCShjaWRfbG9hZF9nbHlwaCksIHNyYy9wc2F1eC9wc2F1eG1vZC5jLCBzcmMvcHNhdXgvcHNvYmpzLmMKKwkocHNfYnVpbGRlcl9hZGRfcG9pbnQpLCBzcmMvcHNhdXgvdDFkZWNvZGUuYworCSh0MV9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUsIHQxX2RlY29kZXJfcGFyc2VfZ2x5cGgsCisJdDFvcGVyYXRvcl9zZWFjLCB0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKSwgc3JjL3BzYXV4L3QxZGVjb2RlLmgsCisJc3JjL3R5cGUxL3QxZ2xvYWQuYyAoVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZyk6IFN1cnJvdW5kCisJcmVsZXZhbnQgY29kZSB3aXRoIG1hY3JvLgorCU1pbm9yIGNvZGUgY2hhbmdlcy4KKworMjAxNy0xMC0xMiAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJRXh0cmFjdCB3aWR0aCBwYXJzaW5nIGZyb20gVHlwZSAxIHBhcnNlci4KKworCUR1cGxpY2F0ZSB0aGUgZmFzdCBhZHZhbmNlIHdpZHRoIGNhbGN1bGF0aW9ucyBmcm9tIHRoZSBvbGQgcGFyc2VyLgorCVRoaXMgaXMgdG8gZmFjaWxpdGF0ZSBhZGRpbmcgb3B0aW9ucyBmb3IgY29tcGlsaW5nIG91dCB0aGUgb2xkIHBhcnNlci4KKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLntjLGh9ICh0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MpOiBOZXcgZnVuY3Rpb24uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0RlY29kZXJfRnVuY3MpOiBOZXcgZW50cnkKKwlgcGFyc2VfbWV0cmljcycuCisJKiBzcmMvcHNhdXgvcHNhdXhtb2QuYzogU2V0IHRoZSBuZXcgZW50cnkuCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcpLAorCXNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX2xvYWRfZ2x5cGgpOiBTZXBhcmF0ZQorCWNvbmRpdGlvbmFsIGZvciBzZWxlY3RpbmcgZW5naW5lLgorCisyMDE3LTEwLTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b3V0bG4uYyAoRlRfT3V0bGluZV9UcmFuc2xhdGUpOiBGaXggaW50ZWdlciBvdmVyZmxvdy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTc3Mjc3NQorCisyMDE3LTEwLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9nbHlwaHNsb3RfcHJlc2V0X2JpdG1hcCk6IEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzU3OQorCisyMDE3LTEwLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gQWRqdXN0IGJlaGF2aW91ciBvZiBQUyBmb250IG5hbWVzIGZvciB2YXJpYXRpb24gZm9udHMuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X3Zhcl9wc19uYW1lKTogVXNlIGEgbmFtZWQgaW5zdGFuY2UncworCVBTIG5hbWUgb25seSBpZiBubyB2YXJpYXRpb24gaXMgYXBwbGllZC4KKworMjAxNy0xMC0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHJ1ZXR5cGVdIEFkanVzdCBiZWhhdmlvdXIgb2YgbmFtZWQgaW5zdGFuY2VzLgorCisJVGhpcyBjb21taXQgY29tcGxldGVseSBzZXBhcmF0ZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gbmFtZWQKKwlpbnN0YW5jZXMgYW5kIHZhcmlhdGlvbiBmdW5jdGlvbnMuICBJbiBwYXJ0aWN1bGFyLCByZXNldHRpbmcgdGhlCisJdmFyaWF0aW9uIHJldHVybnMgdG8gdGhlIGN1cnJlbnQgbmFtZWQgaW5zdGFuY2UgKGlmIHNldCkgYW5kIG5vdCB0bworCXRoZSBiYXNlIGZvbnQuCisKKwlBcyBhIHNpZGUgZWZmZWN0LCB2YXJpYXRpb24gZnVuY3Rpb25zIG5vIGxvbmdlciBjaGFuZ2UgdGhlIG5hbWVkCisJaW5zdGFuY2UgaW5kZXguCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogVXNlIE1NIHNlcnZpY2UncyBgc2V0X2luc3RhbmNlJworCWZ1bmN0aW9uLgorCUFsc28gYXBwbHkgYE1WQVInIHRhYmxlIHRvIG5hbWVkIGluc3RhbmNlcy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IEFkZCBjYXN0LgorCSh0dF9zZXRfbW1fYmxlbmQpOiBObyBsb25nZXIgY2hlY2sgd2hldGhlciByZXF1ZXN0ZWQgdmFyaWF0aW9uCisJY29pbmNpZGVzIHdpdGggYSBuYW1lZCBpbnN0YW5jZS4KKwkoVFRfU2V0X1Zhcl9EZXNpZ24pOiBVc2UgY3VycmVudCBuYW1lZCBpbnN0YW5jZSBmb3IgZGVmYXVsdAorCWNvb3JkaW5hdGVzLgorCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBVc2UgYFRUX1NldF9OYW1lZF9JbnN0YW5jZScuCisKKzIwMTctMTAtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1ha2UgYEZUX1NldF9OYW1lZF9JbnN0YW5jZScgd29yay4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfc2V0X2luc3RhbmNlKTogTmV3IGZ1bmN0aW9uLgorCShjZmZfc2VydmljZV9tdWx0aV9tYXN0ZXJzKTogUmVnaXN0ZXIgaXQuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1NldF9OYW1lZF9JbnN0YW5jZSk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmg6IFVwZGF0ZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzKTogUmVnaXN0ZXIKKwlpdC4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9SZXNldF9NTV9CbGVuZCk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy90eXBlMS90MWxvYWQuaDogVXBkYXRlZC4KKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9zZXJ2aWNlX211bHRpX21hc3RlcnMpOiBSZWdpc3RlciBpdC4KKworMjAxNy0xMC0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJTWFrZSBgRlRfRkFDRV9GTEFHX1ZBUklBVElPTicgd29yay4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2UpOiBSZW1vdmUKKwlgaXNfZGVmYXVsdF9pbnN0YW5jZSc7IHRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBjb21iaW5hdGlvbiBvZgorCWBGVF9JU19WQVJJQVRJT04nIGFuZCBgRlRfSVNfSU5TVEFOQ0UnLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9nZXRfYWR2YW5jZXMpOiBVcGRhdGVkLgorCisJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChzZm50X2dldF9wc19uYW1lKSwgc3JjL3NmbnQvc2ZvYmpzLmMKKwkoc2ZudF9pbml0X2ZhY2UpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2FkdmFuY2VzKSwgc3JjL3RydWV0eXBlL3R0Z2xvYWQuYworCShUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCwgbG9hZF90cnVldHlwZV9nbHlwaCwgSVNfREVGQVVMVF9JTlNUQU5DRSksCisJc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfc2V0X21tX2JsZW5kKTogVXBkYXRlZC4KKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1NldF9NTV9CbGVuZCwgVFRfU2V0X1Zhcl9EZXNpZ24pOgorCUhhbmRsZSBgRlRfRkFDRV9GTEFHX1ZBUklBVElPTicuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfU2V0X01NX0JsZW5kLCBUMV9TZXRfTU1fRGVzaWduKTogSGFuZGxlCisJYEZUX0ZBQ0VfRkxBR19WQVJJQVRJT04nLgorCisyMDE3LTEwLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlOZXcgZnVuY3Rpb24gYEZUX1NldF9OYW1lZF9JbnN0YW5jZScuCisKKwlObyBlZmZlY3QgeWV0LgorCisJKiBzcmMvYmFzZS9mdG1tLmMgKEZUX1NldF9OYW1lZF9JbnN0YW5jZSk6IE5ldyBmdW5jdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1tLmg6IFVwZGF0ZWQuCisKKzIwMTctMTAtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBtYWNyb3MgZm9yIGNoZWNraW5nIHdoZXRoZXIgYSBmb250IHZhcmlhdGlvbiBpcyBhY3RpdmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfRkFDRV9GTEFHX1ZBUklBVElPTiwKKwlGVF9JU19WQVJJQVRJT04pOiBOZXcgbWFjcm9zLgorCU5vIGVmZmVjdCB5ZXQuCisKKzIwMTctMTAtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUFkZCBmcmFtZXdvcmsgZm9yIHNldHRpbmcgbmFtZWQgaW5zdGFuY2UgaW4gTU0gc2VydmljZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmggKEZUX1NldF9JbnN0YW5jZV9GdW5jKToKKwlOZXcgZnVuY3Rpb24gdHlwZWRlZi4KKwkoTXVsdGlNYXN0ZXJzKTogQWRkIGBzZXRfaW5zdGFuY2UnIG1lbWJlci4KKwkoRlRfREVGSU5FX1NFUlZJQ0VfTVVMVElNQVNURVJTUkVDKTogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfc2VydmljZV9tdWx0aV9tYXN0ZXJzKSwKKwlzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIgKHR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycyksCisJc3JjL3R5cGUxL3QxZHJpdmVyLmMgKHQxX3NlcnZpY2VfbXVsdGlfbWFzdGVycyk6IFVwZGF0ZWQuCisKKzIwMTctMTAtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gTWlub3IgY29kZSBzaHVmZmxpbmcuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfU2V0X01NX0JsZW5kKTogTWFrZSBpdCBhIHdyYXBwZXIgb2YuLi4KKwkodDFfc2V0X21tX2JsZW5kKTogLi4udGhpcyBuZXcgZnVuY3Rpb24uCisJKFQxX1NldF9NTV9EZXNpZ24pOiBVc2UgYHQxX3NldF9tbV9ibGVuZCcuCisKKzIwMTctMTAtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwKTogRml4IGludGVnZXIKKwlvdmVyZmxvdy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTM1MzkKKworMjAxNy0xMC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmMgKGNmZl9wc19nZXRfZm9udF9leHRyYSk6IEF2b2lkIGNvZGUgdGhhdCByZWxpZXMKKwlvbiBudW1lcmljIG92ZXJmbG93LgorCUFkZCBjYXN0LgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IEZpeCB2YXJpYWJsZQorCXR5cGVzLCBhZGQgY2FzdC4KKworMjAxNy0xMC0wNCAgSm9obiBUeXRnYXQgIDxKb2huLlR5dGdhdEBlc2tvLmNvbT4KKworCVtjZmZdIEFkZCBzdXBwb3J0IGZvciBgRlNUeXBlJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oIChDRkZfRm9udFJlYyk6IEFkZAorCWBmb250X2V4dHJhJyBlbnRyeS4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfcHNfZ2V0X2ZvbnRfZXh0cmEpOiBOZXcgZnVuY3Rpb24gdG8KKwlyZXRyaWV2ZSBGU1R5cGUgaW5mbyBmcm9tIHRoZSBlbWJlZGRlZCBQb3N0U2NyaXB0IGRhdGEuCisJKGNmZl9zZXJ2aWNlX3BzX2luZm8pOiBSZWdpc3RlciBmdW5jdGlvbi4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9mb250X2RvbmUpOiBGcmVlIGBmb250X2V4dHJhJy4KKworMjAxNy0wOS0zMCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJU2lnbmVkbmVzcyBmaXhlcyBpbiBiaXRtYXAgcHJlc2V0dGluZy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTM1MTQuCisKKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IEV4bGljaXRseSBzaWduZWQgaGVpZ2h0LgorCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWMpOiBEaXR0by4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChmdF9nbHlwaHNsb3RfcHJlc2V0X2JpdG1hcCk6IEV4cGxpY2l0bHkgdW5zaWduZWQKKwlzdWJ0cmFjdGlvbi4KKworMjAxNy0wOS0yOSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJQml0bWFwIG1ldHJpY3MgcHJlc2V0dGluZyBbMi8yXS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBQcmVzZXQgdGhlIGJpdG1hcCBtZXRyaWNzIHdoZW4KKwlhcHByb3ByaWF0ZSBidXQgYEZUX1JlbmRlcl9HbHlwaCcgaXMgbm90IGNhbGxlZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfR2x5cGhTbG90UmVjKTogRG9jdW1lbnQgdGhlIGNoYW5nZS4KKworMjAxNy0wOS0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aCwgcmFzdGVyXSBNaXNjZWxsYW5lb3VzIGNsZWFudXBzLgorCisJKiBzcmMvcmFzdGVyL2Z0cmVuZDEuYyAoZnRfcmFzdGVyMV9yZW5kZXIpOiBDbGVhbiB1cCB0aGUgZXhpdC4KKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogUmVkdWNlCisJdHJhbnNsYXRpb25zIGFuZCBjbGVhbiB1cCB0aGUgZXhpdC4KKwkoZnRfc21vb3RoX3JlbmRlcl9sY2QsIGZ0X3Ntb290aF9yZW5kZXJfbGNkKTogUmVtb3ZlIHVudXNlZCBgZXJyb3InLgorCisyMDE3LTA5LTI4ICBCZW4gV2FnbmVyICA8YnVuZ2VtYW5AZ29vZ2xlLmNvbT4KKworCVt0cnVldHlwZV0gUmVhbGx5LCByZWFsbHkgZml4ICM1MjA4Mi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRFJQKTogQ29ycmVjdCBjb25kaXRpb25hbC4KKworMjAxNy0wOS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvcHNhdXgvcHNpbnRycC5jIChjZjJfZG9TdGVtcyk6IEZpeCBpbnRlZ2VyIG92ZXJmbG93LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzUxMAorCisyMDE3LTA5LTI4ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX3Nsb3RfbG9hZF9nbHlwaCk6IEZpeCBtZW1vcnkgbGVhay4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTM0ODkKKworMjAxNy0wOS0yOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJQml0bWFwIG1ldHJpY3MgcHJlc2V0dGluZyBbMS8yXS4KKworCVRoaXMgbWFpbmx5IGp1c3QgZXh0cmFjdHMgdGhlIGNvZGUgZm9yIHByZXNldHRpbmcgdGhlIGJpdG1hcCBtZXRyaWNzCisJZnJvbSB0aGUgbW9ub2Nocm9tZSwgZ3JheXNjYWxlLCBhbmQgTENEIHJlbmRlcmVycyBpbnRvIGEgc2VwYXJhdGUKKwlmdW5jdGlvbi4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwKTogTmV3IGZ1bmN0aW9uIHRoYXQKKwljYWxjdWxhdGVzIHByb3NwZWN0aXZlIGJpdG1hcCBtZXRyaWNzIGZvciB0aGUgZ2l2ZW4gcmVuZGVyaW5nIG1vZGUuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChmdF9nbHlwaHNsb3RfcHJlc2V0X2JpdG1hcCk6CisJRGVjbGFyZSBpdC4KKworCSogc3JjL2Jhc2UvZnRsY2RmaWwuYyAoZnRfbGNkX3BhZGRpbmcpOiBOZXcgaGVscGVyIGZ1bmN0aW9uIHRoYXQgYWRkcworCXBhZGRpbmcgdG8gQ0JveCB0YWtpbmcgaW50byBhY2NvdW50IHBlY3VsYXJpdGllcyBvZiBMQ0QgcmVuZGVyaW5nLgorCSogaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oIChmdF9sY2RfcGFkZGluZyk6IERlY2xhcmUgaXQuCisKKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IFJld29ya2VkIHRvIHVzZQorCWBmdF9nbHlwaHNsb3RfcHJlc2V0X2JpdG1hcCcuCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyk6IERpdHRvLgorCShmdF9zbW9vdGhfcmVuZGVyX2xjZCwgZnRfc21vb3RoX3JlbmRlcl9sY2QpOiBUaGUgcGl4ZWxfbW9kZSBzZXR0aW5nCisJaXMgbW92ZWQgdG8gYGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwJy4KKworMjAxNy0wOS0yOCAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBGaXggY29tcGlsZXIgd2FybmluZy4KKworCSogc3JjL3BzYXV4L3BzaGludHMuYyAoY2YyX2hpbnRtYXBfZHVtcCk6IEFkZCBzd2l0Y2ggZm9yIHRyYWNpbmcKKwljb2RlLgorCisyMDE3LTA5LTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfZm9udF9kaXIpOiBGaXggY29tcGlsZXIgd2FybmluZy4KKworMjAxNy0wOS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSBGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy9wc2F1eC9wc2Z0LmMgKGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIpOiBSZW1vdmUgcmVkdW5kYW50CisJdGVzdC4KKworCSogc3JjL3BzYXV4L3BzaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykKKwk8Y2YyX2VzY0NBTExPVEhFUlNVQlI+OiBBZGQgY2FzdHMuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAocHNfZGVjb2Rlcl9pbml0KTogQWRkIGNhc3QuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gTWlub3IgZml4ZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCwgc3JjL3BzYXV4L3Bzb2Jqcy57YyxofToKKwlSZWFycmFuZ2UgYHBzX2J1aWxkZXJfaW5pdCcgYXJndW1lbnRzIHRvIGNvbnZlbnRpb25hbCBvcmRlci4KKworCSogc3JjL3BzYXV4L3BzZnQuYyAoY2YyX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBBZGQgYSBjaGVjayBhbmQKKwlub3RpY2UgZm9yIGBTdWJGb250JyBpbiBUeXBlIDEgbW9kZS4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBNb3ZlIGBwc2RlY29kZScgaW50byBgcHNvYmpzJy4KKworCUFzIHRoZSBmb3JtZXIgb25seSBjb250YWlucyBhIHNpbmdsZSBwcm9jZWR1cmUsIG1vdmUgaXQgaW50bworCWBwc29ianMnIGZvciBzaW1wbGljaXR5LiAgQWxzbyBjaGFuZ2UgdGhlIHBhcmFtZXRlciBvcmRlciB0byB0aGUKKwljb252ZW50aW9uYWwgb25lLgorCisJKiBzcmMvcHNhdXgvcHNkZWNvZGUuYyAocHNfZGVjb2Rlcl9pbml0KTogTW92ZWQgdG8uLi4KKwkqIHNyYy9wc2F1eC9wc29ianMuYzogLi4uSGVyZS4KKwkqIHNyYy9wc2F1eC9wc2RlY29kZS5oLCBzcmMvcHNhdXgvcHNvYmpzLmg6IERpdHRvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFBTQXV4X1NlcnZpY2VSZWMpOiBVcGRhdGUKKwlgcHNfZGVjb2Rlcl9pbml0JyBmdW5jdGlvbiBzaWduYXR1cmUuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYywgc3JjL2NpZC9jaWRnbG9hZC5jLCBzcmMvdHlwZTEvdDFnbG9hZC5jOgorCVVwZGF0ZSBjYWxscy4KKworCSogc3JjL3BzYXV4L3BzYXV4LmMsIHNyYy9wc2F1eC9wc2F1eG1vZC5jOiBVcGRhdGUgaW5jbHVkZXMuCisKKwkqIHNyYy9wc2F1eC9KYW1maWxlIChfc291cmNlcyksIHNyYy9wc2F1eC9ydWxlcy5tayAoUFNBVVhfRFJWX1NSQyk6CisJVXBkYXRlIGZpbGUgcmVmZXJlbmNlcy4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBGaXggVHlwZSAxIGhpbnRpbmcuCisKKwlUeXBlIDEgaGludGluZyBicmVha3Mgc29tZXRpbWVzIHdoZW4gbWlkLWNoYXJzdHJpbmcgaGludHMgc2hvdWxkCisJaGF2ZSBiZWVuIGluIHRoZSBpbml0aWFsIGhpbnRtYXAuICBUaGlzIGZpeCBhZGRzIGEgcHJlcHJvY2Vzc2luZworCXBhc3MgdGhhdCByZWFkcyBhbGwgaGludHMgYW5kIGJ1aWxkcyB0aGUgY29ycmVjdCBpbml0aWFsIGhpbnRtYXAKKwlmaXJzdCwgYmVmb3JlIHByb2NlZWRpbmcgdG8gYnVpbGQgdGhlIGdseXBoIG91dGxpbmUuCisKKwkqIHNyYy9wc2F1eC9wc2ludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpOiBOZXcKKwlgaW5pdGlhbF9tYXBfcmVhZHknIGJvb2xlYW4gZmxhZy4KKwlJZ25vcmUgb3V0bGluZSBjb21tYW5kcyBhbmQgaGludCBjaGFuZ2VzIG9uIGZpcnN0IHBhc3MuCisJPGNmMl9jbWRFTkRDSEFSPjogQWRkIHNlY3Rpb24gdG8gYnVpbGQgaGludG1hcCBhbmQgcmV3aW5kLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEFkZCB0cmFjaW5nIGZvciBoaW50cy4KKworCSogc3JjL3BzYXV4L3BzaGludHMuYyAoY2YyX2hpbnRtYXBfZHVtcCk6IE5ldyBmdW5jdGlvbi4KKwkoY2YyX2hpbnRtYXBfaW5zZXJ0SGludCk6IFRyYWNlIGluY29taW5nIGFuZCBpbnNlcnRlZCBoaW50cy4KKwkoY2YyX2hpbnRtYXBfYnVpbGQpOiBEdW1wIGhpbnRtYXAgYmVmb3JlIGFuZCBhZnRlciBoaW50IGFkanVzdG1lbnQuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gTWlub3IgZml4ZXMuCisKKwkqIHNyYy9wc2F1eC9wc2ludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpOiBGaXggY2hlY2sgZm9yIHBvcAorCXJlc3VsdHMuCisJcy9mb250LT5kZWNvZGVyL2RlY29kZXIvIHdoZXJlIG5lY2Vzc2FyeS4KKwk8Y2YyX2NtZEhTVEVNLCBjZjJfY21kVlNURU0sIGNmMl9lc2NIU1RFTTMsIGNmMl9lc2NWU1RFTTM+OiBVc2UKKwlvZmZzZXQgcGFyYW1ldGVyIGluIGBjZjJfZG9TdGVtcycgaW5zdGVhZCBvZiBkb2luZyBjb3JyZWN0aW9uIGZvcgorCWxlZnQtc2lkZWJlYXJpbmcuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtjaWRdIFVzZSB0aGUgbmV3IGVuZ2luZS4KKworCSogc3JjL2NpZC9jaWRnbG9hZC5jOiBVcGRhdGUgaW5jbHVkZXMuCisJKGNpZF9sb2FkX2dseXBoLCBjaWRfc2xvdF9sb2FkX2dseXBoKTogSW1wbGVtZW50IGNoYW5nZXMgdG8gZ2x5cGgKKwlsb2FkaW5nIGNvZGUgYXMgd2l0aCBgdHlwZTEnIG1vZHVsZS4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW2NpZF0gQWRkIEFkb2JlIGVuZ2luZSBjb25maWd1cmF0aW9uLgorCisJVGhpcyBpcyBzaW1pbGFyIHRvIHdoYXQgd2FzIGRvbmUgaW4gdGhlIGB0eXBlMScgbW9kdWxlLgorCisJKiBzcmMvY2lkL2NpZHJpdmVyLmMgKHQxY2lkX2RyaXZlcl9jbGFzcyk6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KKwkqIHNyYy9jaWQvY2lkb2Jqcy5jOiBJbmNsdWRlIEZUX1RZUEUxX0RSSVZFUl9ILgorCShjaWRfZHJpdmVyX2luaXQpOiBVcGRhdGUgY29kZS4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBDaGFuZ2Ugc3ViZm9udCBzeW50aGVzaXMgZm9yIENJRCBmb250cy4KKworCUNoYW5nZSBgdDFfbWFrZV9zdWJmb250JyB0byB0YWtlIGluIHRoZSBQcml2YXRlIGRpY3QgcmVjb3JkIGFzIGFuCisJYXJndW1lbnQuICBUaGlzIGlzIGJlY2F1c2UgVHlwZSAxIGFuZCBDSUQgZm9udCByZWNvcmRzIGluIEZyZWVUeXBlCisJaGF2ZSB0aGlzIGluIGRpZmZlcmVudCBwbGFjZXMuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAodDFfbWFrZV9zdWJmb250KTogQ2hhbmdlIGBUMV9GYWNlJyB0bworCWBGVF9GYWNlJyBzbyB0aGF0IENJRCBpcyBhbHNvIGFjY2VwdGVkLgorCVRha2UgYFBTX1ByaXZhdGUnIGFzIGFuIGFyZ3VtZW50IGFuZCBsZXQgY2FsbGVyIGZpZ3VyZSBvdXQgd2hlcmUgdGhlCisJUHJpdmF0ZSBkaWN0IGFjdHVhbGx5IGlzLgorCVVwZGF0ZSByZWZlcmVuY2VzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgsIHNyYy9wc2F1eC9wc29ianMuaDogVXBkYXRlCisJZGVjbGFyYXRpb24uCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcpOiBVcGRhdGUKKwljYWxsLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbdHlwZTFdIFN3aXRjaCB0byBBZG9iZSBlbmdpbmUuCisKKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfRHJpdmVyX0luaXQpOiBTZXQgZGVmYXVsdCB0byBBZG9iZSBlbmdpbmUuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRXh0ZW5kIEFkb2JlIGludGVycHJldGVyIChzZWFjKS4KKworCVRoaXMgY29uY2x1ZGVzIHRoZSBjaGFuZ2VzIG5lZWRlZCB0byBhZGQgVHlwZSAxIHN1cHBvcnQuCisKKwkqIHNyYy9wc2F1eC9wc2ludHJwLmM6IFVwZGF0ZSBpbmNsdWRlcy4KKwkoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9lc2NTRUFDPjogSW1wbGVtZW50IHRoaXMgc2ltaWxhcmx5IHRvCisJaW1wbGllZCBzZWFjIGZvciBDRkYuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGVfcHMpOiBOZXcKKwlmdW5jdGlvbiB0byBsb29rIHVwIHRoZSBnbHlwaCBpbmRleC4KKworCSogc3JjL3BzYXV4L3BzZnQuYyAoY2YyX2dldFQxU2VhY0NvbXBvbmVudCwKKwljZjJfZnJlZVQxU2VhY0NvbXBvbmVudCk6IE5ldyBmdW5jdGlvbnMgdG8gZ2V0IHRoZSBjaGFyc3RyaW5ncyBmb3IKKwlzZWFjIGNvbXBvbmVudHMuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5oLCBzcmMvcHNhdXgvcHNmdC5oOiBVcGRhdGUgZGVjbGFyYXRpb25zLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEV4dGVuZCBBZG9iZSBpbnRlcnByZXRlciAoZmxleCBpbiBjYWxsb3RoZXJzdWJyKS4KKworCSogc3JjL3BzYXV4L3BzaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykKKwk8Y2YyX2VzY0NBTExPVEhFUlNVQlI+OiBGaXggRmxleCBmZWF0dXJlIGhhbmRsaW5nIChPdGhlclN1YnJzIDAsIDEsCisJMikuCisJPGNmMl9jbWRSTU9WRVRPPjogRG8gbm90IGFjdHVhbGx5IG1vdmUgdGhlIGBnbHlwaFBhdGgnIHdoaWxlIGRvaW5nCisJZmxleC4gIFRoaXMgaXMgdG8gYXZvaWQgY2xvc2luZyB0aGUgY3VycmVudCBjb250b3VyLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEV4dGVuZCBBZG9iZSBpbnRlcnByZXRlciAoY2FsbG90aGVyc3VicikuCisKKwkqIHNyYy9wc2F1eC9wc2ludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpCisJPGNmMl9lc2NDQUxMT1RIRVJTVUJSPjogQ29weSBjb2RlIGZyb20KKwlgdDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncycgKGluIGB0MWRlY29kZS5jJykuCisJT3RoZXJTdWJyIDMgKGNoYW5nZSBoaW50cykgc2hvdWxkIHJlc2V0IHRoZSBoaW50bWFzaywgc28gdGhhdCB0aGUKKwluZXcgaGludHMgYXJlIGFwcGxpZWQuCisJRml4IGZ1bmN0aW9uIGNhbGxzIGFuZCBzdGFjayBhY2Nlc3MuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRXh0ZW5kIEFkb2JlIGludGVycHJldGVyIChwb3ApLgorCisJKiBzcmMvcHNhdXgvcHNpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKTogQ2hhbmdlIGhvdyB1bmhhbmRsZWQKKwlPdGhlclN1YnIgcmVzdWx0cyBhcmUgc3RvcmVkLiAgSW1wbGVtZW50IHRoZSBQb3N0U2NyaXB0IHN0YWNrIHVzaW5nCisJYW4gYXJyYXkuCisJPGNmMl9lc2NQT1A+OiBFbnN1cmUgdGhhdCB0aGUgc3RhY2sgaXMgbm90IGNsZWFyZWQgYWZ0ZXIgZ2V0dGluZworCWBPdGhlclN1YnInIHJlc3VsdHMuCisJRml4IHN0YWNrIGFjY2Vzcy4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBFeHRlbmQgQWRvYmUgaW50ZXJwcmV0ZXIgKGNhbGxzdWJyKS4KKworCSogc3JjL3BzYXV4L3BzaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRDQUxMU1VCUj46CisJVHlwZSAxIG1vZGUuCisKKwkqIHNyYy9wc2F1eC9wc2Z0LmMgKGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIpOiBBZGQgVHlwZSAxIG1vZGUuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRXh0ZW5kIEFkb2JlIGludGVycHJldGVyIChkaXYsIGZvdXItYnl0ZSBudW1iZXJzKS4KKworCSogc3JjL3BzYXV4L3BzaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9lc2NESVY+OiBBZGQKKwlUeXBlIDEgbW9kZS4gIFR5cGUgMSByZXF1aXJlcyBsYXJnZSBpbnRlZ2VycyB0byBiZSBmb2xsb3dlZCBieQorCWBkaXYnOyBjZi4gYEFkb2JlIFR5cGUgMSBGb250IEZvcm1hdCcsIHNlY3Rpb24gNi4yLgorCTxvcCA9PSAyNTU+OiBQdXNoIFR5cGUgMSBmb3VyLWJ5dGUgbnVtYmVycyBhcyBgSW50JyBhbHdheXMuICBUaGlzIGlzCisJdG8gZW5zdXJlIGBkaXYnIGFuZCBgY2FsbHN1YnInIGdldCB2YWx1ZXMgdGhleSBjYW4gdXNlLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEV4dGVuZCBBZG9iZSBpbnRlcnByZXRlciAoaGludHMpLgorCisJKiBzcmMvcHNhdXgvcHNpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2NtZEhTVEVNLAorCWNmMl9jbWRWU1RFTT46IEFkZCBjb3JyZWN0aW9uIGZvciBsZWZ0IHNpZGViZWFyaW5nIGluIFR5cGUgMSBtb2RlLgorCUFsbG93IGFkZGluZyBoaW50cyBtaWQtY2hhcnN0cmluZy4KKwk8Y2YyX2VzY1ZTVEVNMywgY2YyX2VzY0hTVEVNMz46IFRyYW5zbGF0ZSBpbnRvIGVxdWl2YWxlbnQgY29tbWFuZHMKKwlmb3IgdGhyZWUgbm9ybWFsIHN0ZW0gaGludHMuICBUaGlzIHJlcXVpcmVzIHNvbWUgcmVjYWxjdWxhdGlvbiBvZgorCXN0ZW0gcG9zaXRpb25zLgorCUNvcnJlY3Rpb24gZm9yIGxlZnQgc2lkZWJlYXJpbmcuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRXh0ZW5kIEFkb2JlIGludGVycHJldGVyIChoc2J3LCBzYncpLgorCisJKiBzcmMvcHNhdXgvcHNpbnRycC5jIChjZjJfZG9TdGVtcyk6IGBoc2J3JyBvciBgc2J3JyBtdXN0IGJlIHRoZQorCWZpcnN0IG9wZXJhdGlvbiBpbiBhIFR5cGUgMSBjaGFyc3RyaW5nLgorCShjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuCisJPGNmMl9jbWRITU9WRVRPLCBjZjJfY21kVk1PVkVUTywgY2YyX2NtZFJNT1ZFVE8+OiBgaHNidycgb3IgYHNidycKKwltdXN0IGJlIHRoZSBmaXJzdCBvcGVyYXRpb24gaW4gYSBUeXBlIDEgY2hhcnN0cmluZy4KKwk8Y2YyX2NtZEhTQlcsIGNmMl9lc2NTQlc+OiBGaXggZGF0YSBhY2Nlc3MgYW5kIGFkZCBjb3JyZWN0aW9uIGZvcgorCWxlZnQgc2lkZWJlYXJpbmcuCisKKzIwMTctMDktMjUgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gRXh0ZW5kIEFkb2JlIGludGVycHJldGVyIChzZXRjdXJyZW50cG9pbnQpLgorCisJKiBzcmMvcHNhdXgvcHNpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKQorCTxjZjJfZXNjU0VUQ1VSUkVOVFBUPjogRml4IHN0YWNrIGFjY2Vzcy4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBFeHRlbmQgQWRvYmUgaW50ZXJwcmV0ZXIgKGNsb3NlcGF0aCkuCisKKwkqIHNyYy9wc2F1eC9wc2ludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpIDxjMmZfY21kQ0xPU0VQQVRIPjoKKwlVc2UgdGhlIHJpZ2h0IGJ1aWxkZXIgZnVuY3Rpb24uICBXZSBjYW4gdXNlIHRoZSBgaGF2ZVdpZHRoJyBib29sZWFuCisJYWxyZWFkeSBwcmVzZW50LCBpbnN0ZWFkIG9mIGltcGxlbWVudGluZyBgcGFyc2Vfc3RhdGUnLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEFkZCBUeXBlIDEgb3BlcmF0aW9ucyB0byBBZG9iZSBDRkYgaW50ZXJwcmV0ZXIuCisKKwlUaGUgZm9sbG93aW5nIFR5cGUgMSBzcGVjaWZpYyBvcHMgaGF2ZSBiZWVuIGFkZGVkIChjb3BpZWQgZnJvbQorCWB0MWRlY29kZScpOgorCisJICBjbG9zZXBhdGgKKwkgIHZzdGVtMworCSAgaHN0ZW0zCisJICBzZWFjCisJICBzYncKKwkgIGNhbGxvdGhlcnN1YnIKKwkgIHBvcAorCSAgc2V0Y3VycmVudHBvaW50CisJICBoc2J3CisKKwlUaGUgZm9sbG93aW5nIHJlcXVpcmUgYSBUeXBlIDEgbW9kZSwgYmVjYXVzZSBvZiBkaWZmZXJlbmNlcyBpbgorCXNwZWNpZmljYXRpb246CisKKwkgIGhzdGVtCisJICB2c3RlbQorCSAgdm1vdmV0bworCSAgY2FsbHN1YnIKKwkgIGRpdgorCSAgcm1vdmV0bworCSAgaG1vdmV0bworCSAgTnVtYmVycworCisJVGhlIHN1YnNlcXVlbnQgY29tbWl0cyB3aWxsIGltcGxlbWVudCB0aGVzZSBjaGFuZ2VzIGFuZCBhZGFwdAorCWFjY2Vzc2VzIG9mIGRhdGEgYW5kIG9iamVjdHMgdG8gdGhlIG5ldyBpbnRlcnByZXRlci4KKworCU5PVEU6IFdpbGwgbm90IGNvbXBpbGUgaW4gdGhlIG1lYW50aW1lIQorCisJKiBzcmMvcHNhdXgvcHNpbnRycC5jOiBBZGQgb3Bjb2RlcyB0byBlbnVtLgorCShjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKTogQ29weSByZWxldmFudCBjb2RlIG92ZXIgZnJvbQorCWB0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzJyAoaW4gYHQxZGVjb2RlLmMnKS4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3R5cGUxXSBGaXhlcyBmb3IgcmVuZGVyaW5nLgorCisJVGhlIFR5cGUgMSBhZHZhbmNlIHdpZHRoIGNhbGN1bGF0aW9uIHBhc3NlcyBudWxsIGZvciBnbHlwaCBzbG90LAorCWV0Yywgd2hpY2ggY2FuIGNhdXNlIG51bGwgcG9pbnRlciBhY2Nlc3MgaW4gdGhlIG5ldyBpbnRlcnByZXRlci4KKwlGYWxsIGJhY2sgdG8gdGhlIG9sZCBvbmUgZm9yIG5vdy4KKworCUZpeCB0aGUgbGFyZ2UgZ2x5cGggcmV0cnkgY29kZSBhbmQgZW5zdXJlIGhpbnRpbmcgYW5kIHNjYWxpbmcgZmxhZ3MKKwlhcmUgc2V0IHByb3Blcmx5LgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jIChUMV9QYXJzZV9HbHlwaF9BbmRfR2V0X0NoYXJfU3RyaW5nKTogQWRkIGEKKwljaGVjayBmb3IgbWV0cmljc19vbmx5LgorCVNldCB0aGUgYGZvcmNlX3NjYWxpbmcnIGZsYWcuCisJKFQxX1BhcnNlX0dseXBoKTogVXBkYXRlZC4KKwkoVDFfTG9hZF9HbHlwaCk6IEFkZCBgaGludGluZycgYW5kIGBzY2FsZWQnIGZsYWdzLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEFkZCBtaXNzaW5nIG9iamVjdHMgKDIvMikuCisKKwlTeW50aGVzaXplIGEgYFN1YkZvbnQnIG9iamVjdCBmb3IgVHlwZSAxIGZvbnRzLiAgVGhpcyBpcyB1c2VkIGluIHRoZQorCWludGVycHJldGVyIHRvIGFjY2VzcyBQcml2YXRlIGRpY3QgZGF0YSwgd2hpY2ggYXJlIHN0b3JlZCBpbgorCWRpZmZlcmVudCBwbGFjZXMgZm9yIFR5cGUgMSBhbmQgQ0ZGLiAgVGhpcyBhbGxvd3MgdGhlIHNhbWUgZGF0YSB0bworCWJlIHVzZWQgaW4gZWl0aGVyIG1vZGUuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAodDFfbWFrZV9zdWJmb250KTogTmV3IHByb2NlZHVyZSB0byBjb3B5CisJcmVxdWlyZWQgdmFsdWVzIHRvIGEgZHVtbXkgYENGRl9TdWJGb250JyBvYmplY3QuICBUaGlzIGlzIHNpbWlsYXIgdG8KKwlgY2ZmX21ha2VfcHJpdmF0ZV9kaWN0Jy4KKwkqIHNyYy9wc2F1eC9wc29ianMuaDogQWRkIHRoZSBuZXcgZGVjbGFyYXRpb24uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCwgc3JjL3BzYXV4L3BzYXV4bW9kLmM6IERpdHRvLgorCUFkZCB0aGlzIHRvIHRoZSBQU0F1eCBTZXJ2aWNlIGZvciBmdXR1cmUgdXNlIHdpdGggQ0lEIGZvbnRzLgorCisJKiBzcmMvdHlwZTEvdDFnbG9hZC5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ILgorCShUMV9QYXJzZV9HbHlwaF9BbmRfR2V0X0NoYXJfU3RyaW5nKTogQWRkIHRoZSBjYWxsLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIEFkZCBtaXNzaW5nIG9iamVjdHMgZm9yIFR5cGUgMSAoMS8yKS4KKworCU1vdmUgYENGMl9Gb250JyBpbnN0YW5jZSB0byBgUFNfRGVjb2RlcicuICBUaGlzIGlzIHRoZSBjb250ZXh0IGZvcgorCXRoZSBpbnRlcnByZXRlciBhbmQgc2luY2UgaXQgaXMgY3VycmVudGx5IHN0b3JlZCBpbiBgQ0ZGX0ZvbnQnLCBpcworCXVuYXZhaWxhYmxlIGluIFR5cGUgMSBtb2RlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0RlY29kZXIsIFBTX0RlY29kZXIpOiBOZXcKKwlgY2YyX2luc3RhbmNlJyBmaWVsZC4KKworCSogc3JjL3BzYXV4L3BzZGVjb2RlLmMgKHBzX2RlY29kZXJfaW5pdCk6IENvcHkgYGNmMl9pbnN0YW5jZScgdG8KKwlgUFNfRGVjb2RlcicuCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX2RvbmUpOiBBZGQgZmluYWxpemF0aW9uIGNvZGUuCisKKwkqIHNyYy9wc2F1eC9wc2Z0LmMgKGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogVXBkYXRlIGFjY2Vzc2VzLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlBbGxvdyBgdHlwZTEnIG1vZHVsZSB0byB1c2UgdGhlIEFkb2JlIGVuZ2luZS4KKworCUFkZCB0aGUgY2FsbGJhY2sgYW5kIHNvbWUgY29uZGl0aW9uYWxzIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28KKwllbmdpbmVzLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFQxX0RlY29kZXJfRnVuY3NSZWMpOiBDaGFuZ2UKKwlmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisJKiBzcmMvcHNhdXgvcHNhdXhtb2QuYyAoVDFfRGVjb2Rlcl9GdW5jc1JlYyk6IFJlZ2lzdGVyIHRoZQorCWNhbGxiYWNrcy4KKworCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChwc19idWlsZGVyX2FkZF9wb2ludCk6IEFkZCBjb25kaXRpb25hbHMgZm9yCisJbnVtYmVyIGNvbnZlcnNpb24uCisKKwkqIHNyYy90eXBlMS90MWdsb2FkLmMgKFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcpOiBBZGQgY29kZQorCXRvIGNob29zZSB3aGljaCByZW5kZXJlciB0byB1c2UuCisKKwkqIHNyYy9jaWQvY2lkZ2xvYWQuYyAoY2lkX2xvYWRfZ2x5cGgpOiBVcGRhdGUgY2FsbC4KKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jLCBzcmMvcHNhdXgvcHNvYmpzLmMsIHNyYy90eXBlMS90MWdsb2FkLmM6IFVwZGF0ZQorCWluY2x1ZGVzLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbdHlwZTFdIEFkZCBBZG9iZSBlbmdpbmUgY29uZmlndXJhdGlvbi4KKworCVVzZSB0aGUgcHJldmlvdXNseSBjaGFuZ2VkIFBTX0RyaXZlciBpbiB0eXBlMSBtb2R1bGUgdG8gc3RvcmUKKwloaW50aW5nIGVuZ2luZSBjb25maWd1cmF0aW9uLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0dDFkcnYuaDogTmV3IGZpbGUuCisJRHVwbGljYXRlIGFuZCByZW5hbWUgY29uZmlnIG9wdGlvbnMgZnJvbSBDRkYuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIChGVF9UWVBFMV9EUklWRVJfSCk6IE5ldyBtYWNyby4KKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmMgKHQxX2RyaXZlcl9jbGFzcyk6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KKwkqIHNyYy90eXBlMS90MW9ianMuYzogSW5jbHVkZSBGVF9UWVBFMV9EUklWRVJfSC4KKwkoVDFfRHJpdmVyX0luaXQpOiBVcGRhdGUgY29kZS4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW2NmZl0gTW92ZSBhbmQgcmVuYW1lIGBDRkZfRHJpdmVyJy4KKworCVRoaXMgaXMgc28gdGhhdCB3ZSBjYW4gdXNlIHRoZSBzYW1lIGhpbnRpbmcgZW5naW5lIHBhcmFtZXRlcnMgZm9yCisJVHlwZSAxLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZm90eXBlcy5oIChDRkZfRHJpdmVyKTogUmVuYW1lIGFuZAorCW1vdmUgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoUFNfRHJpdmVyKTogLi4uaGVyZS4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2ZmL2NmZmdsb2FkLmMsIHNyYy9jZmYvY2ZmbG9hZC5jLAorCXNyYy9jZmYvY2Zmb2Jqcy5jLCBzcmMvY2ZmL2NmZm9ianMuaCwgc3JjL3BzYXV4L3BzZnQuYywKKwlzcmMvcHNhdXgvcHNvYmpzLmM6IFVwZGF0ZSByZWZlcmVuY2VzLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXgsIHR5cGUxXSBSZW9yZ2FuaXplIG9iamVjdCBmaWVsZHMuCisKKwlNYWtlIHNvbWUgZmllbGRzIG1vcmUgZ2VuZXJpYywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZW0gdGhlIHNhbWUKKwl3YXkgcmVnYXJkbGVzcyBvZiBUeXBlIDEgb3IgQ0ZGLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggKFBTX0J1aWxkZXIpOiBDaGFuZ2UgYFRUX0ZhY2UnCisJdG8gYEZUX0ZhY2UnLgorCVJlbW92ZSB1bnVzZWQgZmllbGRzLgorCisJKiBzcmMvcHNhdXgvcHNmdC5jOiBVcGRhdGUgYWxsIGFjY2Vzc2VzIG9mIGBQU19CdWlsZGVyLmZhY2UnLgorCUFkZCBzb21lIGFzc2VydHMgdG8gZ3VhcmQgYWdhaW5zdCBjYXN0aW5nIGBUMV9GYWNlJyBhcyBgVFRfRmFjZScuCisKKwkqIHNyYy90eXBlMS90MW9ianMuaCAoVDFfR2x5cGhTbG90KTogUmVvcmRlciBmaWVsZHMgdG8gZm9sbG93CisJYENGRl9HbHlwaFNsb3QnLCBzbyB0aGF0IHdlIGNhbiBwcmV0ZW5kIHRoZXkgYXJlIHRoZSBzYW1lIGluIHRoZQorCWludGVycHJldGVyLgorCisJKiBzcmMvcHNhdXgvcHNvYmpzLmMgKHBzX2J1aWxkZXJfaW5pdCwgcHNfYnVpbGRlcl9hZGRfcG9pbnQpOgorCVVwZGF0ZWQgd2l0aCBhYm92ZSBjaGFuZ2VzLgorCisyMDE3LTA5LTI1ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIFByZXBhcmUgZm9yIFR5cGUgMSBtb2RlLgorCisJQWRkIHNvbWUgY2hlY2tzIGZvciBUeXBlIDEgZGF0YSBwYXNzaW5nIHRocm91Z2guCisKKwkqIHNyYy9wc2F1eC9wc2ZvbnQuaCAoQ0YyX0ZvbnQpOiBBZGQgYGlzVDEnIGZsYWcuCisJKiBzcmMvcHNhdXgvcHNmb250LmMgKGNmMl9mb250X3NldHVwKTogU2tpcCB0aGUgdmFyaWF0aW9ucyBhbmQgYmxlbmQKKwljb2RlIHdoaWNoIGlzIG5vdCBhcHBsaWNhYmxlIGZvciBUeXBlIDEuCisKKwkqIHNyYy9wc2F1eC9wc2Z0LmMgKGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKTogQXZvaWQgYWNjZXNzaW5nCisJYGRlY29kZXItPmNmZicgaW4gVHlwZSAxIG1vZGUuCisJQ29weSBgaXNfdDEnIGZsYWcgdG8gYENGMl9Gb250Jy4KKworMjAxNy0wOS0yNSAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4LCBjZmZdIFVzZSB0aGUgbmV3IG9iamVjdHMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCwgc3JjL3BzYXV4L3BzYXV4bW9kLmM6IEZpeAorCXN3aXRjaGluZyBiZXR3ZWVuIG5ldyBhbmQgb2xkIGVuZ2luZXMuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYywgc3JjL2NmZi9jZmZwYXJzZS5jOiBVcGRhdGUgY2FsbHMuCisKKwkqIHNyYy9wc2F1eC9wc2JsdWVzLmMsIHNyYy9wc2F1eC9wc2ZvbnQuYywgc3JjL3BzYXV4L3BzZm9udC5oLAorCXNyYy9wc2F1eC9wc2Z0LmMsIHNyYy9wc2F1eC9wc2Z0LmgsIHNyYy9wc2F1eC9wc2ludHJwLmM6IFVwZGF0ZSBhbGwKKwl0byB1c2UgbmV3IG9iamVjdHMuCisKKzIwMTctMDktMjQgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eF0gT2JqZWN0cyBmb3IgbmV3IGludGVycHJldGVyIChwYXJ0IDIpLgorCisJTWFrZSB0aGUgbmV3IG9iamVjdHMgY29weSBvdmVyIHZhbHVlcy4gIFRoZXkgYXJlIGVzc2VudGlhbGx5IHdyYXBwZXIKKwl0eXBlcyBmb3IgdGhlIGRpZmZlcmVudCBkZWNvZGVycy9idWlsZGVycy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oOiBVcGRhdGUgZGVjbGFyYXRpb25zLgorCShQU19CdWlsZGVyKTogQWRkIGBpc190MScgZmxhZy4KKwkoUFNfRGVjb2Rlcl97R2V0LEZyZWV9X0dseXBoX0NhbGxiYWNrKTogUmVuYW1lZCB0by4uLgorCShDRkZfRGVjb2Rlcl97R2V0LEZyZWV9X0dseXBoX0NhbGxiYWNrOiAuLi4gdGhpcy4KKwkoUFNfRGVjb2Rlcik6IFVwZGF0ZWQuCisJQWRkIGB0MV9wYXJzZV9jYWxsYmFjaycgbWVtYmVyLgorCShQU0F1eF9TZXJ2aWNlUmVjKTogQWRkIGBwc19kZWNvZGVyX2luaXQnIG1lbWJlci4KKworCSogc3JjL3BzYXV4L3BzZGVjb2RlLmgsIHNyYy9wc2F1eC9wc29ianMuaDogVXBkYXRlIGRlY2xhcmF0aW9ucy4KKworCSogc3JjL3BzYXV4L3BzZGVjb2RlLmMsIHNyYy9wc2F1eC9wc29ianMuYzogSW1wbGVtZW50IGNvcHkgd2l0aCB0d28KKwltb2Rlcy4KKworCSogc3JjL3BzYXV4L3BzYXV4bW9kLmM6IEFkZCBidWlsZGVyIGFuZCBkZWNvZGVyIGZ1bmN0aW9ucyB0byBgUFNBdXgnCisJc2VydmljZS4KKworMjAxNy0wOS0yNCAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBBZGQgb2JqZWN0cyBmb3IgbmV3IGludGVycHJldGVyLgorCisJSW50cm9kdWNlIGBQU19EZWNvZGVyJyBhbmQgYFBTX0J1aWxkZXInIHdoaWNoIGluY2x1ZGUgYWxsIGZpZWxkcworCWZyb20gZWl0aGVyIFR5cGUgMSBvciBDRkYgZGVjb2RlcnMvYnVpbGRlcnMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaCAoUFNfQnVpbGRlciwgUFNfRGVjb2Rlcik6IE5ldworCXN0cnVjdHMuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYywgc3JjL3BzYXV4L3Bzb2Jqcy5oOiBBZGQgYFBTX0J1aWxkZXInCisJZnVuY3Rpb25zLgorCisJKiBzcmMvcHNhdXgvcHNkZWNvZGUuYywgc3JjL3BzYXV4L3BzZGVjb2RlLmg6IE5ldyBmaWxlcyB0byBob2xkCisJYFBTX0RlY29kZXInIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucy4KKworCSogc3JjL3BzYXV4L3BzYXV4LmMsIHNyYy9wc2F1eC9KYW1maWxlIChfc291cmNlcyksCisJc3JjL3BzYXV4L3J1bGVzLm1rIChQU0FVWF9EUlZfU1JDKTogVXBkYXRlZC4KKworMjAxNy0wOS0yNCAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4XSBSZW5hbWUgZmlsZXMuCisKKwlSZXBsYWNlIHRoZSBgY2YyJyBmaWxlIG5hbWUgcHJlZml4IHdpdGggYHBzJyBhcyB0aGUgQWRvYmUgZW5naW5lCisJd2lsbCBiZSB1c2VkIGZvciBib3RoIFBvc3RTY3JpcHQgVHlwZXMgMSBhbmQgMiAoQ0ZGKSBpbnN0ZWFkIG9mIGp1c3QKKwlDRkYuCisKKwlzL2NmMi9wcy8gZm9yIGFsbCBmb2xsb3dpbmcuCisKKwkqIHNyYy9wc2F1eC9jZjIqOiBSZW5hbWUgZmlsZXMuCisJKiBzcmMvcHNhdXgvKjogVXBkYXRlIGluY2x1ZGVzLgorCisJKiBzcmMvcHNhdXgvSmFtZmlsZSAoX3NvdXJjZXMpLCBzcmMvcHNhdXgvcnVsZXMubWsgKFBTQVVYX0RSQ19TUkMsCisJUFNBVVhfRFJWX0gpOiBVcGRhdGUgZmlsZSByZWZlcmVuY2VzLgorCisyMDE3LTA5LTI0ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXhdIE1pbm9yIGZpeC4KKworCVVzZSBgTXVsdGlNYXN0ZXJzJyBzZXJ2aWNlIGluIGBwc2F1eCcgaW5zdGVhZCBvZiBhIGNhbGwgdG8gYGNmZicuCisJVGhlIHByb2plY3QgYnVpbGRzIGlmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgaXMgbm90IGRlZmluZWQuCisKKwkqIHNyYy9wc2F1eC9jZjJmdC5jOiBVcGRhdGUgaW5jbHVkZXMuCisJKGNmMl9nZXROb3JtYWxpemVkVmVjdG9yKTogVXNlIGBtbS0+Z2V0X3Zhcl9ibGVuZCcgaW5zdGVhZCBvZgorCWBjZmZfZ2V0X3Zhcl9ibGVuZCcuCisKKzIwMTctMDktMjQgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eCwgY2ZmXSBNb3ZlIGBjZmZfcmFuZG9tJyBpbnRvIGBwc2F1eCcgc2VydmljZS4KKworCU5PVEU6IERvZXMgbm90IGNvbXBpbGUhCisKKwlNaW5vciBmaXggdG8gYWxsb3cgYm90aCBgY2ZmJyBhbmQgYHBzYXV4JyB0byB1c2UgYGNmZl9yYW5kb20nLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX3JhbmRvbSk6IE1vdmUgdG8uLi4KKwkqIHNyYy9wc2F1eC9wc29ianMuYzogSGVyZS4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5oOiBNb3ZlIGNvcnJlc3BvbmRpbmcgZGVjbGFyYXRpb24gdG8KKwlgc3JjL3BzYXV4L3Bzb2Jqcy5oJy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oIChQU0F1eF9TZXJ2aWNlUmVjKTogUmVnaXN0ZXIgdGhlCisJZnVuY3Rpb24gaGVyZS4uLgorCSogc3JjL3BzYXV4L3BzYXV4bW9kLmM6IEFuZCBoZXJlLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYywgc3JjL3BzYXV4L2NmMmludHJwLmM6IFVwZGF0ZSBjb2RlLgorCisyMDE3LTA5LTI0ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbY2ZmXSBNb3ZlIHN0cnVjdCBkZWNsYXJhdGlvbnMgdG8gYGZyZWV0eXBlL2ludGVybmFsJy4KKworCU5PVEU6IERvZXMgbm90IGNvbXBpbGUhCisKKwlUaGlzIGlzIHNvIHRoYXQgdGhlIENGRiBmdW5jdGlvbnMgbW92ZWQgdG8gYHBzYXV4JyBjYW4gYWNjZXNzIHRoZQorCXNhbWUgc3RydWN0cyB0aGF0IHRoZXkgbmVlZC4KKworCSogc3JjL2NmZi9jZmZ0eXBlcy5oOiBNb3ZlZCB0by4uLgorCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oOiAuLi5IZXJlLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuaDogTW92ZWQgdGhlIHN0cnVjdCBkZWNsYXJhdGlvbnMgdG8uLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmg6IC4uLiB0aGlzIG5ldyBmaWxlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmggKEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ILAorCUZUX0lOVEVSTkFMX0NGRl9PQkpFQ1RfVFlQRVNfSCk6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy9jZmYvY2ZmY21hcC5oLCBzcmMvY2ZmL2NmZmRyaXZyLmMsIHNyYy9jZmYvY2ZmZ2xvYWQuYywKKwlzcmMvY2ZmL2NmZmdsb2FkLmgsIHNyYy9jZmYvY2ZmbG9hZC5oLCBzcmMvY2ZmL2NmZm9ianMuYywKKwlzcmMvY2ZmL2NmZm9ianMuaCwgc3JjL2NmZi9jZmZwYXJzZS5oLCBzcmMvcHNhdXgvcHNvYmpzLmgsCisJaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oLAorCWluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oOiBVcGRhdGUgaW5jbHVkZXMuCisKKwkqIHNyYy9jZmYvcnVsZXMubWsgKENGRl9EUlZfSCk6IFVwZGF0ZWQuCisKKzIwMTctMDktMjQgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eCwgY2ZmXSBBZGQgbmV3IHNlcnZpY2UgZm9yIGludGVyLW1vZHVsZSBjYWxscy4KKworCU5PVEU6IERvZXMgbm90IGNvbXBpbGUhCisKKwlUaGlzIGlzIHRvIGFsbG93IENGRiBmdW5jdGlvbnMgbW92ZWQgdG8gYHBzYXV4JyB0byBjYWxsIGZ1bmN0aW9ucworCWRlY2xhcmVkIGluIGBzcmMvY2ZmL2NmZmxvYWQuaCcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oOiBOZXcgZmlsZSwgc2V0dGluZyB1cAorCWEgYENGRkxvYWQnIHNlcnZpY2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzEwLAorCUZUX0RFRklORV9TRVJWSUNFREVTQ1JFQyk6IE5ldyBtYWNyb3MuCisJKEZUX1NFUlZJQ0VfQ0ZGX1RBQkxFX0xPQURfSCk6IE5ldyBtYWNyby4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jLCBzcmMvY2ZmL2NmZnBpYy5oOiBSZWdpc3RlciB0aGUgbmV3IHNlcnZpY2UuCisKKwkqIHNyYy9jZmYvY2ZmdHlwZXMuaCAoQ0ZGX0ZvbnRSZWMpLCBzcmMvcHNhdXgvY2YyZm9udC5oCisJKENGMl9Gb250UmVjKTogQWRkIHNlcnZpY2UgaW50ZXJmYWNlLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYywgc3JjL3BzYXV4L2NmMmZvbnQuYywgc3JjL3BzYXV4L2NmMmZ0LmMsCisJc3JjL3BzYXV4L2NmMmludHJwLmMsIHNyYy9wc2F1eC9jZmZkZWNvZGUuYzogVXNlIHRoZSBuZXcgc2VydmljZS4KKworMjAxNy0wOS0yNCAgRXdhbGQgSGV3ICA8ZXdhbGRoZXdAZ21haWwuY29tPgorCisJW3BzYXV4LCBjZmZdIEFkZCBjYWxsYmFja3MgZm9yIGludGVyLW1vZHVsZSBjYWxscy4KKworCU5PVEU6IERvZXMgbm90IGNvbXBpbGUhCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaDogQWRkIGZ1bmN0aW9uIHBvaW50ZXIKKwlkZWNsYXJhdGlvbnMuCisKKwkqIHNyYy9wc2F1eC9jZmZkZWNvZGUuYyAoY2ZmX2RlY29kZXJfaW5pdCk6IFVwZGF0ZSB0byB0YWtlIGluCisJY2FsbGJhY2tzLgorCSogc3JjL3BzYXV4L2NmZmRlY29kZS5oOiBEaXR0by4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5jIChjZmZfY29tcHV0ZV9tYXhfYWR2YW5jZSwgY2ZmX3Nsb3RfbG9hZCk6CisJVXBkYXRlIGNhbGxzIHRvIHBhc3MgaW4gY2FsbGJhY2tzLgorCSogc3JjL3BzYXV4L2NmMmZ0LmMsIHNyYy9wc2F1eC9jZmZkZWNvZGUuYzogVXNlIHRoZW0uCisKKzIwMTctMDktMjQgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eCwgY2ZmXSBDcmVhdGUgbmV3IGBQU0F1eCcgc2VydmljZSBpbnRlcmZhY2UgZW50cmllcy4KKworCU5PVEU6IERvZXMgbm90IGNvbXBpbGUhCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaDogSW5jbHVkZQorCUZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0guCisJKENGRl9CdWlsZGVyX0Z1bmNzUmVjLCBDRkZfRGVjb2Nlcl9GdW5jc1JlYyk6IE5ldyBmdW5jdGlvbiB0YWJsZXMuCisJKENGRl9CdWlsZGVyKTogVXBkYXRlZC4KKwlGaXggZm9yIGZvcndhcmQgZGVjbGFyYXRpb24uCisJKFBTQXV4X1NlcnZpY2VSZWMpOiBOZXcgZmllbGQgYGNmZl9kZWNvZGVyX2Z1bmNzJy4KKworCSogc3JjL3BzYXV4L3BzYXV4bW9kLmMgKGNmZl9idWlsZGVyX2Z1bmNzLCBjZmZfZGVjb2Rlcl9mdW5jcyk6IE5ldworCWZ1bmN0aW9uIHRhYmxlcy4KKwkoUFNBdXhfSW50ZXJmYWNlKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBBZGQgYHBzYXV4JworCXNlcnZpY2UgaW50ZXJmYWNlLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMsIHNyYy9jZmYvY2Zmb2Jqcy5jLCBzcmMvY2ZmL2NmZnBhcnNlLmM6IFVwZGF0ZQorCWZ1bmN0aW9uIGNhbGxzIHRvIHVzZSBwc2F1eCBzZXJ2aWNlLgorCisyMDE3LTA5LTI0ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXgsIGNmZl0gTW92ZSBDRkYgYnVpbGRlciBjb21wb25lbnRzIGludG8gYHBzYXV4JyBtb2R1bGUuCisKKwlOT1RFOiBEb2VzIG5vdCBjb21waWxlIQorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMKKwkoY2ZmX2J1aWxkZXJfe2luaXQsZG9uZSxhZGRfcG9pbnQsYWRkX3BvaW50MSxhZGRfY29udG91cixzdGFydF9wb2ludCxjbG9zZV9jb250b3VyfSwKKwljZmZfY2hlY2tfcG9pbnRzKTogTW92ZSB0by4uLgorCSogc3JjL3BzYXV4L3Bzb2Jqcy5jOiBIZXJlLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmg6IE1vdmUgY29ycmVzcG9uZGluZyBkZWNsYXJhdGlvbnMgdG8KKwlgc3JjL3BzYXV4L3Bzb2Jqcy5oJy4KKworCSogc3JjL2NmZi9jZmZnbG9hZC5oIChDRkZfQnVpbGRlcik6IE1vdmUgc3RydWN0IGRlY2xhcmF0aW9uIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg6IEhlcmUuCisKKzIwMTctMDktMjQgIEV3YWxkIEhldyAgPGV3YWxkaGV3QGdtYWlsLmNvbT4KKworCVtwc2F1eCwgY2ZmXSBNb3ZlIENGRiBkZWNvZGVyIGNvbXBvbmVudHMgaW50byBgcHNhdXgnIG1vZHVsZS4KKworCU5PVEU6IERvZXMgbm90IGNvbXBpbGUhCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuYyAoQ0ZGX09wZXJhdG9yLAorCUNGRl9DT1VOVF97Q0hFQ0tfV0lEVEgsRVhBQ1QsQ0xFQVJfU1RBQ0t9LCBjZmZfYXJndW1lbnRfY291bnRzLAorCWNmZl9vcGVyYXRvcl9zZWFjLCBjZmZfY29tcHV0ZV9iaWFzLAorCWNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUsCisJY2ZmX2RlY29kZXJfe3BhcnNlX2NoYXJzdHJpbmdzLGluaXQscHJlcGFyZX0pOiBNb3ZlIHRvLi4uCisJKiBzcmMvcHNhdXgvY2ZmZGVjb2RlLmM6IFRoaXMgbmV3IGZpbGUuCisKKwkqIHNyYy9jZmYvY2ZmZ2xvYWQuaDogTW92ZSBjb3JyZXNwb25kaW5nIGRlY2xhcmF0aW9ucyB0by4uLgorCSogc3JjL3BzYXV4L2NmZmRlY29kZS5oOiBUaGlzIG5ldyBmaWxlLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmggKENGRl9NQVhfe09QRVJBTkRTLFNVQlJTX0NBTExTLFRSQU5TX0VMRU1FTlRTfSwKKwlDRkZfRGVjb2Rlcl9ab25lLCBDRkZfRGVjb2Rlcik6IE1vdmUgZGVjbGFyYXRpb25zIHRvLi4uCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg6IEhlcmUuCisKKwkqIHNyYy9wc2F1eC9jZjJmdC5oOiBVcGRhdGUgaW5jbHVkZS4KKworCSogc3JjL3BzYXV4L3BzYXV4LmMsIHNyYy9wc2F1eC9ydWxlcy5tayAoUFNBVVhfRFJWX1NSQyk6IFVwZGF0ZSB3aXRoCisJdGhlIG5ldyBmaWxlLgorCisyMDE3LTA5LTI0ICBFd2FsZCBIZXcgIDxld2FsZGhld0BnbWFpbC5jb20+CisKKwlbcHNhdXgsIGNmZl0gTW92ZSBBZG9iZSdzIGVuZ2luZSBjb21wb25lbnRzIGludG8gYHBzYXV4JyBtb2R1bGUuCisKKwlUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCBvZiBhIHNlcXVlbmNlIHRvIG1vdmUgdGhlIFR5cGUgMiBjaGFyc3RyaW5nCisJcHJvY2Vzc2luZyBjYXBhYmlsaXR5IGZyb20gdGhlIGBjZmYnIG1vZHVsZSB0byB0aGUgYHBzYXV4JyBtb2R1bGUuCisKKwlOT1RFOiBEb2VzIG5vdCBjb21waWxlIQorCisJKiBzcmMvY2ZmL2NmMio6IE1vdmUgdGhlc2UgZmlsZXMgdG8uLi4KKwkqIHNyYy9wc2F1eC9jZjIqOiBIZXJlLgorCisJKiBzcmMvY2ZmL0phbWZpbGUgKF9zb3VyY2VzKSwgc3JjL2NmZi9ydWxlcy5tayAoQ0ZGX0RSVl9TUkMsCisJQ0ZGX0RSVl9IKSwgc3JjL2NmZi9jZmYuYywgc3JjL2NmZi9jZmZnbG9hZC5jOiBSZW1vdmUgZmlsZQorCXJlZmVyZW5jZXMuCisKKwkqIHNyYy9wc2F1eC9KYW1maWxlIChfc291cmNlcyksIHNyYy9wc2F1eC9ydWxlcy5taywgc3JjL3BzYXV4L3BzYXV4LmMKKwkoUFNBVVhfRFJWX1NSQywgUFNBVVhfRFJWX0gpOiBBZGQgZmlsZSByZWZlcmVuY2VzLgorCisyMDE3LTA5LTI0ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlUd2VhayBwZXItZmFjZSBMQ0QgZmlsdGVyaW5nIGNvbnRyb2xzLgorCisJVGhpbmcgYXJlIHNpbXBsZXIgd2l0aCBhIE5VTEwtZnVuY3Rpb24gcG9pbnRlci4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfRmFjZV9JbnRlcm5hbFJlYyk6IE5ldworCXBvaW50ZXIgdG8gdGhlIGZpbHRlciBmdW5jdGlvbi4KKwkoRlRfTGlicmFyeVJlYyk6IFJlbW92ZSB1bnVzZWQgYGxjZF9maWx0ZXInLgorCShGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYywgZnRfbGNkX2ZpbHRlcl9maXIpOiAgTW92ZSBmcm9tIGhlcmUuLi4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCAoRlRfQml0bWFwX0xjZEZpbHRlckZ1bmMsCisJZnRfbGNkX2ZpbHRlcl9maXIpOiAuLi4gdG8gaGVyZS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X29wZW5fZmFjZV9pbnRlcm5hbCk6IE5VTEwtaW5pdGlhbGl6ZSB0aGUKKwlwZXItZmFjZSBmaWx0ZXIuCisJKEZUX0ZhY2VfUHJvcGVydGllcyk6IFNldCBpdC4KKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogU2ltcGxpZnkuCisKKwkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKGZ0X2xjZF9maWx0ZXJfZmlyLCBGVF9MaWJhcnlfU2V0TGNkRmlsdGVyKToKKwlNaW5vci4KKworMjAxNy0wOS0yNCAgSm9uYXRoYW4gS2V3ICA8amZrdGhhbWVAZ21haWwuY29tPgorCisJW3NmbnRdIEZpeCBgcHJlbXVsdGlwbHlfZGF0YScgKCM1MjA5MikuCisKKwkqIHNyYy9zZm50L3BuZ3NoaW0uYyAocHJlbXVsdGlwbHlfZGF0YSk6IERvbid0IHVzZSB2ZWN0b3IgZXh0ZW5zaW9uCisJaWYgd2UgaGF2ZSBsZXNzIHRoYW4gMTYgYnl0ZXMgb2YgZGF0YS4KKworMjAxNy0wOS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW290dmFsaWRdIEZpeCBoYW5kbGluZyBvZiBWYWx1ZVJlY29yZHMuCisKKwlGb3IgR1BPUyBwYWlyIHBvc2l0aW9uaW5nIGZvcm1hdCAxIHRoZSBkZXNjcmlwdGlvbiBvZiBWYWx1ZVJlY29yZHMKKwlpbiB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbiAoMS44LjIsIGZyb20gdG9kYXkpIGlzIHdyb25nIOKAkyB0aGUKKwlvZmZzZXQgaGFzIHRvIGJlIHRha2VuIGZyb20gdGhlIHBhcmVudCBzdHJ1Y3R1cmU7IGluIHRoaXMgY2FzZSB0aGUKKwlgUGFpclNldCcgdGFibGUuCisKKwkqIHNyYy9vdHZhbGlkL290dmdwb3MuYyAob3R2X1BhaXJTZXRfdmFsaWRhdGUpOiBTZXQgYGV4dHJhMycuCisJKG90dl9QYWlyUG9zX3ZhbGlkYXRlKTogQWRqdXN0LgorCisyMDE3LTA5LTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbb3R2YWxpZF0gSGFuZGxlIGBHU1VCJyBhbmQgYEdQT1MnIHYxLjEgdGFibGVzLgorCisJKiBzcmMvb3R2YWxpZC9vdHZnc3ViLmMgKG90dl9HU1VCX3ZhbGlkYXRlKSwgc3JjL290dmFsaWQvb3R2Z3Bvcy5jCisJKG90dl9HUE9TX3ZhbGlkYXRlKTogSW1wbGVtZW50IGl0LgorCisyMDE3LTA5LTIzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbb3R2YWxpZF0gVXBkYXRlIGNvbW1vbiB0YWJsZSBoYW5kbGluZyB0byBPcGVuVHlwZSAxLjguMi4KKworCSogc3JjL290dmFsaWQvb3R2Y29tbW4uYyAob3R2X0RldmljZV92YWxpZGF0ZSk6IEhhbmRsZQorCVZhcmlhdGlvbkluZGV4IHN1YnRhYmxlLgorCShvdHZfTG9va3VwX3ZhbGlkYXRlKTogSGFuZGxlIE1hcmtGaWx0ZXJpbmdTZXQuCisKKzIwMTctMDktMjMgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtidWlsZF0gV2luZG93cy1zdHlsZSBETEwgdmVyc2lvbmluZy4KKworCSogYnVpbGQvd2luZG93cy9mdHZlci5yYzogTmV3IFZFUlNJT05JTkZPIHJlc291cmNlLgorCSogYnVpbGQvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvajogRnVydGhlciBpbXByb3ZlbWVudHMuCisKKzIwMTctMDktMjMgIEJlbiBXYWduZXIgIDxidW5nZW1hbkBnb29nbGUuY29tPgorCisJW3RydWV0eXBlXSBSZWFsbHkgZml4ICM1MjA4Mi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRFJQKTogQ29ycmVjdCBjb25kaXRpb25hbC4KKworMjAxNy0wOS0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW290dmFsaWRdIEhhbmRsZSBgR0RFRicgdjEuMiBhbmQgdjEuMyB0YWJsZXMuCisKKwlObyB2YWxpZGF0aW9uIG9mIHZhcmlhdGlvbiBzdHVmZiB5ZXQuCisKKwkqIHNyYy9vdHZhbGlkL290dmdkZWYuYyAob3R2X01hcmtHbHlwaFNldHNfdmFsaWRhdGUpOiBOZXcgZnVuY3Rpb24uCisJKG90dl9HREVGX3ZhbGlkYXRlKTogSW1wbGVtZW50IGl0LgorCisyMDE3LTA5LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbb3R2YWxpZF0gSGFuZGxlIGBCQVNFJyB2MS4xIHRhYmxlLgorCisJTm8gdmFsaWRhdGlvbiBvZiB2YXJpYXRpb24gc3R1ZmYgeWV0LgorCisJKiBzcmMvb3R2YWxpZC9vdHZiYXNlLmMgKG90dl9CQVNFX3ZhbGlkYXRlKTogSW1wbGVtZW50IGl0LgorCisyMDE3LTA5LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbb3R2YWxpZF0gTWFjcm9zIGZvciAzMmJpdCBvZmZzZXQgc3VwcG9ydC4KKworCSogc3JjL290dmFsaWQvb3R2Y29tbW4uaCAoT1RWX09QVElPTkFMX1RBQkxFMzIsCisJT1RWX09QVElPTkFMX09GRlNFVDMyLCBPVFZfU0laRV9DSEVDSzMyKTogTmV3IG1hY3Jvcy4KKworMjAxNy0wOS0yMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2J1aWxkXSBTaW1wbGlmeSBWaXN1YWwgQysrIDIwMTAgcHJvamVjdC4KKworCSogYnVpbGQvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvajogUmVtb3ZlIGZha2Ugc2luZ2xldGhyZWFkZWQKKwljb25maWd1cmF0aW9ucyBhbmQgdHdlYWsuCisKKzIwMTctMDktMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvdyAoIzUyMDgyKS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRFJQKTogQXZvaWQgRlRfQUJTLgorCisyMDE3LTA5LTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRml4IHBvc3RzY3JpcHQgbmFtZSBmb3IgZGVmYXVsdCBpbnN0YW5jZSBvZiB2YXJpYXRpb24gZm9udHMuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEJlaGRhZC4KKworCSogc3JjL3NmbnQvc2Zkcml2ZXIuYyAoc2ZudF9nZXRfcHNfbmFtZSk6IFRlc3QKKwlgaXNfZGVmYXVsdF9pbnN0YW5jZScuCisKKzIwMTctMDktMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IGBtbXZhcicgYXJyYXkgcG9pbnRlcnMsIHBhcnQgMi4KKworCVRoZSBwcmV2aW91cyBjb21taXQgd2FzIGluY29tcGxldGUuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmM6IFByb3Blcmx5IGluaXRpYWxpemUgc3ViLWFycmF5IG9mZnNldHMgZm9yCisJYG1hc3RlcicgYWxzby4KKworMjAxNy0wOS0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggYG1tdmFyJyBhcnJheSBwb2ludGVycy4KKworCVdpdGhvdXQgdGhpcyBjaGFuZ2UsIGNsYW5nJ3MgQWRkcmVzc1Nhbml0aXplciByZXBvcnRzIG1hbnkgcnVudGltZQorCWVycm9ycyBkdWUgdG8gbWlzYWxpZ25lZCBhZGRyZXNzZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBVc2UgbXVsdGlwbGVzIG9mIHBvaW50ZXIKKwlzaXplIGZvciBzdWItYXJyYXkgb2Zmc2V0cyBpbnRvIGBtbXZhcicuCisKKzIwMTctMDktMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlDaGFuZ2VzIHRyaWdnZXJlZCBieQorCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zNDI5CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU0hQSVgsIEluc19ERUxUQVApOiBVc2UgTkVHX0xPTkcuCisJKEluc19NSUFQKTogVXNlIFNVQl9MT05HLgorCisyMDE3LTA5LTE5ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYnVpbGRdIEZpeCBETEwgYnVpbGRzIGluIFZpc3VhbCBDKysgcHJvamVjdC4KKworCSogYnVpbGQvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvajogVXNlIER5bmFtaWNMaWJyYXJ5IGluIERlYnVnCisJYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbnMuCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIChGVF9FWFBPUlQsIEZUX0VYUE9SVF9ERUYpCisJW19ETExdOiBVc2UgVmlzdWFsIEMrKyBleHRlbnNpb25zLgorCisyMDE3LTA5LTE5ICBKb2huIFR5dGdhdCAgPEpvaG4uVHl0Z2F0QGVza28uY29tPgorCisJW2NmZl0gRml4IGZhbWlseSBuYW1lIGxvZ2ljIG9mIHB1cmUgQ0ZGIGZvbnRkYXRhICgjNTIwNTYpLgorCisJMS4gSWYgYEZhbWlseU5hbWUnIGlzIHByZXNlbnQgaW4gdGhlIENGRiBmb250LCB1c2UgdGhpcyBmb3IKKwkgICBGVF9GYWNlJ3MgYGZhbWlseV9uYW1lJy4KKwkyLiBPdGhlcndpc2UsIHVzZSB0aGUgZmFjZSBuYW1lIGFuZCBjaG9wIG9mZiBhbnkgc3Vic2V0IHByZWZpeC4KKwkzLiBJZiBhdCB0aGlzIHBvaW50IEZUX0ZhY2UncyBgZmFtaWx5X25hbWUnIGlzIHNldCwgdXNlIHRoaXMKKwkgICB0b2dldGhlciB3aXRoIHRoZSBmdWxsIG5hbWUgdG8gZGV0ZXJtaW5lIHRoZSBzdHlsZS4KKwk0LiBPdGhlcndpc2UsIHVzZSBgQ0lERm9udE5hbWUnIGFzIEZUX0ZhY2UncyBgZmFtaWx5X25hbWUnLgorCTUuIElmIHdlIGRvbid0IGhhdmUgYSB2YWxpZCBzdHlsZSwgdXNlICJSZWd1bGFyIi4KKworCVByZXZpb3VzbHksIEZUX0ZhY2UncyBgZmFtaWx5X25hbWUnIGVudHJ5IGZvciBwdXJlIENGRiBmb250ZGF0YQorCW5lYXJseSBhbHdheXMgd2FzIHRoZSBmb250bmFtZSBpdHNlbGYsIGluc3RlYWQgb2YgdGhlIGBGYW1pbHlOYW1lJworCWVudHJ5IGluIHRoZSBDRkYgZm9udCAoYXNzdW1pbmcgdGhlcmUgaXMgb25lKS4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpIFtwdXJlX2NmZl06IEltcGxlbWVudCBpdC4KKworMjAxNy0wOS0xOCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2J1aWxkXSBEZWNsdXR0ZXIgVmlzdWFsIEMrKyAyMDEwLTIwMTcgcHJvamVjdC4KKworCSogYnVpbGQvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvajogVXNlIE1heFNwZWVkICgvMDIpCisJb3B0aW1pemF0aW9uIGZvciBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gdGhyb3VnaG91dCB0aGUgcHJvamVjdC4KKworMjAxNy0wOS0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuOC4xIHJlbGVhc2VkLgorCT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItOC0xJy4KKworCSogZG9jcy9WRVJTSU9OLlRYVDogQWRkIGVudHJ5IGZvciB2ZXJzaW9uIDIuOC4xLgorCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisJKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksIGJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi44LzIuOC4xLywgcy8yOC8yODEvLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDEuCisKKwkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAyMTowOjE1LgorCSogQ01ha2VMaXN0cy50eHQgKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMS4KKworMjAxNy0wOS0xMyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtzZm50XSBsb3dlc3QgZ2NjIGZvciB2ZWN0b3JzIChlMWQwMjQ5ZSkgaXMgY2hhbmdlZCB0byA0LjcuCisKKwlfX2J1aWx0aW5fc2h1ZmZsZSgpIHdhcyBpbnRyb2R1Y2VkIGluIGdjYy00LjcuICBUaGUgbG93ZXN0CisJZ2NjIHRvIGVuYWJsZSB2ZWN0b3Igb3BlcmF0aW9uIGlzIGRlbGF5ZWQgZnJvbSA0LjYgdG8gNC43LgorCisJKiBzcmMvc2ZudC9wbmdzaGltLmMgKHByZW11bHRpcGx5X2RhdGEpOiBGaXggY3BwLW1hY3JvIHRvCisJZW5hYmxlIHRoZSB2ZWN0b3Igb3BlcmF0aW9uLCB0byBjaGFuZ2UgdGhlIGxvd2VzdCBnY2MgdmVyc2lvbgorCWZyb20gNC42IHRvIDQuNy4KKworMjAxNy0wOS0xMyAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtjYWNoZV0gRml4IGEgcG9zc2libGUgb3ZlcmZsb3cgYnkgc2lnbmVkIGludGVnZXIgY29tcGFyaXNvbi4KKworCUltcHJvdmUgdGhlIGNvZGUgYnkgNWQzZmYwNTYxNWRkYTZkMTMyNWVkNjEyMzgxYTE3YTBkZjA0Yzk3NSAsCisJaXNzdWVzIGFyZSBmb3VuZCBieSBCZWhkYWQgRXNmYWhib2QgYW5kIFdlcm5lciBMZW1iZXJnLgorCisJKiBzcmMvY2FjaGUvZnRjYmFzaWMuYyAoRlRDX0ltYWdlQ2FjaGVfTG9va3VwKTogUmVwbGFjZQorCWEgc3VidHJhY3Rpb24gdG8gY2hlY2sgaGlnaGVyIGJpdCBieSBhIGJpdCBvcGVyYXRpb24sCisJYW5kIGNwcC1jb25kaXRpb25hbGl6ZSBmb3IgYXBwcm9wcmlhdGUgc3lzdGVtcy4gIEFkZCBiZXR0ZXIKKwlkb2N1bWVudGF0aW9uIHRvIHRoZSBjb21tZW50LgorCShGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXIpOiBEaXR0by4KKwkoRlRDX1NCaXRDYWNoZV9Mb29rdXApOiBEaXR0by4KKwkoRlRDX1NCaXRDYWNoZV9Mb29rdXBTY2FsZXIpOiBEaXR0by4KKworMjAxNy0wOS0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFJlYWxseSBmaXggIzQxMzM0ICgjNTIwMDApLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMpOiBTZXQKKwlgc2VnbWVudC0+ZGVsdGEnIGV2ZXJ5d2hlcmUuCisKKzIwMTctMDktMTIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbYXV0b2ZpdCwgc2ZudF0gRml4IGZvciBgbWFrZSBtdWx0aScuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2hhcGVyLmM6IEluY2x1ZGUgRlRfQURWQU5DRV9ILCB0byB1c2UKKwlGVF9HZXRfQWR2YW5jZSgpIGluIGl0LgorCSogc3JjL3NmbnQvdHRjbWFwLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKwl0byB1c2UgUFNfVW5pY29kZXMgaW4gaXQsIGFsc28gaW5jbHVkZSBgdHRwb3N0LmgnIHRvIHVzZQorCXR0X2ZhY2VfZ2V0X3BzX25hbWUoKSBpbiBpdC4KKworMjAxNy0wOS0xMSAgQXp6dXJvICA8YXp6dXJvQHRlYW0tbWVkaWFwb3J0YWwuY29tPgorCisJW2J1aWxkXSBJbXByb3ZlIGJ1aWxkcyB3aXRoIGRpZmZlcmVudCBNUyBWaXN1YWwgU3R1ZGlvIHZlcnNpb25zLgorCisJKiBidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvajogU3dpdGNoIHBsYXRmb3JtIHRvb2xzZXQKKwlhY2NvcmRpbmcgdG8gdGhlIFZpc3VhbCBTdHVkaW8gdmVyc2lvbi4KKworMjAxNy0wOS0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGtlcm4uYyAodHRfZmFjZV9sb2FkX2tlcm4pOiBSZWplY3QgZm9ybWF0IDIgdGFibGVzLgorCisJUmVwb3J0ZWQgYnkgQmVoZGFkLgorCisyMDE3LTA5LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYXV0b2ZpdF0gSW1wcm92ZSBjb21tdW5pY2F0aW9uIHdpdGggZnRncmlkLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2dldF9zZWdtZW50X29mZnNldCk6CisJUHJvdmlkZSB2YWx1ZXMgaW4gZm9udCB1bml0cy4KKworMjAxNy0wOS0wOCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KKworCVtiYXNlXSBSZW1vdmUgYSBjaGVjayBmb3IgcmVzb3VyY2UgSUQgaW4gdGhlIHJlc291cmNlIGZvcmsgZHJpdmVyLgorCisJTGFzdFJlc29ydC5kZm9udCBoYXMgYSBtYXJnaW5hbCByZXNvdXJjZSBJRCAweEZGRkYgZm9yIHNmbnQKKwlyZXNvdXJjZS4gIEluc2lkZSBNYWNpbnRvc2g6IE1vcmUgTWFjaW50b3NoIFRvb2xib3gsIGBSZXNvdXJjZSBJRHMnCisJKDEtNDYpLCB0ZWxscyB0aGF0IHNvbWUgSURzIGFyZSByZXNlcnZlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLgorCUZyZWVUeXBlMiBqdXN0IHVzZXMgcmVzb3VyY2UgSUQgdG8gc29ydCB0aGUgZnJhZ21lbnRlZCByZXNvdXJjZS4KKwlUbyBhY2NlcHQgdGhlIG1hcmdpbmFsIGZvbnRzLCB0aGUgY2hlY2tpbmcgaXMgcmVtb3ZlZC4KKworCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cyk6IFJlbW92ZSByZXNfaWQKKwl2YWxpZGl0eSBjaGVjaywgZml4IGEgdHJhY2UgbWVzc2FnZSBmb3JtYXQuCisKKzIwMTctMDktMDggIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CisKKwlbc2ZudCwgdHJ1ZXR5cGVdIFJlZ2lzdGVyIHRoZSB0YWdzIGZvciBtYXJnaW5hbCBmb250cy4KKworCVRoZSBmaXJzdCAzMmJpdCBvZiBzdGFuZGFyZCBUcnVlVHlwZSB2YXJpYW50cyBpcyAweDAwMDEwMDAwLAorCWBPVFRPJywgYHR0Y2YnLCBgdHJ1ZScgb3IgYHR5cDEnLiAgMiBtYXJnaW5hbCBkZm9udHMgb24gbGVnYWN5IE1hYworCU9TIFgsIEtleWJvYXJkLmRmb250IGFuZCBMYXN0UmVzb3J0LmRmb250LCBoYXZlIHRoZSBzZm50IHJlc291cmNlcworCXN0YXJ0aW5nIDB4QTUgZm9sbG93ZWQgYnkgYGtiZCcgb3IgYGxzdCcuICBDb25zaWRlcmluZyB0aGUgZm9sbG93aW5nCisJZGF0YSBjb3VsZCBiZSBwYXJzZWQgYXMgY29udmVudGlvbmFsIFRydWVUeXBlIGZvbnRzLCB0aGUgaGVhZGVyCisJY2hlY2tpbmcgaXMgdXBkYXRlZCB0byBhbGxvdyB0aGVzZSB0YWdzLiAgSXQgc2VlbXMgdGhhdCByZWNlbnQgTWFjCisJT1MgWCBoYXMgYWxyZWFkeSBzd2l0Y2hlZCB0byBub3JtYWwgVFRGIGZvciB0aGVzZSBmb250cy4KKworCVNlZSB0aGUgZGlzY3Vzc2lvbiBhdAorCWh0dHA6Ly91ODgubjI0LnF1ZWVuc3UuY2EvZXhpZnRvb2wvZm9ydW0vaW5kZXgucGhwP3RvcGljPTM5MzEuMAorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oIChUVEFHXzB4QTVrYmQsIFRUQUdfMHhBNWxzdCk6IE5ldyBoZWFkZXIKKwl0YWdzIGZvciBLZXlib2FyZC5kZm9udCBhbmQgTGFzdFJlc29ydC5kZm9udC4KKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X29wZW5fZm9udCk6IEFjY2VwdCB0aGUgc2ZudCByZXNvdXJjZQorCXN0YXJ0cyB3aXRoIFRUQUdfMHhBNWtiZCBvciBUVEFHXzB4QTVsc3QuCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2ZhY2VfaW5pdCk6IEFjY2VwdCB0aGUgZmFjZSB3aXRoIHRoZQorCWZvcm1hdCB0YWcgaXMgVFRBR18weEE1a2JkIG9yIFRUQUdfMHhBNWxzdC4KKworMjAxNy0wOS0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRml4IG11bHRpcGxlIGNhbGxzIG9mIGBGVF9CaXRtYXBfQ29udmVydCcuCisKKwlUaGUgZG9jdW1lbnRhdGlvbiBvZiBgRlRfQml0bWFwX0NvbnZlcnQnIHNheXMgdGhhdCBtdWx0aXBsZSBjYWxscyBkbworCXByb3BlciByZWFsbG9jYXRpb24gb2YgdGhlIHRhcmdldCBGVF9CaXRtYXAgb2JqZWN0LiAgSG93ZXZlciwgdGhpcworCWZhaWxlZCBmb3IgdGhlIHNlcXVlbmNlCisKKwkgIG5vbi1lbXB0eSBiaXRtYXAKKwkgIGVtcHR5IGJpdG1hcAorCSAgbm9uLWVtcHR5IGJpdG1hcAorCisJUmVhc29uIHdhcyB0aGF0IGBGVF9CaXRtYXBfQ29udmVydCcgb25seSByZWFsbG9jYXRlZCB0aGUgYml0bWFwCisJYnVmZmVyIGlmIGl0IGJlY2FtZSB0b28gc21hbGw7IGl0IGRpZG4ndCBtYWtlIHRoZSBidWZmZXIgc21hbGxlci4KKwlGb3IgYW4gZW1wdHkgYml0bWFwIGZvbGxvd2luZyBhIG5vbi1lbXB0eSBvbmUsIG9ubHkgdGhlIGJ1ZmZlcgorCWRpbWVuc2lvbiBnb3Qgc2V0IHRvIHplcm8sIHdpdGhvdXQgZGVhbGxvY2F0aW9uLiAgSWYgdGhlIG5leHQgY2FsbAorCXdhcyBhIG5vbi1lbXB0eSBidWZmZXIgYWdhaW4sIGFuIGFzc2VydGlvbiBpbiBgZnRfbWVtX3FyZWFsbG9jJyB3YXMKKwl0cmlnZ2VyZWQuCisKKwkqIHNyYy9iYXNlL2Z0Yml0bWFwLmMgKEZUX0JpdG1hcF9Db252ZXJ0KTogQWx3YXlzIHJlYWxsb2NhdGUgdGFyZ2V0CisJYnVmZmVyIHRvIHRoZSBjb3JyZWN0IHNpemUuCisKKwkqIGRvY3MvQ0hBTkdFUzogRG9jdW1lbnQgaXQuCisKKzIwMTctMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiZGZdIEZpeCBzaXplIGFuZCByZXNvbHV0aW9uIGhhbmRsaW5nLgorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBVc2UgYFNJWkUnIHZhbHVlcyBpZgorCWBQT0lOVF9TSVpFJywgYFJFU09MVVRJT05fWCcsIG9yIGBSRVNPTFVUSU9OX1knIHByb3BlcnRpZXMgYXJlCisJbWlzc2luZy4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAxNy0wOC0yNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJU3dhcCBgQUxMT0NfTVVMVCcgYXJndW1lbnRzICgjNTE4MzMpLgorCisJKiBzcmMvYmFzZS9mdGJpdG1hcC5jIChmdF9iaXRtYXBfYXNzdXJlX2J1ZmZlcik6IFVwZGF0ZWQuCisJKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9Mb2FkX0dseXBoKTogVXBkYXRlZC4KKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX3JlbmRlcik6IFVwZGF0ZWQuCisKKzIwMTctMDgtMjMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggY2xhbmcgY29tcGlsYXRpb24gKCM1MTc4OCkuCisKKwkqIHNyYy9zZm50L3BuZ3NoaW0uYyAocHJlbXVsdGlwbHlfZGF0YSk6IFVzZSB2ZWN0b3JzIGluc3RlYWQgb2YKKwlzY2FsYXJzLgorCSh2ZWN0b3Jfc2h1ZmZsZSk6IE5ldyBtYWNybyB0byB0YWtlIGNhcmUgb2YgYSBkaWZmZXJlbnQgYnVpbHQtaW4KKwlmdW5jdGlvbiBuYW1lIG9uIGNsYW5nLgorCisyMDE3LTA4LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gRG9uJ3QgemVybyBvdXQgYWxsb2NhdGVkIG1lbW9yeSB0d2ljZSAoIzUxODE2KS4KKworCVBhdGNoIGFwcGxpZWQgZnJvbSBidWcgcmVwb3J0LgorCisJKiBzcmMvYmFzZS9mdHV0aWwuYyAoZnRfbWVtX3FyZWFsbG9jKTogVXNlIGxvdy1sZXZlbCBhbGxvY2F0aW9uIHRvCisJYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuCisKKzIwMTctMDgtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvdy4KKworCUNoYW5nZXMgdHJpZ2dlcmVkIGJ5CisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTMxMDcKKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRFJQLCBJbnNfTUlSUCwgSW5zX0FMSUdOUFRTKTogVXNlCisJTkVHX0xPTkcuCisKKzIwMTctMDgtMTcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzZm50XSBBdm9pZCBzeW50aGV0aWMgdW5pY29kZSBmb3Igc3ltYm9sIGZvbnRzIHdpdGggUFVBLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzU0NTc0CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IENoZWNrIGZvciBGVF9FTkNPRElOR19NU19TWU1CT0wuCisKKzIwMTctMDgtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChwcmVtdWx0aXBseV9kYXRhKTogRml4IGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDE3LTA4LTE1ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVtzZm50XSBTcGVlZCB1cCBQTkcgaW1hZ2UgbG9hZGluZy4KKworCVRoaXMgcmVkdWNlcyB0aGUgb3ZlcmhlYWQgb2YgYHByZW11bHRpcGx5X2RhdGEnIGJ5IDYwJS4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChwcmVtdWx0aXBseV9kYXRhKTogUHJvdmlkZSBjb2RlIHdoaWNoIHVzZXMKKwlnY2MncyAoYW5kIGNsYW5nJ3MpIGB2ZWN0b3JfYnl0ZScgYXR0cmlidXRlIHRvIHByb2Nlc3MgNCBwaXhlbHMgYXQgYQorCXRpbWUuCisKKzIwMTctMDgtMTEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50LCB0cnVldHlwZV0gSW1wcm92ZSBoYW5kbGluZyBvZiBtaXNzaW5nIHNiaXRzLgorCisJUmVxdWVzdGVkIGJ5IEJlaGRhZC4KKworCU1vZGVybiBiaXRtYXAtb25seSBTRk5UcyBsaWtlIGBOb3RvQ29sb3JFbW9qaS50dGYnIGRvbid0IGNvbnRhaW4KKwllbnRyaWVzIGluIHRoZSBiaXRtYXAgc3RyaWtlKHMpIGZvciBlbXB0eSBnbHlwaHMuICBJbnN0ZWFkLCB0aGV5CisJcmVseSB0aGF0IGEgc3BhY2UgZ2x5cGggZ2V0cyBjcmVhdGVkIGZyb20gdGhlIGZvbnQncyBtZXRyaWNzIGRhdGEuCisJVGhpcyBjb21taXQgbWFrZXMgRnJlZVR5cGUgYmVoYXZlIGFjY29yZGluZ2x5LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmggKEZUX0Vycl9NaXNzaW5nX0JpdG1hcCk6IE5ldyBlcnJvcgorCWNvZGUuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZSk6IENoYW5nZSBlcnJvciBjb2RlcworCXRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGEgbWlzc2luZyBiaXRtYXAgaW4gYSBjb21wb3NpdGUgYW5kIGEKKwlzaW1wbGUgbWlzc2luZyBiaXRtYXAuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGgpOiBGb3IgYSBtaXNzaW5nIGJpdG1hcCAoaW4gYQorCWJpdG1hcC1vbmx5IGZvbnQpLCBzeW50aGVzaXplIGFuIGVtcHR5IGJpdG1hcCBnbHlwaCBpZiBtZXRyaWNzIGFyZQorCWF2YWlsYWJsZS4KKworMjAxNy0wOC0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2VdIE1pbm9yIEFQSSBpbXByb3ZlbWVudCBmb3IgZGVmYXVsdCB2YXJpYXRpb24gYXhpcyBzZXR0aW5nLgorCisJKiBzcmMvYmFzZS9mdG1tLmMgKEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMsCisJRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMsIEZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcywKKwlGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKTogQWxsb3cgY29vcmRzPT1OVUxMIGlmIG51bV9jb29yZHM9PTAuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNy0wOC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzbmFtZXNdIFJlYWxseSBmaXggaXNzdWUgIzQ5OTQ5LgorCisJV2Ugbm93IHVzZSBhIHNlcGFyYXRlIHByZXByb2Nlc3NvciBtYWNybyB0byBoYW5kbGUgYm90aCBkZWZpbml0aW9uCisJYW5kIGRlY2xhcmF0aW9uIG9mIHRoZSBnbHlwaCBuYW1lIGFycmF5cy4KKworCSogc3JjL3BzbmFtZXMvcHNtb2R1bGUuYyAoREVGSU5FX1BTX1RBQkxFX0RBVEEpOiBOZXcgbWFjcm8uCisKKwkqIHNyYy90b29scy9nbG5hbWVzLnB5IChTdHJpbmdUYWJsZTo6ZHVtcCwKKwlTdHJpbmdUYWJsZTo6ZHVtcF9zdWJsaXN0KTogVXNlIGBERUZJTkVfUFNfVEFCTEVfREFUQScuCisJKGR1bXBfZW5jb2RpbmcpOiBEaXR0by4KKwkobWFpbik6IFVzZSBgd2InIG1vZGUgZm9yIHdyaXRpbmcgdGhlIG91dHB1dCBmaWxlLCB3aGljaCB3b3JrcyBvbgorCVdpbmRvd3MgYWxzby4KKworCSogc3JjL3BzbmFtZXMvcHN0YWJsZXMuaDogUmVnZW5lcmF0ZWQuCisKKzIwMTctMDgtMDggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIEhhcm1vbnkgTENEIHJlbmRlcmluZy4KKworCVRoaXMgaXMgYSBuZXcgdGVjaG5vbG9neSBmb3IgTENELW9wdGltaXplZCByZW5kZXJpbmcuIEl0IGNhcGl0YWxpemVzCisJb24gdGhlIGZhY3QgdGhhdCBlYWNoIGNvbG9yIGNoYW5uZWwgZ3JpZCBpcyBzaGlmdGVkIGJ5IGEgdGhpcmQgb2YgYQorCXBpeGVsLiAgVGhlcmVmb3JlIGl0IGlzIGxvZ2ljYWwgdG8gcmVuZGVyIDMgc2VwYXJhdGUgbW9ub2Nocm9tZQorCWJpdG1hcHMgc2hpZnRpbmcgdGhlIG91dGxpbmUgYnkgMS8zIHBpeGVsLCBhbmQgdGhlbiBjb21iaW5lIHRoZW0uCisJSW1wb3J0YW50bHksIHRoZSByZXN1bHRpbmcgb3V0cHV0IGRvZXMgbm90IHJlcXVpcmUgYWRkaXRpb25hbCBMQ0QKKwlmaWx0ZXJpbmcuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKQorCVshRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkddOiBJbXBsZW1lbnQgbmV3IExDRC1vcHRpbWl6ZWQKKwlyZW5kZXJpbmcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCwgaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oLAorCWluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgsIGRldmVsL2Z0b3B0aW9uLmg6IFVwZGF0ZWQKKwlkb2N1bWVudGF0aW9uLgorCisyMDE3LTA4LTA4ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogQ2xlYW4gdXAuCisKKzIwMTctMDgtMDggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3NmbnQvdHRwb3N0LmMgKGZvcm1hdCk6IFVzZSBvdHNwZWMtY29tcGxpYW50IHZlcnNpb25zLgorCisyMDE3LTA4LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yODY4CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfQUxJR05SUCk6IFVzZSBORUdfTE9ORy4KKworMjAxNy0wOC0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2UsIHRydWV0eXBlXSBOZXcgZnVuY3Rpb24gYEZUX0dldF9WYXJfQXhpc19GbGFncycuCisKKwlUaGUgcmVzZXJ2ZWQgYGZsYWdzJyBmaWVsZCBnb3QgYSB2YWx1ZSBpbiBPcGVuVHlwZSB2ZXJzaW9uIDEuOC4yOworCXVuZm9ydHVuYXRlbHksIHRoZSBwdWJsaWMgYEZUX1Zhcl9BeGlzJyBzdHJ1Y3R1cmUgbWlzc2VzIHRoZQorCWNvcnJlc3BvbmRpbmcgZWxlbWVudC4gIFNpbmNlIHdlIGNhbid0IGFkZCBhIG5ldyBmaWVsZCwgd2UgYWRkIGFuCisJYWNjZXNzIGZ1bmN0aW9uLgorCisJKiBzcmMvYmFzZS9mdG1tLmMgKEZUX0dldF9WYXJfQXhpc19GbGFncyk6IE5ldyBmdW5jdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdG1tLmggKEZUX1ZBUl9BWElTX0ZMQUdfSElEREVOKTogTmV3IG1hY3JvLgorCVVwZGF0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBJbmNyZWFzZSBhbGxvY2F0ZWQgbWVtb3J5CisJb2YgYG1tdmFyJyB0byBob2xkIGF4aXMgZmxhZ3MuCisJRmlsbCB0aGUgYXhpcyBmbGFncyBhcnJheS4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDE3LTA4LTAzICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+CisKKwlbdHJ1ZXR5cGVdIEZpeCBtZXRyaWNzIG9mIEIvVyBoaW50aW5nIGluIHY0MCBtb2RlLgorCisJUGhhbnRvbSBwb2ludHMgYXJlIG5vdyBzYXZlZCBvdXRzaWRlIHY0MCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorCW1vZGUuICBUaGlzIGZpeGVzIHRoZSBqdW1waW5nIGdseXBocyB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIHYzNSBhbmQKKwl2NDAgbW9ub2Nocm9tZSBtb2RlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9IaW50X0dseXBoKTogRml4IGludmVyc2VkIGJvb2wgbG9naWMuCisKKzIwMTctMDgtMDMgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gRG8gbm90IHNldCBhbnkgQ2xlYXJUeXBlIGZsYWdzIGluIHY0MCBtb25vY2hyb21lIG1vZGUuCisKKwlUaGlzIGZpeGVzIHdlaXJkIGJlaGF2aW9yIG9mIGluc3RydWN0aW9ucyB0aGF0IHJlc3VsdGVkIGluIHJlbmRlcmluZworCWRpZmZlcmVuY2VzIGJldHdlZW4gdjM1IGFuZCB2NDAgaW4gbW9ub2Nocm9tZSBtb2RlLCBlLmcuLCBpbgorCWB0aW1lc2JpLnR0ZicuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfR0VUSU5GTykKKwlbVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUxdOiBDaGVjaworCWBzdWJwaXhlbF9oaW50aW5nX2xlYW4nLgorCisyMDE3LTA4LTAxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBGaXggdGhpbmtvLgorCisyMDE3LTA4LTAxICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVt0cnVldHlwZV0gRml4IGxvYWRpbmcgb2YgbmFtZWQgaW5zdGFuY2VzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogUHJlc2VydmUgZmlsZSBwb3NpdGlvbgorCXdoaWxlIGxvYWRpbmcgdGhlIGBhdmFyJyB0YWJsZS4KKworMjAxNy0wOC0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnQsIHRydWV0eXBlXSBNaW5vciBhZGp1c3RtZW50cyBmb3IgT3BlblR5cGUgMS44LjIuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2xvYWRfZmFjZSk6IFRoZSB1bml0cyBwZXIgRU0gdmFsdWUgaGFzIG5vdworCSh0aWdodGVyKSBsaW1pdHMuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBUaGUgbmV3IE9wZW5UeXBlCisJdmVyc2lvbiBleHBsaWNpdGx5IGFsbG93cyBhbGwgbmVnYXRpdmUgdmFsdWVzIGZvciB0aGUgbnVtYmVyIG9mCisJY29udG91cnMgaWYgd2UgaGF2ZSBhIGNvbXBvc2l0ZSBnbHlwaCAodGhpcyBpcyBmb3IgYmV0dGVyIGJhY2t3YXJkcworCWNvbXBhdGliaWxpdHkgSSBndWVzcyksIGJ1dCBpdCBzdGlsbCByZWNvbW1lbmRzIHZhbHVlIC0xLgorCisyMDE3LTA3LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBJbnRlZ2VyIG92ZXJmbG93LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjczOAorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9nbHlwaHBhdGhfY29tcHV0ZU9mZnNldCwKKwljZjJfZ2x5cGhwYXRoX2N1cnZlVG8pOiBVc2UgQUREX0lOVDMyLgorCisyMDE3LTA3LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbYmFzZV0gRml4IG1lbW9yeSBsZWFrLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzM4MzYyCisKKwkqIHNyYy9iYXNlL2Z0Z2x5cGguYyAoRlRfR2V0X0dseXBoKTogRG8gcHJvcGVyIGRlYWxsb2NhdGlvbiBpbiBjYXNlCisJb2YgZXJyb3IuCisKKzIwMTctMDctMTIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBJbnRlZ2VyIG92ZXJmbG93LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjU3MworCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfZ2x5cGhzbG90X2dyaWRfZml0X21ldHJpY3MpOiBVc2UKKwlGVF9QSVhfQ0VJTF9MT05HIGFuZCBGVF9QSVhfUk9VTkRfTE9ORy4KKworMjAxNy0wNy0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2dldF9sb2NhdGlvbik6IE9mZi1ieS1vbmUgdHlwby4KKworCUFsc28gaW1wcm92ZSB0cmFjaW5nIG1lc3NhZ2UuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTczODkxOQorCisyMDE3LTA3LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBJbnRlZ2VyIG92ZXJmbG93LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjUxNworCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19jYXB0dXJlKTogVXNlIFNVQl9JTlQzMi4KKworMjAxNy0wNy0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcF91bmljb2RlX2NsYXNzX3JlYyk6IEZpeCB3YXJuaW5nLgorCisyMDE3LTA3LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKEZUX1N0cmVhbV9TZWVrU2V0KTogRml4IHdhcm5pbmcgKCM1MTM5NSkuCisKKzIwMTctMDctMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gUHJldmVudCBhZGRyZXNzIG92ZXJmbG93ICgjNTEzNjUpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChGVF9TdHJlYW1fU2Vla1NldCk6IEFkZCBndWFyZC4KKworMjAxNy0wNy0wMyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvYmFzZS9mdGxjZGZpbC5jIChmdF9sY2RfZmlsdGVyX2Zpcik6IEltcHJvdmUgY29kZS4KKworMjAxNy0wNy0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjQ1NQorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NDRlMpOiBVc2UgU1VCX0xPTkcuCisKKzIwMTctMDctMDEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogSWdub3JlIE5vX1VuaWNvZGVfR2x5cGhfTmFtZS4KKworMjAxNy0wNi0yOCAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGdvb2dsZS5jb20+CisKKwlBdm9pZCBNaWNyb3NvZnQgY29tcGlsZXIgd2FybmluZ3MgKCM1MTMzMSkuCisKKwlXaGlsZSBjbGFuZydzIHNhbml0aXplciByZWNvbW1lbmRzIGEgY2FzdCB0byB1bnNpZ25lZCBmb3Igc2FmZQorCW5lZ2F0aW9uICh0byBoYW5kbGUgLUlOVF9NSU4pLCBib3RoIE1TVkMgYW5kIFZpc3VhbGMgZW1pdCB3YXJuaW5nCisJQzQxNDYgaWYgYW4gdW5zaWduZWQgdmFsdWUgZ2V0cyBuZWdhdGVkLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChORUdfTE9ORywgTkVHX0lOVDMyKSwKKwlzcmMvYmFzZS9mdGNhbGMuYyAoRlRfTU9WRV9TSUdOKTogUmVwbGFjZSBuZWdhdGlvbiB3aXRoIGEKKwlzdWJ0cmFjdGlvbi4KKworMjAxNy0wNi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGRvX2ZpeGVkKTogRml4IHR5cG8uCisKKwlTcG90dGVkIGJ5IGNocmlzIDxjaHJpc0BnY2pkLm9yZz4uCisKKzIwMTctMDYtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzg0CisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzkxCisKKwkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NdWxEaXYsIEZUX011bERpdl9Ob19Sb3VuZCwgRlRfRGl2Rml4KTogVXNlCisJTkVHX0xPTkcuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfU3hWVEwpOiBVc2UgTkVHX0xPTkcuCisKKzIwMTctMDYtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzY0CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVNFQ1QpOiBVc2UgTkVHX0xPTkcuCisKKzIwMTctMDYtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIzMjMKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIzMjgKKworCSogc3JjL2NmZi9jZjJibHVlcy5jIChjZjJfYmx1ZXNfY2FwdHVyZSk6IFVzZSBBRERfSU5UMzIgYW5kCisJU1VCX0lOVDMyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NEUFZUTCk6IFVzZSBTVUJfTE9ORyBhbmQgTkVHX0xPTkcuCisKKzIwMTctMDYtMjEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzZm50XSBTeW50aGVzaXplIGEgVW5pY29kZSBjaGFybWFwIGlmIG9uZSBpcyBtaXNzaW5nLgorCisJKiBzcmMvc2ZudC90dGNtYXAuaCAodHRfY21hcF91bmljb2RlX2NsYXNzX3JlYyk6IERlY2xhcmUgaXQuCisJKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfZ2V0X2dseXBoX25hbWUsIHR0X2NtYXBfdW5pY29kZV9pbml0LAorCXR0X2NtYXBfdW5pY29kZV9kb25lLCB0dF9jbWFwX3VuaWNvZGVfY2hhcl9pbmRleCwKKwl0dF9jbWFwX3VuaWNvZGVfY2hhcl9uZXh0LCB0dF9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjKTogSW1wbGVtZW50CisJc3ludGhldGljIFVuaWNvZGUgY2hhcm1hcCBjbGFzcy4KKwkodHRfZ2V0X2NtYXBfaW5mbyk6IE1ha2Ugc3VyZSB0aGUgY2FsbGJhY2sgaXMgYXZhaWxhYmxlLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpCisJW0ZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FU106IElmIFVuaWNvZGUgY2hhcm1hcCBpcyBtaXNzaW5nLAorCXN5bnRoZXNpemUgb25lLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oOiBEb2N1bWVudCBpdC4KKwkqIGRldmVsL2Z0b3B0aW9uLmg6IERpdHRvLgorCisyMDE3LTA2LTIwICBUb255IFRoZW9kb3JlICA8dG9ueXRAbG9neXN0LmNvbT4KKworCUZpeCBwa2ctY29uZmlnIGluIGZyZWV0eXBlLWNvbmZpZyBmb3IgY3Jvc3MtY29tcGlsaW5nICgjNTEyNzQpLgorCisJKiBidWlsZHMvdW5peC91bml4LWRlZi5pbiAoUEtHX0NPTkZJRyk6IE5ldyB2YXJpYWJsZS4KKwkoZnJlZXR5cGUtY29uZmlnKTogVXNlIGl0IGluIHNlZCBleHByZXNzaW9uLgorCisJKiBidWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW46IHMvcGtnLWNvbmZpZy8lUEtHX0NPTkZJRyUvLgorCisyMDE3LTA2LTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzAwCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzEzCisKKwkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2hpbnRtYXBfYWRqdXN0SGludHMpOiBVc2UgQUREX0lOVDMyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0FCUyk6IEF2b2lkIEZUX0FCUy4KKworMjAxNy0wNi0xNyAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2Jhc2UsIHNtb290aF0gTENEIGZpbHRlcmluZyBjbGVhbnVwcy4KKworCSogc3JjL2Jhc2UvZnRsY2RmaWwuYyAoZnRfbGNkX2ZpbHRlcl9maXIsIF9mdF9sY2RfZmlsdGVyX2xlZ2FjeSk6CisJQ2xlYW4gdXAsIHN0YXJ0IGZpbHRlcmluZyBmcm9tIHRoZSBib3R0b20tbGVmdCBvcmlnaW4uCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogVXBkYXRlZC4KKworMjAxNy0wNi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyNzAKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyNzYKKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NRFJQLCBfaXVwX3dvcmtlcl9pbnRlcnBvbGF0ZSk6IFVzZQorCUFERF9MT05HIGFuZCBTVUJfTE9ORy4KKworMjAxNy0wNi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZiwgY2ZmXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyNDQKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIyNjEKKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KTogUmVwbGFjZSBjYWxscyB0byBGVF9BQlMgd2l0aAorCWRpcmVjdCBjb2RlIHRvIGF2b2lkIHZhbHVlIG5lZ2F0aW9uLgorCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19jYXB0dXJlKTogVXNlIFNVQl9JTlQzMiBhbmQKKwlBRERfSU5UMzIuCisKKzIwMTctMDYtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3dpbmZvbnRzL3dpbmZudC5jIChGTlRfRmFjZV9Jbml0KTogRG9uJ3Qgc2V0IGFjdGl2ZSBlbmNvZGluZy4KKworCUZyZWVUeXBlIG9ubHkgc2V0cyBhIGRlZmF1bHQgYWN0aXZlIGVuY29kaW5nIGZvciBVbmljb2RlLgorCisyMDE3LTA2LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjE2CisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjE4CisKKwkqIHNyYy9jZmYvY2YyZml4ZWQuaCAoY2YyX2ZpeGVkQWJzKTogVXNlIE5FR19JTlQzMi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19JUCk6IFVzZSBTVUJfTE9ORy4KKworMjAxNy0wNi0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjAwCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMjEwCisKKwkqIHNyYy9jZmYvY2YyaGludHMuYyAoY2YyX2hpbnRtYXBfaW5zZXJ0SGludCk6IFVzZSBTVUJfSU5UMzIgYW5kCisJQUREX0lOVDMyLgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpIDxjZjJfY21kVk1PVkVUTz46IFVzZQorCUFERF9JTlQzMi4KKworMjAxNy0wNi0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggVFRfU2V0X1Zhcl9EZXNpZ24uCisKKwlSZXBvcnRlZCBieSBOaWtvbGF1cyBXYXh3ZWlsZXIgPG1hZGlnZW5zQGdtYWlsLmNvbT4uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1NldF9WYXJfRGVzaWduKTogQ29ycmVjdGx5IGhhbmRsZSB0aGUKKwljYXNlIHdoZXJlIHdlIGhhdmUgbGVzcyBpbnB1dCBjb29yZGluYXRlcyB0aGFuIGF4ZXMuCisKKzIwMTctMDYtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX0RpdkZpeCk6IEZpeCBlbWJhcnJhc3NpbmcgdHlwby4KKworCUJ1ZyBpbnRyb2R1Y2VkIDIwMTctMDUtMjguCisKKzIwMTctMDYtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxNDQKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxNTEKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxNTMKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxNzMKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxODYKKworCSogc3JjL2NmZi9jZjJibHVlcy5jIChjZjJfYmx1ZXNfaW5pdCk6IFVzZSBTVUJfSU5UMzIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChSb3VuZF9Ob25lLCBSb3VuZF9Ub19HcmlkLAorCVJvdW5kX1RvX0hhbGZfR3JpZCwgUm91bmRfRG93bl9Ub19HcmlkLCBSb3VuZF9VcF9Ub19HcmlkLAorCVJvdW5kX1RvX0RvdWJsZV9HcmlkLCBSb3VuZF9TdXBlciwgUm91bmRfU3VwZXJfNDUpOiBVc2UgQUREX0xPTkcsCisJU1VCX0xPTkcsIE5FR19MT05HLCBGVF9QSVhfUk9VTkRfTE9ORywgRlRfUElYX0NFSUxfTE9ORywKKwlGVF9QQURfUk9VTkRfTE9ORworCShJbnNfU3hWVEwsIEluc19NSVJQKTogVXNlIFNVQl9MT05HLgorCShfaXVwX3dvcmtlcl9zaGlmdCk6IFVzZSBTVUJfTE9ORyBhbmQgQUREX0xPTkcuCisKKzIwMTctMDYtMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVByb3ZpZGUgbW9yZSBtYWNyb3MgZm9yIGZsb29yaW5nLCBjZWlsaW5nLCBhbmQgcm91bmRpbmcuCisKKwlUaGVzZSB2ZXJzaW9ucyBkb24ndCBwcm9kdWNlIHJ1bi10aW1lIGVycm9ycyBkdWUgdG8gaW50ZWdlcgorCW92ZXJmbG93LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSC4KKwkoRlRfUEFEX1JPVU5EX0xPTkcsIEZUX1BBRF9DRUlMX0xPTkcsIEZUX1BJWF9ST1VORF9MT05HLAorCUZUX1BJWF9DRUlMX0xPTkcpOiBOZXcgbWFjcm9zLgorCShGVF9QQURfUk9VTkRfSU5UMzIsIEZUX1BBRF9DRUlMX0lOVDMyLCBGVF9QSVhfUk9VTkRfSU5UMzIsCisJRlRfUElYX0NFSUxfSU5UMzIpOiBOZXcgbWFjcm9zLgorCisyMDE3LTA2LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlSZW1vdmUgdW51c2VkIG1hY3Jvcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCAoQUREX0lOVCwgU1VCX0lOVCwgTVVMX0lOVCwKKwlORUdfSU5UKTogRGVsZXRlZC4KKworMjAxNy0wNi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKi8qOiBSZW1vdmUgYE9WRVJGTE9XXycgcHJlZml4LgorCisJVGhpcyBpbmNyZWFzZXMgcmVhZGFiaWxpdHkuCisKKzIwMTctMDYtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxMzMKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIxMzcKKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfaGludF9pbml0KTogVXNlIE9WRVJGTE9XX1NVQl9JTlQzMi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFBST0pFQ1QsIERVQUxQUk9KKTogVXNlCisJT1ZFUkZMT1dfU1VCX0xPTkcuCisKKzIwMTctMDYtMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjEwOQorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjExMAorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjEyMgorCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19pbml0KTogVXNlIE9WRVJGTE9XX1NVQl9JTlQzMi4KKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfaGludG1hcF9tYXApOiBTeW5jaHJvbml6ZSBpZi1lbHNlCisJYnJhbmNoZXMuCisKKzIwMTctMDYtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEludGVnZXIgb3ZlcmZsb3cuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDg5CisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfYmxlbmRfZG9CbGVuZCk6IFVzZXIgT1ZFUkZMT1dfQUREX0lOVDMyLgorCisyMDE3LTA2LTA0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmLCB0cnVldHlwZV0gSW50ZWdlciBvdmVyZmxvd3MuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDc1CisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDg4CisKKwkqIHNyYy9jZmYvY2YyZm9udC5jIChjZjJfZm9udF9zZXR1cCk6IFVzZSBPVkVSRkxPV19NVUxfSU5UMzIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSVNFQ1QpOiBVc2UgT1ZFUkZMT1dfTVVMX0xPTkcsCisJT1ZFUkZMT1dfQUREX0xPTkcsIGFuZCBPVkVSRkxPV19TVUJfTE9ORy4KKworMjAxNy0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Jhc2UsIGNmZiwgdHJ1ZXR5cGVdIEludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MAorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MgorCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA2MworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA2OAorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfZ2x5cGhzbG90X2dyaWRfZml0X21ldHJpY3MpOiBVc2UKKwlPVkVSRkxPV19BRERfTE9ORyBhbmQgT1ZFUkZMT1dfU1VCX0xPTkcuCisKKwkqIHNyYy9jZmYvY2YyYmx1ZXMuYyAoY2YyX2JsdWVzX2NhcHR1cmUpLCBzcmMvY2ZmL2NmMmhpbnRzLmMKKwkoY2YyX2hpbnRtYXBfYWRqdXN0SGludHMpOiBVc2UgT1ZFUkZMT1dfU1VCX0lOVDMyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChjb21wdXRlX2dseXBoX21ldHJpY3MpOiBVc2VyCisJT1ZFUkZMT1dfU1VCX0xPTkcuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChEaXJlY3RfTW92ZSwgRGlyZWN0X01vdmVfT3JpZywKKwlEaXJlY3RfTW92ZV9YLCBEaXJlY3RfTW92ZV9ZLCBEaXJlY3RfTW92ZV9PcmlnX1gsCisJRGlyZWN0X01vdmVfT3JpZ19ZLCBNb3ZlX1pwMl9Qb2ludCwgSW5zX01TSVJQKTogVXNlCisJT1ZFUkZMT1dfQUREX0xPTkcgYW5kIE9WRVJGTE9XX1NVQl9MT05HLgorCisyMDE3LTA2LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGJ1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbjogRml4IHBrZy1jb25maWcgdGVzdCAoIzUxMTYyKS4KKworCVBhdGNoIGRpcmVjdGx5IHRha2VuIGZyb20gYnVnIHJlcG9ydC4KKworMjAxNy0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gU3luY2hyb25pemUgc2FuaXR5IGNoZWNrcyB3aXRoIHBjZiBkcml2ZXIuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDU0CisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMDU4CisKKwkqIHNyYy9iZGYvYmRmZHJpdnIuYyAoQkRGX0ZhY2VfSW5pdCk6IENoZWNrIGZvbnQgYXNjZW50IGFuZCBkZXNjZW50LgorCUNoZWNrIEFWRVJBR0VfV0lEVEgsIFBPSU5UX1NJWkUsIFBJWEVMX1NJWkUsIFJFU09MVVRJT05fWCwgYW5kCisJUkVTT0xVVElPTl9ZIHByb3BlcnRpZXMuCisKKzIwMTctMDYtMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBJbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNDcKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNTcKKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfaGludG1hcF9tYXApOiBVc2UgT1ZFUkZMT1dfU1VCX0lOVDMyLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0FERCk6IFVzZSBPVkVSRkxPV19BRERfTE9ORy4KKwkoSW5zX1NVQik6IFVzZSBPVkVSRkxPV19TVUJfTE9ORy4KKwkoSW5zX05FRyk6IFVzZSBORUdfTE9ORy4KKworMjAxNy0wNi0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJZnRjYWxjLmg6IEF2b2lkIGxlZnQtc2hpZnQgb2YgbmVnYXRpdmUgbnVtYmVycy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwNTUKKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCAoSU5UX1RPX0YyNkRPVDYsCisJSU5UX1RPX0YyRE9UMTQsIElOVF9UT19GSVhFRCwgRjJET1QxNF9UT19GSVhFRCk6IFVzZSBtdWx0aXBsaWNhdGlvbi4KKworMjAxNy0wNi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gRXZlbiBtb3JlIGludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjA0NgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9kb1N0ZW1zLCBjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKTogVXNlCisJT1ZFUkZMT1dfQUREX0lOVDMyLgorCisyMDE3LTA2LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBNb3JlIGludGVnZXIgb3ZlcmZsb3dzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjAzMgorCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMgKGNmMl9ibHVlc19pbml0KTogVXNlIE9WRVJGTE9XX1NVQl9JTlQzMi4KKworMjAxNy0wNi0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2JkZl0gRG9uJ3QgbGVmdC1zaGlmdCBuZWdhdGl2ZSBudW1iZXJzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjAzMQorCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBVc2UgbXVsdGlwbGljYXRpb24uCisKKzIwMTctMDYtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiZGZdIEZpeCBpbnRlZ2VyIHNjYW5uaW5nIHJvdXRpbmVzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MjAyOQorCisJKiBzcmMvYmRmL2JkZmxpYi5jIChfYmRmX2F0b3VsLCBfYmRmX2F0b2wsIF9iZGZfYXRvdXMsIF9iZGZfYXRvcyk6CisJU3RvcCBzY2FubmluZyBpZiByZXN1bHQgd291bGQgb3ZlcmZsb3cuCisKKzIwMTctMDYtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBpbnRlZ2VyIG92ZXJmbG93cy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwMjcKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTIwMjgKKworCSogc3JjL2NmZi9jZjJoaW50cy5jIChjZjJfaGludG1hcF9pbnNlcnRIaW50KSwgc3JjL2NmZi9jZjJpbnRycC5jCisJKGNmMl9kb0ZsZXgpOiBVc2UgT1ZFUkZMT1dfQUREX0lOVDMyIGFuZCBPVkVSRkxPV19TVUJfSU5UMzIuCisKKzIwMTctMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzbW9vdGhdIFNvbWUgMzJiaXQgaW50ZWdlciBvdmVyZmxvdyBydW4tdGltZSBlcnJvcnMuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIFtTVEFOREFMT05FXSAoT1ZFUkZMT1dfQUREX0xPTkcsCisJT1ZFUkZMT1dfU1VCX0xPTkcsIE9WRVJGTE9XX01VTF9MT05HLCBORUdfTE9ORyk6IE5ldyBtYWNyb3MuCisJWyFTVEFOREFMT05FXTogSW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0guCisJKGdyYXlfcmVuZGVyX2N1YmljKTogVXNlIHRob3NlIG1hY3JvcyB3aGVyZSBhcHByb3ByaWF0ZS4KKworMjAxNy0wNi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdGdseXBoLmMgKEZUX0dldF9HbHlwaCk6IENoZWNrIGBzbG90LT5hZHZhbmNlJy4KKworMjAxNy0wNi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSAzMmJpdCBpbnRlZ2VyIG92ZXJmbG93IHR1bi10aW1lIGVycm9ycyAoIzQ2MTQ5KS4KKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOiBVc2UKKwlPVkVSRkxPV19BRERfTE9ORyBhbmQgT1ZFUkZMT1dfU1VCX0xPTkcgd2hlcmUgYXBwcm9wcmlhdGUuCisKKzIwMTctMDYtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IEFkanVzdCBsb29wIGNvdW50ZXIgYWdhaW4uCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IE1hcmVrIEthxaHDrWsgPG1rYXNpa0ByZWRoYXQuY29tPi4KKworCVRoZSBwcm9ibGVtYXRpYyBmb250IHRoYXQgZXhjZWVkcyB0aGUgb2xkIGxpbWl0IGlzIFBhZGF1ay1Cb2xkLAorCXZlcnNpb24gMy4wMDIsIGNvbnRhaW5pbmcgYnl0ZWNvZGUgZ2VuZXJhdGVkIGJ5IGEgYnVnZ3kgdmVyc2lvbiBvZgorCXR0ZmF1dG9oaW50LgorCisyMDE3LTA1LTMxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSAzMmJpdCBpbnRlZ2VyIG92ZXJmbG93IHJ1bi10aW1lIGVycm9ycyAyLzIgKCM0NjE0OSkuCisKKwlUaGlzIGNvbW1pdCBoYW5kbGVzIHRoZSBuZXcgZW5naW5lLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIChPVkVSRkxPV19BRERfSU5UMzIsCisJT1ZFUkZMT1dfU1VCX0lOVDMyLCBPVkVSRkxPV19NVUxfSU5UMzIsIE5FR19JTlQsIE5FR19MT05HLAorCU5FR19JTlQzMik6IE5ldyBtYWNyb3MuCisKKwkqIHNyYy9jZmYvY2YyZnQuYyAoY2YyX2dldFNjYWxlQW5kSGludEZsYWcpOiBVc2UgT1ZFUkZMT1dfQUREX0lOVDMyLgorCisJKiBzcmMvY2ZmL2NmMmhpbnRzLmMgKGNmMl9nZXRXaW5kaW5nTW9tZW50dW0sIGNmMl9oaW50X2luaXQsCisJY2YyX2hpbnRtYXBfbWFwLCBjZjJfZ2x5cGhwYXRoX2hpbnRQb2ludCwKKwljZjJfZ2x5cGhwYXRoX2NvbXB1dGVJbnRlcnNlY3Rpb24sIGNmMl9nbHlwaHBhdGhfY29tcHV0ZU9mZnNldCwKKwljZjJfZ2x5cGhwYXRoX2xpbmVUbywgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKTogVXNlCisJT1ZFUkZMT1dfQUREX0lOVDMyLCBPVkVSRkxPV19TVUJfSU5UMzIsIE9WRVJGTE9XX01VTF9JTlQzMiwgYW5kCisJTkVHX0lOVDMyIHdoZXJlIGFwcHJvcHJpYXRlLgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9kb0ZsZXgsIGNmMl9kb0JsZW5kLAorCWNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpOiBEaXR0by4KKwlBbHNvIGFkZCBzb21lIG90aGVyIGNvZGUgd2hlcmUgbmVlZGVkIHRvIGF2b2lkIG92ZXJmbG93LgorCisyMDE3LTA1LTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSAzMmJpdCBpbnRlZ2VyIG92ZXJmbG93IHJ1bi10aW1lIGVycm9ycyAxLzIgKCM0NjE0OSkuCisKKwlUaGlzIGNvbW1pdCBoYW5kbGVzIHRoZSBvbGQgZW5naW5lLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmM6IEluY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ILgorCShjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IFVzZSBPVkVSRkxPV19BRERfTE9ORyBhbmQKKwlPVkVSRkxPV19TVUJfTE9ORyB3aGVyZSBuZWVkZWQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYzogSW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0guCisJKHBvd2VyX3Rlbl9saW1pdHMpOiBOZXcgc3RhdGljIGFycmF5LgorCShkb19maXhlZCk6IFVzZSBpdCB0byBwcmV2ZW50IG11bHRpcGxpY2F0aW9uIG92ZXJmbG93LgorCShjZmZfcGFyc2VyX3J1bik6IFVzZSBPVkVSRkxPV19BRERfTE9ORy4KKworMjAxNy0wNS0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BzYXV4XSBDb3JyZWN0bHkgaGFuZGxlIHNlcXVlbmNlcyBvZiBtdWx0aXBsZSBudW1iZXIgc2lnbnMuCisKKwkqIHNyYy9wc2F1eC9wc2NvbnYuYyAoUFNfQ29udl9TdHJ0b2wsIFBTX0NvbnZfVG9GaXhlZCk6IFJldHVybiB6ZXJvCisJaWYgd2UgZW5jb3VudGVyIG1vcmUgdGhhbiBhIHNpbmdsZSBzaWduLgorCisyMDE3LTA1LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcGNmXSAzMmJpdCBpbnRlZ2VyIG92ZXJmbG93IHJ1bi10aW1lIGVycm9ycyAoIzQ2MTQ5KS4KKworCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9nZXRfYWNjZWwpOiBBZGQgc2FuaXR5IGNoZWNrcyBmb3IKKwlgZm9udEFzY2VudCcgYW5kIGBmb250RGVzY2VudCcuCisJKHBjZl9sb2FkX2ZvbnQpOiBBZGQgc2FuaXR5IGNoZWNrcyBmb3IgZ2xvYmFsIGhlaWdodC4KKwlBZGQgc2FuaXR5IGNoZWNrcyBmb3IgQVZFUkFHRV9XSURUSCwgUE9JTlRfU0laRSwgUElYRUxfU0laRSwKKwlSRVNPTFVUSU9OX1gsIGFuZCBSRVNPTFVUSU9OX1kgcHJvcGVydGllcy4KKworMjAxNy0wNS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJSGFuZGxlIHNvbWUgaW50ZWdlciBvdmVyZmxvdyBydW4tdGltZSBlcnJvcnMgKCM0NjE0OSwgIzQ4OTc5KS4KKworCVRoaXMgY29tbWl0IChtYWlubHkgZm9yIDMyYml0IENQVXMpIGlzIHRoZSBmaXJzdCBvZiBhIHNlcmllcyBvZgorCXNpbWlsYXIgY29tbWl0cyB0byBoYW5kbGUga25vd24gaW50ZWdlciBvdmVyZmxvd3MuICBCYXNpY2FsbHksIGFsbAorCW9mIHRoZW0gYXJlIGhhcm1sZXNzLCBzaW5jZSB0aGV5IGFmZmVjdCByZW5kZXJpbmcgb2YgZ2x5cGhzIG9ubHksCisJbm90IHBvc2luZyBzZWN1cml0eSB0aHJlYXRzLiAgSXQgaXMgZXhwZWN0ZWQgdGhhdCBmdXp6eWluZyB3aWxsIHNob3cKKwl1cCBtb3JlIG92ZXJmbG93cywgdG8gYmUgZml4ZWQgaW4gZHVlIGNvdXJzZS4KKworCVRoZSBpZGVhIGlzIHRvIG1hcmsgcGxhY2VzIHdoZXJlIG92ZXJmbG93cyBjYW4gb2NjdXIsIHVzaW5nIG1hY3JvcworCXRoYXQgc2ltcGx5IGNhc3QgdG8gdW5zaWduZWQgaW50ZWdlcnMsIGJlY2F1c2Ugb3ZlcmZsb3cgYXJpdGhtZXRpYworCWlzIHdlbGwgZGVmaW5lZCBpbiB0aGlzIGNhc2UuICBEb2luZyBzbyBzdXBwcmVzc2VzIHJ1bi10aW1lIGVycm9ycworCW9mIHNhbml0aXplcnMgd2l0aG91dCBhZGRpbmcgY29tcHV0YXRpb25hbCBvdmVyaGVhZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCAoT1ZFUkZMT1dfQUREX0lOVCwKKwlPVkVSRkxPV19TVUJfSU5ULCBPVkVSRkxPV19NVUxfSU5ULCBPVkVSRkxPV19BRERfTE9ORywKKwlPVkVSRkxPV19TVUJfTE9ORywgT1ZFUkZMT1dfTVVMX0xPTkcpOiBOZXcgbWFjcm9zLgorCisJKiBzcmMvYmFzZS9mdGNhbGMuYyAoRlRfUm91bmRGaXgsIEZUX0NlaWxGaXgsIEZUX01hdHJpeF9NdWx0aXBseSwKKwlGVF9NYXRyaXhfTXVsdGlwbHlfU2NhbGVkLCBGVF9WZWN0b3JfVHJhbnNmb3JtX1NjYWxlZCwKKwlmdF9jb3JuZXJfb3JpZW50YXRpb24pOiBVc2UgbmV3IG1hY3Jvcy4KKworCSogc3JjL2Jhc2UvZnRvdXRsbi5jIChGVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbik6IFVzZSBuZXcgbWFjcm9zLgorCisyMDE3LTA1LTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmggKEZMT0FUX1RPX0ZJWEVEKTogUmVtb3ZlLgorCisJVGhpcyBtYWNybyBpcyBub3QgdXNlZC4KKworMjAxNy0wNS0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gcy9jZjJfZmxvYXRUb0ZpeGVkL2NmMl9kb3VibGVUb0ZpeGVkLy4KKworCVRoZSBuZXcgbmFtZSBiZXR0ZXIgZGVzY3JpYmVzIHdoYXQgdGhlIG1hY3JvIGFjdHVhbGx5IGRvZXM7CisJYWRkaXRpb25hbGx5LCB3ZSBkb24ndCBuZWVkIGEgdHJhaWxpbmcgYGYnIGZvciBsaXRlcmFscyAodGhlcmUgd2FzCisJb25seSBhIHNpbmdsZSBzdWNoIGluc3RhbmNlIGluIHRoZSBjb2RlLCBidXQgdGhpcyBjYXVzZWQgYSBjbGFuZworCXdhcm5pbmcgYmVjYXVzZSB0aGUgbWFjcm8gaXRzZWxmIHVzZXMgYGRvdWJsZScgbGl0ZXJhbHMpLgorCisJKiBzcmMvY2ZmL2NmMmJsdWVzLmMsIHNyYy9jZmYvY2YyYmx1ZXMuaCwgc3JjL2NmZi9jZjJmaXhlZC5oLAorCXNyYy9jZmYvY2YyZm9udC5jLCBzcmMvY2ZmL2NmMmhpbnRzLmM6IFVwZGF0ZWQuCisKKzIwMTctMDUtMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBuZWdhdGlvbiBvZiBJTlRfTUlOIGFuZCBMT05HX01JTiAoIzQ2MTQ5KS4KKworCSogc3JjL2Jhc2UvZnRjYWxjLmMgKEZUX01PVkVfU0lHTik6IEFkZCBhcmd1bWVudCB0byBwYXNzIHVuc2lnbmVkCisJdmFsdWUsIHRvIGJlIHVzZWQgYXMgdGhlIHJlc3VsdC4KKwkoRlRfTXVsRGl2LCBGVF9NdWxEaXZfTm9fUm91bmQsIEZUX0RpdkZpeCwgRlRfTXVsRml4LAorCUZUX1ZlY3Rvcl9Ob3JtTGVuKTogVXBkYXRlZC4KKworMjAxNy0wNS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggaGFuZGxpbmcgb2YgZGVzaWduIGNvb3JkaW5hdGVzICgjNTExMjcpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9zZXRfbW1fYmxlbmQpOiBDb21wdXRlIGFsbCBkZXNpZ24KKwljb29yZGluYXRlcyBpZiB3ZSBoYXZlIHRvIGNyZWF0ZSB0aGUgYGJsZW5kcy0+Y29vcmQnIGFycmF5LgorCShUVF9HZXRfTU1fQmxlbmQsIFRUX0dldF9WYXJfRGVzaWduKTogU2VsZWN0IGRlZmF1bHQgaW5zdGFuY2UKKwljb29yZGluYXRlcyBpZiBubyBpbnN0YW5jZSBpcyBzZWxlY3RlZCB5ZXQuCisKKzIwMTctMDUtMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiZGYsIHBjZl0gU3VwcG9ydCBJU082NDYuMTk5MS1JUlYgY2hhcmFjdGVyIGVuY29kaW5nIChha2EgQVNDSUkpLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBNYXJlayBLYcWhw61rIDxta2FzaWtAcmVkaGF0LmNvbT4sIGNmLgorCisJICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTE0NTE3OTUKKworCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfRmFjZV9Jbml0KSwgc3JjL3BjZi9wY2Zkcml2ci5jCisJKFBDRl9GYWNlX0luaXQpOiBJbXBsZW1lbnQgaXQuCisKKzIwMTctMDUtMjAgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KKworCVt0cnVldHlwZV0gQWx3YXlzIHVzZSBpbnRlcnByZXRlciB2MzUgZm9yIEIvVyByZW5kZXJpbmcgKCM1MTA1MSkuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKHR0X2xvYWRlcl9pbml0KQorCVtUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTF06IEFkanVzdAorCWBzdWJwaXhlbF9oaW50aW5nX2xlYW4nLCBgZ3JheXNjYWxlX2NsZWFydHlwZScsIGFuZAorCWB2ZXJ0aWNhbF9sY2RfbGVhbicgYWNjb3JkaW5nbHkuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfR0VUSU5GTyk6IFVwZGF0ZWQuCisJKFRUX1J1bklucyk6IFVwZGF0ZSBgYmFja3dhcmRfY29tcGF0aWJpbGl0eScgZmxhZy4KKworMjAxNy0wNS0yMCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gSW1wbGVtZW50IG1pbmltYWwgZHluYW1pYyBwYWRkaW5nIGZvciBMQ0QgZmlsdGVyaW5nLgorCisJRXh0cmEgYml0bWFwIHBhZGRpbmcgZm9yIExDRCBmaWx0ZXJpbmcgZGVwZW5kcyBvbiB0aGUgZmlsdGVyLiAgVGhlCisJZGVmYXVsdCA1LXRhcCBmaWx0ZXIgbmVlZHMgMiBleHRyYSBzdWJwaXhlbHMuICBUaGUgbGlnaHQgMy10YXAgZmlsdGVyCisJbmVlZHMgb25seSAxIGV4dHJhIHN1YnBpeGVsLiAgVGhpcyBzcGFjZSBjb3VsZCBiZSBhbHJlYWR5IGF2YWlsYWJsZQorCWR1ZSB0byByb3VuZGluZy4gIEluIG9yZGVyIHRvIG9wdGltaXplIHRoZSBwYWRkaW5nLCB3ZSBub3cgZXhwYW5kCisJQ0JveCBmb3IgdGhlIGdpdmVuIGZpbHRlciB3ZWlnaHRzIGJlZm9yZSByb3VuZGluZy4KKworCVRoaXMgY2hhbmdlIGJyZWFrcyBjdXJyZW50IFNraWEgKGFuZCBGaXJlZm94KS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfTGlicmFyeVJlYykKKwlbRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkddOiBSZW1vdmUgYGxjZF9leHRyYScgZmllbGQuCisKKwkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyV2VpZ2h0cywKKwlGVF9MaWJyYXJ5X1NldExjZEZpbHRlcik6IFJlbW92ZSBgbGNkX2V4dHJhJyBpbml0aWFsaXphdGlvbnMuCisKKwkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyAoZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKTogSW1wbGVtZW50IGR5bWFuaWMKKwlMQ0QgcGFkZGluZy4KKworMjAxNy0wNS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIFJldHVybiBwcm9wZXIgc2NhbGluZyB2YWx1ZXMgZm9yIFNCSVggYml0bWFwcy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgSGluLVRhayBMZXVuZyA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcyk6IEltcGxlbWVudCBpdC4KKworMjAxNy0wNS0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggZXJyb3IgaGFuZGxpbmcgZm9yIGVtYmVkZGVkIGJpdG1hcHMuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsgTGV1bmcgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0xvYWRfR2x5cGgpCisJW1RUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQU106IEhhbmRsZSBlcnJvciBpZiBmb250IGlzIG5vdAorCXNjYWxhYmxlLgorCisyMDE3LTA1LTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbYXV0b2ZpdF0gTWFrZSBhdXRvaGludCB3YXJwaW5nIE5PUk1BTCBvcHRpb24uCisKKwlUaGlzIG1vdmVzIHdhcnBpbmcgb3B0aW9uIGZyb20gTElHSFQgdG8gTk9STUFMIG1vZGUuICBUaGlzIG1ha2VzIExJR0hUCisJdHJ1bHkgdm9pZCBvZiBoaW50aW5nIGluIHgtZGlyZWN0aW9uLCB3aXRoIGxlZnQgc2lkZSBiZWFyaW5nIG5ldmVyCisJY2hhbmdlZCBhbmQgcmlnaHQgc2lkZSBiZWFyaW5nIG9ubHkgYWx0ZXJlZCBieSBhZHZhbmNlIHJvdW5kaW5nLgorCVRoZXJlZm9yZSwgTElHSFQgaXMgbm93IHJlYWR5IHRvIHJldHVybiBmcmFjdGlvbmFsIGFkdmFuY2UuICBBcyBhCisJTk9STUFMIG9wdGlvbiwgd2FycGluZyBzdWJzdGl0dXRlcyBub3JtYWwgaGludGluZy4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX2hpbnRzX2FwcGx5KTogVXBkYXRlZC4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfYXBwbHkpOiBVcGRhdGVkLgorCSogc3JjL2F1dG9maXQvYWZsYXRpbjIuYyAoYWZfbGF0aW4yX2hpbnRzX2FwcGx5KTogVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpOiBIYW5kbGUgd2FycGluZworCXBoYW50b20gcG9pbnRzIGFzIG5vcm1hbC4KKworMjAxNy0wNS0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJUmVtb3ZlIHJlbW5hbnRzIG9mIHJhc3RlciBwb29sLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIChGVF9MaWJyYXJ5UmVjKTogUmVtb3ZlCisJYHJhc3Rlcl9wb29sJyBhbmQgYHJhc3Rlcl9wb29sX3NpemUnIGZpZWxkcy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX05ld19MaWJyYXJ5KSwgc3JjL3Jhc3Rlci9mdHJlbmQxLmMKKwkoZnRfcmFzdGVyMV9pbml0KSwgc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfaW5pdCk6IFVwZGF0ZWQuCisKKzIwMTctMDUtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjggcmVsZWFzZWQuCisJPT09PT09PT09PT09PT09PT09PT09PT0KKworCisJVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItOCcuCisKKwkqIGRvY3MvVkVSU0lPTi5UWFQ6IEFkZCBlbnRyeSBmb3IgdmVyc2lvbiAyLjguCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKwkqIFJFQURNRSwgSmFtZmlsZSAoUmVmRG9jKSwgYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luZG93cy92YzIwMDUvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAxMC9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUuZHNwLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbDogcy8yLjcuMS8yLjgvLCBzLzI3MS8yOC8uCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlJFRVRZUEVfTUlOT1IpOiBTZXQgdG8gOC4KKwkoRlJFRVRZUEVfUEFUQ0gpOiBTZXQgdG8gMC4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyAodmVyc2lvbl9pbmZvKTogU2V0IHRvIDIwOjA6MTQuCisJKiBDTWFrZUxpc3RzLnR4dCAoVkVSU0lPTl9NSU5PUik6IFNldCB0byA4LgorCShWRVJTSU9OX1BBVENIKTogU2V0IHRvIDAuCisKKzIwMTctMDUtMTIgIEhpbi1UYWsgTGV1bmcgIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwlGaXggYEZUX1VJTlRfVE9fUE9JTlRFUicgbWFjcm8gZm9yIFdpbmRvd3MuCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluLCBidWlsZHMvdm1zL2Z0Y29uZmlnLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaCAoRlRfVUlOVF9UT19QT0lOVEVSKSBbX1dJTjY0XToKKwlGaXggZGVmaW5pdGlvbi4KKworMjAxNy0wNS0xMSAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQ2hha21hIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBDaGFrbWEuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQ2hha21hIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIENoYWttYSBkYXRhLgorCisyMDE3LTA1LTEwICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBLYXlhaCBMaSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgS2F5YWggTGkuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgS2F5YWggTGkgc3RhbmRhcmQgY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgS2F5YWggTGkgZGF0YS4KKworMjAxNy0wNS0xMCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQmFtdW0gc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEJhbXVtLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEJhbXVtIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEJhbXVtIGRhdGEuCisKKzIwMTctMDUtMTAgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIFNhdXJhc2h0cmEgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFNhdXJhc2h0cmEuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgU2F1cmFzaHRyYSBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBTYXVyYXNodHJhCisJZGF0YS4KKworMjAxNy0wNS0xMCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQnVoaWQgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEJ1aGlkLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEJ1aGlkIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIEJ1aGlkIGRhdGEuCisKKzIwMTctMDUtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIFNoYXZpYW4gc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFNoYXZpYW4uCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgU2hhdmlhbiBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBTaGF2aWFuIGRhdGEuCisKKzIwMTctMDUtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIFZhaSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgVmFpLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIFZhaSBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBWYWkgZGF0YS4KKworMjAxNy0wNS0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgT3NtYW55YSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgT3NtYW55YS4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBPc21hbnlhIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIE9zbWFueWEgZGF0YS4KKworMjAxNy0wNS0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQ29wdGljIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBDb3B0aWMuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQ29wdGljIHN0YW5kYXJkIGNoYXJhY3Rlci4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIENvcHRpYyBkYXRhLgorCisyMDE3LTA1LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBDYXJpYW4gc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIENhcmlhbi4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBDYXJpYW4gc3RhbmRhcmQgY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQ2FyaWFuIGRhdGEuCisKKzIwMTctMDUtMDcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWRkIHRyaWNreSBmb250IGBERkdpcmwtVzYtV0lOLUJGJyAoZnJvbSBEeW5hbGFiKS4KKworCVJlcG9ydGVkIGJ5IFJveSBUYW0gPHJveXRhbUBnbWFpbC5jb20+LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2NoZWNrX3RyaWNreW5lc3NfZmFtaWx5KTogSW1wbGVtZW50IGl0LgorCisyMDE3LTA1LTA3ICBSb3kgVGFtICA8cm95dGFtQGdtYWlsLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNb3JlIHRyaWNreSBmb250cyAobWFpbmx5IGZyb20gRHluYWxhYikuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfY2hlY2tfdHJpY2t5bmVzc19mYW1pbHksCisJdHRfY2hlY2tfdHJpY2t5bmVzc19zZm50X2lkcyk6IEFkZCB0aGVtLgorCisyMDE3LTA1LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEFkZCB0cmlja3kgZm9udCBgRExDSGF5TWVkaXVtJyAoZnJvbSBEeW5hbGFiKS4KKworCVJlcG9ydGVkIGJ5IFJveSBUYW0gPHJveXRhbUBnbWFpbC5jb20+LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2NoZWNrX3RyaWNreW5lc3NfZmFtaWx5KTogSW1wbGVtZW50IGl0LgorCisyMDE3LTA1LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqLyo6IHMvYmFja3dhcmRzIGNvbXBhdGliaWxpdHkvYmFja3dhcmQgY29tcGF0aWJpbGl0eS8uCisKKzIwMTctMDUtMDMgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIFVuaWZpZWQgQ2FuYWRpYW4gU3lsbGFiaWNzIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBVbmlmaWVkIENhbmFkaWFuCisJU3lsbGFiaWNzLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIFVuaWZpZWQgQ2FuYWRpYW4gU3lsbGFiaWNzIHN0YW5kYXJkCisJY2hhcmFjdGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgVW5pZmllZAorCUNhbmFkaWFuIFN5bGxhYmljcyBkYXRhLgorCisyMDE3LTA1LTAzICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBBZGQgYmx1ZS16b25lIHN1cHBvcnQgZm9yIFN1bmRhbmVzZSBzY3JpcHQuCisKKwlUaGlzIGVzc2VudGlhbGx5IG1vdmVzIHRoZSBTdW5kYW5lc2Ugc2NyaXB0IGZyb20gdGhlIGBJbmRpYycgaGludGVyCisJdG8gdGhlIGBMYXRpbicgaGludGVyLgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIFN1bmRhbmVzZS4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIFN1bmRhbmVzZSBzdGFuZGFyZCBjaGFyYWN0ZXIgYW5kIG1vdmUKKwlkYXRhIG91dCBvZiBBRl9DT05GSUdfT1BUSU9OX0lORElDIGJsb2NrLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jOiBNb3ZlIFN1bmRhbmVzZSBkYXRhIG91dCBvZgorCUFGX0NPTkZJR19PUFRJT05fSU5ESUMgYmxvY2suCisKKwkqIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IFVwZGF0ZSBTdW5kYW5lc2UgZGF0YTsgaW4gcGFydGljdWxhciwgdXNlCisJQUZfV1JJVElOR19TWVNURU1fTEFUSU4uCisKKzIwMTctMDUtMDMgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEF2ZXN0YW4gc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEF2ZXN0YW4uCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQXZlc3RhbiBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBBdmVzdGFuIGRhdGEuCisKKzIwMTctMDUtMDIgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3RydWV0eXBlXSBNYWtlIGBJVVAnIGd2YXIgZGVsdGFzIGRvIHRoZSBzYW1lIGFzIEFwcGxlICgjNTA4MzIpLgorCisJV2hlbiBwb2ludHMgYXJlIG5vdCB0b3VjaGVkIGJ5IGd2YXIgaW50ZXJwb2xhdGlvbiBkZWx0YXMsIEZyZWVUeXBlCisJZ2F2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCByZXN1bHQgdGhhbiBBcHBsZSdzIENvcmVUZXh0LgorCisJVGhlIE9wZW5UeXBlIHdvcmtpbmcgZ3JvdXAgd2lsbCB1cGRhdGUgdGhlIHNwZWNpZmljYXRpb24gdG8gZG9jdW1lbnQKKwl0aGUgZm9sbG93aW5nIGJlaGF2aW91cjogSWYgdGhlIHR3byBwb2ludHMgd2l0aCBkZWx0YXMgdG8gdGhlIGBsZWZ0JworCWFuZCBgcmlnaHQnIG9mIHRoZSB1bnRvdWNoZWQgcG9pbnQgaGF2ZSB0aGUgc2FtZSBjb29yZGluYXRlLCB0aGVuCisJdGhlIGluZmVycmVkIGRlbHRhIGZvciB0aGUgdW50b3VjaGVkIHBvaW50IHNob3VsZCBiZSB6ZXJvLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9kZWx0YV9pbnRlcnBvbGF0ZSk6IEltcGxlbWVudCBuZXcKKwliZWhhdmlvdXIuCisKKzIwMTctMDUtMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBSZW1vdmUgYHNsaWdodCcgYXV0by1oaW50IG1vZGUgYWdhaW4uCisKKwlBIHBvbGwgb24gZnJlZXR5cGUtZGV2ZWwgZmF2b3VyZWQgY2hhbmdlcyBkaXJlY3RseSBhcHBsaWVkIHRvCisJYGxpZ2h0Jy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9MT0FEX1RBUkdFVF9TTElHSFQsCisJRlRfUkVOREVSX01PREVfU0xJR0hUKTogUmVtb3ZlZC4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX2hpbnRzX2luaXQpLCBzcmMvYXV0b2ZpdC9hZmxhdGluLmMKKwkoYWZfbGF0aW5faGludHNfaW5pdCksIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMKKwkoYWZfbGF0aW4yX2hpbnRzX2luaXQpOiBSZXZlcnQgY2hhbmdlIGZyb20gMjAxNy0wNC0yMi4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpIFJlbW92ZSByZWZlcmVuY2VzIHRvCisJRlRfUkVOREVSX01PREVfU0xJR0hULgorCVtBRl9DT05GSUdfT1BUSU9OX1RUX1NJWkVfTUVUUklDU106IEVuYWJsZSBUcnVlVHlwZS1saWtlIG1ldHJpY3MKKwl1bmNvbmRpdGlvbmFsbHkuCisKKwkqIHNyYy9iYXNlL2Z0YWR2YW5jLmMgKExPQURfQURWQU5DRV9GQVNUX0NIRUNLKTogUmV2ZXJ0IGNoYW5nZSBmcm9tCisJMjAxNy0wNC0yMi4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX0xvYWRfR2x5cGgpOiBSZXZlcnQgY2hhbmdlIGZyb20gMjAxNy0wNC0yMi4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAocHNfaGludHNfYXBwbHkpOiBSZXZlcnQgY2hhbmdlIGZyb20KKwkyMDE3LTA0LTIyLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXIpOiBSZXZlcnQgY2hhbmdlIGZyb20KKwkyMDE3LTA0LTIyLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTctMDQtMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBGaXggbWV0cmljcyBjb21wdXRhdGlvbi4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkgTWFya3VzIFRyaXBwZWxzZG9yZiA8bWFya3VzQHRyaXBwZWxzZG9yZi5kZT4gYW5kCisJTmlrb2xhdXMgV2F4d2VpbGVyIDxtYWRpZ2Vuc0BnbWFpbC5jb20+LgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfUmVxdWVzdF9TaXplKTogVHJpZ2dlciByZWNvbXB1dGF0aW9uIG9mCisJYXV0by1oaW50ZXIgbWV0cmljcy4gIFdpdGhvdXQgdGhpcyBjaGFuZ2UsIG11bHRpcGxlIHNpemUgY2hhbmdpbmcKKwljYWxscyBmb3IgYSBzaW5nbGUgZmFjZSBmYWlsLgorCisyMDE3LTA0LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3JlcXVlc3QpOiBQcm9wZXJseSBjaGVjayBgZXJyb3InLgorCisJUmVwb3J0ZWQgYnkgRWFybmVzdGx5IDx6aWJlb25AZ29vZ2xlbWFpbC5jb20+IGluCisKKwkgIGh0dHBzOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxNy0wNC9tc2cwMDAzMS5odG1sCisKKzIwMTctMDQtMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUludHJvZHVjZSBBRl9DT05GSUdfT1BUSU9OX1RUX1NJWkVfTUVUUklDUyBjb25maWd1cmF0aW9uIG9wdGlvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAorCShBRl9DT05GSUdfT1BUSU9OX1RUX1NJWkVfTUVUUklDUyk6IE5ldyBvcHRpb24sIGNvbW1lbnRlZCBvdXQgYnkKKwlkZWZhdWx0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nbHlwaCk6IFVzZQorCUFGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTIHRvIGd1YXJkIHRoZSBjb3JyZXNwb25kaW5nIGNvZGUuCisKKzIwMTctMDQtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9SZW5kZXJfTW9kZSk6IEZpeCBvcmRlci4KKworCVRoaXMgcmV0YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCisJTm90ZWQgYnkgQWxleGVpLgorCisyMDE3LTA0LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIERvIGxpbmVhciBzY2FsaW5nIGZvciBGVF9MT0FEX05PX0hJTlRJTkcgKCM1MDQ3MCkuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuaCAoVFRfU2l6ZVJlYyk6IEFkZCBmaWVsZCBgaGludGVkX21ldHJpY3MnIHRvCisJaG9sZCBoaW50ZWQgbWV0cmljcy4KKwlNYWtlIGBtZXRyaWNzJyBhIHBvaW50ZXIgc28gdGhhdCBgdHRfZ2x5cGhfbG9hZCcgY2FuIGVhc2lseSBzd2l0Y2gKKwliZXR3ZWVuIG1ldHJpY3MuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3JlcXVlc3QpOiBVcGRhdGVkLgorCSh0dF9nbHlwaF9sb2FkKTogVXNlIHRvcC1sZXZlbCBtZXRyaWNzIGlmIEZUX0xPQURfTk9fSElOVElORyBpcworCXVzZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX0hpbnRfR2x5cGgsIFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLAorCVRUX1Byb2Nlc3NfQ29tcG9zaXRlX0NvbXBvbmVudCwgbG9hZF90cnVldHlwZV9nbHlwaCwKKwljb21wdXRlX2dseXBoX21ldHJpY3MsIFRUX0xvYWRfR2x5cGgpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfTG9hZF9Db250ZXh0KTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9zaXplX3Jlc2V0KTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0c3VicGl4LmMgKHNwaF9zZXRfdHdlYWtzKTogVXBkYXRlZC4KKworMjAxNy0wNC0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIG5ldyBgc2xpZ2h0JyBhdXRvLWhpbnRpbmcgbW9kZS4KKworCVRoaXMgbW9kZSB1c2VzIGZyYWN0aW9uYWwgYWR2YW5jZSB3aWR0aHMgYW5kIGRvZXNuJ3Qgc2NhbGUgZ2x5cGhzCisJaG9yaXpvbnRhbGx5LCBvbmx5IGFwcGx5aW5nIHZlcnRpY2FsIHNjYWxpbmcgYW5kIGhpbnRpbmcuCisKKwlBdCB0aGUgc2FtZSB0aW1lLCB0aGUgYmVoYXZpb3VyIG9mIHRoZSBgbGlnaHQnIGF1dG8taGludGVyIGdldHMKKwlyZXN0b3JlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogQm90aCB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbAorCXNjYWxpbmcgaXMgYWdhaW4gYmFzZWQgb24gcm91bmRlZCBtZXRyaWNzIHZhbHVlcyAodGhpcyB3YXMgY2hhbmdlZAorCWluIGEgY29tbWl0IGZyb20gMjAxNy0wMy0zMCBhcyBhIHNpZGUgZWZmZWN0KS4gIFRvIGJlIG1vcmUgcHJlY2lzZSwKKwl0aGUgYmVoYXZpb3VyIGlzIHJlc3RvcmVkIGZvciBUcnVlVHlwZSBmb250cyBvbmx5OyBmb3Igb3RoZXIgZm9udAorCWZvcm1hdHMgbGlrZSBUeXBlIDEsIHRoaXMgaXMgYSBuZXcgZmVhdHVyZSBvZiB0aGUgYGxpZ2h0JyBoaW50aW5nCisJbW9kZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9MT0FEX1RBUkdFVF9TTElHSFQpOiBOZXcgbWFjcm8uCisJKEZUX1JFTkRFUl9NT0RFX1NMSUdIVCk6IE5ldyByZW5kZXIgbW9kZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfU2l6ZV9JbnRlcm5hbFJlYyk6IEFkZAorCWBhdXRvaGludF9tb2RlJyBhbmQgYGF1dG9oaW50X21ldHJpY3MnIGZpZWxkcy4KKworCSogc3JjL2F1dG9maXQvYWZjamsuYyAoYWZfY2prX2hpbnRzX2luaXQpLCBzcmMvYXV0b2ZpdC9hZmxhdGluLmMKKwkoYWZfbGF0aW5faGludHNfaW5pdCksIHNyYy9hdXRvZml0L2FmbGF0aW4yIChhZl9sYXRpbjJfaGludHNfaW5pdCk6CisJVXBkYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZsb2FkZXIuYyAoYWZfbG9hZGVyX2VtYm9sZGVuX2dseXBoX2luX3Nsb3QpOiBVc2UKKwlgYXV0b2hpbnRfbWV0cmljcycuCisJKGFmX2xvYWRlcl9sb2FkX2dseXBoKTogcy9pbnRlcm5hbC9zbG90X2ludGVybmFsLy4KKwlJbml0aWFsaXplIGBhdXRvaGludF9tZXRyaWNzJyBhbmQgYGF1dG9oaW50X21vZGUnIGRlcGVuZGluZyBvbgorCWN1cnJlbnQgYXV0by1oaW50IG1vZGUuCisJVXNlIGBhdXRvaGludF9tZXRyaWNzJy4KKwlVcGRhdGVkLgorCisJKiBzcmMvYmFzZS9mdGFkdmFuYy5jIChMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9Mb2FkX0dseXBoKTogVXBkYXRlZC4KKwkoRlRfTmV3X1NpemUpOiBBbGxvY2F0ZSBgaW50ZXJuYWwnIG9iamVjdC4KKworCSogc3JjL3BzaGludGVyL3BzaGFsZ28uYyAocHNfaGludHNfYXBwbHkpOiBVcGRhdGVkLgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmMgKGZ0X3Ntb290aF9yZW5kZXIpOiBVcGRhdGVkLgorCisyMDE3LTA0LTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbnRyb2R1Y2UgYEZUX1NpemVfSW50ZXJuYWxSZWMnIHN0cnVjdHVyZS4KKworCVdlIGFyZSBnb2luZyB0byBleHRlbmQgdGhpcyBsYXRlciBvbi4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCAoRlRfU2l6ZV9JbnRlcm5hbFJlYyk6IE5ldworCXN0cnVjdHVyZSB3aXRoIGEgc2luZ2xlIGZpZWxkIGBtb2R1bGVfZGF0YScuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9OZXdfU2l6ZSk6IEFsbG9jYXRlIGBpbnRlcm5hbCcgZmllbGQgb2YKKwlgRlRfU2l6ZScgc3RydWN0dXJlLgorCisJKiBzcmMvY2ZmL2NmZmdsb2FkLmMgKGNmZl9idWlsZGVyX2luaXQsIGNmZl9kZWNvZGVyX3ByZXBhcmUpOiBVc2UKKwlgc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhJyBpbnN0ZWFkIG9mIGBzaXplLT5pbnRlcm5hbCcuCisKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfc2l6ZV9kb25lKTogRGVhbGxvY2F0ZSBgbW9kdWxlX2RhdGEnLgorCShjZmZfc2l6ZV9pbml0LCBjZmZfc2l6ZV9zZWxlY3QsIGNmZl9zaXplX3JlcXVlc3QpOiBVc2UKKwlgc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhJyBpbnN0ZWFkIG9mIGBzaXplLT5pbnRlcm5hbCcuCisKKwkqIHNyYy9jaWYvY2lkb2Jqcy5jIChjaWRfc2l6ZV9kb25lLCBjaWRfc2l6ZV9pbml0LAorCWNpZF9zaXplX3JlcXVlc3QpOiBVc2UgYHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YScgaW5zdGVhZCBvZgorCWBzaXplLT5pbnRlcm5hbCcuCisKKwkqIHNyYy9wc2F1eC9wc29ianMuYyAodDFfYnVpbGRlcl9pbmkpOiBVc2UKKwlgc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhJyBpbnN0ZWFkIG9mIGBzaXplLT5pbnRlcm5hbCcuCisKKwkqIHNyYy90eXBlMS90MW9ianMuYyAoVDFfU2l6ZV9Eb25lLCBUMV9TaXplX0luaXQsIFQxX1NpemVfUmVxdWVzdCk6CisJVXNlIGBzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGEnIGluc3RlYWQgb2YgYHNpemUtPmludGVybmFsJy4KKworMjAxNy0wNC0yMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmg6IFJlbW92ZSB1bnVzZWQgZ3VhcmRzIGFuZCBkZWNsYXJhdGlvbi4KKworMjAxNy0wNC0xNiAgSGluLVRhayBMZXVuZyAgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCUZpeCB0cmFjaW5nIG1lc3NhZ2VzLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4LAorCUZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQsIEZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIpOiBQcmludAorCWNvcnJlY3QgZnVuY3Rpb24gbmFtZS4KKworMjAxNy0wNC0wOCAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgT2xkIFR1cmtpYyBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgT2xkIFR1cmtpYy4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBPbGQgVHVya2ljIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBPbGQgVHVya2ljIGRhdGEuCisKKzIwMTctMDQtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEdvdGhpYyBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgR290aGljLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEdvdGhpYyBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgR290aGljIGRhdGEuCisKKzIwMTctMDQtMDggIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEN5cHJpb3Qgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEN5cHJpb3QuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgQ3lwcmlvdCBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgQ3lwcmlvdCBkYXRhLgorCisyMDE3LTA0LTA4ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBEZXNlcmV0IHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBEZXNlcmV0LgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIERlc2VyZXQgc3RhbmRhcmQgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIERlc2VyZXQgZGF0YS4KKworMjAxNy0wNC0wNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZpeCBpbnZhbGlkIGNoYXJhY3RlciByYW5nZSBkZXNjcmlwdGlvbiAoIzUwNzQ1KS4KKworCUFsc28gcmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MTAzNAorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jIChhZl9nbGFnX25vbmJhc2VfdW5pcmFuZ2VzKTogRml4IHR5cG8gaW4KKwlyZWNlbnQgY29tbWl0LgorCisyMDE3LTA0LTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZnRmdXp6ZXJdIEZpeCBjbGFuZyB3YXJuaW5ncy4KKworCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjIChMTFZNRnV6emVyVGVzdE9uZUlucHV0KTogQWRkCisJY2FzdHMuCisKKzIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIExpc3Ugc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIExpc3UuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgTGlzdSBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgTGlzdSBkYXRhLgorCisyMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBPc2FnZSBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgT3NhZ2UuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgT3NhZ2Ugc3RhbmRhcmQgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIE9zYWdlIGRhdGEuCisKKzIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIEdsYWdvbGl0aWMgc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEdsYWdvbGl0aWMuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgR2xhZ29saXRpYyBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgR2xhZ29saXRpYyBkYXRhLgorCisyMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZworCisJW2F1dG9maXRdIEFkZCBzdXBwb3J0IGZvciBUYWkgVmlldCBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgVGFpIFZpZXQuCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuYywgc3JjL2F1dG9maXQvYWZibHVlLmg6IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMvYXV0b2ZpdC9hZnNjcmlwdC5oOiBBZGQgVGFpIFZpZXQgc3RhbmRhcmQgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZyYW5nZXMuYywgc3JjL2F1dG9maXQvYWZzdHlsZXMuaDogQWRkIFRhaSBWaWV0IGRhdGEuCisKKzIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnCisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIFRpZmluYWdoIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBUaWZpbmFnaC4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBUaWZpbmFnaCBzdGFuZGFyZCBjaGFyYWN0ZXJzLgorCisJKiBzcmMvYXV0b2ZpdC9hZnJhbmdlcy5jLCBzcmMvYXV0b2ZpdC9hZnN0eWxlcy5oOiBBZGQgVGlmaW5hZ2ggZGF0YS4KKworMjAxNy0wNC0wNiAgU2FzY2hhIEJyYXdlciAgPHNhc2NoYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmcKKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgTidLbyBzY3JpcHQuCisKKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQ6IEFkZCBibHVlIHpvbmUgZGF0YSBmb3IgTidLby4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBOJ0tvIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBOJ0tvIGRhdGEuCisKKzIwMTctMDQtMDYgIFNhc2NoYSBCcmF3ZXIgIDxzYXNjaGFAZ29vZ2xlLmNvbT4KKworCVthdXRvZml0XSBBZGQgc3VwcG9ydCBmb3IgQWRsYW0gc2NyaXB0LgorCisJKiBzcmMvYXV0b2ZpdC9hZmJsdWUuZGF0OiBBZGQgYmx1ZSB6b25lIGRhdGEgZm9yIEFkbGFtLgorCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogQWRkIEFkbGFtIHN0YW5kYXJkIGNoYXJhY3RlcnMuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBBZGxhbSBkYXRhLgorCisyMDE3LTA0LTA2ICBTYXNjaGEgQnJhd2VyICA8c2FzY2hhQGdvb2dsZS5jb20+CisKKwlbYXV0b2ZpdF0gQWRkIHN1cHBvcnQgZm9yIE9sIENoaWtpIHNjcmlwdC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdDogQWRkIGJsdWUgem9uZSBkYXRhIGZvciBPbCBDaGlraS4KKwkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9hdXRvZml0L2Fmc2NyaXB0Lmg6IEFkZCBPbCBDaGlraSBzdGFuZGFyZCBjaGFyYWN0ZXIuCisKKwkqIHNyYy9hdXRvZml0L2FmcmFuZ2VzLmMsIHNyYy9hdXRvZml0L2Fmc3R5bGVzLmg6IEFkZCBPbCBDaGlraSBkYXRhLgorCisyMDE3LTA0LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEF2b2lkIHJlZXhlY3V0aW9uIG9mIGBmcGdtJyBhbmQgYHByZXAnIGluIGNhc2Ugb2YgZXJyb3IuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD05ODEKKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oIChGVF9FcnJfREVGX0luX0dseWZfQnl0ZWNvZGUpOiBOZXcKKwllcnJvciBjb2RlLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0ZERUYsIEluc19JREVGKTogUHJvaGliaXQgZXhlY3V0aW9uCisJb2YgdGhlc2UgdHdvIG9wY29kZXMgaW4gYGdseWYnIGJ5dGVjb2RlLgorCShUVF9SdW5JbnMpOiBEb24ndCBlbmZvcmNlIHJlZXhlY3V0aW9uIG9mIGBmcGdtJyBhbmQgYHByZXAnIGJ5dGVjb2RlCisJaW4gY2FzZSBvZiBlcnJvciBzaW5jZSBmdW5jdGlvbiB0YWJsZXMgY2FuIG5vIGxvbmdlciBiZSBtb2RpZmllZAorCShkdWUgdG8gdGhlIGNoYW5nZXMgaW4gYEluc19GREVGJyBhbmQgYEluc19JREVGJykuICBUaGlzIGNoYW5nZSBjYW4KKwllbm9ybW91c2x5IHNwZWVkIHVwIGhhbmRsaW5nIG9mIGJyb2tlbiBmb250cy4KKworMjAxNy0wNC0wMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2F1dG9maXRdIERpc2FibGUgbWV0cmljcyBhZGp1c3RtZW50IGZvciBgRlRfTE9BRF9UQVJHRVRfTENEJy4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19pbml0KTogVXBkYXRlZC4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMgKGFmX2xhdGluMl9oaW50c19pbml0KTogRGl0dG8uCisKKzIwMTctMDQtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYzogSW5jbHVkZSBGVF9DT05GSUdfQ09ORklHX0guCisKKwlPdGhlcndpc2UgRlRfVUlOVF9UT19QT0lOVEVSIG1pZ2h0IG5vdCBiZSBkZWZpbmVkLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBBbGV4ZWkuCisKKzIwMTctMDMtMzEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVthdXRvZml0XSBEaXNhYmxlIHN0ZW0gYWRqdXN0bWVudCBmb3IgYEZUX0xPQURfVEFSR0VUX0xDRCcuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfTE9BRF9UQVJHRVRfTENEKTogRG9jdW1lbnQgaXQuCisJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludHNfaW5pdCk6IFVwZGF0ZWQuCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2luaXQpOiBEaXR0by4KKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4yLmMgKGFmX2xhdGluMl9oaW50c19pbml0KTogRGl0dG8uCisKKzIwMTctMDMtMzEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9mb250X2xvYWQpOiBJbXByb3ZlIGZpeCBmcm9tIDIwMTctMDEtMDQuCisKKwlBbGxvdyBDRkZzIGNvbnRhaW5pbmcgYSBzaW5nbGUgZm9udCB0byBoYXZlIGFuIGVtcHR5IGZvbnQgbmFtZS4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkg5by15L+K6IqdIDw0MTgwOTI2MjVAcXEuY29tPiBpbgorCisJICBodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTctMDMvbXNnMDAwNzQuaHRtbAorCisyMDE3LTAzLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuaCAoQ0ZGMl9ERUZBVUxUX1NUQUNLKTogU2V0IHRvIDUxMyBhbHNvLgorCisJUmVxdWVzdGVkIGJ5IERhdmUgQXJub2xkLgorCiAyMDE3LTAzLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKIAlbdHJ1ZXR5cGVdIEZpeCBIVkFSIGFuZCBWVkFSIGhhbmRsaW5nICgjNTA2NzgpLgpAQCAtMTAzLDcgKzM3ODMsNyBAQAogCiAJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2l6ZV9zZWxlY3QpOiBzL21ldHJpY3Mvc2l6ZV9tZXRyaWNzLy4KIAotCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAodHRfZ2V0X21ldHJpY3NfaW5jcl9vdmVycmlkcywKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKHR0X2dldF9tZXRyaWNzX2luY3Jfb3ZlcnJpZGVzLAogCWNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IHMvbWV0cmljcy9pbmNyX21ldHJpY3MvLgogCShsb2FkX3NiaXRfaW1hZ2UpOiBzL21ldHJpY3Mvc2JpdF9tZXRyaWNzLy4KIApAQCAtNDAzLDggKzQwODMsOCBAQAogCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NzM4CiAKIAkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IFdoaWxlIHNldHRpbmcgbnVtYmVyIG9mCi0JaW5zdGFuY2VzIHRvIHplcm8gZm9yIGBDRkYnIGZvbnRzIHRhYmxlLCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBgZ2x5ZicKLQlwcmVzZW50IGFsc28gKHdoaWNoIGdldHMgcHJpb3JpdHkpLgorCWluc3RhbmNlcyB0byB6ZXJvIGZvciBgQ0ZGJyBmb250cyB0YWJsZSwgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8KKwlgZ2x5ZicgdGFibGUgcHJlc2VudCBhbHNvICh3aGljaCBnZXRzIHByaW9yaXR5KS4KIAogMjAxNy0wMy0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgogCkBAIC00NDcsNyArNDEyNyw3IEBACiAKIAkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNlYXJjaF9uYW1lX2lkKTogUmVuYW1lIHRvLi4uCiAJKHNmbnRfZ2V0X25hbWVfaWQpOiAuLi4gdGhpcy4KLQkoc2ZudF9nZXRfcHNfbmFtZSwgc2ZudF9pbnRlcmZhY2UpOiBVZHBhdGVkLgorCShzZm50X2dldF9wc19uYW1lLCBzZm50X2ludGVyZmFjZSk6IFVwZGF0ZWQuCiAKIDIwMTctMDMtMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KIApAQCAtNjM0LDcgKzQzMTQsNyBAQAogCShGVF9MaWJyYXJ5UmVjKTogVXBkYXRlZC4KIAogCSogc3JjL2Jhc2UvZnRsY2RmaWwuYyAoX2Z0X2xjZF9maWx0ZXJfZmlyKTogUmVuYW1lZCB0by4uLgotCShmdF9sY2RfZmlsdGVyX2Rpcik6IC4uLiB0aGlzIGJhc2UgZnVuY3Rpb24uCisJKGZ0X2xjZF9maWx0ZXJfZmlyKTogLi4uIHRoaXMgYmFzZSBmdW5jdGlvbi4KIAlVcGRhdGVkLgogCShfZnRfbGNkX2ZpbHRlcl9sZWdhY3kpOiBVcGRhdGVkLgogCShGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMsIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKTogVXBkYXRlZC4KQEAgLTg3Myw3ICs0NTUzLDcgQEAKIAkqIGluY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaCAoRlRfU2ZudExhbmdUYWcpOiBOZXcgc3RydWN0dXJlLgogCShGVF9HZXRfU2ZudF9MYW5nVGFnKTogTmV3IGRlY2xhcmF0aW9uLgogCi0JKiBzcmMvYmFzZS9mdHNuYW1lcy5jIChGVF9HZXRfU2ZudF9MYW5nVGFnKTogTmV3IGZ1bnRpb24uCisJKiBzcmMvYmFzZS9mdHNuYW1lcy5jIChGVF9HZXRfU2ZudF9MYW5nVGFnKTogTmV3IGZ1bmN0aW9uLgogCiAJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCiAKQEAgLTkxMyw3ICs0NTkzLDcgQEAKIAkoVFRfTmFtZV9Db252ZXJ0RnVuYyk6IFRoaXMuCiAJKHR0X2ZhY2VfZ2V0X25hbWUpOiBVcGRhdGVkLgogCi0JKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX25hbWUsIHR0X2ZhY2VfZnJlZV9uYW1lcyk6CisJKiBzcmMvc2ZudC90dGxvYWQuYyAodHRfZmFjZV9sb2FkX25hbWUsIHR0X2ZhY2VfZnJlZV9uYW1lKToKIAlVcGRhdGVkLgogCiAyMDE3LTAxLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CkBAIC0xMzY1LDIwOTkgKzUwNDUsMTAgQEAKIAkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2h2YXIpOiBDaGVjayBheGlzIGNvdW50LgogCShmdF92YXJfbG9hZF9hdmFyKTogRml4IHRyYWNpbmcgbWVzc2FnZS4KIAotMjAxNi0xMi0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBWZXJzaW9uIDIuNy4xIHJlbGVhc2VkLgotCT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotCi0JVGFnIHNvdXJjZXMgd2l0aCBgVkVSLTItNy0xJy4KLQotCSogZG9jcy9WRVJTSU9OLlRYVDogQWRkIGVudHJ5IGZvciB2ZXJzaW9uIDIuNy4xLgotCi0JKiBSRUFETUUsIEphbWZpbGUgKFJlZkRvYyksIGJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luZG93cy92YzIwMDgvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvaiwKLQlidWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcCwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwLAotCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sLAotCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvZnJlZXR5cGUudmNwcm9qLAotCWJ1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWw6IHMvMi43LzIuNy4xLywgcy8yNy8yNzEvLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZSRUVUWVBFX1BBVENIKTogU2V0IHRvIDEuCi0KLQkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcgKHZlcnNpb25faW5mbyk6IFNldCB0byAxOTowOjEzLgotCSogQ01ha2VMaXN0cy50eHQgKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMS4KLQotMjAxNi0xMi0zMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Z0ZnV6emVyXSBSZXBsYWNlIGByYW5kJyB3aXRoIGFuIHhvcnNoaWZ0IGFsZ29yaXRobS4KLQotCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjOiBEb24ndCBpbmNsdWRlIGBzdGRsaWIuaCcuCi0JKFJhbmRvbSk6IEltcGxlbWVudCBhbmQgdXNlIGEgMzJiaXQgYHhvcnNoaWZ0JyBhbGdvcml0aG0uCi0KLTIwMTYtMTItMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtmdGZ1enplcl0gUmVzdHJpY3QgbnVtYmVyIG9mIHRlc3RlZCBiaXRtYXAgc3RyaWtlcy4KLQotCU1hbGZvcm1lZCBmb250cyBvZnRlbiBoYXZlIGxhcmdlIHZhbHVlcyBmb3IgdGhlIG51bWJlciBvZiBiaXRtYXAKLQlzdHJpa2VzLCBhbmQgRnJlZVR5cGUgZG9lc24ndCBjaGVjayB0aGUgdmFsaWRpdHkgb2YgYWxsIGJpdG1hcAotCXN0cmlrZXMgaW4gYWR2YW5jZS4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTM1MwotCi0JKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2M6IEluY2x1ZGUgYHN0ZGxpYi5oJyBmb3IgYHJhbmQnLgotCShSYW5kb20pOiBTbWFsbCBjbGFzcyB0byBwcm92aWRlIG4gcmFuZG9tbHkgc2VsZWN0ZWQgbnVtYmVycwotCSh3aXRob3V0IHJlcGV0aXRpb24pIG91dCBvZiB0aGUgdmFsdWUgc2V0IFsxLE5dLgotCShMTFZNRnV6emVyVGVzdE9uZUlucHV0KTogVXNlIGl0IHRvIHRlc3Qgb25seSB1cCB0byAxMCBiaXRtYXAKLQlzdHJpa2VzLgotCi0yMDE2LTEyLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIFZhcmlhdGlvbiBmb250IEFQSSBzdGFiaWxpdHkgaXNzdWVzLgotCi0JTWFrZSBzb21lIGZ1bmN0aW9ucyB3b3JrIGJlZm9yZSBhIGNhbGwgdG8gYFRUX1NldF9NTV9CbGVuZCcuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2hhZHZhbmNlX2FkanVzdCk6IEV4aXQgaW1tZWRpYXRlbHkgaWYKLQl3ZSBkb24ndCBibGVuZC4KLQkoVFRfR2V0X01NX0JsZW5kLCBUVF9HZXRfVmFyX0Rlc2lnbik6IFJldHVybiBkZWZhdWx0IHZhbHVlcyBpZiB3ZQotCWRvbid0IGJsZW5kLgotCi0yMDE2LTEyLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBDaGVjayBheGlzIGRhdGEuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zNDgKLQotMjAxNi0xMi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBUcmFjaW5nIGZpeGVzLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9oYWR2YW5jZV9hZGp1c3QpOiBFbWl0IGNvcnJlY3QKLQlpbmZvcm1hdGlvbi4KLQkoVFRfU2V0X1Zhcl9EZXNpZ24pOiBGaXggdHlwby4KLQkoVFRfR2V0X1Zhcl9EZXNpZ24pOiBGaXggdHlwb3MuCi0KLTIwMTYtMTItMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSovKjogVXNlIGAwLjVmJyBmb3IgdHJhY2luZyAxNi4xNiBudW1iZXJzLgotCi0yMDE2LTEyLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbcGNmXSBQcm90ZWN0IGFnYWluc3QgZ3ppcCBib21icy4KLQotCUZpeCBzdWdnZXN0ZWQgYnkgS29zdHlhOyByZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zNDUKLQotCSogc3JjL3BjZi9wY2ZyZWFkLmMgKHBjZl9yZWFkX1RPQyk6IExpbWl0IG51bWJlciBvZiBUT0MgZW50cmllcyB0bwotCTEwMjQuCi0KLTIwMTYtMTItMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtwc25hbWVzXSBPbmx5IGRlY2xhcmUsIG5vdCBkZWZpbmUsIGRhdGEgaW4gYHBzdGFibGVzLmgnICgjNDk5NDkpLgotCi0JUGRmaXVtIGluY2x1ZGVzIGBwc3RhYmxlcy5oJyBhIHNlY29uZCB0aW1lOyBtb3ZpbmcgdGhlIGRlZmluaXRpb24KLQlmcm9tIGBwc3RhYmxlcy5oJyB0byBgcHNtb2R1bGUuYycgc2F2ZXMgbW9yZSB0aGFuIDYwa0J5dGUgZGF0YQotCXNlZ21lbnQgc3BhY2UgZm9yIHRoaXMgY2FzZS4KLQotCSogc3JjL3Rvb2xzL2dsbmFtZXMucHkgKFN0cmluZ1RhYmxlOjpkdW1wLAotCVN0cmluZ1RhYmxlOjpkdW1wX3N1Ymxpc3QsIGR1bXBfZW5jb2RpbmcsIGR1bXBfYXJyYXkpOiBFbWl0Ci0JYWRkaXRpb25hbCBjb2RlIHRvIG9ubHkgZGVmaW5lIHRhYmxlcyBpZiBgREVGSU5FX1BTX1RBQkxFUycgaXMgc2V0LgotCi0JKiBzcmMvcHNuYW1lcy9wc3RhYmxlcy5oOiBSZWdlbmVyYXRlZC4KLQkqIHNyYy9wc25hbWVzL3BzbW9kdWxlLmMgKERFRklORV9QU19UQUJMRVMpOiBEZWZpbmUuCi0KLTIwMTYtMTItMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIENhdGNoIGBibGVuZCcgb3AgaW4gbm9uLXZhcmlhbnQgZm9udHMuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zMzQKLQotCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2NtZEJMRU5EPjogRG9uJ3QKLQlhbGxvdyBgYmxlbmQnIG9wIGZvciBub24tdmFyaWFudCBmb250cy4KLQotMjAxNi0xMi0yOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gQmV0dGVyIGNoZWNrIG9mIG51bWJlciBvZiBibGVuZHMuCi0KLQkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRCTEVORD4sCi0Jc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfYmxlbmQpOiBDb21wYXJlIG51bWJlciBvZiBibGVuZHMgd2l0aAotCXN0YWNrIHNpemUuCi0KLTIwMTYtMTItMjcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCURvY3VtZW50YXRpb24gdXBkYXRlcy4KLQotCSogZG9jcy9DSEFOR0VTOiBBZGQgbWlzc2luZyBpbmZvcm1hdGlvbi4KLQotCSogZG9jcy9mb3JtYXRzLnR4dDogUmV3cml0dGVuIGFuZCB1cGRhdGVkLgotCi0yMDE2LTEyLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGUsIHR5cGUxXSBJbXBsZW1lbnQgYEZUX0dldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzJy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X1Zhcl9EZXNpZ24pOiBJbXBsZW1lbnQuCi0JKFRUX1NldF9WYXJfRGVzaWduKTogRml4IHRyYWNpbmcuCi0KLQkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfR2V0X1Zhcl9EZXNpZ24pOiBJbXBsZW1lbnQuCi0KLTIwMTYtMTItMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2hkbXgpOiBJZ25vcmUgYHZlcnNpb24nLgotCi0JUHJvYmxlbSByZXBvcnRlZCBieSDlvLXkv4roip0gPDQxODA5MjYyNUBxcS5jb20+LgotCi0yMDE2LTEyLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX2xvYWRfc2JpdCk6IEFsbG93IG1vcmUgdmVyc2lvbiB2YWx1ZXMuCi0KLQlTb21lIGZvbnRzIHNlZW0gdG8gaGF2ZSB0aGUgYHZlcnNpb24nIGZpZWxkIGluIHRoZSB3cm9uZyBieXRlIG9yZGVyLgotCi0JUHJvYmxlbSByZXBvcnRlZCBieSDlvLXkv4roip0gPDQxODA5MjYyNUBxcS5jb20+LgotCi0yMDE2LTEyLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfbG9hZF9sb2NhKTogU2FuaXRpemUgdGFibGUgbGVuZ3RoLgotCi0JVGhpcyB0cml2aWFsIGZpeCBhbGxvd3MgdXMgdG8gYWNjZXB0IG1vcmUgZm9udHMuCi0KLQlQcm9ibGVtIHJlcG9ydGVkIGJ5IOW8teS/iuiKnSA8NDE4MDkyNjI1QHFxLmNvbT4uCi0KLTIwMTYtMTItMjQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogRml4IHRyYWNpbmcuCi0KLTIwMTYtMTItMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogQ01ha2VMaXN0cy50eHQ6IE1ha2UgaXQgd29yayB3aXRoIGNtYWtlIDIuOC4xMS4yICgjNDk5MDkpLgotCi0yMDE2LTEyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlFbnN1cmUgdXNlZCBwcmVwcm9jZXNzb3Igc3ltYm9scyBhcmUgZGVmaW5lZCAoIzQ5NzkwKS4KLQotCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sIGJ1aWxkcy92bXMvZnRjb25maWcuaCwKLQlpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOiBDaGVjayBgX19HTlVDX18nLCBgX19JQk1DX18nLAotCWFuZCBgX19TVU5QUk9fQycgY29ycmVjdGx5LgotCi0yMDE2LTEyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9iYXNlL2Z0cmZvcmsuYyAoRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMpOiBDaGVjayBgY291bnQnLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzA4Ci0KLTIwMTYtMTItMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIGB2c2luZGV4JyBhbmQgYGJsZW5kJyB2YWx1ZXMuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zMDUKLQotCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKSA8Y2YyX2NtZFZTSU5ERVgsCi0JY2YyX2NtZEJMRU5EPjogSW1wbGVtZW50IGl0LgotCi0yMDE2LTEyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbZnRmdXp6ZXJdIEFsd2F5cyB1c2UgQWRvYmUgQ0ZGIGVuZ2luZS4KLQotCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjIChGVF9HbG9iYWw6OkZUX0dsb2JhbCk6IEltcGxlbWVudAotCWl0LgotCi0yMDE2LTEyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogVGhpbmtvLgotCi0JSSBzaG91bGQgcmVhbGx5IHN0b3AgY29kaW5nIGxhdGUgaW4gdGhlIGV2ZW5pbmcuLi4KLQotCVRoYW5rcyBhZ2FpbiB0byBCZW4gZm9yIGNoZWNraW5nLgotCi0yMDE2LTEyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gU3VwcG9ydCB2YXJpYXRpb24gZm9udHMuCi0KLQkoVGhpcyBDaGFuZ2VMb2cgZW50cnkgd2FzIGFkZGVkIGxhdGVyIG9uLikKLQotCSogc3JjL2F1dG9maXQvYWZnbG9iYWwuYyAoYWZfZmFjZV9nbG9iYWxzX2ZyZWUpOiBSZW1vdmUgdXNlbGVzcwotCWNvZGUuCi0KLQkqIHNyYy9iYXNlL2Z0bW0uYyAoRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcywKLQkqIEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzLCBGVF9TZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMsCi0JRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyk6IEZpbmFsaXplCi0JYXV0by1oaW50ZXIgZGF0YSB0byBlbmZvcmNlIHJlY29tcHV0YXRpb24uICBOb3RlIHRoYXQgdGhpcyBpcyBhCi0JYnJ1dGUtZm9yY2UgbWV0aG9kIHdoaWNoIHNob3VsZCBiZSBpbXByb3ZlZC4KLQotMjAxNi0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IFRoaW5rby4KLQotCURvbid0IGFwcGx5IGRlbHRhcyB0d2ljZSBmb3Igbm9uLXBoYW50b20gcG9pbnRzLgotCi0JU3BvdHRlZCBieSBCZW4gV2FnbmVyLgotCi0yMDE2LTEyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmLCB0cnVldHlwZV0gQW5vdGhlciB0cnkgZm9yICM0OTgyOS4KLQotCSogc3JjL2NmZi9jZmZkcml2ci5jOiBEb24ndCBpbmNsdWRlCi0JYEZUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0gnLgotCShjZmZfZ2V0X2FkdmFuY2VzKTogVXNlIGB0dGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0Jy4KLQotCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X2dldF9hZHZhbmNlcyk6IFVzZQotCWB0dGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0Jy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgsCi0JbG9hZF90cnVldHlwZV9nbHlwaCk6IFVzZSBgdHRmYWNlLT52YXJpYXRpb25fc3VwcG9ydCcuCi0KLTIwMTYtMTItMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZSwgc2ZudF0gSW50cm9kdWNlIGZvbnQgdmFyaWF0aW9uIGZsYWdzIHRvIGBUVF9GYWNlJy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZBQ0VfRkxBR19WQVJfWFhYKToKLQlOZXcgbWFjcm9zIGRlc2NyaWJpbmcgYXZhaWxhYmxlIGZ1bmN0aW9uYWxpdHkgb2YgdmFyaW91cyBPcGVuVHlwZQotCXRhYmxlcyByZWxhdGVkIHRvIGZvbnQgdmFyaWF0aW9uLgotCShUVF9GYWNlKTogTmV3IGZpZWxkcyBgdmFyaWF0aW9uX3N1cHBvcnQnIGFuZCBgbXZhcl9zdXBwb3J0JywKLQlyZXBsYWNpbmcgYW5kIGV4dGVuZGluZyBgdXNlX2Z2YXInLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UsIHNmbnRfbG9hZF9mYWNlKTogVXNlCi0JYHZhcmlhdGlvbl9zdXBwb3J0Jy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX2xvYWRfaHZhcik6IFNldCBgdmFyaWF0aW9uX3N1cHBvcnQnCi0JZmllbGQuCi0JKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogVXBkYXRlZC4KLQotMjAxNi0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Jhc2VdIEltcHJvdmUgc2FuaXR5IGNoZWNrIGZvciBNYWMgcmVzb3VyY2VzICgjNDk4ODgpLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoTWFjX1JlYWRfc2ZudF9SZXNvdXJjZSk6IEFib3J0IGlmIGBybGVuJyBpcyBub3QKLQlwb3NpdGl2ZS4KLQotMjAxNi0xMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Jhc2VdIE1vcmUgc2FuaXR5IGNoZWNrcyBmb3IgTWFjIHJlc291cmNlcy4KLQotCVdlIHVzZQotCi0JICBodHRwczovL2dpdGh1Yi5jb20va3JlYXRpdmVrb3JwL2tzZmwvd2lraS9NYWNpbnRvc2gtUmVzb3VyY2UtRmlsZS1Gb3JtYXQKLQotCWFuZAotCi0JICBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vbGVnYWN5L2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9tYWMvcGRmL01vcmVNYWNpbnRvc2hUb29sYm94LnBkZiNwYWdlPTE1MQotCi0JYXMgcmVmZXJlbmNlcy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmggKEZUX1JGb3JrX1JlZik6IFVzZSBGVF9TaG9ydAotCWZvciBgcmVzX2lkJy4KLQotCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SYWNjZXNzX0dldF9IZWFkZXJJbmZvKTogRXh0cmFjdCBtYXAgbGVuZ3RoCi0JYW5kIHVzZSBpdCB0byBpbXByb3ZlIHNhbml0eSBjaGVja3MuCi0JRm9sbG93IHRoZSBzcGVjaWZpY2F0aW9uIG1vcmUgY2xvc2VseTtpbiBwYXJ0aWN1bGFyLCBhbGwgZGF0YSB0eXBlcwotCWFyZSBzaWduZWQsIG5vdCB1bnNpZ25lZC4KLQkoRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMpOiBGb2xsb3cgdGhlIHNwZWNpZmljYXRpb24gbW9yZSBjbG9zZWx5OwotCWluIHBhcnRpY3VsYXIsIGFsbCBkYXRhIHR5cGVzIGFyZSBzaWduZWQsIG5vdCB1bnNpZ25lZC4KLQlBZGQgc29tZSBzYW5pdHkgY2hlY2tzLgotCi0yMDE2LTEyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEltcHJvdmUgbG9naWMgZm9yIGdldHRpbmcgZmFzdCBhZHZhbmNlIHdpZHRocy4KLQotCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2FkdmFuY2VzKSwgc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKLQkodHRfZ2V0X2FkdmFuY2VzKTogVXNlIGBpc19kZWZhdWx0X2luc3RhbmNlJyBmb3IgdGVzdDsgdGhpcyBnZXRzCi0JcmVjb21wdXRlZCBhZnRlciBjaGFuZ2luZyBibGVuZCBjb29yZGluYXRlcy4KLQotMjAxNi0xMi0yMCAgQmVuIFdhZ25lciAgPGJ1bmdlbWFuQGdvb2dsZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IGxpbmVhciBtZXRyaWNzIG9mIEdYIHZhcmlhdGlvbiBmb250cyAoIzQ5ODI5KS4KLQotCVdoZW4gYXNraW5nIGZvciBhbiB1bmhpbnRlZCBub24tZGVmYXVsdCB2YXJpYXRpb25zLAotCWBsaW5lYXJWZXJ0QWR2YW5jZScgaXMgY3VycmVudGx5IHRoZSB2YWx1ZSBmcm9tIHRoZSBgaG10eCcgdGFibGUKLQlpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgdmFsdWUgYWZ0ZXIgYXBwbHlpbmcgdGhlIHZhcmlhdGlvbi4gIGBIVkFSJwotCXN1cHBvcnQgZml4ZXMgdGhpcywgYnV0IGZvbnRzIHdpbGwgZXhpc3Qgd2l0aG91dCB0aGF0IHRhYmxlIGFuZCB3aWxsCi0JbmVlZCBzYW5lIGZhbGxiYWNrLgotCi0JUHJvYmxlbSBhbHNvIHJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9za2lhL2lzc3Vlcy9kZXRhaWw/aWQ9NTkxNwotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Qcm9jZXNzX1NpbXBsZV9HbHlwaCwKLQlsb2FkX3RydWV0eXBlX2dseXBoKTogSW1wbGVtZW50IGxpbmVhciBhZHZhbmNlIGFkanVzdG1lbnRzIGlmIGBIVkFSJwotCW9yIGBWVkFSJyB0YWJsZXMgYXJlIG1pc3NpbmcuCi0KLTIwMTYtMTItMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmYsIHRydWV0eXBlXSBGYXN0IGFkdmFuY2Ugd2lkdGggcmV0cmlldmFsIGZvciBmb250cyB3aXRoIEhWQVIuCi0KLQlFdmVyeXRoaW5nIGlzIGd1YXJkZWQgd2l0aCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JULgotCi0JKiBzcmMvYmFzZS9mdGFkdmFuYy5jIChMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyk6IERvbid0IGhhbmRsZSBNTS4KLQotCSogc3JjL2NmZi9jZmZkcml2ci5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0guCi0JKGNmZl9nZXRfYWR2YW5jZXMpOiBUZXN0IGZvciBIVkFSIGFuZCBWVkFSLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZ2V0X2FkdmFuY2VzKTogVGVzdCBmb3IgSFZBUiBhbmQgVlZBUi4KLQotMjAxNi0xMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Jhc2VdIEZpeCBpbnZhbGlkIG1hYyBmb250IHJlY3Vyc2lvbi4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTMwNAotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlKTogQ29kZSBtb3ZlZCB0by4uLgotCShmdF9vcGVuX2ZhY2VfaW50ZXJuYWwpOiAuLi4gdGhpcyBmdW5jdGlvbi4KLQlBZGQgYSBwYXJhbWV0ZXIgdG8gY29udHJvbCB3aGV0aGVyIHdlIHRyeSBzcGVjaWFsIE1hYyBmb250IGhhbmRsaW5nCi0JaW4gY2FzZSBvZiBmYWlsdXJlLgotCShGVF9PcGVuX0ZhY2UsIEZUX05ld19GYWNlLCBGVF9OZXdfTWVtb3J5X0ZhY2UsCi0Jb3Blbl9mYWNlX2Zyb21fYnVmZmVyKTogVXNlIGBmdF9vcGVuX2ZhY2VfaW50ZXJuYWwnLgotCi0yMDE2LTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChjZmZfZmFjZV9pbml0KTogTWFrZSBuYW1lZCBpbnN0YW5jZXMgd29yay4KLQotMjAxNi0xMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlLCBjZmZdIEV4dGVuZCBgZ2V0X3Zhcl9ibGVuZCcgZnVuY3Rpb24gb2YgTU0gc2VydmljZS4KLQotCUluIHBhcnRpY3VsYXIsIHdlIG5lZWQgYWNjZXNzIHRvIG5hbWVkIGluc3RhbmNlIGRhdGEuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIChGVF9HZXRfVmFyX0JsZW5kX0Z1bmMpOgotCUFkZCBhcmd1bWVudCBmb3IgYEZUX01NX1ZhcicuCi0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZ2V0X3Zhcl9ibGVuZCk6IFVwZGF0ZWQuCi0JKiBzcmMvY2ZmL2NmZmxvYWQuaDogVXBkYXRlZC4KLQotCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfZ2V0Tm9ybWFsaXplZFZlY3Rvcik6IFVwZGF0ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2dldF92YXJfYmxlbmQpOiBVcGRhdGVkLgotCUFjY2VwdCB2YWx1ZSBgTlVMTCcgZm9yIGFyZ3VtZW50cy4KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmg6IFVwZGF0ZWQuCi0KLTIwMTYtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBIYW5kbGUgYGZ2YXInIHdpdGggemVybyBheGVzIGFzIGEgbm9uLU1NIGZvbnQuCi0KLQlUaGlzIGlzIGJldHRlciBiZWhhdmlvdXIgdGhhbiBleGl0aW5nIHdpdGggYW4gZXJyb3IuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlKTogQWRkIGB1c2VfZnZhcicKLQlmaWVsZC4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogQ29tcHV0ZSBgdXNlX2Z2YXInLCBhbHNvCi0JdXBkYXRpbmcgdGhlIHZhbGlkYXRpb24gY29kZS4KLQlVc2UgYHVzZV9mdmFyJyB0byBjb21wdXRlIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogUmVtb3ZlIGBmdmFyJyB2YWxpZGF0aW9uCi0JY29kZS4KLQotMjAxNi0xMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JTWlub3IgR1ggY29kZSBzaHVmZmxpbmcuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlKTogTW92ZQotCWBpc19kZWZhdWx0X2luc3RhbmNlJyBpbnRvIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLQlibG9jay4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogVXBkYXRlZC4KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKElTX0RFRkFVTFRfSU5TVEFOQ0UpOiBOZXcgbWFjcm8uCi0JKFRUX0xvYWRfR2x5cGgpOiBVc2UgaXQuCi0KLTIwMTYtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIEJldHRlciBoYW5kbGluZyBvZiBub24tQ0ZGIGZvbnQgZm9ybWF0cy4KLQotCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9mb250X2xvYWQpOiBQdXJlIENGRnMgZG9uJ3QgaGF2ZSBhCi0Jc2lnbmF0dXJlLCBzbyByZXR1cm4gYEZUX0Vycl9Vbmtub3duX0ZpbGVfRm9ybWF0JyBtb3JlIG9mdGVuLgotCi0yMDE2LTEyLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfYnVpbGRfYmxlbmRfdmVjdG9yKTogUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgotCi0yMDE2LTEyLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfZmFjZV9pbml0KTogU2ltcGxpZnkgY29uZGl0aW9uYWwgY29kZS4KLQotMjAxNi0xMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnQsIHRydWV0eXBlXSBWYXJpb3VzIHNhbml0aXppbmcgZml4ZXMuCi0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IElmIHRoZSBheGlzIGNvdW50IGluIGBmdmFyJyBpcwotCXplcm8sIHNldCBgbnVtX2luc3RhbmNlcycgdG8gemVyby4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IEhhbmRsZSBgZnZhcicgdGFibGUgd2l0aAotCXplcm8gYXhlcyBhcyBpbnZhbGlkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2ZhY2VfaW5pdCk6IEltcHJvdmUgbG9naWMgb2YgbG9hZGluZwotCWBsb2NhJywgYGN2dCcsIGBmcGdtJywgYW5kIGBwcmVwJyB0YWJsZS4KLQotMjAxNi0xMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JSW1wcm92ZSB0cmFjaW5nIG9mIGBGVF9PcGVuX0ZhY2UnLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlKTogUmV0dXJuIGluZm8gb24gbnVtYmVyIG9mCi0JYXZhaWxhYmxlIGZhY2VzIGFuZCBudW1iZXJlZCBpbnN0YW5jZXMsIG9yIHRoZSBpbmRpY2VzIG9mIHRoZQotCXJlcXVlc3RlZCBmYWNlIGFuZCBudW1iZXJlZCBpbnN0YW5jZS4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLiAoc2ZudF9vcGVuX2ZvbnQpOiBUcmFjZSBudW1iZXIgb2Ygc3ViZm9udHMuCi0KLTIwMTYtMTItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9sb2FkX3ByaXZhdGVfZGljdCk6IEFsd2F5cyBpbml0IGBibGVuZCcuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yOTUKLQotMjAxNi0xMi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBGaXggYGN2YXInIHNhbml0eSB0ZXN0LgotCi0JUmVwb3J0ZWQgYnkgRGF2ZSBBcm5vbGQuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2ZhY2VfdmFyeV9jdnQpOiBVc2UgdHVwbGUgY291bnQgbWFzay4KLQotMjAxNi0xMi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZiwgdHJ1ZXR5cGVdIFJlbW92ZSBjb21waWxlciB3YXJuaW5nczsgZml4IGBtYWtlIG11bHRpJy4KLQotCSogc3JjL2NmZi9jZjJmb250Lmg6IEluY2x1ZGUgYGNmZmxvYWQuaCcuCi0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5jOiBJbmNsdWRlIEZUX01VTFRJUExFX01BU1RFUlNfSCBhbmQKLQlGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSC4KLQkoY2ZmX3ZzdG9yZV9sb2FkKTogRWxpbWluYXRlIGB2c1NpemUnLgotCShjZmZfbG9hZF9wcml2YXRlX2RpY3QpOiBUYWcgYXMgYEZUX0xPQ0FMX0RFRicuCi0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5oOiBJbmNsdWRlIGBjZmZvYmpzLmgnLgotCVByb3ZpZGUgZGVjbGFyYXRpb24gZm9yIGBjZmZfbG9hZF9wcml2YXRlX2RpY3QnLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfbG9hZF9odmFyKTogRWxpbWluYXRlCi0JYG1pbm9yVmVyc2lvbicgYW5kIGBtYXBfb2Zmc2V0Jy4KLQotMjAxNi0xMi0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gRml4IGhlYXAgYnVmZmVyIG92ZXJmbG93ICgjNDk4NTgpLgotCi0JKiBzcmMvY2ZmL2NmZnBhcnNlLmMgKGNmZl9wYXJzZXJfcnVuKTogQWRkIG9uZSBtb3JlIHN0YWNrIHNpemUKLQljaGVjay4KLQotMjAxNi0xMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JRml4IGNsYW5nIHdhcm5pbmdzLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2JsZW5kX2RvQmxlbmQpOiBBZGQgY2FzdC4KLQkoY2ZmX3N1YmZvbnRfbG9hZCk6IFNldCBgZXJyb3InIGNvcnJlY3RseS4KLQotCSogc3JjL3NmbnQvdHRtdHguYyAodHRfZmFjZV9nZXRfbWV0cmljcyk6IFR5cG8uCi0KLTIwMTYtMTItMTUgIERhdmUgQXJub2xkICA8ZGFybm9sZEBhZG9iZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtjZmZdIEltcGxlbWVudCBDRkYyIHN1cHBvcnQgKDIvMikuCi0KLQlUaGUgZm9udCB2YXJpYXRpb24gY29kZS4gIEFsbCBwYXJ0cyBkZXBlbmRlbnQgb24gdGhlIEdYIGNvZGUgaW4gdGhlCi0JYHRydWV0eXBlJyBtb2R1bGUgYXJlIGd1YXJkZWQgd2l0aCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JULiAKLQlJbiBvdGhlciB3b3JkcywgeW91IGNhbiBzdGlsbCBjb21waWxlIHRoZSBgY2ZmJyBtb2R1bGUgd2l0aG91dAotCWRlZmluaW5nIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKHdoaWNoIGJyaW5ncyB5b3UgQ0ZGMgotCXN1cHBvcnQgd2l0aG91dCBmb250IHZhcmlhdGlvbikuCi0KLQkqIHNyYy9jZmYvY2YyZm9udC5jIChjZjJfZm9udF9zZXR1cCk6IEFkZCBzdXBwb3J0IGZvciBmb250Ci0JdmFyaWF0aW9uLgotCSogc3JjL2NmZi9jZjJmb250LmggKENGMl9Gb250KTogQWRkIGZpZWxkcyBmb3IgdmFyaWF0aW9uIGRhdGEuCi0KLQkqIHNyYy9jZmYvY2YyZnQuYyAoY2YyX2ZyZWVfaW5zdGFuY2UpOiBGcmVlIGJsZW5kIGRhdGEuCi0JKGNmMl9nZXRWU3RvcmUsIGNmMl9nZXROb3JtYWxpemVkVmVjdG9yKTogTmV3IGZ1bmN0aW9ucy4KLQkqIHNyYy9jZmYvY2YyZnQuaDogVXBkYXRlZC4KLQotCSogc3JjL2NmZi9jZjJpbnRycC5jOiBJbmNsdWRlIGBjZmZsb2FkLmgnLgotCShjZjJfY21kUkVTRVJWRURfMTUsIGNmMl9jbWRSRVNFUlZFRF8xNik6IFJlcGxhY2Ugd2l0aC4uLgotCShjZjJfY21kVlNJTkRFWCwgY2YyX2NtZEJMRU5EKTogLi4uIHRoaXMgbmV3IGVudW0gdmFsdWVzLgotCShjZjJfZG9CbGVuZCk6IE5ldyBmdW5jdGlvbi4KLQkoY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IEhhbmRsZSBgdnNpbmRleCcgYW5kIGBibGVuZCcgb3Bjb2Rlcy4KLQotCSogc3JjL2NmZi9jZmZsb2FkLmMgKEZUX2Zkb3QxNFRvRml4ZWQpOiBOZXcgbWFjcm8uCi0JKGNmZl92c3RvcmVfZG9uZSwgY2ZmX3ZzdG9yZV9sb2FkKTogTmV3IGZ1bmN0aW9ucy4KLQkoY2ZmX2JsZW5kX2NsZWFyLCBjZmZfYmxlbmRfZG9CbGVuZCwgY2ZmX2JsZW5kX2J1aWxkX3ZlY3RvciwKLQljZmZfYmxlbmRfY2hlY2tfdmVjdG9yKTogTmV3IGZ1bmN0aW9ucy4KLQkoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KTogQWRkIGFyZ3VtZW50cyBmb3IgYmxlbmQgdmVjdG9yLgotCUhhbmRsZSBibGVuZCBkYXRhLgotCShjZmZfc3ViZm9udF9sb2FkLCBjZmZfc3ViZm9udF9kb25lKTogVXBkYXRlZC4KLQkoY2ZmX2ZvbnRfbG9hZCk6IEhhbmRsZSBDRkYyIHZhcmlhdGlvbiBzdG9yZSBkYXRhLgotCShjZmZfZm9udF9kb25lKTogVXBkYXRlZC4KLQkqIHNyYy9jZmYvY2ZmbG9hZC5oOiBJbmNsdWRlIGBjZmZwYXJzZS5oJy4KLQlVcGRhdGVkLgotCi0JKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfZG9uZSk6IFVwZGF0ZWQuCi0KLQkqIHNyYy9jZmYvY2ZmcGFyc2UuYzogSW5jbHVkZSBgY2ZmbG9hZC5oJy4KLQkoY2ZmX3BhcnNlX251bSk6IEhhbmRsZSBpbnRlcm5hbCB2YWx1ZSAyNTUuCi0JKGNmZl9wYXJzZV92c2luZGV4LCBjZmZfcGFyc2VfYmxlbmQpOiBOZXcgZnVuY3Rpb25zLgotCShDRkZfRklFTERfQkxFTkQpOiBOZXcgbWFjcm8uCi0JKGNmZl9wYXJzZXJfcnVuKTogVXBkYXRlZC4KLQkqIHNyYy9jZmYvY2ZmcGFyc2UuaCAoY2ZmX2tpbmRfYmxlbmQpOiBOZXcgZW51bSB2YWx1ZS4KLQotCSogc3JjL2NmZi9jZmZ0b2tlbi5oOiBIYW5kbGUgYHZzdG9yZScsIGB2c2luZGV4JywgYW5kIGBibGVuZCcKLQlkaWN0aW9uYXJ5IHZhbHVlcy4KLQotCSogc3JjL2NmZi9jZmZ0eXBlcy5oIChDRkZfVmFyRGF0YSwgQ0ZGX0F4aXNDb29yZHMsIENGRl9WYXJSZWdpb24sCi0JQ0ZGX1ZTdG9yZSwgQ0ZGX0JsZW5kKTogTmV3IHN0cnVjdHVyZXMuCi0JKENGRl9Gb250UmVjRGljdCk6IEFkZCBgdnN0b3JlX29mZnNldCcgZmllbGQuCi0JKENGRl9Qcml2YXRlKTogQWRkIGB2c2luZGV4JyBmaWVsZC4KLQkoQ0ZGX1N1YkZvbnQpOiBBZGQgZmllbGRzIGZvciBibGVuZCBkYXRhLgotCShDRkZfRm9udCk6IEFkZCBgdnN0b3JlJyBmaWVsZC4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IGBDRkYyJyBpcyBlcXVhbCB0byBgZ3ZhcicsCi0Jc2luY2UgZ2x5cGggdmFyaWF0aW9uIGRhdGEgaXMgZGlyZWN0bHkgZW1iZWRkZWQuCi0JKFRUX1NldF9NTV9CbGVuZCk6IERvbid0IGxvYWQgYGd2YXInIHRhYmxlIGZvciBDRkYyIGZvbnRzLgotCi0yMDE2LTEyLTE1ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBJbXBsZW1lbnQgQ0ZGMiBzdXBwb3J0ICgxLzIpLgotCi0JVGhpcyBjb21taXQgZG9lcyBub3QgY29udGFpbiB0aGUgYmxlbmQgY29kZSBmb3IgZm9udCB2YXJpYXRpb24KLQlzdXBwb3J0LCB3aGljaCBmb2xsb3dzIGluIGFub3RoZXIgY29tbWl0LgotCi0JWW91IHNob3VsZCBpZ25vcmUgd2hpdGVzcGFjZSB3aGlsZSBpbnNwZWN0aW5nIHRoaXMgY29tbWl0LgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZSk6IEFkZCBgaXNDRkYyJwotCW1lbWJlci4KLQotCSogc3JjL2NmZi9jZjJmb250LmggKENGMl9Gb250KTogQWRkIGBpc0NGRjInIG1lbWJlci4KLQotCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IEhhbmRsZSBgaXNDRkYyJwotCWZsYWcuCi0JKGNmMl9nZXRNYXhzdGFjayk6IE5ldyBmdW5jdGlvbi4KLQkqIHNyYy9jZmYvY2YyZnQuaDogVXBkYXRlZC4KLQotCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfZXNjUkVTRVJWRURfMzgpOiBOZXcgZW51bS4KLQkoY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IEhhbmRsZSBDRkYyIGRpZmZlcmVuY2VzLgotCUFkZCB0cmFjaW5nIG1lc3NhZ2UgZm9yIGVycm9ycy4KLQotCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2dseXBoX25hbWUsIGNmZl9nZXRfbmFtZV9pbmRleCk6Ci0JVXBkYXRlIGZvciBDRkYyLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoRlRfRklYRURfT05FKTogTmV3IG1hY3JvLgotCShjZmZfaW5kZXhfaW5pdCwgY2ZmX2luZGV4X2xvYWRfb2Zmc2V0cywgY2ZmX2luZGV4X2FjY2Vzc19lbGVtZW50LAotCWNmZl9pbmRleF9nZXRfbmFtZSwgY2ZmX2Z0X3NlbGVjdF9nZXQsIGNmZl9sb2FkX3ByaXZhdGVfZGljdCwKLQljZmZfc3ViZm9udF9sb2FkLCBjZmZfZm9udF9sb2FkKTogSGFuZGxlIENGRjIuCi0JKiBzcmMvY2ZmL2NmZmxvYWQuaDogVXBkYXRlZC4KLQotCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBIYW5kbGUgQ0ZGMi4KLQotCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfbWF4c3RhY2spOiBOZXcgZnVuY3Rpb24uCi0JKENGRkNPREVfVE9QRElDVCwgQ0ZGQ09ERV9QUklWQVRFKTogUmVtb3ZlZAotCSogc3JjL2NmZi9jZmZwYXJzZS5oIChDRkYyX01BWF9TVEFDSywgQ0ZGMl9ERUZBVUxUX1NUQUNLKTogTmV3Ci0JbWFjcm9zLgotCShDRkYyX0NPREVfVE9QRElDVCwgQ0ZGMl9DT0RFX0ZPTlRESUNULCBDRkYyX0NPREVfUFJJVkFURSk6IE5ldwotCW1hY3Jvcy4KLQotCSogc3JjL2NmZi9jZmZ0b2tlbi5oOiBBZGQgZmllbGRzIGZvciBDRkYyIGRpY3Rpb25hcmllcyAoYnV0IG5vIGJsZW5kCi0Jc3R1ZmYpLgotCi0JKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9JbmRleCk6IEFkZCBgaGRyX3NpemUnIGZpZWxkLgotCShDRkZfRm9udFJlY0RpY3QpOiBBZGQgYG1heHN0YWNrJyBmaWVsZC4KLQkoQ0ZGX1ByaXZhdGUpOiBBZGQgYHN1YmZvbnQnIGZpZWxkLgotCShDRkZfRm9udCk6IEFkZCBgdG9wX2RpY3RfbGVuZ3RoJyBhbmQgYGNmZjInIGZpZWxkcy4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogSGFuZGxlIGBDRkYyJyB0YWJsZS4KLQotMjAxNi0xMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCSAgICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgotCi0JW3RydWV0eXBlXSBQcm92aWRlIEhWQVIgYWR2YW5jZSB3aWR0aCB2YXJpYXRpb24gYXMgYSBzZXJ2aWNlLgotCi0JRXZlcnl0aGluZyBpcyBndWFyZGVkIHdpdGggVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVC4KLQotCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NlcnZpY2VfbWV0cmljc192YXJpYXRpb25zKTogVXBkYXRlZC4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMpOiBQcmV2ZW50Ci0JZG91YmxlIGFkanVzdG1lbnQgb2YgYWR2YW5jZSB3aWR0aC4KLQotCSogc3JjL3NmbnQvdHRtdHguYzogSW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ILgotCSh0dF9mYWNlX2dldF9tZXRyaWNzKTogQXBwbHkgbWV0cmljcyB2YXJpYXRpb25zLgotCi0yMDE2LTEyLTE1ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIFByb3ZpZGUgZnVuY3Rpb24gdG8gYXBwbHkgYEhWQVInIGFkdmFuY2Ugd2lkdGggdmFyaWF0aW9uLgotCi0JRXZlcnl0aGluZyBpcyBndWFyZGVkIHdpdGggVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVC4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfaGFkdmFuY2VfYWRqdXN0KTogTmV3IGZ1bmN0aW9uLgotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaDogVXBkYXRlZC4KLQotMjAxNi0xMi0xNSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KLQkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBBZGQgYEhWQVInIHRhYmxlIHBhcnNpbmcuCi0KLQlOb3RlIHRoYXQgdGhpcyBpcyBub3QgY29tcGxldGUgeWV0OyBpdCBvbmx5IGhhbmRsZXMgYWR2YW5jZSB3aWR0aAotCXZhcmlhdGlvbi4KLQotCUFjdGl2YXRpb24gb2YgdGhlIGNvZGUgZm9sbG93cyBpbiBhbm90aGVyIGNvbW1pdC4KLQotCUV2ZXJ5dGhpbmcgaXMgZ3VhcmRlZCB3aXRoIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIChGVF9WYXJfTmFtZWRfU3R5bGUpOiBBZGQgYHBzaWQnIG1lbWJlci4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCAoR1hfSFZhckRhdGEsIEdYX0F4aXNDb29yZHMsIEdYX0hWYXJSZWdpb24sCi0JR1hfSFZTdG9yZSwgR1hfV2lkdGhNYXApOiBOZXcgYXV4aWxpYXJ5IHN0cnVjdHVyZXMgZm9yLi4uCi0JKEdYX0hWYXJUYWJsZSk6IC4uLiBIVkFSIG1haW4gc3RydWN0dXJlLgotCShHWF9CbGVuZFJlYyk6IEFkZCBkYXRhIGZvciBIVkFSIGxvYWRpbmcuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKEZUX0ZJWEVEX09ORSwgRlRfZmRvdDE0VG9GaXhlZCwKLQlGVF9pbnRUb0ZpeGVkLCBGVF9maXhlZFRvSW50KTogTmV3IG1hY3Jvcy4KLQkoZnRfdmFyX2xvYWRfaHZhcik6IE5ldyBmdW5jdGlvbi4KLQkoVFRfR2V0X01NX1Zhcik6IFVwZGF0ZWQuCi0JKHR0X2RvbmVfYmxlbmQpOiBEZWFsbG9jYXRlIEhWQVIgZGF0YS4KLQotMjAxNi0xMi0xNSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KLQotCVtjZmZdIEV4dGVuZCBudW1iZXIgcGFyc2luZy4KLQotCVRoZSBmb3J0aGNvbWluZyBDRkYyIHN1cHBvcnQgbmVlZHMgYSBkeW5hbWljIHBhcnNpbmcgbGltaXQuCi0KLQkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX251bSwgZG9fZml4ZWQsIGNmZl9wYXJzZV9maXhlZCwKLQljZmZfcGFyc2VfZml4ZWRfc2NhbGVkLCBjZmZfcGFyc2VfZml4ZWRfZHluYW1pYyk6IEFkZCBhcmd1bWVudCBmb3IKLQlwYXJzZXIuCi0JKGNmZl9wYXJzZV9mb250X21hdHJpeCwgY2ZmX3BhcnNlX2ZvbnRfYmJveCwgY2ZmX3BhcnNlX3ByaXZhdGVfZGljdCwKLQljZmZfcGFyc2VfbXVsdGlwbGVfbWFzdGVyLCBjZmZfcGFyc2VfY2lkX3JvcywgY2ZmX3BhcnNlcl9ydW4pOiBVcGRhdGVkLgotCi0JKiBzcmMvY2ZmL2NmZnBhcnNlLmggKGNmZl9wYXJzZV9udW0pOiBFeHBvcnQgbG9jYWxseS4KLQotMjAxNi0xMi0xNSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KLQotCVtjZmZdIEltcGxlbWVudCBkeW5hbWljIHN0YWNrIHNpemUgZm9yIEFkb2JlIGVuZ2luZS4KLQotCVRoaXMgYWxzbyBhZGRzIGBjZjJfc3RhY2tfc2V0UmVhbCcgYW5kIGBjZjJfc3RhY2tfcG9wJywgbmVlZGVkIGZvcgotCXRoZSBmb3J0aGNvbWluZyBDRkYyIHN1cHBvcnQuCi0KLQkqIHNyYy9jZmYvY2Yyc3RhY2suYyAoY2YyX3N0YWNrX2luaXQpOiBBZGQgYXJndW1lbnQgZm9yIHN0YWNrIHNpemUuCi0JKGNmMl9zdGFja19mcmVlKTogRGVhbGxvY2F0ZSBzdGFjay4KLQkoY2YyX3N0YWNrX2NvdW50LCBjZjJfc3RhY2tfcHVzaEludCwgY2YyX3N0YWNrX3B1c2hGaXhlZCwKLQljZjJfc3RhY2tfcG9wSW50LCBjZjJfc3RhY2tfcG9wRml4ZWQsIGNmMl9zdGFja19nZXRSZWFsLAotCWNmMl9zdGFja19jbGVhcik6IFVwZGF0ZWQuCi0JKGNmMl9zdGFja19zZXRSZWFsLCBjZjJfc3RhY2tfcG9wKTogTmV3IGZ1bmN0aW9ucy4KLQotCSogc3JjL2NmZi9jZjJzdGFjay5oIChDRjJfU3RhY2spOiBBZGQgYHN0YWNrU2l6ZScgbWVtYmVyLgotCVVwZGF0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCi0KLQkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IFVwZGF0ZWQuCi0KLQkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlcl9pbml0KTogQWRkIHBhcmFtZXRlciBmb3Igc3RhY2sKLQlzaXplOyByZXR1cm4gZXJyb3IgY29kZS4KLQkoY2ZmX3BhcnNlcl9kb25lKTogTmV3IGZ1bmN0aW9uLgotCShjZmZfcGFyc2VyX3J1bik6IFVwZGF0ZWQuCi0KLQkqIHNyYy9jZmYvY2ZmcGFyc2UuaCAoQ0ZGX1BhcnNlcik6IEFkZCBgc3RhY2tTaXplJyBtZW1iZXIgYW5kIG1ha2UKLQlgc3RhY2snIGEgcG9pbnRlci4KLQlVcGRhdGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0LCBjZmZfc3ViZm9udF9sb2FkKToKLQlVcGRhdGVkLgotCi0yMDE2LTEyLTE1ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBDb2RlIHNodWZmbGluZy4KLQotCSogc3JjL2NmZi9jZmZ0eXBlcy5oIChDRkZfRm9udCk6IEFkZCBgbGlicmFyeScgYW5kIGBiYXNlX29mZnNldCcKLQlmaWVsZHMuCi0KLQkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfc3ViZm9udF9sb2FkKTogQ2hhbmdlIGxhc3QgYXJndW1lbnQgdG8KLQlgQ0ZGX0ZvbnQnCi0JU3BsaXQgb2ZmIHBhcnNpbmcgb2YgcHJpdmF0ZSBkaWN0aW9uYXJ5IGludG8uLi4KLQkoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KTogLi4udGhpcyBuZXcgZnVuY3Rpb24uCi0JKGNmZl9mb250X2xvYWQpOiBVcGRhdGVkLgotCi0yMDE2LTEyLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudCwgdHJ1ZXR5cGVdIEFkZCBmcmFtZXdvcmsgZm9yIE1ldHJpY3MgVmFyaWF0aW9ucyBzZXJ2aWNlLgotCi0JTm8gZWZmZWN0IHlldDsgc2VydmljZSBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCBsYXRlciBvbi4KLQotCUV2ZXJ5dGhpbmcgaXMgZ3VhcmRlZCB3aXRoIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaDogTmV3IGZpbGUuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKLQkoRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSCk6IE5ldyBtYWNyby4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2UpOiBOZXcgZmllbGQgYHZhcicuCi0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0guCi0JKHNmbnRfaW5pdF9mYWNlKTogSW5pdGlhbGl6ZSBgZmFjZS0+dmFyJy4KLQotCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSC4KLQkodHRfc2VydmljZV9tZXRyaWNzX3ZhcmlhdGlvbnMpOiBOZXcgc2VydmljZS4KLQkodHRfc2VydmljZXMpOiBVcGRhdGVkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRwaWMuaDogVXBkYXRlZC4KLQotMjAxNi0xMi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gQWRkIE11bHRpcGxlIE1hc3RlcnMgc2VydmljZS4KLQotCVRoZSBjb2RlIHNpbXBseSB1c2VzIHRoZSBNTSBmdW5jdGlvbnMgZnJvbSB0aGUgYHRydWV0eXBlJyBtb2R1bGUuCi0KLQlFdmVyeXRoaW5nIGlzIGd1YXJkZWQgd2l0aCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JULgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZSk6IE5ldyBmaWVsZCBgbW0nLgotCi0JKiBzcmMvY2ZmL2NmZmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9NVUxUSVBMRV9NQVNURVJTX0guCi0JKGNmZl9zZXRfbW1fYmxlbmQsIGNmZl9nZXRfbW1fYmxlbmQsIGNmZl9nZXRfbW1fdmFyLAotCWNmZl9zZXRfdmFyX2Rlc2lnbiwgY2ZmX2dldF92YXJfZGVzaWduKTogTmV3IGZ1bmN0aW9ucy4KLQkoY2ZmX3NlcnZpY2VfbXVsdGlfbWFzdGVycyk6IE5ldyBzZXJ2aWNlLgotCShjZmZfc2VydmljZXMpOiBVcGRhdGVkLgotCi0JKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2dldF92YXJfYmxlbmQsIGNmZl9kb25lX2JsZW5kKTogTmV3Ci0JZnVuY3Rpb25zLgotCSogc3JjL2NmZi9jZmZsb2FkLmg6IFVwZGF0ZWQuCi0KLQkqIHNyYy9jZmYvY2ZmcGljLmggKENGRl9TRVJWSUNFX01VTFRJX01BU1RFUlNfR0VUKTogTmV3IG1hY3JvLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYzogSW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSC4KLQkoc2ZudF9pbml0X2ZhY2UpOiBJbml0aWFsaXplIGBmYWNlLT5tbScuCi0KLTIwMTYtMTItMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCUV4dGVuZCBmdW5jdGlvbmFsaXR5IG9mIGBmdF9tb2R1bGVfZ2V0X3NlcnZpY2UnLgotCi0JSXQgY2FuIG5vdyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbG9jYWwgYW5kIGdsb2JhbCBzZWFyY2hlcy4KLQotCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X21vZHVsZV9nZXRfc2VydmljZSk6IEFkZCBgZ2xvYmFsJyBhcmd1bWVudC4KLQkoRlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlKTogVXBkYXRlZC4KLQotCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X3BzX25hbWUsIGNmZl9nZXRfY21hcF9pbmZvKTogVXBkYXRlZC4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaDogVXBkYXRlZC4KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRSk6Ci0JVXBkYXRlZC4KLQotMjAxNi0xMi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9nZXRfdmFyX2JsZW5kKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCi0KLTIwMTYtMTItMTQgIERhdmUgQXJub2xkICA8ZGFybm9sZEBhZG9iZS5jb20+Ci0JICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50LCBjZmZdIE1pbm9yIHByZXBhcmF0aW9ucy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR19DRkYyLCBUVEFHX0hWQVIsIFRUQUdfTVZBUiwKLQlUVEFHX1ZWQVIpOiBOZXcgU0ZOVCB0YWJsZSB0YWdzLgotCi0JKiBzcmMvY2ZmL2NmMmZpeGVkLmggKENGMl9GSVhFRF9PTkUsIENGMl9GSVhFRF9FUFNJTE9OKTogQWRkIGNhc3QuCi0KLTIwMTYtMTItMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZSwgdHlwZTFdIEFkZCBgZ2V0X3Zhcl9ibGVuZCcgdG8gTU0gc2VydmljZS4KLQotCUZvciBpbnRlcm5hbCB1c2U7IHdlIHdhbnQgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIHRoZSBmb3J0aGNvbWluZyBDRkYyCi0Jc3VwcG9ydCBhbmQgVHJ1ZVR5cGUuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIChGVF9HZXRfVmFyX0JsZW5kX0Z1bmMpOgotCU5ldyB0eXBlZGVmLgotCShNdWx0aU1hc3RlcnMpOiBBZGQgYGdldF92YXJfYmxlbmQnLgotCShGVF9TZXJ2aWNlX011bHRpTWFzdGVycyk6IFVwZGF0ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2dldF92YXJfYmxlbmQpOiBOZXcgZnVuY3Rpb24uCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBVcGRhdGVkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzKTogVXBkYXRlZC4KLQkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9zZXJ2aWNlX211bHRpX21hc3RlcnMpOiBVcGRhdGVkLgotCi0yMDE2LTEyLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGUsIHR5cGUxXSBBZGQgYGRvbmVfYmxlbmQnIHRvIE1NIHNlcnZpY2UuCi0KLQlGb3IgaW50ZXJuYWwgdXNlOyB3ZSB3YW50IHRvIHNoYXJlIGNvZGUgYmV0d2VlbiB0aGUgZm9ydGhjb21pbmcgQ0ZGMgotCXN1cHBvcnQgYW5kIFRydWVUeXBlLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaCAoRlRfRG9uZV9CbGVuZF9GdW5jKToKLQlOZXcgdHlwZWRlZi4KLQkoTXVsdGlNYXN0ZXJzKTogQWRkIGBkb25lX2JsZW5kJy4KLQkoRlRfU2VydmljZV9NdWx0aU1hc3RlcnMpOiBVcGRhdGVkLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9kb25lX2JsZW5kKTogVXNlIGBUVF9GYWNlJyBhcyBhcmd1bWVudC4KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmg6IFVwZGF0ZWQuCi0KLQkqIHNyYy90cnVldHlwZS90dG9ianMuYyAoVFRfRmFjZV9Eb25lKTogVXBkYXRlZC4KLQotCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycyk6IFVwZGF0ZWQuCi0JKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAodDFfc2VydmljZV9tdWx0aV9tYXN0ZXJzKTogVXBkYXRlZC4KLQotMjAxNi0xMi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIFJldmVydCBjaGFuZ2UgZnJvbSAyMDE2LTEyLTA4LgotCi0JSSBtaXNzZWQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGZ0X21vZHVsZV9nZXRfc2VydmljZScsIHdoaWNoIG1ha2VzCi0JdGhlIGNoYW5nZSB1bm5lY2Vzc2FyeS4KLQotMjAxNi0xMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JQWRkIGZyYW1ld29yayB0byBzdXBwb3J0IHNlcnZpY2VzIHdpdGggOCBmdW5jdGlvbnMuCi0KLQlXZSB3aWxsIG5lZWQgdGhpcyBmb3IgQ0ZGIHZhcmlhdGlvbiBmb250IHN1cHBvcnQuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzgpOgotCU5ldyBtYWNyby4KLQotMjAxNi0xMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEFkZCBgZ2V0X2dseXBoX25hbWUnIGFuZCBgZ2V0X25hbWVfaW5kZXgnIHRvIFNGTlQgaW50ZXJmYWNlLgotCi0JQ0ZGMiBmb250cyB3aWxsIG5lZWQgYWNjZXNzIHRvIHRob3NlIHR3byBmdW5jdGlvbnMuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oOiBJbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ILgotCShTRk5UX0ludGVyZmFjZSk6IEFkZCBgZ2V0X2dseXBoX25hbWUnIGFuZCBgZ2V0X25hbWVfaW5kZXgnIG1lbWJlcnMuCi0JKEZUX0RFRklORV9TRk5UX0lOVEVSRkFDRSk6IFVwZGF0ZWQuCi0KLQkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X2dseXBoX25hbWUsIHNmbnRfZ2V0X25hbWVfaW5kZXgpOgotCUZpeCBzaWduYXR1cmVzIHRvIGV4YWN0bHkgY29ycmVzcG9uZCB0byB0aGUgZ2x5cGggZGljdCBzZXJ2aWNlCi0JZnVuY3Rpb24gdHlwZWRlZnMuCi0JKHNmbnRfaW50ZXJmYWNlKTogVXBkYXRlZC4KLQotMjAxNi0xMi0wNiAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KLQotCUFkZCBgRlRfR2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMnIGZ1bmN0aW9uLgotCi0JTm90ZSB0aGF0IHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGFyZW4ndCBpbXBsZW1lbnRlZCB5ZXQuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oOiBEZWNsYXJlLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaAotCShGVF9HZXRfVmFyX0Rlc2lnbl9GdW5jKTogTmV3IHR5cGVkZWYuCi0JKE11bHRpTWFzdGVycyk6IE5ldyBNTSBzZXJ2aWNlIGZ1bmN0aW9uIGBnZXRfdmFyX2Rlc2lnbicuCi0JKEZUX0RFRklORV9TRVJWSUNFX01VTFRJTUFTVEVSU1JFQyk6IFVwZGF0ZWQuCi0JVXBkYXRlIGFsbCBjYWxsZXJzLgotCi0JKiBzcmMvYmFzZS9mdG1tLmMgKEZUX0dldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzKTogSW1wbGVtZW50LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzogVXBkYXRlZC4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X1Zhcl9EZXNpZ24pOiBOZXcgZHVtbXkgZnVuY3Rpb24gdG8KLQloYW5kbGUgYGdldF92YXJfZGVzaWduJyBzZXJ2aWNlLgotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaDogVXBkYXRlZC4KLQotCSogc3JjL3R5cGUxL3QxZHJpdmVyLmM6IFVwZGF0ZWQuCi0KLQkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfR2V0X1Zhcl9EZXNpZ24pOiBOZXcgZHVtcCBmdW5jdGlvbiB0bwotCWhhbmRsZSBgZ2V0X3Zhcl9kZXNpZ24nIHNlcnZpY2UuCi0JKiBzcmMvdHlwZTEvdDFsb2FkLmg6IFVwZGF0ZWQuCi0KLTIwMTYtMTItMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9zdWJycyk6IEZpeCBtZW1vcnkgbGVhay4KLQotCVRoZSBgc3VicnMnIGtleXdvcmQgbWlnaHQgZXJyb25lb3VzbHkgb2NjdXIgbXVsdGlwbGUgdGltZXMuCi0KLQlSZXBvcnRlZCBhcwotCi0JICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzEKLQotMjAxNi0xMi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2d6aXBdIEltcHJvdmUgYnVpbGRpbmcgd2l0aCBleHRlcm5hbCB6bGliICgjNDk2NzMpLgotCi0JQnVpbGRpbmcgRnJlZVR5cGUgd2l0aCBleHRlcm5hbCB6bGliIDEuMi44IG1ha2VzIG1zdmMgMTQgc3RvcCB3aXRoCi0JdGhlIGZvbGxvd2luZyBlcnJvci4KLQotCSAgZnRnemlwLmMKLQkgIHpsaWItMS4yLjhcemxpYi5oKDg2KTogZXJyb3IgQzIwNjE6Ci0JICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCBlcnJvcjogaWRlbnRpZmllciAnel9jb25zdCcKLQkgIHpsaWItMS4yLjhcemxpYi5oKDk0KTogZXJyb3IgQzIwNTQ6Ci0JICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICcoJyB0byBmb2xsb3cgJ3pfY29uc3QnCi0JICB6bGliLTEuMi44XHpsaWIuaCg5NCk6IGVycm9yIEMyMDg1OgotCSAgICAgICAgICAgICAgICAgICAgICAgICAnbXNnJzogbm90IGluIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdAotCSAgLi4uCi0JICB6bGliLTEuMi44XHpsaWIuaCg4NzcpOiBmYXRhbCBlcnJvciBDMTAwMzoKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGNvdW50IGV4Y2VlZHMgMTAwOyBzdG9wcGluZyBjb21waWxhdGlvbgotCi0JVGhlIGVycm9yIGhhcHBlbnMgYmVjYXVzZSBGcmVlVHlwZSBrZWVwcyBhbiBvd24gY29weSBvZiB6bGliLTEuMS40Ci0JdW5kZXIgYHNyYy9nemlwJy4gIFdoZW4gYnVpbGRpbmcgYHNyYy9nemlwL2Z0Z3ppcC5jJyB3aXRoCi0JRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiBkZWZpbmVkLCBpdCB1c2VzCi0KLQkgICNpbmNsdWRlIDx6bGliLmg+Ci0KLQl3aGljaCBjb3JyZWN0bHkgZmluZHMgYW4gZXh0ZXJuYWwgYHpsaWIuaCcsIGJ1dCBgemxpYi5oJyBpdHNlbGYgaGFzCi0JYSBsaW5lCi0KLQkgICNpbmNsdWRlICJ6Y29uZi5oIgotCi0Jd2hpY2ggbWFrZXMgVmlzdWFsIFN0dWRpbyAyMDE1IGZpbmQgYHNyYy9nemlwL3pjb25mLmgnIHdoaWxlCi0JY29tcGlsaW5nIHRoZSBmaWxlcyBpbiBgc3JjL2d6aXAnLgotCi0JKiBzcmMvZ3ppcC96Y29uZi5oOiBSZW5hbWUgdG8uLi4KLQkqIHNyYy9nemlwL2Z0emNvbmYuaDogLi4uIHRoaXMuCi0JKiBzcmMvZ3ppcC96bGliLmgsIHNyYy9nemlwL3J1bGVzLm1rIChHWklQX0RSVl9TUkNTKTogVXBkYXRlZC4KLQotMjAxNi0xMi0wMSAgT2xla3NhbmRyIENoZWtob3Zza3lpICA8b2xla3NhbmRyLmNoZWtob3Zza3lpQGdtYWlsLmNvbT4KLQotCVthdXRvZml0XSBGaXggRW1zY3JpcHRlbiBjcmFzaCAocGF0Y2ggIzkxODApLgotCi0JRnVuY3Rpb24gY2FsbHMgdGhyb3VnaCBwb2ludGVycyBtdXN0IHVzZSBhIG1hdGNoaW5nIHNpZ25hdHVyZSB0bwotCXdvcmsgb24gRW1zY3JpcHRlbiwgc2luY2Ugc3VjaCBjYWxscyBhcmUgZGlzcGF0Y2hlZCB0aHJvdWdoIGxvb2t1cAotCXRhYmxlcyBncm91cGVkIGJ5IHNpZ25hdHVyZS4KLQotCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKTogRml4Ci0JdHlwZWRlZi4KLQotMjAxNi0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3Ntb290aF0gUmV2ZXJ0IHByZXZpb3VzIGNvbW1pdC4gIEFscmVhZHkgZml4ZWQgd2l0aCA2Y2E1NGM2NC4KLQotMjAxNi0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3Ntb290aF0gQXZvaWQgY29uZGl0aW9uYWwganVtcCBvbiB1bmluaXRpYWxpemVkIHZhbHVlICgjNDk3MTEpLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfcmVuZGVyKTogSW5pdGlhbGl6ZSBgd29ya2VyJy4KLQotMjAxNi0xMS0yNyAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgotCi0JW2F1dG9maXRdIENvZGUgc2h1ZmZsaW5nLgotCi0JQWxzbyBpbXByb3ZlIHNvbWUgY29tbWVudHMgYW5kIHJlbW92ZSB1bnVzZWQgY29kZS4KLQotCU5vIGZ1bmN0aW9uYWwgY2hhbmdlLgotCi0JKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogTWVyZ2VkIHdpdGguLi4KLQkoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpOiAuLi50aGlzIGZ1bmN0aW9uLgotCVNwbGl0IG9mZiBlbWJvbGRlbmluZyBjb2RlIGludG8uLi4KLQkoYWZfbG9hZGVyX2VtYm9sZGVuX2dseXBoX2luX3Nsb3QpOiAuLi4gdGhpcyBmdW5jdGlvbi4KLQotMjAxNi0xMS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JQmV0dGVyIHN1cHBvcnQgb2YgTExQNjQgc3lzdGVtcyB3aXRoIGdjYyAoYW5kIGNsYW5nKS4KLQotCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogQ2FsbCBgQUNfVFlQRV9MT05HX0xPTkdfSU5UJy4KLQotCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4gKEZUX0xPTkc2NCk6IEVuYWJsZSBmb3IgTExQNjQgc3lzdGVtcyAoYW5kCi0Jc3VwcHJlc3Mgd2FybmluZ3MpIGV2ZW4gd2l0aG91dCBgRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCcuCi0KLTIwMTYtMTEtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCUZpeCBgbGNkX3dlaWdodHMnIGFycmF5IHNpemUuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0xpYnJhcnlSZWMpOiBEbyBpdC4KLQotCVJlcG9ydGVkIGJ5IE5pa29sYXVzLgotCi0yMDE2LTExLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwpOiBGaXggdHJhY2luZy4KLQotMjAxNi0xMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIEltcHJvdmUgRlRfTE9BRF9CSVRNQVBfTUVUUklDU19PTkxZIGZvciBgc2JpeCcgZm9ybWF0LgotCi0JSXQncyB1bmF2b2lkYWJsZSB0byBjYWxsIHRoZSBQTkcgZW5naW5lLCBidXQgdG8gZ2V0IHRoZSBtZXRyaWNzIGl0Ci0JaXMgc3VmZmljaWVudCB0byByZWFkIHRoZSBQTkcgaW1hZ2UncyBoZWFkZXIgb25seS4KLQotCSogc3JjL3NmbnQvcG5nc2hpbS5jIChMb2FkX1NCaXRfUG5nKTogQWRkIGFyZ3VtZW50IHRvIGNvbnRyb2wgdGhlCi0JYWxsb2NhdGlvbiBvZiB0aGUgZ2x5cGggc2xvdC4KLQkqIHNyYy9zZm50L3BuZ3NoaW0uaDogVXBkYXRlZC4KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9wbmcsCi0JdHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UsIHR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlKTogVXBkYXRlZC4KLQotMjAxNi0xMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIFNwZWVkIHVwIGBzYml4JyBsb29rdXAuCi0KLQlUaGlzIGFsc28gZml4ZXMgYSBidWcgaW50cm9kdWNlZCBpbiAyMDE2LTEwLTAxIHdoaWNoIHByZXZlbnRzCi0JZGlzcGxheSBvZiBlbWJlZGRlZCBiaXRtYXAgZm9udHMgdGhhdCB1c2UgdGhlIGBzYml4JyBmb3JtYXQuCi0KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX2xvYWRfc2JpdCk6IFN0b3JlIGBzYml4JyBzaXplIGFuZAotCW9mZnNldCBhbHNvIGluIGBlYmR0X3NpemUnIGFuZCBgZWJkdF9zdGFydCcsIHJlc3BlY3RpdmVseS4gIFRoaXMKLQltYWtlcyB0aGUgdGVzdCBmb3IgYW4gZW1iZWRkZWQgYml0bWFwIGRhdGEgdGFibGUgc3VjY2VlZCBmb3IgdGhpcwotCWZvcm1hdC4KLQotCSh0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpIDxUVF9TQklUX1RBQkxFX1RZUEVfU0JJWD46IFVzZQotCWBlYmR0X3NpemUnIGFuZCBgZWJkdF9zdGFydCcKLQkodHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UpOiBEaXR0by4KLQotMjAxNi0xMS0wNiAgU2VpZ28gTm9uYWthICA8bm9uYUBnb29nbGUuY29tPgotCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlJbnRyb2R1Y2UgYSB3YXkgb2YgcXVpY2tseSByZXRyaWV2aW5nIChlbWJlZGRlZCkgYml0bWFwIG1ldHJpY3MuCi0KLQlgRlRfTG9hZF9HbHlwaCcgZG9lc24ndCBnZW5lcmF0ZSBhIGJpdG1hcCBmb3IgYSBub24tYml0bWFwIGdseXBoCi0JdW50aWwgdGhlIHVzZXIgY2FsbHMgYEZUX1JlbmRlcl9HbHlwaCcuICBIb3dldmVyLCBpdCBhbHdheXMKLQlhbGxvY2F0ZXMgbWVtb3J5IGZvciBiaXRtYXBzIGFuZCBjb3BpZXMgb3IgZGVjb2RlcyB0aGUgY29udGVudHMgb2YgYQotCWJpdG1hcCBnbHlwaCwgd2hpY2ggY2FuIGJlIHF1aXRlIHNsb3cgZm9yIFBORyBkYXRhLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0xPQURfQklUTUFQX01FVFJJQ1NfT05MWSk6IE5ldwotCW1hY3JvLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFVuc2V0IEZUX0xPQURfUkVOREVSIGlmCi0JRlRfTE9BRF9CSVRNQVBfTUVUUklDU19PTkxZIGlzIHVzZWQuCi0KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfYWxsb2NfYml0bWFwLAotCXR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdG1hcCk6IEFkZCBhcmd1bWVudCB0byBjb250cm9sIGFsbG9jYXRpb24gb2YKLQl0aGUgZ2x5cGggc2xvdC4KLQkodHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UsIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2NvbXBvdW5kLAotCXR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlKTogVXBkYXRlZC4KLQotCSogc3JjL3BjZi9wY2Zkcml2ci5jIChQQ0ZfR2x5cGhfTG9hZCk6IFF1aWNrbHkgZXhpdCBpZgotCWBGVF9MT0FEX0JJVE1BUF9NRVRSSUNTX09OTFknIGlzIHNldC4KLQotCSogc3JjL3Bmci9wZnJzYml0LmMsIHNyYy9wZnIvcGZyc2JpdC5oIChwZnJfc2xvdF9sb2FkX2JpdG1hcCk6IEFkZAotCWFyZ3VtZW50IHRvIGNvbnRyb2wgYWxsb2NhdGlvbiBvZiB0aGUgZ2x5cGggc2xvdC4KLQkqIHNyYy9wZnIvcGZyb2JqcyAocGZyX3Nsb3RfbG9hZCk6IFVwZGF0ZWQuCi0KLQkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0xvYWRfR2x5cGgpOiBEaXR0by4KLQotCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgotCi0yMDE2LTExLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlTeW5jaHJvbml6ZSB3aXRoIGdudWxpYiAoIzQ5NDQ4KS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaCwgYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sCi0JYnVpbGRzL3Ztcy9mdGNvbmZpZy5oIChGVF9UWVBFT0YpOiBVcGRhdGUgY29kZSB0byB1c2UgZGVmaW5pdGlvbiBpbgotCWN1cnJlbnQgdmVyc2lvbiBvZiBgaW50cHJvcHMuaCcuCi0JT3RoZXIgbWlub3Igc3luY2hyb25pemF0aW9uIHRvIHJlZHVjZSBjb2RlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCi0JdGhyZWUgZmlsZXMuCi0KLTIwMTYtMTEtMDMgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgotCi0JW3RydWV0eXBlXSBDbGFtcCB2YXJpYXRpb24gcmVxdWVzdHMgdG8gdmFsaWQgcmFuZ2UuCi0KLQlUaGlzIGlzIHJlcXVpcmVkIGJ5IE9wZW5UeXBlIDEuODsgaXQgYWxzbyBhdm9pZHMgcm91bmRpbmcgc3VycHJpc2VzLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9TZXRfVmFyX0Rlc2lnbik6IENsYW1wIGRlc2lnbiBjb29yZGluYXRlcwotCW91dHNpZGUgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgdG8gYWx3YXlzIHN0YXkgd2l0aGluIHRoZSByYW5nZSBpbnN0ZWFkCi0Jb2YgcHJvZHVjaW5nIGFuIGVycm9yLgotCi0yMDE2LTEwLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIFJlbW92ZSBjbGFuZyB3YXJuaW5ncy4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggKFRUX0V4ZWNDb250ZXh0UmVjKTogVXNpbmcgYEZUX1VMb25nJyBmb3IKLQlsb29wIGNvdW50ZXIgaGFuZGxpbmcuCi0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBVcGRhdGVkLgotCShJbnNfU0NBTlRZUEUpOiBVc2Ugc2lnbmVkIGNvbnN0YW50LgotCShUVF9SdW5JbnMpOiBFbnN1cmUgYG51bV90d2lsaWdodF9wb2ludHMnIGlzIDE2Yml0LgotCi0yMDE2LTEwLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEZpeCBjb21taXQgZnJvbSAyMDE0LTExLTI0LgotCi0JUHJvYmxlbSByZXBvcnRlZCBieSBIaW4tVGFrIExldW5nICA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4KLQotCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2hkbXgpOiBGaXggZmlsZSBjaGVja2luZwotCWxvZ2ljLgotCi0yMDE2LTEwLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlBZGQgYEZUX0dldF97TU0sVmFyfV9CbGVuZF9Db29yZGluYXRlcycgZnVuY3Rpb25zLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaDogRGVjbGFyZS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmggKEZUX0dldF9NTV9CbGVuZF9GdW5jKToKLQlOZXcgdHlwZWRlZi4KLQkoTXVsdGlNYXN0ZXJzKTogTmV3IE1NIHNlcnZpY2UgZnVuY3Rpb24gYGdldF9tbV9ibGVuZCcuCi0JKEZUX0RFRklORV9TRVJWSUNFX01VTFRJTUFTVEVSU1JFQyk6IFVwZGF0ZWQuCi0JVXBkYXRlIGFsbCBjYWxsZXJzLgotCi0JKiBzcmMvYmFzZS9mdG1tLmMgKEZUX0dldF9NTV9CbGVuZF9Db29yZGluYXRlcywKLQlGVF9HZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKTogSW1wbGVtZW50LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzogVXBkYXRlZC4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX0JsZW5kKTogTmV3IGZ1bmN0aW9uIHRvIGhhbmRsZQotCWBnZXRfbW1fYmxlbmQnIHNlcnZpY2UuCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBVcGRhdGVkLgotCi0JKiBzcmMvdHlwZTEvdDFkcml2ZXIuYzogVXBkYXRlZC4KLQotCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9HZXRfTU1fQmxlbmQpOiBOZXcgZnVuY3Rpb24gdG8gaGFuZGxlCi0JYGdldF9tbV9ibGVuZCcgc2VydmljZS4KLQkqIHNyYy90eXBlMS90MWxvYWQuaDogVXBkYXRlZC4KLQotCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudC4KLQotMjAxNi0xMC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX3N1YnJzKTogRml4IGxpbWl0IGNoZWNrLgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9ODEKLQotMjAxNi0xMC0yNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JW2NmZl0gQ29ycmVjdCBjbWFwIGZvcm1hdCByZXBvcnRpbmcgKCMyNDgxOSkuCi0KLQkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9jbWFwX2luZm8pOiBUaHJvdyBhbiBlcnJvciBvbiBzeW50aGV0aWMKLQljaGFybWFwIGluc3RlYWQgb2YgZ3Vlc3NpbmcgaXRzIGZvcm1hdCBhbmQgbGFuZ3VhZ2UuCi0KLTIwMTYtMTAtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IFNDQU5UWVBFIGluc3RydWN0aW9uICgjNDkzOTQpLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NDQU5UWVBFKTogT25seSB1c2UgbG93ZXIgMTZiaXRzLgotCi0yMDE2LTEwLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gSW1wcm92ZSBoYW5kbGluZyBvZiBpbnZhbGlkIHBvc3QgMi41IHRhYmxlcyBbIzQ5MzkzXS4KLQotCSogc3JjL3NmbnQvdHRwb3N0LmMgKGxvYWRfZm9ybWF0XzI1KTogV2UgbmVlZCBhdCBsZWFzdCBhIHNpbmdsZQotCXRhYmxlIGVudHJ5LgotCi0yMDE2LTEwLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEZpeCBoYW5kbGluZyBvZiBgY3ZhcicgdGFibGUgZGF0YS4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTUzCi0KLQkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2ZhY2VfdmFyeV9jdnQpOiBJZ25vcmUgaW52YWxpZCBDVlQKLQlpbmRpY2VzLgotCi0yMDE2LTEwLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbcHNhdXhdIEZpeCBoYW5kbGluZyBvZiBpbnZhbGlkIGZsZXggc3VicnMuCi0KLQlQcm9ibGVtIHJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTUyCi0KLQkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQotCTxvcF9jYWxsb3RoZXJzdWJyPjogU2V0IGBmbGV4X3N0YXRlJyBhZnRlciBlcnJvciBjaGVja2luZy4KLQotMjAxNi0xMC0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9kb25lX2JsZW5kKTogRml4IGRlYWxsb2NhdGlvbi4KLQotMjAxNi0xMC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvY2lkL2NpZGxvYWQuYyAoY2lkX2ZhY2Vfb3Blbik6IFByb3Blcmx5IHByb3BhZ2F0ZSBgZXJyb3InLgotCi0yMDE2LTEwLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2lkXSBGaXggcGFyc2luZyBvZiBzdWJyIG9mZnNldHMuCi0KLQlCdWcgaW50cm9kdWNlZCAyMDE2LTA1LTE2LgotCi0JKiBzcmMvY2lkL2NpZHBhcnNlLmMgKGNpZF9wYXJzZXJfbmV3KTogRml4IG9mZi1ieS1vbmUgZXJyb3IuCi0KLTIwMTYtMTAtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBEaXNhYmxlIGJpdG1hcCBzdHJpa2VzIGlmIHdlIGRvbid0IGhhdmUgYSBiaXRtYXAgZGF0YSB0YWJsZS4KLQotCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zYml0KTogQ2hlY2sgd2hldGhlciB3ZSBoYXZlCi0JYSBiaXRtYXAgZGF0YSB0YWJsZS4KLQotMjAxNi0xMC0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JW3Ntb290aF0gUmVtb3ZlIGltcG9zc2liaWxpdHkuCi0KLQkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChUV29ya2VyKTogUmVhcnJhbmdlIGZpZWxkcy4KLQkoZ3JheV9jb252ZXJ0X2dseXBoKTogUmVtb3ZlIGltcG9zc2libGUgY29uZGl0aW9uIGFuZCBjbGVhbiB1cC4KLQotMjAxNi0wOS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3BjZl0gRW5yaWNoIGZhbWlseSBuYW1lIHdpdGggZm91bmRyeSBuYW1lIGFuZCBnbHlwaCB3aWR0aCBpbmZvLgotCi0JVGhpcyBpcyBhIHZlcnkgb2xkIHBhdGNoIGZyb20gb3BlblN1U0UgKGZyb20gMjAwNiwgc3VibWl0dGVkIHRvCi0JRnJlZVR5cGUgaW4gMjAxMSkgdGhhdCBJIGZvcmdvdCB0byBhcHBseS4KLQotCSAgaHR0cHM6Ly9idWlsZC5vcGVuc3VzZS5vcmcvcGFja2FnZS92aWV3X2ZpbGUvb3BlblNVU0U6RmFjdG9yeS9mcmVldHlwZTIvZnJlZXR5cGUyLWJpdG1hcC1mb3VuZHJ5LnBhdGNoCi0KLQlQcmVwZW5kIHRoZSBmb3VuZHJ5IG5hbWUgcGx1cyBhIHNwYWNlIHRvIHRoZSBmYW1pbHkgbmFtZS4gIFRoZXJlIGFyZQotCW1hbnkgZm9udHMganVzdCBjYWxsZWQgYEZpeGVkJyB3aGljaCBsb29rIGNvbXBsZXRlbHkgZGlmZmVyZW50LCBhbmQKLQl3aGljaCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBlYWNoIG90aGVyLiAgV2hlbiBzZWxlY3RpbmcgYEZpeGVkJyBpbgotCUtERSBvciBHbm9tZSBvbmUgZ2V0cyByZXN1bHRzIHRoYXQgYXBwZWFyIHJhdGhlciByYW5kb20sIHRoZSBzdHlsZQotCWNoYW5nZXMgb2Z0ZW4gaWYgb25lIGNoYW5nZXMgdGhlIHNpemUgYW5kIG9uZSBjYW5ub3Qgc2VsZWN0IHNvbWUKLQlmb250cyBhdCBhbGwuCi0KLQlXZSBhbHNvIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBgd2lkZScgY2hhcmFjdGVyczsgYWxsIHB1dCB0b2dldGhlciwKLQl3ZSBnZXQgZmFtaWx5IG5hbWVzIGxpa2UgYFNvbnkgRml4ZWQnIG9yIGBNaXNjIEZpeGVkIFdpZGUnLgotCi0JKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCk6IEltcGxlbWVudCBpdC4KLQotCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KLQotMjAxNi0wOS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2Z0ZnV6emVyXSBTcGVlZCB1cC4KLQotCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjIChMTFZNRnV6emVyVGVzdE9uZUlucHV0KTogRG9uJ3QKLQljaGVjayBmb3IgZW1iZWRkZWQgYml0bWFwcyBpZiB3ZSBoYXZlIGEgbm9uLWRlZmF1bHQgaW5zdGFuY2UuCi0KLTIwMTYtMDktMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRGlzYWxsb3cgYml0bWFwIHN0cm9rZXMgZm9yIG5vbi1kZWZhdWx0IGluc3RhbmNlcy4KLQotCUFsc28gc3BlZWQgdXAgYWNjZXNzIG9mIGRlZmF1bHQgaW5zdGFuY2VzIGlmIEdYIHZhcmlhdGlvbnMgYXJlCi0JYWN0aXZlLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZVJlYyk6IEFkZAotCWBpc19kZWZhdWx0X2luc3RhbmNlJyBtZW1iZXIuCi0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IEluaXRpYWxpemUKLQlgaXNfZGVmYXVsdF9pbnN0YW5jZScuCi0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLAotCWxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBBZGQgdGVzdCBmb3IgZGVmYXVsdCBpbnN0YW5jZS4KLQkoVFRfTG9hZF9HbHlwaCk6IExvYWQgZW1iZWRkZWQgYml0bWFwcyBmb3IgZGVmYXVsdCBpbnN0YW5jZSBvbmx5LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9TZXRfTU1fQmxlbmQpOiBDb21wdXRlCi0JYGlzX2RlZmF1bHRfaW5zdGFuY2UnLgotCi0yMDE2LTA5LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIENsZWFuIHVwIGBUVF9GYWNlJyBzdHJ1Y3R1cmUuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlUmVjKTogUmVtb3ZlIHVudXNlZAotCWZpZWxkcyBgaG9yel9tZXRyaWNzJyBhbmQgYHZlcnRfbWV0cmljcycuCi0JVXBkYXRlIGRvY3VtZW50YXRpb24uCi0KLQkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2RvbmVfZmFjZSk6IFVwZGF0ZWQuCi0KLTIwMTYtMDktMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCU1vcmUgRlRfWkVSTyB1c2FnZS4KLQotCSogc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyAoZ3h2X0NsYXNzVGFibGVfdmFsaWRhdGUpOgotCXMvZnRfbWVtc2V0L0ZUX01FTV9aRVJPLy4KLQotCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOgotCXMvZnRfbWVtc2V0L0ZUX0FSUkFZX1pFUk8vLgotCi0JKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKEZUX1pFUk8pOiBEZWZpbmUuCi0JKGZ0X2JsYWNrX25ldyk6IFVzZSBpdC4KLQkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX2dldF9jYm94KToKLQlzL0ZUX01FTV9aRVJPL0ZUX1pFUk8vLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoRlRfWkVSTyk6IERlZmluZS4KLQkoZ3JheV9yYXN0ZXJfbmV3KTogVXNlIGl0LgotCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfZ2V0X2Nib3gpOgotCXMvRlRfTUVNX1pFUk8vRlRfWkVSTy8uCi0KLTIwMTYtMDktMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSovKjogcy9GVF9NRU1fWkVSTy9GVF9aRVJPLyB3aGVyZSBhcHByb3ByaWF0ZS4KLQotMjAxNi0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBUcmFjZSBudW1iZXIgb2YgZXhlY3V0ZWQgb3Bjb2Rlcy4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IEltcGxlbWVudCBpdC4KLQotMjAxNi0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBTcGVlZCB1cCBgVFRfTG9hZF9HbHlwaCcuCi0KLQlUaGlzIGF2b2lkcyBhZGRpdGlvbmFsIGNhbGxzIHRvIGB0dF9mYWNlX2xvb2t1cF90YWJsZScgZm9yIHRoZQotCWBnbHlmJyB0YWJsZSwgd2hpY2ggY2FuIGJlIGV4cGVuc2l2ZS4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0xvYWRlclJlYyk6IE1vdmUKLQlgZ2x5Zl9vZmZzZXQnIGZpZWxkIHRvIC4uLgotCShUVF9GYWNlUmVjKTogLi4uIHRoaXMgc3RydWN0dXJlLgotCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IFVwZGF0ZWQuCi0JKHR0X2xvYWRlcl9pbml0KTogTW92ZSBpbml0aWFsaXphdGlvbiBvZiBgZ2x5Zl9vZmZzZXQnIHRvIC4uLgotCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2xvY2EpOiAuLi4gdGhpcyBmdW5jdGlvbi4KLQotMjAxNi0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBJbnRyb2R1Y2UgZHluYW1pYyBsaW1pdHMgZm9yIHNvbWUgYnl0ZWNvZGUgb3Bjb2Rlcy4KLQotCVRoaXMgc3BlZWRzIHVwIEZyZWVUeXBlJ3MgaGFuZGxpbmcgb2YgbWFsZm9ybWVkIGZvbnRzLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogU2V0IHVwIGxpbWl0cyBmb3IgdGhlIG51bWJlcgotCW9mIHR3aWxpZ2h0IHBvaW50cywgdGhlIHRvdGFsIG51bWJlciBvZiBuZWdhdGl2ZSBqdW1wcywgYW5kIHRoZQotCXRvdGFsIG51bWJlciBvZiBsb29wcyBpbiBMT09QQ0FMTCBvcGNvZGVzLiAgVGhlIHZhbHVlcyBhcmUgYmFzZWQgb24KLQl0aGUgbnVtYmVyIG9mIHBvaW50cyBhbmQgZW50cmllcyBpbiB0aGUgQ1ZUIHRhYmxlLgotCShJbnNfSk1QUik6IFRlc3QgbmVnYXRpdmUganVtcCBjb3VudGVyLgotCShJbnNfTE9PUENBTEwpOiBUZXN0IGxvb3BjYWxsIGNvdW50ZXIuCi0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9FeGVjQ29udGV4dCk6IFVwZGF0ZWQuCi0KLQkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KLQotMjAxNi0wOS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBTYW5pdGl6ZSBvbmx5IGxhc3QgZW50cnkgb2YgYGxvY2EnIHRhYmxlLgotCi0JV2l0aG91dCB0aGlzIHBhdGNoLCBhIGxvY2Egc2VxdWVuY2UgbGlrZSBgMCAxMDAwMDAgMCAxMDAwMDAgLi4uJywKLQl3aGVyZSB2YWx1ZSAxMDAwMDAgaXMgbGFyZ2VyIHRoYW4gdGhlIGBnbHlmJyB0YWJsZSBzaXplLCBtYWtlcwotCUZyZWVUeXBlIGhhbmRsZSB0aGUgd2hvbGUgYGdseWYnIHRhYmxlIGFzIGEgc2luZ2xlIGdseXBoIGFnYWluIGFuZAotCWFnYWluLCB3aGljaCBpcyBjZXJ0YWlubHkgaW52YWxpZCAoYW5kIGNhbiBiZSB2ZXJ5IHNsb3csIHRvbykuCi0KLQkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfZ2V0X2xvY2F0aW9uKTogSW1wbGVtZW50LgotCUltcHJvdmUgdHJhY2luZyBtZXNzYWdlcy4KLQotMjAxNi0wOS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgKExMVk1GdXp6ZXJUZXN0T25lSW5wdXQpOiBGaXggdHlwby4KLQotMjAxNi0wOS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2F1dG9maXRdIFRyYWNpbmcgZml4ZXMuCi0KLQkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKGFmX2F1dG9maXR0ZXJfbG9hZF9nbHlwaCk6IENhbGwgZHVtcGluZwotCWZ1bmN0aW9ucyBvbmx5IGlmIHdlIGFjdHVhbGx5IGRvIHRyYWNpbmcuCi0KLTIwMTYtMDktMjIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVtzbW9vdGhdIFJlZHVjZSBkaXZpc2lvbnMgaW4gdGhlIGxpbmUgcmVuZGVyZXIuCi0KLQlXZSBkb24ndCBuZWVkIHNvbWUgZGl2aXNpb25zIGlmIGEgbGluZSBzZWdtZW50cyBzdGF5cyB3aXRoaW4gYSBzaW5nbGUKLQlyb3cgb3IgYSBzaW5nbGUgY29sdW1uIG9mIHBpeGVscy4KLQotCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX2xpbmUpIFtGVF9MT05HNjRdOiBNYWtlIGRpdmlzaW9ucwotCWNvbmRpdGlvbmFsLgotCi0yMDE2LTA5LTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3N3ZWVwKTogUmVtb3ZlIGNoZWNrIGZvciBlbXB0eSB0YWJsZS4KLQotMjAxNi0wOS0xNCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JW3Ntb290aF0gQW5vdGhlciB0aW55IHNwZWVkLXVwLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9maW5kX2NlbGwpOiBNZXJnZSBpbnRvLi4uCi0JKGdyYXlfcmVjb3JkX2NlbGwpOiAuLi4gdGhpcyBmdW5jdGlvbi4KLQotMjAxNi0wOS0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV97ZmluZCxzZXR9X2NlbGwpOiBSZW1vdmUgZHViaW91cyBjb2RlLgotCi0yMDE2LTA5LTExICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbc21vb3RoXSBGaXggdmFsZ3JpbmQgd2FybmluZyBhbmQgcmVvcHRpbWl6ZS4KLQotCVRoZSBhbGdvcml0aG0gY2FsbHMgYGdyYXlfc2V0X2NlbGwnIGF0IHRoZSBzdGFydCBvZiBlYWNoIG5ldyBjb250b3VyCi0Jb3Igd2hlbiB0aGUgY29udG91cnMgY3Jvc3MgdGhlIGNlbGwgYm91bmRhcmllcy4gRG91YmxlLWNoZWNraW5nIGZvcgotCXRoYXQgaXMgd2FzdGVmdWwuCi0KLQkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3NldF9jZWxsKTogUmVtb3ZlIGNoZWNrIGZvciBhIG5ldyBjZWxsLgotCShncmF5X2NvbnZlcnRfZ2x5cGgpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb24gaW50cm9kdWNlZCBieSA0NGIxNzJlODguCi0KLTIwMTYtMDktMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBGaXggcHJldmlvdXMgY29tbWl0LgotCi0JUHJvYmxlbXMgcmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NDAKLQotCVdlIG5vdyBtYXAgdGhlIHN0cmlrZSBpbmRleCByaWdodCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBwaHlzaWNhbAotCWRhdGEsIG5vdCBlYXJsaWVyLgotCi0JKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBTZXQgYGZhY2UtPnNiaXRfc3RyaWtlX21hcCcKLQlhZnRlciBjcmVhdGluZyB0aGUgbWFwIHNvIHRoYXQuLi4KLQotCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcyk6IC4uLiB0aGlzIGZ1bmN0aW9uCi0JY2FuIGJlIHVzZWQgYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIHVwIGBzYml0X3N0cmlrZV9tYXAnLgotCSh0dF9mYWNlX3NldF9zYml0X3N0cmlrZSk6IFJldmVydCBjaGFuZ2UuCi0JKHR0X3NiaXRfZGVjb2Rlcl9pbml0LCB0dF9mYWNlX2xvYWRfc2JpeF9pbWFnZSk6IE1hcCBzdHJpa2UgaW5kZXguCi0KLQkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3NlbGVjdCk6IFJldmVydCBjaGFuZ2UuCi0KLTIwMTYtMDktMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtmdGZ1enplcl0gTWlub3IgaW1wcm92ZW1lbnRzLgotCi0JKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgKExMVk1GdXp6ZXJUZXN0T25lSW5wdXQpOiBJZ25vcmUKLQlpbnZhbGlkIHN0cmlrZXMuCi0JVXNlIGJldHRlciB2YWx1ZXMgZm9yIGNhbGwgdG8gYEZUX1NldF9DaGFyX1NpemUnLgotCi0yMDE2LTA5LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gRG9uJ3QgcHJvdmlkZSAoY29tcGxldGVseSkgYnJva2VuIHN0cmlrZSBkYXRhLgotCi0JRnJlZVR5cGUgdHJpZXMgdG8gc2FuaXRpemUgc3RyaWtlIGhlYWRlciBkYXRhOyB3ZSBub3cgcmVqZWN0Ci0JY29tcGxldGVseSBicm9rZW4gb25lcy4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBOZXcKLQlgc2JpdF9zdHJpa2VfbWFwJyBhcnJheSBwb2ludGVyLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTWF0Y2hfU2l6ZSk6IFJlamVjdCBtYXRjaGVzIHdoZXJlIGVpdGhlcgotCXdpZHRoIG9yIGhlaWdodCB3b3VsZCBiZSB6ZXJvLgotCUFkZCB0cmFjaW5nIG1lc3NhZ2UgaW4gY2FzZSBvZiBlcnJvci4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogUG9wdWxhdGUgYHNiaXRfc3RyaWtlX21hcCcsCi0Jb25seSB1c2luZyAobW9yZSBvciBsZXNzKSB2YWxpZCBzdHJpa2UgaGVhZGVyIGRhdGEgZm9yCi0JRlRfRmFjZSdzIGBhdmFpbGFibGVfc2l6ZXMnIGFycmF5LgotCShzZm50X2RvbmVfZmFjZSk6IFVwZGF0ZWQuCi0KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX3NldF9zYml0X3N0cmlrZSk6IFVzZQotCWBzYml0X3N0cmlrZV9tYXAnLgotCSh0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpOiBJbXByb3ZlIHRyYWNpbmcuCi0KLQkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3NlbGVjdCk6IFVzZSBgc2JpdF9zdHJpa2VfbWFwJy4KLQotMjAxNi0wOS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBWZXJzaW9uIDIuNyByZWxlYXNlZC4KLQk9PT09PT09PT09PT09PT09PT09PT09PQotCi0KLQlUYWcgc291cmNlcyB3aXRoIGBWRVItMi03Jy4KLQotCSogZG9jcy9WRVJTSU9OLlRYVDogQWRkIGVudHJ5IGZvciB2ZXJzaW9uIDIuNy4KLQotCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAotCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAotCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCi0JYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAotCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKLQlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKLQlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKLQlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCi0JYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCi0JYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNi41LzIuNy8sIHMvMjY1LzI3Ly4KLQotCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9NSU5PUik6IFNldCB0byA3LgotCShGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAwLgotCi0JKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTg6NjoxMi4KLQkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX01JTk9SKTogU2V0IHRvIDcuCi0JKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMC4KLQotCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgotCi0yMDE2LTA5LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBJbmNsdWRlIGB0dGd4dmFyLmgnLgotCi0JVGhpcyBmaXhlcyB0aGUgYG11bHRpJyBidWlsZC4KLQotMjAxNi0wOS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2F1dG9maXRdIEFub3RoZXIgaW1wcm92ZW1lbnQgdG8gQXJtZW5pYW4gc3VwcG9ydC4KLQotCVN1Z2dlc3RlZCBieSBIcmFudCBIIFBhcGF6aWFuIDxocGFwYXppYW5AZ21haWwuY29tPi4KLQotCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogVXNlIGJldHRlciBzdWl0ZWQgY2hhcmFjdGVycyB0byBkZXJpdmUKLQlkZWZhdWx0IHN0ZW0gd2lkdGhzLgotCi0yMDE2LTA5LTA3ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2hsaW5lKTogTWljcm8tb3B0aW1pemUuCi0KLTIwMTYtMDktMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVtzbW9vdGhdIE9wZXJhdGUgaW4gYWJzb2x1dGUgYml0bWFwIGNvb3JkaW5hdGVzLgotCi0JU2ltcGxlciBiaXRtYXAgYWRkcmVzc2luZyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieSAxLjUlLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9UV29ya2VyKTogUmVtb3ZlIGNvdW50IGZpZWxkcy4KLQkoZ3JheV9kdW1wX2NlbGxzLCBncmF5X2ZpbmRfY2VsbCwgZ3JheV9zZXRfY2VsbCwgZ3JheV9obGluZSwKLQlncmF5X3N3ZWVwLCBncmF5X2NvbnZlcnRfZ2x5cGgsIGdyYXlfcmFzdGVyX3JlbmRlcik6IFVwZGF0ZWQuCi0KLTIwMTYtMDktMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVtzbW9vdGhdIEltcHJvdmUgY29udG91ciBzdGFydCAodGFrZSAyKS4KLQotCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfbW92ZV90byk6IENhbGwgYGdyYXlfc2V0X2NlbGwnIGRpcmVjdGx5Ci0JaW5zdGVhZCBvZi4uLgotCShncmF5X3N0YXJ0X2NlbGwpOiAuLi4gdGhpcyBmdW5jdGlvbiwgd2hpY2ggaXMgcmVtb3ZlZC4KLQkoZ3JheV9jb252ZXJ0X2dseXBoKTogTWFrZSBpbml0aWFsIHktY29vcmRpbmF0ZSBpbnZhbGlkLgotCi0yMDE2LTA5LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHlwZTFdIE1NIGZvbnRzIHN1cHBvcnQgZXhhY3RseSB6ZXJvIG5hbWVkIGluc3RhbmNlcyAoIzQ4NzQ4KS4KLQotCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9HZXRfTU1fVmFyKTogU2V0IGBudW1fbmFtZWRzdHlsZXMnIHRvIHplcm8uCi0KLTIwMTYtMDktMDYgIEpvbmF0aGFuIEtldyAgPGpma3RoYW1lQGdtYWlsLmNvbT4KLQotCVtjZmZdIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeS4KLQotCVByb2JsZW0gcmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDI4OAotCi0JKiBzcmMvY2ZmL2NmMmludGVycC5jIChjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKTogSW5pdGlhbGl6ZSBgc3RvcmFnZScKLQlhcnJheSB0byBoYW5kbGUgYSBgZ2V0JyBvcGNvZGUgd2l0aG91dCBhIHByZXZpb3VzIGBwdXQnLgotCi0yMDE2LTA5LTA1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X21vdmVfdG8sIGdyYXlfc3RhcnRfY2VsbCk6IFJldmVydC4KLQotMjAxNi0wOS0wNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JW3Ntb290aF0gSW1wcm92ZSBjb250b3VyIHN0YXJ0LgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9tb3ZlX3RvKTogQ2FsbCBgZ3JheV9zZXRfY2VsbCcgZGlyZWN0bHkKLQlpbnN0ZWFkIG9mLi4uCi0JKGdyYXlfc3RhcnRfY2VsbCk6IC4uLiB0aGlzIGZ1bmN0aW9uLCB3aGljaCBpcyByZW1vdmVkLgotCi0yMDE2LTA5LTA1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2ZmXSBGaXggbWVtb3J5IGluaXRpYWxpemF0aW9uLgotCi0JKiBzcmMvY2ZmL2NmMnN0YWNrLmMgKGNmMl9zdGFja19pbml0KTogVXNlIGBGVF9ORVcnLiAgVGhlIGBRJwotCXZhcmlhbnRzIG9mIEZyZWVUeXBlJ3MgbWVtb3J5IGFsbG9jYXRpb24gbWFjcm9zIGRvbid0IGRvIHplcm9pbmcuCi0KLTIwMTYtMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtmdHJhbmRvbV0gTWlub3IgaW1wcm92ZW1lbnRzLgotCi0JKiBzcmMvdG9vbHMvZnRyYW5kb20vZnRyYW5kb20uYyAoX1hPUEVOX1NPVVJDRSk6IE5ldyBtYWNybywgc2V0IHRvCi0JNTAwLgotCi0JKiBzcmMvdG9vbHMvZnRyYW5kb20vTWFrZWZpbGUgKENGTEFHUyk6IFNwbGl0IG9mZiBpbmNsdWRlCi0JZGlyZWN0b3JpZXMgdG8gLi4uCi0JKElOQ0xVREVTKTogLi4uIHRoaXMgbmV3IHZhcmlhYmxlLgotCShMREZMQUdTKTogTmV3IHZhcmlhYmxlLgotCShmdHJhbmRvbS5vLCBmdHJhbmRvbSk6IFVwZGF0ZWQuCi0KLTIwMTYtMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVthdXRvZml0XSBJbXByb3ZlIEFybWVuaWFuIHN1cHBvcnQuCi0KLQlUaGFua3MgdG8gSHJhbnQgSCBQYXBhemlhbiA8aHBhcGF6aWFuQGdtYWlsLmNvbT4gZm9yIGhlbHAuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5kYXQgKEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOXyopOiBJbXByb3ZlCi0Jc2VsZWN0aW9uIG9mIGNoYXJhY3RlcnMuCi0KLQkqIHNyYy9hdXRvZml0L2FmYmx1ZS5jLCBzcmMvYXV0b2ZpdC9hZmJsdWUuaDogUmVnZW5lcmF0ZWQuCi0KLTIwMTYtMDktMDQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtmdHJhbmRvbV0gSW1wcm92ZSBNYWtlZmlsZS4KLQotCUl0IG5vdyBzdXBwb3J0cyBib3RoIGEgbm9ybWFsIGJ1aWxkIChgLi9jb25maWd1cmUgJiYgbWFrZScpIGFuZCBhCi0JZGV2ZWxvcG1lbnQgYnVpbGQgKGBtYWtlIGRldmVsJykuCi0KLQkqIHNyYy90b29scy9mdHJhbmRvbS9NYWtlZmlsZSAoVlBBVEgpOiBTZXQgaXQgc28gdGhhdAotCWBsaWJmcmVldHlwZS5hJyBnZXRzIHNlYXJjaGVkIGluIGJvdGggYG9ianMnIChmb3IgdGhlIGRldmVsb3BtZW50Ci0JYnVpbGQpIGFuZCBgb2Jqcy8ubGlicycgKGZvciBhIG5vcm1hbCBidWlsZCB3aGljaCB1c2VzIGxpYnRvb2wpLgotCShMSUJTKTogQWRkIG1pc3NpbmcgbGlicmFyaWVzLgotCShmdHJhbmRvbS5vKTogTmV3IHJ1bGUuCi0JKGZ0cmFuZG9tKTogVXNlIGF1dG9tYXRpYyB2YXJpYWJsZXMuCi0KLTIwMTYtMDktMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gTW9yZSBmaXhlcyBmb3IgaGFuZGxpbmcgb2YgR1ggZGVsdGFzLgotCi0JUHJvYmxlbXMgcmVwb3J0ZWQgYnkgQm9iIFRheWxvciA8Qm9iLlRheWxvckBtb25vdHlwZS5jb20+LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IEZpeCByb3VnaAotCXNhbml0eSB0ZXN0IGZvciBnbHlwaCB2YXJpYXRpb24gYXJyYXkgaGVhZGVyIHNpemUuCi0JQWx3YXlzIHNldCBzdHJlYW0gcG9zaXRpb24gYmVmb3JlIHJlYWRpbmcgcGFja2VkIHggYW5kIHkgZGVsdGFzLgotCUZpeCB0aGlua28gdy5yLnQuIGBsb2NhbHBvaW50cycgYXJyYXkuCi0KLTIwMTYtMDktMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtmdHJhbmRvbV0gVmFyaW91cyBmaXhlcy4KLQotCSogc3JjL3Rvb2xzL2Z0cmFuZG9tL2Z0cmFuZG9tLmMgKEdPT0RfRk9OVFNfRElSKTogUHJvdmlkZSBiZXR0ZXIKLQlkZWZhdWx0LgotCShlcnJvcl9mcmFjdGlvbik6IE1ha2UgaXQgb2YgdHlwZSBgZG91YmxlJyB0byB3b3JrIGFzIGFkdmVydGl6ZWQg4oCTCi0JdGhpcyB3YXMgY29tcGxldGVseSBicm9rZW4uCi0JVXBkYXRlIGFsbCByZWxhdGVkIGNvZGUuCi0JKGVycm9yX2NvdW50LCBmY250KTogTWFrZSBpdCB1bnNpZ25lZCB0byBmaXggY29tcGlsZXIgd2FybmluZ3MuCi0JVXBkYXRlIGFsbCByZWxhdGVkIGNvZGUuCi0JKGZvbnRsaXN0KTogQ2hhbmdlIGBsZW4nIG1lbWJlciB0byBgbG9uZycgdG8gZml4IGNvbXBpbGVyIHdhcm5pbmdzLgotCShGVF9Nb3ZlVG8sIEZUX0xpbmVUbywgRlRfQ29uaWNUbywgRlRfQ3ViaWNUbywgYWJvcnRfdGVzdCk6IFRhZwotCXVudXNlZCB2YXJpYWJsZXMuCi0JKFRlc3RGYWNlLCBGaW5kRm9udHMsIGNvcHlmb250LCBkb190ZXN0KTogRml4IGNvbXBpbGVyIHdhcm5pbmdzLgotCShFeGVjdXRlVGVzdCk6IERpdHRvLgotCUNhbGwgYEZUX0RvbmVfRnJlZVR5cGUnLgotCShnZXRFcnJvckNudCk6IFJlcGxhY2UgYGNlaWwnIHdpdGggYW4gb3JkaW5hcnkgY2FzdCB0byBgdW5zaWduZWQKLQlpbnQnLgotCSh1c2FnZSk6IEltcHJvdmUgb3V0cHV0LgotCShtYWluKTogRml4IGNvbXBpbGVyIHdhcm5pbmdzLgotCi0JKiBzcmMvdG9vbHMvZnRyYW5kb20vUkVBRE1FOiBVcGRhdGVkLgotCi0yMDE2LTA5LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYmFzZV0gQXZvaWQgbmVnYXRpdmUgYml0bWFwIHN0cm9rZSBkaW1lbnNpb25zICgjNDg5ODUpLgotCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfT3Blbl9GYWNlKTogQ2hlY2sgd2hldGhlciBuZWdhdGlvbiB3YXMKLQlhY3R1YWxseSBzdWNjZXNzZnVsLiAgRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGZhaWwgZm9yIHZhbHVlCi0JLTMyNzY4IGlmIHRoZSB0eXBlIGlzIGBzaWduZWQgc2hvcnQnLiAgSWYgdGhlcmUgYXJlIHByb2JsZW1zLAotCWRpc2FibGUgdGhlIHN0cm9rZS4KLQotMjAxNi0wOS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2NmZl0gQXZvaWQgbnVsbCBwb2ludGVyIHBhc3NlZCB0byBGVF9NRU1fQ09QWSAoIzQ4OTg0KS4KLQotCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9pbmRleF9nZXRfbmFtZSk6IENoZWNrIGBieXRlX2xlbicuCi0KLTIwMTYtMDktMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt1bml4XSBFbmFibGUgNjRiaXQgc3VwcG9ydCBpbiBmaWxlIHN5c3RlbSBhY2Nlc3MgKCM0ODk2MikuCi0KLQkqIGJ1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXc6IENhbGwgYEFDX1NZU19MQVJHRUZJTEUnLgotCi0yMDE2LTA5LTAyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gQXZvaWQgbGVmdCBzaGlmdCBvZiBuZWdhdGl2ZSB2YWx1ZSAoIzQ4OTgwKS4KLQotCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdF9hbGlnbmVkKTogVXNlIHVuc2lnbmVkCi0JY29uc3RhbnQuCi0KLTIwMTYtMDktMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfaGxpbmUpOiBGaXggY2xhbmcgY29tcGlsZXIgd2FybmluZ3MuCi0KLTIwMTYtMDktMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVNvbWUgcHJlcGFyYXRpb25zIGZvciB0aGUgbmV4dCByZWxlYXNlLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCi0JKFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyk6IEVuYWJsZS4KLQotCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgotCi0yMDE2LTA5LTAxICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbc21vb3RoXSBTaW1wbGlmeSBzcGFuIHJlbmRlcmluZyBtb3JlLgotCi0JSXQgdHVybnMgb3V0IHRoYXQgdGhlcmUgaXMgc2lnbmlmaWNhbnQgY29zdCBhc3NvY2lhdGVkIHdpdGggYEZUX1NwYW4nCi0JY3JlYXRpb24gYW5kIGNhbGxzIHRvIGBncmF5X3JlbmRlcl9zcGFuJyBiZWNhdXNlIGl0IGhhcHBlbnMgc28KLQlmcmVxdWVudGx5LiBUaGlzIHJlbW92ZXMgdGhlc2Ugc3RlcHMgZnJvbSBvdXIgaW50ZXJuYWwgdXNlIGJ1dCBsZWF2ZXMKLQlpdCBhbG9uZSBmb3IgYEZUX1JBU1RFUl9GTEFHX0RJUkVDVCIgdG8gcHJlc2VydmUgQVBJLiBUaGUgc3BlZWQgZ2FpbgotCWlzIGFib3V0IDUlLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yZW5kZXJfc3Bhbik6IFJlbW92ZWQuIFRoZSBjb2RlIGlzCi0JbWlncmF0ZWQgdG8uLi4KLQkoZ3JheV9obGluZSk6IC4uLiBoZXJlLgotCi0yMDE2LTA4LTMwICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbc21vb3RoXSBTdHJlYW1saW5lIHBpeG1hcCBkcmF3aW5nIGEgYml0IG1vcmUuCi0KLQlaZXJvIGNvdmVyYWdlIGlzIHVubGlrZWx5ICgxIG91dCBvZiAyNTYpIHRvIHdhcnJhbnQgY2hlY2tpbmcuIFRoaXMKLQlnaXZlcyAwLjUlIHNwZWVkIGltcHJvdmVtZW50IGluIHJlbmRlcmluZyBzaW1wbGUgZ2x5cGhzLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9obGluZSwgZ3JheV9yZW5kZXJfc3Bhbik6IFJlbW92ZSBjaGVja3MuCi0KLTIwMTYtMDgtMjkgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVtzbW9vdGhdIFN0cmVhbWxpbmUgcGl4bWFwIGRyYXdpbmcuCi0KLQlUaGlzIGdpdmVzIDIlIHNwZWVkIGltcHJvdmVtZW50IGluIHJlbmRlcmluZyBzaW1wbGUgZ2x5cGhzLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoVFBpeG1hcCk6IFJlZHVjZWQgcGl4bWFwIGRlc2NyaXB0b3Igd2l0aCBhCi0JcG9pbnRlciB0byBpdHMgYm90dG9tLWxlZnQgYW5kIHBpdGNoIHRvIGJlIHVzZWQgaW4uLi4KLQkoZ3JheV9UV29ya2VyKTogLi4uIGhlcmUuCi0JKGdyYXlfcmVuZGVyX3NwYW4pOiBNb3ZlIHBpeG1hcCBmbG93IGNoZWNrIGZyb20gaGVyZS4uLgotCShncmF5X3Jhc3Rlcl9yZW5kZXIpOiAuLiB0byBoZXJlLgotCi0yMDE2LTA4LTI3ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+Ci0KLQlbc21vb3RoXSBSZWR1Y2Ugc3RhY2sgb2YgYmFuZCBib3VuZGFyaWVzLgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9UQmFuZCk6IFJlbW92ZWQuCi0JKGdyYXlfY29udmVydF9nbHlwaCk6IFVwZGF0ZWQgdG8gc3RhY2sgYmFuZCBib3VuZGFyaWVzIGNvbmNpc2VseS4KLQotMjAxNi0wOC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBzcmMvY2lkL2NpZGxvYWQuYyAoY2lkX2ZhY2Vfb3Blbik6IEltcHJvdmUgaGFuZGxpbmcgb2YgYFNEQnl0ZXMnLgotCi0yMDE2LTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbY2lkXSBGaXggY29tbWl0IGZyb20gMjAxNi0wNS0xNi4KLQotCSogc3JjL2NpZC9jaWRwYXJzZS5jIChjaWRfcGFyc2VyX25ldyk6IEZpeCBvZmYtYnktb25lIGVycm9ycy4KLQotMjAxNi0wOC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIENhY2hlIG9mZnNldCBhbmQgc2l6ZSB0byBiaXRtYXAgZGF0YSB0YWJsZS4KLQotCVRoaXMgY29tbWl0IGF2b2lkcyBgRUJEVCcgYW5kIGZyaWVuZHMgYmVpbmcgbG9va2VkIHVwIGFnYWluIGFuZAotCWFnYWluIHdoaWxlIGxvYWRpbmcgYSBzaW5nbGUgZW1iZWRkZWQgYml0bWFwLgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZVJlYykKLQlbVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTXTogTmV3IGZpZWxkcyBgZWJkdF9zdGFydCcgYW5kCi0JYGViZHRfc2l6ZScuCi0KLQkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfaW5pdCk6IE1vdmUgdGFibGUgbG9va3VwIHRvIC4uLgotCSh0dF9mYWNlX2xvYWRfc2JpdCk6IC4uLiB0aGlzIGZ1bmN0aW9uOyBhbHNvIHN0b3JlIHRoZSB0YWJsZSBzaXplCi0JYW5kIG9mZnNldC4KLQotMjAxNi0wOC0yNiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfcmVuZGVyKTogTWlub3IgdHdlYWtzLgotCi0yMDE2LTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHlwZTFdIEZpeCBoZWFwIGJ1ZmZlciBvdmVyZmxvdy4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTM2Ci0KLQkqIHNyYy90eXBlMS90MWxvYWQuYyAocGFyc2VfY2hhcnN0cmluZ3MpOiBSZWplY3QgZm9udHMgdGhhdCBkb24ndAotCWNvbnRhaW4gZ2x5cGggbmFtZXMuCi0KLTIwMTYtMDgtMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVtzZm50XSBGaXggcHJldmlvdXMgY29tbWl0ICgjNDg5MDEpLgotCi0JKiBzcmMvc2ZudC90dGNtYXAuYyAodHRfY21hcDRfY2hhcl9tYXBfYmluYXJ5KTogVGhpbmtvcy4KLQotMjAxNi0wOC0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIFNwZWVkIHVwIGhhbmRsaW5nIG9mIGludmFsaWQgZm9ybWF0IDQgY21hcHMuCi0KLQkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwNF9uZXh0LCB0dF9jbWFwNF9jaGFyX21hcF9iaW5hcnkpOiBBZGQKLQl0ZXN0cyBmb3IgYG51bV9nbHlwaCcgZnJvbSBgdHRfY21hcDRfY2hhcl9tYXBfbGluZWFyJy4KLQotMjAxNi0wOC0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmg6IFJlbW92ZSB1bnVzZWQgdHlwZWRlZnMuCi0KLTIwMTYtMDgtMjIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCVtzbW9vdGhdIFNpbXBsaWZ5IHNwYW4gcmVuZGVyaW5nLgotCi0JVGhpcyByZW1vdmVzIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgb2Ygc3BhbiBtZXJnaW5nIGFuZCBidWZmZXJpbmcuCi0JSW5zdGVhZCwgdGhlIHNwYW5zIGFyZSByZW5kZXJlZCBhcyB0aGV5IGNvbWUsIHNwZWVkaW5nIHVwIHRoZQotCXJlbmRlcmluZyBieSBhYm91dCA1JSBhcyBhIHJlc3VsdC4KLQotCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgW0ZUX01BWF9HUkFZX1NQQU5TXTogTWFjcm8gcmVtb3ZlZC4KLQkoZ3JheV9UV29ya2VyKTogUmVtb3ZlIHNwYW4gYnVmZmVyIGFuZCByZWxhdGVkIGZpZWxkcy4KLQkoZ3JheV9zd2VlcCwgZ3JheV9obGluZSk6IFVwZGF0ZWQuCi0KLQkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oOiBSZW1vdmUgZG9jdW1lbnRhdGlvbiBub3RlIGFib3V0Ci0JYEZUX01BWF9HUkFZX1NQQU5TJywgd2hpY2ggd2FzIG5ldmVyIGluIGBmdG9wdGlvbi5oJyBhbmQgaXMgbm93IGdvbmUuCi0KLTIwMTYtMDgtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IGBNUFMnIGluc3RydWN0aW9uLgotCi0JQWNjb3JkaW5nIHRvIEdyZWcgSGl0Y2hjb2NrLCBNUFMgaW4gRFdyaXRlIHJlYWxseSByZXR1cm5zIHRoZSBwb2ludAotCXNpemUuCi0KLQkqIHNyYy90cnVldHlwZS90dG9ianMuaCAoVFRfU2l6ZVJlYyk6IEFkZCBgcG9pbnRfc2l6ZScgbWVtYmVyLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2l6ZV9yZXF1ZXN0KTogU2V0IGBwb2ludF9zaXplJy4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggKFRUX0V4ZWNDb250ZXh0UmVjKTogQWRkIGBwb2ludFNpemUnCi0JbWVtYmVyLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfTG9hZF9Db250ZXh0KTogVXBkYXRlZC4KLQkoSW5zX01QUyk6IEZpeCBpbnN0cnVjdGlvbi4KLQotMjAxNi0wOC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2x6d10gT3B0aW1pemUgbGFzdCBjb21taXQuCi0KLQkqIHNyYy9sencvZnR6b3Blbi5jIChmdF9sendzdGF0ZV9nZXRfY29kZSk6IE1vdmUgY2hlY2sgaW50bwotCWNvbmRpdGlvbmFsIGNsYXVzZS4KLQotMjAxNi0wOC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW2x6d10gQXZvaWQgaW52YWxpZCBsZWZ0IHNoaWZ0LgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NTM2NgotCi0JKiBzcmMvbHp3L2Z0em9wZW4uYyAoZnRfbHp3c3RhdGVfZ2V0X2NvZGUpOiBMaW1pdCBgbnVtX2JpdHMnLgotCi0yMDE2LTA4LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbbHp3XSBBdm9pZCBidWZmZXIgb3ZlcnJ1bi4KLQotCVJlcG9ydGVkIGFzCi0KLQkgIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzMyODMKLQotCSogc3JjL2x6dy9mdHpvcGVuLmMgKGZ0X2x6d3N0YXRlX3JlZmlsbCk6IEVuc3VyZSBgYnVmX3NpemUnIGRvZXNuJ3QKLQl1bmRlcmZsb3cuCi0KLTIwMTYtMDgtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IGNvbXBpbGVyIHdhcm5pbmcuCi0KLQkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBBZGQgY2FzdC4KLQotMjAxNi0wOC0xMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3dpbmZvbnRzXSBBdm9pZCB6ZXJvIGJpdG1hcCB3aWR0aCBhbmQgaGVpZ2h0LgotCi0JUmVwb3J0ZWQgYXMKLQotCSAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MjE3MwotCi0JKiBzcmMvd2luZm9udHMvd2luZm50LmMgKEZOVF9GYWNlX0luaXQpOiBDaGVjayB6ZXJvIHBpeGVsIGhlaWdodC4KLQkoRk5UX0xvYWRfR2x5cGgpOiBDaGVjayBmb3IgemVybyBwaXRjaC4KLQotMjAxNi0wOC0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoUG9wX1B1c2hfQ291bnQpOiBSZXZlcnQgY2hhbmdlcy4KLQotMjAxNi0wOC0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogTWlub3IgYW5kIGZvcm1hdHRpbmcuCi0KLTIwMTYtMDgtMTEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFBvcF9QdXNoX0NvdW50KTogRml4IHNvbWUgZW50cmllcy4KLQotMjAxNi0wOC0xMCAgUGV0ZXIgS2xvdHogIDxQZXRlci5LbG90ekBpdGgtaWNvc2VydmUuY29tPgotCi0JKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9obGluZSk6IEZpeCB1bmluaXRpYWxpemVkIGFjY2Vzcy4KLQotMjAxNi0wOC0xMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnRdIFVzZSBjb3JyZWN0IHR5cGUgZm9yIGBpdGFsaWNBbmdsZScgZmllbGQgKCM0ODczMikuCi0KLQkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfcG9zdCk6IEZpeCB0eXBlcy4KLQotMjAxNi0wOC0wNiAgSm9uIFNwZW5jZXIgIDxqb25Aam9uc3BlbmNlci5jYT4KLQotCVtzZm50XSBGaXggYEZUX0dldF9BZHZhbmNlJyBmb3IgYml0bWFwIHN0cmlrZXMuCi0KLQlgRlRfR2V0X0FkdmFuY2UnIHJldHVybnMgMCBmb3IgYml0bWFwIGZvbnRzLiAgSXQgZmlyc3QgZ2V0cyB0aGUKLQlhZHZhbmNlIHZhbHVlIGZyb20gdGhlIGZvbnQgdGFibGUgYW5kIHRoZW4gc2NhbGVzIGl0IGJ5IHRoZQotCWBmb250LT5zaXplLT5tZXRyaWNzLT54X3NjYWxlJyBmaWVsZC4gIEJ1dCBgRlRfU2VsZWN0X1NpemUnIGRvZXNuJ3QKLQlzZXQgdGhhdCB2YWx1ZSBmb3IgYml0bWFwIGZvbnRzIGFuZCB0aGUgYWR2YW5jZSBnZXRzIHNjYWxlZCB0byB6ZXJvLgotCi0JVGFrZW4gZnJvbQotCi0JICBodHRwczovL2dpdGh1Yi5jb20vYmVoZGFkL2hhcmZidXp6L2lzc3Vlcy8yNTIKLQotCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcykKLQk8VFRfU0JJVF9UQUJMRV9UWVBFX0VCTEM+OiBTZXQgc2NhbGUgdmFsdWVzLgotCi0yMDE2LTA4LTA2ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KLQotCVt0cnVldHlwZV0gRml4IEdYIHZhcmlhdGlvbiBoYW5kbGluZyBvZiBjb21wb3NpdGVzLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKQotCVtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogQ2hlY2sgYEFSR1NfQVJFX1hZX1ZBTFVFUycgZmxhZy4KLQotMjAxNi0wOC0wNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgotCi0JW3Ntb290aF0gTWlub3IgcmVmYWN0b3JpbmcuCi0KLQkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9zY2FubGluZSwgZ3JheV9yZW5kZXJfbGluZSk6Ci0JVXBkYXRlZC4KLQotMjAxNi0wNy0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3NmbnQsIHRydWV0eXBlXSBEb24ndCBhYm9ydCBvbiBpbnZhbGlkIGBtYXhDb21wb25lbnREZXB0aCcuCi0KLQlTaW5jZSAyMDE2LTA1LTE2IHdlIGRldGVjdCBpbmZpbml0ZSByZWN1cnNpb24gZGlyZWN0bHkuCi0KLQkqIHNyYy9zZm50L3R0bG9hZC5jICh0dF9mYWNlX2xvYWRfbWF4cCk6IERvbid0IGFkanVzdAotCWBtYXhDb21wb25lbnREZXB0aCcuCi0JKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChsb2FkX3RydWV0eXBlX2dseXBoKTogRG9uJ3QgYWJvcnQgaWYKLQlgbWF4Q29tcG9uZW50RGVwdGgnIGlzIG5vdCB2YWxpZC4gIEluc3RlYWQsIHNpbXBseSBhZGp1c3QgaXRzIHZhbHVlCi0JYW5kIGVtaXQgYSB0cmFjaW5nIG1lc3NhZ2UuCi0KLTIwMTYtMDctMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9tZXRyaWNzX3NjYWxlX2RpbSk6IE1pbm9yLgotCi0JTm8gZnVuY3Rpb25hbCBjaGFuZ2UuCi0KLTIwMTYtMDctMjIgIEhpbi1UYWsgTGV1bmcgIDxodGwxMEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLQlbdHJ1ZXR5cGVdIFJlY29yZCB0aGUgZW5kIG9mIElERUZzLgotCi0JVG8gbWF0Y2ggdGhlIGxvZ2ljIGluIEZERUYuICBUaGUgdmFsdWUgb2YgdGhlIGVuZCBpcyBvbmx5IHVzZWQgZm9yCi0JYm91bmQtY2hlY2tpbmcgaW4gYEluc19KTVBSJywgc28gaXQgbWF5IG5vdCBoYXZlIGJlZW4gb2J2aW91cyB0aGF0Ci0JaXQgd2FzIG5vdCByZWNvcmRlZC4gIFRlc3RlZCAoYXMgcGFydCBvZiBGb250IFZhbGlkYXRvciAyLjApIGFsbCB0aGUKLQlmb250cyBvbiBGZWRvcmEgYW5kIGRpZCBub3Qgc2VlIGFueSBjaGFuZ2UuCi0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfSURFRik6IFVwZGF0ZWQuCi0KLTIwMTYtMDctMTkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gU2FuaXRpemVyIGZpeCwgc2Vjb25kIHRyeS4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMpOiBGaXggYm91bmRhcnkKLQl0ZXN0cyBhbmQgdXNlIG9ubHkgb25lIHNsb3QgbW9yZS4KLQotMjAxNi0wNy0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBTYW5pdGl6ZXIgZml4LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfcmVhZHBhY2tlZHBvaW50cyk6IEluY3JlYXNlIGFycmF5Ci0JdG8gZml4IG5lc3RlZCBsb29wcy4KLQotMjAxNi0wNy0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBNYWtlIEdFVERBVEEgd29yayBvbmx5IGZvciBHWCBmb250cy4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKG9wY29kZV9uYW1lKTogVXBkYXRlZC4KLQkoSW5zX0dFVERBVEEpOiBPbmx5IGRlZmluZSBmb3IgYFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQnLgotCShUVF9SdW5JbnMpOiBVcGRhdGVkLgotCi0yMDE2LTA3LTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEFkZCBzdXBwb3J0IGZvciBBcHBsZSdzCi0KLQkgIEdFVERBVEFbXSwgb3Bjb2RlIDB4OTIKLQotCWJ5dGVjb2RlIGluc3RydWN0aW9uLiAgSXQgYWx3YXlzIHJldHVybnMgMTcsIGFuZCB3ZSBoYXZlIGFic29sdXRlbHkKLQlubyBpZGVhIHdoYXQgaXQgaXMgZ29vZCBmb3IuLi4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFBvcF9QdXNoX0NvdW50LCBvcGNvZGVfbmFtZSk6IFVwZGF0ZWQuCi0JKEluc19HRVREQVRBKTogTmV3IGZ1bmN0aW9uLgotCShUVF9SdW5JbnMpOiBBZGQgaXQuCi0KLTIwMTYtMDctMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gQWRkIGJ5dGVjb2RlIHN1cHBvcnQgZm9yIEdYIHZhcmlhdGlvbiBmb250cy4KLQotCVRoaXMgY29tbWl0IGltcGxlbWVudHMgdW5kb2N1bWVudGVkIChidXQgY29uZmlybWVkKSBzdHVmZiBmcm9tCi0JQXBwbGUncyBvbGQgYnl0ZWNvZGUgZW5naW5lLgotCi0JICBHRVRWQVJJQVRJT05bXSwgb3Bjb2RlIDB4OTEKLQkgICAgVGhpcyBvcGNvZGUgcHVzaGVzIG5vcm1hbGl6ZWQgdmFyaWF0aW9uIGNvb3JkaW5hdGVzIGZvciBhbGwgYXhlcwotCSAgICBvbnRvIHRoZSBzdGFjayAoaW4gMi4xNCBmb3JtYXQpLiAgQ29vcmRpbmF0ZSBvZiBmaXJzdCBheGlzIGdldHMKLQkgICAgcHVzaGVkIGZpcnN0LgotCi0JICBHRVRJTkZPW10sIHNlbGVjdG9yIGJpdCAzCi0JICAgIElmIEdYIHZhcmlhdGlvbiBzdXBwb3J0IGlzIGVuYWJsZWQsIGJpdCAxMCBvZiB0aGUgcmVzdWx0IGlzIHNldAotCSAgICB0byAxLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYzogSW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0guCi0JKG9wY29kZV9uYW1lKSBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IFVwZGF0ZWQuCi0JKEluc19HRVRJTkZPKSBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IEhhbmRsZSBzZWxlY3RvcgotCWJpdCAzLCBjaGVja2luZyBzdXBwb3J0IGZvciB2YXJpYXRpb24gZ2x5cGggaGludGluZy4KLQkoSW5zX0dFVFZBUklBVElPTikgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOiBOZXcgZnVuY3Rpb24KLQl0byBpbXBsZW1lbnQgb3Bjb2RlIDB4OTEuCi0JKFRUX1J1bklucykgW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOiBIYW5kbGUgb3Bjb2RlIDB4OTEuCi0KLTIwMTYtMDctMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVt0cnVldHlwZV0gRml4IEdFVElORk8gYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0KLQkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChJbnNfR0VUSU5GTyk6IEZpeCByZXR1cm4gdmFsdWUgZm9yCi0Jc3RyZXRjaGluZyBpbmZvcm1hdGlvbi4KLQotMjAxNi0wNy0xNiAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIE1ha2UgYWxsIGdseXBocyBpbiBgWnljb24nIEdYIGZvbnQgd29yay4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMpOiBGaXggYm91bmRhcnkKLQl0ZXN0cy4KLQotMjAxNi0wNy0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JW3RydWV0eXBlXSBGaXggR1ggZGVsdGEgdHJhY2luZy4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMpOiBUcmFjZQotCXJlbGF0aXZlIHBvaW50IG1vdmVtZW50cy4KLQotMjAxNi0wNy0xNiAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIE1vcmUgZml4ZXMgZm9yIEdYLgotCi0JVGhpcyBmaW5hbGx5IGZpeGVzIHRoZSByZW5kZXJpbmcgb2YgdGhlIGN5Y2xpc3QgYW5kIHRoZSBsaXphcmQgaW4KLQl0aGUgYFp5Y29uJyBmb250LgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfcmVhZHBhY2tlZHBvaW50cyk6IGBmaXJzdCcgcG9pbnQKLQlpbmRleCBpcyBhbHdheXMgY3VtdWxhdGl2ZS4KLQotCSh0dF9oYW5kbGVfZGVsdGFzKTogUmVuYW1lIHRvLi4uCi0JKHR0X2ludGVycG9sYXRlX2RlbHRhcyk6IC4uLiBUaGlzLgotCUFkZCBuZXcgcGFyYW1ldGVyIGZvciBvdXRwdXQgcG9pbnQgYXJyYXkuCi0JVXBkYXRlIGNhbGxlci4KLQotCShUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IEFkZCBgcG9pbnRzX291dCcgYXJyYXk7IGl0IG5vdyBob2xkcwotCXRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyBvZiBgdHRfaW50ZXJwb2xhdGVfZGVsdGFzJyB0aGF0IGFyZSB0byBiZQotCWFkZGVkIHRvIGBvdXRsaW5lLT5wb2ludHMnLgotCi0yMDE2LTA3LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfY29tcHV0ZV9zZWdtZW50cyk6IFRoaW5rby4KLQotCWBtYXhfcG9zJyBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gYG1pbl9wb3MnIHNvIGBGVF9BQlMnIGlzIG5vdCBuZWVkZWQuCi0KLQlSZXBvcnRlZCBieSBBbGV4ZWkuCi0KLTIwMTYtMDctMTYgIE5pa29sYXVzIFdheHdlaWxlciAgPG1hZGlnZW5zQGdtYWlsLmNvbT4KLQotCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19NSVJQKTogRml4IGNvcHktYW5kLXBhc3RlIGVycm9yLgotCi0JUHJvYmxlbSByZXBvcnRlZCBieSBIaW4tVGFrIExldW5nLgotCi0yMDE2LTA3LTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbYXV0b2ZpdF0gVXBkYXRlIGFuZCBpbXByb3ZlIHNlZ21lbnQgYW5kIGVkZ2UgdHJhY2luZy4KLQotCSogc3JjL2F1dG9maXQvYWZoaW50cy5jIChhZl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzKTogVHJhY2UKLQlgZGVsdGEnIGFsc28uCi0JRG9uJ3Qgc2hvdyBmaXJzdCBwb2ludCBvZiBzZWdtZW50IGFzIGEgcmVwbGFjZW1lbnQgZm9yIGBwb3MnOyB0aGlzCi0JaXMgKGEpIG1pc2xlYWRpbmcsIHNpbmNlIHRoZSBkaWZmZXJlbmNlIHRvIGBwb3MnIGNhbiBiZSBhbG1vc3QKLQlhcmJpdHJhcmlseSBsYXJnZSBpbiBjb3JuZXIgY2FzZXMsIGFuZCAoYikgaXQgaXMgYmV0dGVyIHRvIGhhdmUgYWxsCi0Jc2VnbWVudCBkYXRhIGluIGZvbnQgdW5pdHMgaW5zdGVhZCBvZiBhIHNpbmdsZSB2YWx1ZSBnaXZlbiBpbiBvdXRwdXQKLQlzcGFjZSBjb29yZGluYXRlcy4KLQlJbXByb3ZlIGxheW91dC4KLQkoYWZfZ2x5cGhfaGludHNfZHVtcF9lZGdlcyk6IFNob3cgcHgtPnVuaXRzIGFuZCB1bml0cy0+cHggY29udmVyc2lvbgotCXZhbHVlcyBmb3IgY29udmVuaWVuY2UuCi0JSW1wcm92ZSBsYXlvdXQuCi0KLTIwMTYtMDctMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCVthdXRvZml0XSBGb3IgZWRnZXMsIHJlamVjdCBzZWdtZW50cyB3aWRlciB0aGFuIDFweCAoIzQxMzM0KS4KLQotCSogc3JjL2F1dG9maXQvYWZoaW50cy5oIChBRl9TZWdtZW50UmVjKTogTmV3IG1lbWJlciBgZGVsdGEnLgotCi0JKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX2hpbnRzX2NvbXB1dGVfc2VnbWVudHMpOiBDb21wdXRlCi0JYGRlbHRhJy4KLQkoYWZfbGF0aW5faGludHNfY29tcHV0ZV9lZGdlcyk6IFJlamVjdCBzZWdtZW50cyB3aXRoIGEgZGVsdGEgbGFyZ2VyCi0JdGhhbiAwLjVweC4KLQotMjAxNi0wNy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgotCi0JKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0lTX05BTUVEX0lOU1RBTkNFKTogTmV3IG1hY3JvLgotCi0yMDE2LTA3LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+Ci0KLQlbc2ZudF0gRml4IGBmYWNlX2luZGV4JyB2YWx1ZSBpbiBgRlRfRmFjZScgZm9yIG5hbWVkIGluc3RhbmNlcy4KLQotCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlKTogRG9uJ3Qgc3RyaXAgb2ZmIGhpZ2hlciAxNmJpdHMuCi0KLTIwMTYtMDctMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KLQotCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMpOiBGaXggdHJhY2luZy4KLQotMjAxNi0wNy0xNCAgQmVoZGFkIEVzZmFoYm9kICA8YmVoZGFkQGJlaGRhZC5vcmc+Ci0KLQlbdHJ1ZXR5cGVdIEZpeCBneHZhciBkZWx0YSBpbnRlcnBvbGF0aW9uLgotCi0JVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBiYXNlIGZvbnQgc2hvdWxkIGJlIHVzZWQgZm9yIGludGVycG9sYXRpb24KLQlwdXJwb3NlcywgTk9UIHRoZSBjdXJyZW50IHBvaW50cyAoaS5lLiwgdGhlIHJlc3VsdCBvZiBhY2N1bXVsYXRpb24KLQlvZiBwcmV2aW91cyBkZWx0YXMpLgotCi0JKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IEluaXRpYWxpemUKLQlgcG9pbnRzX29yZycgYmVmb3JlIGxvb3Bpbmcgb3ZlciBhbGwgdHVwbGVzLgotCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IDIwMTYtMjAxNyBieQorQ29weXJpZ2h0IDIwMTYtMjAxOCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLjIwIGIvQ2hhbmdlTG9nLjIwCmluZGV4IGE2Y2ViNGYuLjYzZTMxMTYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZy4yMAorKysgYi9DaGFuZ2VMb2cuMjAKQEAgLTEzMzgsNyArMTMzOCw3IEBACiAJKGNmZl9jb21wdXRlX2JpYXMpOiBVc2UgYFUnIGZvciBjb25zdGFudC4KIAkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfZGVjcnlwdCk6IERpdHRvLgogCSogc3JjL3BzYXV4L3Bzb2Jqcy5jIChUMV9EZWNyeXB0KTogRGl0dG8uCi0JKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoVDFfRGVjb2Rlcl9QYXJzZV9DaGFyU3RyaW5ncyk6IERpdHRvLgorCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKFQxX0RlY29kZXJfUGFyc2VfQ2hhcnN0cmluZ3MpOiBEaXR0by4KIAkqIHNyYy9zZm50L3R0bG9hZC5jIChUVF9Mb2FkX0tlcm4pOiBSZW1vdmUgdW51c2VkIGB2ZXJzaW9uJwogCXZhcmlhYmxlLgogCSogc3JjL3NmbnQvdHRzYml0LmMgKFRUX0xvYWRfU0JpdF9JbWFnZSk6IFJlbW92ZSB1bnVzZWQgYHRvcCcKQEAgLTE1MjQsNyArMTUyNCw3IEBACiAKIAkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9EaXZGaXgpOiBGaXhlZCBhIGJ1ZyBpbiB0aGUgNjQtYml0IGNvZGUgdGhhdAogCWNyZWF0ZWQgaW5jb3JyZWN0IHNjYWxlIGZhY3RvcnMhCi0JKEZUX1JvdW5kX0ZpeCwgRlRfQ2VpbEZpeCwgRlRfRmxvb3JGaXgpOiBNaW5vciBpbXByb3ZlbWVudHMuCisJKEZUX1JvdW5kRml4LCBGVF9DZWlsRml4LCBGVF9GbG9vckZpeCk6IE1pbm9yIGltcHJvdmVtZW50cy4KIAogMjAwMS0wNS0xMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgogCkBAIC0yNTk3LDcgKzI1OTcsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDAwLTIwMTcgYnkKK0NvcHlyaWdodCAyMDAwLTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy4yMSBiL0NoYW5nZUxvZy4yMQppbmRleCA5MDRlNDYyLi4wMTg4M2YxIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMjEKKysrIGIvQ2hhbmdlTG9nLjIxCkBAIC02MTcsNyArNjE3LDcgQEAKIAlgZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4JywgYSBuZXcgZnVuY3Rpb24gZGVmaW5lZCBpbiBgcHN0YWJsZXMuaCcuCiAJKHBzX2dldF9tYWNpbnRvc2hfbmFtZSwgcHNfZ2V0X3N0YW5kYXJkX3N0cmluZ3MpOiBVcGRhdGVkLgogCi0JKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfU2V0X0NoYXJfU2l6ZXMpOiBIYW5kbGUgZnJhY3Rpb25hbCBzaXplcworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX1NldF9DaGFyX1NpemUpOiBIYW5kbGUgZnJhY3Rpb25hbCBzaXplcwogCW1vcmUgY2FyZWZ1bGx5LiAgVGhpcyBmaXhlcyBTYXZhbm5haCBidWcgIzEyMjYzLgogCiAyMDA1LTAzLTA2ICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CkBAIC0xODE5LDcgKzE4MTksNyBAQAogMjAwNC0wOC0xMSAgRGV0bGVmIFfDvHJrbmVyICA8VGV0aVNvZnRAYXBnLmxhaG4uZGU+CiAKIAkqIHNyYy9iYXNlL2Z0cmZvcmsuYyAoRlRfUmFjY2Vzc19HdWVzcykKLQlbIUZUX0NPTkZJR19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfRk9SS106IFJlbW92ZSBjb21waWxlcgorCVshRlRfQ09ORklHX09QVElPTl9HVUVTU0lOR19FTUJFRERFRF9SRk9SS106IFJlbW92ZSBjb21waWxlcgogCXdhcm5pbmdzLgogCiAyMDA0LTA4LTA2ICBBZGFtIFBpb3Ryb3dza2kgIDxzdF9pbnRlbEBwb2N6dGEub25ldC5wbD4KQEAgLTIxMDEsNyArMjEwMSw3IEBACiAKIDIwMDQtMDYtMDggIERhdmlkIFR1cm5lciAgPGRhdmlkQGZyZWV0eXBlLm9yZz4KIAotCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGVF9HbHlwaE1ldHJpY3MpOiBNb3ZlIGBsc2JfZGVsdGEnCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0dseXBoX01ldHJpY3MpOiBNb3ZlIGBsc2JfZGVsdGEnCiAJYW5kIGByc2JfZGVsdGEnIGVsZW1lbnRzIHRvLi4uCiAJKEZUX0dseXBoU2xvdFJlYyk6IEhlcmUgdG8gcmV0YWluIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIKIAlGcmVlVHlwZSB2ZXJzaW9ucy4KQEAgLTI4NjQsNyArMjg2NCw3IEBACiAJKHBzaF9ibHVlc19zbmFwX3N0ZW0pOiBEb24ndCB1c2UgYmx1ZV9zaGlmdCBidXQgYmx1ZV90aHJlc2hvbGQuCiAKIAkqIHNyYy9wc2hpbnRlci9wc2hhbGdvLmMgKFBTSF9TVFJPTkdfVEhSRVNIT0xEX01BWElNVU0pOiBOZXcgbWFjcm8uCi0JKHBzaF9nbHlwaF9maW5kX3N0cmluZ19wb2ludHMpOiBVc2UgUFNIX1NUUk9OR19USFJFU0hPTERfTUFYSU1VTS4KKwkocHNoX2dseXBoX2ZpbmRfc3Ryb25nX3BvaW50cyk6IFVzZSBQU0hfU1RST05HX1RIUkVTSE9MRF9NQVhJTVVNLgogCShwc2hfZ2x5cGhfZmluZF9ibHVlX3BvaW50cyk6IE5ldyBmdW5jdGlvbi4gIE5lZWRlZCBmb3IgZm9udHMgbGlrZQogCXAwNTIwMDNsLnBmYiAoVVJXIFBhbGxhZGlvIEwgUm9tYW4pIHdoaWNoIGhhdmUgZmxleCBjdXJ2ZXMgYXQgdGhlCiAJYmFzZSBsaW5lIHdpdGhpbiBibHVlIHpvbmVzLCBidXQgdGhlIGZsZXggY3VydmVzIGFyZW4ndCBjb3ZlcmVkIGJ5CkBAIC0zMzYxLDcgKzMzNjEsNyBAQAogCiAJKiBzcmMvYmFzZS9mdHN0cm9rZS5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSC4KIAkoRlRfT3V0bGluZV9HZXRPdXRzaWRlQm9yZGVyKTogSW52ZXJzZSByZXN1bHQuCi0JKEZUX1N0cm9rZXJfUmV3aW5kLCBGVF9HbHlwaF9TdHJva2UsIEZUX0dseXBoU3Ryb2tlQm9yZGVyKTogTmV3CisJKEZUX1N0cm9rZXJfUmV3aW5kLCBGVF9HbHlwaF9TdHJva2UsIEZUX0dseXBoX1N0cm9rZUJvcmRlcik6IE5ldwogCWZ1bmN0aW9ucy4KIAkoRlRfU3Ryb2tlcl9FbmRTdWJQYXRoKTogQ2xvc2UgcGF0aCBpZiBuZWVkZWQuCiAJKEZUX1N0cm9rZXJfU2V0LCBGVF9TdHJva2VyX1BhcnNlT3V0bGluZSk6IFVzZSBGVF9TdHJva2VyX1Jld2luZC4KQEAgLTM0OTMsOCArMzQ5Myw4IEBACiAyMDAzLTEyLTIzICBEYXZpZCBUdXJuZXIgIDxkYXZpZEBmcmVldHlwZS5vcmc+CiAKIAkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX1BBRF9GTE9PUiwgRlRfUEFEX1JPVU5ELAotCUZUX1BBRF9DRUlMLCBGVF9QSVhfRkxPT1IsIEZUX1BJWF9ST1VORCwgRlRfQ0VJTCk6IE5ldyBtYWNyb3MuICBUaGV5Ci0JYXJlIHVzZWQgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3Mgd2l0aCB2ZXJ5IHBlZGFudGljIGNvbXBpbGVycy4KKwlGVF9QQURfQ0VJTCwgRlRfUElYX0ZMT09SLCBGVF9QSVhfUk9VTkQsIEZUX1BJWF9DRUlMKTogTmV3IG1hY3Jvcy4KKwlUaGV5IGFyZSB1c2VkIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzIHdpdGggdmVyeSBwZWRhbnRpYyBjb21waWxlcnMuCiAJTm90ZSB0aGF0IGAoeCkgJiAtNjQnIGNhdXNlcyBhIHdhcm5pbmcgaWYgKHgpIGlzIG5vdCBzaWduZWQuICBVc2UKIAlgKHgpICYgfjYzJyBpbnN0ZWFkIQogCVVwZGF0ZWQgYWxsIHJlbGF0ZWQgY29kZS4KQEAgLTQyMzEsNyArNDIzMSw3IEBACiAJKHQ0Ml9wYXJzZV9lbmNvZGluZyk6IFVzZSBgZnRfaXNkaWdpdCcuCiAKIAotCSogc3JjL2Jhc2UvZnRtbS5jIChmdF9mYWNlX2dldF9tbV9zZXJ2aWNlKTogUmV0dXJuIEZUX0Vycl9PSyBpZgorCSogc3JjL2Jhc2UvZnRtbS5jIChmdF9mYWNlX2dldF9tbV9zZXJ2aWNlKTogUmV0dXJuIEZUX0Vycl9PayBpZgogCXN1Y2Nlc3MuCiAKIDIwMDMtMTAtMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KQEAgLTQ3NDksOCArNDc0OSw3IEBACiAJKiBpbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaDogRml4aW5nIGRvY3VtZW50YXRpb24gY29tbWVudC4KIAogCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCwgZGV2ZWwvZnRvcHRpb24uaAotCShUVF9DT05GSUdfT1BUSU9OX09QVElPTl9DT01QSUxFX1VOUEFURU5URURfSElOVElORyk6IFJlcGxhY2VkCi0Jd2l0aC4uLgorCShUVF9DT05GSUdfT1BUSU9OX0NPTVBJTEVfVU5QQVRFTlRFRF9ISU5USU5HKTogUmVwbGFjZWQgd2l0aC4uLgogCShUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyk6IFRoaXMuICBVcGRhdGVkIGFsbCB1c2Vycy4KIAkoVFRfQ09ORklHX09QVElPTl9GT1JDRV9VTlBBVEVOVEVEX0hJTlRJTkcpOiBSZW1vdmVkLgogCkBAIC01MDI0LDcgKzUwMjMsNyBAQAogCWRyaXZlcnMuCiAKIAkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9TZXRfQ2hhcl9TaXplKTogUmVtb3ZlIHJlZHVuZGFudCBjb2RlLgotCShGVF9TZXRfUGl4ZWxfU2l6ZSk6IEFzc2lnbiB2YWx1ZSB0byBgbWV0cmljcycgYWZ0ZXIgdmFsaWRhdGlvbiBvZgorCShGVF9TZXRfUGl4ZWxfU2l6ZXMpOiBBc3NpZ24gdmFsdWUgdG8gYG1ldHJpY3MnIGFmdGVyIHZhbGlkYXRpb24gb2YKIAlhcmd1bWVudHMuCiAKIDIwMDMtMDYtMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KQEAgLTUyMDAsNyArNTE5OSw3IEBACiAJKiBzcmMvY2lkL2NpZGxvYWQuYyAoY2lkX2xvYWRfa2V5d29yZCk6IEhhbmRsZQogCVQxX0ZJRUxEX0xPQ0FUSU9OX0JCT1guCiAJKHBhcnNlX2ZvbnRfYmJveCk6IENvbW1lbnRlZCBvdXQuCi0JKGNpZF9maWVsZF9yZWNvcmQpOiBDb21tZW50IG91dCBlbGVtZW50IGZvciBwYXJzaW5nIEZvbnRCQm94LgorCShjaWRfZmllbGRfcmVjb3Jkcyk6IENvbW1lbnQgb3V0IGVsZW1lbnQgZm9yIHBhcnNpbmcgRm9udEJCb3guCiAKIAkqIHNyYy90eXBlNDIvdDQycGFyc2UuYyAodDQyX3BhcnNlX2ZvbnRfYmJveCk6IENvbW1lbnRlZCBvdXQuCiAJKHQ0Ml9rZXl3b3Jkcyk6IEhhbmRsZSBGb250QkJveCB3aXRoIFQxX0ZJRUxEX0JCT1gsIG5vdCB3aXRoCkBAIC01OTE2LDcgKzU5MTUsNyBAQAogMjAwMy0wNC0yMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgogCiAJKiBzcmMvcGZyL3BmcmxvYWQuYyAocGZyX2V4dHJhX2l0ZW1fbG9hZF9mb250X2lkKTogVXNlIEZUX1B0ckRpc3QKLQlpbnN0ZWFkIG9mIEZUX1VpbnQgZm9yIGBsZW4nLgorCWluc3RlYWQgb2YgRlRfVUludCBmb3IgYGxlbicuCiAKIDIwMDMtMDQtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KIApAQCAtNjU1MCw3ICs2NTQ5LDcgQEAKIAkqIHNyYy9jYWNoZS9mdGNzYml0cy5jIChmdGNfc2JpdF9ub2RlX2xvYWQpOiBGaXhlZCBhIHNtYWxsIGJ1ZyB0aGF0CiAJY2F1c2VkIHByb2JsZW1zIHdpdGggZW1iZWRkZWQgYml0bWFwcy4KIAotCSogc3JjL290bGF5b3V0L290bGF5b3V0LmgsIHNyYy9vdGx5YW91dC9vdGxjb25mLmgsCisJKiBzcmMvb3RsYXlvdXQvb3RsYXlvdXQuaCwgc3JjL290bGF5b3V0L290bGNvbmYuaCwKIAlzcmMvb3RsYXlvdXQvb3RsZ3N1Yi5jLCBzcmMvb3RsYXlvdXQvb3RsZ3N1Yi5oLAogCXNyYy9vdGxheW91dC9vdGxwYXJzZS5jLCBzcmMvb3RsYXlvdXQvb3RscGFyc2UuaCwKIAlzcmMvb3RsYXlvdXQvb3RsdXRpbHMuaDogVXBkYXRpbmcgdGhlIE9wZW5UeXBlIExheW91dCBjb2RlLCBhZGRpbmcKQEAgLTczNzYsNyArNzM3NSw3IEBACiAKIAkqIHNyYy9wY2YvcGNmZHJpdmVyLmMgKFBDRl9HbHlwaF9Mb2FkKTogRml4IGNvbXB1dGF0aW9uIG9mCiAJaG9yaUJlYXJpbmdYLgotCSogc3JjL2JkZi9iZGZkcml2ci5jIChCREZfR2x5cGhMb2FkKTogRml4IGNvbXB1dGF0aW9uIG9mCisJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9HbHlwaF9Mb2FkKTogRml4IGNvbXB1dGF0aW9uIG9mCiAJaG9yaUJlYXJpbmdZLgogCiAyMDAyLTA4LTE2ICBHZW9yZ2UgV2lsbGlhbXMgIDxnd3dAc2lsY29tLmNvbT4KQEAgLTc2MDMsNyArNzYwMiw3IEBACiAKIAkqIHNyYy9jaWQvY2lkcml2ZXIuYyAoQ2lkX0dldF9DaGFyX0luZGV4LCBDaWRfR2V0X05leHRfQ2hhcik6CiAJUmVtb3ZlZC4KLQkodDFfY2lkX2RyaXZlcl9jbGFzcyk6IFVwZGF0ZWQuCisJKHQxY2lkX2RyaXZlcl9jbGFzcyk6IFVwZGF0ZWQuCiAJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KIAkqIHNyYy90eXBlMS90MWRyaXZlci5jIChHZXRfQ2hhcl9JbmRleCwgR2V0X05leHRfQ2hhcik6IFJlbW92ZWQKIAkodDFfZHJpdmVyX2NsYXNzKTogVXBkYXRlZC4KQEAgLTc2OTgsNyArNzY5Nyw3IEBACiAJICBDRkZfRG9uZV9TdWJGb250IC0+IGNmZl9zdWJmb250X2RvbmUKIAkgIENGRl9Mb2FkX0ZvbnQgLT4gY2ZmX2ZvbnRfbG9hZAogCSAgQ0ZGX0RvbmVfRm9udCAtPiBjZmZfZm9udF9kb25lCi0JICBDRkZfU2l6ZV9HZXRfR2xvYmFsX0Z1bmNzIC0+IGNmZl9zaXplX2dldF9nbG9iYWxfZnVuY3MKKwkgIENGRl9TaXplX0dldF9HbG9iYWxzX0Z1bmNzIC0+IGNmZl9zaXplX2dldF9nbG9iYWxzX2Z1bmNzCiAJICBDRkZfU2l6ZV9Eb25lIC0+IGNmZl9zaXplX2RvbmUKIAkgIENGRl9TaXplX0luaXQgLT4gY2ZmX3NpemVfaW5pdAogCSAgQ0ZGX1NpemVfUmVzZXQgLT4gY2ZmX3NpemVfcmVzZXQKQEAgLTkwNjMsNyArOTA2Miw3IEBACiAJICBGVF9HbHlwaF9OYW1lX1JlcXVlc3RlciA9PiBGVF9GYWNlX0dldEdseXBoTmFtZUZ1bmMKIAkgIEZUX05hbWVfSW5kZXhfUmVxdWVzdGVyID0+IEZUX0ZhY2VfR2V0R2x5cGhOYW1lSW5kZXhGdW5jCiAKLQkqIHNyYy9iYXNlL2Z0YXBpLmM6IE5ldyBmaWxlLiAgSXQgY29udGFpbnMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKwkqIHNyYy9iYXNlL2Z0YXBpLmM6IE5ldyBmaWxlLiAgSXQgY29udGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eQogCWZ1bmN0aW9ucy4KIAogCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oLCBzcmMvY2lkL2NpZGxvYWQuYywKQEAgLTkxMDYsNyArOTEwNSw3IEBACiAJRlRfUmVhbGxvY19EZWJ1ZywgRlRfRnJlZV9EZWJ1Zyk6IEZpeCBjb21waWxlciB3YXJuaW5ncy4KIAkqIHNyYy9iYXNlL2Z0Y2FsYy5jIChGVF9NdWxGaXgpOiBEaXR0by4KIAkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9uYW1lX2luZGV4KTogRGl0dG8uCi0JKiBzcmMvY2ZmL2NmZm9ianMuYyAoQ0ZGX1NpemVfR2V0X0dsb2JhbF9GdW5jcywgQ0ZGX1NpemVfSW5pdCwKKwkqIHNyYy9jZmYvY2Zmb2Jqcy5jIChDRkZfU2l6ZV9HZXRfR2xvYmFsc19GdW5jcywgQ0ZGX1NpemVfSW5pdCwKIAlDRkZfR2x5cGhTbG90X0luaXQpOiBEaXR0by4KIAkqIHNyYy9jaWQvY2lkb2Jqcy5jIChDSURfR2x5cGhTbG90X0luaXQsCiAJQ0lEX1NpemVfR2V0X0dsb2JhbHNfRnVuY3MpOiBEaXR0by4KQEAgLTkyNDcsNyArOTI0Niw3IEBACiAJICB7CiAJICB9IFBTX1N0cnVjdFJlYywgKlBTX1N0cnVjdDsKIAotCSAgdHlwZWRlZiBQU19TdHJ1Y3RSZWMgIFQxX1N0cnVjdDsgIC8qIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5ICovCisJICB0eXBlZGVmIFBTX1N0cnVjdFJlYyAgVDFfU3RydWN0OyAgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogCiAJSGVuY2UsIHdlIGluY3JlYXNlIHRoZSBjb2hlcmVuY3kgb2YgdGhlIHNvdXJjZSBjb2RlIGJ5IGVmZmVjdGl2ZWx5CiAJdXNpbmcgdGhlIGBSZWMnIHByZWZpeCBmb3Igc3RydWN0dXJlIHR5cGVzLgpAQCAtOTM4NCw3ICs5MzgzLDcgQEAKIAkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2Zfc2Vla190b190YWJsZV90eXBlKTogRGl0dG8uCiAJKiBzcmMvc2ZudC9zZmRyaXZlci5jIChnZXRfc2ZudF9wb3N0c2NyaXB0X25hbWUpOiBEaXR0by4KIAkocGNmX2dldF9iaXRtYXBzKTogVGhlIHNhbWUgZm9yIGBzaXplYml0bWFwcycuCi0JKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoVDFfRGVjb2RlX1BhcnNlX0NoYXJzdHJpbmdzKTogVGhlIHNhbWUgZm9yCisJKiBzcmMvcHNhdXgvdDFkZWNvZGUuYyAoVDFfRGVjb2Rlcl9QYXJzZV9DaGFyc3RyaW5ncyk6IFRoZSBzYW1lIGZvcgogCWBvcmlnX3knLgogCSh0MW9wZXJhdG9yX3NlYWMpOiBDb21tZW50IG91dCBtb3JlIGRlYWQgY29kZS4KIAkqIHNyYy9wc2hpbnRlci9wc2hhbGdvMi5jIChwczJfaGludHNfYXBwbHkpOiBBZGQgYERFQlVHX0hJTlRFUicKQEAgLTk0MjMsNyArOTQyMiw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IDIwMDItMjAxNyBieQorQ29weXJpZ2h0IDIwMDItMjAxOCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nLjIyIGIvQ2hhbmdlTG9nLjIyCmluZGV4IDUzMjkzMDguLjQ1MTdjMzIgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZy4yMgorKysgYi9DaGFuZ2VMb2cuMjIKQEAgLTE4OSw3ICsxODksNyBAQAogCiAJKiBzcmMvYmFzZS9mdGRiZ21lbS5jIChfZnRfZGVidWdfZmlsZSwgX2Z0X2RlYnVnX2xpbmVubykKIAlbRlRfREVCVUdfTUVNT1JZXTogTmV3IGdsb2JhbCB2YXJpYWJsZXMsIHJlcGxhY2luZy4uLgotCShGVF9NZW1UYWJsZV9SZWMpIFtGVF9ERUJVR19NRU1PUlldOiBSZW1vdmUgYGZpbGVuYW1lJyBhbmQKKwkoRlRfTWVtVGFibGVSZWMpIFtGVF9ERUJVR19NRU1PUlldOiBSZW1vdmUgYGZpbGVuYW1lJyBhbmQKIAlgbGluZV9ubycuICBVcGRhdGUgYWxsIGNhbGxlcnMuCiAJKGZ0X21lbV9kZWJ1Z19hbGxvYykgW0ZUX0RFQlVHX01FTU9SWV06IEF2b2lkIHBvc3NpYmxlIGludGVnZXIKIAlvdmVyZmxvdy4KQEAgLTQ5NCw3ICs0OTQsNyBAQAogCUZUQ19NcnVMaXN0X0luaXQsIEZUQ19NcnVMaXN0X1Jlc2V0LCBGVENfTXJ1TGlzdF9Eb25lLAogCUZUQ19NcnVMaXN0X05ldywgRlRDX01ydUxpc3RfUmVtb3ZlLCBGVENfTXJ1TGlzdF9SZW1vdmVTZWxlY3Rpb24pOgogCURlY2xhcmUgYXMgRlRfTE9DQUxfREVGLgotCShGVENfTXJ1TGlzdEZpbmQsIEZUQ19NcnVMaXN0X0xvb2t1cCkgWyFGVENfSU5MSU5FXTogQ29tcGlsZQorCShGVENfTXJ1TGlzdF9GaW5kLCBGVENfTXJ1TGlzdF9Mb29rdXApIFshRlRDX0lOTElORV06IENvbXBpbGUKIAljb25kaXRpb25hbGx5LgogCURlY2xhcmUgYXMgRlRfTE9DQUxfREVGLgogCkBAIC02MDUsMTQgKzYwNSwxNCBAQAogCiAJKiBkb2NzL3JlbGVhc2U6IE1pbm9yIGFkZGl0aW9ucyBhbmQgY2xhcmlmaWNhdGlvbnMuCiAKLQkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZCB0byByZWZsZWN0IG1hbnkgZml4ZXMgZm9yIGJhY2t3YXJkcworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkIHRvIHJlZmxlY3QgbWFueSBmaXhlcyBmb3IgYmFja3dhcmQKIAljb21wYXRpYmlsaXR5LiAgU3RpbGwgaW5jb21wbGV0ZS4KIAogMjAwNi0wMi0yNiAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgogCiAJKiBzcmMvYmFzZS9mdG9ianMuYyAoZnRfcmVjb21wdXRlX3NjYWxlZF9tZXRyaWNzKTogUmUtZW5hYmxlCiAJY29uc2VydmF0aXZlIHJvdW5kaW5nIG9mIG1ldHJpY3MgdG8gYXZvaWQgYnJlYWtpbmcgY2xpZW50cyBsaWtlCi0JUGFuZ28gKHNlZSBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjc4NTIpLgorCVBhbmdvIChzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTMyNzg1MikuCiAKIDIwMDYtMDItMjUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KIApAQCAtODE0LDcgKzgxNCw3IEBACiAJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0Y2FjaGUuaCAoRlRDX0lNQUdFX1RZUEVfQ09NUEFSRSwKIAlGVENfSU1BR0VfVFlQRV9IQVNIKSwgc3JjL2NhY2hlL2Z0Y2Jhc2ljLmMgKEZUQ19PbGRGb250UmVjLAogCUZUQ19PbGRJbWFnZURlc2NSZWMsIEZUQ19JbWFnZUNhY2hlX0xvb2t1cCwgRlRDX0ltYWdlX0NhY2hlX05ldywKLQlGVENfT2xkSW1hZ2VfRGVzYywgRlRDX09MRF9JTUFHRV9GT1JNQVQsIGZ0Y19vbGRfaW1hZ2VfeHh4LAorCUZUQ19PbGRJbWFnZURlc2MsIEZUQ19PTERfSU1BR0VfRk9STUFULCBmdGNfb2xkX2ltYWdlX3h4eCwKIAlmdGNfaW1hZ2VfdHlwZV9mcm9tX29sZF9kZXNjLCBGVENfSW1hZ2VfQ2FjaGVfTG9va3VwLAogCUZUQ19TQml0Q2FjaGVfTG9va3VwLCBGVENfU0JpdF9DYWNoZV9OZXcsIEZUQ19TQml0X0NhY2hlX0xvb2t1cCkKIAlbRlRfQ09ORklHX09QVElPTl9PTERfSU5URVJOQUxTXTogVHJ5IHRvIHJldml2ZSBvbGQgZnVuY3Rpb25zIG9mIHRoZQpAQCAtMjMxOCw3ICsyMzE4LDcgQEAKIAogCUZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhlIFNJTkcgR2x5cGhsZXQgZm9ybWF0IGNhbiBiZSBmb3VuZCBhdDoKIAotCSAgaHR0cDovL3d3dy5hZG9iZS5jb20vcHJvZHVjdHMvaW5kZXNpZ24vc2luZ19nYWlqaS5odG1sCisJICBodHRwczovL3d3dy5hZG9iZS5jb20vY29udGVudC9kYW0vYWNvbS9lbi9kZXZuZXQvZm9udC9wZGZzLzUxNDguU0lOR19UdXRvcmlhbC5wZGYKIAogCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR19TSU5HLCBUVEFHX01FVEEpOiBOZXcgbWFjcm9zIGZvcgogCXRoZSBPcGVuVHlwZSB0YWJsZXMgYFNJTkcnIGFuZCBgTUVUQScuICBUaGVzZSB0d28gdGFibGVzIGFyZSB1c2VkIGluCkBAIC0yNzg3LDcgKzI3ODcsNyBAQAogMjAwNS0wNi0xNSAgS2lyaWxsIFNtZWxrb3YgIDxraXJyQG1ucy5zcGIucnU+CiAKIAlUaGUgbmV4dCByZWxlYXNlIHdpbGwgYmUgMi4yLjAsIHNvIGRvbid0IHdvcnJ5IGFib3V0IHNvdXJjZSBjb2RlCi0JYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisJYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmggKEZUX091dGxpbmVfTW92ZVRvRnVuYywKIAlGVF9PdXRsaW5lX0xpbmVUb0Z1bmMsIEZUX091dGxpbmVfQ29uaWNUb0Z1bmMsCkBAIC0yODIxLDcgKzI4MjEsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDA1LTIwMTcgYnkKK0NvcHlyaWdodCAyMDA1LTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy4yMyBiL0NoYW5nZUxvZy4yMwppbmRleCA3OWRjMDI4Li44NTI1M2YxIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMjMKKysrIGIvQ2hhbmdlTG9nLjIzCkBAIC00Myw3ICs0Myw3IEBACiAJKiBzcmMvYmFzZS9mdG91dGxuLmMgKEZUX091dGxpbmVfTmV3X0ludGVybmFsKTogVGhlIGxlbmd0aCBvZgogCUZUX091dGxpbmUtPnBvaW50c1tdIHNob3VsZCBiZSBudW1Qb2ludHMsIG5vdCAyICogbnVtUG9pbnRzLgogCUZvdW5kIGJ5IFBhdWwgTWVzc21lciwgc2VlCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTAtMDIvbXNnMDAwMDMuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0wMi9tc2cwMDAwMy5odG1sCiAKIDIwMTAtMDItMTAgIEtlbiBTaGFycCAgPGtlbi5zaGFycEBhcnRpZmV4LmNvbT4KIApAQCAtMTA4LDcgKzEwOCw3IEBACiAJUHJlZmVycmVkIGZhbWlseSBuYW1lcyBzaG91bGQgYmUgdXNlZCBmb3IgbGVnYWN5IHN5c3RlbXMgdGhhdAogCWNhbiBob2xkIG9ubHkgYSBmZXcgZmFjZXMgKDw9IDQpIGZvciBhIGZhbWlseSBuYW1lLiBTdWdnZXN0ZWQgYnkKIAlBbmRyZWFzIEhlaW5yaWNoLgotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDEwLTAxL21zZzAwMDAxLmh0bWwKKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTAtMDEvbXNnMDAwMDEuaHRtbAogCiAJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmggKEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX0ZBTUlMWSwKIAlGVF9QQVJBTV9UQUdfSUdOT1JFX1BSRUZFUlJFRF9TVUJGQU1JTFkpOiBEZWZpbmUuCkBAIC02MzEsNyArNjMxLDcgQEAKIAlUaGUgaXNzdWUgb2YgaW5jb21wYXRpYmxlIGNhc3QgYmV0d2VlbiB1bnNpZ25lZCBsb25nIGFuZCB2b2lkKgogCW9uIExMUDY0IHBsYXRmb3JtIGlzIHJlcG9ydGVkIGJ5IE5pZ2h0U3RyaWtlIGZyb20gTWluR1ctV2luNjQKIAlwcm9qZWN0LiAgU2VlCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMDktMDkvbXNnMDAwMDAuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAwOS0wOS9tc2cwMDAwMC5odG1sCiAKIAkqIHNyYy9iZGYvYmRmLmg6IFRoZSB0eXBlIG9mIGhhc2hub2RlLT5kYXRhIGlzIGNoYW5nZWQgZnJvbQogCXZvaWQqIHRvIHNpemVfdC4KQEAgLTY1Nyw3ICs2NTcsNyBAQAogCU9uIExMUDY0IHBsYXRmb3JtLCB0aGUgY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gRlRfRml4ZWQgbmVlZAogCXRvIGRyb3AgaGlnaGVyIDMyLWJpdC4gIEV4cGxpY2l0IGNhc3RzIGFyZSByZXF1aXJlZC4gUmVwb3J0ZWQgYnkKIAlOaWdodFN0cmlrZSBmcm9tIE1pbkdXLXc2NCBwcm9qZWN0LiAgU2VlCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMDktMDkvbXNnMDAwMDAuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAwOS0wOS9tc2cwMDAwMC5odG1sCiAKIAkqIHNyYy9jZmYvY2ZmZ2xvYWQuYzogQ29udmVydCB0aGUgcG9pbnRlcnMgdG8gRlRfRml4ZWQgZXhwbGljaXRseS4KIApAQCAtODY0LDcgKzg2NCw3IEBACiAJCUxQNjQgc3lzdGVtczogSGlnaGVyIGJpdHMgYXJlIG5vdCB1c2VkLgogCQkxNi1iaXQgc3lzdGVtczogRHJvcCBjYW4gb2NjdXIuCiAJU2VlCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDgtMTIvbXNnMDAwNjUuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOC0xMi9tc2cwMDA2NS5odG1sCiAJVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgcmVmaW5lZCB0byB0YWtlIEZUX1VMb25nIGZsYWdzIGluCiAJbmV4dCBidW1wIHdpdGggaW5jb21wYXRpYmxlIEFQSSBjaGFuZ2UuCiAKQEAgLTkyOSw3ICs5MjksNyBAQAogCXR5cGUxOiBGaXggYSBkYXRhIHR5cGUgbWlzbWF0Y2hpbmcgd2l0aCBpdHMgc291cmNlLgogCiAJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaDogVGhlIHR5cGUgb2YKLQlUMV9GYWNlLT5idWlsZGNoYXIgaXMgbWF0Y2hlZCB3aXRoIFQxX0RlY29yZGVyLT50b3AuCisJVDFfRmFjZS0+YnVpbGRjaGFyIGlzIG1hdGNoZWQgd2l0aCBUMV9EZWNvZGVyLT50b3AuCiAKIDIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CiAKQEAgLTk3NSw4ICs5NzUsOCBAQAogCXBzYXV4OiBGaXggYSBkYXRhIHR5cGUgbWlzbWF0Y2hpbmcgd2l0aCBpdHMgc291cmNlLgogCiAJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg6IFRoZSB0eXBlIG9mCi0JVDFfRGVjb3JkZXJSZWMuYnVpbGRjaGFyIGlzIG1hdGNoZWQgd2l0aAotCVQxX0RlY29yZGVyUmVjLnRvcC4KKwlUMV9EZWNvZGVyUmVjLmJ1aWxkY2hhciBpcyBtYXRjaGVkIHdpdGgKKwlUMV9EZWNvZGVyUmVjLnRvcC4KIAogMjAwOS0wNy0zMSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KIApAQCAtMTc2NSw3ICsxNzY1LDcgQEAKIAlmdGd6aXAuYyBieSBGVDIgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gIFRvIHVzZQogCXpsaWIgemNhbGxvYygpICYgemZyZWUoKSwgZGVmaW5lIFVTRV9aTElCX1pDQUxMT0MuCiAJU2VlIGRpc2N1c3Npb246Ci0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDktMDIvbXNnMDAwMDAuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wMi9tc2cwMDAwMC5odG1sCiAKIDIwMDktMDctMzEgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CiAKQEAgLTE5MDQsNyArMTkwNCw3IEBACiAyMDA5LTA3LTE1ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgogCiAJQm9ybGFuZCBDKysgY29tcGlsZXIgcGF0Y2ggcHJvcG9zZWQgYnkgTWlyY28gQmFiaW4uCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMDktMDcvbXNnMDAwMTYuaHRtbC4KKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMDktMDcvbXNnMDAwMTYuaHRtbC4KIAogCSogYnVpbGRzL2V4cG9ydHMubWs6IERlbGV0ZSB1bnVzZWQgZmxhZ3MsIENDZXhlX3tDRkxBR1MsTERGTEFHU30uCiAJRml4IEFQSU5BTUVTX0MgYW5kIEFQSU5BTUVTX0VYRSBwYXRobmFtZXMgdG8gcmVmbGVjdCB0aGUgcGxhdGZvcm0KQEAgLTE5MjksNyArMTkyOSw3IEBACiAJKiBzcmMvdG9vbHMvY2hrdHJjbXAucHk6IEEgc2NyaXB0IHRvIGNoZWNrIHRyYWNlX1hYWFggbWFjcm9zCiAJdGhhdCBhcmUgdXNlZCBpbiBDIHNvdXJjZSBidXQgdW5kZWZpbmVkIGluIGZ0dHJhY2UuaCwgb3IKIAlkZWZpbmVkIGluIGZ0dHJhY2UuaCBidXQgdW51c2VkIGluIEMgc291cmNlcy4gIFNlZQotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA5LTA3L21zZzAwMDEzLmh0bWwuCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA5LTA3L21zZzAwMDEzLmh0bWwuCiAJKiBkb2NzL0RFQlVHOiBNZW50aW9uIG9uIGNoa3RyY21wLnB5LgogCSogZG9jcy9yZWxlYXNlOiBEaXR0by4KIApAQCAtMTk2MSw3ICsxOTYxLDcgQEAKIAogCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg6IEFkZCBGVF9UUkFDRV9ERUYoIHQxYWZtICkKIAlhbmQgRlRfVFJBQ0VfREVGKCB0dGJkZiApLiAgU2VlCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDktMDcvbXNnMDAwMTMuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wNy9tc2cwMDAxMy5odG1sCiAKIDIwMDktMDctMDkgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CiAKQEAgLTE5NzUsOCArMTk3NSw4IEBACiAKIAlQcmV2ZW50IHRoZSBvdmVyZmxvd3MgYnkgYSBnbHlwaCB3aXRoIHRvbyBtYW55IHBvaW50cyBvciBjb250b3Vycy4KIAlUaGUgYnVnIGlzIHJlcG9ydGVkIGJ5IEJvcmlzIExldG9jaGEgPGIubGV0b2NoYUBnbWMubmV0Pi4gIFNlZQotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA5LTA2L21zZzAwMDMxLmh0bWwKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wNy9tc2cwMDAwMi5odG1sCQorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOS0wNi9tc2cwMDAzMS5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA5LTA3L21zZzAwMDAyLmh0bWwJCiAKIAkqIGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oIChGVF9PVVRMSU5FX0NPTlRPVVJTX01BWCwKIAlGVF9PVVRMSU5FX1BPSU5UU19NQVgpOiBOZXcgbWFjcm9zIHRvIGRlY2xhcmUgdGhlIG1heGltdW0KQEAgLTIwMDEsNyArMjAwMSw3IEBACiAyMDA5LTA2LTI4ICBzdXp1a2kgdG9zaGl5YSAgPG1wc3V6dWtpQGhpcm9zaGltYS11LmFjLmpwPgogCiAJZnRwYXRlbnQ6IEZpeCBhIGJ1ZyBieSB3cm9uZyB1c2FnZSBvZiBzZXJ2aWNlLT50YWJsZV9pbmZvKCkuCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDgtMTIvbXNnMDAwMzkuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOC0xMi9tc2cwMDAzOS5odG1sCiAKIAkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50Lmg6IEV4dGVuZAogCUZUX1NGTlRfVGFibGVJbmZvRnVuYygpIHRvIHRha2UgbmV3IGFyZ3VtZW50IHRvIG9idGFpbiB0aGUgb2Zmc2V0CkBAIC0yMDY5LDcgKzIwNjksNyBAQAogCiAJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBGaXggYSBidWcgaW4gc2VkIHNjcmlwdCB0byBleHRyYWN0CiAJbmF0aXZlIHN1ZmZpeCBmb3IgYmluYXJ5IGV4ZWN1dGFibGVzLCBwYXRjaCBieSBQZXRlciBCcmVpdGVubG9obmVyLgotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA5LTA0L21zZzAwMDM2Lmh0bWwKKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDktMDQvbXNnMDAwMzYuaHRtbAogCiAyMDA5LTA2LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKQEAgLTIxMjUsNyArMjEyNSw3IEBACiAJY29kZSB1bmNvbmRpdGlvbmFsbHkuCiAJQWRkIHN1cHBvcnQgZm9yIHJhbmRvbSBudW1iZXJzIGFuZCB1cGRhdGUgcmVtYWluaW5nIGNvZGUKIAlhY2NvcmRpbmdseTsgdGhpcyBzaG91bGQgd29yayBub3cuCi0JKHQxX29wZXJhdG9yX3NlYWMpOiBVcGRhdGVkLgorCSh0MW9wZXJhdG9yX3NlYWMpOiBVcGRhdGVkLgogCSogc3JjL3BzYXV4L3BzaHJlYy5jOiBJbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSC4KIAkocHNfaGludHNfdDFzdGVtMywgdDFfaGludHNfc3RlbSk6IFVwZGF0ZWQuCiAKQEAgLTI1OTQsMTQgKzI1OTQsMTQgQEAKIAlQb3NpdGlvbiBJbmRlcGVuZGVudCBDb2RlIChQSUMpIHN1cHBvcnQgaW4gc21vb3RoIHJlbmRlcmVyLgogCiAJKiBzcmMvc21vb3RoL2Z0c21vb3RoLmggZGVjbGFyZSBmdF9zbW9vdGhfcmVuZGVyZXJfY2xhc3MsCi0JZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyBhbmQgZnRfc21vb3RoX2xjZF92X3JlbmRlcmVyX2NsYXNzCisJZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyBhbmQgZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3MKIAl1c2luZyBtYWNyb3MgZnJvbSBmdHJlbmRlci5oLAogCXdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBjcmVhdGUgYW5kIGRlc3Ryb3kKIAlmdW5jdGlvbnMgd2lsbCBiZSBkZWNsYXJlZC4KIAkqIHNyYy9zbW9vdGgvZnRzbW9vdGguYyB3aGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQKIAl0aGUgZm9sbG93aW5nIHN0cnVjdHM6CiAJZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzLCBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzCi0JYW5kIGZ0X3Ntb290aF9sY2Rfdl9yZW5kZXJlcl9jbGFzcworCWFuZCBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzcwogCXdpbGwgaGF2ZSBmdW5jdGlvbnMgdG8gaW5pdCBvciBjcmVhdGUgYW5kIGRlc3Ryb3kgdGhlbQogCWluc3RlYWQgb2YgYmVpbmcgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUuCiAJQW5kIG1hY3JvcyB3aWxsIGJlIHVzZWQgZnJvbSBmdHNwaWMuaCBpbiBvcmRlciB0byBhY2Nlc3MKQEAgLTM0NjksOCArMzQ2OSw4IEBACiAJZmFjZXMgaW5jbHVkZXMgYnJva2VuIGZhY2Ugd2hpY2ggRlRfRG9uZV9GYWNlKCkgY2Fubm90IGZyZWUsCiAJRlRfRG9uZV9MaWJyYXJ5KCkgcmV0cmllcyBGVF9Eb25lX0ZhY2UoKSBhbmQgaXQgY2FuIGZhbGwgaW50bwogCWFuIGVuZGxlc3MgbG9vcC4gU2VlIHRoZSBkaXNjdXNzaW9uOgotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA4LTA5L21zZzAwMDQ3Lmh0bWwKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwOC0xMC9tc2cwMDAwMC5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA4LTA5L21zZzAwMDQ3Lmh0bWwKKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDgtMTAvbXNnMDAwMDAuaHRtbAogCiAyMDA5LTAxLTA3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKQEAgLTM0OTIsNyArMzQ5Miw3IEBACiAJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3OiBEb24ndCBjYWxsIEFDX0NBTk9OSUNBTF9CVUlMRCBhbmQKIAlBQ19DQU5PTklDQUxfVEFSR0VUIGFuZCB1c2UgJGhvc3Rfb3Mgb25seS4gIEEgbmljZSBleHBsYW5hdGlvbiBmb3IKIAl0aGlzIGNoYW5nZSBjYW4gYmUgZm91bmQgYXQKLQlodHRwOi8vYmxvZy5mbGFtZWV5ZXMuZXUvcy9jYW5vbmljYWwtdGFyZ2V0LgorCWh0dHBzOi8vYmxvZy5mbGFtZWV5ZXMuZXUvcy9jYW5vbmljYWwtdGFyZ2V0LgogCiAJRnJvbSBTYXZhbm5haCBwYXRjaCAjNjcxMi4KIApAQCAtNDUxNiw3ICs0NTE2LDcgQEAKIAlyZWNvbW1lbmRzIHRvIGFkZCB0aGUgb3B0aW9uIG9ubHkgdG8gQ0ZMQUdTLCBMREZMQUdTIHNob3VsZCBpbmNsdWRlCiAJaXQgYmVjYXVzZSBsaWJmcmVldHlwZS5sYSBpcyBidWlsdCB3aXRoIC1uby11bmRlZmluZWQuICBUaGlzIGZpeGVzIGEKIAlidWcgcmVwb3J0ZWQgYnkgUnlhbiBTY2htaWR0IGluIE1hY1BvcnRzLAotCWh0dHA6Ly90cmFjLm1hY3BvcnRzLm9yZy90aWNrZXQvMTUzMzEuCisJaHR0cHM6Ly90cmFjLm1hY3BvcnRzLm9yZy90aWNrZXQvMTUzMzEuCiAKIDIwMDgtMDYtMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KIApAQCAtNDg2MSw3ICs0ODYxLDcgQEAKIDIwMDgtMDQtMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KIAogCSogc3JjL3BjZi9wY2Zkcml2ci5jIChQQ0ZfRmFjZV9Jbml0KTogUHJvdGVjdCBjYWxsIHRvCi0JYEZUX1N0cmVhbV9PcGVuTFpXJyB3aXRoIGBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWicuICBGcm9tIFNhdmFubmFoCisJYEZUX1N0cmVhbV9PcGVuTFpXJyB3aXRoIGBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcnLiAgRnJvbSBTYXZhbm5haAogCWJ1ZyAjMjI5MDkuCiAKIDIwMDgtMDQtMTMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KQEAgLTUyNDMsNyArNTI0Myw3IEBACiAJZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY21hcCB0eXBlIDE0IHN1cHBvcnQgdG8gdGhlCiAJYEZUX09iamVjdF9BY3Rpb25OYW1lJyBzY2hlbWU6CiAKLQkgIEZUX0dldF9DaGFyX1ZhcmlhbnRfaW5kZXggICAgIC0+IEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJbmRleAorCSAgRlRfR2V0X0NoYXJfVmFyaWFudF9JbmRleCAgICAgLT4gRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4CiAJICBGVF9HZXRfQ2hhcl9WYXJpYW50X0lzRGVmYXVsdCAtPiBGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0CiAJICBGVF9HZXRfVmFyaWFudF9TZWxlY3RvcnMgICAgICAtPiBGVF9GYWNlX0dldFZhcmlhbnRTZWxlY3RvcnMKIAkgIEZUX0dldF9WYXJpYW50c19PZl9DaGFyICAgICAgIC0+IEZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIKQEAgLTU1MzAsNyArNTUzMCw3IEBACiAJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX0lVUCk6IEFkZCBtaXNzaW5nIHZhcmlhYmxlCiAJaW5pdGlhbGl6YXRpb24uCiAKLQkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5fbWV0cmljX2luaXRfYmx1ZXMpOiBHZXQgcmlkIG9mIGFuCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3NfaW5pdF9ibHVlcyk6IEdldCByaWQgb2YgYW4KIAlpbmZpbml0ZSBsb29wIGluIHRoZSBjYXNlIG9mIGRlZ2VuZXJhdGUgZm9udHMuCiAKIDIwMDctMDYtMjYgIFJhaHVsIEJoYWxlcmFvICA8Yi5yYWh1bC5wbUBnbWFpbC5jb20+CkBAIC02MTg3LDEzICs2MTg3LDEzIEBACiAJKiBidWlsZHMvdW5peC9mdHN5c3RlbS5jIChGVF9TdHJlYW1fT3Blbik6IFRlbXBvcmFyeSBmaXggdG8gcHJldmVudAogCTMyYml0IHVuc2lnbmVkIGxvbmcgb3ZlcmZsb3cgYnkgNjRiaXQgZmlsZXNpemUgb24gTFA2NCBwbGF0Zm9ybSwgYXMKIAlwcm9wb3NlZCBieSBTZWFuIE1jQnJpZGU6Ci0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDctMDMvbXNnMDAwMzIuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwNy0wMy9tc2cwMDAzMi5odG1sCiAKIDIwMDctMDMtMjIgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CiAKIAkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluOiBTdXBwcmVzcyBTR0kgY29tcGlsZXIncyB3YXJuaW5nIGFnYWluc3QKIAlzZXRqbXAsIHByb3Bvc2VkIGJ5IFNlYW4gTWNCcmlkZToKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwNy0wMy9tc2cwMDAzMi5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA3LTAzL21zZzAwMDMyLmh0bWwKIAogMjAwNy0wMy0xOSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KIApAQCAtNjg1Miw3ICs2ODUyLDcgQEAKIAogCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmg6IEFkZCBgdm9sYXRpbGUnIHRvCiAJc3luYyB3aXRoIHRoZSBtb2RpZmljYXRpb24gYnkgSmVucyBDbGF1ZGl1cyBvbiAyMDA2LTA4LTIyOyBjZi4KLQkgIGh0dHA6Ly9jdnMuc2F2YW5uYWguZ251Lm9yZy92aWV3Y3ZzL2ZyZWV0eXBlL2ZyZWV0eXBlMi9zcmMvb3R2YWxpZC9vdHZtb2QuYz9yMT0xLjQmcjI9MS41CisJICBodHRwczovL2N2cy5zYXZhbm5haC5nbnUub3JnL3ZpZXdjdnMvZnJlZXR5cGUvZnJlZXR5cGUyL3NyYy9vdHZhbGlkL290dm1vZC5jP3IxPTEuNCZyMj0xLjUKIAogMjAwNi0xMi0xNSAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KIApAQCAtNjg3Niw3ICs2ODc2LDcgQEAKIAogCSogc3JjL2Jhc2UvZnRvYmpzLmM6IEltcHJvdmVtZW50IG9mIHJlc291cmNlIGZvcmsgaGFuZGxlciBmb3IKIAlQT1NJWCwgY2YuCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAwNi0xMC9tc2cwMDAyNS5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDYtMTAvbXNnMDAwMjUuaHRtbAogCShNYWNfUmVhZF9zZm50X1Jlc291cmNlKTogQ291bnQgb25seSBgc2ZudCcgcmVzb3VyY2Ugb2Ygc3VpdGNhc2UgZm9udAogCWZvcm1hdCBvciAuZGZvbnQsIHRvIHNpbXVsYXRlIHRoZSBmYWNlIGluZGV4IG51bWJlciBjb3VudGVkIGJ5IGZ0bWFjLmMuCiAJKElzTWFjUmVzb3VyY2UpOiBSZXR1cm4gdGhlIG51bWJlciBvZiBzY2FsYWJsZSBmYWNlcyBjb3JyZWN0bHkuCkBAIC03MDIzLDcgKzcwMjMsNyBAQAogCShfZnRfbGNkX2ZpbHRlcl9maXIpOiBUaGlzLgogCVVwZGF0ZSBwYXJhbWV0ZXJzLgogCShfZnRfbGNkX2ZpbHRlcl9sZWdhY3kpIFtVU0VfTEVHQUNZXTogTmV3IGZpbHRlciBmdW5jdGlvbi4KLQkoRlRfTGlicmFyeV9TZXRfTGNkRmlsdGVyKTogVXBkYXRlIHBhcmFtZXRlcnMuCisJKEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKTogVXBkYXRlIHBhcmFtZXRlcnMuCiAJSGFuZGxlIG5ldyBmaWx0ZXIgbW9kZXMuCiAKIAkqIGluY2x1ZGUvaW50ZXJuYWwvZnRvYmpzLmg6IEluY2x1ZGUgRlRfTENEX0ZJTFRFUl9ILgpAQCAtNzUyNCw3ICs3NTI0LDcgQEAKIAogCWBmdF92YWxpZGF0b3JfcnVuJyB3cmFwcGluZyBgc2V0am1wJyBjYW4gY2F1c2UgYSBjcmFzaCwgYXMgZm91bmQgYnkKIAlKZW5zOgotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA2LTA4L21zZzAwMDA0Lmh0bS4KKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDYtMDgvbXNnMDAwMDQuaHRtLgogCiAJKiBzcmMvb3R2YWxpZC9vdHZtb2QuYzogUmVwbGFjZSBgZnRfdmFsaWRhdG9yX3J1bicgYnkgYGZ0X3NldGptcCcuCiAJSXQgcmV2ZXJ0cyB0aGUgY2hhbmdlIGludHJvZHVjZWQgb24gMjAwNS0wOC0yMC4KQEAgLTc3MjEsNyArNzcyMSw3IEBACiAyMDA2LTA2LTI0ICBFdWdlbml5IE1lc2hjaGVyeWFrb3YgIDxldWdlbkB1bml2LmtpZXYudWE+CiAKIAlGaXggdHdvIGhpbnRpbmcgYnVncyBhcyByZXBvcnRlZCBpbgotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA2LTA2L21zZzAwMDU3Lmh0bWwuCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA2LTA2L21zZzAwMDU3Lmh0bWwuCiAKIAkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9HbHlwaFpvbmVSZWMpOiBBZGQKIAlgZmlyc3RfcG9pbnQnIG1lbWJlci4KQEAgLTc3NjEsNyArNzc2MSw3IEBACiAJc2hvdWxkIHJldHVybiBgRlRfRXJyX1VuaW1wbGVtZW50ZWRfRmVhdHVyZScgaWYgdmFsaWRhdGlvbiBzZXJ2aWNlCiAJaXMgdW5hdmFpbGFibGUgKGRpc2FibGVkIGluIGBtb2R1bGVzLmNmZycpLiAgSXQgaXMgb3JpZ2luYWxseQogCXN1Z2dlc3RlZCBieSBEYXZpZCBUdXJuZXIsIGNmLgotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDA1LTExL21zZzAwMDc4Lmh0bWwKKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMDUtMTEvbXNnMDAwNzguaHRtbAogCiAJKiBzcmMvYmFzZS9mdGd4dmFsLmMgKEZUX1RydWVUeXBlR1hfVmFsaWRhdGUpOiBSZXR1cm4KIAlGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlIGlmIFRydWVUeXBlR1ggdmFsaWRhdGlvbiBzZXJ2aWNlIGlzCkBAIC03ODU3LDcgKzc4NTcsNyBAQAogMjAwNi0wNS0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgogCiAJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9Mb2FkX0NvbXBvc2l0ZV9HbHlwaCkKLQlbRlRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUl06IE1ha2UgaXQgY29tcGlsYWJsZSBhZ2Fpbi4KKwlbVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUl06IE1ha2UgaXQgY29tcGlsYWJsZSBhZ2Fpbi4KIAogMjAwNi0wNS0xNyAgRGF2aWQgVHVybmVyICA8ZGF2aWRAZnJlZXR5cGUub3JnPgogCkBAIC03OTMyLDcgKzc5MzIsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDA2LTIwMTcgYnkKK0NvcHlyaWdodCAyMDA2LTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy4yNCBiL0NoYW5nZUxvZy4yNAppbmRleCA0ZjMyYTZiLi43NjYxYWVlIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cuMjQKKysrIGIvQ2hhbmdlTG9nLjI0CkBAIC0zMzUsNyArMzM1LDcgQEAKIAogCSogaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oOiBGaXggY29tbWl0IGZyb20gMjAxMy0wMy0xMS4KIAotCVRoZSBwcmV2aW91cyB2ZXJzaW9uIHdhcyBub3QgYmFja3dhcmRzIGNvbXBhdGlibGUuICBSZXBvcnRlZCBieQorCVRoZSBwcmV2aW91cyB2ZXJzaW9uIHdhcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZS4gIFJlcG9ydGVkIGJ5CiAJQmVoZGFkLgogCiAyMDEzLTAzLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CkBAIC0xODYwLDEwICsxODYwLDEwIEBACiAJRml4IGBjaGVja2luZyBpZiBnY2Mgc3RhdGljIGZsYWcgLXN0YXRpYyB3b3JrcycgdGVzdC4KIAogCU9uIG15IGxpbnV4IGJ1aWxkIHRyZWUsIEkgcmVjZWl2ZSB5ZXMgYW5zd2VyIGluIGV2ZXJ5IHBhY2thZ2UgSQotCWJ1aWxkIGV4Y2VwdCBmcmVldHlwZSBmb3IgdGhpcyB0ZXN0IGNoZWNraW5nIGlmIGdjYyBzdGF0aWMgZmxhZworCWJ1aWxkIGV4Y2VwdCBGcmVlVHlwZSBmb3IgdGhpcyB0ZXN0IGNoZWNraW5nIGlmIGdjYyBzdGF0aWMgZmxhZwogCWAtc3RhdGljJyB3b3JrcwogCi0JT24gZnJlZXR5cGUsIG5vIGlzIHJlY2VpdmVkLCB1bmxlc3MgYnppcDIgYW5kIHpsaWIgYXJlIGRpc2FibGVkIHVzaW5nCisJSW4gRnJlZVR5cGUsIG5vIGlzIHJlY2VpdmVkLCB1bmxlc3MgYnppcDIgYW5kIHpsaWIgYXJlIGRpc2FibGVkIHVzaW5nCiAKIAkgIC4vY29uZmlndXJlIC0td2l0aG91dC1iemlwMiAtLXdpdGhvdXQtemxpYgogCkBAIC0xOTc3LDcgKzE5NzcsNyBAQAogCU1vc3Qgb2YgdGhlIGNvZGUgaXMgYmFzZWQgb24gdGhlIENsZWFyVHlwZSB3aGl0ZXBhcGVyIHdyaXR0ZW4gYnkKIAlHcmVnIEhpdGNoY29jawogCi0JICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweAorCSAgaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4CiAKIAl3aGljaCBnaXZlcyBhIGRldGFpbGVkIG92ZXJ2aWV3IG9mIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyB0byB0aGUKIAlNaWNyb3NvZnQgcmFzdGVyaXplciBzbyB0aGF0IG9sZGVyIGZvbnRzIGFyZSBzdXBwb3J0ZWQuICBIb3dldmVyLCBhCkBAIC0yMTAzLDcgKzIxMDMsNyBAQAogCU5FQyBGQSBmYW1pbHkgZGF0ZWQgaW4gMTk5NiBoYXZlIGRpZmZlcmVudCBjaGVja3N1bS4KIAlSZXBvcnRlZCBieSBKb2huc29uIFkuIFlhbiA8eWluc2VuX3lhbkBmb3hpdHNvZnR3YXJlLmNvbT47IHNlZQogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMi0wNi9tc2cwMDAyMy5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTItMDYvbXNnMDAwMjMuaHRtbAogCiAJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2NoZWNrX3RyaWNreW5lc3Nfc2ZudF9pZHMpOiA0IHNldHMKIAlvZiBmcGdtICYgcHJlcCB0YWJsZSBjaGVja3N1bXMgZm9yIEZBLUdvdGhpYywgRkEtTWluY2hvdSwKQEAgLTIxMTcsNyArMjExNyw3IEBACiAKIAlQcm9ibGVtIHJlcG9ydGVkIGJ5IGpvbGEgPGhhbnMtam9jaGVuLmxhdUBsaHN5c3RlbXMuY29tPjsgc2VlCiAKLQkgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEyLTA1L21zZzAwMDM2Lmh0bWwKKwkgIGh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMi0wNS9tc2cwMDAzNi5odG1sCiAKIAkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYyAoU011bERpdl9Ob19Sb3VuZCk6IE5ldyBtYWNyby4KIAkoTGluZV9VcCk6IFVzZSBpdC4KQEAgLTI2MDMsNyArMjYwMyw3IEBACiAKIAlTZWUgZGlzY3Vzc2lvbiBzdGFydGluZyBhdAogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMi0wMS9tc2cwMDAzNy5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTItMDEvbXNnMDAwMzcuaHRtbAogCiAJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYzogcy9UQmFuZC9ncmF5X1RCYW5kLy4KIAkqIHNyYy9yYXN0ZXIvZnRyYXN0ZXIuYzogcy9UQmFuZC9ibGFja19UQmFuZC8uCkBAIC0yNjE2LDcgKzI2MTYsNyBAQAogCWBvdXRsaW5lLmZsYWdzJyBzbyB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgcHJlc2VydmVkLiAgU2VlCiAJZGlzY3Vzc2lvbiBzdGFydGluZyBhdAogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMi0wMi9tc2cwMDA0Ni5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTItMDIvbXNnMDAwNDYuaHRtbAogCiAyMDEyLTAyLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKQEAgLTI2NzcsNyArMjY3Nyw3IEBACiAJW3JhY2Nlc3NdIE1vZGlmeSBmb3IgUElDIGJ1aWxkLgogCiAJQmFzZWQgb24gdGhlIHBhdGNoIHByb3ZpZGVkIGJ5IEVyaWsgRGFobHN0cm9tIDxlZEBvcGVyYS5jb20+LAotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEyLTAxL21zZzAwMDEwLmh0bWwKKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTItMDEvbXNnMDAwMTAuaHRtbAogCiAJQWxzbyBgcmFjY2Vzc19ndWVzc190YWJsZVtdJyBhbmQgYHJhY2Nlc3NfcnVsZV9ieV9kYXJ3aW5fdmZzKCknCiAJYXJlIHJlbmFtZWQgd2l0aCBgZnRfJyBzdWZmaXhlcy4KQEAgLTI5NDEsMTAgKzI5NDEsMTAgQEAKIAogCVt0eXBlNDJdIFJlbW92ZSBjYXN0cy4KIAotCSogc3JjL3R5cGU0Mi90NDJkcml2ZXIuYyAodDQyX2RyaXZlcl9jbGFzcyk6IFJlbW92ZSBhbGwgY2FzdHMgYW5kCisJKiBzcmMvdHlwZTQyL3Q0MmRyaXZyLmMgKHQ0Ml9kcml2ZXJfY2xhc3MpOiBSZW1vdmUgYWxsIGNhc3RzIGFuZAogCXVwZGF0ZSBhZmZlY3RlZCBmdW5jdGlvbnMuCiAKLQkqIHNyYy90eXBlNDIvdDQyb2Jqcy5jLCBzcmMvdHlwZTQyL3Q0Mm9ianMuaDogVXBkYXRlZCBmb3IgdDQyZHJpdmVyCisJKiBzcmMvdHlwZTQyL3Q0Mm9ianMuYywgc3JjL3R5cGU0Mi90NDJvYmpzLmg6IFVwZGF0ZWQgZm9yIHQ0MiBkcml2ZXIKIAljaGFuZ2VzLgogCiAyMDExLTExLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CkBAIC0zMTI3LDcgKzMxMjcsNyBAQAogCiAJQWNjb3JkaW5nIHRvCiAKLQkgIGh0dHA6Ly93d3cuZ251Lm9yZy9wcmVwL21haW50YWluL2h0bWxfbm9kZS9Db3B5cmlnaHQtTm90aWNlcy5odG1sCisJICBodHRwczovL3d3dy5nbnUub3JnL3ByZXAvbWFpbnRhaW4vaHRtbF9ub2RlL0NvcHlyaWdodC1Ob3RpY2VzLmh0bWwKIAogCXRoaXMgc2hvdWxkIGJlIG1lbnRpb25lZCBleHBsaWNpdGx5LgogCkBAIC0zNDU2LDcgKzM0NTYsNyBAQAogCiAJU2VlCiAKLQkgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTA3L21zZzAwMDQ5Lmh0bWwKKwkgIGh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNy9tc2cwMDA0OS5odG1sCiAKIAlmb3Igc29tZSBjb21wYXJpc29uIGltYWdlcy4KIApAQCAtMzU1Niw3ICszNTU2LDcgQEAKIAogCVNlZQogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNy9tc2cwMDAwMS5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDcvbXNnMDAwMDEuaHRtbAogCiAJZm9yIGV4YW1wbGUgZG9jdW1lbnRzLiAgVGhlIEZyZWVUeXBlIHN0cm9rZXIgbm93IHByb2R1Y2VzIHJlc3VsdHMKIAl2ZXJ5IHNpbWlsYXIgdG8gdGhhdCBwcm9kdWNlZCBieSBHaG9zdFNjcmlwdCBhbmQgRGlzdGlsbGVyIGZvciB0aGVzZQpAQCAtNDAwNSw5ICs0MDA1LDkgQEAKIAlhbGlnbmVkLCBibHVlem9uZXMgZm9yIENKSyBJZGVvZ3JhcGhzIGFyZSBjYWxjdWxhdGVkIGZyb20KIAlzYW1wbGUgZ2x5cGhzLiAgQXQgcHJlc2VudCwgdmVydGljYWwgYmx1ZXpvbmVzIChibHVlem9uZXMKIAl0byBhbGlnbiB2ZXJ0aWNhbCBzdGVtcykgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBGb3IgZGV0YWlsLCBzZWUKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA3MC5odG1sCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDQvbXNnMDAwOTIuaHRtbAotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTA1L21zZzAwMDAxLmh0bWwKKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDQvbXNnMDAwNzAuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA5Mi5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTA1L21zZzAwMDAxLmh0bWwKIAogCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg6IE5ldyB0cmFjZSBjb21wb25lbnQgYGFmY2prJy4KIAkqIHNyYy9hdXRvZml0L2FmY2prLmggKEFGX0NKS3tCbHVlLEF4aXMsTWV0cmljfVJlYyk6IEFkZCBDSksgdmVyc2lvbgpAQCAtNDAyOSw3ICs0MDI5LDcgQEAKIAlhZl9sYXRpbl9oaW50c19jb21wdXRlX2JsdWVfZWRnZXMuCiAJKGFmX2Nqa19tZXRyaWNzX2luaXRfYmx1ZXMpOiBOZXcgZnVuY3Rpb24sIENKSyB2ZXJzaW9uIG9mCiAJYWZfbGF0aW5fbWV0cmljc19pbml0X2JsdWVzLgotCShhZl9jamtfaGludHNfZWRnZXMpOiBBZGQgY29kZSB0byBhbGlnbiB0aGUgZWRnZSBzdGVtcyB0byBibHVlIHpvbmVzLgorCShhZl9jamtfaGludF9lZGdlcyk6IEFkZCBjb2RlIHRvIGFsaWduIHRoZSBlZGdlIHN0ZW1zIHRvIGJsdWUgem9uZXMuCiAKIAkqIHNyYy9hdXRvZml0L2FmaW5kaWMuYyAoYWZfaW5kaWNfbWV0cmljc19pbml0KTogVGFrZSBBRl9DSktNZXRyaWMKIAlpbnN0ZWFkIG9mIEFGX0xhdGluTWV0cmljLCBhbmQgaW5pdGlhbGl6ZSBhcyBhZl9jamtfbWV0cmljc19pbml0LgpAQCAtNDA3NSw4ICs0MDc1LDggQEAKIAl0aGUgVHJ1ZVR5cGUgZm9udCBoZWFkZXIuICBTb21lIGJhZCBQREYgZ2VuZXJhdG9ycyB3cml0ZQogCXdyb25nIHZhbHVlcy4gIEZvciBkZXRhaWxzIHNlZSBleGFtcGxlcyBhbmQgYmVuY2htYXJrIHRlc3RzCiAJb2YgdGhlIGxhdGVuY3kgYnkgcmVjYWxjdWxhdGlvbjoKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA5MS5odG1sCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDQvbXNnMDAwOTYuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA5MS5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTA0L21zZzAwMDk2Lmh0bWwKIAogMjAxMS0wNC0zMCAgc3V6dWtpIHRvc2hpeWEgIDxtcHN1enVraUBoaXJvc2hpbWEtdS5hYy5qcD4KIApAQCAtNDEwOSw3ICs0MTA5LDcgQEAKIAlCZWNhdXNlIHNvbWUgUERGIGdlbmVyYXRvcnMgbWFuZ2xlIHRoZSBmYW1pbHkgbmFtZSBiYWRseSwKIAl0aGUgdHJpY2t5bmVzcyBjaGVjayBieSB0aGUgY2hlY2tzdW0gc2hvdWxkIGJlIGludm9rZWQgYWx3YXlzLgogCUZvciBzYW1wbGUgUERGLCBzZWUKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA3My5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTA0L21zZzAwMDczLmh0bWwKIAogCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9jaGVja190cmlja3luZXNzKTogRXZlbiB3aGVuCiAJdHRfY2hlY2tfdHJpY2t5bmVzc19mYW1pbHkoKSBmaW5kcyBubyB0cmlja3luZXNzLApAQCAtNDE0Niw4ICs0MTQ2LDggQEAKIAlXaGVuIHRoZXJlIGFyZSB0b28gbWFueSBzdGVtcyB0byBwcmVzZXJ2ZSB0aGVpciBnYXBzIGluIHRoZQogCXJhc3Rlcml6YXRpb24gb2YgQ0pLIElkZW9ncmFwaHMgYXQgYSBsb3cgcmVzb2x1dGlvbiwgYmx1ciB0aGUKIAlzdGVtcyBpbnN0ZWFkIG9mIHNob3dpbmcgY2x1bXBlZCBzdGVtcy4gIFNlZQotCWh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTAyL21zZzAwMDExLmh0bWwKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMS0wNC9tc2cwMDA0Ni5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDExLTAyL21zZzAwMDExLmh0bWwKKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTEtMDQvbXNnMDAwNDYuaHRtbAogCWZvciBkZXRhaWxzLgogCiAJKiBzcmMvYXV0b2ZpdC9hZmNqay5jIChhZl9jamtfaGludF9lZGdlcyk6IFN0b3JlIHRoZSBwb3NpdGlvbiBvZgpAQCAtNDM0Myw3ICs0MzQzLDcgQEAKIAlbY2FjaGVdIEZpeCBhbiBvZmYtYnktb25lIGJ1ZyBpbiBgRlRDX01hbmFnZXJfUmVtb3ZlRmFjZUlEJy4KIAlGb3VuZCBieSA8eWNoZW4xMzkyMDAxQHlhaG9vLmNvbS5jbj4sIHNlZSBkZXRhaWwgaW4KIAotCSAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTEtMDEvbXNnMDAwMjMuaHRtbAorCSAgaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDExLTAxL21zZzAwMDIzLmh0bWwKIAogCSogc3JjL2NhY2hlL2Z0Y2NhY2hlLmMgKEZUQ19DYWNoZV9SZW1vdmVGYWNlSUQpOiBDaGVjayB0aGUgbm9kZQogCWJ1Y2tldHNbY2FjaGUtPnAgKyBjYWNoZS0+bWFza10gdG9vLgpAQCAtNDQ2NCw3ICs0NDY0LDcgQEAKIAlKb2huc29uIFkuIFlhbi4gIFRoZSBidWcgcmVwb3J0IGJ5IFF0IGRldmVsb3BlcnMgaXMKIAljb25zaWRlcmVkIHRvby4KIAotCWh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctNjUyMQorCWh0dHBzOi8vYnVncmVwb3J0cy5xdC5pby9icm93c2UvUVRCVUctNjUyMQogCiAyMDExLTAxLTE1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKQEAgLTQ5MjMsNyArNDkyMyw3IEBACiAJUGFydGlhbGx5IHVuZG8gY2hhbmdlIGZyb20gMjAxMC0xMC0xNSBieSB1c2luZyBPTkVfUElYRUwvNDsgdGhpcyBoYXMKIAliZWVuIHRlc3RlZCB3aXRoIGRlbW8gaW1hZ2VzIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdC4gIFNlZQogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0xMC9tc2cwMDA1NS5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTAtMTAvbXNnMDAwNTUuaHRtbAogCiAJYW5kIGxhdGVyIG1haWxzIGluIHRoaXMgdGhyZWFkLgogCkBAIC00OTQzLDcgKzQ5NDMsNyBAQAogCVByb2JsZW0gcmVwb3J0ZWQgYnkgVG9tIEJpc2hvcCA8d2VubGluQHdlbmxpbi5jb20+OyBzZWUKIAl0aHJlYWQgc3RhcnRpbmcgd2l0aAogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxMC0xMC9tc2cwMDA0OS5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTAtMTAvbXNnMDAwNDkuaHRtbAogCiAJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKExpbmVfVXApOiBSZXBsYWNlIEZNdWxEaXYgd2l0aCBTTXVsRGl2CiAJc2luY2UgdGhlIGludm9sdmVkIG11bHRpcGxpY2F0aW9uIGV4Y2VlZHMgMzIgYml0cy4KQEAgLTUwMDcsNyArNTAwNyw3IEBACiAJbm9ybWFsIGNsaWVudHMuCiAKIAlGb3IgdGhlIGhpc3Rvcnkgb2YgdGhlc2UgbWFjcm9zLCBzZWUgdGhlIGludmVzdGlnYXRpb246Ci0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTAtMTAvbXNnMDAwMjIuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxMC0xMC9tc2cwMDAyMi5odG1sCiAKIDIwMTAtMTAtMjQgIHN1enVraSB0b3NoaXlhICA8bXBzdXp1a2lAaGlyb3NoaW1hLXUuYWMuanA+CiAKQEAgLTUwNTQsNyArNTA1NCw3IEBACiAJYnkgRGFyd2luIFZGUyBhcmUgc2tpcHBlZC4gIEl0IHJlZHVjZXMgdGhlIHdhcm5pbmdzIG9mIHRoZQogCWRlcHJlY2F0ZWQgcmVzb3VyY2UgZm9yayBhY2Nlc3MgbWV0aG9kIGJ5IHJlY2VudCBEYXJ3aW4ga2VybmVsLgogCUZpeCBNYWNQb3J0cyB0aWNrZXQgIzE4ODU5OgotCQlodHRwOi8vdHJhYy5tYWNwb3J0cy5vcmcvdGlja2V0LzE4ODU5CisJCWh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvdGlja2V0LzE4ODU5CiAKIAkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChsb2FkX2ZhY2VfaW5fZW1iZWRkZWRfcmZvcmspOgogCVdoZW4gYEZUX1N0cmVhbV9OZXcnIHJldHVybnMgRlRfRXJyX0Nhbm5vdF9PcGVuX1N0cmVhbSwgaXQKQEAgLTUxODIsNyArNTE4Miw3IEBACiAJW3Ntb290aF0gRml4IHNwbGl0dGluZyBvZiBjdWJpY3MgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KIAogCVJlcG9ydGVkIGJ5IFLDs2JlcnQgTcOhcmtpIDxnc21pa29AZ21haWwuY29tPjsgc2VlCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTAtMDkvbXNnMDAwMTkuaHRtbC4KKwlodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTAtMDkvbXNnMDAwMTkuaHRtbC4KIAogCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX2N1YmljKTogRml4IHRoaW5rby4KIApAQCAtNTM0OSw3ICs1MzQ5LDcgQEAKIAlJZ25vcmUgdGhlIGVudmlyb25tZW50YWwgc2V0dGluZyBvZiBMSUJUT09MLgogCVBhdGNoIGlzIHN1Z2dlc3RlZCBieSBBZHJpYW4gQnVuaywgdG8gcHJldmVudCB1bmV4cGVjdGVkCiAJcmVmbGVjdGlvbiBvZiBlbnZpcm9ubWVudGFsIExJQlRPT0wuICBTZWU6Ci0JaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcGF0Y2gvPzcyOTAKKwlodHRwczovL3NhdmFubmFoLm5vbmdudS5vcmcvcGF0Y2gvPzcyOTAKIAogCSogYnVpbGRzL3VuaXgvdW5peC1jYy5pbjogTElCVE9PTCBpcyB1bmNvbmRpdGlvbmFsbHkgc2V0IHRvCiAJJChGVF9MSUJUT09MX0RJUikvbGlidG9vbC4gIEZUX0xJQlRPT0xfRElSIGlzIHNldCB0byAkKEJVSUxEX0RJUikKQEAgLTU0MDYsOCArNTQwNiw4IEBACiAJZm9yIG5hbWVsZXNzIGZvbnRzIGlzIHNhZmVyIGZvciBQREZzIGluY2x1ZGluZyBlbWJlZGRlZCBDaGluZXNlCiAJZm9udHMuICBXcml0dGVuIGJ5IERhdmlkIEJldmFuLCBzZWU6CiAKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0wOC9tc2cwMDAyMS5odG1sCi0JaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9wb3BwbGVyLzIwMTAtQXVndXN0LzAwNjMxMC5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEwLTA4L21zZzAwMDIxLmh0bWwKKwlodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy9wb3BwbGVyLzIwMTAtQXVndXN0LzAwNjMxMC5odG1sCiAKIAkqIHNyYy90cnVldHlwZS90dG9ianMuYyAodHRfY2hlY2tfdHJpY2t5bmVzcyk6IElmIGEgTlVMTCBwb2ludGVyIGJ5CiAJbmFtZWxlc3MgZm9udCBpcyBnaXZlbiwgVFJVRSBpcyByZXR1cm5lZCB0byBlbmFibGUgaGludGluZy4KQEAgLTU5NjgsNyArNTk2OCw3IEBACiAKIAkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9jdWJpYyk6IEZpeCBhbGdvcml0aG0uCiAJVGhlIHByZXZpb3VzIHZlcnNpb24gd2FzIHRvbyBhZ2dyZXNzaXZlLCBhcyBkZW1vbnN0cmF0ZWQgaW4KLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0wNi9tc2cwMDAyMC5odG1sLgorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0wNi9tc2cwMDAyMC5odG1sLgogCiAyMDEwLTA2LTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKQEAgLTYwNjUsNyArNjA2NSw3IEBACiAJc2ltcGxpZmllZCBhbGdvcml0aG0gdG8gZmluZCBvdXQgd2hldGhlciB0aGUgc3BsaW5lIGNhbiBiZSByZXBsYWNlZAogCXdpdGggdHdvIHN0cmFpZ2h0IGxpbmVzLiAgU2VlIHRoaXMgdGhyZWFkIGZvciBtb3JlOgogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMC0wNi9tc2cwMDAwMC5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTAtMDYvbXNnMDAwMDAuaHRtbAogCiAyMDEwLTA2LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CiAKQEAgLTYyMjAsNyArNjIyMCw3IEBACiAJQWRkIG5ldyBmdW5jdGlvbiBgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzJy4KIAogCVRoaXMgaXMgYmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IExpZnRlcgotCTxodHRwOi8vdW5peGZvcnVtLm9yZy9pbmRleC5waHA/c2hvd3VzZXI9MTE2OTE+LiAgSXQgZml4ZXMKKwk8aHR0cHM6Ly91bml4Zm9ydW0ub3JnL2luZGV4LnBocD9zaG93dXNlcj0xMTY5MT4uICBJdCBmaXhlcwogCUZyZWVEZXNrdG9wIGJ1ZyAjMjczODYuCiAKIAkqIHNyYy9iYXNlL2Z0bGNkZmlsLmMgKEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyV2VpZ2h0cyk6IE5ldwpAQCAtNjM0NCw3ICs2MzQ0LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAxMC0yMDE3IGJ5CitDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjUgYi9DaGFuZ2VMb2cuMjUKaW5kZXggMTA5ZmY2Ny4uNTljZjJiZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLjI1CisrKyBiL0NoYW5nZUxvZy4yNQpAQCAtMTEyLDggKzExMiw4IEBACiAJT3JpZ2luYWwgcGF0Y2ggaXMgZGVzaWduZWQgYnkgV2VybmVyIExlbWJlcmcuICBFeHRyYSBwYXJ0CiAJZm9yIG90dmFsaWQgYW5kIGd4dmFsaWQgYXJlIGFkZGVkIGJ5IHN1enVraSB0b3NoaXlhLCBzZWUKIAlkaXNjdXNzaW9uOgotCWh0dHA6Ly9saXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDE0LTEyL21zZzAwMDAyLmh0bWwKLQlodHRwOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNC0xMi9tc2cwMDAwNy5odG1sCisJaHR0cHM6Ly9saXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDE0LTEyL21zZzAwMDAyLmh0bWwKKwlodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTQtMTIvbXNnMDAwMDcuaHRtbAogCiAJKiBpbmNsdWRlL2ludGVybmFsL2Z0dmFsaWQuaDogSW50cm9kdWNlIEZUX1RIUk9XKCkgaW4gRlRfSU5WQUxJRF8oKS4KIAkqIHNyYy9neHZhbGlkL2d4dmNvbW1uLmg6IERpdHRvLgpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJZm9yIEJvcmxhbmQncyBidWcgdHJhY2tlciBlbnRyeS4KIAogCVJlcG9ydGVkIGJ5IFl1bGlhbmEgWmlnYW5naXJvdmEgPHppZ2FuZ2lyb3ZhQGluYm94LnJ1PiwKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNC0wNC9tc2cwMDAwMS5odG1sLgorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNC0wNC9tc2cwMDAwMS5odG1sLgogCiAJKiBpbmNsdWRlL2ludGVybmFsL2Z0dmFsaWQuaCAoRlRfVmFsaWRhdG9yUmVjKSwgc3JjL3Ntb290aC9mdGdyYXlzLmMKIAkoZ3JheV9UV29ya2VyXyk6IE1vdmUgYGZ0X2ptcF9idWYnIGZpZWxkIHRvIGJlIHRoZSBmaXJzdCBlbGVtZW50LgpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAlBbGwgcHVibGljIEZyZWVUeXBlIGVudW1lcmF0aW9uIGFuZCBmbGFnIHZhbHVlcyBhcmUgdXBwZXJjYXNlLi4uCiAKLQkqIGluY2x1ZGUvdHR0YWJsZXMuaCAoRlRfU2ZudF9UYWcpOiBJbXBsZW1lbnQgaXQuICBGb3IgYmFja3dhcmRzCisJKiBpbmNsdWRlL3R0dGFibGVzLmggKEZUX1NmbnRfVGFnKTogSW1wbGVtZW50IGl0LiAgRm9yIGJhY2t3YXJkCiAJY29tcGF0aWJpbGl0eSwgcmV0YWluIHRoZSBvbGQgdmFsdWVzIGFzIG1hY3Jvcy4KIAogCSogc3JjL2Jhc2UvZnRmc3R5cGUuYyAoRlRfR2V0X0ZTVHlwZV9GbGFncyksIHNyYy9zZm50L3NmZHJpdmVyLmMKQEAgLTIxMTYsNyArMjExNiw3IEBACiAJYnVpbGRzL3VuaXgvdW5peC1kZWYuaW4gKGZyZWV0eXBlLWNvbmZpZywgZnJlZXR5cGUyLnBjKTogSGFuZGxlCiAJSGFyZkJ1enouCiAKLQkqIGRvY3MvSU5TVEFMTC5VTklYOiBEb2N1bWVudCBpbnRlcmRlcGVuZGVuY3kgb2YgRnJlZXR5cGUgd2l0aAorCSogZG9jcy9JTlNUQUxMLlVOSVg6IERvY3VtZW50IGludGVyZGVwZW5kZW5jeSBvZiBGcmVlVHlwZSB3aXRoCiAJSGFyZkJ1enouCiAKIDIwMTQtMDItMjggIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KQEAgLTI2NjksOCArMjY2OSw4IEBACiAJd2l0aCBDYXJib24gZnJhbWV3b3JrIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoYXQgYnkgRnJlZVR5cGUgMgogCXdpdGhvdXQgQ2FyYm9uIGZyYW1ld29yay4pICBGb3VuZCBieSBLaGFsZWQgSG9zbnkgYW5kIEhpbi1UYWsgTGV1bmcuCiAKLQlodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMy0wMi9tc2cwMDAzNS5odG1sCi0JaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTMtMTIvbXNnMDAwMjcuaHRtbAorCWh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMy0wMi9tc2cwMDAzNS5odG1sCisJaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDEzLTEyL21zZzAwMDI3Lmh0bWwKIAogCSogc3JjL2Jhc2UvZnRyZm9yay5jIChGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cyk6IEFkZCBhIHN3aXRjaAogCWBzb3J0X2J5X3Jlc19pZCcgdG8gY29udHJvbCB0aGUgZnJhZ21lbnRlZCByZXNvdXJjZSBvcmRlcmluZy4KQEAgLTMxODEsNyArMzE4MSw3IEBACiAKIAlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsgTGV1bmcgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD47IHNlZQogCi0JICBodHRwOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxMy0wOC9tc2cwMDAwNS5odG1sCisJICBodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTMtMDgvbXNnMDAwMDUuaHRtbAogCiAJZm9yIGRldGFpbHMuCiAKQEAgLTM1NTYsNyArMzU1Niw3IEBACiAKIAlTdWdnZXN0ZWQgYnkgQWtpcmEgVGFnb2gsIHNlZQogCi0JICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxMy0wOS9tc2cwMDAzMC5odG1sCisJICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTMtMDkvbXNnMDAwMzAuaHRtbAogCiAJKiBzcmMvYmRmL2JkZmRyaXZyLmMgKEJERl9GYWNlX0luaXQpOiBSZXR1cm4gYEludmFsaWRfQXJndW1lbnQnCiAJZXJyb3IgaWYgdGhlIGZvbnQgY291bGQgYmUgb3BlbmVkIGJ1dCBub24temVybyBgZmFjZV9pbmRleCcgaXMKQEAgLTQ3NjcsNyArNDc2Nyw3IEBACiAJKiBzcmMvY2FjaGUvZnRjbWFuYWcuYyAoRlRDX01hbmFnZXJfQ2hlY2spOiBGaXggY2FzdC4KIAkqIHNyYy9jYWNoZS9mdGNtYW5hZy5oIChGVENfTWFuYWdlclJlYyk6IERpdHRvLgogCi0JKiBzcmMvY2ZmL2NmMmFycnN0LmMgKGNmMl9hcnJzdGFja19zZXROdW1fRWxlbWVudHMpOiBVc2UgY2FzdC4KKwkqIHNyYy9jZmYvY2YyYXJyc3QuYyAoY2YyX2FycnN0YWNrX3NldE51bUVsZW1lbnRzKTogVXNlIGNhc3QuCiAJKiBzcmMvY2ZmL2NmMmZ0LmMgKGNmMl9mcmVlU2VhY0NvbXBvbmVudCk6IERpdHRvLgogCSogc3JjL2NmZi9jZmZvYmpzLmMgKHJlbW92ZV9zdWJzZXRfcHJlZml4LCByZW1vdmVfc3R5bGUpOiBEaXR0by4KIApAQCAtNTE0NSw3ICs1MTQ1LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAxMy0yMDE3IGJ5CitDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjYgYi9DaGFuZ2VMb2cuMjYKaW5kZXggN2MxMTI2YS4uZWE4OWU5MSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nLjI2CisrKyBiL0NoYW5nZUxvZy4yNgpAQCAtNTYzLDI2ICs1NjMsMjYgQEAKIAkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChTVUJQSVhFTF9ISU5USU5HKTogUmVwbGFjZWQgYnkuLi4KIAkoTk9fU1VCUElYRUxfSElOVElORywgU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZLAogCVNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCk6IC4uLm5ldyBtYWNyb3MuCi0JKERpcmVjdF9Nb3ZlLCBEaXJlY3RfTW92ZV9YLCBEaXJlY3RfTW92ZV9ZKTogSGFuZGxlIGJhY2t3YXJkcworCShEaXJlY3RfTW92ZSwgRGlyZWN0X01vdmVfWCwgRGlyZWN0X01vdmVfWSk6IEhhbmRsZSBiYWNrd2FyZAogCWNvbXBhdGliaWxpdHkuCiAJVXBkYXRlZC4KIAkoSW5zX1JTLCBJbnNfRkRFRiwgSW5zX0VOREYsIEluc19DQUxMLCBJbnNfTE9PUENBTEwsIEluc19NRCk6CiAJVXBkYXRlZC4KIAkoSW5zX0lOU1RDVFJMKTogSGFuZGxlIG5hdGl2ZSBDbGVhclR5cGUgbW9kZSBmbGFnLgogCVVwZGF0ZWQuCi0JKEluc19GTElQUFQsIEluc19GTElQUkdPTiwgSW5zX0ZMSVBSR09GRik6IEhhbmRsZSBiYWNrd2FyZHMKKwkoSW5zX0ZMSVBQVCwgSW5zX0ZMSVBSR09OLCBJbnNfRkxJUFJHT0ZGKTogSGFuZGxlIGJhY2t3YXJkCiAJY29tcGF0aWJpbGl0eS4KIAkoTW92ZV9acDJfUG9pbnQpOiBEaXR0by4KIAkoSW5zX1NIUCk6IFVwZGF0ZWQuCi0JKEluc19TSFBJWCk6IEhhbmRsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKwkoSW5zX1NIUElYKTogSGFuZGxlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAJVXBkYXRlZC4KIAkoSW5zX01TSVJQLCBJbnNfTURBUCwgSW5zX01JQVAsIEluc19NRFJQLCBJbnNfTUlSUCk6IFVwZGF0ZWQuCiAJKEluc19BTElHTlJQKTogVXBkYXRlZC4KLQkoSW5zX0lVUCwgSW5zX0RFTFRBUCk6IEhhbmRsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKwkoSW5zX0lVUCwgSW5zX0RFTFRBUCk6IEhhbmRsZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCVVwZGF0ZWQuCiAJKEluc19HRVRJTkZPKTogSGFuZGxlIHYzOCBmbGFncy4KIAlVcGRhdGVkLgotCShUVF9SdW5JbnMpOiBIYW5kbGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4KKwkoVFRfUnVuSW5zKTogSGFuZGxlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZS4KIAlVcGRhdGVkLgogCiAyMDE2LTA1LTE3ICBOaWtvbGF1cyBXYXh3ZWlsZXIgIDxtYWRpZ2Vuc0BnbWFpbC5jb20+CkBAIC02MDYsMTYgKzYwNiwxNiBAQAogCiAJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoVFRfRXhlY0NvbnRleHRSZWMpOiBEZWZpbmUgbmV3IGZpZWxkcwogCWBzdWJwaXhlbF9oaW50aW5nX2xlYW4nLCBgdmVydGljYWxfbGNkX2xlYW4nLAotCWBiYWNrd2FyZHNfY29tcGF0aWJpbGl0eScsIGBpdXB4X2NhbGxlZCcsIGl1cHlfY2FsbGVkJywgYW5kCisJYGJhY2t3YXJkX2NvbXBhdGliaWxpdHknLCBgaXVweF9jYWxsZWQnLCBpdXB5X2NhbGxlZCcsIGFuZAogCWBncmF5c2NhbGVfY2xlYXJ0eXBlJyBmb3IgbmV3IGhpbnRpbmcgbW9kZS4KIAogCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3Byb3BlcnR5X3NldCk6IEhhbmRsZSB2MzggYW5kIHY0MAogCWludGVycHJldGVycyBjb25kaXRpb25hbGx5LgogCiAJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChUVF9IaW50X0dseXBoKTogU2F2ZSBwaGFudG9tIHBvaW50cyB1bmxlc3MKLQlpbiB2MzggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4KKwlpbiB2MzggYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLgogCVVwZGF0ZWQuCi0JKGNvbXB1dGVfZ2x5cGhfbWV0cmljcyk6IEFkZCB2MzggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZQorCShjb21wdXRlX2dseXBoX21ldHJpY3MpOiBBZGQgdjM4IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZQogCWNvbnN0cmFpbnQgZm9yIGFkanVzdGluZyBhZHZhbmNlIHdpZHRocy4KIAlVcGRhdGVkLgogCSh0dF9sb2FkZXJfaW5pdCk6IEhhbmRsZSBuZXcgZmxhZ3MgYHN1YnBpeGVsX2hpbnRpbmdfbGVhbicsCkBAIC02NjMsNyArNjYzLDcgQEAKIAlUaGUgcHJldmlvdXMgZml4IGZvciAjNDYzNzIgbWlzdW5kZXJzdG9vZCBhIGNvbXBvc2l0ZSBnbHlwaCByZWZlcnJpbmcKIAlzYW1lIGNvbXBvbmVudCB0d2ljZSBhcyBhIHJlY3Vyc2l2ZSByZWZlcmVuY2UuICBTZWUgdGhlIGRpc2N1c3Npb24KIAotCSAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTYtMDUvbXNnMDAwMDAuaHRtbAorCSAgaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS8yMDE2LTA1L21zZzAwMDAwLmh0bWwKIAogCVRoYW5rcyB0byBLaGFsZWQgSG9zbnkgZm9yIGZpbmRpbmcgdGhpcyBpc3N1ZS4KIApAQCAtNzg4LDcgKzc4OCw3IEBACiAJcHJvcGVyIGJsdWUgem9uZXMgY2FuJ3QgYmUgZGVmaW5lZC4gIEhvd2V2ZXIsIHRoZXJlIGlzIGFscmVhZHkgYQogCXByb3Bvc2FsIHN1Ym1pdHRlZCB0byBVbmljb2RlOyBzZWUKIAotCSAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9MMi9MMjAxNi8xNjAzNC1uNDcwNy1nZW9yZ2lhbi5wZGYKKwkgIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL0wyL0wyMDE2LzE2MDM0LW40NzA3LWdlb3JnaWFuLnBkZgogCiAJQWRkaXRpb25hbGx5LCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zLCBVbmljb2RlIHRyZWF0cyBLaHV0c3VyaSBhcwogCXRoZSBzYW1lIHNjcmlwdCBhcyBNa2hlZHJ1bGksIGFuZCBzbyBkb2VzIE9wZW5UeXBlLiAgSG93ZXZlciwgc2luY2UKQEAgLTE0ODIsNyArMTQ4Miw3IEBACiAKIAlTdGlsbCBoYW5kbGUgYF9fRlRFUlJPUlNfSF9fJy4KIAotCVdlIG5lZWQgdGhpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisJV2UgbmVlZCB0aGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCiAJUHJvYmxlbSByZXBvcnRlZCBieSBKb2huIEVtbWFzIDxqb2huZTUzQHRpc2NhbGkuY28udWs+LgogCkBAIC0yNDc4LDcgKzI0NzgsNyBAQAogCiAJUHJvYmxlbSByZXBvcnRlZCBieSBEYXZpZCBDYXBlbGxvIDxkYXZpZGNhcGVsbG9AZ21haWwuY29tPjsgc2VlCiAKLQkgIGh0dHA6Ly9saXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9mcmVldHlwZS1kZXZlbC8yMDE1LTEwL21zZzAwMTA4Lmh0bWwKKwkgIGh0dHBzOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNS0xMC9tc2cwMDEwOC5odG1sCiAKIAlmb3IgZGV0YWlscy4KIApAQCAtMzgxMyw3ICszODEzLDcgQEAKIAogCVNlZQogCi0JICBodHRwOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNS0wNy9tc2cwMDAwOC5odG1sCisJICBodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTUtMDcvbXNnMDAwMDguaHRtbAogCiAJZm9yIGEgcmF0aW9uYWxlLgogCkBAIC0zOTMyLDcgKzM5MzIsNyBAQAogCiAJVGhpcyBjaGFuZ2UgaXMgYSByZXN1bHQgb2YgYSBkaXNjdXNzaW9uIHRocmVhZCBvbiBmcmVldHlwZS1kZXZlbAogCi0JICBodHRwOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUtZGV2ZWwvMjAxNS0wNi9tc2cwMDA0MS5odG1sCisJICBodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLWRldmVsLzIwMTUtMDYvbXNnMDAwNDEuaHRtbAogCiAJUmUtaW50cm9kdWNlIHRoZSBgZnJlZXR5cGUyJyBzdWJkaXJlY3RvcnkgZm9yIGFsbCBGcmVlVHlwZSBoZWFkZXIKIAlmaWxlcyBhZnRlciBpbnN0YWxsYXRpb24sIGFuZCByZW5hbWUgdGhlIGBmcmVldHlwZTInIHN1YmRpcmVjdG9yeSBpbgpAQCAtNDExNCw3ICs0MTE0LDcgQEAKIAogCVByb2JsZW0gcmVwb3J0ZWQgYnkgR3Jpc3Npb20gPGNoYW9zLnByb3RvbkBnbWFpbC5jb20+OyBpbgogCi0JICBodHRwOi8vbGlzdHMubm9uZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAxNS0wNS9tc2cwMDAxMy5odG1sCisJICBodHRwczovL2xpc3RzLm5vbmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMTUtMDUvbXNnMDAwMTMuaHRtbAogCiAJdGhlcmUgaXMgYW4gZXhhbXBsZSBjb2RlIHRvIHRyaWdnZXIgdGhlIGJ1Zy4KIApAQCAtNDIyMiw3ICs0MjIyLDcgQEAKIAogCVt0cnVldHlwZV0gU3VwcG9ydCBzZWxlY3RvciBpbmRleCAzIG9mIHRoZSBJTlNUQ1RSTCBpbnN0cnVjdGlvbi4KIAotCVRoaXMgZmxhZyBhY3RpdmF0ZXMgYG5hdGl2ZSBDbGVhclR5cGUgaGludGluZycsIGRpc2FibGluZyBiYWNrd2FyZHMKKwlUaGlzIGZsYWcgYWN0aXZhdGVzIGBuYXRpdmUgQ2xlYXJUeXBlIGhpbnRpbmcnLCBkaXNhYmxpbmcgYmFja3dhcmQKIAljb21wYXRpYmlsaXR5IG1vZGUgYXMgZGVzY3JpYmVkIGluIEdyZWcgSGl0Y2hjb2NrcyB3aGl0ZXBhcGVyLiAgSW4KIAlvdGhlciB3b3JkcywgaXQgZW5hYmxlcyB1bnJlc3RyaWN0ZWQgZnVuY3Rpb25hbGl0eSBvZiBhbGwgVHJ1ZVR5cGUKIAlpbnN0cnVjdGlvbnMgaW4gQ2xlYXJUeXBlLgpAQCAtNDI5Miw3ICs0MjkyLDcgQEAKIAogCVRoaXMgZm9sbG93cyB0aGUgT3BlblR5cGUgMS43IHNwZWNpZmljYXRpb24uICBTZWUKIAotCSAgaHR0cDovL3R1Zy5vcmcvcGlwZXJtYWlsL3RleC1saXZlLzIwMTUtQXByaWwvMDM2NjM0Lmh0bWwKKwkgIGh0dHBzOi8vdHVnLm9yZy9waXBlcm1haWwvdGV4LWxpdmUvMjAxNS1BcHJpbC8wMzY2MzQuaHRtbAogCiAJZm9yIGEgZGlzY3Vzc2lvbi4KIApAQCAtNTY5NSw3ICs1Njk1LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAxNS0yMDE3IGJ5CitDb3B5cmlnaHQgMjAxNS0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cuMjcgYi9DaGFuZ2VMb2cuMjcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU4MmIyZgotLS0gL2Rldi9udWxsCisrKyBiL0NoYW5nZUxvZy4yNwpAQCAtMCwwICsxLDIxMDYgQEAKKzIwMTYtMTItMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogVmVyc2lvbiAyLjcuMSByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCVRhZyBzb3VyY2VzIHdpdGggYFZFUi0yLTctMScuCisKKwkqIGRvY3MvVkVSU0lPTi5UWFQ6IEFkZCBlbnRyeSBmb3IgdmVyc2lvbiAyLjcuMS4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNy8yLjcuMS8sIHMvMjcvMjcxLy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAxLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTk6MDoxMy4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX1BBVENIKTogU2V0IHRvIDEuCisKKzIwMTYtMTItMzAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtmdGZ1enplcl0gUmVwbGFjZSBgcmFuZCcgd2l0aCBhbiB4b3JzaGlmdCBhbGdvcml0aG0uCisKKwkqIHNyYy90b29scy9mdGZ1enplci9mdGZ1enplci5jYzogRG9uJ3QgaW5jbHVkZSBgc3RkbGliLmgnLgorCShSYW5kb20pOiBJbXBsZW1lbnQgYW5kIHVzZSBhIDMyYml0IGB4b3JzaGlmdCcgYWxnb3JpdGhtLgorCisyMDE2LTEyLTMwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbZnRmdXp6ZXJdIFJlc3RyaWN0IG51bWJlciBvZiB0ZXN0ZWQgYml0bWFwIHN0cmlrZXMuCisKKwlNYWxmb3JtZWQgZm9udHMgb2Z0ZW4gaGF2ZSBsYXJnZSB2YWx1ZXMgZm9yIHRoZSBudW1iZXIgb2YgYml0bWFwCisJc3RyaWtlcywgYW5kIEZyZWVUeXBlIGRvZXNuJ3QgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGFsbCBiaXRtYXAKKwlzdHJpa2VzIGluIGFkdmFuY2UuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zNTMKKworCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjOiBJbmNsdWRlIGBzdGRsaWIuaCcgZm9yIGByYW5kJy4KKwkoUmFuZG9tKTogU21hbGwgY2xhc3MgdG8gcHJvdmlkZSBuIHJhbmRvbWx5IHNlbGVjdGVkIG51bWJlcnMKKwkod2l0aG91dCByZXBldGl0aW9uKSBvdXQgb2YgdGhlIHZhbHVlIHNldCBbMSxOXS4KKwkoTExWTUZ1enplclRlc3RPbmVJbnB1dCk6IFVzZSBpdCB0byB0ZXN0IG9ubHkgdXAgdG8gMTAgYml0bWFwCisJc3RyaWtlcy4KKworMjAxNi0xMi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBWYXJpYXRpb24gZm9udCBBUEkgc3RhYmlsaXR5IGlzc3Vlcy4KKworCU1ha2Ugc29tZSBmdW5jdGlvbnMgd29yayBiZWZvcmUgYSBjYWxsIHRvIGBUVF9TZXRfTU1fQmxlbmQnLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9oYWR2YW5jZV9hZGp1c3QpOiBFeGl0IGltbWVkaWF0ZWx5IGlmCisJd2UgZG9uJ3QgYmxlbmQuCisJKFRUX0dldF9NTV9CbGVuZCwgVFRfR2V0X1Zhcl9EZXNpZ24pOiBSZXR1cm4gZGVmYXVsdCB2YWx1ZXMgaWYgd2UKKwlkb24ndCBibGVuZC4KKworMjAxNi0xMi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9HZXRfTU1fVmFyKTogQ2hlY2sgYXhpcyBkYXRhLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ4CisKKzIwMTYtMTItMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gVHJhY2luZyBmaXhlcy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfaGFkdmFuY2VfYWRqdXN0KTogRW1pdCBjb3JyZWN0CisJaW5mb3JtYXRpb24uCisJKFRUX1NldF9WYXJfRGVzaWduKTogRml4IHR5cG8uCisJKFRUX0dldF9WYXJfRGVzaWduKTogRml4IHR5cG9zLgorCisyMDE2LTEyLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqLyo6IFVzZSBgMC41ZicgZm9yIHRyYWNpbmcgMTYuMTYgbnVtYmVycy4KKworMjAxNi0xMi0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BjZl0gUHJvdGVjdCBhZ2FpbnN0IGd6aXAgYm9tYnMuCisKKwlGaXggc3VnZ2VzdGVkIGJ5IEtvc3R5YTsgcmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ1CisKKwkqIHNyYy9wY2YvcGNmcmVhZC5jIChwY2ZfcmVhZF9UT0MpOiBMaW1pdCBudW1iZXIgb2YgVE9DIGVudHJpZXMgdG8KKwkxMDI0LgorCisyMDE2LTEyLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNuYW1lc10gT25seSBkZWNsYXJlLCBub3QgZGVmaW5lLCBkYXRhIGluIGBwc3RhYmxlcy5oJyAoIzQ5OTQ5KS4KKworCVBkZml1bSBpbmNsdWRlcyBgcHN0YWJsZXMuaCcgYSBzZWNvbmQgdGltZTsgbW92aW5nIHRoZSBkZWZpbml0aW9uCisJZnJvbSBgcHN0YWJsZXMuaCcgdG8gYHBzbW9kdWxlLmMnIHNhdmVzIG1vcmUgdGhhbiA2MGtCeXRlIGRhdGEKKwlzZWdtZW50IHNwYWNlIGZvciB0aGlzIGNhc2UuCisKKwkqIHNyYy90b29scy9nbG5hbWVzLnB5IChTdHJpbmdUYWJsZTo6ZHVtcCwKKwlTdHJpbmdUYWJsZTo6ZHVtcF9zdWJsaXN0LCBkdW1wX2VuY29kaW5nLCBkdW1wX2FycmF5KTogRW1pdAorCWFkZGl0aW9uYWwgY29kZSB0byBvbmx5IGRlZmluZSB0YWJsZXMgaWYgYERFRklORV9QU19UQUJMRVMnIGlzIHNldC4KKworCSogc3JjL3BzbmFtZXMvcHN0YWJsZXMuaDogUmVnZW5lcmF0ZWQuCisJKiBzcmMvcHNuYW1lcy9wc21vZHVsZS5jIChERUZJTkVfUFNfVEFCTEVTKTogRGVmaW5lLgorCisyMDE2LTEyLTI4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBDYXRjaCBgYmxlbmQnIG9wIGluIG5vbi12YXJpYW50IGZvbnRzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzM0CisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRCTEVORD46IERvbid0CisJYWxsb3cgYGJsZW5kJyBvcCBmb3Igbm9uLXZhcmlhbnQgZm9udHMuCisKKzIwMTYtMTItMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEJldHRlciBjaGVjayBvZiBudW1iZXIgb2YgYmxlbmRzLgorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpIDxjZjJfY21kQkxFTkQ+LAorCXNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX2JsZW5kKTogQ29tcGFyZSBudW1iZXIgb2YgYmxlbmRzIHdpdGgKKwlzdGFjayBzaXplLgorCisyMDE2LTEyLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlEb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKwkqIGRvY3MvQ0hBTkdFUzogQWRkIG1pc3NpbmcgaW5mb3JtYXRpb24uCisKKwkqIGRvY3MvZm9ybWF0cy50eHQ6IFJld3JpdHRlbiBhbmQgdXBkYXRlZC4KKworMjAxNi0xMi0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlLCB0eXBlMV0gSW1wbGVtZW50IGBGVF9HZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcycuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9WYXJfRGVzaWduKTogSW1wbGVtZW50LgorCShUVF9TZXRfVmFyX0Rlc2lnbik6IEZpeCB0cmFjaW5nLgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKFQxX0dldF9WYXJfRGVzaWduKTogSW1wbGVtZW50LgorCisyMDE2LTEyLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfbG9hZF9oZG14KTogSWdub3JlIGB2ZXJzaW9uJy4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkg5by15L+K6IqdIDw0MTgwOTI2MjVAcXEuY29tPi4KKworMjAxNi0xMi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9sb2FkX3NiaXQpOiBBbGxvdyBtb3JlIHZlcnNpb24gdmFsdWVzLgorCisJU29tZSBmb250cyBzZWVtIHRvIGhhdmUgdGhlIGB2ZXJzaW9uJyBmaWVsZCBpbiB0aGUgd3JvbmcgYnl0ZSBvcmRlci4KKworCVByb2JsZW0gcmVwb3J0ZWQgYnkg5by15L+K6IqdIDw0MTgwOTI2MjVAcXEuY29tPi4KKworMjAxNi0xMi0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jICh0dF9mYWNlX2xvYWRfbG9jYSk6IFNhbml0aXplIHRhYmxlIGxlbmd0aC4KKworCVRoaXMgdHJpdmlhbCBmaXggYWxsb3dzIHVzIHRvIGFjY2VwdCBtb3JlIGZvbnRzLgorCisJUHJvYmxlbSByZXBvcnRlZCBieSDlvLXkv4roip0gPDQxODA5MjYyNUBxcS5jb20+LgorCisyMDE2LTEyLTI0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IEZpeCB0cmFjaW5nLgorCisyMDE2LTEyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIENNYWtlTGlzdHMudHh0OiBNYWtlIGl0IHdvcmsgd2l0aCBjbWFrZSAyLjguMTEuMiAoIzQ5OTA5KS4KKworMjAxNi0xMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJRW5zdXJlIHVzZWQgcHJlcHJvY2Vzc29yIHN5bWJvbHMgYXJlIGRlZmluZWQgKCM0OTc5MCkuCisKKwkqIGJ1aWxkcy91bml4L2Z0Y29uZmlnLmluLCBidWlsZHMvdm1zL2Z0Y29uZmlnLmgsCisJaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaDogQ2hlY2sgYF9fR05VQ19fJywgYF9fSUJNQ19fJywKKwlhbmQgYF9fU1VOUFJPX0MnIGNvcnJlY3RseS4KKworMjAxNi0xMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYmFzZS9mdHJmb3JrLmMgKEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzKTogQ2hlY2sgYGNvdW50Jy4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTMwOAorCisyMDE2LTEyLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBgdnNpbmRleCcgYW5kIGBibGVuZCcgdmFsdWVzLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1CisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZykgPGNmMl9jbWRWU0lOREVYLAorCWNmMl9jbWRCTEVORD46IEltcGxlbWVudCBpdC4KKworMjAxNi0xMi0yMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0ZnV6emVyXSBBbHdheXMgdXNlIEFkb2JlIENGRiBlbmdpbmUuCisKKwkqIHNyYy90b29scy9mdGZ1enplci9mdGZ1enplci5jYyAoRlRfR2xvYmFsOjpGVF9HbG9iYWwpOiBJbXBsZW1lbnQKKwlpdC4KKworMjAxNi0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IFRoaW5rby4KKworCUkgc2hvdWxkIHJlYWxseSBzdG9wIGNvZGluZyBsYXRlIGluIHRoZSBldmVuaW5nLi4uCisKKwlUaGFua3MgYWdhaW4gdG8gQmVuIGZvciBjaGVja2luZy4KKworMjAxNi0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFN1cHBvcnQgdmFyaWF0aW9uIGZvbnRzLgorCisJKFRoaXMgQ2hhbmdlTG9nIGVudHJ5IHdhcyBhZGRlZCBsYXRlciBvbi4pCisKKwkqIHNyYy9hdXRvZml0L2FmZ2xvYmFsLmMgKGFmX2ZhY2VfZ2xvYmFsc19mcmVlKTogUmVtb3ZlIHVzZWxlc3MKKwljb2RlLgorCisJKiBzcmMvYmFzZS9mdG1tLmMgKEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMsCisJKiBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcywgRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzLAorCUZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMpOiBGaW5hbGl6ZQorCWF1dG8taGludGVyIGRhdGEgdG8gZW5mb3JjZSByZWNvbXB1dGF0aW9uLiAgTm90ZSB0aGF0IHRoaXMgaXMgYQorCWJydXRlLWZvcmNlIG1ldGhvZCB3aGljaCBzaG91bGQgYmUgaW1wcm92ZWQuCisKKzIwMTYtMTItMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMpOiBUaGlua28uCisKKwlEb24ndCBhcHBseSBkZWx0YXMgdHdpY2UgZm9yIG5vbi1waGFudG9tIHBvaW50cy4KKworCVNwb3R0ZWQgYnkgQmVuIFdhZ25lci4KKworMjAxNi0xMi0yMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZiwgdHJ1ZXR5cGVdIEFub3RoZXIgdHJ5IGZvciAjNDk4MjkuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogRG9uJ3QgaW5jbHVkZQorCWBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19IJy4KKwkoY2ZmX2dldF9hZHZhbmNlcyk6IFVzZSBgdHRmYWNlLT52YXJpYXRpb25fc3VwcG9ydCcuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9nZXRfYWR2YW5jZXMpOiBVc2UKKwlgdHRmYWNlLT52YXJpYXRpb25fc3VwcG9ydCcuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLAorCWxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBVc2UgYHR0ZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQnLgorCisyMDE2LTEyLTIxICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGUsIHNmbnRdIEludHJvZHVjZSBmb250IHZhcmlhdGlvbiBmbGFncyB0byBgVFRfRmFjZScuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GQUNFX0ZMQUdfVkFSX1hYWCk6CisJTmV3IG1hY3JvcyBkZXNjcmliaW5nIGF2YWlsYWJsZSBmdW5jdGlvbmFsaXR5IG9mIHZhcmlvdXMgT3BlblR5cGUKKwl0YWJsZXMgcmVsYXRlZCB0byBmb250IHZhcmlhdGlvbi4KKwkoVFRfRmFjZSk6IE5ldyBmaWVsZHMgYHZhcmlhdGlvbl9zdXBwb3J0JyBhbmQgYG12YXJfc3VwcG9ydCcsCisJcmVwbGFjaW5nIGFuZCBleHRlbmRpbmcgYHVzZV9mdmFyJy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfaW5pdF9mYWNlLCBzZm50X2xvYWRfZmFjZSk6IFVzZQorCWB2YXJpYXRpb25fc3VwcG9ydCcuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9sb2FkX2h2YXIpOiBTZXQgYHZhcmlhdGlvbl9zdXBwb3J0JworCWZpZWxkLgorCShUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IFVwZGF0ZWQuCisKKzIwMTYtMTItMjEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBJbXByb3ZlIHNhbml0eSBjaGVjayBmb3IgTWFjIHJlc291cmNlcyAoIzQ5ODg4KS4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKE1hY19SZWFkX3NmbnRfUmVzb3VyY2UpOiBBYm9ydCBpZiBgcmxlbicgaXMgbm90CisJcG9zaXRpdmUuCisKKzIwMTYtMTItMjAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBNb3JlIHNhbml0eSBjaGVja3MgZm9yIE1hYyByZXNvdXJjZXMuCisKKwlXZSB1c2UKKworCSAgaHR0cHM6Ly9naXRodWIuY29tL2tyZWF0aXZla29ycC9rc2ZsL3dpa2kvTWFjaW50b3NoLVJlc291cmNlLUZpbGUtRm9ybWF0CisKKwlhbmQKKworCSAgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xlZ2FjeS9saWJyYXJ5L2RvY3VtZW50YXRpb24vbWFjL3BkZi9Nb3JlTWFjaW50b3NoVG9vbGJveC5wZGYjcGFnZT0xNTEKKworCWFzIHJlZmVyZW5jZXMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oIChGVF9SRm9ya19SZWYpOiBVc2UgRlRfU2hvcnQKKwlmb3IgYHJlc19pZCcuCisKKwkqIHNyYy9iYXNlL2Z0cmZvcmsuYyAoRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbyk6IEV4dHJhY3QgbWFwIGxlbmd0aAorCWFuZCB1c2UgaXQgdG8gaW1wcm92ZSBzYW5pdHkgY2hlY2tzLgorCUZvbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiBtb3JlIGNsb3NlbHk7aW4gcGFydGljdWxhciwgYWxsIGRhdGEgdHlwZXMKKwlhcmUgc2lnbmVkLCBub3QgdW5zaWduZWQuCisJKEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzKTogRm9sbG93IHRoZSBzcGVjaWZpY2F0aW9uIG1vcmUgY2xvc2VseTsKKwlpbiBwYXJ0aWN1bGFyLCBhbGwgZGF0YSB0eXBlcyBhcmUgc2lnbmVkLCBub3QgdW5zaWduZWQuCisJQWRkIHNvbWUgc2FuaXR5IGNoZWNrcy4KKworMjAxNi0xMi0yMCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbXByb3ZlIGxvZ2ljIGZvciBnZXR0aW5nIGZhc3QgYWR2YW5jZSB3aWR0aHMuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9hZHZhbmNlcyksIHNyYy90cnVldHlwZS90dGRyaXZlci5jCisJKHR0X2dldF9hZHZhbmNlcyk6IFVzZSBgaXNfZGVmYXVsdF9pbnN0YW5jZScgZm9yIHRlc3Q7IHRoaXMgZ2V0cworCXJlY29tcHV0ZWQgYWZ0ZXIgY2hhbmdpbmcgYmxlbmQgY29vcmRpbmF0ZXMuCisKKzIwMTYtMTItMjAgIEJlbiBXYWduZXIgIDxidW5nZW1hbkBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBsaW5lYXIgbWV0cmljcyBvZiBHWCB2YXJpYXRpb24gZm9udHMgKCM0OTgyOSkuCisKKwlXaGVuIGFza2luZyBmb3IgYW4gdW5oaW50ZWQgbm9uLWRlZmF1bHQgdmFyaWF0aW9ucywKKwlgbGluZWFyVmVydEFkdmFuY2UnIGlzIGN1cnJlbnRseSB0aGUgdmFsdWUgZnJvbSB0aGUgYGhtdHgnIHRhYmxlCisJaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHZhbHVlIGFmdGVyIGFwcGx5aW5nIHRoZSB2YXJpYXRpb24uICBgSFZBUicKKwlzdXBwb3J0IGZpeGVzIHRoaXMsIGJ1dCBmb250cyB3aWxsIGV4aXN0IHdpdGhvdXQgdGhhdCB0YWJsZSBhbmQgd2lsbAorCW5lZWQgc2FuZSBmYWxsYmFjay4KKworCVByb2JsZW0gYWxzbyByZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avc2tpYS9pc3N1ZXMvZGV0YWlsP2lkPTU5MTcKKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAoVFRfUHJvY2Vzc19TaW1wbGVfR2x5cGgsCisJbG9hZF90cnVldHlwZV9nbHlwaCk6IEltcGxlbWVudCBsaW5lYXIgYWR2YW5jZSBhZGp1c3RtZW50cyBpZiBgSFZBUicKKwlvciBgVlZBUicgdGFibGVzIGFyZSBtaXNzaW5nLgorCisyMDE2LTEyLTIwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmLCB0cnVldHlwZV0gRmFzdCBhZHZhbmNlIHdpZHRoIHJldHJpZXZhbCBmb3IgZm9udHMgd2l0aCBIVkFSLgorCisJRXZlcnl0aGluZyBpcyBndWFyZGVkIHdpdGggVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVC4KKworCSogc3JjL2Jhc2UvZnRhZHZhbmMuYyAoTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0spOiBEb24ndCBoYW5kbGUgTU0uCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYzogSW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ILgorCShjZmZfZ2V0X2FkdmFuY2VzKTogVGVzdCBmb3IgSFZBUiBhbmQgVlZBUi4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X2dldF9hZHZhbmNlcyk6IFRlc3QgZm9yIEhWQVIgYW5kIFZWQVIuCisKKzIwMTYtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBGaXggaW52YWxpZCBtYWMgZm9udCByZWN1cnNpb24uCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0zMDQKKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX09wZW5fRmFjZSk6IENvZGUgbW92ZWQgdG8uLi4KKwkoZnRfb3Blbl9mYWNlX2ludGVybmFsKTogLi4uIHRoaXMgZnVuY3Rpb24uCisJQWRkIGEgcGFyYW1ldGVyIHRvIGNvbnRyb2wgd2hldGhlciB3ZSB0cnkgc3BlY2lhbCBNYWMgZm9udCBoYW5kbGluZworCWluIGNhc2Ugb2YgZmFpbHVyZS4KKwkoRlRfT3Blbl9GYWNlLCBGVF9OZXdfRmFjZSwgRlRfTmV3X01lbW9yeV9GYWNlLAorCW9wZW5fZmFjZV9mcm9tX2J1ZmZlcik6IFVzZSBgZnRfb3Blbl9mYWNlX2ludGVybmFsJy4KKworMjAxNi0xMi0xOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfaW5pdCk6IE1ha2UgbmFtZWQgaW5zdGFuY2VzIHdvcmsuCisKKzIwMTYtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZSwgY2ZmXSBFeHRlbmQgYGdldF92YXJfYmxlbmQnIGZ1bmN0aW9uIG9mIE1NIHNlcnZpY2UuCisKKwlJbiBwYXJ0aWN1bGFyLCB3ZSBuZWVkIGFjY2VzcyB0byBuYW1lZCBpbnN0YW5jZSBkYXRhLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaCAoRlRfR2V0X1Zhcl9CbGVuZF9GdW5jKToKKwlBZGQgYXJndW1lbnQgZm9yIGBGVF9NTV9WYXInLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2dldF92YXJfYmxlbmQpOiBVcGRhdGVkLgorCSogc3JjL2NmZi9jZmZsb2FkLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2YyZnQuYyAoY2YyX2dldE5vcm1hbGl6ZWRWZWN0b3IpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9nZXRfdmFyX2JsZW5kKTogVXBkYXRlZC4KKwlBY2NlcHQgdmFsdWUgYE5VTEwnIGZvciBhcmd1bWVudHMuCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBVcGRhdGVkLgorCisyMDE2LTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gSGFuZGxlIGBmdmFyJyB3aXRoIHplcm8gYXhlcyBhcyBhIG5vbi1NTSBmb250LgorCisJVGhpcyBpcyBiZXR0ZXIgYmVoYXZpb3VyIHRoYW4gZXhpdGluZyB3aXRoIGFuIGVycm9yLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZSk6IEFkZCBgdXNlX2Z2YXInCisJZmllbGQuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IENvbXB1dGUgYHVzZV9mdmFyJywgYWxzbworCXVwZGF0aW5nIHRoZSB2YWxpZGF0aW9uIGNvZGUuCisJVXNlIGB1c2VfZnZhcicgdG8gY29tcHV0ZSBGVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IFJlbW92ZSBgZnZhcicgdmFsaWRhdGlvbgorCWNvZGUuCisKKzIwMTYtMTItMTggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1pbm9yIEdYIGNvZGUgc2h1ZmZsaW5nLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZSk6IE1vdmUKKwlgaXNfZGVmYXVsdF9pbnN0YW5jZScgaW50byBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisJYmxvY2suCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IFVwZGF0ZWQuCisJKiBzcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIChJU19ERUZBVUxUX0lOU1RBTkNFKTogTmV3IG1hY3JvLgorCShUVF9Mb2FkX0dseXBoKTogVXNlIGl0LgorCisyMDE2LTEyLTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBCZXR0ZXIgaGFuZGxpbmcgb2Ygbm9uLUNGRiBmb250IGZvcm1hdHMuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfZm9udF9sb2FkKTogUHVyZSBDRkZzIGRvbid0IGhhdmUgYQorCXNpZ25hdHVyZSwgc28gcmV0dXJuIGBGVF9FcnJfVW5rbm93bl9GaWxlX0Zvcm1hdCcgbW9yZSBvZnRlbi4KKworMjAxNi0xMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2J1aWxkX2JsZW5kX3ZlY3Rvcik6IFJlbW92ZSByZWR1bmRhbnQgY29kZS4KKworMjAxNi0xMi0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMgKHR0X2ZhY2VfaW5pdCk6IFNpbXBsaWZ5IGNvbmRpdGlvbmFsIGNvZGUuCisKKzIwMTYtMTItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50LCB0cnVldHlwZV0gVmFyaW91cyBzYW5pdGl6aW5nIGZpeGVzLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBJZiB0aGUgYXhpcyBjb3VudCBpbiBgZnZhcicgaXMKKwl6ZXJvLCBzZXQgYG51bV9pbnN0YW5jZXMnIHRvIHplcm8uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX0dldF9NTV9WYXIpOiBIYW5kbGUgYGZ2YXInIHRhYmxlIHdpdGgKKwl6ZXJvIGF4ZXMgYXMgaW52YWxpZC4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5jICh0dF9mYWNlX2luaXQpOiBJbXByb3ZlIGxvZ2ljIG9mIGxvYWRpbmcKKwlgbG9jYScsIGBjdnQnLCBgZnBnbScsIGFuZCBgcHJlcCcgdGFibGUuCisKKzIwMTYtMTItMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUltcHJvdmUgdHJhY2luZyBvZiBgRlRfT3Blbl9GYWNlJy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKEZUX09wZW5fRmFjZSk6IFJldHVybiBpbmZvIG9uIG51bWJlciBvZgorCWF2YWlsYWJsZSBmYWNlcyBhbmQgbnVtYmVyZWQgaW5zdGFuY2VzLCBvciB0aGUgaW5kaWNlcyBvZiB0aGUKKwlyZXF1ZXN0ZWQgZmFjZSBhbmQgbnVtYmVyZWQgaW5zdGFuY2UuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy4gKHNmbnRfb3Blbl9mb250KTogVHJhY2UgbnVtYmVyIG9mIHN1YmZvbnRzLgorCisyMDE2LTEyLTE3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfbG9hZF9wcml2YXRlX2RpY3QpOiBBbHdheXMgaW5pdCBgYmxlbmQnLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9Mjk1CisKKzIwMTYtMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IGBjdmFyJyBzYW5pdHkgdGVzdC4KKworCVJlcG9ydGVkIGJ5IERhdmUgQXJub2xkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9mYWNlX3ZhcnlfY3Z0KTogVXNlIHR1cGxlIGNvdW50IG1hc2suCisKKzIwMTYtMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmYsIHRydWV0eXBlXSBSZW1vdmUgY29tcGlsZXIgd2FybmluZ3M7IGZpeCBgbWFrZSBtdWx0aScuCisKKwkqIHNyYy9jZmYvY2YyZm9udC5oOiBJbmNsdWRlIGBjZmZsb2FkLmgnLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYzogSW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0ggYW5kCisJRlRfU0VSVklDRV9NVUxUSVBMRV9NQVNURVJTX0guCisJKGNmZl92c3RvcmVfbG9hZCk6IEVsaW1pbmF0ZSBgdnNTaXplJy4KKwkoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KTogVGFnIGFzIGBGVF9MT0NBTF9ERUYnLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuaDogSW5jbHVkZSBgY2Zmb2Jqcy5oJy4KKwlQcm92aWRlIGRlY2xhcmF0aW9uIGZvciBgY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0Jy4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoZnRfdmFyX2xvYWRfaHZhcik6IEVsaW1pbmF0ZQorCWBtaW5vclZlcnNpb24nIGFuZCBgbWFwX29mZnNldCcuCisKKzIwMTYtMTItMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBoZWFwIGJ1ZmZlciBvdmVyZmxvdyAoIzQ5ODU4KS4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VyX3J1bik6IEFkZCBvbmUgbW9yZSBzdGFjayBzaXplCisJY2hlY2suCisKKzIwMTYtMTItMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBjbGFuZyB3YXJuaW5ncy4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKGNmZl9ibGVuZF9kb0JsZW5kKTogQWRkIGNhc3QuCisJKGNmZl9zdWJmb250X2xvYWQpOiBTZXQgYGVycm9yJyBjb3JyZWN0bHkuCisKKwkqIHNyYy9zZm50L3R0bXR4LmMgKHR0X2ZhY2VfZ2V0X21ldHJpY3MpOiBUeXBvLgorCisyMDE2LTEyLTE1ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBJbXBsZW1lbnQgQ0ZGMiBzdXBwb3J0ICgyLzIpLgorCisJVGhlIGZvbnQgdmFyaWF0aW9uIGNvZGUuICBBbGwgcGFydHMgZGVwZW5kZW50IG9uIHRoZSBHWCBjb2RlIGluIHRoZQorCWB0cnVldHlwZScgbW9kdWxlIGFyZSBndWFyZGVkIHdpdGggVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVC4KKwlJbiBvdGhlciB3b3JkcywgeW91IGNhbiBzdGlsbCBjb21waWxlIHRoZSBgY2ZmJyBtb2R1bGUgd2l0aG91dAorCWRlZmluaW5nIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKHdoaWNoIGJyaW5ncyB5b3UgQ0ZGMgorCXN1cHBvcnQgd2l0aG91dCBmb250IHZhcmlhdGlvbikuCisKKwkqIHNyYy9jZmYvY2YyZm9udC5jIChjZjJfZm9udF9zZXR1cCk6IEFkZCBzdXBwb3J0IGZvciBmb250CisJdmFyaWF0aW9uLgorCSogc3JjL2NmZi9jZjJmb250LmggKENGMl9Gb250KTogQWRkIGZpZWxkcyBmb3IgdmFyaWF0aW9uIGRhdGEuCisKKwkqIHNyYy9jZmYvY2YyZnQuYyAoY2YyX2ZyZWVfaW5zdGFuY2UpOiBGcmVlIGJsZW5kIGRhdGEuCisJKGNmMl9nZXRWU3RvcmUsIGNmMl9nZXROb3JtYWxpemVkVmVjdG9yKTogTmV3IGZ1bmN0aW9ucy4KKwkqIHNyYy9jZmYvY2YyZnQuaDogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZjJpbnRycC5jOiBJbmNsdWRlIGBjZmZsb2FkLmgnLgorCShjZjJfY21kUkVTRVJWRURfMTUsIGNmMl9jbWRSRVNFUlZFRF8xNik6IFJlcGxhY2Ugd2l0aC4uLgorCShjZjJfY21kVlNJTkRFWCwgY2YyX2NtZEJMRU5EKTogLi4uIHRoaXMgbmV3IGVudW0gdmFsdWVzLgorCShjZjJfZG9CbGVuZCk6IE5ldyBmdW5jdGlvbi4KKwkoY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IEhhbmRsZSBgdnNpbmRleCcgYW5kIGBibGVuZCcgb3Bjb2Rlcy4KKworCSogc3JjL2NmZi9jZmZsb2FkLmMgKEZUX2Zkb3QxNFRvRml4ZWQpOiBOZXcgbWFjcm8uCisJKGNmZl92c3RvcmVfZG9uZSwgY2ZmX3ZzdG9yZV9sb2FkKTogTmV3IGZ1bmN0aW9ucy4KKwkoY2ZmX2JsZW5kX2NsZWFyLCBjZmZfYmxlbmRfZG9CbGVuZCwgY2ZmX2JsZW5kX2J1aWxkX3ZlY3RvciwKKwljZmZfYmxlbmRfY2hlY2tfdmVjdG9yKTogTmV3IGZ1bmN0aW9ucy4KKwkoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KTogQWRkIGFyZ3VtZW50cyBmb3IgYmxlbmQgdmVjdG9yLgorCUhhbmRsZSBibGVuZCBkYXRhLgorCShjZmZfc3ViZm9udF9sb2FkLCBjZmZfc3ViZm9udF9kb25lKTogVXBkYXRlZC4KKwkoY2ZmX2ZvbnRfbG9hZCk6IEhhbmRsZSBDRkYyIHZhcmlhdGlvbiBzdG9yZSBkYXRhLgorCShjZmZfZm9udF9kb25lKTogVXBkYXRlZC4KKwkqIHNyYy9jZmYvY2ZmbG9hZC5oOiBJbmNsdWRlIGBjZmZwYXJzZS5oJy4KKwlVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZm9ianMuYyAoY2ZmX2ZhY2VfZG9uZSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYzogSW5jbHVkZSBgY2ZmbG9hZC5oJy4KKwkoY2ZmX3BhcnNlX251bSk6IEhhbmRsZSBpbnRlcm5hbCB2YWx1ZSAyNTUuCisJKGNmZl9wYXJzZV92c2luZGV4LCBjZmZfcGFyc2VfYmxlbmQpOiBOZXcgZnVuY3Rpb25zLgorCShDRkZfRklFTERfQkxFTkQpOiBOZXcgbWFjcm8uCisJKGNmZl9wYXJzZXJfcnVuKTogVXBkYXRlZC4KKwkqIHNyYy9jZmYvY2ZmcGFyc2UuaCAoY2ZmX2tpbmRfYmxlbmQpOiBOZXcgZW51bSB2YWx1ZS4KKworCSogc3JjL2NmZi9jZmZ0b2tlbi5oOiBIYW5kbGUgYHZzdG9yZScsIGB2c2luZGV4JywgYW5kIGBibGVuZCcKKwlkaWN0aW9uYXJ5IHZhbHVlcy4KKworCSogc3JjL2NmZi9jZmZ0eXBlcy5oIChDRkZfVmFyRGF0YSwgQ0ZGX0F4aXNDb29yZHMsIENGRl9WYXJSZWdpb24sCisJQ0ZGX1ZTdG9yZSwgQ0ZGX0JsZW5kKTogTmV3IHN0cnVjdHVyZXMuCisJKENGRl9Gb250UmVjRGljdCk6IEFkZCBgdnN0b3JlX29mZnNldCcgZmllbGQuCisJKENGRl9Qcml2YXRlKTogQWRkIGB2c2luZGV4JyBmaWVsZC4KKwkoQ0ZGX1N1YkZvbnQpOiBBZGQgZmllbGRzIGZvciBibGVuZCBkYXRhLgorCShDRkZfRm9udCk6IEFkZCBgdnN0b3JlJyBmaWVsZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX1Zhcik6IGBDRkYyJyBpcyBlcXVhbCB0byBgZ3ZhcicsCisJc2luY2UgZ2x5cGggdmFyaWF0aW9uIGRhdGEgaXMgZGlyZWN0bHkgZW1iZWRkZWQuCisJKFRUX1NldF9NTV9CbGVuZCk6IERvbid0IGxvYWQgYGd2YXInIHRhYmxlIGZvciBDRkYyIGZvbnRzLgorCisyMDE2LTEyLTE1ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBJbXBsZW1lbnQgQ0ZGMiBzdXBwb3J0ICgxLzIpLgorCisJVGhpcyBjb21taXQgZG9lcyBub3QgY29udGFpbiB0aGUgYmxlbmQgY29kZSBmb3IgZm9udCB2YXJpYXRpb24KKwlzdXBwb3J0LCB3aGljaCBmb2xsb3dzIGluIGFub3RoZXIgY29tbWl0LgorCisJWW91IHNob3VsZCBpZ25vcmUgd2hpdGVzcGFjZSB3aGlsZSBpbnNwZWN0aW5nIHRoaXMgY29tbWl0LgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZSk6IEFkZCBgaXNDRkYyJworCW1lbWJlci4KKworCSogc3JjL2NmZi9jZjJmb250LmggKENGMl9Gb250KTogQWRkIGBpc0NGRjInIG1lbWJlci4KKworCSogc3JjL2NmZi9jZjJmdC5jIChjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyk6IEhhbmRsZSBgaXNDRkYyJworCWZsYWcuCisJKGNmMl9nZXRNYXhzdGFjayk6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9jZmYvY2YyZnQuaDogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZjJpbnRycC5jIChjZjJfZXNjUkVTRVJWRURfMzgpOiBOZXcgZW51bS4KKwkoY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IEhhbmRsZSBDRkYyIGRpZmZlcmVuY2VzLgorCUFkZCB0cmFjaW5nIG1lc3NhZ2UgZm9yIGVycm9ycy4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X2dseXBoX25hbWUsIGNmZl9nZXRfbmFtZV9pbmRleCk6CisJVXBkYXRlIGZvciBDRkYyLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoRlRfRklYRURfT05FKTogTmV3IG1hY3JvLgorCShjZmZfaW5kZXhfaW5pdCwgY2ZmX2luZGV4X2xvYWRfb2Zmc2V0cywgY2ZmX2luZGV4X2FjY2Vzc19lbGVtZW50LAorCWNmZl9pbmRleF9nZXRfbmFtZSwgY2ZmX2Z0X3NlbGVjdF9nZXQsIGNmZl9sb2FkX3ByaXZhdGVfZGljdCwKKwljZmZfc3ViZm9udF9sb2FkLCBjZmZfZm9udF9sb2FkKTogSGFuZGxlIENGRjIuCisJKiBzcmMvY2ZmL2NmZmxvYWQuaDogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZmZvYmpzLmMgKGNmZl9mYWNlX2luaXQpOiBIYW5kbGUgQ0ZGMi4KKworCSogc3JjL2NmZi9jZmZwYXJzZS5jIChjZmZfcGFyc2VfbWF4c3RhY2spOiBOZXcgZnVuY3Rpb24uCisJKENGRkNPREVfVE9QRElDVCwgQ0ZGQ09ERV9QUklWQVRFKTogUmVtb3ZlZAorCSogc3JjL2NmZi9jZmZwYXJzZS5oIChDRkYyX01BWF9TVEFDSywgQ0ZGMl9ERUZBVUxUX1NUQUNLKTogTmV3CisJbWFjcm9zLgorCShDRkYyX0NPREVfVE9QRElDVCwgQ0ZGMl9DT0RFX0ZPTlRESUNULCBDRkYyX0NPREVfUFJJVkFURSk6IE5ldworCW1hY3Jvcy4KKworCSogc3JjL2NmZi9jZmZ0b2tlbi5oOiBBZGQgZmllbGRzIGZvciBDRkYyIGRpY3Rpb25hcmllcyAoYnV0IG5vIGJsZW5kCisJc3R1ZmYpLgorCisJKiBzcmMvY2ZmL2NmZnR5cGVzLmggKENGRl9JbmRleCk6IEFkZCBgaGRyX3NpemUnIGZpZWxkLgorCShDRkZfRm9udFJlY0RpY3QpOiBBZGQgYG1heHN0YWNrJyBmaWVsZC4KKwkoQ0ZGX1ByaXZhdGUpOiBBZGQgYHN1YmZvbnQnIGZpZWxkLgorCShDRkZfRm9udCk6IEFkZCBgdG9wX2RpY3RfbGVuZ3RoJyBhbmQgYGNmZjInIGZpZWxkcy4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogSGFuZGxlIGBDRkYyJyB0YWJsZS4KKworMjAxNi0xMi0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCSAgICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCisJW3RydWV0eXBlXSBQcm92aWRlIEhWQVIgYWR2YW5jZSB3aWR0aCB2YXJpYXRpb24gYXMgYSBzZXJ2aWNlLgorCisJRXZlcnl0aGluZyBpcyBndWFyZGVkIHdpdGggVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVC4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NlcnZpY2VfbWV0cmljc192YXJpYXRpb25zKTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXMpOiBQcmV2ZW50CisJZG91YmxlIGFkanVzdG1lbnQgb2YgYWR2YW5jZSB3aWR0aC4KKworCSogc3JjL3NmbnQvdHRtdHguYzogSW5jbHVkZSBGVF9TRVJWSUNFX01FVFJJQ1NfVkFSSUFUSU9OU19ILgorCSh0dF9mYWNlX2dldF9tZXRyaWNzKTogQXBwbHkgbWV0cmljcyB2YXJpYXRpb25zLgorCisyMDE2LTEyLTE1ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFByb3ZpZGUgZnVuY3Rpb24gdG8gYXBwbHkgYEhWQVInIGFkdmFuY2Ugd2lkdGggdmFyaWF0aW9uLgorCisJRXZlcnl0aGluZyBpcyBndWFyZGVkIHdpdGggVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAodHRfaGFkdmFuY2VfYWRqdXN0KTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaDogVXBkYXRlZC4KKworMjAxNi0xMi0xNSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKwkgICAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBBZGQgYEhWQVInIHRhYmxlIHBhcnNpbmcuCisKKwlOb3RlIHRoYXQgdGhpcyBpcyBub3QgY29tcGxldGUgeWV0OyBpdCBvbmx5IGhhbmRsZXMgYWR2YW5jZSB3aWR0aAorCXZhcmlhdGlvbi4KKworCUFjdGl2YXRpb24gb2YgdGhlIGNvZGUgZm9sbG93cyBpbiBhbm90aGVyIGNvbW1pdC4KKworCUV2ZXJ5dGhpbmcgaXMgZ3VhcmRlZCB3aXRoIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIChGVF9WYXJfTmFtZWRfU3R5bGUpOiBBZGQgYHBzaWQnIG1lbWJlci4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCAoR1hfSFZhckRhdGEsIEdYX0F4aXNDb29yZHMsIEdYX0hWYXJSZWdpb24sCisJR1hfSFZTdG9yZSwgR1hfV2lkdGhNYXApOiBOZXcgYXV4aWxpYXJ5IHN0cnVjdHVyZXMgZm9yLi4uCisJKEdYX0hWYXJUYWJsZSk6IC4uLiBIVkFSIG1haW4gc3RydWN0dXJlLgorCShHWF9CbGVuZFJlYyk6IEFkZCBkYXRhIGZvciBIVkFSIGxvYWRpbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKEZUX0ZJWEVEX09ORSwgRlRfZmRvdDE0VG9GaXhlZCwKKwlGVF9pbnRUb0ZpeGVkLCBGVF9maXhlZFRvSW50KTogTmV3IG1hY3Jvcy4KKwkoZnRfdmFyX2xvYWRfaHZhcik6IE5ldyBmdW5jdGlvbi4KKwkoVFRfR2V0X01NX1Zhcik6IFVwZGF0ZWQuCisJKHR0X2RvbmVfYmxlbmQpOiBEZWFsbG9jYXRlIEhWQVIgZGF0YS4KKworMjAxNi0xMi0xNSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCVtjZmZdIEV4dGVuZCBudW1iZXIgcGFyc2luZy4KKworCVRoZSBmb3J0aGNvbWluZyBDRkYyIHN1cHBvcnQgbmVlZHMgYSBkeW5hbWljIHBhcnNpbmcgbGltaXQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlX251bSwgZG9fZml4ZWQsIGNmZl9wYXJzZV9maXhlZCwKKwljZmZfcGFyc2VfZml4ZWRfc2NhbGVkLCBjZmZfcGFyc2VfZml4ZWRfZHluYW1pYyk6IEFkZCBhcmd1bWVudCBmb3IKKwlwYXJzZXIuCisJKGNmZl9wYXJzZV9mb250X21hdHJpeCwgY2ZmX3BhcnNlX2ZvbnRfYmJveCwgY2ZmX3BhcnNlX3ByaXZhdGVfZGljdCwKKwljZmZfcGFyc2VfbXVsdGlwbGVfbWFzdGVyLCBjZmZfcGFyc2VfY2lkX3JvcywgY2ZmX3BhcnNlcl9ydW4pOiBVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZnBhcnNlLmggKGNmZl9wYXJzZV9udW0pOiBFeHBvcnQgbG9jYWxseS4KKworMjAxNi0xMi0xNSAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCVtjZmZdIEltcGxlbWVudCBkeW5hbWljIHN0YWNrIHNpemUgZm9yIEFkb2JlIGVuZ2luZS4KKworCVRoaXMgYWxzbyBhZGRzIGBjZjJfc3RhY2tfc2V0UmVhbCcgYW5kIGBjZjJfc3RhY2tfcG9wJywgbmVlZGVkIGZvcgorCXRoZSBmb3J0aGNvbWluZyBDRkYyIHN1cHBvcnQuCisKKwkqIHNyYy9jZmYvY2Yyc3RhY2suYyAoY2YyX3N0YWNrX2luaXQpOiBBZGQgYXJndW1lbnQgZm9yIHN0YWNrIHNpemUuCisJKGNmMl9zdGFja19mcmVlKTogRGVhbGxvY2F0ZSBzdGFjay4KKwkoY2YyX3N0YWNrX2NvdW50LCBjZjJfc3RhY2tfcHVzaEludCwgY2YyX3N0YWNrX3B1c2hGaXhlZCwKKwljZjJfc3RhY2tfcG9wSW50LCBjZjJfc3RhY2tfcG9wRml4ZWQsIGNmMl9zdGFja19nZXRSZWFsLAorCWNmMl9zdGFja19jbGVhcik6IFVwZGF0ZWQuCisJKGNmMl9zdGFja19zZXRSZWFsLCBjZjJfc3RhY2tfcG9wKTogTmV3IGZ1bmN0aW9ucy4KKworCSogc3JjL2NmZi9jZjJzdGFjay5oIChDRjJfU3RhY2spOiBBZGQgYHN0YWNrU2l6ZScgbWVtYmVyLgorCVVwZGF0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisKKwkqIHNyYy9jZmYvY2YyaW50cnAuYyAoY2YyX2ludGVycFQyQ2hhclN0cmluZyk6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuYyAoY2ZmX3BhcnNlcl9pbml0KTogQWRkIHBhcmFtZXRlciBmb3Igc3RhY2sKKwlzaXplOyByZXR1cm4gZXJyb3IgY29kZS4KKwkoY2ZmX3BhcnNlcl9kb25lKTogTmV3IGZ1bmN0aW9uLgorCShjZmZfcGFyc2VyX3J1bik6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmcGFyc2UuaCAoQ0ZGX1BhcnNlcik6IEFkZCBgc3RhY2tTaXplJyBtZW1iZXIgYW5kIG1ha2UKKwlgc3RhY2snIGEgcG9pbnRlci4KKwlVcGRhdGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0LCBjZmZfc3ViZm9udF9sb2FkKToKKwlVcGRhdGVkLgorCisyMDE2LTEyLTE1ICBEYXZlIEFybm9sZCAgPGRhcm5vbGRAYWRvYmUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBDb2RlIHNodWZmbGluZy4KKworCSogc3JjL2NmZi9jZmZ0eXBlcy5oIChDRkZfRm9udCk6IEFkZCBgbGlicmFyeScgYW5kIGBiYXNlX29mZnNldCcKKwlmaWVsZHMuCisKKwkqIHNyYy9jZmYvY2ZmbG9hZC5jIChjZmZfc3ViZm9udF9sb2FkKTogQ2hhbmdlIGxhc3QgYXJndW1lbnQgdG8KKwlgQ0ZGX0ZvbnQnCisJU3BsaXQgb2ZmIHBhcnNpbmcgb2YgcHJpdmF0ZSBkaWN0aW9uYXJ5IGludG8uLi4KKwkoY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KTogLi4udGhpcyBuZXcgZnVuY3Rpb24uCisJKGNmZl9mb250X2xvYWQpOiBVcGRhdGVkLgorCisyMDE2LTEyLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudCwgdHJ1ZXR5cGVdIEFkZCBmcmFtZXdvcmsgZm9yIE1ldHJpY3MgVmFyaWF0aW9ucyBzZXJ2aWNlLgorCisJTm8gZWZmZWN0IHlldDsgc2VydmljZSBmdW5jdGlvbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCBsYXRlciBvbi4KKworCUV2ZXJ5dGhpbmcgaXMgZ3VhcmRlZCB3aXRoIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaDogTmV3IGZpbGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKKwkoRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSCk6IE5ldyBtYWNyby4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2UpOiBOZXcgZmllbGQgYHZhcicuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jOiBJbmNsdWRlIEZUX1NFUlZJQ0VfTUVUUklDU19WQVJJQVRJT05TX0guCisJKHNmbnRfaW5pdF9mYWNlKTogSW5pdGlhbGl6ZSBgZmFjZS0+dmFyJy4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSC4KKwkodHRfc2VydmljZV9tZXRyaWNzX3ZhcmlhdGlvbnMpOiBOZXcgc2VydmljZS4KKwkodHRfc2VydmljZXMpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRwaWMuaDogVXBkYXRlZC4KKworMjAxNi0xMi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2NmZl0gQWRkIE11bHRpcGxlIE1hc3RlcnMgc2VydmljZS4KKworCVRoZSBjb2RlIHNpbXBseSB1c2VzIHRoZSBNTSBmdW5jdGlvbnMgZnJvbSB0aGUgYHRydWV0eXBlJyBtb2R1bGUuCisKKwlFdmVyeXRoaW5nIGlzIGd1YXJkZWQgd2l0aCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JULgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZSk6IE5ldyBmaWVsZCBgbW0nLgorCisJKiBzcmMvY2ZmL2NmZmRyaXZyLmM6IEluY2x1ZGUgRlRfU0VSVklDRV9NVUxUSVBMRV9NQVNURVJTX0guCisJKGNmZl9zZXRfbW1fYmxlbmQsIGNmZl9nZXRfbW1fYmxlbmQsIGNmZl9nZXRfbW1fdmFyLAorCWNmZl9zZXRfdmFyX2Rlc2lnbiwgY2ZmX2dldF92YXJfZGVzaWduKTogTmV3IGZ1bmN0aW9ucy4KKwkoY2ZmX3NlcnZpY2VfbXVsdGlfbWFzdGVycyk6IE5ldyBzZXJ2aWNlLgorCShjZmZfc2VydmljZXMpOiBVcGRhdGVkLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2dldF92YXJfYmxlbmQsIGNmZl9kb25lX2JsZW5kKTogTmV3CisJZnVuY3Rpb25zLgorCSogc3JjL2NmZi9jZmZsb2FkLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy9jZmYvY2ZmcGljLmggKENGRl9TRVJWSUNFX01VTFRJX01BU1RFUlNfR0VUKTogTmV3IG1hY3JvLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYzogSW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSC4KKwkoc2ZudF9pbml0X2ZhY2UpOiBJbml0aWFsaXplIGBmYWNlLT5tbScuCisKKzIwMTYtMTItMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUV4dGVuZCBmdW5jdGlvbmFsaXR5IG9mIGBmdF9tb2R1bGVfZ2V0X3NlcnZpY2UnLgorCisJSXQgY2FuIG5vdyBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbG9jYWwgYW5kIGdsb2JhbCBzZWFyY2hlcy4KKworCSogc3JjL2Jhc2UvZnRvYmpzLmMgKGZ0X21vZHVsZV9nZXRfc2VydmljZSk6IEFkZCBgZ2xvYmFsJyBhcmd1bWVudC4KKwkoRlRfR2V0X1RydWVUeXBlX0VuZ2luZV9UeXBlKTogVXBkYXRlZC4KKworCSogc3JjL2NmZi9jZmZkcml2ci5jIChjZmZfZ2V0X3BzX25hbWUsIGNmZl9nZXRfY21hcF9pbmZvKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaDogVXBkYXRlZC4KKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0ZBQ0VfRklORF9HTE9CQUxfU0VSVklDRSk6CisJVXBkYXRlZC4KKworMjAxNi0xMi0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9nZXRfdmFyX2JsZW5kKTogRml4IGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTYtMTItMTQgIERhdmUgQXJub2xkICA8ZGFybm9sZEBhZG9iZS5jb20+CisJICAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50LCBjZmZdIE1pbm9yIHByZXBhcmF0aW9ucy4KKworCSogaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaCAoVFRBR19DRkYyLCBUVEFHX0hWQVIsIFRUQUdfTVZBUiwKKwlUVEFHX1ZWQVIpOiBOZXcgU0ZOVCB0YWJsZSB0YWdzLgorCisJKiBzcmMvY2ZmL2NmMmZpeGVkLmggKENGMl9GSVhFRF9PTkUsIENGMl9GSVhFRF9FUFNJTE9OKTogQWRkIGNhc3QuCisKKzIwMTYtMTItMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZSwgdHlwZTFdIEFkZCBgZ2V0X3Zhcl9ibGVuZCcgdG8gTU0gc2VydmljZS4KKworCUZvciBpbnRlcm5hbCB1c2U7IHdlIHdhbnQgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIHRoZSBmb3J0aGNvbWluZyBDRkYyCisJc3VwcG9ydCBhbmQgVHJ1ZVR5cGUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIChGVF9HZXRfVmFyX0JsZW5kX0Z1bmMpOgorCU5ldyB0eXBlZGVmLgorCShNdWx0aU1hc3RlcnMpOiBBZGQgYGdldF92YXJfYmxlbmQnLgorCShGVF9TZXJ2aWNlX011bHRpTWFzdGVycyk6IFVwZGF0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2dldF92YXJfYmxlbmQpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYyAodHRfc2VydmljZV9neF9tdWx0aV9tYXN0ZXJzKTogVXBkYXRlZC4KKwkqIHNyYy90eXBlMS90MWRyaXZlci5jICh0MV9zZXJ2aWNlX211bHRpX21hc3RlcnMpOiBVcGRhdGVkLgorCisyMDE2LTEyLTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGUsIHR5cGUxXSBBZGQgYGRvbmVfYmxlbmQnIHRvIE1NIHNlcnZpY2UuCisKKwlGb3IgaW50ZXJuYWwgdXNlOyB3ZSB3YW50IHRvIHNoYXJlIGNvZGUgYmV0d2VlbiB0aGUgZm9ydGhjb21pbmcgQ0ZGMgorCXN1cHBvcnQgYW5kIFRydWVUeXBlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaCAoRlRfRG9uZV9CbGVuZF9GdW5jKToKKwlOZXcgdHlwZWRlZi4KKwkoTXVsdGlNYXN0ZXJzKTogQWRkIGBkb25lX2JsZW5kJy4KKwkoRlRfU2VydmljZV9NdWx0aU1hc3RlcnMpOiBVcGRhdGVkLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9kb25lX2JsZW5kKTogVXNlIGBUVF9GYWNlJyBhcyBhcmd1bWVudC4KKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmg6IFVwZGF0ZWQuCisKKwkqIHNyYy90cnVldHlwZS90dG9ianMuYyAoVFRfRmFjZV9Eb25lKTogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgKHR0X3NlcnZpY2VfZ3hfbXVsdGlfbWFzdGVycyk6IFVwZGF0ZWQuCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYyAodDFfc2VydmljZV9tdWx0aV9tYXN0ZXJzKTogVXBkYXRlZC4KKworMjAxNi0xMi0wOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIFJldmVydCBjaGFuZ2UgZnJvbSAyMDE2LTEyLTA4LgorCisJSSBtaXNzZWQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGZ0X21vZHVsZV9nZXRfc2VydmljZScsIHdoaWNoIG1ha2VzCisJdGhlIGNoYW5nZSB1bm5lY2Vzc2FyeS4KKworMjAxNi0xMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQWRkIGZyYW1ld29yayB0byBzdXBwb3J0IHNlcnZpY2VzIHdpdGggOCBmdW5jdGlvbnMuCisKKwlXZSB3aWxsIG5lZWQgdGhpcyBmb3IgQ0ZGIHZhcmlhdGlvbiBmb250IHN1cHBvcnQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggKEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzgpOgorCU5ldyBtYWNyby4KKworMjAxNi0xMi0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEFkZCBgZ2V0X2dseXBoX25hbWUnIGFuZCBgZ2V0X25hbWVfaW5kZXgnIHRvIFNGTlQgaW50ZXJmYWNlLgorCisJQ0ZGMiBmb250cyB3aWxsIG5lZWQgYWNjZXNzIHRvIHRob3NlIHR3byBmdW5jdGlvbnMuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oOiBJbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ILgorCShTRk5UX0ludGVyZmFjZSk6IEFkZCBgZ2V0X2dseXBoX25hbWUnIGFuZCBgZ2V0X25hbWVfaW5kZXgnIG1lbWJlcnMuCisJKEZUX0RFRklORV9TRk5UX0lOVEVSRkFDRSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9zZm50L3NmZHJpdmVyLmMgKHNmbnRfZ2V0X2dseXBoX25hbWUsIHNmbnRfZ2V0X25hbWVfaW5kZXgpOgorCUZpeCBzaWduYXR1cmVzIHRvIGV4YWN0bHkgY29ycmVzcG9uZCB0byB0aGUgZ2x5cGggZGljdCBzZXJ2aWNlCisJZnVuY3Rpb24gdHlwZWRlZnMuCisJKHNmbnRfaW50ZXJmYWNlKTogVXBkYXRlZC4KKworMjAxNi0xMi0wNiAgRGF2ZSBBcm5vbGQgIDxkYXJub2xkQGFkb2JlLmNvbT4KKworCUFkZCBgRlRfR2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMnIGZ1bmN0aW9uLgorCisJTm90ZSB0aGF0IHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGFyZW4ndCBpbXBsZW1lbnRlZCB5ZXQuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oOiBEZWNsYXJlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaAorCShGVF9HZXRfVmFyX0Rlc2lnbl9GdW5jKTogTmV3IHR5cGVkZWYuCisJKE11bHRpTWFzdGVycyk6IE5ldyBNTSBzZXJ2aWNlIGZ1bmN0aW9uIGBnZXRfdmFyX2Rlc2lnbicuCisJKEZUX0RFRklORV9TRVJWSUNFX01VTFRJTUFTVEVSU1JFQyk6IFVwZGF0ZWQuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCisJKiBzcmMvYmFzZS9mdG1tLmMgKEZUX0dldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzKTogSW1wbGVtZW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X1Zhcl9EZXNpZ24pOiBOZXcgZHVtbXkgZnVuY3Rpb24gdG8KKwloYW5kbGUgYGdldF92YXJfZGVzaWduJyBzZXJ2aWNlLgorCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuaDogVXBkYXRlZC4KKworCSogc3JjL3R5cGUxL3QxZHJpdmVyLmM6IFVwZGF0ZWQuCisKKwkqIHNyYy90eXBlMS90MWxvYWQuYyAoVDFfR2V0X1Zhcl9EZXNpZ24pOiBOZXcgZHVtcCBmdW5jdGlvbiB0bworCWhhbmRsZSBgZ2V0X3Zhcl9kZXNpZ24nIHNlcnZpY2UuCisJKiBzcmMvdHlwZTEvdDFsb2FkLmg6IFVwZGF0ZWQuCisKKzIwMTYtMTItMDYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9zdWJycyk6IEZpeCBtZW1vcnkgbGVhay4KKworCVRoZSBgc3VicnMnIGtleXdvcmQgbWlnaHQgZXJyb25lb3VzbHkgb2NjdXIgbXVsdGlwbGUgdGltZXMuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avb3NzLWZ1enovaXNzdWVzL2RldGFpbD9pZD0yMzEKKworMjAxNi0xMi0wMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2d6aXBdIEltcHJvdmUgYnVpbGRpbmcgd2l0aCBleHRlcm5hbCB6bGliICgjNDk2NzMpLgorCisJQnVpbGRpbmcgRnJlZVR5cGUgd2l0aCBleHRlcm5hbCB6bGliIDEuMi44IG1ha2VzIG1zdmMgMTQgc3RvcCB3aXRoCisJdGhlIGZvbGxvd2luZyBlcnJvci4KKworCSAgZnRnemlwLmMKKwkgIHpsaWItMS4yLjhcemxpYi5oKDg2KTogZXJyb3IgQzIwNjE6CisJICAgICAgICAgICAgICAgICAgICAgICAgIHN5bnRheCBlcnJvcjogaWRlbnRpZmllciAnel9jb25zdCcKKwkgIHpsaWItMS4yLjhcemxpYi5oKDk0KTogZXJyb3IgQzIwNTQ6CisJICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICcoJyB0byBmb2xsb3cgJ3pfY29uc3QnCisJICB6bGliLTEuMi44XHpsaWIuaCg5NCk6IGVycm9yIEMyMDg1OgorCSAgICAgICAgICAgICAgICAgICAgICAgICAnbXNnJzogbm90IGluIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdAorCSAgLi4uCisJICB6bGliLTEuMi44XHpsaWIuaCg4NzcpOiBmYXRhbCBlcnJvciBDMTAwMzoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGNvdW50IGV4Y2VlZHMgMTAwOyBzdG9wcGluZyBjb21waWxhdGlvbgorCisJVGhlIGVycm9yIGhhcHBlbnMgYmVjYXVzZSBGcmVlVHlwZSBrZWVwcyBhbiBvd24gY29weSBvZiB6bGliLTEuMS40CisJdW5kZXIgYHNyYy9nemlwJy4gIFdoZW4gYnVpbGRpbmcgYHNyYy9nemlwL2Z0Z3ppcC5jJyB3aXRoCisJRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiBkZWZpbmVkLCBpdCB1c2VzCisKKwkgICNpbmNsdWRlIDx6bGliLmg+CisKKwl3aGljaCBjb3JyZWN0bHkgZmluZHMgYW4gZXh0ZXJuYWwgYHpsaWIuaCcsIGJ1dCBgemxpYi5oJyBpdHNlbGYgaGFzCisJYSBsaW5lCisKKwkgICNpbmNsdWRlICJ6Y29uZi5oIgorCisJd2hpY2ggbWFrZXMgVmlzdWFsIFN0dWRpbyAyMDE1IGZpbmQgYHNyYy9nemlwL3pjb25mLmgnIHdoaWxlCisJY29tcGlsaW5nIHRoZSBmaWxlcyBpbiBgc3JjL2d6aXAnLgorCisJKiBzcmMvZ3ppcC96Y29uZi5oOiBSZW5hbWUgdG8uLi4KKwkqIHNyYy9nemlwL2Z0emNvbmYuaDogLi4uIHRoaXMuCisJKiBzcmMvZ3ppcC96bGliLmgsIHNyYy9nemlwL3J1bGVzLm1rIChHWklQX0RSVl9TUkNTKTogVXBkYXRlZC4KKworMjAxNi0xMi0wMSAgT2xla3NhbmRyIENoZWtob3Zza3lpICA8b2xla3NhbmRyLmNoZWtob3Zza3lpQGdtYWlsLmNvbT4KKworCVthdXRvZml0XSBGaXggRW1zY3JpcHRlbiBjcmFzaCAocGF0Y2ggIzkxODApLgorCisJRnVuY3Rpb24gY2FsbHMgdGhyb3VnaCBwb2ludGVycyBtdXN0IHVzZSBhIG1hdGNoaW5nIHNpZ25hdHVyZSB0bworCXdvcmsgb24gRW1zY3JpcHRlbiwgc2luY2Ugc3VjaCBjYWxscyBhcmUgZGlzcGF0Y2hlZCB0aHJvdWdoIGxvb2t1cAorCXRhYmxlcyBncm91cGVkIGJ5IHNpZ25hdHVyZS4KKworCSogc3JjL2F1dG9maXQvYWZ0eXBlcy5oIChBRl9Xcml0aW5nU3lzdGVtX0FwcGx5SGludHNGdW5jKTogRml4CisJdHlwZWRlZi4KKworMjAxNi0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Ntb290aF0gUmV2ZXJ0IHByZXZpb3VzIGNvbW1pdC4gIEFscmVhZHkgZml4ZWQgd2l0aCA2Y2E1NGM2NC4KKworMjAxNi0xMS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3Ntb290aF0gQXZvaWQgY29uZGl0aW9uYWwganVtcCBvbiB1bmluaXRpYWxpemVkIHZhbHVlICgjNDk3MTEpLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9yYXN0ZXJfcmVuZGVyKTogSW5pdGlhbGl6ZSBgd29ya2VyJy4KKworMjAxNi0xMS0yNyAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgorCisJW2F1dG9maXRdIENvZGUgc2h1ZmZsaW5nLgorCisJQWxzbyBpbXByb3ZlIHNvbWUgY29tbWVudHMgYW5kIHJlbW92ZSB1bnVzZWQgY29kZS4KKworCU5vIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisJKiBzcmMvYXV0b2ZpdC9hZmxvYWRlci5jIChhZl9sb2FkZXJfbG9hZF9nKTogTWVyZ2VkIHdpdGguLi4KKwkoYWZfbG9hZGVyX2xvYWRfZ2x5cGgpOiAuLi50aGlzIGZ1bmN0aW9uLgorCVNwbGl0IG9mZiBlbWJvbGRlbmluZyBjb2RlIGludG8uLi4KKwkoYWZfbG9hZGVyX2VtYm9sZGVuX2dseXBoX2luX3Nsb3QpOiAuLi4gdGhpcyBmdW5jdGlvbi4KKworMjAxNi0xMS0xNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJQmV0dGVyIHN1cHBvcnQgb2YgTExQNjQgc3lzdGVtcyB3aXRoIGdjYyAoYW5kIGNsYW5nKS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogQ2FsbCBgQUNfVFlQRV9MT05HX0xPTkdfSU5UJy4KKworCSogYnVpbGRzL3VuaXgvZnRjb25maWcuaW4gKEZUX0xPTkc2NCk6IEVuYWJsZSBmb3IgTExQNjQgc3lzdGVtcyAoYW5kCisJc3VwcHJlc3Mgd2FybmluZ3MpIGV2ZW4gd2l0aG91dCBgRlRfQ09ORklHX09QVElPTl9GT1JDRV9JTlQ2NCcuCisKKzIwMTYtMTEtMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCUZpeCBgbGNkX3dlaWdodHMnIGFycmF5IHNpemUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggKEZUX0xpYnJhcnlSZWMpOiBEbyBpdC4KKworCVJlcG9ydGVkIGJ5IE5pa29sYXVzLgorCisyMDE2LTExLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwpOiBGaXggdHJhY2luZy4KKworMjAxNi0xMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEltcHJvdmUgRlRfTE9BRF9CSVRNQVBfTUVUUklDU19PTkxZIGZvciBgc2JpeCcgZm9ybWF0LgorCisJSXQncyB1bmF2b2lkYWJsZSB0byBjYWxsIHRoZSBQTkcgZW5naW5lLCBidXQgdG8gZ2V0IHRoZSBtZXRyaWNzIGl0CisJaXMgc3VmZmljaWVudCB0byByZWFkIHRoZSBQTkcgaW1hZ2UncyBoZWFkZXIgb25seS4KKworCSogc3JjL3NmbnQvcG5nc2hpbS5jIChMb2FkX1NCaXRfUG5nKTogQWRkIGFyZ3VtZW50IHRvIGNvbnRyb2wgdGhlCisJYWxsb2NhdGlvbiBvZiB0aGUgZ2x5cGggc2xvdC4KKwkqIHNyYy9zZm50L3BuZ3NoaW0uaDogVXBkYXRlZC4KKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfbG9hZF9wbmcsCisJdHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UsIHR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlKTogVXBkYXRlZC4KKworMjAxNi0xMS0wNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIFNwZWVkIHVwIGBzYml4JyBsb29rdXAuCisKKwlUaGlzIGFsc28gZml4ZXMgYSBidWcgaW50cm9kdWNlZCBpbiAyMDE2LTEwLTAxIHdoaWNoIHByZXZlbnRzCisJZGlzcGxheSBvZiBlbWJlZGRlZCBiaXRtYXAgZm9udHMgdGhhdCB1c2UgdGhlIGBzYml4JyBmb3JtYXQuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX2xvYWRfc2JpdCk6IFN0b3JlIGBzYml4JyBzaXplIGFuZAorCW9mZnNldCBhbHNvIGluIGBlYmR0X3NpemUnIGFuZCBgZWJkdF9zdGFydCcsIHJlc3BlY3RpdmVseS4gIFRoaXMKKwltYWtlcyB0aGUgdGVzdCBmb3IgYW4gZW1iZWRkZWQgYml0bWFwIGRhdGEgdGFibGUgc3VjY2VlZCBmb3IgdGhpcworCWZvcm1hdC4KKworCSh0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpIDxUVF9TQklUX1RBQkxFX1RZUEVfU0JJWD46IFVzZQorCWBlYmR0X3NpemUnIGFuZCBgZWJkdF9zdGFydCcKKwkodHRfZmFjZV9sb2FkX3NiaXhfaW1hZ2UpOiBEaXR0by4KKworMjAxNi0xMS0wNiAgU2VpZ28gTm9uYWthICA8bm9uYUBnb29nbGUuY29tPgorCSAgICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlJbnRyb2R1Y2UgYSB3YXkgb2YgcXVpY2tseSByZXRyaWV2aW5nIChlbWJlZGRlZCkgYml0bWFwIG1ldHJpY3MuCisKKwlgRlRfTG9hZF9HbHlwaCcgZG9lc24ndCBnZW5lcmF0ZSBhIGJpdG1hcCBmb3IgYSBub24tYml0bWFwIGdseXBoCisJdW50aWwgdGhlIHVzZXIgY2FsbHMgYEZUX1JlbmRlcl9HbHlwaCcuICBIb3dldmVyLCBpdCBhbHdheXMKKwlhbGxvY2F0ZXMgbWVtb3J5IGZvciBiaXRtYXBzIGFuZCBjb3BpZXMgb3IgZGVjb2RlcyB0aGUgY29udGVudHMgb2YgYQorCWJpdG1hcCBnbHlwaCwgd2hpY2ggY2FuIGJlIHF1aXRlIHNsb3cgZm9yIFBORyBkYXRhLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggKEZUX0xPQURfQklUTUFQX01FVFJJQ1NfT05MWSk6IE5ldworCW1hY3JvLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTG9hZF9HbHlwaCk6IFVuc2V0IEZUX0xPQURfUkVOREVSIGlmCisJRlRfTE9BRF9CSVRNQVBfTUVUUklDU19PTkxZIGlzIHVzZWQuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9zYml0X2RlY29kZXJfYWxsb2NfYml0bWFwLAorCXR0X3NiaXRfZGVjb2Rlcl9sb2FkX2JpdG1hcCk6IEFkZCBhcmd1bWVudCB0byBjb250cm9sIGFsbG9jYXRpb24gb2YKKwl0aGUgZ2x5cGggc2xvdC4KKwkodHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2UsIHR0X3NiaXRfZGVjb2Rlcl9sb2FkX2NvbXBvdW5kLAorCXR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlKTogVXBkYXRlZC4KKworCSogc3JjL3BjZi9wY2Zkcml2ci5jIChQQ0ZfR2x5cGhfTG9hZCk6IFF1aWNrbHkgZXhpdCBpZgorCWBGVF9MT0FEX0JJVE1BUF9NRVRSSUNTX09OTFknIGlzIHNldC4KKworCSogc3JjL3Bmci9wZnJzYml0LmMsIHNyYy9wZnIvcGZyc2JpdC5oIChwZnJfc2xvdF9sb2FkX2JpdG1hcCk6IEFkZAorCWFyZ3VtZW50IHRvIGNvbnRyb2wgYWxsb2NhdGlvbiBvZiB0aGUgZ2x5cGggc2xvdC4KKwkqIHNyYy9wZnIvcGZyb2JqcyAocGZyX3Nsb3RfbG9hZCk6IFVwZGF0ZWQuCisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0xvYWRfR2x5cGgpOiBEaXR0by4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDE2LTExLTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlTeW5jaHJvbml6ZSB3aXRoIGdudWxpYiAoIzQ5NDQ4KS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaCwgYnVpbGRzL3VuaXgvZnRjb25maWcuaW4sCisJYnVpbGRzL3Ztcy9mdGNvbmZpZy5oIChGVF9UWVBFT0YpOiBVcGRhdGUgY29kZSB0byB1c2UgZGVmaW5pdGlvbiBpbgorCWN1cnJlbnQgdmVyc2lvbiBvZiBgaW50cHJvcHMuaCcuCisJT3RoZXIgbWlub3Igc3luY2hyb25pemF0aW9uIHRvIHJlZHVjZSBjb2RlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlCisJdGhyZWUgZmlsZXMuCisKKzIwMTYtMTEtMDMgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3RydWV0eXBlXSBDbGFtcCB2YXJpYXRpb24gcmVxdWVzdHMgdG8gdmFsaWQgcmFuZ2UuCisKKwlUaGlzIGlzIHJlcXVpcmVkIGJ5IE9wZW5UeXBlIDEuODsgaXQgYWxzbyBhdm9pZHMgcm91bmRpbmcgc3VycHJpc2VzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9TZXRfVmFyX0Rlc2lnbik6IENsYW1wIGRlc2lnbiBjb29yZGluYXRlcworCW91dHNpZGUgb2YgdGhlIGFsbG93ZWQgcmFuZ2UgdG8gYWx3YXlzIHN0YXkgd2l0aGluIHRoZSByYW5nZSBpbnN0ZWFkCisJb2YgcHJvZHVjaW5nIGFuIGVycm9yLgorCisyMDE2LTEwLTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFJlbW92ZSBjbGFuZyB3YXJuaW5ncy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggKFRUX0V4ZWNDb250ZXh0UmVjKTogVXNpbmcgYEZUX1VMb25nJyBmb3IKKwlsb29wIGNvdW50ZXIgaGFuZGxpbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBVcGRhdGVkLgorCShJbnNfU0NBTlRZUEUpOiBVc2Ugc2lnbmVkIGNvbnN0YW50LgorCShUVF9SdW5JbnMpOiBFbnN1cmUgYG51bV90d2lsaWdodF9wb2ludHMnIGlzIDE2Yml0LgorCisyMDE2LTEwLTI3ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBjb21taXQgZnJvbSAyMDE0LTExLTI0LgorCisJUHJvYmxlbSByZXBvcnRlZCBieSBIaW4tVGFrIExldW5nICA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4KKworCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2hkbXgpOiBGaXggZmlsZSBjaGVja2luZworCWxvZ2ljLgorCisyMDE2LTEwLTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlBZGQgYEZUX0dldF97TU0sVmFyfV9CbGVuZF9Db29yZGluYXRlcycgZnVuY3Rpb25zLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaDogRGVjbGFyZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmggKEZUX0dldF9NTV9CbGVuZF9GdW5jKToKKwlOZXcgdHlwZWRlZi4KKwkoTXVsdGlNYXN0ZXJzKTogTmV3IE1NIHNlcnZpY2UgZnVuY3Rpb24gYGdldF9tbV9ibGVuZCcuCisJKEZUX0RFRklORV9TRVJWSUNFX01VTFRJTUFTVEVSU1JFQyk6IFVwZGF0ZWQuCisJVXBkYXRlIGFsbCBjYWxsZXJzLgorCisJKiBzcmMvYmFzZS9mdG1tLmMgKEZUX0dldF9NTV9CbGVuZF9Db29yZGluYXRlcywKKwlGVF9HZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzKTogSW1wbGVtZW50LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYzogVXBkYXRlZC4KKworCSogc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyAoVFRfR2V0X01NX0JsZW5kKTogTmV3IGZ1bmN0aW9uIHRvIGhhbmRsZQorCWBnZXRfbW1fYmxlbmQnIHNlcnZpY2UuCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5oOiBVcGRhdGVkLgorCisJKiBzcmMvdHlwZTEvdDFkcml2ZXIuYzogVXBkYXRlZC4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9HZXRfTU1fQmxlbmQpOiBOZXcgZnVuY3Rpb24gdG8gaGFuZGxlCisJYGdldF9tbV9ibGVuZCcgc2VydmljZS4KKwkqIHNyYy90eXBlMS90MWxvYWQuaDogVXBkYXRlZC4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudC4KKworMjAxNi0xMC0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHlwZTEvdDFsb2FkLmMgKHBhcnNlX3N1YnJzKTogRml4IGxpbWl0IGNoZWNrLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9ODEKKworMjAxNi0xMC0yNSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW2NmZl0gQ29ycmVjdCBjbWFwIGZvcm1hdCByZXBvcnRpbmcgKCMyNDgxOSkuCisKKwkqIHNyYy9jZmYvY2ZmZHJpdnIuYyAoY2ZmX2dldF9jbWFwX2luZm8pOiBUaHJvdyBhbiBlcnJvciBvbiBzeW50aGV0aWMKKwljaGFybWFwIGluc3RlYWQgb2YgZ3Vlc3NpbmcgaXRzIGZvcm1hdCBhbmQgbGFuZ3VhZ2UuCisKKzIwMTYtMTAtMjIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRml4IFNDQU5UWVBFIGluc3RydWN0aW9uICgjNDkzOTQpLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX1NDQU5UWVBFKTogT25seSB1c2UgbG93ZXIgMTZiaXRzLgorCisyMDE2LTEwLTIyICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gSW1wcm92ZSBoYW5kbGluZyBvZiBpbnZhbGlkIHBvc3QgMi41IHRhYmxlcyBbIzQ5MzkzXS4KKworCSogc3JjL3NmbnQvdHRwb3N0LmMgKGxvYWRfZm9ybWF0XzI1KTogV2UgbmVlZCBhdCBsZWFzdCBhIHNpbmdsZQorCXRhYmxlIGVudHJ5LgorCisyMDE2LTEwLTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBoYW5kbGluZyBvZiBgY3ZhcicgdGFibGUgZGF0YS4KKworCVJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTUzCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKHR0X2ZhY2VfdmFyeV9jdnQpOiBJZ25vcmUgaW52YWxpZCBDVlQKKwlpbmRpY2VzLgorCisyMDE2LTEwLTExICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbcHNhdXhdIEZpeCBoYW5kbGluZyBvZiBpbnZhbGlkIGZsZXggc3VicnMuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGFzCisKKwkgIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9vc3MtZnV6ei9pc3N1ZXMvZGV0YWlsP2lkPTUyCisKKwkqIHNyYy9wc2F1eC90MWRlY29kZS5jICh0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKQorCTxvcF9jYWxsb3RoZXJzdWJyPjogU2V0IGBmbGV4X3N0YXRlJyBhZnRlciBlcnJvciBjaGVja2luZy4KKworMjAxNi0xMC0xMSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jICh0dF9kb25lX2JsZW5kKTogRml4IGRlYWxsb2NhdGlvbi4KKworMjAxNi0xMC0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvY2lkL2NpZGxvYWQuYyAoY2lkX2ZhY2Vfb3Blbik6IFByb3Blcmx5IHByb3BhZ2F0ZSBgZXJyb3InLgorCisyMDE2LTEwLTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2lkXSBGaXggcGFyc2luZyBvZiBzdWJyIG9mZnNldHMuCisKKwlCdWcgaW50cm9kdWNlZCAyMDE2LTA1LTE2LgorCisJKiBzcmMvY2lkL2NpZHBhcnNlLmMgKGNpZF9wYXJzZXJfbmV3KTogRml4IG9mZi1ieS1vbmUgZXJyb3IuCisKKzIwMTYtMTAtMDEgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBEaXNhYmxlIGJpdG1hcCBzdHJpa2VzIGlmIHdlIGRvbid0IGhhdmUgYSBiaXRtYXAgZGF0YSB0YWJsZS4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zYml0KTogQ2hlY2sgd2hldGhlciB3ZSBoYXZlCisJYSBiaXRtYXAgZGF0YSB0YWJsZS4KKworMjAxNi0xMC0wMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gUmVtb3ZlIGltcG9zc2liaWxpdHkuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChUV29ya2VyKTogUmVhcnJhbmdlIGZpZWxkcy4KKwkoZ3JheV9jb252ZXJ0X2dseXBoKTogUmVtb3ZlIGltcG9zc2libGUgY29uZGl0aW9uIGFuZCBjbGVhbiB1cC4KKworMjAxNi0wOS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3BjZl0gRW5yaWNoIGZhbWlseSBuYW1lIHdpdGggZm91bmRyeSBuYW1lIGFuZCBnbHlwaCB3aWR0aCBpbmZvLgorCisJVGhpcyBpcyBhIHZlcnkgb2xkIHBhdGNoIGZyb20gb3BlblN1U0UgKGZyb20gMjAwNiwgc3VibWl0dGVkIHRvCisJRnJlZVR5cGUgaW4gMjAxMSkgdGhhdCBJIGZvcmdvdCB0byBhcHBseS4KKworCSAgaHR0cHM6Ly9idWlsZC5vcGVuc3VzZS5vcmcvcGFja2FnZS92aWV3X2ZpbGUvb3BlblNVU0U6RmFjdG9yeS9mcmVldHlwZTIvZnJlZXR5cGUyLWJpdG1hcC1mb3VuZHJ5LnBhdGNoCisKKwlQcmVwZW5kIHRoZSBmb3VuZHJ5IG5hbWUgcGx1cyBhIHNwYWNlIHRvIHRoZSBmYW1pbHkgbmFtZS4gIFRoZXJlIGFyZQorCW1hbnkgZm9udHMganVzdCBjYWxsZWQgYEZpeGVkJyB3aGljaCBsb29rIGNvbXBsZXRlbHkgZGlmZmVyZW50LCBhbmQKKwl3aGljaCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBlYWNoIG90aGVyLiAgV2hlbiBzZWxlY3RpbmcgYEZpeGVkJyBpbgorCUtERSBvciBHbm9tZSBvbmUgZ2V0cyByZXN1bHRzIHRoYXQgYXBwZWFyIHJhdGhlciByYW5kb20sIHRoZSBzdHlsZQorCWNoYW5nZXMgb2Z0ZW4gaWYgb25lIGNoYW5nZXMgdGhlIHNpemUgYW5kIG9uZSBjYW5ub3Qgc2VsZWN0IHNvbWUKKwlmb250cyBhdCBhbGwuCisKKwlXZSBhbHNvIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBgd2lkZScgY2hhcmFjdGVyczsgYWxsIHB1dCB0b2dldGhlciwKKwl3ZSBnZXQgZmFtaWx5IG5hbWVzIGxpa2UgYFNvbnkgRml4ZWQnIG9yIGBNaXNjIEZpeGVkIFdpZGUnLgorCisJKiBzcmMvcGNmL3BjZnJlYWQuYyAocGNmX2xvYWRfZm9udCk6IEltcGxlbWVudCBpdC4KKworCSogZG9jcy9DSEFOR0VTOiBEb2N1bWVudCBpdC4KKworMjAxNi0wOS0yOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0ZnV6emVyXSBTcGVlZCB1cC4KKworCSogc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjIChMTFZNRnV6emVyVGVzdE9uZUlucHV0KTogRG9uJ3QKKwljaGVjayBmb3IgZW1iZWRkZWQgYml0bWFwcyBpZiB3ZSBoYXZlIGEgbm9uLWRlZmF1bHQgaW5zdGFuY2UuCisKKzIwMTYtMDktMjkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gRGlzYWxsb3cgYml0bWFwIHN0cmlrZXMgZm9yIG5vbi1kZWZhdWx0IGluc3RhbmNlcy4KKworCUFsc28gc3BlZWQgdXAgYWNjZXNzIG9mIGRlZmF1bHQgaW5zdGFuY2VzIGlmIEdYIHZhcmlhdGlvbnMgYXJlCisJYWN0aXZlLgorCisJKiBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCAoVFRfRmFjZVJlYyk6IEFkZAorCWBpc19kZWZhdWx0X2luc3RhbmNlJyBtZW1iZXIuCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2luaXRfZmFjZSk6IEluaXRpYWxpemUKKwlgaXNfZGVmYXVsdF9pbnN0YW5jZScuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKFRUX1Byb2Nlc3NfU2ltcGxlX0dseXBoLAorCWxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBBZGQgdGVzdCBmb3IgZGVmYXVsdCBpbnN0YW5jZS4KKwkoVFRfTG9hZF9HbHlwaCk6IExvYWQgZW1iZWRkZWQgYml0bWFwcyBmb3IgZGVmYXVsdCBpbnN0YW5jZSBvbmx5LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9TZXRfTU1fQmxlbmQpOiBDb21wdXRlCisJYGlzX2RlZmF1bHRfaW5zdGFuY2UnLgorCisyMDE2LTA5LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIENsZWFuIHVwIGBUVF9GYWNlJyBzdHJ1Y3R1cmUuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlUmVjKTogUmVtb3ZlIHVudXNlZAorCWZpZWxkcyBgaG9yel9tZXRyaWNzJyBhbmQgYHZlcnRfbWV0cmljcycuCisJVXBkYXRlIGRvY3VtZW50YXRpb24uCisKKwkqIHNyYy9zZm50L3Nmb2Jqcy5jIChzZm50X2RvbmVfZmFjZSk6IFVwZGF0ZWQuCisKKzIwMTYtMDktMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCU1vcmUgRlRfWkVSTyB1c2FnZS4KKworCSogc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyAoZ3h2X0NsYXNzVGFibGVfdmFsaWRhdGUpOgorCXMvZnRfbWVtc2V0L0ZUX01FTV9aRVJPLy4KKworCSogc3JjL3BzYXV4L3QxZGVjb2RlLmMgKHQxX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MpOgorCXMvZnRfbWVtc2V0L0ZUX0FSUkFZX1pFUk8vLgorCisJKiBzcmMvcmFzdGVyL2Z0cmFzdGVyLmMgKEZUX1pFUk8pOiBEZWZpbmUuCisJKGZ0X2JsYWNrX25ldyk6IFVzZSBpdC4KKwkqIHNyYy9yYXN0ZXIvZnRyZW5kMS5jIChmdF9yYXN0ZXIxX2dldF9jYm94KToKKwlzL0ZUX01FTV9aRVJPL0ZUX1pFUk8vLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoRlRfWkVSTyk6IERlZmluZS4KKwkoZ3JheV9yYXN0ZXJfbmV3KTogVXNlIGl0LgorCSogc3JjL3Ntb290aC9mdHNtb290aC5jIChmdF9zbW9vdGhfZ2V0X2Nib3gpOgorCXMvRlRfTUVNX1pFUk8vRlRfWkVSTy8uCisKKzIwMTYtMDktMjggIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSovKjogcy9GVF9NRU1fWkVSTy9GVF9aRVJPLyB3aGVyZSBhcHByb3ByaWF0ZS4KKworMjAxNi0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBUcmFjZSBudW1iZXIgb2YgZXhlY3V0ZWQgb3Bjb2Rlcy4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKFRUX1J1bklucyk6IEltcGxlbWVudCBpdC4KKworMjAxNi0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBTcGVlZCB1cCBgVFRfTG9hZF9HbHlwaCcuCisKKwlUaGlzIGF2b2lkcyBhZGRpdGlvbmFsIGNhbGxzIHRvIGB0dF9mYWNlX2xvb2t1cF90YWJsZScgZm9yIHRoZQorCWBnbHlmJyB0YWJsZSwgd2hpY2ggY2FuIGJlIGV4cGVuc2l2ZS4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0xvYWRlclJlYyk6IE1vdmUKKwlgZ2x5Zl9vZmZzZXQnIGZpZWxkIHRvIC4uLgorCShUVF9GYWNlUmVjKTogLi4uIHRoaXMgc3RydWN0dXJlLgorCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IFVwZGF0ZWQuCisJKHR0X2xvYWRlcl9pbml0KTogTW92ZSBpbml0aWFsaXphdGlvbiBvZiBgZ2x5Zl9vZmZzZXQnIHRvIC4uLgorCSogc3JjL3RydWV0eXBlL3R0cGxvYWQuYyAodHRfZmFjZV9sb2FkX2xvY2EpOiAuLi4gdGhpcyBmdW5jdGlvbi4KKworMjAxNi0wOS0yNyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBJbnRyb2R1Y2UgZHluYW1pYyBsaW1pdHMgZm9yIHNvbWUgYnl0ZWNvZGUgb3Bjb2Rlcy4KKworCVRoaXMgc3BlZWRzIHVwIEZyZWVUeXBlJ3MgaGFuZGxpbmcgb2YgbWFsZm9ybWVkIGZvbnRzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoVFRfUnVuSW5zKTogU2V0IHVwIGxpbWl0cyBmb3IgdGhlIG51bWJlcgorCW9mIHR3aWxpZ2h0IHBvaW50cywgdGhlIHRvdGFsIG51bWJlciBvZiBuZWdhdGl2ZSBqdW1wcywgYW5kIHRoZQorCXRvdGFsIG51bWJlciBvZiBsb29wcyBpbiBMT09QQ0FMTCBvcGNvZGVzLiAgVGhlIHZhbHVlcyBhcmUgYmFzZWQgb24KKwl0aGUgbnVtYmVyIG9mIHBvaW50cyBhbmQgZW50cmllcyBpbiB0aGUgQ1ZUIHRhYmxlLgorCShJbnNfSk1QUik6IFRlc3QgbmVnYXRpdmUganVtcCBjb3VudGVyLgorCShJbnNfTE9PUENBTEwpOiBUZXN0IGxvb3BjYWxsIGNvdW50ZXIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5oIChUVF9FeGVjQ29udGV4dCk6IFVwZGF0ZWQuCisKKwkqIGRvY3MvQ0hBTkdFUzogVXBkYXRlZC4KKworMjAxNi0wOS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBTYW5pdGl6ZSBvbmx5IGxhc3QgZW50cnkgb2YgYGxvY2EnIHRhYmxlLgorCisJV2l0aG91dCB0aGlzIHBhdGNoLCBhIGxvY2Egc2VxdWVuY2UgbGlrZSBgMCAxMDAwMDAgMCAxMDAwMDAgLi4uJywKKwl3aGVyZSB2YWx1ZSAxMDAwMDAgaXMgbGFyZ2VyIHRoYW4gdGhlIGBnbHlmJyB0YWJsZSBzaXplLCBtYWtlcworCUZyZWVUeXBlIGhhbmRsZSB0aGUgd2hvbGUgYGdseWYnIHRhYmxlIGFzIGEgc2luZ2xlIGdseXBoIGFnYWluIGFuZAorCWFnYWluLCB3aGljaCBpcyBjZXJ0YWlubHkgaW52YWxpZCAoYW5kIGNhbiBiZSB2ZXJ5IHNsb3csIHRvbykuCisKKwkqIHNyYy90cnVldHlwZS90dHBsb2FkLmMgKHR0X2ZhY2VfZ2V0X2xvY2F0aW9uKTogSW1wbGVtZW50LgorCUltcHJvdmUgdHJhY2luZyBtZXNzYWdlcy4KKworMjAxNi0wOS0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgKExMVk1GdXp6ZXJUZXN0T25lSW5wdXQpOiBGaXggdHlwby4KKworMjAxNi0wOS0yNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIFRyYWNpbmcgZml4ZXMuCisKKwkqIHNyYy9hdXRvZml0L2FmbW9kdWxlLmMgKGFmX2F1dG9maXR0ZXJfbG9hZF9nbHlwaCk6IENhbGwgZHVtcGluZworCWZ1bmN0aW9ucyBvbmx5IGlmIHdlIGFjdHVhbGx5IGRvIHRyYWNpbmcuCisKKzIwMTYtMDktMjIgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIFJlZHVjZSBkaXZpc2lvbnMgaW4gdGhlIGxpbmUgcmVuZGVyZXIuCisKKwlXZSBkb24ndCBuZWVkIHNvbWUgZGl2aXNpb25zIGlmIGEgbGluZSBzZWdtZW50cyBzdGF5cyB3aXRoaW4gYSBzaW5nbGUKKwlyb3cgb3IgYSBzaW5nbGUgY29sdW1uIG9mIHBpeGVscy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX2xpbmUpIFtGVF9MT05HNjRdOiBNYWtlIGRpdmlzaW9ucworCWNvbmRpdGlvbmFsLgorCisyMDE2LTA5LTE1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3N3ZWVwKTogUmVtb3ZlIGNoZWNrIGZvciBlbXB0eSB0YWJsZS4KKworMjAxNi0wOS0xNCAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gQW5vdGhlciB0aW55IHNwZWVkLXVwLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9maW5kX2NlbGwpOiBNZXJnZSBpbnRvLi4uCisJKGdyYXlfcmVjb3JkX2NlbGwpOiAuLi4gdGhpcyBmdW5jdGlvbi4KKworMjAxNi0wOS0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV97ZmluZCxzZXR9X2NlbGwpOiBSZW1vdmUgZHViaW91cyBjb2RlLgorCisyMDE2LTA5LTExICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBGaXggdmFsZ3JpbmQgd2FybmluZyBhbmQgcmVvcHRpbWl6ZS4KKworCVRoZSBhbGdvcml0aG0gY2FsbHMgYGdyYXlfc2V0X2NlbGwnIGF0IHRoZSBzdGFydCBvZiBlYWNoIG5ldyBjb250b3VyCisJb3Igd2hlbiB0aGUgY29udG91cnMgY3Jvc3MgdGhlIGNlbGwgYm91bmRhcmllcy4gRG91YmxlLWNoZWNraW5nIGZvcgorCXRoYXQgaXMgd2FzdGVmdWwuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3NldF9jZWxsKTogUmVtb3ZlIGNoZWNrIGZvciBhIG5ldyBjZWxsLgorCShncmF5X2NvbnZlcnRfZ2x5cGgpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb24gaW50cm9kdWNlZCBieSA0NGIxNzJlODguCisKKzIwMTYtMDktMTAgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggcHJldmlvdXMgY29tbWl0LgorCisJUHJvYmxlbXMgcmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9NDAKKworCVdlIG5vdyBtYXAgdGhlIHN0cmlrZSBpbmRleCByaWdodCBiZWZvcmUgYWNjZXNzaW5nIHRoZSBwaHlzaWNhbAorCWRhdGEsIG5vdCBlYXJsaWVyLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9sb2FkX2ZhY2UpOiBTZXQgYGZhY2UtPnNiaXRfc3RyaWtlX21hcCcKKwlhZnRlciBjcmVhdGluZyB0aGUgbWFwIHNvIHRoYXQuLi4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X2ZhY2VfbG9hZF9zdHJpa2VfbWV0cmljcyk6IC4uLiB0aGlzIGZ1bmN0aW9uCisJY2FuIGJlIHVzZWQgYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIHVwIGBzYml0X3N0cmlrZV9tYXAnLgorCSh0dF9mYWNlX3NldF9zYml0X3N0cmlrZSk6IFJldmVydCBjaGFuZ2UuCisJKHR0X3NiaXRfZGVjb2Rlcl9pbml0LCB0dF9mYWNlX2xvYWRfc2JpeF9pbWFnZSk6IE1hcCBzdHJpa2UgaW5kZXguCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3NlbGVjdCk6IFJldmVydCBjaGFuZ2UuCisKKzIwMTYtMDktMDkgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtmdGZ1enplcl0gTWlub3IgaW1wcm92ZW1lbnRzLgorCisJKiBzcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgKExMVk1GdXp6ZXJUZXN0T25lSW5wdXQpOiBJZ25vcmUKKwlpbnZhbGlkIHN0cmlrZXMuCisJVXNlIGJldHRlciB2YWx1ZXMgZm9yIGNhbGwgdG8gYEZUX1NldF9DaGFyX1NpemUnLgorCisyMDE2LTA5LTA5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gRG9uJ3QgcHJvdmlkZSAoY29tcGxldGVseSkgYnJva2VuIHN0cmlrZSBkYXRhLgorCisJRnJlZVR5cGUgdHJpZXMgdG8gc2FuaXRpemUgc3RyaWtlIGhlYWRlciBkYXRhOyB3ZSBub3cgcmVqZWN0CisJY29tcGxldGVseSBicm9rZW4gb25lcy4KKworCSogaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmggKFRUX0ZhY2VSZWMpOiBOZXcKKwlgc2JpdF9zdHJpa2VfbWFwJyBhcnJheSBwb2ludGVyLgorCisJKiBzcmMvYmFzZS9mdG9ianMuYyAoRlRfTWF0Y2hfU2l6ZSk6IFJlamVjdCBtYXRjaGVzIHdoZXJlIGVpdGhlcgorCXdpZHRoIG9yIGhlaWdodCB3b3VsZCBiZSB6ZXJvLgorCUFkZCB0cmFjaW5nIG1lc3NhZ2UgaW4gY2FzZSBvZiBlcnJvci4KKworCSogc3JjL3NmbnQvc2ZvYmpzLmMgKHNmbnRfbG9hZF9mYWNlKTogUG9wdWxhdGUgYHNiaXRfc3RyaWtlX21hcCcsCisJb25seSB1c2luZyAobW9yZSBvciBsZXNzKSB2YWxpZCBzdHJpa2UgaGVhZGVyIGRhdGEgZm9yCisJRlRfRmFjZSdzIGBhdmFpbGFibGVfc2l6ZXMnIGFycmF5LgorCShzZm50X2RvbmVfZmFjZSk6IFVwZGF0ZWQuCisKKwkqIHNyYy9zZm50L3R0c2JpdC5jICh0dF9mYWNlX3NldF9zYml0X3N0cmlrZSk6IFVzZQorCWBzYml0X3N0cmlrZV9tYXAnLgorCSh0dF9mYWNlX2xvYWRfc3RyaWtlX21ldHJpY3MpOiBJbXByb3ZlIHRyYWNpbmcuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3NlbGVjdCk6IFVzZSBgc2JpdF9zdHJpa2VfbWFwJy4KKworMjAxNi0wOS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBWZXJzaW9uIDIuNyByZWxlYXNlZC4KKwk9PT09PT09PT09PT09PT09PT09PT09PQorCisKKwlUYWcgc291cmNlcyB3aXRoIGBWRVItMi03Jy4KKworCSogZG9jcy9WRVJTSU9OLlRYVDogQWRkIGVudHJ5IGZvciB2ZXJzaW9uIDIuNy4KKworCSogUkVBRE1FLCBKYW1maWxlIChSZWZEb2MpLCBidWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2osCisJYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AsCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sLAorCWJ1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcCwKKwlidWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvaiwKKwlidWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwsCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2osCisJYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sOiBzLzIuNi41LzIuNy8sIHMvMjY1LzI3Ly4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIChGUkVFVFlQRV9NSU5PUik6IFNldCB0byA3LgorCShGUkVFVFlQRV9QQVRDSCk6IFNldCB0byAwLgorCisJKiBidWlsZHMvdW5peC9jb25maWd1cmUucmF3ICh2ZXJzaW9uX2luZm8pOiBTZXQgdG8gMTg6NjoxMi4KKwkqIENNYWtlTGlzdHMudHh0IChWRVJTSU9OX01JTk9SKTogU2V0IHRvIDcuCisJKFZFUlNJT05fUEFUQ0gpOiBTZXQgdG8gMC4KKworCSogZG9jcy9DSEFOR0VTOiBVcGRhdGVkLgorCisyMDE2LTA5LTA4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBJbmNsdWRlIGB0dGd4dmFyLmgnLgorCisJVGhpcyBmaXhlcyB0aGUgYG11bHRpJyBidWlsZC4KKworMjAxNi0wOS0wOCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEFub3RoZXIgaW1wcm92ZW1lbnQgdG8gQXJtZW5pYW4gc3VwcG9ydC4KKworCVN1Z2dlc3RlZCBieSBIcmFudCBIIFBhcGF6aWFuIDxocGFwYXppYW5AZ21haWwuY29tPi4KKworCSogc3JjL2F1dG9maXQvYWZzY3JpcHQuaDogVXNlIGJldHRlciBzdWl0ZWQgY2hhcmFjdGVycyB0byBkZXJpdmUKKwlkZWZhdWx0IHN0ZW0gd2lkdGhzLgorCisyMDE2LTA5LTA3ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2hsaW5lKTogTWljcm8tb3B0aW1pemUuCisKKzIwMTYtMDktMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIE9wZXJhdGUgaW4gYWJzb2x1dGUgYml0bWFwIGNvb3JkaW5hdGVzLgorCisJU2ltcGxlciBiaXRtYXAgYWRkcmVzc2luZyBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieSAxLjUlLgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9UV29ya2VyKTogUmVtb3ZlIGNvdW50IGZpZWxkcy4KKwkoZ3JheV9kdW1wX2NlbGxzLCBncmF5X2ZpbmRfY2VsbCwgZ3JheV9zZXRfY2VsbCwgZ3JheV9obGluZSwKKwlncmF5X3N3ZWVwLCBncmF5X2NvbnZlcnRfZ2x5cGgsIGdyYXlfcmFzdGVyX3JlbmRlcik6IFVwZGF0ZWQuCisKKzIwMTYtMDktMDYgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIEltcHJvdmUgY29udG91ciBzdGFydCAodGFrZSAyKS4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfbW92ZV90byk6IENhbGwgYGdyYXlfc2V0X2NlbGwnIGRpcmVjdGx5CisJaW5zdGVhZCBvZi4uLgorCShncmF5X3N0YXJ0X2NlbGwpOiAuLi4gdGhpcyBmdW5jdGlvbiwgd2hpY2ggaXMgcmVtb3ZlZC4KKwkoZ3JheV9jb252ZXJ0X2dseXBoKTogTWFrZSBpbml0aWFsIHktY29vcmRpbmF0ZSBpbnZhbGlkLgorCisyMDE2LTA5LTA2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHlwZTFdIE1NIGZvbnRzIHN1cHBvcnQgZXhhY3RseSB6ZXJvIG5hbWVkIGluc3RhbmNlcyAoIzQ4NzQ4KS4KKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChUMV9HZXRfTU1fVmFyKTogU2V0IGBudW1fbmFtZWRzdHlsZXMnIHRvIHplcm8uCisKKzIwMTYtMDktMDYgIEpvbmF0aGFuIEtldyAgPGpma3RoYW1lQGdtYWlsLmNvbT4KKworCVtjZmZdIEZpeCB1bmluaXRpYWxpemVkIG1lbW9yeS4KKworCVByb2JsZW0gcmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MDI4OAorCisJKiBzcmMvY2ZmL2NmMmludHJwLmMgKGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcpOiBJbml0aWFsaXplIGBzdG9yYWdlJworCWFycmF5IHRvIGhhbmRsZSBhIGBnZXQnIG9wY29kZSB3aXRob3V0IGEgcHJldmlvdXMgYHB1dCcuCisKKzIwMTYtMDktMDUgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfbW92ZV90bywgZ3JheV9zdGFydF9jZWxsKTogUmV2ZXJ0LgorCisyMDE2LTA5LTA1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBJbXByb3ZlIGNvbnRvdXIgc3RhcnQuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X21vdmVfdG8pOiBDYWxsIGBncmF5X3NldF9jZWxsJyBkaXJlY3RseQorCWluc3RlYWQgb2YuLi4KKwkoZ3JheV9zdGFydF9jZWxsKTogLi4uIHRoaXMgZnVuY3Rpb24sIHdoaWNoIGlzIHJlbW92ZWQuCisKKzIwMTYtMDktMDUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjZmZdIEZpeCBtZW1vcnkgaW5pdGlhbGl6YXRpb24uCisKKwkqIHNyYy9jZmYvY2Yyc3RhY2suYyAoY2YyX3N0YWNrX2luaXQpOiBVc2UgYEZUX05FVycuICBUaGUgYFEnCisJdmFyaWFudHMgb2YgRnJlZVR5cGUncyBtZW1vcnkgYWxsb2NhdGlvbiBtYWNyb3MgZG9uJ3QgZG8gemVyb2luZy4KKworMjAxNi0wOS0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0cmFuZG9tXSBNaW5vciBpbXByb3ZlbWVudHMuCisKKwkqIHNyYy90b29scy9mdHJhbmRvbS9mdHJhbmRvbS5jIChfWE9QRU5fU09VUkNFKTogTmV3IG1hY3JvLCBzZXQgdG8KKwk1MDAuCisKKwkqIHNyYy90b29scy9mdHJhbmRvbS9NYWtlZmlsZSAoQ0ZMQUdTKTogU3BsaXQgb2ZmIGluY2x1ZGUKKwlkaXJlY3RvcmllcyB0byAuLi4KKwkoSU5DTFVERVMpOiAuLi4gdGhpcyBuZXcgdmFyaWFibGUuCisJKExERkxBR1MpOiBOZXcgdmFyaWFibGUuCisJKGZ0cmFuZG9tLm8sIGZ0cmFuZG9tKTogVXBkYXRlZC4KKworMjAxNi0wOS0wNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEltcHJvdmUgQXJtZW5pYW4gc3VwcG9ydC4KKworCVRoYW5rcyB0byBIcmFudCBIIFBhcGF6aWFuIDxocGFwYXppYW5AZ21haWwuY29tPiBmb3IgaGVscC4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmRhdCAoQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fKik6IEltcHJvdmUKKwlzZWxlY3Rpb24gb2YgY2hhcmFjdGVycy4KKworCSogc3JjL2F1dG9maXQvYWZibHVlLmMsIHNyYy9hdXRvZml0L2FmYmx1ZS5oOiBSZWdlbmVyYXRlZC4KKworMjAxNi0wOS0wNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0cmFuZG9tXSBJbXByb3ZlIE1ha2VmaWxlLgorCisJSXQgbm93IHN1cHBvcnRzIGJvdGggYSBub3JtYWwgYnVpbGQgKGAuL2NvbmZpZ3VyZSAmJiBtYWtlJykgYW5kIGEKKwlkZXZlbG9wbWVudCBidWlsZCAoYG1ha2UgZGV2ZWwnKS4KKworCSogc3JjL3Rvb2xzL2Z0cmFuZG9tL01ha2VmaWxlIChWUEFUSCk6IFNldCBpdCBzbyB0aGF0CisJYGxpYmZyZWV0eXBlLmEnIGdldHMgc2VhcmNoZWQgaW4gYm90aCBgb2JqcycgKGZvciB0aGUgZGV2ZWxvcG1lbnQKKwlidWlsZCkgYW5kIGBvYmpzLy5saWJzJyAoZm9yIGEgbm9ybWFsIGJ1aWxkIHdoaWNoIHVzZXMgbGlidG9vbCkuCisJKExJQlMpOiBBZGQgbWlzc2luZyBsaWJyYXJpZXMuCisJKGZ0cmFuZG9tLm8pOiBOZXcgcnVsZS4KKwkoZnRyYW5kb20pOiBVc2UgYXV0b21hdGljIHZhcmlhYmxlcy4KKworMjAxNi0wOS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBNb3JlIGZpeGVzIGZvciBoYW5kbGluZyBvZiBHWCBkZWx0YXMuCisKKwlQcm9ibGVtcyByZXBvcnRlZCBieSBCb2IgVGF5bG9yIDxCb2IuVGF5bG9yQG1vbm90eXBlLmNvbT4uCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogRml4IHJvdWdoCisJc2FuaXR5IHRlc3QgZm9yIGdseXBoIHZhcmlhdGlvbiBhcnJheSBoZWFkZXIgc2l6ZS4KKwlBbHdheXMgc2V0IHN0cmVhbSBwb3NpdGlvbiBiZWZvcmUgcmVhZGluZyBwYWNrZWQgeCBhbmQgeSBkZWx0YXMuCisJRml4IHRoaW5rbyB3LnIudC4gYGxvY2FscG9pbnRzJyBhcnJheS4KKworMjAxNi0wOS0wMyAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2Z0cmFuZG9tXSBWYXJpb3VzIGZpeGVzLgorCisJKiBzcmMvdG9vbHMvZnRyYW5kb20vZnRyYW5kb20uYyAoR09PRF9GT05UU19ESVIpOiBQcm92aWRlIGJldHRlcgorCWRlZmF1bHQuCisJKGVycm9yX2ZyYWN0aW9uKTogTWFrZSBpdCBvZiB0eXBlIGBkb3VibGUnIHRvIHdvcmsgYXMgYWR2ZXJ0aXplZCDigJMKKwl0aGlzIHdhcyBjb21wbGV0ZWx5IGJyb2tlbi4KKwlVcGRhdGUgYWxsIHJlbGF0ZWQgY29kZS4KKwkoZXJyb3JfY291bnQsIGZjbnQpOiBNYWtlIGl0IHVuc2lnbmVkIHRvIGZpeCBjb21waWxlciB3YXJuaW5ncy4KKwlVcGRhdGUgYWxsIHJlbGF0ZWQgY29kZS4KKwkoZm9udGxpc3QpOiBDaGFuZ2UgYGxlbicgbWVtYmVyIHRvIGBsb25nJyB0byBmaXggY29tcGlsZXIgd2FybmluZ3MuCisJKEZUX01vdmVUbywgRlRfTGluZVRvLCBGVF9Db25pY1RvLCBGVF9DdWJpY1RvLCBhYm9ydF90ZXN0KTogVGFnCisJdW51c2VkIHZhcmlhYmxlcy4KKwkoVGVzdEZhY2UsIEZpbmRGb250cywgY29weWZvbnQsIGRvX3Rlc3QpOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisJKEV4ZWN1dGVUZXN0KTogRGl0dG8uCisJQ2FsbCBgRlRfRG9uZV9GcmVlVHlwZScuCisJKGdldEVycm9yQ250KTogUmVwbGFjZSBgY2VpbCcgd2l0aCBhbiBvcmRpbmFyeSBjYXN0IHRvIGB1bnNpZ25lZAorCWludCcuCisJKHVzYWdlKTogSW1wcm92ZSBvdXRwdXQuCisJKG1haW4pOiBGaXggY29tcGlsZXIgd2FybmluZ3MuCisKKwkqIHNyYy90b29scy9mdHJhbmRvbS9SRUFETUU6IFVwZGF0ZWQuCisKKzIwMTYtMDktMDMgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtiYXNlXSBBdm9pZCBuZWdhdGl2ZSBiaXRtYXAgc3RyaWtlIGRpbWVuc2lvbnMgKCM0ODk4NSkuCisKKwkqIHNyYy9iYXNlL2Z0b2Jqcy5jIChGVF9PcGVuX0ZhY2UpOiBDaGVjayB3aGV0aGVyIG5lZ2F0aW9uIHdhcworCWFjdHVhbGx5IHN1Y2Nlc3NmdWwuICBGb3IgZXhhbXBsZSwgdGhpcyBjYW4gZmFpbCBmb3IgdmFsdWUKKwktMzI3NjggaWYgdGhlIHR5cGUgaXMgYHNpZ25lZCBzaG9ydCcuICBJZiB0aGVyZSBhcmUgcHJvYmxlbXMsCisJZGlzYWJsZSB0aGUgc3RyaWtlLgorCisyMDE2LTA5LTAzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbY2ZmXSBBdm9pZCBudWxsIHBvaW50ZXIgcGFzc2VkIHRvIEZUX01FTV9DT1BZICgjNDg5ODQpLgorCisJKiBzcmMvY2ZmL2NmZmxvYWQuYyAoY2ZmX2luZGV4X2dldF9uYW1lKTogQ2hlY2sgYGJ5dGVfbGVuJy4KKworMjAxNi0wOS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3VuaXhdIEVuYWJsZSA2NGJpdCBzdXBwb3J0IGluIGZpbGUgc3lzdGVtIGFjY2VzcyAoIzQ4OTYyKS4KKworCSogYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdzogQ2FsbCBgQUNfU1lTX0xBUkdFRklMRScuCisKKzIwMTYtMDktMDIgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBBdm9pZCBsZWZ0IHNoaWZ0IG9mIG5lZ2F0aXZlIHZhbHVlICgjNDg5ODApLgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfc2JpdF9kZWNvZGVyX2xvYWRfYml0X2FsaWduZWQpOiBVc2UgdW5zaWduZWQKKwljb25zdGFudC4KKworMjAxNi0wOS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyAoZ3JheV9obGluZSk6IEZpeCBjbGFuZyBjb21waWxlciB3YXJuaW5ncy4KKworMjAxNi0wOS0wMiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJU29tZSBwcmVwYXJhdGlvbnMgZm9yIHRoZSBuZXh0IHJlbGVhc2UuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKwkoVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HKTogRW5hYmxlLgorCisJKiBkb2NzL0NIQU5HRVM6IFVwZGF0ZWQuCisKKzIwMTYtMDktMDEgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIFNpbXBsaWZ5IHNwYW4gcmVuZGVyaW5nIG1vcmUuCisKKwlJdCB0dXJucyBvdXQgdGhhdCB0aGVyZSBpcyBzaWduaWZpY2FudCBjb3N0IGFzc29jaWF0ZWQgd2l0aCBgRlRfU3BhbicKKwljcmVhdGlvbiBhbmQgY2FsbHMgdG8gYGdyYXlfcmVuZGVyX3NwYW4nIGJlY2F1c2UgaXQgaGFwcGVucyBzbworCWZyZXF1ZW50bHkuIFRoaXMgcmVtb3ZlcyB0aGVzZSBzdGVwcyBmcm9tIG91ciBpbnRlcm5hbCB1c2UgYnV0IGxlYXZlcworCWl0IGFsb25lIGZvciBgRlRfUkFTVEVSX0ZMQUdfRElSRUNUIiB0byBwcmVzZXJ2ZSBBUEkuIFRoZSBzcGVlZCBnYWluCisJaXMgYWJvdXQgNSUuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3JlbmRlcl9zcGFuKTogUmVtb3ZlZC4gVGhlIGNvZGUgaXMKKwltaWdyYXRlZCB0by4uLgorCShncmF5X2hsaW5lKTogLi4uIGhlcmUuCisKKzIwMTYtMDgtMzAgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIFN0cmVhbWxpbmUgcGl4bWFwIGRyYXdpbmcgYSBiaXQgbW9yZS4KKworCVplcm8gY292ZXJhZ2UgaXMgdW5saWtlbHkgKDEgb3V0IG9mIDI1NikgdG8gd2FycmFudCBjaGVja2luZy4gVGhpcworCWdpdmVzIDAuNSUgc3BlZWQgaW1wcm92ZW1lbnQgaW4gcmVuZGVyaW5nIHNpbXBsZSBnbHlwaHMuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2hsaW5lLCBncmF5X3JlbmRlcl9zcGFuKTogUmVtb3ZlIGNoZWNrcy4KKworMjAxNi0wOC0yOSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gU3RyZWFtbGluZSBwaXhtYXAgZHJhd2luZy4KKworCVRoaXMgZ2l2ZXMgMiUgc3BlZWQgaW1wcm92ZW1lbnQgaW4gcmVuZGVyaW5nIHNpbXBsZSBnbHlwaHMuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChUUGl4bWFwKTogUmVkdWNlZCBwaXhtYXAgZGVzY3JpcHRvciB3aXRoIGEKKwlwb2ludGVyIHRvIGl0cyBib3R0b20tbGVmdCBhbmQgcGl0Y2ggdG8gYmUgdXNlZCBpbi4uLgorCShncmF5X1RXb3JrZXIpOiAuLi4gaGVyZS4KKwkoZ3JheV9yZW5kZXJfc3Bhbik6IE1vdmUgcGl4bWFwIGZsb3cgY2hlY2sgZnJvbSBoZXJlLi4uCisJKGdyYXlfcmFzdGVyX3JlbmRlcik6IC4uIHRvIGhlcmUuCisKKzIwMTYtMDgtMjcgIEFsZXhlaSBQb2R0ZWxlemhuaWtvdiAgPGFwb2R0ZWxlQGdtYWlsLmNvbT4KKworCVtzbW9vdGhdIFJlZHVjZSBzdGFjayBvZiBiYW5kIGJvdW5kYXJpZXMuCisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X1RCYW5kKTogUmVtb3ZlZC4KKwkoZ3JheV9jb252ZXJ0X2dseXBoKTogVXBkYXRlZCB0byBzdGFjayBiYW5kIGJvdW5kYXJpZXMgY29uY2lzZWx5LgorCisyMDE2LTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIHNyYy9jaWQvY2lkbG9hZC5jIChjaWRfZmFjZV9vcGVuKTogSW1wcm92ZSBoYW5kbGluZyBvZiBgU0RCeXRlcycuCisKKzIwMTYtMDgtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtjaWRdIEZpeCBjb21taXQgZnJvbSAyMDE2LTA1LTE2LgorCisJKiBzcmMvY2lkL2NpZHBhcnNlLmMgKGNpZF9wYXJzZXJfbmV3KTogRml4IG9mZi1ieS1vbmUgZXJyb3JzLgorCisyMDE2LTA4LTI2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gQ2FjaGUgb2Zmc2V0IGFuZCBzaXplIHRvIGJpdG1hcCBkYXRhIHRhYmxlLgorCisJVGhpcyBjb21taXQgYXZvaWRzIGBFQkRUJyBhbmQgZnJpZW5kcyBiZWluZyBsb29rZWQgdXAgYWdhaW4gYW5kCisJYWdhaW4gd2hpbGUgbG9hZGluZyBhIHNpbmdsZSBlbWJlZGRlZCBiaXRtYXAuCisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIChUVF9GYWNlUmVjKQorCVtUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFNdOiBOZXcgZmllbGRzIGBlYmR0X3N0YXJ0JyBhbmQKKwlgZWJkdF9zaXplJy4KKworCSogc3JjL3NmbnQvdHRzYml0LmMgKHR0X3NiaXRfZGVjb2Rlcl9pbml0KTogTW92ZSB0YWJsZSBsb29rdXAgdG8gLi4uCisJKHR0X2ZhY2VfbG9hZF9zYml0KTogLi4uIHRoaXMgZnVuY3Rpb247IGFsc28gc3RvcmUgdGhlIHRhYmxlIHNpemUKKwlhbmQgb2Zmc2V0LgorCisyMDE2LTA4LTI2ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X3Jhc3Rlcl9yZW5kZXIpOiBNaW5vciB0d2Vha3MuCisKKzIwMTYtMDgtMjYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0eXBlMV0gRml4IGhlYXAgYnVmZmVyIG92ZXJmbG93LgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL29zcy1mdXp6L2lzc3Vlcy9kZXRhaWw/aWQ9MzYKKworCSogc3JjL3R5cGUxL3QxbG9hZC5jIChwYXJzZV9jaGFyc3RyaW5ncyk6IFJlamVjdCBmb250cyB0aGF0IGRvbid0CisJY29udGFpbiBnbHlwaCBuYW1lcy4KKworMjAxNi0wOC0yNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3NmbnRdIEZpeCBwcmV2aW91cyBjb21taXQgKCM0ODkwMSkuCisKKwkqIHNyYy9zZm50L3R0Y21hcC5jICh0dF9jbWFwNF9jaGFyX21hcF9iaW5hcnkpOiBUaGlua29zLgorCisyMDE2LTA4LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gU3BlZWQgdXAgaGFuZGxpbmcgb2YgaW52YWxpZCBmb3JtYXQgNCBjbWFwcy4KKworCSogc3JjL3NmbnQvdHRjbWFwLmMgKHR0X2NtYXA0X25leHQsIHR0X2NtYXA0X2NoYXJfbWFwX2JpbmFyeSk6IEFkZAorCXRlc3RzIGZvciBgbnVtX2dseXBoJyBmcm9tIGB0dF9jbWFwNF9jaGFyX21hcF9saW5lYXInLgorCisyMDE2LTA4LTI1ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaDogUmVtb3ZlIHVudXNlZCB0eXBlZGVmcy4KKworMjAxNi0wOC0yMiAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJW3Ntb290aF0gU2ltcGxpZnkgc3BhbiByZW5kZXJpbmcuCisKKwlUaGlzIHJlbW92ZXMgdW5uZWNlc3NhcnkgY29tcGxleGl0eSBvZiBzcGFuIG1lcmdpbmcgYW5kIGJ1ZmZlcmluZy4KKwlJbnN0ZWFkLCB0aGUgc3BhbnMgYXJlIHJlbmRlcmVkIGFzIHRoZXkgY29tZSwgc3BlZWRpbmcgdXAgdGhlCisJcmVuZGVyaW5nIGJ5IGFib3V0IDUlIGFzIGEgcmVzdWx0LgorCisJKiBzcmMvc21vb3RoL2Z0Z3JheXMuYyBbRlRfTUFYX0dSQVlfU1BBTlNdOiBNYWNybyByZW1vdmVkLgorCShncmF5X1RXb3JrZXIpOiBSZW1vdmUgc3BhbiBidWZmZXIgYW5kIHJlbGF0ZWQgZmllbGRzLgorCShncmF5X3N3ZWVwLCBncmF5X2hsaW5lKTogVXBkYXRlZC4KKworCSogaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmg6IFJlbW92ZSBkb2N1bWVudGF0aW9uIG5vdGUgYWJvdXQKKwlgRlRfTUFYX0dSQVlfU1BBTlMnLCB3aGljaCB3YXMgbmV2ZXIgaW4gYGZ0b3B0aW9uLmgnIGFuZCBpcyBub3cgZ29uZS4KKworMjAxNi0wOC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggYE1QUycgaW5zdHJ1Y3Rpb24uCisKKwlBY2NvcmRpbmcgdG8gR3JlZyBIaXRjaGNvY2ssIE1QUyBpbiBEV3JpdGUgcmVhbGx5IHJldHVybnMgdGhlIHBvaW50CisJc2l6ZS4KKworCSogc3JjL3RydWV0eXBlL3R0b2Jqcy5oIChUVF9TaXplUmVjKTogQWRkIGBwb2ludF9zaXplJyBtZW1iZXIuCisKKwkqIHNyYy90cnVldHlwZS90dGRyaXZlci5jICh0dF9zaXplX3JlcXVlc3QpOiBTZXQgYHBvaW50X3NpemUnLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaCAoVFRfRXhlY0NvbnRleHRSZWMpOiBBZGQgYHBvaW50U2l6ZScKKwltZW1iZXIuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9Mb2FkX0NvbnRleHQpOiBVcGRhdGVkLgorCShJbnNfTVBTKTogRml4IGluc3RydWN0aW9uLgorCisyMDE2LTA4LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbbHp3XSBPcHRpbWl6ZSBsYXN0IGNvbW1pdC4KKworCSogc3JjL2x6dy9mdHpvcGVuLmMgKGZ0X2x6d3N0YXRlX2dldF9jb2RlKTogTW92ZSBjaGVjayBpbnRvCisJY29uZGl0aW9uYWwgY2xhdXNlLgorCisyMDE2LTA4LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbbHp3XSBBdm9pZCBpbnZhbGlkIGxlZnQgc2hpZnQuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjk1MzY2CisKKwkqIHNyYy9sencvZnR6b3Blbi5jIChmdF9sendzdGF0ZV9nZXRfY29kZSk6IExpbWl0IGBudW1fYml0cycuCisKKzIwMTYtMDgtMTYgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtsenddIEF2b2lkIGJ1ZmZlciBvdmVycnVuLgorCisJUmVwb3J0ZWQgYXMKKworCSAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MzI4MworCisJKiBzcmMvbHp3L2Z0em9wZW4uYyAoZnRfbHp3c3RhdGVfcmVmaWxsKTogRW5zdXJlIGBidWZfc2l6ZScgZG9lc24ndAorCXVuZGVyZmxvdy4KKworMjAxNi0wOC0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggY29tcGlsZXIgd2FybmluZy4KKworCSogc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyAobG9hZF90cnVldHlwZV9nbHlwaCk6IEFkZCBjYXN0LgorCisyMDE2LTA4LTEzICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbd2luZm9udHNdIEF2b2lkIHplcm8gYml0bWFwIHdpZHRoIGFuZCBoZWlnaHQuCisKKwlSZXBvcnRlZCBhcworCisJICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcyMTczCisKKwkqIHNyYy93aW5mb250cy93aW5mbnQuYyAoRk5UX0ZhY2VfSW5pdCk6IENoZWNrIHplcm8gcGl4ZWwgaGVpZ2h0LgorCShGTlRfTG9hZF9HbHlwaCk6IENoZWNrIGZvciB6ZXJvIHBpdGNoLgorCisyMDE2LTA4LTExICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChQb3BfUHVzaF9Db3VudCk6IFJldmVydCBjaGFuZ2VzLgorCisyMDE2LTA4LTExICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jIChUVF9SdW5JbnMpOiBNaW5vciBhbmQgZm9ybWF0dGluZy4KKworMjAxNi0wOC0xMSAgQWxleGVpIFBvZHRlbGV6aG5pa292ICA8YXBvZHRlbGVAZ21haWwuY29tPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoUG9wX1B1c2hfQ291bnQpOiBGaXggc29tZSBlbnRyaWVzLgorCisyMDE2LTA4LTEwICBQZXRlciBLbG90eiAgPFBldGVyLktsb3R6QGl0aC1pY29zZXJ2ZS5jb20+CisKKwkqIHNyYy9zbW9vdGgvZnRncmF5cy5jIChncmF5X2hsaW5lKTogRml4IHVuaW5pdGlhbGl6ZWQgYWNjZXNzLgorCisyMDE2LTA4LTEwICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudF0gVXNlIGNvcnJlY3QgdHlwZSBmb3IgYGl0YWxpY0FuZ2xlJyBmaWVsZCAoIzQ4NzMyKS4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9wb3N0KTogRml4IHR5cGVzLgorCisyMDE2LTA4LTA2ICBKb24gU3BlbmNlciAgPGpvbkBqb25zcGVuY2VyLmNhPgorCisJW3NmbnRdIEZpeCBgRlRfR2V0X0FkdmFuY2UnIGZvciBiaXRtYXAgc3RyaWtlcy4KKworCWBGVF9HZXRfQWR2YW5jZScgcmV0dXJucyAwIGZvciBiaXRtYXAgZm9udHMuICBJdCBmaXJzdCBnZXRzIHRoZQorCWFkdmFuY2UgdmFsdWUgZnJvbSB0aGUgZm9udCB0YWJsZSBhbmQgdGhlbiBzY2FsZXMgaXQgYnkgdGhlCisJYGZvbnQtPnNpemUtPm1ldHJpY3MtPnhfc2NhbGUnIGZpZWxkLiAgQnV0IGBGVF9TZWxlY3RfU2l6ZScgZG9lc24ndAorCXNldCB0aGF0IHZhbHVlIGZvciBiaXRtYXAgZm9udHMgYW5kIHRoZSBhZHZhbmNlIGdldHMgc2NhbGVkIHRvIHplcm8uCisKKwlUYWtlbiBmcm9tCisKKwkgIGh0dHBzOi8vZ2l0aHViLmNvbS9iZWhkYWQvaGFyZmJ1enovaXNzdWVzLzI1MgorCisJKiBzcmMvc2ZudC90dHNiaXQuYyAodHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzKQorCTxUVF9TQklUX1RBQkxFX1RZUEVfRUJMQz46IFNldCBzY2FsZSB2YWx1ZXMuCisKKzIwMTYtMDgtMDYgIEJlaGRhZCBFc2ZhaGJvZCAgPGJlaGRhZEBiZWhkYWQub3JnPgorCisJW3RydWV0eXBlXSBGaXggR1ggdmFyaWF0aW9uIGhhbmRsaW5nIG9mIGNvbXBvc2l0ZXMuCisKKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpCisJW1RUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlRdOiBDaGVjayBgQVJHU19BUkVfWFlfVkFMVUVTJyBmbGFnLgorCisyMDE2LTA4LTA1ICBBbGV4ZWkgUG9kdGVsZXpobmlrb3YgIDxhcG9kdGVsZUBnbWFpbC5jb20+CisKKwlbc21vb3RoXSBNaW5vciByZWZhY3RvcmluZy4KKworCSogc3JjL3Ntb290aC9mdGdyYXlzLmMgKGdyYXlfcmVuZGVyX3NjYW5saW5lLCBncmF5X3JlbmRlcl9saW5lKToKKwlVcGRhdGVkLgorCisyMDE2LTA3LTI5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbc2ZudCwgdHJ1ZXR5cGVdIERvbid0IGFib3J0IG9uIGludmFsaWQgYG1heENvbXBvbmVudERlcHRoJy4KKworCVNpbmNlIDIwMTYtMDUtMTYgd2UgZGV0ZWN0IGluZmluaXRlIHJlY3Vyc2lvbiBkaXJlY3RseS4KKworCSogc3JjL3NmbnQvdHRsb2FkLmMgKHR0X2ZhY2VfbG9hZF9tYXhwKTogRG9uJ3QgYWRqdXN0CisJYG1heENvbXBvbmVudERlcHRoJy4KKwkqIHNyYy90cnVldHlwZS90dGdsb2FkLmMgKGxvYWRfdHJ1ZXR5cGVfZ2x5cGgpOiBEb24ndCBhYm9ydCBpZgorCWBtYXhDb21wb25lbnREZXB0aCcgaXMgbm90IHZhbGlkLiAgSW5zdGVhZCwgc2ltcGx5IGFkanVzdCBpdHMgdmFsdWUKKwlhbmQgZW1pdCBhIHRyYWNpbmcgbWVzc2FnZS4KKworMjAxNi0wNy0yNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvYXV0b2ZpdC9hZmxhdGluLmMgKGFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltKTogTWlub3IuCisKKwlObyBmdW5jdGlvbmFsIGNoYW5nZS4KKworMjAxNi0wNy0yMiAgSGluLVRhayBMZXVuZyAgPGh0bDEwQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCVt0cnVldHlwZV0gUmVjb3JkIHRoZSBlbmQgb2YgSURFRnMuCisKKwlUbyBtYXRjaCB0aGUgbG9naWMgaW4gRkRFRi4gIFRoZSB2YWx1ZSBvZiB0aGUgZW5kIGlzIG9ubHkgdXNlZCBmb3IKKwlib3VuZC1jaGVja2luZyBpbiBgSW5zX0pNUFInLCBzbyBpdCBtYXkgbm90IGhhdmUgYmVlbiBvYnZpb3VzIHRoYXQKKwlpdCB3YXMgbm90IHJlY29yZGVkLiAgVGVzdGVkIChhcyBwYXJ0IG9mIEZvbnQgVmFsaWRhdG9yIDIuMCkgYWxsIHRoZQorCWZvbnRzIG9uIEZlZG9yYSBhbmQgZGlkIG5vdCBzZWUgYW55IGNoYW5nZS4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19JREVGKTogVXBkYXRlZC4KKworMjAxNi0wNy0xOSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBTYW5pdGl6ZXIgZml4LCBzZWNvbmQgdHJ5LgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfcmVhZHBhY2tlZHBvaW50cyk6IEZpeCBib3VuZGFyeQorCXRlc3RzIGFuZCB1c2Ugb25seSBvbmUgc2xvdCBtb3JlLgorCisyMDE2LTA3LTE5ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIFNhbml0aXplciBmaXguCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzKTogSW5jcmVhc2UgYXJyYXkKKwl0byBmaXggbmVzdGVkIGxvb3BzLgorCisyMDE2LTA3LTE4ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIE1ha2UgR0VUREFUQSB3b3JrIG9ubHkgZm9yIEdYIGZvbnRzLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAob3Bjb2RlX25hbWUpOiBVcGRhdGVkLgorCShJbnNfR0VUREFUQSk6IE9ubHkgZGVmaW5lIGZvciBgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCcuCisJKFRUX1J1bklucyk6IFVwZGF0ZWQuCisKKzIwMTYtMDctMTcgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVt0cnVldHlwZV0gQWRkIHN1cHBvcnQgZm9yIEFwcGxlJ3MKKworCSAgR0VUREFUQVtdLCBvcGNvZGUgMHg5MgorCisJYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uICBJdCBhbHdheXMgcmV0dXJucyAxNywgYW5kIHdlIGhhdmUgYWJzb2x1dGVseQorCW5vIGlkZWEgd2hhdCBpdCBpcyBnb29kIGZvci4uLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoUG9wX1B1c2hfQ291bnQsIG9wY29kZV9uYW1lKTogVXBkYXRlZC4KKwkoSW5zX0dFVERBVEEpOiBOZXcgZnVuY3Rpb24uCisJKFRUX1J1bklucyk6IEFkZCBpdC4KKworMjAxNi0wNy0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBBZGQgYnl0ZWNvZGUgc3VwcG9ydCBmb3IgR1ggdmFyaWF0aW9uIGZvbnRzLgorCisJVGhpcyBjb21taXQgaW1wbGVtZW50cyB1bmRvY3VtZW50ZWQgKGJ1dCBjb25maXJtZWQpIHN0dWZmIGZyb20KKwlBcHBsZSdzIG9sZCBieXRlY29kZSBlbmdpbmUuCisKKwkgIEdFVFZBUklBVElPTltdLCBvcGNvZGUgMHg5MQorCSAgICBUaGlzIG9wY29kZSBwdXNoZXMgbm9ybWFsaXplZCB2YXJpYXRpb24gY29vcmRpbmF0ZXMgZm9yIGFsbCBheGVzCisJICAgIG9udG8gdGhlIHN0YWNrIChpbiAyLjE0IGZvcm1hdCkuICBDb29yZGluYXRlIG9mIGZpcnN0IGF4aXMgZ2V0cworCSAgICBwdXNoZWQgZmlyc3QuCisKKwkgIEdFVElORk9bXSwgc2VsZWN0b3IgYml0IDMKKwkgICAgSWYgR1ggdmFyaWF0aW9uIHN1cHBvcnQgaXMgZW5hYmxlZCwgYml0IDEwIG9mIHRoZSByZXN1bHQgaXMgc2V0CisJICAgIHRvIDEuCisKKwkqIHNyYy90cnVldHlwZS90dGludGVycC5jOiBJbmNsdWRlIEZUX01VTFRJUExFX01BU1RFUlNfSC4KKwkob3Bjb2RlX25hbWUpIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogVXBkYXRlZC4KKwkoSW5zX0dFVElORk8pIFtUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUXTogSGFuZGxlIHNlbGVjdG9yCisJYml0IDMsIGNoZWNraW5nIHN1cHBvcnQgZm9yIHZhcmlhdGlvbiBnbHlwaCBoaW50aW5nLgorCShJbnNfR0VUVkFSSUFUSU9OKSBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IE5ldyBmdW5jdGlvbgorCXRvIGltcGxlbWVudCBvcGNvZGUgMHg5MS4KKwkoVFRfUnVuSW5zKSBbVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVF06IEhhbmRsZSBvcGNvZGUgMHg5MS4KKworMjAxNi0wNy0xNiAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW3RydWV0eXBlXSBGaXggR0VUSU5GTyBieXRlY29kZSBpbnN0cnVjdGlvbi4KKworCSogc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgKEluc19HRVRJTkZPKTogRml4IHJldHVybiB2YWx1ZSBmb3IKKwlzdHJldGNoaW5nIGluZm9ybWF0aW9uLgorCisyMDE2LTA3LTE2ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVt0cnVldHlwZV0gTWFrZSBhbGwgZ2x5cGhzIGluIGBaeWNvbicgR1ggZm9udCB3b3JrLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChmdF92YXJfcmVhZHBhY2tlZHBvaW50cyk6IEZpeCBib3VuZGFyeQorCXRlc3RzLgorCisyMDE2LTA3LTE2ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwlbdHJ1ZXR5cGVdIEZpeCBHWCBkZWx0YSB0cmFjaW5nLgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IFRyYWNlCisJcmVsYXRpdmUgcG9pbnQgbW92ZW1lbnRzLgorCisyMDE2LTA3LTE2ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVt0cnVldHlwZV0gTW9yZSBmaXhlcyBmb3IgR1guCisKKwlUaGlzIGZpbmFsbHkgZml4ZXMgdGhlIHJlbmRlcmluZyBvZiB0aGUgY3ljbGlzdCBhbmQgdGhlIGxpemFyZCBpbgorCXRoZSBgWnljb24nIGZvbnQuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKGZ0X3Zhcl9yZWFkcGFja2VkcG9pbnRzKTogYGZpcnN0JyBwb2ludAorCWluZGV4IGlzIGFsd2F5cyBjdW11bGF0aXZlLgorCisJKHR0X2hhbmRsZV9kZWx0YXMpOiBSZW5hbWUgdG8uLi4KKwkodHRfaW50ZXJwb2xhdGVfZGVsdGFzKTogLi4uIFRoaXMuCisJQWRkIG5ldyBwYXJhbWV0ZXIgZm9yIG91dHB1dCBwb2ludCBhcnJheS4KKwlVcGRhdGUgY2FsbGVyLgorCisJKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogQWRkIGBwb2ludHNfb3V0JyBhcnJheTsgaXQgbm93IGhvbGRzCisJdGhlIGludGVybWVkaWF0ZSByZXN1bHRzIG9mIGB0dF9pbnRlcnBvbGF0ZV9kZWx0YXMnIHRoYXQgYXJlIHRvIGJlCisJYWRkZWQgdG8gYG91dGxpbmUtPnBvaW50cycuCisKKzIwMTYtMDctMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCSogc3JjL2F1dG9maXQvYWZsYXRpbi5jIChhZl9sYXRpbl9oaW50c19jb21wdXRlX3NlZ21lbnRzKTogVGhpbmtvLgorCisJYG1heF9wb3MnIGlzIGFsd2F5cyBsYXJnZXIgdGhhbiBgbWluX3Bvcycgc28gYEZUX0FCUycgaXMgbm90IG5lZWRlZC4KKworCVJlcG9ydGVkIGJ5IEFsZXhlaS4KKworMjAxNi0wNy0xNiAgTmlrb2xhdXMgV2F4d2VpbGVyICA8bWFkaWdlbnNAZ21haWwuY29tPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYyAoSW5zX01JUlApOiBGaXggY29weS1hbmQtcGFzdGUgZXJyb3IuCisKKwlQcm9ibGVtIHJlcG9ydGVkIGJ5IEhpbi1UYWsgTGV1bmcuCisKKzIwMTYtMDctMTUgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVthdXRvZml0XSBVcGRhdGUgYW5kIGltcHJvdmUgc2VnbWVudCBhbmQgZWRnZSB0cmFjaW5nLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmMgKGFmX2dseXBoX2hpbnRzX2R1bXBfc2VnbWVudHMpOiBUcmFjZQorCWBkZWx0YScgYWxzby4KKwlEb24ndCBzaG93IGZpcnN0IHBvaW50IG9mIHNlZ21lbnQgYXMgYSByZXBsYWNlbWVudCBmb3IgYHBvcyc7IHRoaXMKKwlpcyAoYSkgbWlzbGVhZGluZywgc2luY2UgdGhlIGRpZmZlcmVuY2UgdG8gYHBvcycgY2FuIGJlIGFsbW9zdAorCWFyYml0cmFyaWx5IGxhcmdlIGluIGNvcm5lciBjYXNlcywgYW5kIChiKSBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSBhbGwKKwlzZWdtZW50IGRhdGEgaW4gZm9udCB1bml0cyBpbnN0ZWFkIG9mIGEgc2luZ2xlIHZhbHVlIGdpdmVuIGluIG91dHB1dAorCXNwYWNlIGNvb3JkaW5hdGVzLgorCUltcHJvdmUgbGF5b3V0LgorCShhZl9nbHlwaF9oaW50c19kdW1wX2VkZ2VzKTogU2hvdyBweC0+dW5pdHMgYW5kIHVuaXRzLT5weCBjb252ZXJzaW9uCisJdmFsdWVzIGZvciBjb252ZW5pZW5jZS4KKwlJbXByb3ZlIGxheW91dC4KKworMjAxNi0wNy0xNSAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJW2F1dG9maXRdIEZvciBlZGdlcywgcmVqZWN0IHNlZ21lbnRzIHdpZGVyIHRoYW4gMXB4ICgjNDEzMzQpLgorCisJKiBzcmMvYXV0b2ZpdC9hZmhpbnRzLmggKEFGX1NlZ21lbnRSZWMpOiBOZXcgbWVtYmVyIGBkZWx0YScuCisKKwkqIHNyYy9hdXRvZml0L2FmbGF0aW4uYyAoYWZfbGF0aW5faGludHNfY29tcHV0ZV9zZWdtZW50cyk6IENvbXB1dGUKKwlgZGVsdGEnLgorCShhZl9sYXRpbl9oaW50c19jb21wdXRlX2VkZ2VzKTogUmVqZWN0IHNlZ21lbnRzIHdpdGggYSBkZWx0YSBsYXJnZXIKKwl0aGFuIDAuNXB4LgorCisyMDE2LTA3LTE0ICBXZXJuZXIgTGVtYmVyZyAgPHdsQGdudS5vcmc+CisKKwkqIGluY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCAoRlRfSVNfTkFNRURfSU5TVEFOQ0UpOiBOZXcgbWFjcm8uCisKKzIwMTYtMDctMTQgIFdlcm5lciBMZW1iZXJnICA8d2xAZ251Lm9yZz4KKworCVtzZm50XSBGaXggYGZhY2VfaW5kZXgnIHZhbHVlIGluIGBGVF9GYWNlJyBmb3IgbmFtZWQgaW5zdGFuY2VzLgorCisJKiBzcmMvc2ZudC9zZm9ianMuYyAoc2ZudF9pbml0X2ZhY2UpOiBEb24ndCBzdHJpcCBvZmYgaGlnaGVyIDE2Yml0cy4KKworMjAxNi0wNy0xNCAgV2VybmVyIExlbWJlcmcgIDx3bEBnbnUub3JnPgorCisJKiBzcmMvdHJ1ZXR5cGUvdHRneHZhci5jIChUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyk6IEZpeCB0cmFjaW5nLgorCisyMDE2LTA3LTE0ICBCZWhkYWQgRXNmYWhib2QgIDxiZWhkYWRAYmVoZGFkLm9yZz4KKworCVt0cnVldHlwZV0gRml4IGd4dmFyIGRlbHRhIGludGVycG9sYXRpb24uCisKKwlUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIGJhc2UgZm9udCBzaG91bGQgYmUgdXNlZCBmb3IgaW50ZXJwb2xhdGlvbgorCXB1cnBvc2VzLCBOT1QgdGhlIGN1cnJlbnQgcG9pbnRzIChpLmUuLCB0aGUgcmVzdWx0IG9mIGFjY3VtdWxhdGlvbgorCW9mIHByZXZpb3VzIGRlbHRhcykuCisKKwkqIHNyYy90cnVldHlwZS90dGd4dmFyLmMgKFRUX1ZhcnlfQXBwbHlfR2x5cGhfRGVsdGFzKTogSW5pdGlhbGl6ZQorCWBwb2ludHNfb3JnJyBiZWZvcmUgbG9vcGluZyBvdmVyIGFsbCB0dXBsZXMuCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAxNi0yMDE4IGJ5CitEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCithbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCitMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQoraW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQKK2Z1bGx5LgorCisKK0xvY2FsIFZhcmlhYmxlczoKK3ZlcnNpb24tY29udHJvbDogbmV2ZXIKK2NvZGluZzogdXRmLTgKK0VuZDoKZGlmZiAtLWdpdCBhL0phbWZpbGUgYi9KYW1maWxlCmluZGV4IGJkNDVlOTQuLmE5ZWIzOTYgMTAwNjQ0Ci0tLSBhL0phbWZpbGUKKysrIGIvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiB0b3AgSmFtZmlsZS4KICMKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTIxMCw3ICsyMTAsNyBAQAogewogICBweXRob24gJChGVDJfU1JDKS90b29scy9kb2NtYWtlci9kb2NtYWtlci5weQogICAgICAgICAgLS1wcmVmaXg9ZnQyCi0gICAgICAgICAtLXRpdGxlPUZyZWVUeXBlLTIuNy4xCisgICAgICAgICAtLXRpdGxlPUZyZWVUeXBlLTIuOQogICAgICAgICAgLS1vdXRwdXQ9JChET0NfRElSKQogICAgICAgICAgJChGVDJfSU5DTFVERSkvZnJlZXR5cGUvKi5oCiAgICAgICAgICAkKEZUMl9JTkNMVURFKS9mcmVldHlwZS9jb25maWcvKi5oCmRpZmYgLS1naXQgYS9KYW1ydWxlcyBiL0phbXJ1bGVzCmluZGV4IDAwNDdlNTMuLmJkZDA0YmMgMTAwNjQ0Ci0tLSBhL0phbXJ1bGVzCisrKyBiL0phbXJ1bGVzCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIEphbVJ1bGVzLgogIwotIyBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxYzQxNDU4Li4wYzdlZTBlIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggZmM3YzQxNy4uMWU3ZWE5NyAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw3ICsxLDcgQEAKLSAgRnJlZVR5cGUgMi43LjEKLSAgPT09PT09PT09PT09PT0KKyAgRnJlZVR5cGUgMi45CisgID09PT09PT09PT09PQogCi0gIEhvbWVwYWdlOiBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZworICBIb21lcGFnZTogaHR0cHM6Ly93d3cuZnJlZXR5cGUub3JnCiAKICAgRnJlZVR5cGUgaXMgYSBmcmVlbHkgYXZhaWxhYmxlIHNvZnR3YXJlIGxpYnJhcnkgdG8gcmVuZGVyIGZvbnRzLgogCkBAIC0yMCwxNyArMjAsMTcgQEAKICAgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXMgYSBzZXBhcmF0ZSBwYWNrYWdlIGZyb20gb3VyIHNpdGVzLiAgR28KICAgdG8KIAotICAgIGh0dHA6Ly9kb3dubG9hZC5zYXZhbm5haC5nbnUub3JnL3JlbGVhc2VzL2ZyZWV0eXBlLworICAgIGh0dHBzOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcy9mcmVldHlwZS8KIAogICBhbmQgZG93bmxvYWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZXMuCiAKLSAgICBmcmVldHlwZS1kb2MtMi43LjEudGFyLmJ6MgotICAgIGZyZWV0eXBlLWRvYy0yLjcuMS50YXIuZ3oKLSAgICBmdGRvYzI3MS56aXAKKyAgICBmcmVldHlwZS1kb2MtMi45LnRhci5iejIKKyAgICBmcmVldHlwZS1kb2MtMi45LnRhci5negorICAgIGZ0ZG9jMjkuemlwCiAKICAgVG8gdmlldyB0aGUgZG9jdW1lbnRhdGlvbiBvbmxpbmUsIGdvIHRvCiAKLSAgICBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy9mcmVldHlwZTIvZG9jdW1lbnRhdGlvbi5odG1sCisgICAgaHR0cHM6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9kb2N1bWVudGF0aW9uLmh0bWwKIAogCiAgIE1haWxpbmcgTGlzdHMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogICBUaGUgbGlzdHMgYXJlIG1vZGVyYXRlZDsgc2VlCiAKLSAgICBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy9jb250YWN0Lmh0bWwKKyAgICBodHRwczovL3d3dy5mcmVldHlwZS5vcmcvY29udGFjdC5odG1sCiAKICAgaG93IHRvIHN1YnNjcmliZS4KIApAQCAtNzEsNyArNzEsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDA2LTIwMTcgYnkKK0NvcHlyaWdodCAyMDA2LTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvUkVBRE1FLmFuZHJvaWQgYi9SRUFETUUuYW5kcm9pZAppbmRleCA3NTJmZDZlLi40Njg0ODY2IDEwMDY0NAotLS0gYS9SRUFETUUuYW5kcm9pZAorKysgYi9SRUFETUUuYW5kcm9pZApAQCAtOSw3ICs5LDYgQEAKICAgdDQyCiAgIHdpbmZudAogICBwY2YKLSAgcHNhdXgKICAgYmRmCiAKIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgZGlzYWJsZWQgaW4gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaDoKZGlmZiAtLWdpdCBhL1JFQURNRS5naXQgYi9SRUFETUUuZ2l0CmluZGV4IDA2Zjc3OGIuLmEzZDdmYzAgMTAwNjQ0Ci0tLSBhL1JFQURNRS5naXQKKysrIGIvUkVBRE1FLmdpdApAQCAtMzcsNyArMzcsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDA1LTIwMTcgYnkKK0NvcHlyaWdodCAyMDA1LTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvUkVBRE1FLnZlcnNpb24gYi9SRUFETUUudmVyc2lvbgppbmRleCAyMjhiNTIwLi4xMDUxNjg4IDEwMDY0NAotLS0gYS9SRUFETUUudmVyc2lvbgorKysgYi9SRUFETUUudmVyc2lvbgpAQCAtMSwzICsxLDMgQEAKLVVSTDogaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZnJlZXR5cGUvZnJlZXR5cGUyLmdpdC9jb21taXQvP2lkPWU0MzJlYmYKLVZlcnNpb246IDQ0N2EwYjYyNjM0ODAyZDhhY2RiNTYwMDhjZmY1ZmY0ZTUwYmUyNDQKK1VSTDogaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZnJlZXR5cGUvZnJlZXR5cGUyLmdpdC9jb21taXQvP2lkPTAzNmJkYzBjOWE0ZmI1NWI0ZmU1YTcyNzZlOTdiNzBiOTVjOGEyNjAKK1ZlcnNpb246IDAzNmJkYzBjOWE0ZmI1NWI0ZmU1YTcyNzZlOTdiNzBiOTVjOGEyNjAKIEJ1Z0NvbXBvbmVudDogNzU5NzAKZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCmluZGV4IDMxYzE1MzQuLmFiOTBlNjQgMTAwNzU1Ci0tLSBhL2F1dG9nZW4uc2gKKysrIGIvYXV0b2dlbi5zaApAQCAtMSw2ICsxLDYgQEAKICMhL2Jpbi9zaAogCi0jIENvcHlyaWdodCAyMDA1LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDUtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvYW1pZ2EvUkVBRE1FIGIvYnVpbGRzL2FtaWdhL1JFQURNRQppbmRleCBmYjQ0MTE2Li4yOWU5N2Q2IDEwMDY0NAotLS0gYS9idWlsZHMvYW1pZ2EvUkVBRE1FCisrKyBiL2J1aWxkcy9hbWlnYS9SRUFETUUKQEAgLTEsNyArMSw3IEBACiAKIFJFQURNRSBmb3IgdGhlIGJ1aWxkcy9hbWlnYSBzdWJkaXJlY3RvcnkuCiAKLUNvcHlyaWdodCAyMDA1LTIwMTcgYnkKK0NvcHlyaWdodCAyMDA1LTIwMTggYnkKIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KIAogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9pbmNsdWRlL2NvbmZpZy9mdGNvbmZpZy5oIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKaW5kZXggOTQzNDg0MS4uMDIxN2UwZSAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKKysrIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0Y29uZmlnLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQW1pZ2Etc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9pbmNsdWRlL2NvbmZpZy9mdG1vZHVsZS5oIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKaW5kZXggMzhlYTRjOS4uZjhiYWFiNSAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKKysrIGIvYnVpbGRzL2FtaWdhL2luY2x1ZGUvY29uZmlnL2Z0bW9kdWxlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQW1pZ2Etc3BlY2lmaWMgRnJlZVR5cGUgbW9kdWxlIHNlbGVjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9tYWtlZmlsZSBiL2J1aWxkcy9hbWlnYS9tYWtlZmlsZQppbmRleCBlNDY3ZjlhLi42MzY3NDM4IDEwMDY0NAotLS0gYS9idWlsZHMvYW1pZ2EvbWFrZWZpbGUKKysrIGIvYnVpbGRzL2FtaWdhL21ha2VmaWxlCkBAIC01LDcgKzUsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDIwMDUtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CiAjIFdlcm5lciBMZW1iZXJnIGFuZCBEZXRsZWYgV/xya25lci4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQgYi9idWlsZHMvYW1pZ2EvbWFrZWZpbGUub3M0CmluZGV4IDgyZWU4NjQuLmMwN2UxODEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbWlnYS9tYWtlZmlsZS5vczQKKysrIGIvYnVpbGRzL2FtaWdhL21ha2VmaWxlLm9zNApAQCAtNCw3ICs0LDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDA1LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDUtMjAxOCBieQogIyBXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvYW1pZ2Evc21ha2VmaWxlIGIvYnVpbGRzL2FtaWdhL3NtYWtlZmlsZQppbmRleCAwOGUwYTM4Li4yOWEzMWU0IDEwMDY0NAotLS0gYS9idWlsZHMvYW1pZ2Evc21ha2VmaWxlCisrKyBiL2J1aWxkcy9hbWlnYS9zbWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMjAwNS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDA1LTIwMTggYnkKICMgV2VybmVyIExlbWJlcmcgYW5kIERldGxlZiBX/HJrbmVyLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0ZGVidWcuYyBiL2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdGRlYnVnLmMKaW5kZXggMWE4OTdjZi4uZjNiYTQ4YyAxMDA2NDQKLS0tIGEvYnVpbGRzL2FtaWdhL3NyYy9iYXNlL2Z0ZGVidWcuYworKysgYi9idWlsZHMvYW1pZ2Evc3JjL2Jhc2UvZnRkZWJ1Zy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgZm9yIGFtaWdhIChib2R5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcgYW5kIERldGxlZiBX/HJrbmVyLiAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9idWlsZHMvYW1pZ2Evc3JjL2Jhc2UvZnRzeXN0ZW0uYyBiL2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jCmluZGV4IGMzOTYwZDkuLmJhYmFlZWIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jCisrKyBiL2J1aWxkcy9hbWlnYS9zcmMvYmFzZS9mdHN5c3RlbS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFtaWdhLXNwZWNpZmljIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcgYW5kIERldGxlZiBX/HJrbmVyLiAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9idWlsZHMvYW5zaS9hbnNpLWRlZi5tayBiL2J1aWxkcy9hbnNpL2Fuc2ktZGVmLm1rCmluZGV4IGQzYzBmMjguLjE0ODRmOTYgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbnNpL2Fuc2ktZGVmLm1rCisrKyBiL2J1aWxkcy9hbnNpL2Fuc2ktZGVmLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9hbnNpL2Fuc2kubWsgYi9idWlsZHMvYW5zaS9hbnNpLm1rCmluZGV4IGIzM2U4Y2UuLmMwNjczMmMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9hbnNpL2Fuc2kubWsKKysrIGIvYnVpbGRzL2Fuc2kvYW5zaS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvYmVvcy9iZW9zLWRlZi5tayBiL2J1aWxkcy9iZW9zL2Jlb3MtZGVmLm1rCmluZGV4IGZhNmYyMzYuLjg5YzU0ZGQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9iZW9zL2Jlb3MtZGVmLm1rCisrKyBiL2J1aWxkcy9iZW9zL2Jlb3MtZGVmLm1rCkBAIC01LDcgKzUsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9iZW9zL2Jlb3MubWsgYi9idWlsZHMvYmVvcy9iZW9zLm1rCmluZGV4IDE4MWVmZTQuLjYxOWNlYWYgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9iZW9zL2Jlb3MubWsKKysrIGIvYnVpbGRzL2Jlb3MvYmVvcy5tawpAQCAtMiw3ICsyLDcgQEAKICMgRnJlZVR5cGUgMiBjb25maWd1cmF0aW9uIHJ1bGVzIGZvciBhIEJlT1Mgc3lzdGVtCiAjCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9iZW9zL2RldGVjdC5tayBiL2J1aWxkcy9iZW9zL2RldGVjdC5tawppbmRleCAzMGY2ZDEwLi44MmY2MjA1IDEwMDY0NAotLS0gYS9idWlsZHMvYmVvcy9kZXRlY3QubWsKKysrIGIvYnVpbGRzL2Jlb3MvZGV0ZWN0Lm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9jbWFrZS9pT1MuY21ha2UgYi9idWlsZHMvY21ha2UvaU9TLmNtYWtlCmluZGV4IDU3MTdlNmEuLmM2ZGE3MGMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jbWFrZS9pT1MuY21ha2UKKysrIGIvYnVpbGRzL2NtYWtlL2lPUy5jbWFrZQpAQCAtMSw2ICsxLDYgQEAKICMgaU9TLmNtYWtlCiAjCi0jIENvcHlyaWdodCAyMDE0LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMTQtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFdyaXR0ZW4gYnkgRGF2aWQgV2ltc2V5IDxkYXZpZEB3aW1zZXkudXM+CmRpZmYgLS1naXQgYS9idWlsZHMvY21ha2UvdGVzdGJ1aWxkLnNoIGIvYnVpbGRzL2NtYWtlL3Rlc3RidWlsZC5zaAppbmRleCAzNGFkZWQ3Li4xZmEzYTE4IDEwMDc1NQotLS0gYS9idWlsZHMvY21ha2UvdGVzdGJ1aWxkLnNoCisrKyBiL2J1aWxkcy9jbWFrZS90ZXN0YnVpbGQuc2gKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2ggLWUKIAotIyBDb3B5cmlnaHQgMjAxNS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDE1LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL2Fuc2ktY2MubWsgYi9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5tawppbmRleCBkNjE5NjQxLi45OWZlOGNiIDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5taworKysgYi9idWlsZHMvY29tcGlsZXIvYW5zaS1jYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvYmNjLWRldi5tayBiL2J1aWxkcy9jb21waWxlci9iY2MtZGV2Lm1rCmluZGV4IDliNDNmZDEuLjhkNjdmYTEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci9iY2MtZGV2Lm1rCisrKyBiL2J1aWxkcy9jb21waWxlci9iY2MtZGV2Lm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9jb21waWxlci9iY2MubWsgYi9idWlsZHMvY29tcGlsZXIvYmNjLm1rCmluZGV4IDgyZTM4MjkuLjAyZDQ4MzMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci9iY2MubWsKKysrIGIvYnVpbGRzL2NvbXBpbGVyL2JjYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvZW14Lm1rIGIvYnVpbGRzL2NvbXBpbGVyL2VteC5tawppbmRleCBhMjVlNGJjLi4yOTI2YjExIDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvZW14Lm1rCisrKyBiL2J1aWxkcy9jb21waWxlci9lbXgubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAzLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL2djYy1kZXYubWsgYi9idWlsZHMvY29tcGlsZXIvZ2NjLWRldi5tawppbmRleCA4OTk0ZmEyLi40OGQyODQ4IDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvZ2NjLWRldi5taworKysgYi9idWlsZHMvY29tcGlsZXIvZ2NjLWRldi5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvZ2NjLm1rIGIvYnVpbGRzL2NvbXBpbGVyL2djYy5tawppbmRleCAzNDY1MDM4Li45Yzc3MjM5IDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvZ2NjLm1rCisrKyBiL2J1aWxkcy9jb21waWxlci9nY2MubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL2NvbXBpbGVyL2ludGVsYy5tayBiL2J1aWxkcy9jb21waWxlci9pbnRlbGMubWsKaW5kZXggMjg3ZGI0NC4uZTkyMzZkMyAxMDA2NDQKLS0tIGEvYnVpbGRzL2NvbXBpbGVyL2ludGVsYy5taworKysgYi9idWlsZHMvY29tcGlsZXIvaW50ZWxjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9jb21waWxlci91bml4LWxjYy5tayBiL2J1aWxkcy9jb21waWxlci91bml4LWxjYy5tawppbmRleCA1NjBjNjFiLi4wOWZmZmViIDEwMDY0NAotLS0gYS9idWlsZHMvY29tcGlsZXIvdW5peC1sY2MubWsKKysrIGIvYnVpbGRzL2NvbXBpbGVyL3VuaXgtbGNjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9jb21waWxlci92aXN1YWxhZ2UubWsgYi9idWlsZHMvY29tcGlsZXIvdmlzdWFsYWdlLm1rCmluZGV4IDJhYTRmYmUuLjEwMjk5ZGEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci92aXN1YWxhZ2UubWsKKysrIGIvYnVpbGRzL2NvbXBpbGVyL3Zpc3VhbGFnZS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvdmlzdWFsYy5tayBiL2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rCmluZGV4IGU4NmVjYzUuLjc0ZjQ5OGIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rCisrKyBiL2J1aWxkcy9jb21waWxlci92aXN1YWxjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9jb21waWxlci93YXRjb20ubWsgYi9idWlsZHMvY29tcGlsZXIvd2F0Y29tLm1rCmluZGV4IDYyYTQ4MTEuLmU0NTU5MjIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci93YXRjb20ubWsKKysrIGIvYnVpbGRzL2NvbXBpbGVyL3dhdGNvbS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvY29tcGlsZXIvd2luLWxjYy5tayBiL2J1aWxkcy9jb21waWxlci93aW4tbGNjLm1rCmluZGV4IDkxYjQyOWUuLjEzNTZjMWMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9jb21waWxlci93aW4tbGNjLm1rCisrKyBiL2J1aWxkcy9jb21waWxlci93aW4tbGNjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9kZXRlY3QubWsgYi9idWlsZHMvZGV0ZWN0Lm1rCmluZGV4IDRlZDQ3OGUuLjc3MWZjMzEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9kZXRlY3QubWsKKysrIGIvYnVpbGRzL2RldGVjdC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0xMzEsNiArMTMxLDkgQEAKIAogIyBTcGVjaWFsIGNhc2UgZm9yIERvcywgV2luZG93cywgT1MvMiwgd2hlcmUgZWNobyAiIiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IQogIworIyBGb3IgYGNtZC5leGUnLCB3ZSB1c2UgMHhGRiBhcyBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3IgYSBwcm90ZWN0ZWQKKyMgc3BhY2UuCisjCiBkb3Nfc2V0dXA6CiAJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQogCUBlY2hvICQoUFJPSkVDVF9USVRMRSkgYnVpbGQgc3lzdGVtIC0tIGF1dG9tYXRpYyBzeXN0ZW0gZGV0ZWN0aW9uCkBAIC0xNDYsNyArMTQ5LDcgQEAKIAlAZWNobyAnJChDT05GSUdfTUspJyBmcm9tIHRoaXMgZGlyZWN0b3J5IHRoZW4gcmVhZCB0aGUgSU5TVEFMTCBmaWxlIGZvciBoZWxwLgogCUB0eXBlIGJ1aWxkcyQoU0VQKW5ld2xpbmUKIAlAZWNobyBPdGhlcndpc2UsIHNpbXBseSB0eXBlICdtYWtlJyBhZ2FpbiB0byBidWlsZCB0aGUgbGlicmFyeS4KLQlAZWNobyBvciAnbWFrZSByZWZkb2MnIHRvIGJ1aWxkIHRoZSBBUEkgcmVmZXJlbmNlICh0aGlzIG5lZWRzIHB5dGhvbiA+PSAyLjYpLgorCUBlY2hvIG9yICdtYWtlIHJlZmRvYycgdG8gYnVpbGQgdGhlIEFQSSByZWZlcmVuY2UgKHRoaXMgbmVlZHMgYXQgbGVhc3QgcHl0aG9uIDIuNikuCiAJQHR5cGUgYnVpbGRzJChTRVApbmV3bGluZQogCUAkKENPUFkpICQoc3Vic3QgLywkKFNFUCksJChDT05GSUdfUlVMRVMpICQoQ09ORklHX01LKSkgPiBudWwKIApkaWZmIC0tZ2l0IGEvYnVpbGRzL2Rvcy9kZXRlY3QubWsgYi9idWlsZHMvZG9zL2RldGVjdC5tawppbmRleCA4NWM0OGRmLi41NWIwZTc2IDEwMDY0NAotLS0gYS9idWlsZHMvZG9zL2RldGVjdC5taworKysgYi9idWlsZHMvZG9zL2RldGVjdC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvZG9zL2Rvcy1kZWYubWsgYi9idWlsZHMvZG9zL2Rvcy1kZWYubWsKaW5kZXggYTZjMmYyMi4uY2IxMTU0ZCAxMDA2NDQKLS0tIGEvYnVpbGRzL2Rvcy9kb3MtZGVmLm1rCisrKyBiL2J1aWxkcy9kb3MvZG9zLWRlZi5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvZG9zL2Rvcy1lbXgubWsgYi9idWlsZHMvZG9zL2Rvcy1lbXgubWsKaW5kZXggODVkZTAzNy4uZGVkY2MzZiAxMDA2NDQKLS0tIGEvYnVpbGRzL2Rvcy9kb3MtZW14Lm1rCisrKyBiL2J1aWxkcy9kb3MvZG9zLWVteC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDAzLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDMtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvZG9zL2Rvcy1nY2MubWsgYi9idWlsZHMvZG9zL2Rvcy1nY2MubWsKaW5kZXggZTM4YWNmYi4uNTMwOTlhYiAxMDA2NDQKLS0tIGEvYnVpbGRzL2Rvcy9kb3MtZ2NjLm1rCisrKyBiL2J1aWxkcy9kb3MvZG9zLWdjYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvZG9zL2Rvcy13YXQubWsgYi9idWlsZHMvZG9zL2Rvcy13YXQubWsKaW5kZXggZGRiNDg3Ni4uMWJkMDBlNyAxMDA2NDQKLS0tIGEvYnVpbGRzL2Rvcy9kb3Mtd2F0Lm1rCisrKyBiL2J1aWxkcy9kb3MvZG9zLXdhdC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDAzLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDMtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvZXhwb3J0cy5tayBiL2J1aWxkcy9leHBvcnRzLm1rCmluZGV4IDEwYjc5ZDMuLjU5ZmUzMWEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9leHBvcnRzLm1rCisrKyBiL2J1aWxkcy9leHBvcnRzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDIwMDUtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9mcmVldHlwZS5tayBiL2J1aWxkcy9mcmVldHlwZS5tawppbmRleCBmOGNmZDQxLi42ZjY4YTBmIDEwMDY0NAotLS0gYS9idWlsZHMvZnJlZXR5cGUubWsKKysrIGIvYnVpbGRzL2ZyZWV0eXBlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTE1Myw2ICsxNTMsOSBAQAogaWZuZXEgKCQod2lsZGNhcmQgJChPQkpfRElSKS9mdG9wdGlvbi5oKSwpCiAgIEZUT1BUSU9OX0ggICAgOj0gJChPQkpfRElSKS9mdG9wdGlvbi5oCiAgIEZUT1BUSU9OX0ZMQUcgOj0gJERGVF9DT05GSUdfT1BUSU9OU19IPSI8ZnRvcHRpb24uaD4iCitlbHNlIGlmbmVxICgkKHdpbGRjYXJkICQoQlVJTERfRElSKS9mdG9wdGlvbi5oKSwpCisgIEZUT1BUSU9OX0ggICAgOj0gJChCVUlMRF9ESVIpL2Z0b3B0aW9uLmgKKyAgRlRPUFRJT05fRkxBRyA6PSAkREZUX0NPTkZJR19PUFRJT05TX0g9IjxmdG9wdGlvbi5oPiIKIGVuZGlmCiAKICMgYENQUEZMQUdTJyBtaWdodCBiZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIgaW4gdGhlIGVudmlyb25tZW50LgpAQCAtMjQ1LDYgKzI0OCwyMiBAQAogCSQoRlRfQ09NUElMRSkgJFQkKHN1YnN0IC8sJChDT01QSUxFUl9TRVApLCRAICQ8KQogCiAKKyMgZnR2ZXIgY29tcG9uZW50CisjCisjICBUaGUgVkVSU0lPTklORk8gcmVzb3VyY2UgYGZ0dmVyLnJjJyBjb250YWlucyB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQKKyMgIHRvIGJlIGNvbXBpbGVkIGJ5IHdpbmRyZXMgYW5kIHRhZ2dlZCBpbnRvIERMTCB1c3VhbGx5LgorIworaWZuZXEgKCQoUkMpLCkKKyAgRlRWRVJfU1JDIDo9ICQoQkFTRV9ESVIpL2Z0dmVyLnJjCisgIEZUVkVSX09CSiA6PSAkKE9CSl9ESVIpL2Z0dmVyLiRPCisKKyAgT0JKRUNUU19MSVNUICs9ICQoRlRWRVJfT0JKKQorCisgICQoRlRWRVJfT0JKKTogJChGVFZFUl9TUkMpCisJJChSQykgLW8gJEAgJDwKK2VuZGlmCisKKwogIyBBbGwgRnJlZVR5cGUgbGlicmFyeSBvYmplY3RzLgogIwogT0JKX00gOj0gJChCQVNFX09CSl9NKSAkKEJBU0VfRVhUX09CSikgJChEUlZfT0JKU19NKQpAQCAtMzI2LDEwICszNDUsOSBAQAogCiAuUEhPTlk6IGNsZWFuIGRpc3RjbGVhbgogCi0jIFRoZSBgY29uZmlnLm1rJyBmaWxlIG11c3QgZGVmaW5lIGBjbGVhbl9mcmVldHlwZScgYW5kCi0jIGBkaXN0Y2xlYW5fZnJlZXR5cGUnLiAgSW1wbGVtZW50YXRpb25zIG1heSB1c2UgdG8gcmVsYXkgdGhlc2UgdG8gZWl0aGVyCi0jIHRoZSBgc3RkJyBvciBgZG9zJyB2ZXJzaW9ucyBmcm9tIGFib3ZlLCBvciBzaW1wbHkgcHJvdmlkZSB0aGVpciBvd24KLSMgaW1wbGVtZW50YXRpb24uCisjIFRoZSBgY29uZmlnLm1rJyBmaWxlIG11c3QgZGVmaW5lIGBjbGVhbl9wcm9qZWN0JyBhbmQgYGRpc3RjbGVhbl9wcm9qZWN0Jy4KKyMgSW1wbGVtZW50YXRpb25zIG1heSB1c2UgdG8gcmVsYXkgdGhlc2UgdG8gZWl0aGVyIHRoZSBgc3RkJyBvciBgZG9zJworIyB2ZXJzaW9ucyBmcm9tIGFib3ZlLCBvciBzaW1wbHkgcHJvdmlkZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24uCiAjCiBjbGVhbjogY2xlYW5fcHJvamVjdAogZGlzdGNsZWFuOiBkaXN0Y2xlYW5fcHJvamVjdCByZW1vdmVfY29uZmlnX21rIHJlbW92ZV9mdG1vZHVsZV9oCmRpZmYgLS1naXQgYS9idWlsZHMvbGlua19kb3MubWsgYi9idWlsZHMvbGlua19kb3MubWsKaW5kZXggMzg1NGU3MC4uM2IwZThkYSAxMDA2NDQKLS0tIGEvYnVpbGRzL2xpbmtfZG9zLm1rCisrKyBiL2J1aWxkcy9saW5rX2Rvcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvbGlua19zdGQubWsgYi9idWlsZHMvbGlua19zdGQubWsKaW5kZXggNGNjMmRjOS4uOGJhNWU2NCAxMDA2NDQKLS0tIGEvYnVpbGRzL2xpbmtfc3RkLm1rCisrKyBiL2J1aWxkcy9saW5rX3N0ZC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvbWFjL2Z0bWFjLmMgYi9idWlsZHMvbWFjL2Z0bWFjLmMKaW5kZXggNjBjZjczZS4uYzQ1NTQ2YyAxMDA2NDQKLS0tIGEvYnVpbGRzL21hYy9mdG1hYy5jCisrKyBiL2J1aWxkcy9tYWMvZnRtYWMuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIE1hYyBGT05EIHN1cHBvcnQuICBXcml0dGVuIGJ5IGp1c3RAbGV0dGVycm9yLmNvbS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgSGVhdmlseSBGaXhlZCBieSBtcHN1enVraSwgR2VvcmdlIFdpbGxpYW1zIGFuZCBTZWFuIE1jQnJpZGUgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTQyMyw3ICsxNDIzLDcgQEAKICAgLyogICAgYWNjZXB0cyBhbiBGU1JlZiBpbnN0ZWFkIG9mIGEgcGF0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBDYXJib24gZGF0YSB0eXBlcyAoRlNSZWYpICAgICAgICAgKi8KLSAgLyogYXJlIG5vdCBjcm9zcy1wbGF0Zm9ybSwgYW5kIHRodXMgbm90IHN1aXRhYmxlIGZvciB0aGUgZnJlZXR5cGUgQVBJLiAgICovCisgIC8qIGFyZSBub3QgY3Jvc3MtcGxhdGZvcm0sIGFuZCB0aHVzIG5vdCBzdWl0YWJsZSBmb3IgdGhlIEZyZWVUeXBlIEFQSS4gICAqLwogICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCiAgIEZUX05ld19GYWNlX0Zyb21fRlNSZWYoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlNSZWYqICByZWYsCkBAIC0xNDgxLDcgKzE0ODEsNyBAQAogICAvKiAgICBhY2NlcHRzIGFuIEZTU3BlYyBpbnN0ZWFkIG9mIGEgcGF0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBiZWNhdXNlIENhcmJvbiBkYXRhIHR5cGVzIChGU1NwZWMpICAgICAgICAqLwotICAvKiBhcmUgbm90IGNyb3NzLXBsYXRmb3JtLCBhbmQgdGh1cyBub3Qgc3VpdGFibGUgZm9yIHRoZSBmcmVldHlwZSBBUEkuICAgKi8KKyAgLyogYXJlIG5vdCBjcm9zcy1wbGF0Zm9ybSwgYW5kIHRodXMgbm90IHN1aXRhYmxlIGZvciB0aGUgRnJlZVR5cGUgQVBJLiAgICovCiAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMoIEZUX0xpYnJhcnkgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGU1NwZWMqICBzcGVjLApkaWZmIC0tZ2l0IGEvYnVpbGRzL21vZHVsZXMubWsgYi9idWlsZHMvbW9kdWxlcy5tawppbmRleCBhODlkNTc5Li5lMWVkYjE3IDEwMDY0NAotLS0gYS9idWlsZHMvbW9kdWxlcy5taworKysgYi9idWlsZHMvbW9kdWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvb3MyL2RldGVjdC5tayBiL2J1aWxkcy9vczIvZGV0ZWN0Lm1rCmluZGV4IDNlYTY4ZmIuLjJlZGI4ZDQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9vczIvZGV0ZWN0Lm1rCisrKyBiL2J1aWxkcy9vczIvZGV0ZWN0Lm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9vczIvb3MyLWRlZi5tayBiL2J1aWxkcy9vczIvb3MyLWRlZi5tawppbmRleCAyZmU2MjYzLi43YWQxZmZiIDEwMDY0NAotLS0gYS9idWlsZHMvb3MyL29zMi1kZWYubWsKKysrIGIvYnVpbGRzL29zMi9vczItZGVmLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9vczIvb3MyLWRldi5tayBiL2J1aWxkcy9vczIvb3MyLWRldi5tawppbmRleCA4NDJhMjg5Li41MDVhNzU0IDEwMDY0NAotLS0gYS9idWlsZHMvb3MyL29zMi1kZXYubWsKKysrIGIvYnVpbGRzL29zMi9vczItZGV2Lm1rCkBAIC01LDcgKzUsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9vczIvb3MyLWdjYy5tayBiL2J1aWxkcy9vczIvb3MyLWdjYy5tawppbmRleCA0Y2RmZmJhLi42NTAyNmIxIDEwMDY0NAotLS0gYS9idWlsZHMvb3MyL29zMi1nY2MubWsKKysrIGIvYnVpbGRzL29zMi9vczItZ2NjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy9zeW1iaWFuL2JsZC5pbmYgYi9idWlsZHMvc3ltYmlhbi9ibGQuaW5mCmluZGV4IDgwODcyMDIuLjljNmQ4ZGMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9zeW1iaWFuL2JsZC5pbmYKKysrIGIvYnVpbGRzL3N5bWJpYW4vYmxkLmluZgpAQCAtMiw3ICsyLDcgQEAKIC8vIEZyZWVUeXBlIDIgcHJvamVjdCBmb3IgdGhlIHN5bWJpYW4gcGxhdGZvcm0KIC8vCiAKLS8vIENvcHlyaWdodCAyMDA4LTIwMTcgYnkKKy8vIENvcHlyaWdodCAyMDA4LTIwMTggYnkKIC8vIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIC8vCiAvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMjUsMTAgKzI1LDE0IEBACiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCWNvbmZpZy9mdG9wdGlvbi5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCWNvbmZpZy9mdHN0ZGxpYi5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgJCWZyZWV0eXBlLmgKKy4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaAkJZnRhZHZhbmMuaAorLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdGF1dG9oLmgJCWZ0YXV0b2guaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdGJib3guaAkJCWZ0YmJveC5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgJCQlmdGJkZi5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgJCWZ0Yml0bWFwLmgKKy4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRiemlwMi5oCQlmdGJ6aXAyLmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oCQlmdGNhY2hlLmgKKy4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRjZmZkcnYuaAkJZnRjZmZkcnYuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdGNpZC5oCQkJZnRjaWQuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oCQlmdGVycmRlZi5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmgJCWZ0ZXJyb3JzLmgKQEAgLTM3LDcgKzQxLDYgQEAKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCQlmdGdseXBoLmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCQlmdGd4dmFsLmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmgJCQlmdGd6aXAuaAotLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgJCWZ0YnppcDIuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgJCWZ0aW1hZ2UuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oCQlmdGluY3JlbS5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgJCWZ0bGNkZmlsLmgKQEAgLTQ5LDYgKzUyLDggQEAKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaAkJZnRtb2RlcnIuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmgJCWZ0b3R2YWwuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmgJCWZ0b3V0bG4uaAorLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdHBhcmFtcy5oCQlmdHBhcmFtcy5oCisuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGNmZHJ2LmgJCWZ0cGNmZHJ2LmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaAkJCWZ0cGZyLmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaAkJZnRyZW5kZXIuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgJCWZ0c2l6ZXMuaApAQCAtNTYsMTEgKzYxLDEyIEBACiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmgJCWZ0c3Ryb2tlLmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRzeW50aC5oCQlmdHN5bnRoLmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvZnRzeXN0ZW0uaAkJZnRzeXN0ZW0uaAorLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdHQxZHJ2LmgJCWZ0dDFkcnYuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCQlmdHRyaWdvbi5oCisuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHRkcnYuaAkJZnR0dGRydi5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHlwZXMuaAkJZnR0eXBlcy5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2Z0d2luZm50LmgJCWZ0d2luZm50LmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaAkJdDF0YWJsZXMuaAogLi4vLi4vaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oCQl0dG5hbWVpZC5oCiAuLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgJCXR0dGFibGVzLmgKIC4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmgJCQl0dHRhZ3MuaAotLi4vLi4vaW5jbHVkZS9mcmVldHlwZS90dHVucGF0LmgJCXR0dW5wYXQuaApkaWZmIC0tZ2l0IGEvYnVpbGRzL3N5bWJpYW4vZnJlZXR5cGUubW1wIGIvYnVpbGRzL3N5bWJpYW4vZnJlZXR5cGUubW1wCmluZGV4IDZmZTczMzMuLmQzYjk1ZWYgMTAwNjQ0Ci0tLSBhL2J1aWxkcy9zeW1iaWFuL2ZyZWV0eXBlLm1tcAorKysgYi9idWlsZHMvc3ltYmlhbi9mcmVldHlwZS5tbXAKQEAgLTIsNyArMiw3IEBACiAvLyBGcmVlVHlwZSAyIG1ha2VmaWxlIGZvciB0aGUgc3ltYmlhbiBwbGF0Zm9ybQogLy8KIAotLy8gQ29weXJpZ2h0IDIwMDgtMjAxNyBieQorLy8gQ29weXJpZ2h0IDIwMDgtMjAxOCBieQogLy8gRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC00OSw2ICs0OSwxMCBAQAogCiBzb3VyY2UgYmRmLmMKIAorc291cmNlcGF0aCAuLlwuLlxzcmNcYnppcDIKKworc291cmNlIGZ0YnppcDIuYworCiBzb3VyY2VwYXRoIC4uXC4uXHNyY1xjYWNoZQogCiBzb3VyY2UgZnRjYWNoZS5jCkBAIC02NSwxMCArNjksNiBAQAogCiBzb3VyY2UgZnRnemlwLmMKIAotc291cmNlcGF0aCAuLlwuLlxzcmNcYnppcDIKLQotc291cmNlIGZ0YnppcDIuYwotCiBzb3VyY2VwYXRoIC4uXC4uXHNyY1xsencKIAogc291cmNlIGZ0bHp3LmMKQEAgLTEyNiwxMiArMTI2LDEyIEBACiBzeXN0ZW1pbmNsdWRlCQlcZXBvYzMyXGluY2x1ZGVcc3RkYXBpcwogdXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xhdXRvZml0CiB1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXGJkZgordXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xiemlwMgogdXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xjYWNoZQogdXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xjZmYKIHVzZXJpbmNsdWRlCQkuLlwuLlxzcmNcY2lkCiB1c2VyaW5jbHVkZQkJLi5cLi5cc3JjXGd4dmFsaWQKIHVzZXJpbmNsdWRlCQkuLlwuLlxzcmNcZ3ppcAotdXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xiemlwMgogdXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xsencKIHVzZXJpbmNsdWRlCQkuLlwuLlxzcmNcb3R2YWxpZAogdXNlcmluY2x1ZGUJCS4uXC4uXHNyY1xwY2YKZGlmZiAtLWdpdCBhL2J1aWxkcy90b3BsZXZlbC5tayBiL2J1aWxkcy90b3BsZXZlbC5tawppbmRleCA3YjFkMDNiLi5mNTFhZDE2IDEwMDY0NAotLS0gYS9idWlsZHMvdG9wbGV2ZWwubWsKKysrIGIvYnVpbGRzL3RvcGxldmVsLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4Ly5naXRpZ25vcmUgYi9idWlsZHMvdW5peC8uZ2l0aWdub3JlCmluZGV4IGU0ZTBhMTIuLmY4OWIyMjYgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4Ly5naXRpZ25vcmUKKysrIGIvYnVpbGRzL3VuaXgvLmdpdGlnbm9yZQpAQCAtMTAsNiArMTAsNyBAQAogZnJlZXR5cGUyLnBjCiBmcmVldHlwZS1jb25maWcKIGZ0Y29uZmlnLmgKK2Z0b3B0aW9uLmgKIGluc3RhbGwtc2gKIGxpYnRvb2wKIGx0bWFpbi5zaApkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdyBiL2J1aWxkcy91bml4L2NvbmZpZ3VyZS5yYXcKaW5kZXggNWJjMGU0OS4uZDc2YzMyNCAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvY29uZmlndXJlLnJhdworKysgYi9idWlsZHMvdW5peC9jb25maWd1cmUucmF3CkBAIC0yLDcgKzIsNyBAQAogIwogIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgogIwotIyBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMTcsNyArMTcsNyBAQAogCiAjIERvbid0IGZvcmdldCB0byB1cGRhdGUgYGRvY3MvVkVSU0lPTlMuVFhUJyEKIAotdmVyc2lvbl9pbmZvPScxOTowOjEzJwordmVyc2lvbl9pbmZvPScyMjowOjE2JwogQUNfU1VCU1QoW3ZlcnNpb25faW5mb10pCiBmdF92ZXJzaW9uPWBlY2hvICR2ZXJzaW9uX2luZm8gfCB0ciA6IC5gCiBBQ19TVUJTVChbZnRfdmVyc2lvbl0pCkBAIC0zNyw2ICszNyw3IEBACiBQS0dfUFJPR19QS0dfQ09ORklHKFswLjI0XSkKIAogTFRfSU5JVCh3aW4zMi1kbGwpCitMVF9QUk9HX1JDCiAKIAogIyBjaGVja3MgZm9yIG5hdGl2ZSBwcm9ncmFtcyB0byBnZW5lcmF0ZSBidWlsZGluZyB0b29sCkBAIC0xMTIsMTUgKzExMywxMyBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgY3BwIGNvbXB1dGF0aW9uIG9mIGJpdCBsZW5ndGggaW4gZnRjb25maWcuaW4gd29ya3NdKQogb3JpZ19DUFBGTEFHUz0iJHtDUFBGTEFHU30iCi1DUFBGTEFHUz0iLUkke3NyY2Rpcn0gLUkuICR7Q1BQRkxBR1N9IgorQ1BQRkxBR1M9Ii1JJHtzcmNkaXJ9IC1JLiAtSSR7c3JjZGlyfS8uLi8uLi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZyAke0NQUEZMQUdTfSIKIAogYWNfY2xlYW5fZmlsZXM9Ci1mb3IgZiBpbiBmdDJidWlsZC5oIGZ0b3B0aW9uLmggZnRzdGRsaWIuaDsgZG8KLSAgaWYgdGVzdCAhIC1mICRmOyB0aGVuCi0gICAgYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkZiIKLSAgICB0b3VjaCAkZgotICBmaQotZG9uZQoraWYgdGVzdCAhIC1mIGZ0MmJ1aWxkLmg7IHRoZW4KKyAgYWNfY2xlYW5fZmlsZXM9ZnQyYnVpbGQuaAorICB0b3VjaCBmdDJidWlsZC5oCitmaQogCiBjYXQgPiBjb25mdGVzdC5jIDw8XF9BQ0VPRgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtMjc1LDcgKzI3NCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICBdKV0sCi0gICAgICAgIFtBQ19NU0dfUkVTVUxUKFtvaywgYWRkIGl0IHRvIFhYX0FOU0lGTEFHU10pCisgICAgICAgIFtBQ19NU0dfUkVTVUxUKFtvaywgYWRkaW5nIHRvIFhYX0FOU0lGTEFHU10pCiAgICAgICAgICBYWF9BTlNJRkxBR1M9IiR7WFhfQU5TSUZMQUdTfSAke2F9IgogICAgICAgICBdLAogICAgICAgICBbQUNfTVNHX1JFU1VMVChbbm9dKV0pCkBAIC01MTEsNiArNTEwLDIxIEBACiBmaQogCiAKKyMgY2hlY2sgZm9yIGxpYnJ0CisjCisjIFdlIG5lZWQgYGNsb2NrX2dldHRpbWUnIGZvciB0aGUgYGZ0YmVuY2gnIGRlbW8gcHJvZ3JhbS4KKyMKKyMgVGhlIGNvZGUgaXMgbW9kZWxlZCBhZnRlciBnbnVsaWIncyBmaWxlIGBjbG9ja190aW1lLm00JywgaWdub3JpbmcKKyMgdmVyeSBvbGQgU29sYXJpcyBzeXN0ZW1zLgorCitMSUJfQ0xPQ0tfR0VUVElNRT0KK0FDX1NFQVJDSF9MSUJTKFtjbG9ja19nZXR0aW1lXSwKKyAgICAgICAgICAgICAgIFtydF0sCisgICAgICAgICAgICAgICBbdGVzdCAiJGFjX2N2X3NlYXJjaF9jbG9ja19nZXR0aW1lIiA9ICJub25lIHJlcXVpcmVkIiBcCisgICAgICAgICAgICAgICAgfHwgTElCX0NMT0NLX0dFVFRJTUU9JGFjX2N2X3NlYXJjaF9jbG9ja19nZXR0aW1lXSkKK0FDX1NVQlNUKFtMSUJfQ0xPQ0tfR0VUVElNRV0pCisKKwogIyBTb21lIG9wdGlvbnMgaGFuZGxpbmcgU0RLcy9hcmNocyBpbiBDRkxBR1Mgc2hvdWxkIGJlIGNvcGllZAogIyB0byBMREZMQUdTLiBBcHBsZSBUZWNoTm90ZSAyMTM3IHJlY29tbWVuZHMgdG8gaW5jbHVkZSB0aGVzZQogIyBvcHRpb25zIGluIENGTEFHUyBidXQgbm90IGluIExERkxBR1MuCkBAIC05NzcsMjcgKzk5MSw2MyBAQAogIyBjaGFuZ2luZyBMREZMQUdTIHZhbHVlIHNob3VsZCBvbmx5IGJlIGRvbmUgYWZ0ZXIKICMgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MgdGVzdAogCi1pZiB0ZXN0ICIkaGF2ZV96bGliIiAhPSBubzsgdGhlbgotICBDRkxBR1M9IiRDRkxBR1MgJFpMSUJfQ0ZMQUdTIC1ERlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQiIKLSAgTERGTEFHUz0iJExERkxBR1MgJFpMSUJfTElCUyIKLWZpCitmdG9wdGlvbl9zZXQoKQoreworICByZWdleHA9Ii1lIFxcXCJzfC4qIy4qZGVmLiokMS4qfCNkZWZpbmUgJDF8XFxcIiIKKyAgRlRPUFRJT05fSF9TRUQ9IiRGVE9QVElPTl9IX1NFRCAkcmVnZXhwIgorfQogCitmdG9wdGlvbl91bnNldCgpCit7CisgIHJlZ2V4cD0iLWUgXFxcInN8LiojLipkZWYuKiQxLip8LyogI3VuZGVmICQxICovfFxcXCIiCisgIEZUT1BUSU9OX0hfU0VEPSIkRlRPUFRJT05fSF9TRUQgJHJlZ2V4cCIKK30KKworaWYgdGVzdCAiJGhhdmVfemxpYiIgIT0gbm87IHRoZW4KKyAgQ0ZMQUdTPSIkQ0ZMQUdTICRaTElCX0NGTEFHUyIKKyAgTERGTEFHUz0iJExERkxBR1MgJFpMSUJfTElCUyIKKyAgZnRvcHRpb25fc2V0IEZUX0NPTkZJR19PUFRJT05fU1lTVEVNX1pMSUIKK2Vsc2UKKyAgZnRvcHRpb25fdW5zZXQgRlRfQ09ORklHX09QVElPTl9TWVNURU1fWkxJQgorZmkKIGlmIHRlc3QgIiRoYXZlX2J6aXAyIiAhPSBubzsgdGhlbgotICBDRkxBR1M9IiRDRkxBR1MgJEJaSVAyX0NGTEFHUyAtREZUX0NPTkZJR19PUFRJT05fVVNFX0JaSVAyIgorICBDRkxBR1M9IiRDRkxBR1MgJEJaSVAyX0NGTEFHUyIKICAgTERGTEFHUz0iJExERkxBR1MgJEJaSVAyX0xJQlMiCisgIGZ0b3B0aW9uX3NldCBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMgorZWxzZQorICBmdG9wdGlvbl91bnNldCBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMgogZmkKIGlmIHRlc3QgIiRoYXZlX2xpYnBuZyIgIT0gbm87IHRoZW4KLSAgQ0ZMQUdTPSIkQ0ZMQUdTICRMSUJQTkdfQ0ZMQUdTIC1ERlRfQ09ORklHX09QVElPTl9VU0VfUE5HIgorICBDRkxBR1M9IiRDRkxBR1MgJExJQlBOR19DRkxBR1MiCiAgIExERkxBR1M9IiRMREZMQUdTICRMSUJQTkdfTElCUyIKKyAgZnRvcHRpb25fc2V0IEZUX0NPTkZJR19PUFRJT05fVVNFX1BORworZWxzZQorICBmdG9wdGlvbl91bnNldCBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcKIGZpCiBpZiB0ZXN0ICIkaGF2ZV9oYXJmYnV6eiIgIT0gbm87IHRoZW4KLSAgQ0ZMQUdTPSIkQ0ZMQUdTICRIQVJGQlVaWl9DRkxBR1MgLURGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICRIQVJGQlVaWl9DRkxBR1MiCiAgIExERkxBR1M9IiRMREZMQUdTICRIQVJGQlVaWl9MSUJTIgorICBmdG9wdGlvbl9zZXQgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKK2Vsc2UKKyAgZnRvcHRpb25fdW5zZXQgRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWloKIGZpCiAKIEFDX1NVQlNUKFtDRkxBR1NdKQogQUNfU1VCU1QoW0xERkxBR1NdKQogCisjIFdlIGRvbid0IHdhbnQgdG8gdXNlIGEgdGVtcGxhdGUgZmlsZSBmb3IgYGZ0b3B0aW9uLmgnLCBzaW5jZSBjb21waWxhdGlvbgorIyBzaG91bGQgd29yayB3aXRob3V0IGNhbGxpbmcgYSBjb25maWd1cmUgc2NyaXB0IGFsc28uICBGb3IgdGhpcyByZWFzb24sIHdlCisjIGNvcHkgdGhlIGBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oJyBmaWxlIHRvIHRoZSBgdW5peC9idWlsZHMnCisjIGRpcmVjdG9yeSAodXNpbmcgYSBkdW1teSBgQUNfQ09ORklHX0ZJTEVTJyBjYWxsKSBhbmQgYXBwbHkgdGhlIGp1c3QKKyMgY29uc3RydWN0ZWQgJEZUT1BUSU9OX0hfU0VEIHJlZ2V4cCAodXNpbmcgdGhlIHBvc3QtYWN0aW9uIG9mCisjIGBBQ19DT05GSUdfRklMRVMnKTsgdGhpcyBpcyBhbHNvIHRoZSB2ZXJzaW9uIHRoYXQgZ2V0cyBpbnN0YWxsZWQgbGF0ZXIgb24uCisjCitBQ19DT05GSUdfRklMRVMoW2Z0b3B0aW9uLmg6JHtzcmNkaXJ9Ly4uLy4uL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmhdLAorICBbbXYgZnRvcHRpb24uaCBmdG9wdGlvbi50bXAKKyAgIGV2YWwgInNlZCAkRlRPUFRJT05fSF9TRUQgPCBmdG9wdGlvbi50bXAgPiBmdG9wdGlvbi5oIgorICAgcm0gZnRvcHRpb24udG1wXSwKKyAgW0ZUT1BUSU9OX0hfU0VEPSIkRlRPUFRJT05fSF9TRUQiXSkKKwogIyBjb25maWd1cmF0aW9uIGZpbGUgLS0gc3RheSBpbiA4LjMgbGltaXQKICMKICMgc2luY2UgI3VuZGVmIGRvZXNuJ3Qgc3Vydml2ZSBpbiBjb25maWd1cmF0aW9uIGhlYWRlciBmaWxlcyB3ZSByZXBsYWNlCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9kZXRlY3QubWsgYi9idWlsZHMvdW5peC9kZXRlY3QubWsKaW5kZXggYTJjZjBhNy4uNTRkYWEwNyAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvZGV0ZWN0Lm1rCisrKyBiL2J1aWxkcy91bml4L2RldGVjdC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW4gYi9idWlsZHMvdW5peC9mcmVldHlwZS1jb25maWcuaW4KaW5kZXggOTdkZTEzNC4uMmQ1YjkwZCAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluCisrKyBiL2J1aWxkcy91bml4L2ZyZWV0eXBlLWNvbmZpZy5pbgpAQCAtMSw2ICsxLDYgQEAKICMhIC9iaW4vc2gKICMKLSMgQ29weXJpZ2h0IDIwMDAtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTE0LDcgKzE0LDcgQEAKIAogCiAjIGlmIGBwa2ctY29uZmlnJyBpcyBhdmFpbGFibGUsIHVzZSB2YWx1ZXMgZnJvbSBgZnJlZXR5cGUyLnBjJwotcGtnLWNvbmZpZyAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxCislUEtHX0NPTkZJRyUgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjQgPi9kZXYvbnVsbCAyPiYxCiBpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgogICAjIG5vdGUgdGhhdCBvcHRpb24gYC0tdmFyaWFibGUnIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUKICAgIyBQS0dfQ09ORklHX1NZU1JPT1RfRElSIGVudmlyb25tZW50IHZhcmlhYmxlCkBAIC0yMywxNyArMjMsMTcgQEAKICAgICBleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUgogICBmaQogCi0gIHByZWZpeD1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlIHByZWZpeCBmcmVldHlwZTJgCi0gIGV4ZWNfcHJlZml4PWBwa2ctY29uZmlnIC0tdmFyaWFibGUgZXhlY19wcmVmaXggZnJlZXR5cGUyYAorICBwcmVmaXg9YCVQS0dfQ09ORklHJSAtLXZhcmlhYmxlIHByZWZpeCBmcmVldHlwZTJgCisgIGV4ZWNfcHJlZml4PWAlUEtHX0NPTkZJRyUgLS12YXJpYWJsZSBleGVjX3ByZWZpeCBmcmVldHlwZTJgCiAKLSAgaW5jbHVkZWRpcj1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlIGluY2x1ZGVkaXIgZnJlZXR5cGUyYAotICBsaWJkaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZSBsaWJkaXIgZnJlZXR5cGUyYAorICBpbmNsdWRlZGlyPWAlUEtHX0NPTkZJRyUgLS12YXJpYWJsZSBpbmNsdWRlZGlyIGZyZWV0eXBlMmAKKyAgbGliZGlyPWAlUEtHX0NPTkZJRyUgLS12YXJpYWJsZSBsaWJkaXIgZnJlZXR5cGUyYAogCi0gIHZlcnNpb249YHBrZy1jb25maWcgLS1tb2R2ZXJzaW9uIGZyZWV0eXBlMmAKKyAgdmVyc2lvbj1gJVBLR19DT05GSUclIC0tbW9kdmVyc2lvbiBmcmVldHlwZTJgCiAKLSAgY2ZsYWdzPWBwa2ctY29uZmlnIC0tY2ZsYWdzIGZyZWV0eXBlMmAKLSAgZHluYW1pY19saWJzPWBwa2ctY29uZmlnIC0tbGlicyBmcmVldHlwZTJgCi0gIHN0YXRpY19saWJzPWBwa2ctY29uZmlnIC0tc3RhdGljIC0tbGlicyBmcmVldHlwZTJgCisgIGNmbGFncz1gJVBLR19DT05GSUclIC0tY2ZsYWdzIGZyZWV0eXBlMmAKKyAgZHluYW1pY19saWJzPWAlUEtHX0NPTkZJRyUgLS1saWJzIGZyZWV0eXBlMmAKKyAgc3RhdGljX2xpYnM9YCVQS0dfQ09ORklHJSAtLXN0YXRpYyAtLWxpYnMgZnJlZXR5cGUyYAogZWxzZQogICBwcmVmaXg9IiVwcmVmaXglIgogICBleGVjX3ByZWZpeD0iJWV4ZWNfcHJlZml4JSIKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2ZyZWV0eXBlMi5pbiBiL2J1aWxkcy91bml4L2ZyZWV0eXBlMi5pbgppbmRleCBjNGRmZGE0Li4yZDc1OWVjIDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC9mcmVldHlwZTIuaW4KKysrIGIvYnVpbGRzL3VuaXgvZnJlZXR5cGUyLmluCkBAIC00LDcgKzQsNyBAQAogaW5jbHVkZWRpcj0laW5jbHVkZWRpciUKIAogTmFtZTogRnJlZVR5cGUgMgotVVJMOiBodHRwOi8vZnJlZXR5cGUub3JnCitVUkw6IGh0dHBzOi8vZnJlZXR5cGUub3JnCiBEZXNjcmlwdGlvbjogQSBmcmVlLCBoaWdoLXF1YWxpdHksIGFuZCBwb3J0YWJsZSBmb250IGVuZ2luZS4KIFZlcnNpb246ICVmdF92ZXJzaW9uJQogUmVxdWlyZXM6CmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC9mcmVldHlwZTIubTQgYi9idWlsZHMvdW5peC9mcmVldHlwZTIubTQKaW5kZXggMTcyMjEyZi4uYWYyZTY1OSAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvZnJlZXR5cGUyLm00CisrKyBiL2J1aWxkcy91bml4L2ZyZWV0eXBlMi5tNApAQCAtMSw3ICsxLDcgQEAKICMgQ29uZmlndXJlIHBhdGhzIGZvciBGcmVlVHlwZTIKICMgTWFyY2VsbyBNYWdhbGxvbiAyMDAxLTEwLTI2LCBiYXNlZCBvbiBndGsubTQgYnkgT3dlbiBUYXlsb3IKICMKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2Z0LW11bm1hcC5tNCBiL2J1aWxkcy91bml4L2Z0LW11bm1hcC5tNAppbmRleCAyN2RkN2Q1Li4wMGVkYTQ5IDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC9mdC1tdW5tYXAubTQKKysrIGIvYnVpbGRzL3VuaXgvZnQtbXVubWFwLm00CkBAIC0xLDYgKzEsNiBAQAogIyMgRnJlZVR5cGUgc3BlY2lmaWMgYXV0b2NvbmYgdGVzdHMKICMKLSMgQ29weXJpZ2h0IDIwMDItMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2Z0Y29uZmlnLmluIGIvYnVpbGRzL3VuaXgvZnRjb25maWcuaW4KaW5kZXggMGJjOTNmMS4uY2E5MDU4OCAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvZnRjb25maWcuaW4KKysrIGIvYnVpbGRzL3VuaXgvZnRjb25maWcuaW4KQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVU5JWC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM2NSw2ICszNjUsMTUgQEAKICNlbmRpZgogCiAKKyNpZmRlZiBfV0lONjQKKyAgLyogb25seSA2NGJpdCBXaW5kb3dzIHVzZXMgdGhlIExMUDY0IGRhdGEgbW9kZWwsIGkuZS4sICovCisgIC8qIDMyYml0IGludGVnZXJzLCA2NGJpdCBwb2ludGVycyAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9VSU5UX1RPX1BPSU5URVIoIHggKSAodm9pZCopKHVuc2lnbmVkIF9faW50NjQpKHgpCisjZWxzZQorI2RlZmluZSBGVF9VSU5UX1RPX1BPSU5URVIoIHggKSAodm9pZCopKHVuc2lnbmVkIGxvbmcpKHgpCisjZW5kaWYKKworCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogbWlzY2VsbGFuZW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zODgsNiArMzk3LDE0IEBACiAjZW5kaWYKIAogCisgIC8qIFVzZSBGVF9MT0NBTCBhbmQgRlRfTE9DQUxfREVGIHRvIGRlY2xhcmUgYW5kIGRlZmluZSwgcmVzcGVjdGl2ZWx5LCAqLworICAvKiBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyB1c2VkIG9ubHkgd2l0aGluIHRoZSBzY29wZSBvZiBhIG1vZHVsZS4gICAgICAgKi8KKyAgLyogTm9ybWFsbHksIGJvdGggdGhlIGhlYWRlciBhbmQgc291cmNlIGNvZGUgZmlsZXMgZm9yIHN1Y2ggYSAgICAgICAgICovCisgIC8qIGZ1bmN0aW9uIGFyZSB3aXRoaW4gYSBzaW5nbGUgbW9kdWxlIGRpcmVjdG9yeS4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSW50cmEtbW9kdWxlIGFycmF5cyBzaG91bGQgYmUgdGFnZ2VkIHdpdGggRlRfTE9DQUxfQVJSQVkgYW5kICAgICAgICovCisgIC8qIEZUX0xPQ0FMX0FSUkFZX0RFRi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpZmRlZiBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAKICNkZWZpbmUgRlRfTE9DQUwoIHggKSAgICAgIHN0YXRpYyAgeApAQCAtNDA5LDYgKzQyNiwxMiBAQAogI2RlZmluZSBGVF9MT0NBTF9BUlJBWV9ERUYoIHggKSAgY29uc3QgIHgKIAogCisgIC8qIFVzZSBGVF9CQVNFIGFuZCBGVF9CQVNFX0RFRiB0byBkZWNsYXJlIGFuZCBkZWZpbmUsIHJlc3BlY3RpdmVseSwgKi8KKyAgLyogZnVuY3Rpb25zIHRoYXQgYXJlIHVzZWQgaW4gbW9yZSB0aGFuIGEgc2luZ2xlIG1vZHVsZS4gIEluIHRoZSAgICAqLworICAvKiBjdXJyZW50IHNldHVwIHRoaXMgaW1wbGllcyB0aGF0IHRoZSBkZWNsYXJhdGlvbiBpcyBpbiBhIGhlYWRlciAgICovCisgIC8qIGZpbGUgaW4gdGhlIGBpbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsJyBkaXJlY3RvcnksIGFuZCB0aGUgICAgICAgKi8KKyAgLyogZnVuY3Rpb24gYm9keSBpcyBpbiBhIGZpbGUgaW4gYHNyYy9iYXNlJy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWZuZGVmIEZUX0JBU0UKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC00MzEsNiArNDU0LDM3IEBACiAjZW5kaWYgLyogIUZUX0JBU0VfREVGICovCiAKIAorICAvKiAgIFdoZW4gY29tcGlsaW5nIEZyZWVUeXBlIGFzIGEgRExMLCBzb21lIHN5c3RlbXMvY29tcGlsZXJzIG5lZWQgYSAgICAgKi8KKyAgLyogICBzcGVjaWFsIGF0dHJpYnV0ZSBpbiBmcm9udCBPUiBhZnRlciB0aGUgcmV0dXJuIHR5cGUgb2YgZnVuY3Rpb24gICAgICovCisgIC8qICAgZGVjbGFyYXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUd28gbWFjcm9zIGFyZSB1c2VkIHdpdGhpbiB0aGUgRnJlZVR5cGUgc291cmNlIGNvZGUgdG8gZGVmaW5lICAgICAgICovCisgIC8qICAgZXhwb3J0ZWQgbGlicmFyeSBmdW5jdGlvbnM6IEZUX0VYUE9SVCBhbmQgRlRfRVhQT1JUX0RFRi4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VYUE9SVCggcmV0dXJuX3R5cGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgRlRfRVhQT1JUKCBGVF9FcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApOyAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgRlRfRVhQT1JUX0RFRiggcmV0dXJuX3R5cGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGlzIHVzZWQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uLCBhcyBpbiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSogIGFsaWJyYXJ5ICkgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgIC4uLiBzb21lIGNvZGUgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgWW91IGNhbiBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIEZUX0VYUE9SVCBhbmQgICAgICAgICAgICAqLworICAvKiAgIEZUX0VYUE9SVF9ERUYgaGVyZSBpZiB5b3Ugd2FudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVG8gZXhwb3J0IGEgdmFyaWFibGUsIHVzZSBGVF9FWFBPUlRfVkFSLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpZm5kZWYgRlRfRVhQT1JUCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNDM5LDYgKzQ5MywxNyBAQAogI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgZXh0ZXJuICB4CiAjZW5kaWYKIAorI2lmZGVmIF9XSU4zMgorI2lmIGRlZmluZWQoIEZUMl9CVUlMRF9MSUJSQVJZICkgJiYgXAorICAgICggZGVmaW5lZCggX0RMTCApIHx8IGRlZmluZWQoIERMTF9FWFBPUlQgKSApCisjdW5kZWYgRlRfRVhQT1JUCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2RlY2xzcGVjKCBkbGxleHBvcnQgKSAgeAorI2VsaWYgZGVmaW5lZCggRlQyX0RMTElNUE9SVCApCisjdW5kZWYgRlRfRVhQT1JUCisjZGVmaW5lIEZUX0VYUE9SVCggeCApICBfX2RlY2xzcGVjKCBkbGxpbXBvcnQgKSAgeAorI2VuZGlmCisjZW5kaWYKKwogI2VuZGlmIC8qICFGVF9FWFBPUlQgKi8KIAogCkBAIC00NzQsNyArNTM5LDEzIEBACiAgIC8qIGZ1bmN0aW9ucyB3aGljaCBhcmUgYWNjZXNzZWQgYnkgKGdsb2JhbCkgZnVuY3Rpb24gcG9pbnRlcnMuICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEZUX0NBTExCQUNLX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAqLworICAvKiBGVF9DQUxMQkFDS19ERUYgaXMgdXNlZCB0byBfZGVmaW5lXyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCAgICAgICAgKi8KKyAgLyogbG9jYXRlZCBpbiB0aGUgc2FtZSBzb3VyY2UgY29kZSBmaWxlIGFzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB1c2VzICovCisgIC8qIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRlRfQkFTRV9DQUxMQkFDSyBhbmQgRlRfQkFTRV9DQUxMQkFDS19ERUYgYXJlIHVzZWQgdG8gZGVjbGFyZSAgICovCisgIC8qIGFuZCBkZWZpbmUgYSBjYWxsYmFjayBmdW5jdGlvbiwgcmVzcGVjdGl2ZWx5LCBpbiBhIHNpbWlsYXIgd2F5ICAqLworICAvKiBhcyBGVF9CQVNFIGFuZCBGVF9CQVNFX0RFRiB3b3JrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEZUX0NBTExCQUNLX1RBQkxFIGlzIHVzZWQgdG8gX2RlY2xhcmVfIGEgY29uc3RhbnQgdmFyaWFibGUgdGhhdCAqLwogICAvKiBjb250YWlucyBwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ5NCw2ICs1NjUsMTYgQEAKICNlbmRpZgogI2VuZGlmIC8qIEZUX0NBTExCQUNLX0RFRiAqLwogCisjaWZuZGVmIEZUX0JBU0VfQ0FMTEJBQ0sKKyNpZmRlZiBfX2NwbHVzcGx1cworI2RlZmluZSBGVF9CQVNFX0NBTExCQUNLKCB4ICkgICAgICBleHRlcm4gIkMiICB4CisjZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0tfREVGKCB4ICkgIGV4dGVybiAiQyIgIHgKKyNlbHNlCisjZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0soIHggKSAgICAgIGV4dGVybiAgeAorI2RlZmluZSBGVF9CQVNFX0NBTExCQUNLX0RFRiggeCApICB4CisjZW5kaWYKKyNlbmRpZiAvKiBGVF9CQVNFX0NBTExCQUNLICovCisKICNpZm5kZWYgRlRfQ0FMTEJBQ0tfVEFCTEUKICNpZmRlZiBfX2NwbHVzcGx1cwogI2RlZmluZSBGVF9DQUxMQkFDS19UQUJMRSAgICAgIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L2Z0c3lzdGVtLmMgYi9idWlsZHMvdW5peC9mdHN5c3RlbS5jCmluZGV4IDQ4YTIzNWIuLjhmZGJlYjAgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L2Z0c3lzdGVtLmMKKysrIGIvYnVpbGRzL3VuaXgvZnRzeXN0ZW0uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBVbml4LXNwZWNpZmljIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvaW5zdGFsbC5tayBiL2J1aWxkcy91bml4L2luc3RhbGwubWsKaW5kZXggZmFlNDg2Yy4uZDg5MDY0ZSAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvaW5zdGFsbC5taworKysgYi9idWlsZHMvdW5peC9pbnN0YWxsLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTMwLDYgKzMwLDkgQEAKICMKICMgV2UgYWxzbyByZW1vdmUgYCQoaW5jbHVkZWRpcikvZnQyYnVpbGQuaCcgZm9yIHRoZSBzYW1lIHJlYXNvbi4KICMKKyMgTm90ZSB0aGF0IHNvbWUgaGVhZGVyIGZpbGVzIGdldCBoYW5kbGVkIHR3aWNlIGZvciBzaW1wbGljaXR5OyBhIHNwZWNpYWwsCisjIGNvbmZpZ3VyZWQgdmVyc2lvbiBvdmVyd3JpdGVzIHRoZSBnZW5lcmljIG9uZS4KKyMKIGluc3RhbGw6ICQoUFJPSkVDVF9MSUJSQVJZKQogCS0kKERFTERJUikgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyCiAJLSQoREVMRVRFKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9mdDJidWlsZC5oCkBAIC01NSw2ICs1OCw4IEBACiAgICAgICAgICAgJChERVNURElSKSQoaW5jbHVkZWRpcikvZnJlZXR5cGUyL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCiAJJChJTlNUQUxMX0RBVEEpICQoT0JKX0RJUikvZnRtb2R1bGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2ZyZWV0eXBlMi9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaAorCSQoSU5TVEFMTF9EQVRBKSAkKE9CSl9CVUlMRCkvZnRvcHRpb24uaCAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9mcmVldHlwZTIvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKIAkkKElOU1RBTExfU0NSSVBUKSAtbSA3NTUgJChPQkpfQlVJTEQpL2ZyZWV0eXBlLWNvbmZpZyBcCiAgICAgICAgICAgJChERVNURElSKSQoYmluZGlyKS9mcmVldHlwZS1jb25maWcKIAkkKElOU1RBTExfU0NSSVBUKSAtbSA2NDQgJChCVUlMRF9ESVIpL2ZyZWV0eXBlMi5tNCBcCkBAIC04MywxMyArODgsMTEgQEAKICMgVW5peCBjbGVhbmluZyBhbmQgZGlzdGNsZWFuIHJ1bGVzLgogIwogY2xlYW5fcHJvamVjdF91bml4OgotCS0kKERFTEVURSkgJChCQVNFX09CSkVDVFMpICQoT0JKX00pICQoT0JKX1MpCi0JLSQoREVMRVRFKSAkKHBhdHN1YnN0ICUuJE8sJS4kKFNPKSwkKEJBU0VfT0JKRUNUUykgJChPQkpfTSkgJChPQkpfUykpIFwKLSAgICAgICAgICAgICAgICAgICAkKENMRUFOKQorCS0kKExJQlRPT0wpIC0tbW9kZT1jbGVhbiAkKFJNKSAkKE9CSkVDVFNfTElTVCkKKwktJChERUxFVEUpICQoQ0xFQU4pCiAKIGRpc3RjbGVhbl9wcm9qZWN0X3VuaXg6IGNsZWFuX3Byb2plY3RfdW5peAotCS0kKERFTEVURSkgJChQUk9KRUNUX0xJQlJBUlkpCi0JLSQoREVMRElSKSAkKE9CSl9ESVIpLy5saWJzCisJLSQoTElCVE9PTCkgLS1tb2RlPWNsZWFuICQoUk0pICQoUFJPSkVDVF9MSUJSQVJZKQogCS0kKERFTEVURSkgKi5vcmlnICp+IGNvcmUgKi5jb3JlICQoRElTVENMRUFOKQogCiAjIEVPRgpkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvdW5peC1jYy5pbiBiL2J1aWxkcy91bml4L3VuaXgtY2MuaW4KaW5kZXggYTk2N2NlZS4uNTY3NTg2NiAxMDA2NDQKLS0tIGEvYnVpbGRzL3VuaXgvdW5peC1jYy5pbgorKysgYi9idWlsZHMvdW5peC91bml4LWNjLmluCkBAIC0yLDcgKzIsNyBAQAogIyBGcmVlVHlwZSAyIHRlbXBsYXRlIGZvciBVbml4LXNwZWNpZmljIGNvbXBpbGVyIGRlZmluaXRpb25zCiAjCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTg3LDEzICs4NywyMCBAQAogCiAjIEMgY29tcGlsZXIgdG8gdXNlIC0tIHdlIHVzZSBsaWJ0b29sIQogIwotIwogQ0NyYXcgOj0gJChDQykKIENDICAgIDo9ICQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDQ3JhdykKIAorIyBSZXNvdXJjZSBjb21waWxlciB0byB1c2Ugb24gQ3lnd2luL01pbkdXLCB1c3VhbGx5IHdpbmRyZXMuCisjCitSQ3JhdyA6PSBAUkNACitpZm5lcSAoJChSQ3JhdyksKQorICBSQyA6PSAkKExJQlRPT0wpIC0tdGFnPVJDIC0tbW9kZT1jb21waWxlICQoUkNyYXcpCitlbmRpZgorCiAjIExpbmtlciBmbGFncy4KICMKLUxERkxBR1MgOj0gQExERkxBR1NACitMREZMQUdTICAgICAgICAgICA6PSBATERGTEFHU0AKK0xJQl9DTE9DS19HRVRUSU1FIDo9IEBMSUJfQ0xPQ0tfR0VUVElNRUAgICMgZm9yIGZ0YmVuY2gKIAogCiAjIGV4cG9ydCBzeW1ib2xzCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC91bml4LWRlZi5pbiBiL2J1aWxkcy91bml4L3VuaXgtZGVmLmluCmluZGV4IGZlYWU5OWIuLjA1OWEwNjEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L3VuaXgtZGVmLmluCisrKyBiL2J1aWxkcy91bml4L3VuaXgtZGVmLmluCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTQzLDYgKzQzLDcgQEAKICAgICAgICAgICAgICAkKE9CSl9CVUlMRCkvdW5peC1kZWYubWsgICBcCiAgICAgICAgICAgICAgJChPQkpfQlVJTEQpL3VuaXgtY2MubWsgICAgXAogICAgICAgICAgICAgICQoT0JKX0JVSUxEKS9mdGNvbmZpZy5oICAgIFwKKyAgICAgICAgICAgICAkKE9CSl9CVUlMRCkvZnRvcHRpb24uaCAgICBcCiAgICAgICAgICAgICAgJChMSUJUT09MKSAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICQoT0JKX0JVSUxEKS9NYWtlZmlsZQogCkBAIC02Miw2ICs2Myw3IEBACiAKICMgVmFyaWFibGVzIG5lZWRlZCBmb3IgYGZyZWV0eXBlLWNvbmZpZycgYW5kIGBmcmVldHlwZS5wYycuCiAjCitQS0dfQ09ORklHICAgICAgICAgOj0gQFBLR19DT05GSUdACiBSRVFVSVJFU19QUklWQVRFICAgOj0gQFJFUVVJUkVTX1BSSVZBVEVACiBMSUJTX1BSSVZBVEUgICAgICAgOj0gQExJQlNfUFJJVkFURUAKIExJQlNTVEFUSUNfQ09ORklHICA6PSBATElCU1NUQVRJQ19DT05GSUdACkBAIC0xMDIsNiArMTA0LDcgQEAKICQoT0JKX0JVSUxEKS9mcmVldHlwZS1jb25maWc6ICQoVE9QX0RJUikvYnVpbGRzL3VuaXgvZnJlZXR5cGUtY29uZmlnLmluCiAJcm0gLWYgJEAgJEAudG1wCiAJc2VkIC1lICdzfCVMSUJTU1RBVElDX0NPTkZJRyV8JChMSUJTU1RBVElDX0NPTkZJRyl8JyAgIFwKKwkgICAgLWUgJ3N8JVBLR19DT05GSUclfCQoUEtHX0NPTkZJRyl8JyAgICAgICAgICAgICAgICAgXAogCSAgICAtZSAnc3wlYnVpbGRfbGlidG9vbF9saWJzJXwkKGJ1aWxkX2xpYnRvb2xfbGlicyl8JyBcCiAJICAgIC1lICdzfCVleGVjX3ByZWZpeCV8JChleGVjX3ByZWZpeCl8JyAgICAgICAgICAgICAgIFwKIAkgICAgLWUgJ3N8JWZ0X3ZlcnNpb24lfCQoZnRfdmVyc2lvbil8JyAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvYnVpbGRzL3VuaXgvdW5peC1kZXYubWsgYi9idWlsZHMvdW5peC91bml4LWRldi5tawppbmRleCA5MmMwNjAwLi41YTUxNmFkIDEwMDY0NAotLS0gYS9idWlsZHMvdW5peC91bml4LWRldi5taworKysgYi9idWlsZHMvdW5peC91bml4LWRldi5tawpAQCAtNiw3ICs2LDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC91bml4LWxjYy5tayBiL2J1aWxkcy91bml4L3VuaXgtbGNjLm1rCmluZGV4IDUxMjJmZGUuLjczYTAyZDQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L3VuaXgtbGNjLm1rCisrKyBiL2J1aWxkcy91bml4L3VuaXgtbGNjLm1rCkBAIC02LDcgKzYsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy91bml4L3VuaXgubWsgYi9idWlsZHMvdW5peC91bml4Lm1rCmluZGV4IDE0ZDVjMGMuLmFjZDU0ZDMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L3VuaXgubWsKKysrIGIvYnVpbGRzL3VuaXgvdW5peC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvdW5peC91bml4ZGRlZi5tayBiL2J1aWxkcy91bml4L3VuaXhkZGVmLm1rCmluZGV4IDMwZjIzMDcuLmE4ZGE2M2EgMTAwNjQ0Ci0tLSBhL2J1aWxkcy91bml4L3VuaXhkZGVmLm1rCisrKyBiL2J1aWxkcy91bml4L3VuaXhkZGVmLm1rCkBAIC00LDcgKzQsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy92bXMvZnRjb25maWcuaCBiL2J1aWxkcy92bXMvZnRjb25maWcuaAppbmRleCBjOTU5ZmYxLi5kODdlYTY5IDEwMDY0NAotLS0gYS9idWlsZHMvdm1zL2Z0Y29uZmlnLmgKKysrIGIvYnVpbGRzL3Ztcy9mdGNvbmZpZy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFZNUy1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMyw2ICszMyw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorCiAjaWZuZGVmIEZUQ09ORklHX0hfCiAjZGVmaW5lIEZUQ09ORklHX0hfCiAKQEAgLTIwOSwxMiArMjEwLDEyIEBACiAKICNlbmRpZgogCi0jaWYgRlRfU0laRU9GX0lOVCA9PSAoMzIgLyBGVF9DSEFSX0JJVCkKKyNpZiBGVF9TSVpFT0ZfSU5UID09IDQKIAogICB0eXBlZGVmIHNpZ25lZCBpbnQgICAgICBGVF9JbnQzMjsKICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgRlRfVUludDMyOwogCi0jZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSAoMzIgLyBGVF9DSEFSX0JJVCkKKyNlbGlmIEZUX1NJWkVPRl9MT05HID09IDQKIAogICB0eXBlZGVmIHNpZ25lZCBsb25nICAgICBGVF9JbnQzMjsKICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgRlRfVUludDMyOwpAQCAtMjI1LDEyICsyMjYsMTIgQEAKIAogCiAgIC8qIGxvb2sgdXAgYW4gaW50ZWdlciB0eXBlIHRoYXQgaXMgYXQgbGVhc3QgMzIgYml0cyAqLwotI2lmIEZUX1NJWkVPRl9JTlQgPj0gKDMyIC8gRlRfQ0hBUl9CSVQpCisjaWYgRlRfU0laRU9GX0lOVCA+PSA0CiAKICAgdHlwZWRlZiBpbnQgICAgICAgICAgICBGVF9GYXN0OwogICB0eXBlZGVmIHVuc2lnbmVkIGludCAgIEZUX1VGYXN0OwogCi0jZWxpZiBGVF9TSVpFT0ZfTE9ORyA+PSAoMzIgLyBGVF9DSEFSX0JJVCkKKyNlbGlmIEZUX1NJWkVPRl9MT05HID49IDQKIAogICB0eXBlZGVmIGxvbmcgICAgICAgICAgIEZUX0Zhc3Q7CiAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgRlRfVUZhc3Q7CkBAIC0yMzgsMTUgKzIzOSwyNSBAQAogI2VuZGlmCiAKIAotICAvKiBkZXRlcm1pbmUgd2hldGhlciB3ZSBoYXZlIGEgNjQtYml0IGludCB0eXBlIGZvciBwbGF0Zm9ybXMgd2l0aG91dCAqLwotICAvKiBBdXRvY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmIEZUX1NJWkVPRl9MT05HID09ICg2NCAvIEZUX0NIQVJfQklUKQorICAvKiBkZXRlcm1pbmUgd2hldGhlciB3ZSBoYXZlIGEgNjQtYml0IGludCB0eXBlICAqLworICAvKiAobW9zdGx5IGZvciBlbnZpcm9ubWVudHMgd2l0aG91dCBgYXV0b2NvbmYnKSAqLworI2lmIEZUX1NJWkVPRl9MT05HID09IDgKIAogICAvKiBGVF9MT05HNjQgbXVzdCBiZSBkZWZpbmVkIGlmIGEgNjQtYml0IHR5cGUgaXMgYXZhaWxhYmxlICovCiAjZGVmaW5lIEZUX0xPTkc2NAogI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcKICNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nCiAKKyAgLyogd2UgaGFuZGxlIHRoZSBMTFA2NCBzY2hlbWUgc2VwYXJhdGVseSBmb3IgR0NDIGFuZCBjbGFuZywgKi8KKyAgLyogc3VwcHJlc3NpbmcgdGhlIGBsb25nIGxvbmcnIHdhcm5pbmcgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbGlmICggRlRfU0laRU9GX0xPTkcgPT0gNCApICAgICAgICYmIFwKKyAgICAgIGRlZmluZWQoIEhBVkVfTE9OR19MT05HX0lOVCApICYmIFwKKyAgICAgIGRlZmluZWQoIF9fR05VQ19fICkKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdsb25nLWxvbmciCisjZGVmaW5lIEZUX0xPTkc2NAorI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKKyNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBBIDY0LWJpdCBkYXRhIHR5cGUgbWF5IGNyZWF0ZSBjb21waWxhdGlvbiBwcm9ibGVtcyBpZiB5b3UgY29tcGlsZSAgICAgKi8KQEAgLTI5OCw3ICszMDksNyBAQAogCiAjZW5kaWYgLyogX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMICovCiAKLSNlbmRpZiAvKiBGVF9TSVpFT0ZfTE9ORyA9PSAoNjQgLyBGVF9DSEFSX0JJVCkgKi8KKyNlbmRpZiAvKiBGVF9TSVpFT0ZfTE9ORyA9PSA4ICovCiAKICNpZmRlZiBGVF9MT05HNjQKICAgdHlwZWRlZiBGVF9JTlQ2NCAgIEZUX0ludDY0OwpAQCAtMzA2LDYgKzMxNywxNSBAQAogI2VuZGlmCiAKIAorI2lmZGVmIF9XSU42NAorICAvKiBvbmx5IDY0Yml0IFdpbmRvd3MgdXNlcyB0aGUgTExQNjQgZGF0YSBtb2RlbCwgaS5lLiwgKi8KKyAgLyogMzJiaXQgaW50ZWdlcnMsIDY0Yml0IHBvaW50ZXJzICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX1VJTlRfVE9fUE9JTlRFUiggeCApICh2b2lkKikodW5zaWduZWQgX19pbnQ2NCkoeCkKKyNlbHNlCisjZGVmaW5lIEZUX1VJTlRfVE9fUE9JTlRFUiggeCApICh2b2lkKikodW5zaWduZWQgbG9uZykoeCkKKyNlbmRpZgorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBtaXNjZWxsYW5lb3VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMyOSw2ICszNDksMTQgQEAKICNlbmRpZgogCiAKKyAgLyogVXNlIEZUX0xPQ0FMIGFuZCBGVF9MT0NBTF9ERUYgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCByZXNwZWN0aXZlbHksICovCisgIC8qIGEgZnVuY3Rpb24gdGhhdCBnZXRzIHVzZWQgb25seSB3aXRoaW4gdGhlIHNjb3BlIG9mIGEgbW9kdWxlLiAgICAgICAqLworICAvKiBOb3JtYWxseSwgYm90aCB0aGUgaGVhZGVyIGFuZCBzb3VyY2UgY29kZSBmaWxlcyBmb3Igc3VjaCBhICAgICAgICAgKi8KKyAgLyogZnVuY3Rpb24gYXJlIHdpdGhpbiBhIHNpbmdsZSBtb2R1bGUgZGlyZWN0b3J5LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJbnRyYS1tb2R1bGUgYXJyYXlzIHNob3VsZCBiZSB0YWdnZWQgd2l0aCBGVF9MT0NBTF9BUlJBWSBhbmQgICAgICAgKi8KKyAgLyogRlRfTE9DQUxfQVJSQVlfREVGLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmZGVmIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKIAogI2RlZmluZSBGVF9MT0NBTCggeCApICAgICAgc3RhdGljICB4CkBAIC0zNTAsNiArMzc4LDEyIEBACiAjZGVmaW5lIEZUX0xPQ0FMX0FSUkFZX0RFRiggeCApICBjb25zdCAgeAogCiAKKyAgLyogVXNlIEZUX0JBU0UgYW5kIEZUX0JBU0VfREVGIHRvIGRlY2xhcmUgYW5kIGRlZmluZSwgcmVzcGVjdGl2ZWx5LCAqLworICAvKiBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBpbiBtb3JlIHRoYW4gYSBzaW5nbGUgbW9kdWxlLiAgSW4gdGhlICAgICovCisgIC8qIGN1cnJlbnQgc2V0dXAgdGhpcyBpbXBsaWVzIHRoYXQgdGhlIGRlY2xhcmF0aW9uIGlzIGluIGEgaGVhZGVyICAgKi8KKyAgLyogZmlsZSBpbiB0aGUgYGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwnIGRpcmVjdG9yeSwgYW5kIHRoZSAgICAgICAqLworICAvKiBmdW5jdGlvbiBib2R5IGlzIGluIGEgZmlsZSBpbiBgc3JjL2Jhc2UnLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpZm5kZWYgRlRfQkFTRQogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTM3Miw2ICs0MDYsMzcgQEAKICNlbmRpZiAvKiAhRlRfQkFTRV9ERUYgKi8KIAogCisgIC8qICAgV2hlbiBjb21waWxpbmcgRnJlZVR5cGUgYXMgYSBETEwsIHNvbWUgc3lzdGVtcy9jb21waWxlcnMgbmVlZCBhICAgICAqLworICAvKiAgIHNwZWNpYWwgYXR0cmlidXRlIGluIGZyb250IE9SIGFmdGVyIHRoZSByZXR1cm4gdHlwZSBvZiBmdW5jdGlvbiAgICAgKi8KKyAgLyogICBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFR3byBtYWNyb3MgYXJlIHVzZWQgd2l0aGluIHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZSB0byBkZWZpbmUgICAgICAgKi8KKyAgLyogICBleHBvcnRlZCBsaWJyYXJ5IGZ1bmN0aW9uczogRlRfRVhQT1JUIGFuZCBGVF9FWFBPUlRfREVGLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgRlRfRVhQT1JUKCByZXR1cm5fdHlwZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgIGlzIHVzZWQgaW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBGVF9FWFBPUlQoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSogIGFsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBGVF9FWFBPUlRfREVGKCByZXR1cm5fdHlwZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5KiAgYWxpYnJhcnkgKSAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgLi4uIHNvbWUgY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBZb3UgY2FuIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgRlRfRVhQT1JUIGFuZCAgICAgICAgICAgICovCisgIC8qICAgRlRfRVhQT1JUX0RFRiBoZXJlIGlmIHlvdSB3YW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBUbyBleHBvcnQgYSB2YXJpYWJsZSwgdXNlIEZUX0VYUE9SVF9WQVIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmbmRlZiBGVF9FWFBPUlQKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0zODAsNiArNDQ1LDE3IEBACiAjZGVmaW5lIEZUX0VYUE9SVCggeCApICBleHRlcm4gIHgKICNlbmRpZgogCisjaWZkZWYgX1dJTjMyCisjaWYgZGVmaW5lZCggRlQyX0JVSUxEX0xJQlJBUlkgKSAmJiBcCisgICAgKCBkZWZpbmVkKCBfRExMICkgfHwgZGVmaW5lZCggRExMX0VYUE9SVCApICkKKyN1bmRlZiBGVF9FWFBPUlQKKyNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIF9fZGVjbHNwZWMoIGRsbGV4cG9ydCApICB4CisjZWxpZiBkZWZpbmVkKCBGVDJfRExMSU1QT1JUICkKKyN1bmRlZiBGVF9FWFBPUlQKKyNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIF9fZGVjbHNwZWMoIGRsbGltcG9ydCApICB4CisjZW5kaWYKKyNlbmRpZgorCiAjZW5kaWYgLyogIUZUX0VYUE9SVCAqLwogCiAKQEAgLTQxNSw3ICs0OTEsMTMgQEAKICAgLyogZnVuY3Rpb25zIHdoaWNoIGFyZSBhY2Nlc3NlZCBieSAoZ2xvYmFsKSBmdW5jdGlvbiBwb2ludGVycy4gICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRlRfQ0FMTEJBQ0tfREVGIGlzIHVzZWQgdG8gX2RlZmluZV8gYSBjYWxsYmFjayBmdW5jdGlvbi4gICAgICAgICovCisgIC8qIEZUX0NBTExCQUNLX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY2FsbGJhY2sgZnVuY3Rpb24sICAgICAgICAqLworICAvKiBsb2NhdGVkIGluIHRoZSBzYW1lIHNvdXJjZSBjb2RlIGZpbGUgYXMgdGhlIHN0cnVjdHVyZSB0aGF0IHVzZXMgKi8KKyAgLyogaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9CQVNFX0NBTExCQUNLIGFuZCBGVF9CQVNFX0NBTExCQUNLX0RFRiBhcmUgdXNlZCB0byBkZWNsYXJlICAgKi8KKyAgLyogYW5kIGRlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uLCByZXNwZWN0aXZlbHksIGluIGEgc2ltaWxhciB3YXkgICovCisgIC8qIGFzIEZUX0JBU0UgYW5kIEZUX0JBU0VfREVGIHdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgaXMgdXNlZCB0byBfZGVjbGFyZV8gYSBjb25zdGFudCB2YXJpYWJsZSB0aGF0ICovCiAgIC8qIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDM1LDYgKzUxNywxNiBAQAogI2VuZGlmCiAjZW5kaWYgLyogRlRfQ0FMTEJBQ0tfREVGICovCiAKKyNpZm5kZWYgRlRfQkFTRV9DQUxMQkFDSworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0soIHggKSAgICAgIGV4dGVybiAiQyIgIHgKKyNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDSyggeCApICAgICAgZXh0ZXJuICB4CisjZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0tfREVGKCB4ICkgIHgKKyNlbmRpZgorI2VuZGlmIC8qIEZUX0JBU0VfQ0FMTEJBQ0sgKi8KKwogI2lmbmRlZiBGVF9DQUxMQkFDS19UQUJMRQogI2lmZGVmIF9fY3BsdXNwbHVzCiAjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuICJDIgpkaWZmIC0tZ2l0IGEvYnVpbGRzL3Ztcy9mdHN5c3RlbS5jIGIvYnVpbGRzL3Ztcy9mdHN5c3RlbS5jCmluZGV4IGQ4M2U4ZWMuLjdkNzlmOWEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy92bXMvZnRzeXN0ZW0uYworKysgYi9idWlsZHMvdm1zL2Z0c3lzdGVtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVk1TLXNwZWNpZmljIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5jZS9mdGRlYnVnLmMgYi9idWlsZHMvd2luY2UvZnRkZWJ1Zy5jCmluZGV4IDdhMjBlMmYuLjgzYzVmNDQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5jZS9mdGRlYnVnLmMKKysrIGIvYnVpbGRzL3dpbmNlL2Z0ZGVidWcuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgY29tcG9uZW50IGZvciBXaW5DRSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzksNyArNzksNyBAQAogCiAKICAgICB2YV9zdGFydCggYXAsIGZtdCApOwotICAgIHZwcmludGYoIGZtdCwgYXAgKTsKKyAgICB2ZnByaW50Ziggc3RkZXJyLCBmbXQsIGFwICk7CiAgICAgLyogc2VuZCB0aGUgc3RyaW5nIHRvIHRoZSBkZWJ1Z2dlciBhcyB3ZWxsICovCiAgICAgdnNwcmludGYoIGJ1ZiwgZm10LCBhcCApOwogICAgIE91dHB1dERlYnVnU3RyaW5nRXgoIGJ1ZiApOwpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9mcmVldHlwZS52Y3Byb2ogYi9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvagppbmRleCAyNzlhYmVlLi4yMTUwMjhhIDEwMDY0NAotLS0gYS9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvagorKysgYi9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2ZyZWV0eXBlLnZjcHJvagpAQCAtMjEsNyArMjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzEubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5LmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxLmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtODEsNyArODEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTE0MSw3ICsxNDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMTgxLDcgKzE4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxTVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVQubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTI2MSw3ICsyNjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTI4MSw3ICsyODEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTMwMSw3ICszMDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTMyMSw3ICszMjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTM0MSw3ICszNDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTM2MSw3ICszNjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTM4MSw3ICszODEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00MDEsNyArNDAxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNDIxLDcgKzQyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5X0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOV9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC00NjEsNyArNDYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNDgxLDcgKzQ4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5X0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTUwMSw3ICs1MDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5U1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNTIxLDcgKzUyMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC01NDEsNyArNTQxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTU2MSw3ICs1NjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5U1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNTgxLDcgKzU4MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxU1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC02MDEsNyArNjAxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTYyMSw3ICs2MjEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNjQxLDcgKzY0MSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC02NjEsNyArNjYxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTY4MSw3ICs2ODEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI5TVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNzAxLDcgKzcwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjcxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA1LWNlXGZyZWV0eXBlMjlNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC03MjEsNyArNzIxLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTc0MSw3ICs3NDEsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwNS1jZVxmcmVldHlwZTI3MU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1ULmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC03NTgsNyArNzU4LDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KKyAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDUtY2VcZnJlZXR5cGUyOU1UX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5jZS92YzIwMDUtY2UvaW5kZXguaHRtbAppbmRleCA1OGQ2MDkzLi4yNjcyNDE1IDEwMDY0NAotLS0gYS9idWlsZHMvd2luY2UvdmMyMDA1LWNlL2luZGV4Lmh0bWwKKysrIGIvYnVpbGRzL3dpbmNlL3ZjMjAwNS1jZS9pbmRleC5odG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgPGxpPlBQQy9TUCBXTTYgKFdpbmRvd3MgTW9iaWxlIDYpPC9saT4KIDwvdWw+CiAKLUl0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuNy4xIHNvdXJjZXM6PC9wPgorSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi45IHNvdXJjZXM6PC9wPgogCiA8dWw+CiAgIDxwcmU+Ci0gICAgZnJlZXR5cGUyNzEubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxX0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTI3MU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKLSAgICBmcmVldHlwZTI3MU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKyAgICBmcmVldHlwZTI5LmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5X0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlMjlNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CiA8L3VsPgogCiA8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvZnJlZXR5cGUudmNwcm9qIGIvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2oKaW5kZXggY2EzMDZjZS4uOWJlODU4OCAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2oKKysrIGIvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9mcmVldHlwZS52Y3Byb2oKQEAgLTg4LDcgKzg4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjcxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5LmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNTUsNyArMzU1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjkubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTQ0NCw3ICs0NDQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjcxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNTMzLDcgKzUzMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5LmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC02MjEsNyArNjIxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC03MDksNyArNzA5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC03OTcsNyArNzk3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC04ODUsNyArODg1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC05NzMsNyArOTczLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjcxTVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5TVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTExNDksNyArMTE0OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVC5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xMjM2LDcgKzEyMzYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjcxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTMyMyw3ICsxMzIzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE0MTAsNyArMTQxMCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlTVC5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xNDk3LDcgKzE0OTcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjcxU1QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTU4NCw3ICsxNTg0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE2NjgsNyArMTY2OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTc1Myw3ICsxNzUzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xODM4LDcgKzE4MzgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5X0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE5MjMsNyArMTkyMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjAwOCw3ICsyMDA4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMDkzLDcgKzIwOTMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5X0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIxNzgsNyArMjE3OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIyNjMsNyArMjI2Myw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIzNDgsNyArMjM0OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI0MzMsNyArMjQzMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI1MTgsNyArMjUxOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI2MDMsNyArMjYwMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI2ODksNyArMjY4OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI3NzUsNyArMjc3NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI4NjEsNyArMjg2MSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI5NDcsNyArMjk0Nyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMwMzMsNyArMzAzMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMxMTksNyArMzExOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyOU1UX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMyMDUsNyArMzIwNSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW5jZVx2YzIwMDgtY2VcZnJlZXR5cGUyNzFNVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luY2VcdmMyMDA4LWNlXGZyZWV0eXBlMjlNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzI3OSw3ICszMjc5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbmNlXHZjMjAwOC1jZVxmcmVldHlwZTI5TVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sIGIvYnVpbGRzL3dpbmNlL3ZjMjAwOC1jZS9pbmRleC5odG1sCmluZGV4IDM3ZGUwNWMuLjE4ZjJhNDggMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5jZS92YzIwMDgtY2UvaW5kZXguaHRtbAorKysgYi9idWlsZHMvd2luY2UvdmMyMDA4LWNlL2luZGV4Lmh0bWwKQEAgLTIxLDE0ICsyMSwxNCBAQAogICA8bGk+UFBDL1NQIFdNNiAoV2luZG93cyBNb2JpbGUgNik8L2xpPgogPC91bD4KIAotSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi43LjEgc291cmNlczo8L3A+CitJdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjkgc291cmNlczo8L3A+CiAKIDx1bD4KICAgPHByZT4KLSAgICBmcmVldHlwZTI3MS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyNzFfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxTVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxTVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgorICAgIGZyZWV0eXBlMjkubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjlfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjlNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGUyOU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KIDwvdWw+CiAKIDxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvZGV0ZWN0Lm1rIGIvYnVpbGRzL3dpbmRvd3MvZGV0ZWN0Lm1rCmluZGV4IDM1MGQxNTYuLmIwNDdlMDIgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL2RldGVjdC5taworKysgYi9idWlsZHMvd2luZG93cy9kZXRlY3QubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtNzcsNyArNzcsNyBAQAogICAjIFNvIHdlIG5lZWQgdG8gaGFjay4KICAgIwogICAjIEt1ZG9zIHRvIEVsaSBaYXJldHNraWkgKERKR1BQIGd1cnUpIHRoYXQgaGVscGVkIGRlYnVnIGl0LgotICAjIERldGFpbHMgYXJlIGF2YWlsYWJsZSBpbiB0aHJlYWRzIG9mIHRoZSBmcmVldHlwZSBtYWlsaW5nIGxpc3QKKyAgIyBEZXRhaWxzIGFyZSBhdmFpbGFibGUgaW4gdGhyZWFkcyBvZiB0aGUgRnJlZVR5cGUgbWFpbGluZyBsaXN0CiAgICMgKDIwMDQtMTEtMTEpLCBhbmQgdGhlbiBpbiB0aGUgZGV2ZWwgbWFpbGluZyBsaXN0ICgyMDA0LTExLTIwIHRvIC0yMykuCiAgICMKICAgaWZlcSAoJChPUyksV2luZG93c19OVCkKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL2Z0ZGVidWcuYyBiL2J1aWxkcy93aW5kb3dzL2Z0ZGVidWcuYwppbmRleCBjYWRmY2VhLi5lYzcwYTBlIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy9mdGRlYnVnLmMKKysrIGIvYnVpbGRzL3dpbmRvd3MvZnRkZWJ1Zy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgZm9yIFdpbjMyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02NSw3ICs2NSw3IEBACiAKIAogICAgIHZhX3N0YXJ0KCBhcCwgZm10ICk7Ci0gICAgdnByaW50ZiggZm10LCBhcCApOworICAgIHZmcHJpbnRmKCBzdGRlcnIsIGZtdCwgYXAgKTsKICAgICAvKiBzZW5kIHRoZSBzdHJpbmcgdG8gdGhlIGRlYnVnZ2VyIGFzIHdlbGwgKi8KICAgICB2c3ByaW50ZiggYnVmLCBmbXQsIGFwICk7CiAgICAgT3V0cHV0RGVidWdTdHJpbmdBKCBidWYgKTsKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2ogYi9idWlsZHMvd2luZG93cy92YzIwMDUvZnJlZXR5cGUudmNwcm9qCmluZGV4IGI2NDM4NDAuLjM4NmQ3OWQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9mcmVldHlwZS52Y3Byb2oKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDA1L2ZyZWV0eXBlLnZjcHJvagpAQCAtMTYsNyArMTYsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI3MS5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjkubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDVcZnJlZXR5cGUyNzFNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjlNVC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI3MVNULmxpYiIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjlTVC5saWIiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNBTGlua1Rvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNYRENNYWtlVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0JzY01ha2VUb29sIiAvPg0KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgIDxUb29sIE5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiIFByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciIEN1bHR1cmU9IjEwMzMiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIiAvPg0KLSAgICAgIDxUb29sIE5hbWU9IlZDTGlicmFyaWFuVG9vbCIgT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDVcZnJlZXR5cGUyNzFfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjlfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtODQsNyArODQsNyBAQAogICAgICAgPFRvb2wgTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIgUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIgQ3VsdHVyZT0iMTAzMyIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiIC8+DQotICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI3MVNUX0QubGliIiBTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiIC8+DQorICAgICAgPFRvb2wgTmFtZT0iVkNMaWJyYXJpYW5Ub29sIiBPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwNVxmcmVldHlwZTI5U1RfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ0FMaW5rVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1hEQ01ha2VUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQnNjTWFrZVRvb2wiIC8+DQpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICA8VG9vbCBOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIgLz4NCiAgICAgICA8VG9vbCBOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIiBQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIiBDdWx0dXJlPSIxMDMzIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIgLz4NCi0gICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjcxTVRfRC5saWIiIFN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSIgLz4NCisgICAgICA8VG9vbCBOYW1lPSJWQ0xpYnJhcmlhblRvb2wiIE91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA1XGZyZWV0eXBlMjlNVF9ELmxpYiIgU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDQUxpbmtUb29sIiAvPg0KICAgICAgIDxUb29sIE5hbWU9IlZDWERDTWFrZVRvb2wiIC8+DQogICAgICAgPFRvb2wgTmFtZT0iVkNCc2NNYWtlVG9vbCIgLz4NCkBAIC0zNDQsOCArMzQ0LDEyIEBACiAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+DQogICAgICAgPC9GaWxlPg0KICAgICAgIDxGaWx0ZXIgTmFtZT0iRlRfTU9EVUxFUyI+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmRmLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJib3guYyI+DQogICAgICAgICA8L0ZpbGU+DQorICAgICAgICA8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Y2lkLmMiPg0KKyAgICAgICAgPC9GaWxlPg0KICAgICAgICAgPEZpbGUgUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZudGZtdC5jIj4NCiAgICAgICAgIDwvRmlsZT4NCiAgICAgICAgIDxGaWxlIFJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jIj4NCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92YzIwMDUvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sCmluZGV4IGMzYTVhYjcuLmEyNWU2NzQgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sCisrKyBiL2J1aWxkcy93aW5kb3dzL3ZjMjAwNS9pbmRleC5odG1sCkBAIC0xMSwxNCArMTEsMTQgQEAKIAogPHA+VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcHJvamVjdCBmaWxlcyBmb3IgVmlzdWFsIEMrKywgbmFtZWQKIDx0dD5mcmVldHlwZS52Y3Byb2o8L3R0PiwgYW5kIFZpc3VhbCBTdHVkaW8sIGNhbGxlZCA8dHQ+ZnJlZXR5cGUuc2xuPC90dD4uICBJdAotY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi43LjEgc291cmNlczo8L3A+Citjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjkgc291cmNlczo8L3A+CiAKIDx1bD4KICAgPHByZT4KLSAgICBmcmVldHlwZTI3MS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyNzFfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxTVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxTVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgorICAgIGZyZWV0eXBlMjkubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjlfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjlNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGUyOU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KIDwvdWw+CiAKIDxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvaiBiL2J1aWxkcy93aW5kb3dzL3ZjMjAwOC9mcmVldHlwZS52Y3Byb2oKaW5kZXggMjBkODJjNC4uZjJkMWZlNyAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2ZyZWV0eXBlLnZjcHJvagorKysgYi9idWlsZHMvd2luZG93cy92YzIwMDgvZnJlZXR5cGUudmNwcm9qCkBAIC03MCw3ICs3MCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5LmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyOU1ULmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1x3aW4zMlx2YzIwMDhcZnJlZXR5cGUyOVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTI5Miw3ICsyOTIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5X0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTM2NSw3ICszNjUsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjcxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcd2luMzJcdmMyMDA4XGZyZWV0eXBlMjlTVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXHdpbjMyXHZjMjAwOFxmcmVldHlwZTI5TVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTIzNyw2ICsxMjM3LDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJkZi5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Y2lkLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3ZjMjAwOC9pbmRleC5odG1sIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwKaW5kZXggYmY5MjgyZi4uZTBmZGYyZCAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDA4L2luZGV4Lmh0bWwKQEAgLTExLDE0ICsxMSwxNCBAQAogCiA8cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBwcm9qZWN0IGZpbGVzIGZvciBWaXN1YWwgQysrLCBuYW1lZAogPHR0PmZyZWV0eXBlLnZjcHJvajwvdHQ+LCBhbmQgVmlzdWFsIFN0dWRpbywgY2FsbGVkIDx0dD5mcmVldHlwZS5zbG48L3R0Pi4gIEl0Ci1jb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjcuMSBzb3VyY2VzOjwvcD4KK2NvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuOSBzb3VyY2VzOjwvcD4KIAogPHVsPgogICA8cHJlPgotICAgIGZyZWV0eXBlMjcxLmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTI3MV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyNzFNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCi0gICAgZnJlZXR5cGUyNzFNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CisgICAgZnJlZXR5cGUyOS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyOV9ELmxpYiAgIC0gZGVidWcgYnVpbGQ7ICAgc2luZ2xlIHRocmVhZGVkCisgICAgZnJlZXR5cGUyOU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5TVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgogPC91bD4KIAogPHA+QmUgc3VyZSB0byBleHRyYWN0IHRoZSBmaWxlcyB3aXRoIHRoZSBXaW5kb3dzIChDUitMRikgbGluZSBlbmRpbmdzLiAgWklQCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUuc2xuIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnNsbgppbmRleCBiMjA5ZWRkLi44Njk4MjA3IDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUuc2xuCisrKyBiL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS5zbG4KQEAgLTYsNDIgKzYsMzAgQEAKIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KIAkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KIAkJRGVidWd8eDY0ID0gRGVidWd8eDY0DQotCQlEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyID0gRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMg0KLQkJRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NA0KLQkJRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KLQkJRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0ID0gRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0DQorCQlEZWJ1ZyBTdGF0aWN8V2luMzIgPSBEZWJ1ZyBTdGF0aWN8V2luMzINCisJCURlYnVnIFN0YXRpY3x4NjQgPSBEZWJ1ZyBTdGF0aWN8eDY0DQogCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMg0KIAkJUmVsZWFzZXx4NjQgPSBSZWxlYXNlfHg2NA0KLQkJUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyDQotCQlSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0ID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NA0KLQkJUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzINCi0JCVJlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0ID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQNCisJCVJlbGVhc2UgU3RhdGljfFdpbjMyID0gUmVsZWFzZSBTdGF0aWN8V2luMzINCisJCVJlbGVhc2UgU3RhdGljfHg2NCA9IFJlbGVhc2UgU3RhdGljfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uDQogCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KIAkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQogCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQogCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyDQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NC5BY3RpdmVDZmcgPSBEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NA0KLQkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQuQnVpbGQuMCA9IERlYnVnIE11bHRpdGhyZWFkZWR8eDY0DQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMg0KLQkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyDQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQuQWN0aXZlQ2ZnID0gRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0DQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5EZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQuQnVpbGQuMCA9IERlYnVnIFNpbmdsZXRocmVhZGVkfHg2NA0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgU3RhdGljfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnIFN0YXRpY3xXaW4zMg0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgU3RhdGljfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1ZyBTdGF0aWN8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LkRlYnVnIFN0YXRpY3x4NjQuQWN0aXZlQ2ZnID0gRGVidWcgU3RhdGljfHg2NA0KKwkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uRGVidWcgU3RhdGljfHg2NC5CdWlsZC4wID0gRGVidWcgU3RhdGljfHg2NA0KIAkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQogCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyDQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMg0KLQkJezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn0uUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0DQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0DQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzINCi0JCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzINCi0JCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0DQotCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NC5CdWlsZC4wID0gUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2UgU3RhdGljfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2UgU3RhdGljfFdpbjMyDQorCQl7NzhCMDc5QkQtOUZDNy00QjlFLUI0QTYtOTZEQTBGMDAyNDhCfS5SZWxlYXNlIFN0YXRpY3xXaW4zMi5CdWlsZC4wID0gUmVsZWFzZSBTdGF0aWN8V2luMzINCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2UgU3RhdGljfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlIFN0YXRpY3x4NjQNCisJCXs3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9LlJlbGVhc2UgU3RhdGljfHg2NC5CdWlsZC4wID0gUmVsZWFzZSBTdGF0aWN8eDY0DQogCUVuZEdsb2JhbFNlY3Rpb24NCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCiAJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2oKaW5kZXggNjRhNzFmOC4uZWFkZGNmZCAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2oKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2oKQEAgLTksMjAgKzksMTIgQEAKICAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1cmF0aW9uPg0KICAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KICAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWcgTXVsdGl0aHJlYWRlZDwvQ29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnIFN0YXRpY3xXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWcgU3RhdGljPC9Db25maWd1cmF0aW9uPg0KICAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCI+DQotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWcgTXVsdGl0aHJlYWRlZDwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZyBTaW5nbGV0aHJlYWRlZDwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZyBTaW5nbGV0aHJlYWRlZDwvQ29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnIFN0YXRpY3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnIFN0YXRpYzwvQ29uZmlndXJhdGlvbj4NCiAgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCiAgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KQEAgLTMzLDE4MyArMjUsMTAzIEBACiAgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1cmF0aW9uPg0KICAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KICAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KLSAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyIj4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlIE11bHRpdGhyZWFkZWQ8L0NvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlIFN0YXRpY3xXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZSBTdGF0aWM8L0NvbmZpZ3VyYXRpb24+DQogICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2UgTXVsdGl0aHJlYWRlZDwvQ29uZmlndXJhdGlvbj4NCi0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzIiPg0KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2UgU2luZ2xldGhyZWFkZWQ8L0NvbmZpZ3VyYXRpb24+DQotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCi0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCi0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0Ij4NCi0gICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlIFNpbmdsZXRocmVhZGVkPC9Db25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZSBTdGF0aWN8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlIFN0YXRpYzwvQ29uZmlndXJhdGlvbj4NCiAgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4NCiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCiAgIDwvSXRlbUdyb3VwPg0KKyAgICA8IS0tDQorICAgIFN3aXRjaCB0aGUgUGxhdGZvcm1Ub29sc2V0IGJhc2VkIG9uIHRoZSBWaXN1YWwgU3R1ZGlvIFZlcnNpb24NCistLT4NCis8UHJvcGVydHlHcm91cD4NCisgICAgPCEtLSBBc3N1bWUgVmlzdWFsIFN0dWRpbyAyMDEwIC8gNC4wIGFzIHRoZSBkZWZhdWx0IC0tPg0KKyAgICA8VmlzdWFsU3R1ZGlvVmVyc2lvbiBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnJyI+NC4wPC9WaXN1YWxTdHVkaW9WZXJzaW9uPg0KKzwvUHJvcGVydHlHcm91cD4NCis8IS0tIFZpc3VhbCBTdHVkaW8gMjAxMCAoNC4wKSAtLT4NCis8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnNC4wJyI+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEwMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKzwvUHJvcGVydHlHcm91cD4NCis8IS0tIFZpc3VhbCBTdHVkaW8gMjAxMyAoMTIuMCkgLS0+DQorPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChWaXN1YWxTdHVkaW9WZXJzaW9uKScgPT0gJzEyLjAnIj4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorPC9Qcm9wZXJ0eUdyb3VwPg0KKzwhLS0gVmlzdWFsIFN0dWRpbyAyMDE1ICgxNC4wKSAtLT4NCis8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKFZpc3VhbFN0dWRpb1ZlcnNpb24pJyA9PSAnMTQuMCciPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxNDA8L1BsYXRmb3JtVG9vbHNldD4NCis8L1Byb3BlcnR5R3JvdXA+DQorPCEtLSBWaXN1YWwgU3R1ZGlvIDIwMTcgKDE1LjApIC0tPg0KKzxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoVmlzdWFsU3R1ZGlvVmVyc2lvbiknID09ICcxNS4wJyI+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djE0MTwvUGxhdGZvcm1Ub29sc2V0Pg0KKzwvUHJvcGVydHlHcm91cD4NCis8IS0tDQorICAgIEVuZCBvZjogU3dpdGNoIHRoZSBQbGF0Zm9ybVRvb2xzZXQgYmFzZWQgb24gdGhlIFZpc3VhbCBTdHVkaW8gVmVyc2lvbg0KKy0tPg0KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPg0KLSAgICA8UHJvamVjdEd1aWQ+ezc4QjA3OUJELTlGQzctNEI5RS1CNEE2LTk2REEwRjAwMjQ4Qn08L1Byb2plY3RHdWlkPg0KKyAgICAgPFByb2plY3RHdWlkPns3OEIwNzlCRC05RkM3LTRCOUUtQjRBNi05NkRBMEYwMDI0OEJ9PC9Qcm9qZWN0R3VpZD4NCisgICAgIDxSb290TmFtZXNwYWNlPkZyZWVUeXBlPC9Sb290TmFtZXNwYWNlPg0KICAgPC9Qcm9wZXJ0eUdyb3VwPg0KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KICAgPC9Qcm9wZXJ0eUdyb3VwPg0KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KICAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTdGF0aWN8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQogICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KICAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU3RhdGljfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCiAgICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KICAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMDA8L1BsYXRmb3JtVG9vbHNldD4NCi0gIDwvUHJvcGVydHlHcm91cD4NCi0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMDA8L1BsYXRmb3JtVG9vbHNldD4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQogICA8L1Byb3BlcnR5R3JvdXA+DQogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KICAgPC9Qcm9wZXJ0eUdyb3VwPg0KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCi0gICAgPENvbmZpZ3VyYXRpb25UeXBlPlN0YXRpY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KICAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPg0KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0Pg0KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMDA8L1BsYXRmb3JtVG9vbHNldD4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQogICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTdGF0aWN8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQogICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KICAgPC9Qcm9wZXJ0eUdyb3VwPg0KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFN0YXRpY3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQogICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCiAgICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCi0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4NCi0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4NCi0gICAgPFBsYXRmb3JtVG9vbHNldD52MTAwPC9QbGF0Zm9ybVRvb2xzZXQ+DQotICA8L1Byb3BlcnR5R3JvdXA+DQotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+U3RhdGljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+DQotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+DQotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEwMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCiAgIDwvUHJvcGVydHlHcm91cD4NCiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPg0KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+DQogICA8L0ltcG9ydEdyb3VwPg0KICAgPFByb3BlcnR5R3JvdXA+DQotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuMzAzMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCi0gICAgPE91dERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVw8L091dERpcj4NCi0gICAgPEludERpciBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQotICAgIDxPdXREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPi5cLi5cLi5cLi5cb2Jqc1x2YzIwMTBcJChQbGF0Zm9ybSlcPC9PdXREaXI+DQotICAgIDxJbnREaXIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+LlwuLlwuLlwuLlxvYmpzXHZjMjAxMFwkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPg0KLSAgICA8T3V0RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXDwvT3V0RGlyPg0KLSAgICA8SW50RGlyIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4uXC4uXC4uXC4uXG9ianNcdmMyMDEwXCQoUGxhdGZvcm0pXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgLz4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciIC8+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyIgLz4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciIC8+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyIgLz4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciIC8+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciIC8+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5BbGxSdWxlcy5ydWxlc2V0PC9Db2RlQW5hbHlzaXNSdWxlU2V0Pg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVBc3NlbWJsaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZVNldCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlU2V0IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciIC8+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyIgLz4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCi0gICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciIC8+DQotICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIiAvPg0KLSAgICA8Q29kZUFuYWx5c2lzUnVsZUFzc2VtYmxpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciIC8+DQotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5mcmVldHlwZTI3MWQ8L1RhcmdldE5hbWU+DQotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZnJlZXR5cGUyNzFkPC9UYXJnZXROYW1lPg0KLSAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5mcmVldHlwZTI3MU1UZDwvVGFyZ2V0TmFtZT4NCi0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPmZyZWV0eXBlMjcxTVRkPC9UYXJnZXROYW1lPg0KLSAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+ZnJlZXR5cGUyNzFTVGQ8L1RhcmdldE5hbWU+DQotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+ZnJlZXR5cGUyNzFTVGQ8L1RhcmdldE5hbWU+DQotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPmZyZWV0eXBlMjcxPC9UYXJnZXROYW1lPg0KLSAgICA8VGFyZ2V0TmFtZSBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+ZnJlZXR5cGUyNzE8L1RhcmdldE5hbWU+DQotICAgIDxUYXJnZXROYW1lIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+ZnJlZXR5cGUyNzFNVDwvVGFyZ2V0TmFtZT4NCi0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+ZnJlZXR5cGUyNzFNVDwvVGFyZ2V0TmFtZT4NCi0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+ZnJlZXR5cGUyNzFTVDwvVGFyZ2V0TmFtZT4NCi0gICAgPFRhcmdldE5hbWUgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPmZyZWV0eXBlMjcxU1Q8L1RhcmdldE5hbWU+DQorICAgIDxPdXREaXI+Li5cLi5cLi5cb2Jqc1wkKFBsYXRmb3JtKVwkKENvbmZpZ3VyYXRpb24pXDwvT3V0RGlyPg0KKyAgICA8SW50RGlyPi4uXC4uXC4uXG9ianNcJChQbGF0Zm9ybSlcJChDb25maWd1cmF0aW9uKVw8L0ludERpcj4NCisgICAgPENvZGVBbmFseXNpc1J1bGVTZXQ+QWxsUnVsZXMucnVsZXNldDwvQ29kZUFuYWx5c2lzUnVsZVNldD4NCisgICAgPENvZGVBbmFseXNpc1J1bGVzIC8+DQorICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyAvPg0KKyAgICA8VGFyZ2V0TmFtZT5mcmVldHlwZTwvVGFyZ2V0TmFtZT4NCiAgIDwvUHJvcGVydHlHcm91cD4NCiAgIDxJbXBvcnQgUHJvamVjdD0iJChTb2x1dGlvbkRpcilcZnJlZXR5cGUudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoU29sdXRpb25EaXIpXGZyZWV0eXBlLnVzZXIucHJvcHMnKSIgTGFiZWw9IlVzZXJQcm9wZXJ0aWVzIiAvPg0KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KICAgICA8Q2xDb21waWxlPg0KICAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCiAgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5fREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO19ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCiAgICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCiAgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnRExMPC9SdW50aW1lTGlicmFyeT4NCiAgICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KQEAgLTIyMyw3ICsxMzUsNyBAQAogICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRpc2FibGVkPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCiAgICAgPC9DbENvbXBpbGU+DQogICAgIDxSZXNvdXJjZUNvbXBpbGU+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztfRExMOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCiAgICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+DQogICAgIDwvUmVzb3VyY2VDb21waWxlPg0KICAgICA8TGliPg0KQEAgLTIzNyw3ICsxNDksNyBAQAogICAgIDxDbENvbXBpbGU+DQogICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KICAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KICAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWdETEw8L1J1bnRpbWVMaWJyYXJ5Pg0KICAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPnRydWU8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQpAQCAtMjUxLDcgKzE2Myw3IEBACiAgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+RGlzYWJsZWQ8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KICAgICA8L0NsQ29tcGlsZT4NCiAgICAgPFJlc291cmNlQ29tcGlsZT4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHO19ETEw7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQogICAgIDxMaWI+DQpAQCAtMjYxLDEzICsxNzMsMTEgQEAKICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCiAgICAgPC9MaWI+DQogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU3RhdGljfFdpbjMyJyI+DQogICAgIDxDbENvbXBpbGU+DQogICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KICAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZO19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NUb0ZpbGU+ZmFsc2U8L1ByZXByb2Nlc3NUb0ZpbGU+DQotICAgICAgPFByZXByb2Nlc3NTdXBwcmVzc0xpbmVOdW1iZXJzPmZhbHNlPC9QcmVwcm9jZXNzU3VwcHJlc3NMaW5lTnVtYmVycz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KICAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KICAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPnRydWU8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQpAQCAtMjkxLDY5ICsyMDEsMTEgQEAKICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCiAgICAgPC9MaWI+DQogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFN0YXRpY3x4NjQnIj4NCiAgICAgPENsQ29tcGlsZT4NCiAgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQogICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc1RvRmlsZT5mYWxzZTwvUHJlcHJvY2Vzc1RvRmlsZT4NCi0gICAgICA8UHJlcHJvY2Vzc1N1cHByZXNzTGluZU51bWJlcnM+ZmFsc2U8L1ByZXByb2Nlc3NTdXBwcmVzc0xpbmVOdW1iZXJzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRGVidWc8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPnRydWU8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD5Qcm9ncmFtRGF0YWJhc2U8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwMDE8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICAgIDxNdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPnRydWU8L011bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+DQotICAgICAgPENvbXBpbGVBc01hbmFnZWQ+ZmFsc2U8L0NvbXBpbGVBc01hbmFnZWQ+DQotICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPiQoT3V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCi0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+RGlzYWJsZWQ8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPFJlc291cmNlQ29tcGlsZT4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8Q3VsdHVyZT4weDA0MDk8L0N1bHR1cmU+DQotICAgIDwvUmVzb3VyY2VDb21waWxlPg0KLSAgICA8TGliPg0KLSAgICAgIDxTdXBwcmVzc1N0YXJ0dXBCYW5uZXI+dHJ1ZTwvU3VwcHJlc3NTdGFydHVwQmFubmVyPg0KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYNjQ8L1RhcmdldE1hY2hpbmU+DQotICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChVc2VyTGlicmFyeURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAgPC9MaWI+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUX0RFQlVHX0xFVkVMX0VSUk9SO0ZUX0RFQlVHX0xFVkVMX1RSQUNFO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4NCi0gICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPERlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+UHJvZ3JhbURhdGFiYXNlPC9EZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDxDb21waWxlQXM+RGVmYXVsdDwvQ29tcGlsZUFzPg0KLSAgICAgIDxEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz40MDAxPC9EaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz4NCi0gICAgICA8TXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj50cnVlPC9NdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPg0KLSAgICAgIDxDb21waWxlQXNNYW5hZ2VkPmZhbHNlPC9Db21waWxlQXNNYW5hZ2VkPg0KLSAgICAgIDxQcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4kKE91dERpcikkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkRpc2FibGVkPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxSZXNvdXJjZUNvbXBpbGU+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPl9ERUJVRzskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPg0KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4NCi0gICAgPExpYj4NCi0gICAgICA8U3VwcHJlc3NTdGFydHVwQmFubmVyPnRydWU8L1N1cHByZXNzU3RhcnR1cEJhbm5lcj4NCi0gICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDg2PC9UYXJnZXRNYWNoaW5lPg0KLSAgICAgIDxBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPiQoVXNlckxpYnJhcnlEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKFVzZXJEZXBlbmRlbmNpZXMpOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+DQotICAgIDwvTGliPg0KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4NCi0gICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+X0RFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlRfREVCVUdfTEVWRUxfRVJST1I7RlRfREVCVUdfTEVWRUxfVFJBQ0U7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVF9ERUJVR19MRVZFTF9FUlJPUjtGVF9ERUJVR19MRVZFTF9UUkFDRTtGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQogICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQogICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+DQogICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+dHJ1ZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCkBAIC0zNzksMTAgKzIzMSwxMCBAQAogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4NCiAgICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkZ1bGw8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQogICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCiAgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCiAgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KICAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkRExMPC9SdW50aW1lTGlicmFyeT4NCiAgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQpAQCAtNDA2LDcgKzI1OCw3IEBACiAgICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQogICAgIDwvQ2xDb21waWxlPg0KICAgICA8UmVzb3VyY2VDb21waWxlPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7X0RMTDskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQogICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPg0KICAgICA8L1Jlc291cmNlQ29tcGlsZT4NCiAgICAgPExpYj4NCkBAIC00MTksMTAgKzI3MSwxMCBAQAogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+DQogICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5GdWxsPC9PcHRpbWl6YXRpb24+DQorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KICAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQogICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtOREVCVUc7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQogICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCiAgICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERMTDwvUnVudGltZUxpYnJhcnk+DQogICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KQEAgLTQ0Niw3ICsyOTgsNyBAQAogICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPg0KICAgICA8L0NsQ29tcGlsZT4NCiAgICAgPFJlc291cmNlQ29tcGlsZT4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO19ETEw7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+DQogICAgIDxMaWI+DQpAQCAtNDU3LDEyICszMDksMTIgQEAKICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCiAgICAgPC9MaWI+DQogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFN0YXRpY3xXaW4zMiciPg0KICAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPg0KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCiAgICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+QW55U3VpdGFibGU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPg0KICAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPiQoVXNlck9wdGlvbkRpcmVjdG9yeSk7Li5cLi5cLi5caW5jbHVkZTskKFVzZXJJbmNsdWRlRGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRztXSU4zMjtfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KICAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQogICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KICAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCkBAIC00OTgsMTIgKzM1MCwxMiBAQAogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChVc2VyRGVwZW5kZW5jaWVzKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KICAgICA8L0xpYj4NCiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFN0YXRpY3x4NjQnIj4NCiAgICAgPENsQ29tcGlsZT4NCi0gICAgICA8T3B0aW1pemF0aW9uPkZ1bGw8L09wdGltaXphdGlvbj4NCisgICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQogICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCiAgICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfTElCO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO0ZUMl9CVUlMRF9MSUJSQVJZOyQoVXNlckRlZmluZXMpOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCiAgICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPg0KICAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4NCiAgICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+DQpAQCAtNTM5LDExODAgKzM5MSw1NiBAQAogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChVc2VyRGVwZW5kZW5jaWVzKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KICAgICA8L0xpYj4NCiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCi0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPg0KLSAgICA8Q2xDb21waWxlPg0KLSAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5BbnlTdWl0YWJsZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+JChVc2VyT3B0aW9uRGlyZWN0b3J5KTsuLlwuLlwuLlxpbmNsdWRlOyQoVXNlckluY2x1ZGVEaXJlY3Rvcmllcyk7JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO1dJTjMyO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M7RlQyX0JVSUxEX0xJQlJBUlk7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+DQotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5Pg0KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4NCi0gICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz50cnVlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWw0PC9XYXJuaW5nTGV2ZWw+DQotICAgICAgPENvbXBpbGVBcz5EZWZhdWx0PC9Db21waWxlQXM+DQotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQwMDE8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPg0KLSAgICAgIDxNdWx0aVByb2Nlc3NvckNvbXBpbGF0aW9uPnRydWU8L011bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+DQotICAgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj5mYWxzZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPg0KLSAgICAgIDxFbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0PlN0cmVhbWluZ1NJTURFeHRlbnNpb25zMjwvRW5hYmxlRW5oYW5jZWRJbnN0cnVjdGlvblNldD4NCi0gICAgICA8RmxvYXRpbmdQb2ludEV4Y2VwdGlvbnM+ZmFsc2U8L0Zsb2F0aW5nUG9pbnRFeGNlcHRpb25zPg0KLSAgICAgIDxDcmVhdGVIb3RwYXRjaGFibGVJbWFnZT5mYWxzZTwvQ3JlYXRlSG90cGF0Y2hhYmxlSW1hZ2U+DQotICAgICAgPENvbXBpbGVBc01hbmFnZWQ+ZmFsc2U8L0NvbXBpbGVBc01hbmFnZWQ+DQotICAgICAgPFByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPg0KLSAgICAgIDwvUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQotICAgICAgPEVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+dHJ1ZTwvRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz4NCi0gICAgICA8RGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8L0RlYnVnSW5mb3JtYXRpb25Gb3JtYXQ+DQotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+DQotICAgICAgPEZhdm9yU2l6ZU9yU3BlZWQ+TmVpdGhlcjwvRmF2b3JTaXplT3JTcGVlZD4NCi0gICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8UmVzb3VyY2VDb21waWxlPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7JChVc2VyRGVmaW5lcyk7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxDdWx0dXJlPjB4MDQwOTwvQ3VsdHVyZT4NCi0gICAgPC9SZXNvdXJjZUNvbXBpbGU+DQotICAgIDxMaWIgLz4NCi0gICAgPExpYj4NCi0gICAgICA8TGlua1RpbWVDb2RlR2VuZXJhdGlvbj50cnVlPC9MaW5rVGltZUNvZGVHZW5lcmF0aW9uPg0KLSAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+DQotICAgICAgPEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+JChVc2VyTGlicmFyeURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoVXNlckRlcGVuZGVuY2llcyk7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4NCi0gICAgPC9MaWI+DQotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+DQotICAgIDxDbENvbXBpbGU+DQotICAgICAgPE9wdGltaXphdGlvbj5GdWxsPC9PcHRpbWl6YXRpb24+DQotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPkFueVN1aXRhYmxlPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4kKFVzZXJPcHRpb25EaXJlY3RvcnkpOy4uXC4uXC4uXGluY2x1ZGU7JChVc2VySW5jbHVkZURpcmVjdG9yaWVzKTslKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7V0lOMzI7X0xJQjtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUztGVDJfQlVJTERfTElCUkFSWTskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4NCi0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+DQotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPg0KLSAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPnRydWU8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDQ8L1dhcm5pbmdMZXZlbD4NCi0gICAgICA8Q29tcGlsZUFzPkRlZmF1bHQ8L0NvbXBpbGVBcz4NCi0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDAwMTwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+DQotICAgICAgPE11bHRpUHJvY2Vzc29yQ29tcGlsYXRpb24+dHJ1ZTwvTXVsdGlQcm9jZXNzb3JDb21waWxhdGlvbj4NCi0gICAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPmZhbHNlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+DQotICAgICAgPEVuYWJsZUVuaGFuY2VkSW5zdHJ1Y3Rpb25TZXQ+U3RyZWFtaW5nU0lNREV4dGVuc2lvbnMyPC9FbmFibGVFbmhhbmNlZEluc3RydWN0aW9uU2V0Pg0KLSAgICAgIDxGbG9hdGluZ1BvaW50RXhjZXB0aW9ucz5mYWxzZTwvRmxvYXRpbmdQb2ludEV4Y2VwdGlvbnM+DQotICAgICAgPENyZWF0ZUhvdHBhdGNoYWJsZUltYWdlPmZhbHNlPC9DcmVhdGVIb3RwYXRjaGFibGVJbWFnZT4NCi0gICAgICA8Q29tcGlsZUFzTWFuYWdlZD5mYWxzZTwvQ29tcGlsZUFzTWFuYWdlZD4NCi0gICAgICA8UHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU+DQotICAgICAgPC9Qcm9ncmFtRGF0YUJhc2VGaWxlTmFtZT4NCi0gICAgICA8RW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz50cnVlPC9FbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPg0KLSAgICAgIDxEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0Pg0KLSAgICAgIDwvRGVidWdJbmZvcm1hdGlvbkZvcm1hdD4NCi0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPnRydWU8L0ludHJpbnNpY0Z1bmN0aW9ucz4NCi0gICAgICA8RmF2b3JTaXplT3JTcGVlZD5OZWl0aGVyPC9GYXZvclNpemVPclNwZWVkPg0KLSAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxSZXNvdXJjZUNvbXBpbGU+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPk5ERUJVRzskKFVzZXJEZWZpbmVzKTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEN1bHR1cmU+MHgwNDA5PC9DdWx0dXJlPg0KLSAgICA8L1Jlc291cmNlQ29tcGlsZT4NCi0gICAgPExpYiAvPg0KLSAgICA8TGliPg0KLSAgICAgIDxMaW5rVGltZUNvZGVHZW5lcmF0aW9uPnRydWU8L0xpbmtUaW1lQ29kZUdlbmVyYXRpb24+DQotICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4NCi0gICAgICA8QWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz4kKFVzZXJMaWJyYXJ5RGlyZWN0b3JpZXMpOyUoQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChVc2VyRGVwZW5kZW5jaWVzKTslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPg0KLSAgICA8L0xpYj4NCi0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCiAgIDxJdGVtR3JvdXA+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGF1dG9maXRcYXV0b2ZpdC5jIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNmZlxjZmYuYyI+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyI+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJhc2UuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJib3guYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJkZi5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Yml0bWFwLmMiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNhY2hlXGZ0Y2FjaGUuYyI+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGRlYnVnLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPmZhbHNlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8RGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPmZhbHNlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KLSAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPmZhbHNlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KLSAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5mYWxzZTwvRGlzYWJsZUxhbmd1YWdlRXh0ZW5zaW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+ZmFsc2U8L0Rpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnM+DQotICAgICAgPERpc2FibGVMYW5ndWFnZUV4dGVuc2lvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPmZhbHNlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGNpZC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmc3R5cGUuYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdhc3AuYyIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGd6aXBcZnRnemlwLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRpbml0LmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGx6d1xmdGx6dy5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3Ryb2tlLmMiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeXN0ZW0uYyI+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcc21vb3RoXHNtb290aC5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmJveC5jIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRtbS5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGZyLmMiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeW50aC5jIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0dHlwZTEuYyIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHdpbmZudC5jIiAvPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bGNkZmlsLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRnbHlwaC5jIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z3h2YWwuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGxjZGZpbC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0bW0uYyIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG90dmFsLmMiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwYXRlbnQuYyIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccGNmXHBjZi5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwZnIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN0cm9rZS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3ludGguYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0dHlwZTEuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHdpbmZudC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNhY2hlXGZ0Y2FjaGUuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcY2ZmXGNmZi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xjaWRcdHlwZTFjaWQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHBjZlxwY2YuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcdHJ1ZXR5cGVcdHJ1ZXR5cGUuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcdHlwZTFcdHlwZTEuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcdHlwZTQyXHR5cGU0Mi5jIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1x3aW5mb250c1x3aW5mbnQuYyIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGRlYnVnLmMiPg0KKyAgICAgIDxEaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPmZhbHNlPC9EaXNhYmxlTGFuZ3VhZ2VFeHRlbnNpb25zPg0KICAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyI+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBNdWx0aXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8V2luMzInIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgU2luZ2xldGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIE11bHRpdGhyZWFkZWR8eDY0JyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1ZyBTaW5nbGV0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8QmFzaWNSdW50aW1lQ2hlY2tzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWcgU2luZ2xldGhyZWFkZWR8V2luMzInIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnIFNpbmdsZXRocmVhZGVkfHg2NCciPkVuYWJsZUZhc3RDaGVja3M8L0Jhc2ljUnVudGltZUNoZWNrcz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPg0KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3MgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBNdWx0aXRocmVhZGVkfFdpbjMyJyI+JShBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzKTwvQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2UgTXVsdGl0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIE11bHRpdGhyZWFkZWR8eDY0JyI+JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPg0KLSAgICAgIDxPcHRpbWl6YXRpb24gQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfFdpbjMyJyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHx4NjQnIj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcyk8L0FkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZSBTaW5nbGV0aHJlYWRlZHxXaW4zMiciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlIFNpbmdsZXRocmVhZGVkfHg2NCciPiUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4NCi0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+DQotICAgICAgPE9wdGltaXphdGlvbiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4NCi0gICAgICA8QWRkaXRpb25hbEluY2x1ZGVEaXJlY3RvcmllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKEFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXMpPC9BZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPg0KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4lKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgPC9JdGVtR3JvdXA+DQotICA8SXRlbUdyb3VwPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmNsdWRlXGZyZWV0eXBlXGNvbmZpZ1xmdGNvbmZpZy5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcZnJlZXR5cGVcY29uZmlnXGZ0aGVhZGVyLmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5caW5jbHVkZVxmcmVldHlwZVxjb25maWdcZnRtb2R1bGUuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlxpbmNsdWRlXGZyZWV0eXBlXGNvbmZpZ1xmdG9wdGlvbi5oIiAvPg0KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcZnJlZXR5cGVcY29uZmlnXGZ0c3RkbGliLmgiIC8+DQorICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnR2ZXIucmMiIC8+DQogICA8L0l0ZW1Hcm91cD4NCiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KICAgPC9JbXBvcnRHcm91cD4NCi08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICA8VGFyZ2V0IE5hbWU9IkFmdGVyQnVpbGQiPg0KKyAgICA8Q29weSBTb3VyY2VGaWxlcz0iJChUYXJnZXRQYXRoKSIgRGVzdGluYXRpb25Gb2xkZXI9Ii4uXC4uXC4uXG9ianMiIC8+DQorICA8L1RhcmdldD4NCis8L1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2ouZmlsdGVycyBiL2J1aWxkcy93aW5kb3dzL3ZjMjAxMC9mcmVldHlwZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMGU5NDdmNC4uMGJlMTc2YiAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2ZyZWV0eXBlLnZjeHByb2ouZmlsdGVycworKysgYi9idWlsZHMvd2luZG93cy92YzIwMTAvZnJlZXR5cGUudmN4cHJvai5maWx0ZXJzCkBAIC0xNyw2MyArMTcsMTE3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYXV0b2ZpdFxhdXRvZml0LmMiPg0KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQogICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiZGZcYmRmLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xjZmZcY2ZmLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmFzZS5jIj4NCiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcY2FjaGVcZnRjYWNoZS5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGRlYnVnLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0ZnN0eXBlLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2FzcC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGdseXBoLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xnemlwXGZ0Z3ppcC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGluaXQuYyI+DQogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRzeXN0ZW0uYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJkZlxiZGYuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNhY2hlXGZ0Y2FjaGUuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNmZlxjZmYuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcZ3ppcFxmdGd6aXAuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGx6d1xmdGx6dy5jIj4NCiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN0cm9rZS5jIj4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIj4NCiAgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN5c3RlbS5jIj4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccGNmXHBjZi5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccHNhdXhccHNhdXguYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHBzaGludGVyXHBzaGludGVyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xyYXN0ZXJccmFzdGVyLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xzZm50XHNmbnQuYyI+DQogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHNtb290aFxzbW9vdGguYyI+DQogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1x0eXBlMVx0eXBlMS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcdHlwZTQyXHR5cGU0Mi5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcd2luZm9udHNcd2luZm50LmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0ZGVidWcuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiYm94LmMiPg0KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRiZGYuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJpdG1hcC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Y2lkLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyI+DQogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZzdHlwZS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2FzcC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Z2x5cGguYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGd4dmFsLmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRsY2RmaWwuYyI+DQorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdG1tLmMiPg0KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRvdHZhbC5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGF0ZW50LmMiPg0KKyAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRwZnIuYyI+DQogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdHN0cm9rZS5jIj4NCisgICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0c3ludGguYyI+DQogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KICAgICA8L0NsQ29tcGlsZT4NCkBAIC04Myw1NCArMTM3LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0d2luZm50LmMiPg0KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCiAgICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRsY2RmaWwuYyI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGd4dmFsLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGJhc2VcZnRvdHZhbC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0cGF0ZW50LmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHBjZlxwY2YuYyI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNccGZyXHBmci5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc2F1eFxwc2F1eC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc2hpbnRlclxwc2hpbnRlci5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1xwc25hbWVzXHBzbW9kdWxlLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHJhc3RlclxyYXN0ZXIuYyI+DQotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXNcRlRfTU9EVUxFUzwvRmlsdGVyPg0KLSAgICA8L0NsQ29tcGlsZT4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlwuLlwuLlxzcmNcc2ZudFxzZm50LmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHRydWV0eXBlXHRydWV0eXBlLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHR5cGUxXHR5cGUxLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXGNpZFx0eXBlMWNpZC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4uXC4uXHNyY1x0eXBlNDJcdHlwZTQyLmMiPg0KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzXEZUX01PRFVMRVM8L0ZpbHRlcj4NCi0gICAgPC9DbENvbXBpbGU+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cLi5cLi5cc3JjXHdpbmZvbnRzXHdpbmZudC5jIj4NCi0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlc1xGVF9NT0RVTEVTPC9GaWx0ZXI+DQotICAgIDwvQ2xDb21waWxlPg0KICAgPC9JdGVtR3JvdXA+DQogICA8SXRlbUdyb3VwPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXGluY2x1ZGVcZnQyYnVpbGQuaCI+DQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmMyMDEwL2luZGV4Lmh0bWwgYi9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbAppbmRleCA4ZTQ2NTkxLi44Njc3NTExIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbAorKysgYi9idWlsZHMvd2luZG93cy92YzIwMTAvaW5kZXguaHRtbApAQCAtMSw0MiArMSwyNiBAQAogPGh0bWw+CiA8aGVhZGVyPgogPHRpdGxlPgotICBGcmVlVHlwZSZuYnNwOzIgUHJvamVjdCBGaWxlcyBmb3IgVlMuTkVUJm5ic3A7MjAxMCBvciBuZXdlcgorICBGcmVlVHlwZSZuYnNwOzIgUHJvamVjdCBGaWxlcyBmb3IgVmlzdWFsJm5ic3A7QysrJm5ic3A7MjAxMCBvciBuZXdlcgogPC90aXRsZT4KIAogPGJvZHk+CiA8aDE+Ci0gIEZyZWVUeXBlJm5ic3A7MiBQcm9qZWN0IEZpbGVzIGZvciBWUy5ORVQmbmJzcDsyMDEwIG9yIG5ld2VyCisgIEZyZWVUeXBlJm5ic3A7MiBQcm9qZWN0IEZpbGVzIGZvciBWaXN1YWwmbmJzcDtDKysmbmJzcDsyMDEwIG9yIG5ld2VyCiA8L2gxPgogCi08cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIHByb2plY3QgZmlsZSBmb3IgVmlzdWFsIEMrKyAoVlMuTkVUJm5ic3A7MjAxMAotb3IgbmV3ZXIpLCBuYW1lZCA8dHQ+ZnJlZXR5cGUudmN4cHJvajwvdHQ+LCBhbmQgVmlzdWFsIFN0dWRpbywgY2FsbGVkCi08dHQ+ZnJlZXR5cGUuc2xuPC90dD4uICBJdCBjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZQotRnJlZVR5cGUgMi43LjEgc291cmNlczo8L3A+Cis8cD5UaGlzIGRpcmVjdG9yeSBjb250YWlucyBzb2x1dGlvbiBhbmQgcHJvamVjdCBmaWxlcyBmb3IKK1Zpc3VhbCZuYnNwO0MrKyZuYnNwOzIwMTAgb3IgbmV3ZXIsIG5hbWVkIDx0dD5mcmVldHlwZS5zbG48L3R0PiwKK2FuZCA8dHQ+ZnJlZXR5cGUudmN4cHJvajwvdHQ+LiAgSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMKK2Zyb20gdGhlIEZyZWVUeXBlIDIuOSBzb3VyY2VzOjwvcD4KIAogPHVsPgotICA8cHJlPgotICAgIGZyZWV0eXBlMjcxLmxpYiAgICAtIHJlbGVhc2UgYnVpbGQKLSAgICBmcmVldHlwZTI3MWQubGliICAgLSBkZWJ1ZyBidWlsZAotICAgIGZyZWV0eXBlMjcxU1QubGliICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxU1RkLmxpYiAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxTVQubGliICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCi0gICAgZnJlZXR5cGUyNzFNVGQubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKyAgPGxpPmZyZWV0eXBlLmRsbCB1c2luZyAnUmVsZWFzZScgb3IgJ0RlYnVnJyBjb25maWd1cmF0aW9uczwvbGk+CisgIDxsaT5mcmVldHlwZS5saWIgdXNpbmcgJ1JlbGVhc2UgU3RhdGljJyBvciAnRGVidWcgU3RhdGljJyBjb25maWd1cmF0aW9uczwvbGk+CiA8L3VsPgogCi08cD5Cb3RoIFdpbjMyIGFuZCB4NjQgYnVpbGRzIGFyZSBzdXBwb3J0ZWQuPC9wPgotCi08cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKLWFyY2hpdmVzIGFyZSBhbHJlYWR5IHN0b3JlZCB0aGlzIHdheSwgc28gbm8gZnVydGhlciBhY3Rpb24gaXMgcmVxdWlyZWQuICBJZgoteW91IHVzZSBzb21lIDx0dD4udGFyLip6PC90dD4gYXJjaGl2ZXMsIGJlIHN1cmUgdG8gY29uZmlndXJlIHlvdXIgZXh0cmFjdGluZwotdG9vbCB0byBjb252ZXJ0IHRoZSBsaW5lIGVuZGluZ3MuICBGb3IgZXhhbXBsZSwgd2l0aCA8YQotaHJlZj0iaHR0cDovL3d3dy53aW56aXAuY29tIj5XaW5aaXA8L2E+LCB5b3Ugc2hvdWxkIGFjdGl2YXRlIHRoZSA8ZW0+VEFSCi1maWxlIHNtYXJ0IENSL0xGIENvbnZlcnNpb248L2VtPiBvcHRpb24uICBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGNvbnNpZGVyCi11c2luZyB0aGUgPHR0PnVuaXgyZG9zPC90dD4gb3IgPHR0PnUyZDwvdHQ+IHV0aWxpdGllcyB0aGF0IGFyZSBmbG9hdGluZwotYXJvdW5kLCB3aGljaCBzcGVjaWZpY2FsbHkgZGVhbCB3aXRoIHRoaXMgcGFydGljdWxhciBwcm9ibGVtLgotCi08cD5CdWlsZCBkaXJlY3RvcmllcyBhcmUgcGxhY2VkIGluIHRoZSB0b3AtbGV2ZWwgPHR0Pm9ianNcdmMyMDEwPC90dD4KLWRpcmVjdG9yeS48L3A+Cis8cD5Cb3RoIFdpbjMyIGFuZCB4NjQgYnVpbGRzIGFyZSBzdXBwb3J0ZWQuICBCdWlsZCBkaXJlY3RvcmllcyBhbmQgdGFyZ2V0CitmaWxlcyBhcmUgcGxhY2VkIGluIHRoZSB0b3AtbGV2ZWwgPHR0Pm9ianM8L3R0PiBkaXJlY3RvcnkuPC9wPgogCiA8cD5DdXN0b21pemF0aW9uIG9mIHRoZSBGcmVlVHlwZSBsaWJyYXJ5IGlzIGRvbmUgYnkgZWRpdGluZyB0aGUKIDx0dD5mdG9wdGlvbi5oPC90dD4gaGVhZGVyIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCA8dHQ+ZGV2ZWw8L3R0PiBwYXRoLgpAQCAtNDgsNSArMzIsOSBAQAogc2ltcGxpZmllcyBhdXRvbWF0ZWQgKGNvbW1hbmQtbGluZSkgYnVpbGRzIHVzaW5nIDxhCiBocmVmPSJodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGQzOTM1NzQlMjh2PXZzLjEwMCUyOS5hc3B4Ij5tc2J1aWxkPC9hPi48L3A+CiAKKzxwPlRvIGxpbmsgeW91ciBleGVjdXRhYmxlIHdpdGggRnJlZVR5cGUgRExMLCB5b3UgbWF5IHdhbnQgdG8gZGVmaW5lCitGVDJfRExMSU1QT1JUIHNvIHRoYXQgdGhlIGltcG9ydGVkIGZ1bmN0aW9ucyBhcmUgYXBwcm9wcmlhdGVseQorYXR0cmlidXRlZCB3aXRoIDx0dD5kbGxpbXBvcnQ8dHQ+LjwvcD4KKwogPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9mcmVldHlwZS5kc3AgYi9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcAppbmRleCBmNmVlZWIzLi43NmQ2ZTkxIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcAorKysgYi9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLmRzcApAQCAtNTQsNyArNTQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCiAjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzEubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03OCw3ICs3OCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KICMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MV9ELmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOV9ELmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBNdWx0aXRocmVhZGVkIg0KIA0KQEAgLTEwMiw4ICsxMDIsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjcxX0QubGliIg0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyOV9ELmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOU1UX0QubGliIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UgTXVsdGl0aHJlYWRlZCINCiANCkBAIC0xMjYsOCArMTI2LDggQEAKICMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6ImxpYlxmcmVldHlwZTI3MS5saWIiDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxTVQubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyOS5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVC5saWIiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgUmVsZWFzZSBTaW5nbGV0aHJlYWRlZCINCiANCkBAIC0xNTEsOCArMTUxLDggQEAKICMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzEubGliIg0KLSMgQUREIExJQjMyIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFTVC5saWIiDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOS5saWIiDQorIyBBREQgTElCMzIgL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KICMgU1VCVFJBQ1QgTElCMzIgL25vbG9nbw0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIERlYnVnIFNpbmdsZXRocmVhZGVkIg0KQEAgLTE3Nyw4ICsxNzcsOCBAQAogIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MV9ELmxpYiINCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQogDQogIUVORElGDQogDQpAQCAtMjI2LDEwICsyMjYsMjIgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGNpZC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRsY2RmaWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdHBhdGVudC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0ZnN0eXBlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy92aXN1YWxjL2ZyZWV0eXBlLnZjcHJvaiBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qCmluZGV4IDY5YzA4NGMuLjZjMGI3NjEgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qCisrKyBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvZnJlZXR5cGUudmNwcm9qCkBAIC02OSw3ICs2OSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MS5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOS5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIxOSw3ICsyMTksNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFTVC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTI5MSw3ICsyOTEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOV9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTQzOCw3ICs0MzgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVRfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTIzNiw2ICsxMjM2LDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGJkZi5jIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0Y2lkLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRmbnRmbXQuYyINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGMvaW5kZXguaHRtbAppbmRleCBhMmJlM2FmLi4zMmNlYmM2IDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy92aXN1YWxjL2luZGV4Lmh0bWwKKysrIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsYy9pbmRleC5odG1sCkBAIC0xMSwxNCArMTEsMTQgQEAKIAogPHA+VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgcHJvamVjdCBmaWxlcyBmb3IgVmlzdWFsIEMrKywgbmFtZWQKIDx0dD5mcmVldHlwZS5kc3A8L3R0PiwgYW5kIFZpc3VhbCBTdHVkaW8sIGNhbGxlZCA8dHQ+ZnJlZXR5cGUuc2xuPC90dD4uICBJdAotY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi43LjEgc291cmNlczo8L3A+Citjb21waWxlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllcyBmcm9tIHRoZSBGcmVlVHlwZSAyLjkgc291cmNlczo8L3A+CiAKIDx1bD4KICAgPHByZT4KLSAgICBmcmVldHlwZTI3MS5saWIgICAgIC0gcmVsZWFzZSBidWlsZDsgc2luZ2xlIHRocmVhZGVkCi0gICAgZnJlZXR5cGUyNzFfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxTVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxTVRfRC5saWIgLSBkZWJ1ZyBidWlsZDsgICBtdWx0aS10aHJlYWRlZDwvcHJlPgorICAgIGZyZWV0eXBlMjkubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjlfRC5saWIgICAtIGRlYnVnIGJ1aWxkOyAgIHNpbmdsZSB0aHJlYWRlZAorICAgIGZyZWV0eXBlMjlNVC5saWIgICAtIHJlbGVhc2UgYnVpbGQ7IG11bHRpLXRocmVhZGVkCisgICAgZnJlZXR5cGUyOU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KIDwvdWw+CiAKIDxwPkJlIHN1cmUgdG8gZXh0cmFjdCB0aGUgZmlsZXMgd2l0aCB0aGUgV2luZG93cyAoQ1IrTEYpIGxpbmUgZW5kaW5ncy4gIFpJUApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUuZHNwCmluZGV4IGY2ZWVlYjMuLjE5ZDdjNDUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLmRzcAorKysgYi9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS5kc3AKQEAgLTU0LDcgKzU0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQogIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxLmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOS5saWIiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzgsNyArNzgsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJQjMyPWxpbmsuZXhlIC1saWINCiAjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFfRC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImZyZWV0eXBlIC0gV2luMzIgRGVidWcgTXVsdGl0aHJlYWRlZCINCiANCkBAIC0xMDIsOCArMTAyLDggQEAKICMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6ImxpYlxmcmVldHlwZTI3MV9ELmxpYiINCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFNVF9ELmxpYiINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjlfRC5saWIiDQorIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBSZWxlYXNlIE11bHRpdGhyZWFkZWQiDQogDQpAQCAtMTI2LDggKzEyNiw4IEBACiAjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiJsaWJcZnJlZXR5cGUyNzEubGliIg0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1ULmxpYiINCisjIEFERCBCQVNFIExJQjMyIC9ub2xvZ28gL291dDoibGliXGZyZWV0eXBlMjkubGliIg0KKyMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJmcmVldHlwZSAtIFdpbjMyIFJlbGVhc2UgU2luZ2xldGhyZWFkZWQiDQogDQpAQCAtMTUxLDggKzE1MSw4IEBACiAjIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxLmxpYiINCi0jIEFERCBMSUIzMiAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1QubGliIg0KKyMgQUREIEJBU0UgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KKyMgQUREIExJQjMyIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNULmxpYiINCiAjIFNVQlRSQUNUIExJQjMyIC9ub2xvZ28NCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZnJlZXR5cGUgLSBXaW4zMiBEZWJ1ZyBTaW5nbGV0aHJlYWRlZCINCkBAIC0xNzcsOCArMTc3LDggQEAKICMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFfRC5saWIiDQotIyBBREQgTElCMzIgL25vbG9nbyAvb3V0OiIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1RfRC5saWIiDQorIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOV9ELmxpYiINCisjIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNUX0QubGliIg0KIA0KICFFTkRJRg0KIA0KQEAgLTIyNiw2ICsyMjYsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdGNpZC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXC4uXHNyY1xiYXNlXGZ0Zm50Zm10LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yNjcsNiArMjcxLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRsY2RmaWwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcbHp3XGZ0bHp3LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yODAsNiArMjg4LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cLi5cc3JjXGJhc2VcZnRwYXRlbnQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlwuLlxzcmNcYmFzZVxmdHBmci5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qIGIvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvZnJlZXR5cGUudmNwcm9qCmluZGV4IDU1Yzg3NGQuLmQwOGNkOGUgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2ZyZWV0eXBlLnZjcHJvagorKysgYi9idWlsZHMvd2luZG93cy92aXN1YWxjZS9mcmVldHlwZS52Y3Byb2oKQEAgLTg3LDcgKzg3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxTVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjM3LDcgKzIzNyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzA5LDcgKzMwOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTM4Miw3ICszODIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC01MzQsNyArNTM0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxLmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5LmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC02MTksNyArNjE5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxTVQubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtNzA0LDcgKzcwNCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MV9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5X0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTg2Nyw3ICs4NjcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzFTVF9ELmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1RfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtOTUwLDcgKzk1MCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMDM2LDcgKzEwMzYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTExMjEsNyArMTEyMSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTEyMDYsNyArMTIwNiw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTI4Nyw3ICsxMjg3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNTM4LDcgKzE1MzgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE2MjMsNyArMTYyMyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE3MDgsNyArMTcwOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTc4OSw3ICsxNzg5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMTg3MSw3ICsxODcxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTE5NTQsNyArMTk1NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMDQwLDcgKzIwNDAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIxMjUsNyArMjEyNSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTIyMTAsNyArMjIxMCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMjI5MSw3ICsyMjkxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjM3Myw3ICsyMzczLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI0NTYsNyArMjQ1Niw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yNTQyLDcgKzI1NDIsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI2MjcsNyArMjYyNyw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI3MTIsNyArMjcxMiw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMjc5Myw3ICsyNzkzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMjg3NSw3ICsyODc1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTI5NTgsNyArMjk1OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zMDQ0LDcgKzMwNDQsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyNzEubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjkubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMxMjksNyArMzEyOSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1ULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5TVQubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTMyMTQsNyArMzIxNCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MVNULmxpYiINCisJCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI5U1QubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzI5NSw3ICszMjk1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlfRC5saWIiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCiAJCQkvPg0KIAkJCTxUb29sDQpAQCAtMzM3Nyw3ICszMzc3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaWJyYXJpYW5Ub29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjcxU1RfRC5saWIiDQorCQkJCU91dHB1dEZpbGU9Ii4uXC4uXC4uXG9ianNcZnJlZXR5cGUyOVNUX0QubGliIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTM0NjAsNyArMzQ2MCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cLi5cb2Jqc1xmcmVldHlwZTI3MU1UX0QubGliIg0KKwkJCQlPdXRwdXRGaWxlPSIuLlwuLlwuLlxvYmpzXGZyZWV0eXBlMjlNVF9ELmxpYiINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC04MjYyLDYgKzgyNjIsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNyY1xiYXNlXGZ0YmRmLmMiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3JjXGJhc2VcZnRjaWQuYyINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcmNcYmFzZVxmdGZudGZtdC5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbCBiL2J1aWxkcy93aW5kb3dzL3Zpc3VhbGNlL2luZGV4Lmh0bWwKaW5kZXggODBjMTViZi4uM2IzMzkwYSAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdmlzdWFsY2UvaW5kZXguaHRtbAorKysgYi9idWlsZHMvd2luZG93cy92aXN1YWxjZS9pbmRleC5odG1sCkBAIC0yMSwxNCArMjEsMTQgQEAKICAgPGxpPlBQQy9TUCBXTTYgKFdpbmRvd3MgTW9iaWxlIDYpPC9saT4KIDwvdWw+CiAKLUl0IGNvbXBpbGVzIHRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGZyb20gdGhlIEZyZWVUeXBlIDIuNy4xIHNvdXJjZXM6PC9wPgorSXQgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMgZnJvbSB0aGUgRnJlZVR5cGUgMi45IHNvdXJjZXM6PC9wPgogCiA8dWw+CiAgIDxwcmU+Ci0gICAgZnJlZXR5cGUyNzEubGliICAgICAtIHJlbGVhc2UgYnVpbGQ7IHNpbmdsZSB0aHJlYWRlZAotICAgIGZyZWV0eXBlMjcxX0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKLSAgICBmcmVldHlwZTI3MU1ULmxpYiAgIC0gcmVsZWFzZSBidWlsZDsgbXVsdGktdGhyZWFkZWQKLSAgICBmcmVldHlwZTI3MU1UX0QubGliIC0gZGVidWcgYnVpbGQ7ICAgbXVsdGktdGhyZWFkZWQ8L3ByZT4KKyAgICBmcmVldHlwZTI5LmxpYiAgICAgLSByZWxlYXNlIGJ1aWxkOyBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5X0QubGliICAgLSBkZWJ1ZyBidWlsZDsgICBzaW5nbGUgdGhyZWFkZWQKKyAgICBmcmVldHlwZTI5TVQubGliICAgLSByZWxlYXNlIGJ1aWxkOyBtdWx0aS10aHJlYWRlZAorICAgIGZyZWV0eXBlMjlNVF9ELmxpYiAtIGRlYnVnIGJ1aWxkOyAgIG11bHRpLXRocmVhZGVkPC9wcmU+CiA8L3VsPgogCiA8cD5CZSBzdXJlIHRvIGV4dHJhY3QgdGhlIGZpbGVzIHdpdGggdGhlIFdpbmRvd3MgKENSK0xGKSBsaW5lIGVuZGluZ3MuICBaSVAKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3czMi1iY2MubWsgYi9idWlsZHMvd2luZG93cy93MzItYmNjLm1rCmluZGV4IGQ4ZDMzYjEuLjAxYWFiMWMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3czMi1iY2MubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvdzMyLWJjYy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93MzItYmNjZC5tayBiL2J1aWxkcy93aW5kb3dzL3czMi1iY2NkLm1rCmluZGV4IGVhNjM0ZTUuLjJjMTRkNmMgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3czMi1iY2NkLm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3czMi1iY2NkLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3czMi1kZXYubWsgYi9idWlsZHMvd2luZG93cy93MzItZGV2Lm1rCmluZGV4IGM5Yjk2ZTkuLjI3OWQ1ZjkgMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3czMi1kZXYubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvdzMyLWRldi5tawpAQCAtNSw3ICs1LDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93MzItZ2NjLm1rIGIvYnVpbGRzL3dpbmRvd3MvdzMyLWdjYy5tawppbmRleCAyN2EwYThmLi45ZTM0NzZiIDEwMDY0NAotLS0gYS9idWlsZHMvd2luZG93cy93MzItZ2NjLm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3czMi1nY2MubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdzMyLWljYy5tayBiL2J1aWxkcy93aW5kb3dzL3czMi1pY2MubWsKaW5kZXggYzRmM2RiZi4uZTY5NWMxMiAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLWljYy5taworKysgYi9idWlsZHMvd2luZG93cy93MzItaWNjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3czMi1pbnRsLm1rIGIvYnVpbGRzL3dpbmRvd3MvdzMyLWludGwubWsKaW5kZXggNDQ0MmJkMy4uMWUzNjY2MiAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLWludGwubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvdzMyLWludGwubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdzMyLWxjYy5tayBiL2J1aWxkcy93aW5kb3dzL3czMi1sY2MubWsKaW5kZXggMDUwOGZiYi4uNTcyOWQzNiAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLWxjYy5taworKysgYi9idWlsZHMvd2luZG93cy93MzItbGNjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3czMi1taW5ndzMyLm1rIGIvYnVpbGRzL3dpbmRvd3MvdzMyLW1pbmd3MzIubWsKaW5kZXggYWU0MDgyMy4uYjNhMjEwZCAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLW1pbmd3MzIubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvdzMyLW1pbmd3MzIubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvYnVpbGRzL3dpbmRvd3MvdzMyLXZjYy5tayBiL2J1aWxkcy93aW5kb3dzL3czMi12Y2MubWsKaW5kZXggOTIyZmM2MC4uMzQyYzhhYSAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3MvdzMyLXZjYy5taworKysgYi9idWlsZHMvd2luZG93cy93MzItdmNjLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL2J1aWxkcy93aW5kb3dzL3czMi13YXQubWsgYi9idWlsZHMvd2luZG93cy93MzItd2F0Lm1rCmluZGV4IDRkNjEzOGUuLjM3ZWNjODggMTAwNjQ0Ci0tLSBhL2J1aWxkcy93aW5kb3dzL3czMi13YXQubWsKKysrIGIvYnVpbGRzL3dpbmRvd3MvdzMyLXdhdC5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsgYi9idWlsZHMvd2luZG93cy93aW4zMi1kZWYubWsKaW5kZXggYzliZWJkYi4uZjgzZDQ0NCAxMDA2NDQKLS0tIGEvYnVpbGRzL3dpbmRvd3Mvd2luMzItZGVmLm1rCisrKyBiL2J1aWxkcy93aW5kb3dzL3dpbjMyLWRlZi5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggZTQzMTJmOS4uOGVlMGQ0MCAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMSw2ICsxLDYgQEAKICMhL2Jpbi9zaAogIwotIyBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAyLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMTUsNyArMTUsNyBAQAogCiBybSAtZiBjb25maWcubWsgYnVpbGRzL3VuaXgvdW5peC1kZWYubWsgYnVpbGRzL3VuaXgvdW5peC1jYy5tawogCi0jIHJlc3BlY3QgR05VTUFLRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyMgcmVzcGVjdCBHTlVNQUtFIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiBpZiB0ZXN0ICJ4JEdOVU1BS0UiID0geDsgdGhlbgogICBpZiB0ZXN0ICJ4JE1BS0UiID0geDsgdGhlbgogICAgIGlmIHRlc3QgInhgbWFrZSAtdiAyPi9kZXYvbnVsbCB8IGVncmVwICdHTlV8bWFrZXBwJ2AiID0geDsgdGhlbgpkaWZmIC0tZ2l0IGEvZGV2ZWwvZnQyYnVpbGQuaCBiL2RldmVsL2Z0MmJ1aWxkLmgKaW5kZXggYzgwNWNmOS4uMWQxNzE0MSAxMDA2NDQKLS0tIGEvZGV2ZWwvZnQyYnVpbGQuaAorKysgYi9kZXZlbC9mdDJidWlsZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIDIgYnVpbGQgYW5kIHNldHVwIG1hY3JvcyAoZGV2ZWxvcG1lbnQgdmVyc2lvbikuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9kZXZlbC9mdG9wdGlvbi5oIGIvZGV2ZWwvZnRvcHRpb24uaAppbmRleCBiOGIwYThkLi4xYjQ2MTllIDEwMDY0NAotLS0gYS9kZXZlbC9mdG9wdGlvbi5oCisrKyBiL2RldmVsL2Z0b3B0aW9uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVXNlci1zZWxlY3RhYmxlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEwNywyMiArMTA3LDE5IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdhbnQgdG8gYWN0aXZhdGUgc3ViLXBpeGVsIHJlbmRlcmluZyAgKi8KLSAgLyogKGEuay5hLiBMQ0QgcmVuZGVyaW5nLCBvciBDbGVhclR5cGUpIGluIHRoaXMgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICAgICovCisgIC8qIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3Ugd2FudCB0byBhY3RpdmF0ZSBMQ0QgcmVuZGVyaW5nICAgICAgICAqLworICAvKiB0ZWNobm9sb2d5IHNpbWlsYXIgdG8gQ2xlYXJUeXBlIGluIHRoaXMgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICBUaGlzICAgKi8KKyAgLyogdGVjaG5vbG9neSB0cmlwbGVzIHRoZSByZXNvbHV0aW9uIGluIHRoZSBkaXJlY3Rpb24gY29sb3Igc3VicGl4ZWxzLiAgICovCisgIC8qIFRvIG1pdGlnYXRlIGNvbG9yIGZyaW5nZXMgaW5oZXJlbnQgdG8gdGhpcyB0ZWNobm9sb2d5LCB5b3UgYWxzbyBuZWVkICAqLworICAvKiB0byBleHBsaWNpdGx5IHNldCB1cCBMQ0QgZmlsdGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgY292ZXJlZCBieSBzZXZlcmFsIE1pY3Jvc29mdCBwYXRlbnRzICAgICAgICAqLwogICAvKiBhbmQgc2hvdWxkIG5vdCBiZSBhY3RpdmF0ZWQgaW4gYW55IGRlZmF1bHQgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICAgICAgKi8KKyAgLyogV2hlbiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBGcmVlVHlwZSBvZmZlcnMgYWx0ZXJuYXRpdmUgTENEICAgICAgICovCisgIC8qIHJlbmRlcmluZyB0ZWNobm9sb2d5IHRoYXQgcHJvZHVjZXMgZXhjZWxsZW50IG91dHB1dCB3aXRob3V0IExDRCAgICAgICAqLworICAvKiBmaWx0ZXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgbWFjcm8gaGFzIG5vIGltcGFjdCBvbiB0aGUgRnJlZVR5cGUgQVBJLCBvbmx5IG9uIGl0cyAgICAgICAgICAgICAqLwotICAvKiBfaW1wbGVtZW50YXRpb25fLiAgRm9yIGV4YW1wbGUsIHVzaW5nIEZUX1JFTkRFUl9NT0RFX0xDRCB3aGVuIGNhbGxpbmcgKi8KLSAgLyogRlRfUmVuZGVyX0dseXBoIHN0aWxsIGdlbmVyYXRlcyBhIGJpdG1hcCB0aGF0IGlzIDMgdGltZXMgd2lkZXIgdGhhbiAgICovCi0gIC8qIHRoZSBvcmlnaW5hbCBzaXplIGluIGNhc2UgdGhpcyBtYWNybyBpc24ndCBkZWZpbmVkOyBob3dldmVyLCBlYWNoICAgICAqLwotICAvKiB0cmlwbGV0IG9mIHN1YnBpeGVscyBoYXMgUj1HPUIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgaXMgZG9uZSB0byBhbGxvdyBGcmVlVHlwZSBjbGllbnRzIHRvIHJ1biB1bm1vZGlmaWVkLCBmb3JjaW5nICAgICAqLwotICAvKiB0aGVtIHRvIGRpc3BsYXkgbm9ybWFsIGdyYXktbGV2ZWwgYW50aS1hbGlhc2VkIGdseXBocy4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCisvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI3Myw0OCArMjcwLDYgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIERMTCBleHBvcnQgY29tcGlsYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBXaGVuIGNvbXBpbGluZyBGcmVlVHlwZSBhcyBhIERMTCwgc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgICAgICovCi0gIC8qICAgc3BlY2lhbCBrZXl3b3JkIGluIGZyb250IE9SIGFmdGVyIHRoZSByZXR1cm4gdHlwZSBvZiBmdW5jdGlvbiAgICAgICAqLwotICAvKiAgIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgVHdvIG1hY3JvcyBhcmUgdXNlZCB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHRvIGRlZmluZSAgICAgICAqLwotICAvKiAgIGV4cG9ydGVkIGxpYnJhcnkgZnVuY3Rpb25zOiBGVF9FWFBPUlQgYW5kIEZUX0VYUE9SVF9ERUYuICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBGVF9FWFBPUlQoIHJldHVybl90eXBlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBhcyBpbiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5KiAgYWxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX0VYUE9SVF9ERUYoIHJldHVybl90eXBlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAuLi4gc29tZSBjb2RlIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFlvdSBjYW4gcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiBGVF9FWFBPUlQgYW5kICAgICAgICAgICAgKi8KLSAgLyogICBGVF9FWFBPUlRfREVGIGhlcmUgaWYgeW91IHdhbnQuICBJZiB5b3UgbGVhdmUgdGhlbSB1bmRlZmluZWQsIHRoZXkgICovCi0gIC8qICAgd2lsbCBiZSBsYXRlciBhdXRvbWF0aWNhbGx5IGRlZmluZWQgYXMgYGV4dGVybiByZXR1cm5fdHlwZScgdG8gICAgICAqLwotICAvKiAgIGFsbG93IG5vcm1hbCBjb21waWxhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgRG8gbm90ICN1bmRlZiB0aGVzZSBtYWNyb3MgaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZSAqLwotICAvKiAgIHRoZW0gZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEZUX0VYUE9SVCh4KSAgICAgIGV4dGVybiB4ICovCi0vKiAjZGVmaW5lIEZUX0VYUE9SVF9ERUYoeCkgIHggKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogR2x5cGggUG9zdHNjcmlwdCBOYW1lcyBoYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIEJ5IGRlZmF1bHQsIEZyZWVUeXBlIDIgaXMgY29tcGlsZWQgd2l0aCB0aGUgYHBzbmFtZXMnIG1vZHVsZS4gIFRoaXMgKi8KQEAgLTMyNyw3ICsyODIsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAtIFRoZSBUcnVlVHlwZSBkcml2ZXIgd2lsbCBwcm92aWRlIGl0cyBvd24gc2V0IG9mIGdseXBoIG5hbWVzLCAgICAgICovCiAgIC8qICAgICBpZiB5b3UgYnVpbGQgaXQgdG8gc3VwcG9ydCBwb3N0c2NyaXB0IG5hbWVzIGluIHRoZSBUcnVlVHlwZSAgICAgICAqLwotICAvKiAgICAgYHBvc3QnIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGBwb3N0JyB0YWJsZSwgYnV0IHdpbGwgbm90IHN5bnRoZXNpemUgYSBtaXNzaW5nIFVuaWNvZGUgY2hhcm1hcC4gICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIC0gVGhlIFR5cGUgMSBkcml2ZXIgd2lsbCBub3QgYmUgYWJsZSB0byBzeW50aGVzaXplIGEgVW5pY29kZSAgICAgICAgKi8KICAgLyogICAgIGNoYXJtYXAgb3V0IG9mIHRoZSBnbHlwaHMgZm91bmQgaW4gdGhlIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICovCkBAIC02NzIsNyArNjI3LDcgQEAKICAgLyogVGhpcyBvcHRpb24gcmVxdWlyZXMgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiB0byBiZSAgICAgICovCiAgIC8qIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogWzFdIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4ICovCisgIC8qIFsxXSBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHggKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAgMSAgICAgKi8KIC8qICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICAyICAgICAqLwpAQCAtNjkyLDcgKzY0Nyw3IEBACiAgIC8qIGNvbXBvc2l0ZSBmbGFncyBhcnJheSB3aGljaCBjYW4gYmUgdXNlZCB0byBkaXNhbWJpZ3VhdGUsIGJ1dCBvbGQgICAgICAqLwogICAvKiBmb250cyB3aWxsIG5vdCBoYXZlIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL2dseWYuaHRtICAgICAgICAgICAgICAgICAqLworICAvKiAgIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvZ2x5Zi5odG0gICAgICAgICAgICAgICAgKi8KICAgLyogICBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZm9udHMvVHJ1ZVR5cGUtUmVmZXJlbmNlLU1hbnVhbC9STTA2L0NoYXA2Z2x5Zi5odG1sICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI3VuZGVmIFRUX0NPTkZJR19PUFRJT05fQ09NUE9ORU5UX09GRlNFVF9TQ0FMRUQKQEAgLTc5MCw2ICs3NDUsMTYgQEAKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHByZS1BZG9iZSBUeXBlIDEgICAgICovCisgIC8qIGVuZ2luZSBnZXRzIGNvbXBpbGVkIGludG8gRnJlZVR5cGUuICBJZiBkZWZpbmVkLCBpdCBpcyBwb3NzaWJsZSB0byAgICAqLworICAvKiBzd2l0Y2ggYmV0d2VlbiB0aGUgdHdvIGVuZ2luZXMgdXNpbmcgdGhlIGBoaW50aW5nLWVuZ2luZScgcHJvcGVydHkgb2YgKi8KKyAgLyogdGhlIHR5cGUxIGRyaXZlciBtb2R1bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCiAgIC8qKioqICAgICAgICAgQyBGIEYgICBEIFIgSSBWIEUgUiAgICBDIE8gTiBGIEkgRyBVIFIgQSBUIEkgTyBOICAgICAgICAqKioqLwpAQCAtOTEzLDYgKzg3OCw3IEBACiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUgogI2RlZmluZSAgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKICNpZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgJiAxCiAjZGVmaW5lICBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogI2VuZGlmCkBAIC05MjEsNiArODg3LDcgQEAKICNkZWZpbmUgIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCiAjZW5kaWYKICNlbmRpZgorI2VuZGlmCiAKIAogICAvKgpkaWZmIC0tZ2l0IGEvZG9jcy9DSEFOR0VTIGIvZG9jcy9DSEFOR0VTCmluZGV4IDRjYzhlZTguLjk5MDFlMTAgMTAwNjQ0Ci0tLSBhL2RvY3MvQ0hBTkdFUworKysgYi9kb2NzL0NIQU5HRVMKQEAgLTEsOCArMSwxODQgQEAKIAotQ0hBTkdFUyBCRVRXRUVOIDIuNy4xIGFuZCAyLjcuMgorQ0hBTkdFUyBCRVRXRUVOIDIuOC4xIGFuZCAyLjkKKworICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCisKKyAgICAtIEFkdmFuY2Ugd2lkdGggdmFsdWVzIG9mIHZhcmlhdGlvbiBmb250cyB3ZXJlIG9mdGVuIHdyb25nLgorCisgICAgLSBNb3JlIGZpeGVzIGZvciB2YXJpYXRpb24gZm9udCBzdXBwb3J0OyB5b3Ugc2hvdWxkIHVwZGF0ZSB0byB0aGlzCisgICAgICB2ZXJzaW9uIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlbS4KKworCisgIElJLiBJTVBPUlRBTlQgQ0hBTkdFUworCisgICAgLSBBcyBhIEdTb0MgcHJvamVjdCwgRXdhbGQgSGV3IGV4dGVuZGVkIHRoZSBuZXcgKEFkb2JlKSBDRkYgZW5naW5lCisgICAgICB0byAgaGFuZGxlICBUeXBlICAxICBmb250cyAgYWxzbywgIHRodXMgIGdyZWF0bHkgIGltcHJvdmluZyAgdGhlCisgICAgICByZW5kZXJpbmcgb2YgIHRoaXMgZm9ybWF0LiAgIFRoaXMgaXMgdGhlICBuZXcgZGVmYXVsdC4gICBUaGUgb2xkCisgICAgICBlbmdpbmUgICBpcyAgc3RpbGwgICBhdmFpbGFibGUgICBpZiAgIHRoZSAgY29uZmlndXJhdGlvbiAgIG1hY3JvCisgICAgICBgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FJyAgICBnZXRzICAgIGRlZmluZWQ7ICAgdXNpbmcgICAgdGhlCisgICAgICBgaGludGluZy1lbmdpbmUnIHByb3BlcnR5ICBvZiB0aGUgYHR5cGUxJyBkcml2ZXIgIG1vZHVsZSB5b3UgY2FuCisgICAgICB0aGVuIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gZW5naW5lcy4KKworICAgIC0gQSBuZXcgZnVuY3Rpb24sICBgRlRfU2V0X05hbWVkX0luc3RhbmNlJywgY2FuIGJlIHVzZWQgIHRvIHNldCBvcgorICAgICAgY2hhbmdlIHRoZSBjdXJyZW50IG5hbWVkIGluc3RhbmNlLgorCisgICAgLSBTdGFydGluZyAgd2l0aCAgIHRoaXMgIEZyZWVUeXBlICB2ZXJzaW9uLCAgIHJlc2V0dGluZyAgdmFyaWF0aW9uCisgICAgICBjb29yZGluYXRlcyAgd2lsbCAgIHJldHVybiAgdG8gIHRoZSAgY3VycmVudGx5ICAgc2VsZWN0ZWQgIG5hbWVkCisgICAgICBpbnN0YW5jZS4gIFByZXZpb3VzbHksIEZyZWVUeXBlIHJldHVybmVkIHRvIHRoZSBiYXNlIGZvbnQgKGkuZS4sCisgICAgICBubyBpbnN0YW5jZSBzZXQpLgorCisKKyAgSUlJLiBNSVNDRUxMQU5FT1VTCisKKyAgICAtIFRoZSBgZmFjZV9mbGFncycgZmllbGQgb2YgdGhlIGBGVF9GYWNlJyBzdHJ1Y3R1cmUgaGFzIGEgbmV3IGJpdCwKKyAgICAgIGBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OJywgd2hpY2ggIGlzIHNldCBpZiBhICB2YXJpYXRpb24gZm9udCBoYXMKKyAgICAgIGJlZW4gICAgICBhbHRlcmVkICAgICAgd2l0aCAgICAgIGBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzJywKKyAgICAgIGBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgIGBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzJy4KKworICAgIC0gSWYgIHRoZSAgY3VycmVudCAgZmFjZSAgaXMgIGEgIG5hbWVkICBpbnN0YW5jZSwgIHRoZSAgbmV3ICBtYWNybworICAgICAgYEZUX0lTX05BTUVEX0lOU1RBTkNFJyByZXR1cm5zIHRydWUuCisKKyAgICAtIGBGVF9JU19WQVJJQVRJT04nIGlzICBhIG5ldyBtYWNybyAgdGhhdCByZXR1cm5zIHRydWUgIHdoZW5ldmVyIGEKKyAgICAgIGZhY2Ugb2JqZWN0IGhhcyAgYmVlbiBhbHRlcmVkIGJ5IGBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzJywKKyAgICAgIGBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgIGBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzJy4KKworICAgIC0gQ2hhbmdpbmcgIHRoZSAgZGVzaWduICBjb29yZGluYXRlcyAgb2YgIGEgIHZhcmlhdGlvbiAgZm9udCAgd2l0aAorICAgICAgYEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcgorICAgICAgYEZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMnICBkb2VzICBub3QgIGluZmx1ZW5jZSAgdGhlICBuYW1lZAorICAgICAgaW5zdGFuY2UgaW5kZXggdmFsdWUgKG9ubHkgYEZUX1NldF9OYW1lZF9JbnN0YW5jZScgZG9lcyB0aGF0KS4KKworICAgIC0gU3BlY2lhbCBQb3N0U2NyaXB0ICBuYW1lcyBmb3IgbmFtZWQgaW5zdGFuY2VzICBhcmUgb25seSByZXR1cm5lZAorICAgICAgaWYgdGhlICBuYW1lZCBpbnN0YW5jZSBpcyBzZXQgIHdpdGggYEZUX1NldF9OYW1lZF9JbnN0YW5jZScgKGFuZAorICAgICAgdGhlIGZvbnQgIGhhcyBjb3JyZXNwb25kaW5nICBlbnRyaWVzIGluICBpdHMgYGZ2YXInICB0YWJsZSkuICBJZgorICAgICAgYEZUX0lTX1ZBUklBVElPTicgIHJldHVybnMgIHRydWUsICB0aGUgIGFsZ29yaXRobWljYWxseSAgZGVyaXZlZAorICAgICAgUG9zdFNjcmlwdCBuYW1lIGlzIHByb3ZpZGVkLCBub3QgIGxvb2tpbmcgdXAgc3BlY2lhbCBlbnRyaWVzIGZvcgorICAgICAgbmFtZWQgaW5zdGFuY2VzLgorCisgICAgLSBBIG5ldyBmdW5jdGlvbiAgYEZUX0RvbmVfTU1fVmFyJyBpcyBwcm92aWRlZCB0byAgZnJlZSB0aGUgbWVtb3J5CisgICAgICByZXR1cm5lZCBpbiBhIGNhbGwgdG8gYEZUX0dldF9NTV9WYXInLgorCisgICAgLSBPbiAgcGxhdGZvcm1zICB1c2luZyAgdGhlICAgYGNvbmZpZ3VyZScgIHNjcmlwdCwgIHRoZSAgaW5zdGFsbGVkCisgICAgICBgZnRvcHRpb24uaCcgZmlsZSAgbm93IGNvcnJlY3RseSByZWZsZWN0cyAgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICBsaWtlIGAtLXdpdGgtaGFyZmJ1enonLgorCisgICAgLSBCZXR0ZXIgIHN1cHBvcnQgdG8gIGJ1aWxkIEZyZWVUeXBlICBhcyAgYSBETEwgIG9uIFdpbmRvd3MgIHVzaW5nCisgICAgICBWaXN1YWwgQy4KKworICAgIC0gQWxsIGRhdGEgc3BlY2lmaWMgdG8gZHJpdmVyIG1vZHVsZXMgaXMgbm93IGNvbGxlY3RlZCBpbiBhIHNpbmdsZQorICAgICAgZmlsZSwgICAgICBgRlRfRFJJVkVSX0gnLiAgICAgIENvbnNlcXVlbnRseSwgICAgICB0aGUgICAgIG1hY3JvcworICAgICAgYEZUX0FVVE9ISU5URVJfSCcsICAgYEZUX0NGRl9EUklWRVJfSCcsICBgRlRfVFJVRVRZUEVfRFJJVkVSX0gnLAorICAgICAgYW5kIGBGVF9QQ0ZfRFJJVkVSX0gnIHN0aWxsIHdvcmsgYnV0IGFyZSBkZXByZWNhdGVkLgorCisgICAgLSBTb21lIGZ1enplciBmaXhlcyB0byBiZXR0ZXIgcmVqZWN0IG1hbGZvcm1lZCBmb250cy4KKworICAgIC0gVGhlIGBmdGJlbmNoJyBkZW1vIHByb2dyYW0gaGFzIGEgbmV3IHRlc3QgZm9yIG9wZW5pbmcgYSBuZXcgZmFjZQorICAgICAgYW5kIGxvYWRpbmcgc29tZSBnbHlwaHMuCisKKyAgICAtIFRoZSBgZnRiZW5jaCcgZGVtbyBwcm9ncmFtIGhhcyBhICBuZXcgb3B0aW9uIGAtaicgdG8gc3BlY2lmeSB0aGUKKyAgICAgIGxhc3QgZ2x5cGggaW5kZXggdG8gYmUgdXNlZCBpbiB0aGUgdGVzdHMuCisKKyAgICAtIFRoZSAgYGZ0Z3JpZCcgZGVtbyAgcHJvZ3JhbSBoYXMgIGEgbmV3ICBvcHRpb24gYC1uJyAgdG8gc3VwcHJlc3MKKyAgICAgIGRpc3BsYXkgb2YgbmFtZWQgaW5zdGFuY2VzIG9mIHZhcmlhdGlvbiBmb250cy4KKworICAgIC0gVGhlIGB0dGRlYnVnJyBkZW1vIHByb2dyYW0gY2FuIG5vdyAgc2hvdyBhIHN0YWNrIHRyYWNlIChrZXkgYEsnKQorICAgICAgYW5kIHN3aXRjaCAgYmV0d2VlbiBoZXhhZGVjaW1hbCBhbmQgZGVjaW1hbCAgZGlzcGxheSBvZiBpbnRlZ2VycworICAgICAgKGtleSBgSScpLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NIQU5HRVMgQkVUV0VFTiAyLjggYW5kIDIuOC4xCisKKyAgSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBCL1cgIGhpbnRpbmcgICBvZiAgVHJ1ZVR5cGUgICBmb250cyAgZGlkbid0ICB3b3JrICAgcHJvcGVybHkgIGlmCisgICAgICBpbnRlcnByZXRlciB2ZXJzaW9uIDM4IG9yIDQwIHdhcyBzZWxlY3RlZC4KKworICAgIC0gU29tZSBzZXZlcmUgIHByb2JsZW1zIHdpdGhpbiB0aGUgaGFuZGxpbmcgIG9mIFRydWVUeXBlIFZhcmlhdGlvbgorICAgICAgRm9udHMgd2VyZSBmb3VuZCBhbmQgZml4ZWQuCisKKyAgICAtIEZ1bmN0aW9uIGBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcycgZGlkbid0IGNvcnJlY3RseSBoYW5kbGUKKyAgICAgIHRoZSBjYXNlIHdpdGggbGVzcyBpbnB1dCBjb29yZGluYXRlcyB0aGFuIGF4ZXMuCisKKworICBJSS4gSU1QT1JUQU5UIENIQU5HRVMKKworICAgIC0gQnkgIGRlZmF1bHQsICBGcmVlVHlwZSAgbm93IG9mZmVycyAgaGlnaCAgcXVhbGl0eSAgTENELW9wdGltaXplZAorICAgICAgb3V0cHV0IHdpdGhvdXQgIHJlc29ydGluZyB0byBDbGVhclR5cGUgdGVjaG5pcXVlcyAgb2YgcmVzb2x1dGlvbgorICAgICAgdHJpcGxpbmcgYW5kICBmaWx0ZXJpbmcuICBJbiAgdGhpcyBtZXRob2QsIGNhbGxlZCAgSGFybW9ueSwgZWFjaAorICAgICAgY29sb3IgY2hhbm5lbCAgaXMgZ2VuZXJhdGVkIHNlcGFyYXRlbHkgYWZ0ZXIgIHNoaWZ0aW5nIHRoZSBnbHlwaAorICAgICAgb3V0bGluZSwgY2FwaXRhbGl6aW5nICBvbiB0aGUgZmFjdCAgdGhhdCB0aGUgY29sb3IgZ3JpZHMgIG9uIExDRAorICAgICAgcGFuZWxzICBhcmUgc2hpZnRlZCAgYnkgIGEgdGhpcmQgIG9mIGEgIHBpeGVsLiAgIFRoaXMgb3V0cHV0ICBpcworICAgICAgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBDbGVhclR5cGUgd2l0aCBhIGxpZ2h0IDMtdGFwIGZpbHRlci4KKworCisgIElJSS4gTUlTQ0VMTEFORU9VUworCisgICAgLSBVc2luZyB0aGUgIG5ldyBmdW5jdGlvbiBgRlRfR2V0X1Zhcl9BeGlzX0ZsYWdzJywgIGFuIGFwcGxpY2F0aW9uCisgICAgICBjYW4gYWNjZXNzIHRoZSBgZmxhZ3MnIGZpZWxkICBvZiBhIHZhcmlhdGlvbiBheGlzIChpbnRyb2R1Y2VkIGluCisgICAgICBPcGVuVHlwZSB2ZXJzaW9uIDEuOC4yKQorCisgICAgLSBNb3JlIHNhbml0eSBjaGVja3MuCisKKyAgICAtIFRoZSAgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gIG9mIGJ1ZmZlcnMgIGZvciBMQ0QgIHJlbmRlcmluZyBoYXMKKyAgICAgIGNoYW5nZWQgKHRvIGJlIG1vcmUgcHJlY2lzZSwgdGhlIGFtb3VudCBvZiBwYWRkaW5nIGdldHMgY29tcHV0ZWQKKyAgICAgIGRpZmZlcmVudGx5KS4gIEFwcGxpY2F0aW9ucyAgdGhhdCB1c2UgIHRoZSBGcmVlVHlwZSBBUEkgIGFyZSBub3QKKyAgICAgIGFmZmVjdGVkLgorCisgICAgLSBUbyAgcmVzZXQgYWxsICBkZXNpZ24gYXhpcyAgdmFsdWVzIG9mICBhIHZhcmlhdGlvbiAgZm9udCB0byAgaXRzCisgICAgICBkZWZhdWx0IHZhbHVlcyB5b3UgY2FuIG5vdyBzYXkKKworICAgICAgICBlcnJvciA9IEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzKCBmYWNlLCAwLCBOVUxMICk7CisKKyAgICAgIFRoaXMgIGFsc28gd29ya3MgIHdpdGggZnVuY3Rpb25zICBgRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcycKKyAgICAgIGFuZCBgRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzJy4KKworICAgIC0gRnJlZVR5cGUgIG5vdyBzeW50aGVzaXplcyAgYSAgbWlzc2luZyBVbmljb2RlICBjbWFwIGZvciAgKG9sZGVyKQorICAgICAgVHJ1ZVR5cGUgZm9udHMgYWxzbyBpZiBnbHlwaCBuYW1lcyBhcmUgYXZhaWxhYmxlLgorCisgICAgLSBGcmVlVHlwZSAgaGFzICBpbXByb3ZlZCAgaGFuZGxpbmcgICBvZiAgQkRGICBmb250cyAgd2l0aG91dCAgdGhlCisgICAgICBgUE9JTlRfU0laRScsIGBSRVNPTFVUSU9OX1gnLCBvciAgYFJFU09MVVRJT05fWScgcHJvcGVydGllczsgdGhlCisgICAgICBsaWJyYXJ5IG5vdyAgdXNlcyB0aGUgdmFsdWVzIG9mICB0aGUgYFNJWkUnIGtleXdvcmQgaWYgIHRoZXkgYXJlCisgICAgICBtaXNzaW5nLiAgIFByZXZpb3VzbHksICAgYFNJWkUnICB3YXMgIGNvbXBsZXRlbHkgICBpZ25vcmVkLCAgYW5kCisgICAgICBGcmVlVHlwZSB1c2VkIGhldXJpc3RpYyB2YWx1ZXMgaW5zdGVhZC4KKworICAgIC0gTXVsdGlwbGUgY2FsbHMgdG8gYEZUX0JpdG1hcF9Db252ZXJ0JyBkbyB3b3JrIG5vdyBhcyBhZHZlcnRpc2VkLgorICAgICAgUHJldmlvdXNseSwgIHRoZXkgZmFpbGVkIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yIGlmIHRoZXJlIHdhcyBhbgorICAgICAgZW1wdHkgYml0bWFwIGJldHdlZW4gbm9uLWVtcHR5IG9uZXMuCisKKyAgICAtIFRoZSB3YXJwaW5nIG9wdGlvbiAgaGFzIG1vdmVkICBmcm9tIGBsaWdodCcgIHRvIGBub3JtYWwnIGhpbnRpbmcKKyAgICAgIHdoZXJlICBpdCByZXBsYWNlcyAgdGhlIG9yaWdpbmFsIGhpbnRpbmcgYWxnb3JpdGhtLiAgVGhlIGBsaWdodCcKKyAgICAgIG1vZGUgaXMgbm93IGFsd2F5cyB2b2lkIG9mIGFueSBoaW50aW5nIGluIHgtZGlyZWN0aW9uLgorCisgICAgLSAxNmJpdCAgY29tcGlsZXIgIHN1cHBvcnQgaXMgIG5vdyAgb2ZmaWNpYWxseSAgZW5kZWQuICBXZSAgZGlkbid0CisgICAgICBwcm92aWRlIGFueSBtYWludGVuYW5jZSAgc2luY2UgbWFueSB5ZWFycywgIGFuZCBnaXZlbiB0aGF0IHRoZXJlCisgICAgICB3ZXJlIG5vIGVycm9yICBvciBwcm9ibGVtIHJlcG9ydHMgZWl0aGVyIGl0IHNlZW1zICB0aGF0IGl0IGlzIG5vCisgICAgICBsb25nZXIgbmVlZGVkLgorCisgICAgLSBUaGUgYGZ0Z3JpZCcgIGRlbW8gcHJvZ3JhbSAgY2FuIG5vdyB0b2dnbGUgIHRoZSBkaXNwbGF5ICBvZiBncmlkCisgICAgICBsaW5lcyB3aXRoIHRoZSBgRycga2V5LgorCisgICAgLSBUaGUgYGZ0Z3JpZCcgZGVtbyAgcHJvZ3JhbSBjYW4gdG9nZ2xlIGEgZGlmZmVyZW50ICBzZXQgb2YgY29sb3JzCisgICAgICAoc3VpdGFibGUgdG8gY29sb3ItYmxpbmQgcGVvcGxlKSB3aXRoIHRoZSBgQycga2V5LgorCisgICAgLSBUaGUgYGZ0Z3JpZCcgIGRlbW8gcHJvZ3JhbSAgbm93IHN1cHBvcnRzICB0aGUgYC1lJyAgY29tbWFuZCBsaW5lCisgICAgICBvcHRpb24gdG8gc2VsZWN0IGEgY21hcC4KKworICAgIC0gVGhlIGBmdGR1bXAnIGRlbW8gcHJvZ3JhbSBoYXMgYSAgbmV3IGNvbW1hbmQgbGluZSBvcHRpb24gYC10JyB0bworICAgICAgb3V0cHV0IHRoZSBTRk5UIHRhYmxlIGxpc3QuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDSEFOR0VTIEJFVFdFRU4gMi43LjEgYW5kIDIuOAogCiAgIEkuIElNUE9SVEFOVCBDSEFOR0VTCiAKKyAgICAtIFN1cHBvcnQgZm9yIE9wZW5UeXBlIFZhcmlhdGlvbiBGb250cyBpcyBub3cgY29tcGxldGUuICAgVGhlIGxhc3QKKyAgICAgIG1pc3NpbmcgcGFydCB3YXMgaGFuZGxpbmcgdGhlIGBWVkFSJyBhbmQgYE1WQVInIHRhYmxlcywgd2hpY2ggaXMKKyAgICAgIGF2YWlsYWJsZSB3aXRoIHRoaXMgcmVsZWFzZS4KKwogICAgIC0gQSBuZXcgIGZ1bmN0aW9uIGBGVF9GYWNlX1Byb3BlcnRpZXMnIGFsbG93cyB0aGUgIGNvbnRyb2wgb2Ygc29tZQogICAgICAgbW9kdWxlICBhbmQgICBsaWJyYXJ5ICBwcm9wZXJ0aWVzICBwZXIgIGZvbnQuICAgIEN1cnJlbnRseSwgIHRoZQogICAgICAgZm9sbG93aW5nIHByb3BlcnRpZXMgY2FuIGJlICBoYW5kbGVkOiBzdGVtIGRhcmtlbmluZywgTENEIGZpbHRlcgpAQCAtMTcsMTEgKzE5Myw1NiBAQAogCiAgICAgICAgIEZSRUVUWVBFX1BST1BFUlRJRVM9cGNmOm5vLWxvbmctZmFtaWx5LW5hbWVzPTEKIAotICAgIC0gVmFyaWF0aW9ucyBmb250IHN1cHBvcnQgbm93IHRha2VzIGNhcmUgb2YgdGhlIGBWVkFSJyBhbmQgIGBNVkFSJwotICAgICAgdGFibGVzIGFsc28uCisgICAgLSBTdXBwb3J0ICBmb3IgIHRoZSAgZm9sbG93aW5nICBzY3JpcHRzICBoYXMgIGJlZW4gIGFkZGVkICB0byAgdGhlCisgICAgICBhdXRvLWhpbnRlci4KKworICAgICAgICBBZGxhbSwgQXZlc3RhbiwgQmFtdW0sIEJ1aGlkLCBDYXJpYW4sIENoYWttYSwgQ29wdGljLCBDeXByaW90LAorICAgICAgICBEZXNlcmV0LCBHbGFnb2xpdGljLCBHb3RoaWMsIEtheWFoLCBMaXN1LCBOJ0tvLCBPbCBDaGlraSwgT2xkCisgICAgICAgIFR1cmtpYywgT3NhZ2UsIE9zbWFueWEsIFNhdXJhc2h0cmEsIFNoYXZpYW4sIFN1bmRhbmVzZSwgVGFpCisgICAgICAgIFZpZXQsIFRpZmluYWdoLCBVbmlmaWVkIENhbmFkaWFuIFN5bGxhYmljcywgVmFpCiAKIAotICBJSS4gTUlTQ0VMTEFORU9VUworICBJSS4gSU1QT1JUQU5UIEJVRyBGSVhFUworCisgICAgLSBgTGlnaHQnIGF1dG8taGludGluZyAgbW9kZSBubyAgbG9uZ2VyIHVzZXMgVHJ1ZVR5cGUgIG1ldHJpY3MgZm9yCisgICAgICBUcnVlVHlwZSAgZm9udHMuICAgVGhpcyBidWcgIHdhcyAgaW50cm9kdWNlZCAgaW4gdmVyc2lvbiAgMi40LjYsCisgICAgICBjYXVzaW5nICAgaG9yaXpvbnRhbCAgc2NhbGluZyAgIGFsc28uICAgIEFsbW9zdCAgYWxsICAgR05VL0xpbnV4CisgICAgICBkaXN0cmlidXRpb25zICh3aXRoIEZlZG9yYSBhcyAgYSBub3RhYmxlIGV4Y2VwdGlvbikgZGlzYWJsZWQgdGhlCisgICAgICBjb3JyZXNwb25kaW5nIHBhdGNoIGZvciBnb29kIHJlYXNvbnM7IGNoYW5jZXMgYXJlIHRodXMgaGlnaCB0aGF0CisgICAgICB5b3Ugd29uJ3Qgbm90aWNlIGEgZGlmZmVyZW5jZS4KKworICAgICAgSWYgIG9wdGljYWwgYmFja3dhcmQgIGNvbXBhdGliaWxpdHkgZm9yICBsZWdhY3kgYXBwbGljYXRpb25zICBpcworICAgICAgbmVjZXNzYXJ5LCB5b3UgbWlnaHQgZW5hYmxlIHRoZSBBRl9DT05GSUdfT1BUSU9OX1RUX1NJWkVfTUVUUklDUworICAgICAgY29uZmlndXJhdGlvbiBvcHRpb24uICAgSG93ZXZlciwgaXQgIGlzIHN0cm9uZ2x5ICByZWNvbW1lbmRlZCB0bworICAgICAgYXZvaWQgdGhhdCwgYWRqdXN0aW5nIGZvbnQgc2l6ZXMgaW5zdGVhZC4KKworICAgIC0gR2xvYmFsIHNpemUgIG1ldHJpY3MgdmFsdWVzICBpbiB0aGUgIGBGVF9TaXplX01ldHJpY3MnIHN0cnVjdHVyZQorICAgICAgY2FuIGJlICBkaWZmZXJlbnQgZm9yIFRydWVUeXBlICBmb250cy4gIFJlYXNvbiBpcyB0aGF0ICBpbiBvbGRlcgorICAgICAgRnJlZVR5cGUgIHZlcnNpb25zICB0aGUgIG1ldHJpY3MgIHdlcmUgIHJvdW5kZWQgIGRpZmZlcmVudGx5ICB0bworICAgICAgaW50ZWdlciBwaXhlbHMgY29tcGFyZWQgIHRvIGFsbCBvdGhlciBmb250ICBmb3JtYXRzLCB5aWVsZGluZyBhbgorICAgICAgaW5jb25zaXN0ZW50IGJlaGF2aW91ciBpZiB5b3UgdXNlZCBub24tbmF0aXZlIGhpbnRpbmcuICBTdGFydGluZworICAgICAgd2l0aCB0aGlzICB2ZXJzaW9uLCBnbG9iYWwgc2l6ZSAgbWV0cmljcyBmb3IgVHJ1ZVR5cGUgIGZvbnRzIGFyZQorICAgICAgaGFuZGxlZCB0aGUgc2FtZSBhcyBvdGhlciAgZm9udCBmb3JtYXRzOiBgYXNjZW5kZXInIGdldHMgcm91bmRlZAorICAgICAgdXAsICBgZGVzY2VuZGVyJyAgZ2V0cyAgcm91bmRlZCAgZG93biwgIGBoZWlnaHQnICBnZXRzICBub3JtYWxseQorICAgICAgcm91bmRlZCwgYW5kIGBtYXhfYWR2YW5jZScgZ2V0cyBub3JtYWxseSByb3VuZGVkLCB0b28uCisKKyAgICAgIElmIHlvdSBuZWVkIG1vcmUgcHJlY2lzZSB2YWx1ZXMgb2YgKGdsb2JhbCkgYXNjZW5kZXIsIGRlc2NlbmRlciwKKyAgICAgIGhlaWdodCwgb3IgIGBtYXhfYWR2YW5jZScsIHBsZWFzZSB0YWtlIHRoZSAgY29ycmVzcG9uZGluZyB2YWx1ZXMKKyAgICAgIGZyb20gdGhlIGBGVF9GYWNlJyBzdHJ1Y3R1cmUgYW5kIHNjYWxlIHRoZW0gbWFudWFsbHkuCisKKyAgICAtIElmIGEgVHJ1ZVR5cGUgZm9udCBnZXRzIGxvYWRlZCB3aXRoIEZUX0xPQURfTk9fSElOVElORywgRnJlZVR5cGUKKyAgICAgIG5vdyBzY2FsZXMgIHRoZSBmb250IGxpbmVhcmx5ICBhZ2FpbiAoYnVnIGludHJvZHVjZWQgIGluIHZlcnNpb24KKyAgICAgIDIuNC42KS4KKworICAgIC0gQ1ZFLTIwMTctODEwNSwgIENWRS0yMDE3LTgyODc6ICBPbGRlciAgIEZyZWVUeXBlICB2ZXJzaW9ucyAgaGF2ZQorICAgICAgb3V0LW9mLWJvdW5kcyAgd3JpdGVzICBjYXVzZWQgIGJ5ICBoZWFwLWJhc2VkICBidWZmZXIgIG92ZXJmbG93cworICAgICAgcmVsYXRlZCB0byBUeXBlIDEgZm9udHMuCisKKyAgICAgICAgaHR0cHM6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAxNy04MTA1CisgICAgICAgIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMTctODI4NworCisKKyAgSUlJLiBNSVNDRUxMQU5FT1VTCiAKICAgICAtIEEgIG5ldyBmdW5jdGlvbiAgYEZUX1NldF9EZWZhdWx0X1Byb3BlcnRpZXMnIGhhcyAgYmVlbiBhZGRlZCAgdG8KICAgICAgIHBhcnNlICAgIHRoZSAgICBgRlJFRVRZUEVfUFJPUEVSVElFUycgICAgZW52aXJvbm1lbnQgICAgdmFyaWFibGUKQEAgLTYyLDYgKzI4MywxMiBAQAogICAgIC0gVGhlIGBmcmVldHlwZS1jb25maWcnIHNjcmlwdCBpcyBub3cgYSB3cmFwcGVyIG9mIGBwa2ctY29uZmlnJyBpZgogICAgICAgdGhpcyBwcm9ncmFtIGlzIGF2YWlsYWJsZSBpbiB0aGUgcGF0aC4KIAorICAgIC0gRlRfTE9BRF9UQVJHRVRfTENEICBpcyBub3cgIGEgIHZhcmlhbnQgb2YgIEZUX0xPQURfVEFSR0VUX0xJR0hUOworICAgICAgdGhpcyBzaG91bGQgcHJvdmlkZSBiZXR0ZXIgcmVuZGVyaW5nIHJlc3VsdHMuCisKKyAgICAtIEEgbW9kZSB0byBkaXNwbGF5ICBsaWdodCBhdXRvLWhpbnRpbmcgd2l0aCBzdWItcGl4ZWwgcG9zaXRpb25pbmcKKyAgICAgIGhhcyBiZWVuIGFkZGVkIHRvIGBmdGRpZmYnLgorCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtODQsNiArMzExLDEyIEBACiAgICAgLSBIYW5kbGluZyBvZiAgcmF3IENJRCBmb250cyB3YXMgcGFydGlhbGx5ICBicm9rZW4gKGJ1ZyBpbnRyb2R1Y2VkCiAgICAgICBpbiAyLjYuNCkuCiAKKyAgICAtIENWRS0yMDE2LTEwMzI4OiAgT2xkZXIgIEZyZWVUeXBlIHZlcnNpb25zIGhhZCAgYW4gIG91dC1vZi1ib3VuZHMKKyAgICAgIHdyaXRlIGNhdXNlZCBieSBhIGhlYXAtYmFzZWQgIGJ1ZmZlciBvdmVyZmxvdyByZWxhdGVkIHRvIHRoZSBDRkYKKyAgICAgIGZvbnRzLgorCisgICAgICAgIGh0dHBzOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMTYtMTAzMjgKKwogCiAgIElJSS4gTUlTQ0VMTEFORU9VUwogCkBAIC0zMDYsNyArNTM5LDcgQEAKICAgICAgIHRvIHRoZSB1c2VyLiAgIFRoZSBleGNlcHRpb24gdG8gdGhpcyAgaXMgYF9fRlRFUlJPUlNfSF9fJywgd2hpY2gKICAgICAgIG11c3QgYmUgIHNvbWV0aW1lcyB1bmRlZmluZWQgYnkgIHRoZSB1c2VyIHRvIGdldCAgRnJlZVR5cGUgZXJyb3IKICAgICAgIHN0cmluZ3M6ICBCb3RoIHRoaXMgIGZvcm0gYW5kICB0aGUgbmV3ICBgRlRFUlJPUlNfSF8nIG1hY3JvICBhcmUKLSAgICAgIGFjY2VwdGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgICAgIGFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCiAgICAgLSBNaW5vciBpbXByb3ZlbWVudHMgbWFpbmx5IHRvIHRoZSBUeXBlIDEgZHJpdmVyLgogCkBAIC01NDcsMTcgKzc4MCwxNyBAQAogICAgICAgY29tcGlsZXIgd2FybmluZ3MuCiAKICAgICAtIEZ1bmN0aW9uIGBGVF9CaXRtYXBfTmV3JyAgaGFzIGJlZW4gcmVuYW1lZCAgdG8gYEZUX0JpdG1hcF9Jbml0JywKLSAgICAgIHNpbmNlICB0aGlzIG5hbWUgIGJldHRlciByZWZsZWN0cyAgaXRzIGZ1bmN0aW9uLiAgIEZvciBiYWNrd2FyZHMKKyAgICAgIHNpbmNlICB0aGlzIG5hbWUgIGJldHRlciByZWZsZWN0cyAgaXRzICBmdW5jdGlvbi4gICBGb3IgYmFja3dhcmQKICAgICAgIGNvbXBhdGliaWxpdHksIHRoZSBvbGQgZnVuY3Rpb24gbmFtZSBpcyBzdGlsbCBhdmFpbGFibGUuCiAKICAgICAtIEZ1bmN0aW9uICAgYEZUX0dldF9YMTFfRm9udF9Gb3JtYXQnICAgaGFzICAgIGJlZW4gICByZW5hbWVkICAgdG8KICAgICAgIGBGVF9HZXRfRm9udF9Gb3JtYXQnLCAgc2luY2UgIHRoaXMgICBuYW1lICBiZXR0ZXIgIHJlZmxlY3RzICBpdHMKLSAgICAgIGZ1bmN0aW9uLiAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgb2xkIGZ1bmN0aW9uIG5hbWUgaXMKKyAgICAgIGZ1bmN0aW9uLiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksICB0aGUgb2xkIGZ1bmN0aW9uIG5hbWUgaXMKICAgICAgIHN0aWxsIGF2YWlsYWJsZS4KIAogICAgICAgQWRkaXRpb25hbGx5LCB0aGUgaGVhZGVyICBmaWxlIG1hY3JvIGZvciB0aGlzICBmdW5jdGlvbiBoYXMgYmVlbgogICAgICAgcmVuYW1lZCB0byAgYEZUX0ZPTlRfRk9STUFUU19IJyAodGhlIG9sZCBuYW1lICBgRlRfWEZSRUU4Nl9IJyBpcwotICAgICAgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KS4KKyAgICAgIHJldGFpbmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KIAogICAgIC0gVmFyaW91cyBpbXByb3ZlbWVudHMgdG8gdGhlIGBmdGdyaWQnIGRlbW8gcHJvZ3JhbS4KIApAQCAtNTk3LDcgKzgzMCw3IEBACiAgIEkuIElNUE9SVEFOVCBCVUcgRklYRVMKIAogICAgIC0gQSAgIHZhcmlhbnQgIG9mICAgdnVsbmVyYWJpbGl0eSAgQ1ZFLTIwMTQtMjI0MCAgIHdhcyAgaWRlbnRpZmllZAotICAgICAgKGNmLiAgaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvYnVncy8/NDM2NjEpIGFuZCAgZml4ZWQgaW4gIHRoZQorICAgICAgKGNmLiAgaHR0cHM6Ly9zYXZhbm5haC5ub25nbnUub3JnL2J1Z3MvPzQzNjYxKSBhbmQgIGZpeGVkIGluIHRoZQogICAgICAgbmV3IENGRiBkcml2ZXIuICBBbGwgdXNlcnMgc2hvdWxkIHVwZ3JhZGUuCiAKICAgICAtIFRoZSBuZXcgYXV0by1oaW50ZXIgY29kZSB1c2luZyBIYXJmQnV6eiBjcmFzaGVkIGZvciBzb21lIGludmFsaWQKQEAgLTY2OCw3ICs5MDEsNyBAQAogICBJLiBJTVBPUlRBTlQgQlVHIEZJWEVTCiAKICAgICAtIEEgdnVsbmVyYWJpbGl0eSAoQ1ZFLTIwMTQtMjI0MCkgd2FzICBpZGVudGlmaWVkIGFuZCBmaXhlZCBpbiB0aGUKLSAgICAgIG5ldyAgQ0ZGICBkcml2ZXIgIChjZi4gIGh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL2J1Z3MvPzQxNjk3KS4KKyAgICAgIG5ldyAgQ0ZGIGRyaXZlciAgKGNmLiAgaHR0cHM6Ly9zYXZhbm5haC5ub25nbnUub3JnL2J1Z3MvPzQxNjk3KS4KICAgICAgIEFsbCB1c2VycyBzaG91bGQgdXBncmFkZS4KIAogICAgIC0gTW9yZSAgYnVnICBmaXhlcyByZWxhdGVkICB0byAgY29ycmVjdCAgcG9zaXRpb25pbmcgb2YgIGNvbXBvc2l0ZQpAQCAtNzAxLDcgKzkzNCw3IEBACiAgICAgICAgICAgIGFuZCBpbnN0YWxsIEZyZWVUeXBlIGFnYWluLgogCiAgICAgICBXaXRoIEZyZWVUeXBlJ3MgIGBjb25maWd1cmUnIHNjcmlwdCB0aGUgcHJvY2VkdXJlICBib2lscyBkb3duIHRvCi0gICAgICBjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCBGcmVldHlwZSwgdGhlbiBjb25maWd1cmUsIGNvbXBpbGUsCisgICAgICBjb25maWd1cmUsIGJ1aWxkLCBhbmQgaW5zdGFsbCBGcmVlVHlwZSwgdGhlbiBjb25maWd1cmUsIGNvbXBpbGUsCiAgICAgICBhbmQgIGluc3RhbGwgIEhhcmZCdXp6LCAgdGhlbiBjb25maWd1cmUsICBjb21waWxlLCAgYW5kICBpbnN0YWxsCiAgICAgICBGcmVlVHlwZSBhZ2FpbiAoYWZ0ZXIgZXhlY3V0aW5nIGBtYWtlIGRpc3RjbGVhbicpLgogCkBAIC05OTEsNyArMTIyNCw3IEBACiAgIElJLiBNSVNDRUxMQU5FT1VTCiAKICAgICAtIFRoZSAgKHRvcC1sZXZlbCkgIGBjb25maWd1cmUnICBzY3JpcHQgICBub3cgIHJlc3BlY3RzICB0aGUgIE1BS0UKLSAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNwZWNpZnkgYSBgbWFrZScgYmluYXJ5LiAgIEZvciBiYWNrd2FyZHMKKyAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlICB0byBzcGVjaWZ5IGEgYG1ha2UnIGJpbmFyeS4gICBGb3IgYmFja3dhcmQKICAgICAgIGNvbXBhdGliaWxpdHksIEdOVU1BS0Ugc3RpbGwgb3ZlcnJpZGVzIE1BS0UsIHRob3VnaC4KIAogICAgIC0gVGhlIGBmdHZpZXcnICBhbmQgYGZ0ZGlmZicgIGRlbW8gcHJvZ3JhbXMgaGF2ZSAgYmVlbiByZWRlc2lnbmVkLApAQCAtMTA0MCw3ICsxMjczLDcgQEAKICAgICAtIFN1YnBpeGVsICBoaW50aW5nIHN1cHBvcnQgIGhhcyBiZWVuICBjb250cmlidXRlZCBieSAgSW5maW5hbGl0eSwKICAgICAgIGJhc2VkIG9uIEdyZWcgSGl0Y2hjb2NrJ3Mgd2hpdGVwYXBlciBhdAogCi0gICAgICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4CisgICAgICAgIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweAogCiAgICAgICBPcmlnaW5hbGx5LCBpdCB3YXMgYSBzZXBhcmF0ZSBwYXRjaCBhdmFpbGFibGUgZnJvbQogCkBAIC0xOTEwLDcgKzIxNDMsNyBAQAogICAgICAgb2YgIHRoZSAgbGlicmFyeSwgIG1haW5seSAgIGR1ZSAgdG8gIHBhdGVudCAgaXNzdWVzLiAgIEZvciAgbW9yZQogICAgICAgaW5mb3JtYXRpb24gc2VlOgogCi0gICAgICBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZnJlZXR5cGUvMjAwNi0wOS9tc2cwMDA2NC5odG1sCisgICAgICBodHRwczovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2ZyZWV0eXBlLzIwMDYtMDkvbXNnMDAwNjQuaHRtbAogCiAgICAgICBBICBuZXcgIGNvbmZpZ3VyYXRpb24gbWFjcm8gIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCiAgICAgICBoYXMgYmVlbiBpbnRyb2R1Y2VkIGluICBgZnRvcHRpb24uaCc7IG1hbnVhbGx5IGRlZmluZSBpdCBpbiB0aGlzCkBAIC0yMDEzLDcgKzIyNDYsNyBAQAogICAgICAgV2UgcHJvdmlkZSAgcGF0Y2hlcyBmb3IgIG1vc3Qgb2YgdGhvc2UgIHJvZ3VlIGNsaWVudHMuICAgU2VlIHRoZQogICAgICAgZm9sbG93aW5nIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246CiAKLSAgICAgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvZnJlZXR5cGUyL3BhdGNoZXMvcm9ndWUtcGF0Y2hlcy5odG1sCisgICAgICAgIGh0dHBzOi8vd3d3LmZyZWV0eXBlLm9yZy9mcmVldHlwZTIvcGF0Y2hlcy9yb2d1ZS1wYXRjaGVzLmh0bWwKIAogICAgICAgTm90ZSB0aGF0LCBhcyAgYSBjb252ZW5pZW5jZSB0byBvdXIgVW5peCAgZGVza3RvcCB1c2VycywgdmVyc2lvbgogICAgICAgMi4yIGlzICpiaW5hcnkqIGNvbXBhdGlibGUgd2l0aCBGcmVlVHlwZSAyLjEuNywgd2hpY2ggbWVhbnMgdGhhdApAQCAtMjEyNSw3ICsyMzU4LDcgQEAKIAogICAgIC0gUnVkaW1lbnRhcnkgc3VwcG9ydCBmb3IgQWRvYmUncyBuZXcgYFNJTkcgR2x5cGhsZXQnIGZvcm1hdC4gIFNlZQogCi0gICAgICAgIGh0dHA6Ly93d3cuYWRvYmUuY29tL3Byb2R1Y3RzL2luZGVzaWduL3NpbmdfZ2FpamkuaHRtbAorICAgICAgICBodHRwczovL3d3dy5hZG9iZS5jb20vY29udGVudC9kYW0vYWNvbS9lbi9kZXZuZXQvZm9udC9wZGZzLzUxNDguU0lOR19UdXRvcmlhbC5wZGYKIAogICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKQEAgLTIzMjksNyArMjU2Miw3IEBACiAgICAgICBjb3JyZWN0bHkgIHRyZWF0ZWQgYXMgYSAgQ0lELCBzaW1pbGFyICB0byBGcmVlVHlwZSdzICBDSUQgZHJpdmVyCiAgICAgICBtb2R1bGUuICBOb3RlIHRoYXQgQ0lEIENNYXAgc3VwcG9ydCBpcyBzdGlsbCBtaXNzaW5nLgogCi0gICAgLSBUaGUgRlRfRkFDRV9GTEFHU19HTFlQSF9OQU1FUyBmbGFnIGlzIG5vdyAgc2V0IGNvcnJlY3RseSBmb3IgYWxsCisgICAgLSBUaGUgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTIGZsYWcgIGlzIG5vdyAgc2V0IGNvcnJlY3RseSBmb3IgYWxsCiAgICAgICBmb250IGZvcm1hdHMuCiAKICAgICAtIFNvbWUgc3Vic2V0dGVkIFR5cGUgMSAgZm9udHMgd2VyZW4ndCBwYXJzZWQgY29ycmVjdGx5LiAgVGhpcyBidWcKQEAgLTI4MDIsNyArMzAzNSw3IEBACiAgICAgICBxdWFsaXR5IHNpbmNlICBtYW55IG5hc3R5IGRlZmF1bHRzIGhhdmUgYmVlbiBzdXBwcmVzc2VkLiAgUGxlYXNlCiAgICAgICB2aXNpdCB0aGUgd2ViIHBhZ2U6CiAKLSAgICAgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvaGludGluZy9zbW9vdGgtaGludGluZy5odG1sCisgICAgICAgIGh0dHBzOi8vd3d3LmZyZWV0eXBlLm9yZy9oaW50aW5nL3Ntb290aC1oaW50aW5nLmh0bWwKIAogICAgICAgZm9yIGFkZGl0aW9uYWwgZGV0YWlscyBvbiB0aGlzIHRvcGljLgogCkBAIC0zMDYxLDcgKzMyOTQsNyBAQAogICAgIC0gVGhlICBGcmVlVHlwZSAyICByZWRlc2lnbiBoYXMgIGJlZ3VuLiAgTW9yZSAgaW5mb3JtYXRpb24gIGNhbiBiZQogICAgICAgZm91bmQgYXQgdGhpcyBVUkw6CiAKLSAgICAgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvZnJlZXR5cGUyL3JlZGVzaWduLmh0bWwKKyAgICAgICAgaHR0cHM6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9yZWRlc2lnbi5odG1sCiAKICAgICAgIFRoZSBmb2xsb3dpbmcgIGludGVybmFsIGNoYW5nZXMgIGhhdmUgYmVlbiBwZXJmb3JtZWQgIHdpdGhpbiB0aGUKICAgICAgIHNvdXJjZXMgb2YgdGhpcyByZWxlYXNlOgpAQCAtMzY1MiwxMyArMzg4NSw3IEBACiAKICAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgc2VjdGlvbiBJIG9mIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnQ6CiAKLSAgICAgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvCi0gICAgICAgICAgZnJlZXR5cGUyL2RvY3MvdHV0b3JpYWwvc3RlcDEuaHRtbAotCi0gICAgICBvcgotCi0gICAgICAgIGh0dHA6Ly9mcmVldHlwZS5zb3VyY2Vmb3JnZS5uZXQvCi0gICAgICAgICAgZnJlZXR5cGUyL2RvY3MvdHV0b3JpYWwvc3RlcDEuaHRtbAorICAgICAgICBodHRwczovL3d3dy5mcmVldHlwZS5vcmcvZnJlZXR5cGUyL2RvY3MvdHV0b3JpYWwvc3RlcDEuaHRtbAogCiAgICAgLSBNYW55LCBtYW55IGNvbW1lbnRzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgcHVibGljIHNvdXJjZSBmaWxlIGluCiAgICAgICBvcmRlciB0byAgYXV0b21hdGljYWxseSBnZW5lcmF0ZSAgdGhlIEFQSSBSZWZlcmVuY2UgIHRocm91Z2ggdGhlCkBAIC0zNjY3LDcgKzM4OTQsNyBAQAogICAgICAgVGhlIGxhdHRlciBoYXMgYmVlbiB1cGRhdGVkICB0byBzdXBwb3J0IHRoZSBncm91cGluZyBvZiBzZWN0aW9ucwogICAgICAgaW4gY2hhcHRlcnMgYW5kIGJldHRlciBpbmRleCBzb3J0LiAgU2VlOgogCi0gICAgICAgIGh0dHA6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9kb2NzL3JlZmVyZW5jZS9mdDItdG9jLmh0bWwKKyAgICAgICAgaHR0cHM6Ly93d3cuZnJlZXR5cGUub3JnL2ZyZWV0eXBlMi9kb2NzL3JlZmVyZW5jZS9mdDItdG9jLmh0bWwKIAogCiAgIElJSS4gQ0hBTkdFUyBUTyBUSEUgQlVJTEQgUFJPQ0VTUwpAQCAtNDc0Miw3ICs0OTY5LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDAwLTIwMTcgYnkKK0NvcHlyaWdodCAyMDAwLTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSAgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCBtYXkgIG9ubHkgYmUgIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL0NVU1RPTUlaRSBiL2RvY3MvQ1VTVE9NSVpFCmluZGV4IDZkMTU4N2UuLjkxNmJlMzIgMTAwNjQ0Ci0tLSBhL2RvY3MvQ1VTVE9NSVpFCisrKyBiL2RvY3MvQ1VTVE9NSVpFCkBAIC0xMzksNyArMTM5LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwMy0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgb25seSAgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL2RvY3MvREVCVUcgYi9kb2NzL0RFQlVHCmluZGV4IGU1ZTkzOTAuLjc1MWVhZjAgMTAwNjQ0Ci0tLSBhL2RvY3MvREVCVUcKKysrIGIvZG9jcy9ERUJVRwpAQCAtMTkxLDcgKzE5MSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwMi0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5ICBvbmx5IGJlICB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9GVEwuVFhUIGIvZG9jcy9GVEwuVFhUCmluZGV4IDQzM2FiMDYuLmM0MDZkMTUgMTAwNjQ0Ci0tLSBhL2RvY3MvRlRMLlRYVAorKysgYi9kb2NzL0ZUTC5UWFQKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAgIE91ciBob21lIHBhZ2UgY2FuIGJlIGZvdW5kIGF0CiAKLSAgICBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZworICAgIGh0dHBzOi8vd3d3LmZyZWV0eXBlLm9yZwogCiAKIC0tLSBlbmQgb2YgRlRMLlRYVCAtLS0KZGlmZiAtLWdpdCBhL2RvY3MvSU5TVEFMTCBiL2RvY3MvSU5TVEFMTAppbmRleCBkNmVjMGQ4Li5mYzI0ZWExIDEwMDY0NAotLS0gYS9kb2NzL0lOU1RBTEwKKysrIGIvZG9jcy9JTlNUQUxMCkBAIC03Nyw3ICs3Nyw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IDIwMDAtMjAxNyBieQorQ29weXJpZ2h0IDIwMDAtMjAxOCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL0lOU1RBTEwuQU5ZIGIvZG9jcy9JTlNUQUxMLkFOWQppbmRleCAzMGI5NTc4Li40N2QwODBmIDEwMDY0NAotLS0gYS9kb2NzL0lOU1RBTEwuQU5ZCisrKyBiL2RvY3MvSU5TVEFMTC5BTlkKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDAzLTIwMTcgYnkKK0NvcHlyaWdodCAyMDAzLTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9JTlNUQUxMLkNST1NTIGIvZG9jcy9JTlNUQUxMLkNST1NTCmluZGV4IDFhODM3YWUuLmU4OTc3YTEgMTAwNjQ0Ci0tLSBhL2RvY3MvSU5TVEFMTC5DUk9TUworKysgYi9kb2NzL0lOU1RBTEwuQ1JPU1MKQEAgLTE2Myw3ICsxNjMsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDA2LTIwMTcgYnkKK0NvcHlyaWdodCAyMDA2LTIwMTggYnkKIHN1enVraSB0b3NoaXlhLCBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIApkaWZmIC0tZ2l0IGEvZG9jcy9JTlNUQUxMLkdOVSBiL2RvY3MvSU5TVEFMTC5HTlUKaW5kZXggNzliNTNkOC4uNTI2NDVmMSAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMLkdOVQorKysgYi9kb2NzL0lOU1RBTEwuR05VCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwMy0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgb2YgIHRoZSBGcmVlVHlwZSAgcHJvamVjdCwgYW5kICBtYXkgb25seSAgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL2RvY3MvSU5TVEFMTC5VTklYIGIvZG9jcy9JTlNUQUxMLlVOSVgKaW5kZXggOGI2MjBkYS4uYmI1NzgzNiAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMLlVOSVgKKysrIGIvZG9jcy9JTlNUQUxMLlVOSVgKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDAzLTIwMTcgYnkKK0NvcHlyaWdodCAyMDAzLTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9JTlNUQUxMLlZNUyBiL2RvY3MvSU5TVEFMTC5WTVMKaW5kZXggN2E1MTc0ZC4uYzFkMzBlMCAxMDA2NDQKLS0tIGEvZG9jcy9JTlNUQUxMLlZNUworKysgYi9kb2NzL0lOU1RBTEwuVk1TCkBAIC0xLDcgKzEsNyBAQAotSG93IHRvIGJ1aWxkIHRoZSBmcmVldHlwZTIgbGlicmFyeSBvbiBWTVMKK0hvdyB0byBidWlsZCB0aGUgRnJlZVR5cGUgMiBsaWJyYXJ5IG9uIFZNUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSXQgaXMgYWN0dWFsbHkgdmVyeSAgc3RyYWlnaHRmb3J3YXJkIHRvIGluc3RhbGwgdGhlIEZyZWV0eXBlMiBsaWJyYXJ5LgorSXQgaXMgYWN0dWFsbHkgdmVyeSBzdHJhaWdodGZvcndhcmQgdG8gaW5zdGFsbCB0aGUgRnJlZVR5cGUgMiBsaWJyYXJ5LgogSnVzdCAgZXhlY3V0ZSB2bXNfbWFrZS5jb20gZnJvbSAgdGhlIHRvcGxldmVsICBkaXJlY3RvcnkgdG8gIGJ1aWxkIHRoZQogbGlicmFyeS4gIFRoaXMgcHJvY2VkdXJlIGN1cnJlbnRseSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKIApAQCAtMTUsMTAgKzE1LDEwIEBACiAgIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgQyBjb21waWxlciBlLmcuIGNjb3B0PS9mbG9hdD1pZWVlCiAKIEluIGNhc2UgeW91IGRpZCBkb3dubG9hZCB0aGUgZGVtb3MsIHBsYWNlIHRoZW0gaW4gYSBzZXBhcmF0ZSBkaXJlY3RvcnkKLXNoYXJpbmcgdGhlIHNhbWUgdG9wbGV2ZWwgYXMgdGhlIGRpcmVjdG9yeSBvZiBGcmVldHlwZTIgYW5kIGZvbGxvdyB0aGUKLXNhbWUgIGluc3RydWN0aW9ucyBhcyAgYWJvdmUgIGZvciAgdGhlIGRlbW9zICBmcm9tICB0aGVyZS4gIFRoZSAgYnVpbGQKLXByb2Nlc3MgcmVsaWVzIG9uIHRoaXMgdG8gZmlndXJlIHRoZSBsb2NhdGlvbiBvZiB0aGUgRnJlZXR5cGUyIGluY2x1ZGUKLWZpbGVzLgorc2hhcmluZyB0aGUgc2FtZSB0b3AgbGV2ZWwgIGFzIHRoZSBkaXJlY3Rvcnkgb2YgRnJlZVR5cGUgMiAgYW5kIGZvbGxvdwordGhlIHNhbWUgaW5zdHJ1Y3Rpb25zIGFzIGFib3ZlIGZvciAgdGhlIGRlbW9zIGZyb20gIHRoZXJlLiAgVGhlICBidWlsZAorcHJvY2VzcyByZWxpZXMgb24gdGhpcyAgdG8gZmlndXJlIG91dCAgdGhlIGxvY2F0aW9uICBvZiB0aGUgRnJlZVR5cGUgMgoraW5jbHVkZSBmaWxlcy4KIAogCiBUbyByZWJ1aWxkICB0aGUgIHNvdXJjZXMgaXQgaXMgbmVjZXNzYXJ5IHRvICBoYXZlIE1NUy9NTUsgaW5zdGFsbGVkIG9uCkBAIC00OSw3ICs0OSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwMC0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgbWF5ICBvbmx5IGJlICB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9UT0RPIGIvZG9jcy9UT0RPCmluZGV4IGM0MzA0YjMuLjFhNDQzYTIgMTAwNjQ0Ci0tLSBhL2RvY3MvVE9ETworKysgYi9kb2NzL1RPRE8KQEAgLTI3LDcgKzI3LDcgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDAxLTIwMTcgYnkKK0NvcHlyaWdodCAyMDAxLTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSAgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCBtYXkgIG9ubHkgYmUgIHVzZWQsCmRpZmYgLS1naXQgYS9kb2NzL1ZFUlNJT05TLlRYVCBiL2RvY3MvVkVSU0lPTlMuVFhUCmluZGV4IGVjNDkxZGUuLmIwZDI1YjUgMTAwNjQ0Ci0tLSBhL2RvY3MvVkVSU0lPTlMuVFhUCisrKyBiL2RvY3MvVkVSU0lPTlMuVFhUCkBAIC01Miw2ICs1Miw5IEBACiAKICAgICByZWxlYXNlICAgICBsaWJ0b29sICAgICBzbwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIDIuOS4wICAgICAgMjIuMC4xNiAgIDYuMTYuMAorICAgICAyLjguMSAgICAgIDIxLjAuMTUgICA2LjE1LjAKKyAgICAgMi44LjAgICAgICAyMC4wLjE0ICAgNi4xNC4wCiAgICAgIDIuNy4xICAgICAgMTkuMC4xMyAgIDYuMTMuMAogICAgICAyLjcuMCAgICAgIDE4LjYuMTIgICA2LjEyLjYKICAgICAgMi42LjUgICAgICAxOC41LjEyICAgNi4xMi41CkBAIC05OCw3ICsxMDEsNyBAQAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICiAjaWYgKEZSRUVUWVBFX01BSk9SKjEwMDAgKyBGUkVFVFlQRV9NSU5PUikqMTAwMCArIEZSRUVUWVBFX1BBVENIIDwgMjAwMDAwOQotI2Vycm9yIEZyZWV0eXBlIHZlcnNpb24gdG9vIGxvdy4KKyNlcnJvciBGcmVlVHlwZSB2ZXJzaW9uIHRvbyBsb3cuCiAjZW5kaWYKICAgXSwKICAgW0FDX01TR19SRVNVTFQoeWVzKQpAQCAtMTEwLDcgKzExMyw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwMi0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5ICBvbmx5IGJlICB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9mb3JtYXRzLnR4dCBiL2RvY3MvZm9ybWF0cy50eHQKaW5kZXggNWU1NjA3My4uNzVhYmE5MiAxMDA2NDQKLS0tIGEvZG9jcy9mb3JtYXRzLnR4dAorKysgYi9kb2NzL2Zvcm1hdHMudHh0CkBAIC03LDkgKzcsMTIgQEAKICAgd3JhcHBlciBmb3JtYXQKICAgICBUaGUgZm9ybWF0IHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmb250IGRhdGEuICBJbiB0aGUgdGFibGUgYmVsb3cgaXQKICAgICBpcyAgdXNlZCBvbmx5ICBpZiB0aGUgIGZvbnQgZm9ybWF0ICBkaWZmZXJzLiAgUG9zc2libGUgIHZhbHVlcyBhcmUKLSAgICBgU0ZOVCcgKGJpbmFyeSksIGBQUycgIChhIHRleHQgaGVhZGVyLCBmb2xsb3dlZCBieSAgYmluYXJ5IG9yIHRleHQKLSAgICBkYXRhKSwgYExaVycgIChjb21wcmVzc2VkIHdpdGggIGVpdGhlciBgZ3ppcCcgb3IgIGBjb21wcmVzcycpLCBhbmQKLSAgICBgQloyJyAoY29tcHJlc3NlZCB3aXRoIGBiemlwMmApLgorCisgICAgICBTRk5UICBiaW5hcnkKKyAgICAgIFBGQiAgIGJpbmFyeQorICAgICAgUFMgICAgYSB0ZXh0IGhlYWRlciwgZm9sbG93ZWQgYnkgIGJpbmFyeSBvciB0ZXh0IGRhdGEKKyAgICAgIExaVyAgIGNvbXByZXNzZWQgd2l0aCAgZWl0aGVyIGBnemlwJyBvciBgY29tcHJlc3MnCisgICAgICBCWjIgICBjb21wcmVzc2VkIHdpdGggYGJ6aXAyJy4KIAogICBmb250IGZvcm1hdAogICAgIEhvdyB0aGUgZm9udCBpcyB0byBiZSBhY2Nlc3NlZCwgcG9zc2libHkgYWZ0ZXIgY29udmVydGluZyB0aGUgZmlsZQpAQCAtOTUsNiArOTgsOSBAQAogCiAKICAgLS0tICAgICBQUyAgICAgIFRZUEVfMSAgLS0tICAgICAgICB0eXBlMSAgICBUMV9TUEVDLnBkZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQRkEsIFR5cGUgMSBmb250IHJlc291cmNlKQorICBQRkIgICAgIFBTICAgICAgVFlQRV8xICAtLS0gICAgICAgIHR5cGUxICAgIFQxX1NQRUMucGRmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUwNDAuRG93bmxvYWRfRm9udHMucGRmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGBub3JtYWwnIFR5cGUgMSBmb250KQogICAtLS0gICAgIFBTICAgICAgVFlQRV8xICBDSUQgICAgICAgIGNpZCAgICAgIFBMUk0ucGRmIChDSUQgRm9udCBUeXBlIDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA5IGZvbnQpCkBAIC0xNDksMTAgKzE1NSwxMSBAQAogWzFdIFN1cHBvcnQgc2hvdWxkICBiZSByYXRoZXIgc2ltcGxlIHNpbmNlIHRoaXMgaXMgIGlkZW50aWNhbCB0byBgQ0ZGJwogICAgIGJ1dCBpbiBhIFBTIHdyYXBwZXIuCiAKLVsyXSBPZmZpY2lhbCBQRlIgc3BlY2lmaWNhdGlvbjoKK1syXSBUaGUgIG9mZmljaWFsICBQRlIgIHNwZWNpZmljYXRpb24gIGlzICBubyAgbG9uZ2VyICBhdmFpbGFibGUsICBidXQKKyAgICBhcmNoaXZlLm9yZyBoYXMgYXJjaGl2ZWQgaXQ6CiAKLSAgICAgIGh0dHA6Ly93d3cuYml0c3RyZWFtLmNvbS9jYXRlZ29yaWVzL2RldmVsb3Blci90cnVlZG9jL3BmcnNwZWMuaHRtbAotICAgICAgaHR0cDovL3d3dy5iaXRzdHJlYW0uY29tL2NhdGVnb3JpZXMvZGV2ZWxvcGVyL3RydWVkb2MvcGZyc3BlYzEuMi5wZGYKKyAgICAgIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA5MTAxNDA2MjMwMC9odHRwOi8vd3d3LmJpdHN0cmVhbS5jb20vZm9udF9yZW5kZXJpbmcvcHJvZHVjdHMvdHJ1ZWRvYy9wZnJzcGVjLmh0bWwKKyAgICAgIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA4MTExNTE1MjYwNS9odHRwOi8vd3d3LmJpdHN0cmVhbS5jb20vZm9udF9yZW5kZXJpbmcvcGRmcy9wZnJzcGVjMS4zLnBkZgogCiAgICAgVGhlIHN5bnRheCAgb2YgdGhlICBhdXhpbGlhcnkgZGF0YSAgaXMgbm90ICBkZWZpbmVkIHRoZXJlLCAgYnV0IGlzCiAgICAgcGFydGlhbGx5IGRlZmluZWQgaW4gTUhQIDEuMC4zIChhbHNvIGNhbGxlZCBFVFNJIFRTIDEwMTgxMiBWMS4zLjEpCkBAIC0xNjEsOCArMTY4LDYgQEAKICAgICAgIGh0dHA6Ly93d3cuZXRzaS5vcmcvCiAgICAgICBodHRwOi8vd2ViYXBwLmV0c2kub3JnL3dvcmtwcm9ncmFtL1JlcG9ydF9Xb3JrSXRlbS5hc3A/V0tJX0lEPTE4Nzk5CiAKLSAgICAoZnJlZSByZWdpc3RyYXRpb24gcmVxdWlyZWQpLgotCiBbM10gU3VwcG9ydCAgaXMgcnVkaW1lbnRhcnkgIGN1cnJlbnRseTsgc29tZSAgdGFibGVzIG9yICBkYXRhIGFyZSAgbm90CiAgICAgbG9hZGVkIHlldC4KIApAQCAtMTc4LDE1ICsxODMsMTUgQEAKICAgICBHZW9yZ2UgV2lsbGlhbXMgZGVkdWNlZCAgdGhlIGZvbnQgZm9ybWF0IGZyb20gdGhlICBYMTEgc291cmNlcyBhbmQKICAgICBkb2N1bWVudGVkIGl0IGZvciBoaXMgRm9udEZvcmdlIGZvbnQgZWRpdG9yOgogCi0gICAgICBodHRwOi8vZm9udGZvcmdlLmdpdGh1Yi5pby9wY2YtZm9ybWF0Lmh0bWwKKyAgICAgIGh0dHBzOi8vZm9udGZvcmdlLmdpdGh1Yi5pby9wY2YtZm9ybWF0Lmh0bWwKIAogWzVdIFRoaXMgaXMgZnJvbSBNUyBXaW5kb3dzIDM7IHNlZSBNaWNyb3NvZnQncyBLbm93bGVkZ2UgQmFzZSBhcnRpY2xlIGF0CiAKLSAgICAgIGh0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20va2IvNjUxMjMKKyAgICAgIGh0dHBzOi8vc3VwcG9ydC5taWNyb3NvZnQuY29tL2tiLzY1MTIzCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwNC0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgaXMgIHBhcnQgIG9mIHRoZSAgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5ICBvbmx5IGJlICB1c2VkLApAQCAtMTk3LDMgKzIwMiw3IEBACiAKIAogLS0tIGVuZCBvZiBmb3JtYXRzLnR4dCAtLS0KKworTG9jYWwgVmFyaWFibGVzOgorY29kaW5nOiB1dGYtOAorRW5kOgpkaWZmIC0tZ2l0IGEvZG9jcy9mcmVldHlwZS1jb25maWcuMSBiL2RvY3MvZnJlZXR5cGUtY29uZmlnLjEKaW5kZXggZDk4NDAwZC4uZTA2MGRjYiAxMDA2NDQKLS0tIGEvZG9jcy9mcmVldHlwZS1jb25maWcuMQorKysgYi9kb2NzL2ZyZWV0eXBlLWNvbmZpZy4xCkBAIC0xLDQgKzEsNCBAQAotLlRIIEZSRUVUWVBFLUNPTkZJRyAxICJEZWNlbWJlciAyMDE2IiAiRnJlZVR5cGUgMi43LjEiCisuVEggRlJFRVRZUEUtQ09ORklHIDEgIkphbnVhcnkgMjAxOCIgIkZyZWVUeXBlIDIuOSIKIC4KIC4KIC5TSCBOQU1FCmRpZmYgLS1naXQgYS9kb2NzL3Jhc3Rlci50eHQgYi9kb2NzL3Jhc3Rlci50eHQKaW5kZXggYmQzZmQwMC4uOGVmNDY2ZSAxMDA2NDQKLS0tIGEvZG9jcy9yYXN0ZXIudHh0CisrKyBiL2RvY3MvcmFzdGVyLnR4dApAQCAtNjE4LDcgKzYxOCw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwMy0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKIFRoaXMgIGZpbGUgIGlzICBwYXJ0ICBvZiB0aGUgIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgbWF5ICBvbmx5IGJlICB1c2VkLApkaWZmIC0tZ2l0IGEvZG9jcy9yZWxlYXNlIGIvZG9jcy9yZWxlYXNlCmluZGV4IGYwN2IwNjcuLjQ0YjRjYjEgMTAwNjQ0Ci0tLSBhL2RvY3MvcmVsZWFzZQorKysgYi9kb2NzL3JlbGVhc2UKQEAgLTE4OSw3ICsxODksNyBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNvcHlyaWdodCAyMDAzLTIwMTcgYnkKK0NvcHlyaWdodCAyMDAzLTIwMTggYnkKIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIAogVGhpcyAgZmlsZSBpcyAgcGFydCBvZiAgdGhlIEZyZWVUeXBlICBwcm9qZWN0LCBhbmQgIG1heSBvbmx5ICBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKaW5kZXggOWQ3Zjg4My4uOGZmMTQzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFOU0ktc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03MywxMSArNzMsMTEgQEAKIAogICAvKiBUaGUgc2l6ZSBvZiBhbiBgaW50JyB0eXBlLiAgKi8KICNpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJTlRfTUFYID09IDB4RkZGRlVMCi0jZGVmaW5lIEZUX1NJWkVPRl9JTlQgICgxNiAvIEZUX0NIQVJfQklUKQorI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAoIDE2IC8gRlRfQ0hBUl9CSVQgKQogI2VsaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUlOVF9NQVggPT0gMHhGRkZGRkZGRlVMCi0jZGVmaW5lIEZUX1NJWkVPRl9JTlQgICgzMiAvIEZUX0NIQVJfQklUKQorI2RlZmluZSBGVF9TSVpFT0ZfSU5UICAoIDMyIC8gRlRfQ0hBUl9CSVQgKQogI2VsaWYgRlRfVUlOVF9NQVggPiAweEZGRkZGRkZGVUwgJiYgRlRfVUlOVF9NQVggPT0gMHhGRkZGRkZGRkZGRkZGRkZGVUwKLSNkZWZpbmUgRlRfU0laRU9GX0lOVCAgKDY0IC8gRlRfQ0hBUl9CSVQpCisjZGVmaW5lIEZUX1NJWkVPRl9JTlQgICggNjQgLyBGVF9DSEFSX0JJVCApCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBzaXplIG9mIGBpbnQnIHR5cGUhIgogI2VuZGlmCkBAIC04NSwxMSArODUsMTEgQEAKICAgLyogVGhlIHNpemUgb2YgYSBgbG9uZycgdHlwZS4gIEEgZml2ZS1ieXRlIGBsb25nJyAoYXMgdXNlZCBlLmcuIG9uIHRoZSAqLwogICAvKiBETTY0MikgaXMgcmVjb2duaXplZCBidXQgYXZvaWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxPTkdfTUFYID09IDB4RkZGRkZGRkZVTAotI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKDMyIC8gRlRfQ0hBUl9CSVQpCisjZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoIDMyIC8gRlRfQ0hBUl9CSVQgKQogI2VsaWYgRlRfVUxPTkdfTUFYID4gMHhGRkZGRkZGRlVMICYmIEZUX1VMT05HX01BWCA9PSAweEZGRkZGRkZGRkZVTAotI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKDMyIC8gRlRfQ0hBUl9CSVQpCisjZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoIDMyIC8gRlRfQ0hBUl9CSVQgKQogI2VsaWYgRlRfVUxPTkdfTUFYID4gMHhGRkZGRkZGRlVMICYmIEZUX1VMT05HX01BWCA9PSAweEZGRkZGRkZGRkZGRkZGRkZVTAotI2RlZmluZSBGVF9TSVpFT0ZfTE9ORyAgKDY0IC8gRlRfQ0hBUl9CSVQpCisjZGVmaW5lIEZUX1NJWkVPRl9MT05HICAoIDY0IC8gRlRfQ0hBUl9CSVQgKQogI2Vsc2UKICNlcnJvciAiVW5zdXBwb3J0ZWQgc2l6ZSBvZiBgbG9uZycgdHlwZSEiCiAjZW5kaWYKQEAgLTIzNiwxMiArMjM2LDEyIEBACiAKICNlbmRpZgogCi0jaWYgRlRfU0laRU9GX0lOVCA9PSAoMzIgLyBGVF9DSEFSX0JJVCkKKyNpZiBGVF9TSVpFT0ZfSU5UID09ICggMzIgLyBGVF9DSEFSX0JJVCApCiAKICAgdHlwZWRlZiBzaWduZWQgaW50ICAgICAgRlRfSW50MzI7CiAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgIEZUX1VJbnQzMjsKIAotI2VsaWYgRlRfU0laRU9GX0xPTkcgPT0gKDMyIC8gRlRfQ0hBUl9CSVQpCisjZWxpZiBGVF9TSVpFT0ZfTE9ORyA9PSAoIDMyIC8gRlRfQ0hBUl9CSVQgKQogCiAgIHR5cGVkZWYgc2lnbmVkIGxvbmcgICAgIEZUX0ludDMyOwogICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBGVF9VSW50MzI7CkBAIC0yNTIsMTIgKzI1MiwxMiBAQAogCiAKICAgLyogbG9vayB1cCBhbiBpbnRlZ2VyIHR5cGUgdGhhdCBpcyBhdCBsZWFzdCAzMiBiaXRzICovCi0jaWYgRlRfU0laRU9GX0lOVCA+PSAoMzIgLyBGVF9DSEFSX0JJVCkKKyNpZiBGVF9TSVpFT0ZfSU5UID49ICggMzIgLyBGVF9DSEFSX0JJVCApCiAKICAgdHlwZWRlZiBpbnQgICAgICAgICAgICBGVF9GYXN0OwogICB0eXBlZGVmIHVuc2lnbmVkIGludCAgIEZUX1VGYXN0OwogCi0jZWxpZiBGVF9TSVpFT0ZfTE9ORyA+PSAoMzIgLyBGVF9DSEFSX0JJVCkKKyNlbGlmIEZUX1NJWkVPRl9MT05HID49ICggMzIgLyBGVF9DSEFSX0JJVCApCiAKICAgdHlwZWRlZiBsb25nICAgICAgICAgICBGVF9GYXN0OwogICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEZUX1VGYXN0OwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKICAgLyogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgaGF2ZSBhIDY0LWJpdCBpbnQgdHlwZSBmb3IgcGxhdGZvcm1zIHdpdGhvdXQgKi8KICAgLyogQXV0b2NvbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZiBGVF9TSVpFT0ZfTE9ORyA9PSAoNjQgLyBGVF9DSEFSX0JJVCkKKyNpZiBGVF9TSVpFT0ZfTE9ORyA9PSAoIDY0IC8gRlRfQ0hBUl9CSVQgKQogCiAgIC8qIEZUX0xPTkc2NCBtdXN0IGJlIGRlZmluZWQgaWYgYSA2NC1iaXQgdHlwZSBpcyBhdmFpbGFibGUgKi8KICNkZWZpbmUgRlRfTE9ORzY0CkBAIC0zMzMsNiArMzMzLDE1IEBACiAjZW5kaWYKIAogCisjaWZkZWYgX1dJTjY0CisgIC8qIG9ubHkgNjRiaXQgV2luZG93cyB1c2VzIHRoZSBMTFA2NCBkYXRhIG1vZGVsLCBpLmUuLCAqLworICAvKiAzMmJpdCBpbnRlZ2VycywgNjRiaXQgcG9pbnRlcnMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBfX2ludDY0KSh4KQorI2Vsc2UKKyNkZWZpbmUgRlRfVUlOVF9UT19QT0lOVEVSKCB4ICkgKHZvaWQqKSh1bnNpZ25lZCBsb25nKSh4KQorI2VuZGlmCisKKwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIG1pc2NlbGxhbmVvdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzU2LDYgKzM2NSwxNCBAQAogI2VuZGlmCiAKIAorICAvKiBVc2UgRlRfTE9DQUwgYW5kIEZUX0xPQ0FMX0RFRiB0byBkZWNsYXJlIGFuZCBkZWZpbmUsIHJlc3BlY3RpdmVseSwgKi8KKyAgLyogYSBmdW5jdGlvbiB0aGF0IGdldHMgdXNlZCBvbmx5IHdpdGhpbiB0aGUgc2NvcGUgb2YgYSBtb2R1bGUuICAgICAgICovCisgIC8qIE5vcm1hbGx5LCBib3RoIHRoZSBoZWFkZXIgYW5kIHNvdXJjZSBjb2RlIGZpbGVzIGZvciBzdWNoIGEgICAgICAgICAqLworICAvKiBmdW5jdGlvbiBhcmUgd2l0aGluIGEgc2luZ2xlIG1vZHVsZSBkaXJlY3RvcnkuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEludHJhLW1vZHVsZSBhcnJheXMgc2hvdWxkIGJlIHRhZ2dlZCB3aXRoIEZUX0xPQ0FMX0FSUkFZIGFuZCAgICAgICAqLworICAvKiBGVF9MT0NBTF9BUlJBWV9ERUYuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWZkZWYgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAogCiAjZGVmaW5lIEZUX0xPQ0FMKCB4ICkgICAgICBzdGF0aWMgIHgKQEAgLTM3Nyw2ICszOTQsMTIgQEAKICNkZWZpbmUgRlRfTE9DQUxfQVJSQVlfREVGKCB4ICkgIGNvbnN0ICB4CiAKIAorICAvKiBVc2UgRlRfQkFTRSBhbmQgRlRfQkFTRV9ERUYgdG8gZGVjbGFyZSBhbmQgZGVmaW5lLCByZXNwZWN0aXZlbHksICovCisgIC8qIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGluIG1vcmUgdGhhbiBhIHNpbmdsZSBtb2R1bGUuICBJbiB0aGUgICAgKi8KKyAgLyogY3VycmVudCBzZXR1cCB0aGlzIGltcGxpZXMgdGhhdCB0aGUgZGVjbGFyYXRpb24gaXMgaW4gYSBoZWFkZXIgICAqLworICAvKiBmaWxlIGluIHRoZSBgaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbCcgZGlyZWN0b3J5LCBhbmQgdGhlICAgICAgICovCisgIC8qIGZ1bmN0aW9uIGJvZHkgaXMgaW4gYSBmaWxlIGluIGBzcmMvYmFzZScuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2lmbmRlZiBGVF9CQVNFCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMzk5LDYgKzQyMiwzNyBAQAogI2VuZGlmIC8qICFGVF9CQVNFX0RFRiAqLwogCiAKKyAgLyogICBXaGVuIGNvbXBpbGluZyBGcmVlVHlwZSBhcyBhIERMTCwgc29tZSBzeXN0ZW1zL2NvbXBpbGVycyBuZWVkIGEgICAgICovCisgIC8qICAgc3BlY2lhbCBhdHRyaWJ1dGUgaW4gZnJvbnQgT1IgYWZ0ZXIgdGhlIHJldHVybiB0eXBlIG9mIGZ1bmN0aW9uICAgICAqLworICAvKiAgIGRlY2xhcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgVHdvIG1hY3JvcyBhcmUgdXNlZCB3aXRoaW4gdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHRvIGRlZmluZSAgICAgICAqLworICAvKiAgIGV4cG9ydGVkIGxpYnJhcnkgZnVuY3Rpb25zOiBGVF9FWFBPUlQgYW5kIEZUX0VYUE9SVF9ERUYuICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBGVF9FWFBPUlQoIHJldHVybl90eXBlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBhcyBpbiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5KiAgYWxpYnJhcnkgKTsgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIEZUX0VYUE9SVF9ERUYoIHJldHVybl90eXBlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICBpcyB1c2VkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkqICBhbGlicmFyeSApICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAuLi4gc29tZSBjb2RlIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFlvdSBjYW4gcHJvdmlkZSB5b3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiBGVF9FWFBPUlQgYW5kICAgICAgICAgICAgKi8KKyAgLyogICBGVF9FWFBPUlRfREVGIGhlcmUgaWYgeW91IHdhbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIFRvIGV4cG9ydCBhIHZhcmlhYmxlLCB1c2UgRlRfRVhQT1JUX1ZBUi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWZuZGVmIEZUX0VYUE9SVAogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTQwNyw2ICs0NjEsMTcgQEAKICNkZWZpbmUgRlRfRVhQT1JUKCB4ICkgIGV4dGVybiAgeAogI2VuZGlmCiAKKyNpZmRlZiBfV0lOMzIKKyNpZiBkZWZpbmVkKCBGVDJfQlVJTERfTElCUkFSWSApICYmIFwKKyAgICAoIGRlZmluZWQoIF9ETEwgKSB8fCBkZWZpbmVkKCBETExfRVhQT1JUICkgKQorI3VuZGVmIEZUX0VYUE9SVAorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19kZWNsc3BlYyggZGxsZXhwb3J0ICkgIHgKKyNlbGlmIGRlZmluZWQoIEZUMl9ETExJTVBPUlQgKQorI3VuZGVmIEZUX0VYUE9SVAorI2RlZmluZSBGVF9FWFBPUlQoIHggKSAgX19kZWNsc3BlYyggZGxsaW1wb3J0ICkgIHgKKyNlbmRpZgorI2VuZGlmCisKICNlbmRpZiAvKiAhRlRfRVhQT1JUICovCiAKIApAQCAtNDMxLDYgKzQ5Niw3IEBACiAKICNlbmRpZiAvKiAhRlRfRVhQT1JUX1ZBUiAqLwogCisKICAgLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIG5lZWRlZCB0byBjb21waWxlIHRoZSBsaWJyYXJ5IHdpdGggYSAgICovCiAgIC8qIEMrKyBjb21waWxlciBhbmQgd2l0aCAxNmJpdCBjb21waWxlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ0Miw3ICs1MDgsMTMgQEAKICAgLyogZnVuY3Rpb25zIHdoaWNoIGFyZSBhY2Nlc3NlZCBieSAoZ2xvYmFsKSBmdW5jdGlvbiBwb2ludGVycy4gICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogRlRfQ0FMTEJBQ0tfREVGIGlzIHVzZWQgdG8gX2RlZmluZV8gYSBjYWxsYmFjayBmdW5jdGlvbi4gICAgICAgICovCisgIC8qIEZUX0NBTExCQUNLX0RFRiBpcyB1c2VkIHRvIF9kZWZpbmVfIGEgY2FsbGJhY2sgZnVuY3Rpb24sICAgICAgICAqLworICAvKiBsb2NhdGVkIGluIHRoZSBzYW1lIHNvdXJjZSBjb2RlIGZpbGUgYXMgdGhlIHN0cnVjdHVyZSB0aGF0IHVzZXMgKi8KKyAgLyogaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBGVF9CQVNFX0NBTExCQUNLIGFuZCBGVF9CQVNFX0NBTExCQUNLX0RFRiBhcmUgdXNlZCB0byBkZWNsYXJlICAgKi8KKyAgLyogYW5kIGRlZmluZSBhIGNhbGxiYWNrIGZ1bmN0aW9uLCByZXNwZWN0aXZlbHksIGluIGEgc2ltaWxhciB3YXkgICovCisgIC8qIGFzIEZUX0JBU0UgYW5kIEZUX0JBU0VfREVGIHdvcmsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogRlRfQ0FMTEJBQ0tfVEFCTEUgaXMgdXNlZCB0byBfZGVjbGFyZV8gYSBjb25zdGFudCB2YXJpYWJsZSB0aGF0ICovCiAgIC8qIGNvbnRhaW5zIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDYyLDYgKzUzNCwxNiBAQAogI2VuZGlmCiAjZW5kaWYgLyogRlRfQ0FMTEJBQ0tfREVGICovCiAKKyNpZm5kZWYgRlRfQkFTRV9DQUxMQkFDSworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0soIHggKSAgICAgIGV4dGVybiAiQyIgIHgKKyNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDS19ERUYoIHggKSAgZXh0ZXJuICJDIiAgeAorI2Vsc2UKKyNkZWZpbmUgRlRfQkFTRV9DQUxMQkFDSyggeCApICAgICAgZXh0ZXJuICB4CisjZGVmaW5lIEZUX0JBU0VfQ0FMTEJBQ0tfREVGKCB4ICkgIHgKKyNlbmRpZgorI2VuZGlmIC8qIEZUX0JBU0VfQ0FMTEJBQ0sgKi8KKwogI2lmbmRlZiBGVF9DQUxMQkFDS19UQUJMRQogI2lmZGVmIF9fY3BsdXNwbHVzCiAjZGVmaW5lIEZUX0NBTExCQUNLX1RBQkxFICAgICAgZXh0ZXJuICJDIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKaW5kZXggZDQ5MWFmNS4uNzAyZjc3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEJ1aWxkIG1hY3JvcyBvZiB0aGUgRnJlZVR5cGUgMiBsaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMTgsMTQgKzMxOCwyOSBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86CisgICAqICAgRlRfRFJJVkVSX0gKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZworICAgKiAgIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHRoZSBkcml2ZXIgbW9kdWxlcy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0RSSVZFUl9IICA8ZnJlZXR5cGUvZnRkcml2ZXIuaD4KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKICAgICogICBGVF9BVVRPSElOVEVSX0gKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgogICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZwogICAgKiAgIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHRoZSBhdXRvLWhpbnRpbmcgbW9kdWxlLgogICAgKgorICAgKiAgIERlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAyLjk7IHVzZSBARlRfRFJJVkVSX0ggaW5zdGVhZC4KKyAgICoKICAgICovCi0jZGVmaW5lIEZUX0FVVE9ISU5URVJfSCAgPGZyZWV0eXBlL2Z0YXV0b2guaD4KKyNkZWZpbmUgRlRfQVVUT0hJTlRFUl9IICBGVF9EUklWRVJfSAogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzNyw4ICszNTIsMTAgQEAKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcKICAgICogICBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgcmVsYXRlZCB0byB0aGUgQ0ZGIGRyaXZlciBtb2R1bGUuCiAgICAqCisgICAqICAgRGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDIuOTsgdXNlIEBGVF9EUklWRVJfSCBpbnN0ZWFkLgorICAgKgogICAgKi8KLSNkZWZpbmUgRlRfQ0ZGX0RSSVZFUl9IICA8ZnJlZXR5cGUvZnRjZmZkcnYuaD4KKyNkZWZpbmUgRlRfQ0ZGX0RSSVZFUl9IICBGVF9EUklWRVJfSAogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM1MCw4ICszNjcsMTAgQEAKICAgICogICBBIG1hY3JvIHVzZWQgaW4gI2luY2x1ZGUgc3RhdGVtZW50cyB0byBuYW1lIHRoZSBmaWxlIGNvbnRhaW5pbmcKICAgICogICBzdHJ1Y3R1cmVzIGFuZCBtYWNyb3MgcmVsYXRlZCB0byB0aGUgVHJ1ZVR5cGUgZHJpdmVyIG1vZHVsZS4KICAgICoKKyAgICogICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi45OyB1c2UgQEZUX0RSSVZFUl9IIGluc3RlYWQuCisgICAqCiAgICAqLwotI2RlZmluZSBGVF9UUlVFVFlQRV9EUklWRVJfSCAgPGZyZWV0eXBlL2Z0dHRkcnYuaD4KKyNkZWZpbmUgRlRfVFJVRVRZUEVfRFJJVkVSX0ggIEZUX0RSSVZFUl9ICiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzYzLDggKzM4MiwxMCBAQAogICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZwogICAgKiAgIHN0cnVjdHVyZXMgYW5kIG1hY3JvcyByZWxhdGVkIHRvIHRoZSBQQ0YgZHJpdmVyIG1vZHVsZS4KICAgICoKKyAgICogICBEZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMi45OyB1c2UgQEZUX0RSSVZFUl9IIGluc3RlYWQuCisgICAqCiAgICAqLwotI2RlZmluZSBGVF9QQ0ZfRFJJVkVSX0ggIDxmcmVldHlwZS9mdHBjZmRydi5oPgorI2RlZmluZSBGVF9QQ0ZfRFJJVkVSX0ggIEZUX0RSSVZFUl9ICiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTU3LDYzICs1NzgsNiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAbWFjcm86Ci0gICAqICAgRlRfQ0FDSEVfSU1BR0VfSAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQotICAgKiAgIGBnbHlwaCBpbWFnZScgQVBJIG9mIHRoZSBGcmVlVHlwZX4yIGNhY2hlIHN1Yi1zeXN0ZW0uCi0gICAqCi0gICAqICAgSXQgaXMgdXNlZCB0byBkZWZpbmUgYSBjYWNoZSBmb3IgQEZUX0dseXBoIGVsZW1lbnRzLiAgWW91IGNhbiBhbHNvCi0gICAqICAgdXNlIHRoZSBBUEkgZGVmaW5lZCBpbiBARlRfQ0FDSEVfU01BTExfQklUTUFQU19IIGlmIHlvdSBvbmx5IG5lZWQgdG8KLSAgICogICBzdG9yZSBzbWFsbCBnbHlwaCBiaXRtYXBzLCBhcyBpdCB3aWxsIHVzZSBsZXNzIG1lbW9yeS4KLSAgICoKLSAgICogICBUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQuICBTaW1wbHkgaW5jbHVkZSBARlRfQ0FDSEVfSCB0byBoYXZlIGFsbAotICAgKiAgIGdseXBoIGltYWdlLXJlbGF0ZWQgY2FjaGUgZGVjbGFyYXRpb25zLgotICAgKgotICAgKi8KLSNkZWZpbmUgRlRfQ0FDSEVfSU1BR0VfSCAgRlRfQ0FDSEVfSAotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQG1hY3JvOgotICAgKiAgIEZUX0NBQ0hFX1NNQUxMX0JJVE1BUFNfSAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQotICAgKiAgIGBzbWFsbCBiaXRtYXBzJyBBUEkgb2YgdGhlIEZyZWVUeXBlfjIgY2FjaGUgc3ViLXN5c3RlbS4KLSAgICoKLSAgICogICBJdCBpcyB1c2VkIHRvIGRlZmluZSBhIGNhY2hlIGZvciBzbWFsbCBnbHlwaCBiaXRtYXBzIGluIGEgcmVsYXRpdmVseQotICAgKiAgIG1lbW9yeS1lZmZpY2llbnQgd2F5LiAgWW91IGNhbiBhbHNvIHVzZSB0aGUgQVBJIGRlZmluZWQgaW4KLSAgICogICBARlRfQ0FDSEVfSU1BR0VfSCBpZiB5b3Ugd2FudCB0byBjYWNoZSBhcmJpdHJhcnkgZ2x5cGggaW1hZ2VzLAotICAgKiAgIGluY2x1ZGluZyBzY2FsYWJsZSBvdXRsaW5lcy4KLSAgICoKLSAgICogICBUaGlzIG1hY3JvIGlzIGRlcHJlY2F0ZWQuICBTaW1wbHkgaW5jbHVkZSBARlRfQ0FDSEVfSCB0byBoYXZlIGFsbAotICAgKiAgIHNtYWxsIGJpdG1hcHMtcmVsYXRlZCBjYWNoZSBkZWNsYXJhdGlvbnMuCi0gICAqCi0gICAqLwotI2RlZmluZSBGVF9DQUNIRV9TTUFMTF9CSVRNQVBTX0ggIEZUX0NBQ0hFX0gKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBtYWNybzoKLSAgICogICBGVF9DQUNIRV9DSEFSTUFQX0gKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKLSAgICogICBgY2hhcm1hcCcgQVBJIG9mIHRoZSBGcmVlVHlwZX4yIGNhY2hlIHN1Yi1zeXN0ZW0uCi0gICAqCi0gICAqICAgVGhpcyBtYWNybyBpcyBkZXByZWNhdGVkLiAgU2ltcGx5IGluY2x1ZGUgQEZUX0NBQ0hFX0ggdG8gaGF2ZSBhbGwKLSAgICogICBjaGFybWFwLWJhc2VkIGNhY2hlIGRlY2xhcmF0aW9ucy4KLSAgICoKLSAgICovCi0jZGVmaW5lIEZUX0NBQ0hFX0NIQVJNQVBfSCAgRlRfQ0FDSEVfSAotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQG1hY3JvOgogICAgKiAgIEZUX01BQ19ICiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKQEAgLTc2MywxNyArNzI3LDYgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgotICAgKiAgIEZUX1VOUEFURU5URURfSElOVElOR19ICi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBEZXByZWNhdGVkLgotICAgKi8KLSNkZWZpbmUgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0ggIDxmcmVldHlwZS90dHVucGF0Lmg+Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAbWFjcm86CiAgICAqICAgRlRfSU5DUkVNRU5UQUxfSAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CkBAIC04MDksMjUgKzc2MiwzMCBAQAogCiAgIC8qICovCiAKKyAgLyogVGhlc2UgaGVhZGVyIGZpbGVzIGRvbid0IG5lZWQgdG8gYmUgaW5jbHVkZWQgYnkgdGhlIHVzZXIuICovCiAjZGVmaW5lIEZUX0VSUk9SX0RFRklOSVRJT05TX0ggIDxmcmVldHlwZS9mdGVycmRlZi5oPgorI2RlZmluZSBGVF9QQVJBTUVURVJfVEFHU19IICAgICA8ZnJlZXR5cGUvZnRwYXJhbXMuaD4KIAorICAvKiBEZXByZWNhdGVkIG1hY3Jvcy4gKi8KKyNkZWZpbmUgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0ggICA8ZnJlZXR5cGUvZnRwYXJhbXMuaD4KKyNkZWZpbmUgRlRfVFJVRVRZUEVfVU5QQVRFTlRFRF9IICA8ZnJlZXR5cGUvZnRwYXJhbXMuaD4KKworICAvKiBGVF9DQUNIRV9IIGlzIHRoZSBvbmx5IGhlYWRlciBmaWxlIG5lZWRlZCBmb3IgdGhlIGNhY2hlIHN1YnN5c3RlbS4gKi8KKyNkZWZpbmUgRlRfQ0FDSEVfSU1BR0VfSCAgICAgICAgICBGVF9DQUNIRV9ICisjZGVmaW5lIEZUX0NBQ0hFX1NNQUxMX0JJVE1BUFNfSCAgRlRfQ0FDSEVfSAorI2RlZmluZSBGVF9DQUNIRV9DSEFSTUFQX0ggICAgICAgIEZUX0NBQ0hFX0gKIAogICAvKiBUaGUgaW50ZXJuYWxzIG9mIHRoZSBjYWNoZSBzdWItc3lzdGVtIGFyZSBubyBsb25nZXIgZXhwb3NlZC4gIFdlICovCiAgIC8qIGRlZmF1bHQgdG8gRlRfQ0FDSEVfSCBhdCB0aGUgbW9tZW50IGp1c3QgaW4gY2FzZSwgYnV0IHdlIGtub3cgb2YgKi8KICAgLyogbm8gcm9ndWUgY2xpZW50IHRoYXQgdXNlcyB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEZUX0NBQ0hFX01BTkFHRVJfSCAgICAgICAgICAgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KLSNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfTVJVX0ggICAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgotI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9NQU5BR0VSX0ggIDxmcmVldHlwZS9mdGNhY2hlLmg+Ci0jZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX0NBQ0hFX0ggICAgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KLSNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfR0xZUEhfSCAgICA8ZnJlZXR5cGUvZnRjYWNoZS5oPgotI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9JTUFHRV9IICAgIDxmcmVldHlwZS9mdGNhY2hlLmg+Ci0jZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX1NCSVRTX0ggICAgPGZyZWV0eXBlL2Z0Y2FjaGUuaD4KLQotCi0jZGVmaW5lIEZUX0lOQ1JFTUVOVEFMX0ggICAgICAgICAgPGZyZWV0eXBlL2Z0aW5jcmVtLmg+Ci0KLSNkZWZpbmUgRlRfVFJVRVRZUEVfVU5QQVRFTlRFRF9IICA8ZnJlZXR5cGUvdHR1bnBhdC5oPgorI2RlZmluZSBGVF9DQUNIRV9NQU5BR0VSX0ggICAgICAgICAgIEZUX0NBQ0hFX0gKKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfTVJVX0ggICAgICBGVF9DQUNIRV9ICisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX01BTkFHRVJfSCAgRlRfQ0FDSEVfSAorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9DQUNIRV9IICAgIEZUX0NBQ0hFX0gKKyNkZWZpbmUgRlRfQ0FDSEVfSU5URVJOQUxfR0xZUEhfSCAgICBGVF9DQUNIRV9ICisjZGVmaW5lIEZUX0NBQ0hFX0lOVEVSTkFMX0lNQUdFX0ggICAgRlRfQ0FDSEVfSAorI2RlZmluZSBGVF9DQUNIRV9JTlRFUk5BTF9TQklUU19IICAgIEZUX0NBQ0hFX0gKIAogCiAgIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaAppbmRleCBjZjBkMmI2Li4xNTcyNDYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgKQEAgLTE5LDcgKzE5LDcgQEAKIC8vRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB0NDJfZHJpdmVyX2NsYXNzICkKIC8vRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB3aW5mbnRfZHJpdmVyX2NsYXNzICkKIC8vRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCBwY2ZfZHJpdmVyX2NsYXNzICkKLS8vRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc2F1eF9tb2R1bGVfY2xhc3MgKQorRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc2F1eF9tb2R1bGVfY2xhc3MgKQogRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc25hbWVzX21vZHVsZV9jbGFzcyApCiBGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIHBzaGludGVyX21vZHVsZV9jbGFzcyApCiBGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzcyApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAppbmRleCBhNTU5YmNkLi5mYTBkNjYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVXNlci1zZWxlY3RhYmxlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTc1LDE5ICs3NSwxNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIElmIHlvdSBlbmFibGUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiwgRnJlZVR5cGUgcmVjb2duaXplcyBhbiAgICAgICAqLwogICAvKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgYEZSRUVUWVBFX1BST1BFUlRJRVMnLCB3aGljaCBjYW4gYmUgdXNlZCAgKi8KICAgLyogdG8gY29udHJvbCB0aGUgdmFyaW91cyBmb250IGRyaXZlcnMgYW5kIG1vZHVsZXMuICBUaGUgY29udHJvbGxhYmxlICAgICovCi0gIC8qIHByb3BlcnRpZXMgYXJlIGxpc3RlZCBpbiB0aGUgc2VjdGlvbiBgQ29udHJvbGxpbmcgRnJlZVR5cGUgTW9kdWxlcycgICAqLwotICAvKiBpbiB0aGUgcmVmZXJlbmNlJ3MgdGFibGUgb2YgY29udGVudHM7IGN1cnJlbnRseSB0aGVyZSBhcmUgcHJvcGVydGllcyAgKi8KLSAgLyogZm9yIHRoZSBhdXRvLWhpbnRlciAoZmlsZSBgZnRhdXRvaC5oJyksIENGRiAoZmlsZSBgZnRjZmZkcnYuaCcpLCAgICAgICovCi0gIC8qIFRydWVUeXBlIChmaWxlIGBmdHR0ZHJ2LmgnKSwgYW5kIFBDRiAoZmlsZSBgZnRwY2ZkcnYuaCcpLiAgICAgICAgICAgICAqLworICAvKiBwcm9wZXJ0aWVzIGFyZSBsaXN0ZWQgaW4gdGhlIHNlY3Rpb24gQHByb3BlcnRpZXMuICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXggZm9ybSAoYnJva2VuIGhlcmUgaW50byAqLwogICAvKiBtdWx0aXBsZSBsaW5lcyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIDxvcHRpb25hbCB3aGl0ZXNwYWNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICA8bW9kdWxlLW5hbWUxPiAnOicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgPHByb3BlcnR5LW5hbWUxPiAnPScgPHByb3BlcnR5LXZhbHVlMT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtOTUsNiArOTMsNyBAQAogICAvKiAgIDxtb2R1bGUtbmFtZTI+ICc6JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICA8cHJvcGVydHktbmFtZTI+ICc9JyA8cHJvcGVydHktdmFsdWUyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwOCwyMCArMTA3LDE3IEBACiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdhbnQgdG8gYWN0aXZhdGUgc3ViLXBpeGVsIHJlbmRlcmluZyAgKi8KLSAgLyogKGEuay5hLiBMQ0QgcmVuZGVyaW5nLCBvciBDbGVhclR5cGUpIGluIHRoaXMgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICAgICovCisgIC8qIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3Ugd2FudCB0byBhY3RpdmF0ZSBMQ0QgcmVuZGVyaW5nICAgICAgICAqLworICAvKiB0ZWNobm9sb2d5IHNpbWlsYXIgdG8gQ2xlYXJUeXBlIGluIHRoaXMgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICBUaGlzICAgKi8KKyAgLyogdGVjaG5vbG9neSB0cmlwbGVzIHRoZSByZXNvbHV0aW9uIGluIHRoZSBkaXJlY3Rpb24gY29sb3Igc3VicGl4ZWxzLiAgICovCisgIC8qIFRvIG1pdGlnYXRlIGNvbG9yIGZyaW5nZXMgaW5oZXJlbnQgdG8gdGhpcyB0ZWNobm9sb2d5LCB5b3UgYWxzbyBuZWVkICAqLworICAvKiB0byBleHBsaWNpdGx5IHNldCB1cCBMQ0QgZmlsdGVyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE5vdGUgdGhhdCB0aGlzIGZlYXR1cmUgaXMgY292ZXJlZCBieSBzZXZlcmFsIE1pY3Jvc29mdCBwYXRlbnRzICAgICAgICAqLwogICAvKiBhbmQgc2hvdWxkIG5vdCBiZSBhY3RpdmF0ZWQgaW4gYW55IGRlZmF1bHQgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgbWFjcm8gaGFzIG5vIGltcGFjdCBvbiB0aGUgRnJlZVR5cGUgQVBJLCBvbmx5IG9uIGl0cyAgICAgICAgICAgICAqLwotICAvKiBfaW1wbGVtZW50YXRpb25fLiAgRm9yIGV4YW1wbGUsIHVzaW5nIEZUX1JFTkRFUl9NT0RFX0xDRCB3aGVuIGNhbGxpbmcgKi8KLSAgLyogRlRfUmVuZGVyX0dseXBoIHN0aWxsIGdlbmVyYXRlcyBhIGJpdG1hcCB0aGF0IGlzIDMgdGltZXMgd2lkZXIgdGhhbiAgICovCi0gIC8qIHRoZSBvcmlnaW5hbCBzaXplIGluIGNhc2UgdGhpcyBtYWNybyBpc24ndCBkZWZpbmVkOyBob3dldmVyLCBlYWNoICAgICAqLwotICAvKiB0cmlwbGV0IG9mIHN1YnBpeGVscyBoYXMgUj1HPUIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoaXMgaXMgZG9uZSB0byBhbGxvdyBGcmVlVHlwZSBjbGllbnRzIHRvIHJ1biB1bm1vZGlmaWVkLCBmb3JjaW5nICAgICAqLwotICAvKiB0aGVtIHRvIGRpc3BsYXkgbm9ybWFsIGdyYXktbGV2ZWwgYW50aS1hbGlhc2VkIGdseXBocy4gICAgICAgICAgICAgICAgKi8KKyAgLyogV2hlbiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkLCBGcmVlVHlwZSBvZmZlcnMgYWx0ZXJuYXRpdmUgTENEICAgICAgICovCisgIC8qIHJlbmRlcmluZyB0ZWNobm9sb2d5IHRoYXQgcHJvZHVjZXMgZXhjZWxsZW50IG91dHB1dCB3aXRob3V0IExDRCAgICAgICAqLworICAvKiBmaWx0ZXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCiAKQEAgLTIxNSw2ICsyMTEsMTAgQEAKICAgLyogICBEbyBub3QgI3VuZGVmIHRoaXMgbWFjcm8gaGVyZSBzaW5jZSB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IGRlZmluZSAgICovCiAgIC8qICAgaXQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBJZiB5b3UgdXNlIGEgYnVpbGQgc3lzdGVtIGxpa2UgY21ha2Ugb3IgdGhlIGBjb25maWd1cmUnIHNjcmlwdCwgICAgICovCisgIC8qICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZW5kZW5jZSwgb3ZlcndyaXRpbmcgdGhlICAgICAqLworICAvKiAgIHZhbHVlIGhlcmUgd2l0aCB0aGUgY29uZmlndXJlZCBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1lTVEVNX1pMSUIgKi8KIAogCkBAIC0yMzEsNiArMjMxLDEwIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4gICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgSWYgeW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlJyBzY3JpcHQsICAgICAqLworICAvKiAgIG9wdGlvbnMgc2V0IGJ5IHRob3NlIHByb2dyYW1zIGhhdmUgcHJlY2VuZGVuY2UsIG92ZXJ3cml0aW5nIHRoZSAgICAgKi8KKyAgLyogICB2YWx1ZSBoZXJlIHdpdGggdGhlIGNvbmZpZ3VyZWQgb25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9CWklQMiAqLwogCiAKQEAgLTI1NSw2ICsyNTksOSBAQAogICAvKiAgIHN1cHBvcnRlZCByZWdhcmRsZXNzIG9mIHRoaXMgY29uZmlndXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgYGZlYXR1cmUnLiAgICAgICAgICAgICAqLworICAvKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LCAgICAgKi8KKyAgLyogICBvcHRpb25zIHNldCBieSB0aG9zZSBwcm9ncmFtcyBoYXZlIHByZWNlbmRlbmNlLCBvdmVyd3JpdGluZyB0aGUgICAgICovCisgIC8qICAgdmFsdWUgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogQU5EUk9JRDogZW5hYmxlZCAqLwogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcKQEAgLTI3MCw1MyArMjc3LDE1IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGlzIGBmZWF0dXJlJy4gICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgSWYgeW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlJyBzY3JpcHQsICAgICAqLworICAvKiAgIG9wdGlvbnMgc2V0IGJ5IHRob3NlIHByb2dyYW1zIGhhdmUgcHJlY2VuZGVuY2UsIG92ZXJ3cml0aW5nIHRoZSAgICAgKi8KKyAgLyogICB2YWx1ZSBoZXJlIHdpdGggdGhlIGNvbmZpZ3VyZWQgb25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBETEwgZXhwb3J0IGNvbXBpbGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgV2hlbiBjb21waWxpbmcgRnJlZVR5cGUgYXMgYSBETEwsIHNvbWUgc3lzdGVtcy9jb21waWxlcnMgbmVlZCBhICAgICAqLwotICAvKiAgIHNwZWNpYWwga2V5d29yZCBpbiBmcm9udCBPUiBhZnRlciB0aGUgcmV0dXJuIHR5cGUgb2YgZnVuY3Rpb24gICAgICAgKi8KLSAgLyogICBkZWNsYXJhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIFR3byBtYWNyb3MgYXJlIHVzZWQgd2l0aGluIHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZSB0byBkZWZpbmUgICAgICAgKi8KLSAgLyogICBleHBvcnRlZCBsaWJyYXJ5IGZ1bmN0aW9uczogRlRfRVhQT1JUIGFuZCBGVF9FWFBPUlRfREVGLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgRlRfRVhQT1JUKCByZXR1cm5fdHlwZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgIGlzIHVzZWQgaW4gYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiwgYXMgaW4gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICBGVF9FWFBPUlQoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSogIGFsaWJyYXJ5ICk7ICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBGVF9FWFBPUlRfREVGKCByZXR1cm5fdHlwZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgaXMgdXNlZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIGFzIGluICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5KiAgYWxpYnJhcnkgKSAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgLi4uIHNvbWUgY29kZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBZb3UgY2FuIHByb3ZpZGUgeW91ciBvd24gaW1wbGVtZW50YXRpb24gb2YgRlRfRVhQT1JUIGFuZCAgICAgICAgICAgICovCi0gIC8qICAgRlRfRVhQT1JUX0RFRiBoZXJlIGlmIHlvdSB3YW50LiAgSWYgeW91IGxlYXZlIHRoZW0gdW5kZWZpbmVkLCB0aGV5ICAqLwotICAvKiAgIHdpbGwgYmUgbGF0ZXIgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIGBleHRlcm4gcmV0dXJuX3R5cGUnIHRvICAgICAgKi8KLSAgLyogICBhbGxvdyBub3JtYWwgY29tcGlsYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIERvIG5vdCAjdW5kZWYgdGhlc2UgbWFjcm9zIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBtaWdodCBkZWZpbmUgKi8KLSAgLyogICB0aGVtIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBGVF9FWFBPUlQoeCkgICAgICBleHRlcm4geCAqLwotLyogI2RlZmluZSBGVF9FWFBPUlRfREVGKHgpICB4ICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIEdseXBoIFBvc3RzY3JpcHQgTmFtZXMgaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBCeSBkZWZhdWx0LCBGcmVlVHlwZSAyIGlzIGNvbXBpbGVkIHdpdGggdGhlIGBwc25hbWVzJyBtb2R1bGUuICBUaGlzICovCkBAIC0zMjksNyArMjk4LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgLSBUaGUgVHJ1ZVR5cGUgZHJpdmVyIHdpbGwgcHJvdmlkZSBpdHMgb3duIHNldCBvZiBnbHlwaCBuYW1lcywgICAgICAqLwogICAvKiAgICAgaWYgeW91IGJ1aWxkIGl0IHRvIHN1cHBvcnQgcG9zdHNjcmlwdCBuYW1lcyBpbiB0aGUgVHJ1ZVR5cGUgICAgICAgKi8KLSAgLyogICAgIGBwb3N0JyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBgcG9zdCcgdGFibGUsIGJ1dCB3aWxsIG5vdCBzeW50aGVzaXplIGEgbWlzc2luZyBVbmljb2RlIGNoYXJtYXAuICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAtIFRoZSBUeXBlIDEgZHJpdmVyIHdpbGwgbm90IGJlIGFibGUgdG8gc3ludGhlc2l6ZSBhIFVuaWNvZGUgICAgICAgICovCiAgIC8qICAgICBjaGFybWFwIG91dCBvZiB0aGUgZ2x5cGhzIGZvdW5kIGluIHRoZSBmb250cy4gICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjg0LDcgKzY1Myw3IEBACiAgIC8qIFRoaXMgb3B0aW9uIHJlcXVpcmVzIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIgdG8gYmUgICAgICAqLwogICAvKiBkZWZpbmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFsxXSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweCAqLworICAvKiBbMV0gaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4ICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgIDEgICAgICAgICAqLwogCkBAIC03MDcsNyArNjc2LDcgQEAKICAgLyogY29tcG9zaXRlIGZsYWdzIGFycmF5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGRpc2FtYmlndWF0ZSwgYnV0IG9sZCAgICAgICovCiAgIC8qIGZvbnRzIHdpbGwgbm90IGhhdmUgdGhlbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvZ2x5Zi5odG0gICAgICAgICAgICAgICAgICovCisgIC8qICAgaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9nbHlmLmh0bSAgICAgICAgICAgICAgICAqLwogICAvKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDYvQ2hhcDZnbHlmLmh0bWwgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjdW5kZWYgVFRfQ09ORklHX09QVElPTl9DT01QT05FTlRfT0ZGU0VUX1NDQUxFRApAQCAtODA1LDYgKzc3NCwxNiBAQAogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFkb2JlIFR5cGUgMSAgICAgKi8KKyAgLyogZW5naW5lIGdldHMgY29tcGlsZWQgaW50byBGcmVlVHlwZS4gIElmIGRlZmluZWQsIGl0IGlzIHBvc3NpYmxlIHRvICAgICovCisgIC8qIHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gZW5naW5lcyB1c2luZyB0aGUgYGhpbnRpbmctZW5naW5lJyBwcm9wZXJ0eSBvZiAqLworICAvKiB0aGUgdHlwZTEgZHJpdmVyIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KICAgLyoqKiogICAgICAgICBDIEYgRiAgIEQgUiBJIFYgRSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAgICAgICoqKiovCkBAIC04MTksOCArNzk4LDggQEAKICAgLyogcG9zc2libGUgdG8gc2V0IHVwIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgZm91ciBjb250cm9sIHBvaW50cyB0aGF0ICovCiAgIC8qIGRlZmluZSB0aGUgc3RlbSBkYXJrZW5pbmcgYmVoYXZpb3VyIG9mIHRoZSAobmV3KSBDRkYgZW5naW5lLiAgRm9yICAgICAqLwogICAvKiBtb3JlIGRldGFpbHMgcGxlYXNlIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogYGRhcmtlbmluZy1wYXJhbWV0ZXJzJyBwcm9wZXJ0eSBvZiB0aGUgY2ZmIGRyaXZlciBtb2R1bGUgKGZpbGUgICAgICAgICovCi0gIC8qIGBmdGNmZmRydi5oJyksIHdoaWNoIGFsbG93cyB0aGUgY29udHJvbCBhdCBydW4tdGltZS4gICAgICAgICAgICAgICAgICAqLworICAvKiBgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5IChmaWxlIGBmdGRyaXZlci5oJyksIHdoaWNoIGFsbG93cyB0aGUgKi8KKyAgLyogY29udHJvbCBhdCBydW4tdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBEbyAqbm90KiB1bmRlZmluZSB0aGVzZSBtYWNyb3MhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04OTIsNyArODcxLDkgQEAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIENvbXBpbGUgYXV0b2ZpdCBtb2R1bGUgd2l0aCBJbmRpYyBzY3JpcHQgc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiBDb21waWxlIGF1dG9maXQgbW9kdWxlIHdpdGggZmFsbGJhY2sgSW5kaWMgc2NyaXB0IHN1cHBvcnQsIGNvdmVyaW5nICAgKi8KKyAgLyogc29tZSBzY3JpcHRzIHRoYXQgdGhlIGBsYXRpbicgc3VibW9kdWxlIG9mIHRoZSBhdXRvZml0IG1vZHVsZSBkb2Vzbid0ICovCisgIC8qICh5ZXQpIGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9JTkRJQwogCkBAIC05MDYsMTEgKzg4NywzMSBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogVGhpcyBleHBlcmltZW50YWwgb3B0aW9uIGlzIGFjdGl2ZSBvbmx5IGlmIHRoZSByZW5kZXJpbmcgbW9kZSBpcyAgICAgICovCiAgIC8qIEZUX1JFTkRFUl9NT0RFX0xJR0hUOyB5b3UgY2FuIHN3aXRjaCB3YXJwaW5nIG9uIGFuZCBvZmYgd2l0aCB0aGUgICAgICAqLwotICAvKiBgd2FycGluZycgcHJvcGVydHkgb2YgdGhlIGF1dG8taGludGVyIChzZWUgZmlsZSBgZnRhdXRvaC5oJyBmb3IgbW9yZSAgKi8KKyAgLyogYHdhcnBpbmcnIHByb3BlcnR5IG9mIHRoZSBhdXRvLWhpbnRlciAoc2VlIGZpbGUgYGZ0ZHJpdmVyLmgnIGZvciBtb3JlICovCiAgIC8qIGluZm9ybWF0aW9uOyBieSBkZWZhdWx0IGl0IGlzIHN3aXRjaGVkIG9mZikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSCiAKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBVc2UgVHJ1ZVR5cGUtbGlrZSBzaXplIG1ldHJpY3MgZm9yIGBsaWdodCcgYXV0by1oaW50aW5nLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGF2b2lkIHRoaXMgb3B0aW9uLCB3aGljaCBleGlzdHMgb25seSB0byAqLworICAvKiBoZWxwIHNvbWUgbGVnYWN5IGFwcGxpY2F0aW9ucyByZXRhaW4gaXRzIGFwcGVhcmFuY2UgYW5kIGJlaGF2aW91ciAgICAgKi8KKyAgLyogd2l0aCByZXNwZWN0IHRvIGF1dG8taGludGVkIFRydWVUeXBlIGZvbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgdmVyeSByZWFzb24gdGhpcyBvcHRpb24gZXhpc3RzIGF0IGFsbCBhcmUgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbnMgKi8KKyAgLyogbGlrZSBGZWRvcmEgdGhhdCBkaWQgbm90IHVuLXBhdGNoIHRoZSBmb2xsb3dpbmcgY2hhbmdlICh3aGljaCB3YXMgICAgICovCisgIC8qIHByZXNlbnQgaW4gRnJlZVR5cGUgYmV0d2VlbiB2ZXJzaW9ucyAyLjQuNiBhbmQgMi43LjEsIGluY2x1c2l2ZSkuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAyMDExLTA3LTE2ICBTdGV2ZW4gQ2h1ICA8c3RldmVuLmYuY2h1QGdtYWlsLmNvbT4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgW3RydWV0eXBlXSBGaXggbWV0cmljcyBvbiBzaXplIHJlcXVlc3QgZm9yIHNjYWxhYmxlIGZvbnRzLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoaXMgcHJvYmxlbWF0aWMgY29tbWl0IGlzIG5vdyByZXZlcnRlZCAobW9yZSBvciBsZXNzKS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9UVF9TSVpFX01FVFJJQ1MgKi8KKwogICAvKiAqLwogCiAKQEAgLTkyOCw2ICs5MjksNyBAQAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKICNkZWZpbmUgIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCiAjaWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICYgMQogI2RlZmluZSAgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICNlbmRpZgpAQCAtOTM2LDYgKzkzOCw3IEBACiAjZGVmaW5lICBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgogCiAKICAgLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCmluZGV4IDA1YTQ4NDUuLjQyZjlhMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEFOU0ktc3BlY2lmaWMgbGlicmFyeSBhbmQgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoc3BlY2lmaWNhdGlvbiAgICovCiAvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oCmluZGV4IGJmMTE5ZTMuLmVkYTk1ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgaGlnaC1sZXZlbCBBUEkgYW5kIGNvbW1vbiB0eXBlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEzOCw2ICsxMzgsNyBAQAogICAvKiAgICBGVF9GQUNFX0ZMQUdfVFJJQ0tZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRkFDRV9GTEFHX0tFUk5JTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9GQUNFX0ZMQUdfSElOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE0NywxNCArMTQ4LDE2IEBACiAgIC8qICAgIEZUX0hBU19LRVJOSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9IQVNfRklYRURfU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfSEFTX0dMWVBIX05BTUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9IQVNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSEFTX01VTFRJUExFX01BU1RFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9JU19TRk5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfSVNfU0NBTEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0lTX0ZJWEVEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9JU19DSURfS0VZRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfSVNfVFJJQ0tZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0lTX05BTUVEX0lOU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9JU19WQVJJQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX1NUWUxFX0ZMQUdfQk9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9TVFlMRV9GTEFHX0lUQUxJQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTU3NSw3ICs1NzgsOCBAQAogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgV2hlbiBhIG5ldyBmYWNlIGlzIGNyZWF0ZWQgKGVpdGhlciB0aHJvdWdoIEBGVF9OZXdfRmFjZSBvciAgICAgICAgICovCiAgIC8qICAgIEBGVF9PcGVuX0ZhY2UpLCB0aGUgbGlicmFyeSBsb29rcyBmb3IgYSBVbmljb2RlIGNoYXJtYXAgd2l0aGluICAgICAqLwotICAvKiAgICB0aGUgbGlzdCBhbmQgYXV0b21hdGljYWxseSBhY3RpdmF0ZXMgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdGhlIGxpc3QgYW5kIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVzIGl0LiAgSWYgdGhlcmUgaXMgbm8gVW5pY29kZSAgICovCisgIC8qICAgIGNoYXJtYXAsIEZyZWVUeXBlIGRvZXNuJ3Qgc2V0IGFuIGBhY3RpdmUnIGNoYXJtYXAuICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEFsc28+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFNlZSBARlRfQ2hhck1hcFJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gICAqLwpAQCAtNjQ3LDcgKzY1MSw3IEBACiAgIC8qICAgIEZUX0VOQ09ESU5HX01TX1NZTUJPTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIE1pY3Jvc29mdCBTeW1ib2wgZW5jb2RpbmcsIHVzZWQgdG8gZW5jb2RlIG1hdGhlbWF0aWNhbCBzeW1ib2xzICAgKi8KICAgLyogICAgICBhbmQgd2luZ2RpbmdzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgYGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290c3BlYy9yZWNvbS5odG0nLCAgICAgICAgICAqLworICAvKiAgICAgIGBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvb3RzcGVjL3JlY29tLmh0bScsICAgICAgICAgKi8KICAgLyogICAgICBgaHR0cDovL3d3dy5rb3N0aXMubmV0L2NoYXJzZXRzL3N5bWJvbC5odG0nLCBhbmQgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgYGh0dHA6Ly93d3cua29zdGlzLm5ldC9jaGFyc2V0cy93aW5nZGluZy5odG0nLiAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTY1Niw3ICs2NjAsNyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRU5DT0RJTkdfU0pJUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgU2hpZnQgSklTIGVuY29kaW5nIGZvciBKYXBhbmVzZS4gIE1vcmUgaW5mbyBhdCAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NoaWZ0X0pJUycuICBTZWUgbm90ZSBvbiAgICAgICAgICAgKi8KKyAgLyogICAgICBgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hpZnRfSklTJy4gIFNlZSBub3RlIG9uICAgICAgICAgICovCiAgIC8qICAgICAgbXVsdGktYnl0ZSBlbmNvZGluZ3MgYmVsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRU5DT0RJTkdfUFJDIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02NzIsNyArNjc2LDcgQEAKICAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgS29yZWFuIGVuY29kaW5nIHN5c3RlbSBrbm93biBhcyBFeHRlbmRlZCAgICAgICovCiAgIC8qICAgICAgV2Fuc3VuZyAoTVMgV2luZG93cyBjb2RlIHBhZ2UgOTQ5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvV2luZG93c0Jlc3RGaXQvYmVzdGZpdDk0OS50eHQnLiAqLworICAvKiAgICAgIGBodHRwczovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvV2luZG93c0Jlc3RGaXQvYmVzdGZpdDk0OS50eHQnLiAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRU5DT0RJTkdfSk9IQUIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgVGhlIEtvcmVhbiBzdGFuZGFyZCBjaGFyYWN0ZXIgc2V0IChLU35DIDU2MDEtMTk5MiksIHdoaWNoICAgICAgICAqLwpAQCAtNzQ4LDcgKzc1Miw3IEBACiAgIC8qICAgIEBGVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCB0byBxdWVyeSB0aGUgTWFjIGxhbmd1YWdlIElEIHRoYXQgbWF5ICAgICAqLwogICAvKiAgICBiZSBuZWVkZWQgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBBcHBsZSBlbmNvZGluZyB2YXJpYW50cy4gIFNlZSAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9BUFBMRS9SZWFkbWUudHh0ICAqLworICAvKiAgICAgIGh0dHBzOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9WRU5ET1JTL0FQUExFL1JlYWRtZS50eHQgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHRvIGdldCBhbiBpZGVhIGhvdyB0byBkbyB0aGF0LiAgQmFzaWNhbGx5LCBpZiB0aGUgbGFuZ3VhZ2UgSUQgICAgICAqLwogICAvKiAgICBpc34wLCBkb24ndCB1c2UgaXQsIG90aGVyd2lzZSBzdWJ0cmFjdCAxIGZyb20gdGhlIGxhbmd1YWdlIElELiAgICAgKi8KQEAgLTc3MSw3ICs3NzUsNyBAQAogICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX1dBTlNVTkcsICd3JywgJ2EnLCAnbicsICdzJyApLAogICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0pPSEFCLCAgICdqJywgJ28nLCAnaCcsICdhJyApLAogCi0gICAgLyogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisgICAgLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgICBGVF9FTkNPRElOR19HQjIzMTIgICAgID0gRlRfRU5DT0RJTkdfUFJDLAogICAgIEZUX0VOQ09ESU5HX01TX1NKSVMgICAgPSBGVF9FTkNPRElOR19TSklTLAogICAgIEZUX0VOQ09ESU5HX01TX0dCMjMxMiAgPSBGVF9FTkNPRElOR19QUkMsCkBAIC04MjYsOCArODMwLDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHBsYXRmb3JtX2lkIDo6IEFuIElEIG51bWJlciBkZXNjcmliaW5nIHRoZSBwbGF0Zm9ybSBmb3IgdGhlICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZW5jb2RpbmcgSUQuICBUaGlzIGNvbWVzIGRpcmVjdGx5IGZyb20gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gZ2V0cyBlbXVsYXRlZCAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgIGZvciBvdGhlciBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgZ2V0cyBlbXVsYXRlZCBmb3IgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgb3RoZXIgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBlbmNvZGluZ19pZCA6OiBBIHBsYXRmb3JtIHNwZWNpZmljIGVuY29kaW5nIG51bWJlci4gIFRoaXMgYWxzbyAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgY29tZXMgZnJvbSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgZ2V0cyAgICAgICovCkBAIC04ODcsMzQgKzg5MSw0MSBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBzZXQgdG9+MCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmYWNlIGluICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdHMgMTYtMzAgYXJlIHJlbGV2YW50IHRvIEdYIGFuZCBPcGVuVHlwZSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gZm9udHMgb25seSwgaG9sZGluZyB0aGUgbmFtZWQgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgaW5kZXggZm9yIHRoZSBjdXJyZW50IGZhY2UgaW5kZXggICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydGluZyB3aXRoIHZhbHVlfjE7IHZhbHVlfjAgaW5kaWNhdGVzICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGFjY2VzcyB3aXRob3V0IHZhcmlhdGlvbiBkYXRhKS4gIEZvciAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uLXZhcmlhdGlvbiBmb250cywgYml0cyAxNi0zMCBhcmUgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZWQuICBJZiB3ZSBoYXZlIHRoZSB0aGlyZCBuYW1lZCAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvZiBmYWNlfjQsIHNheSwgYGZhY2VfaW5kZXgnIGlzICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRvIDB4MDAwMzAwMDQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTaW5jZSAyLjYuMV0gQml0cyAxNi0zMCBhcmUgcmVsZXZhbnQgdG8gR1ggKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnRzIG9ubHksIGhvbGRpbmcgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWVkIGluc3RhbmNlIGluZGV4IGZvciB0aGUgY3VycmVudCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgaW5kZXggKHN0YXJ0aW5nIHdpdGggdmFsdWV+MTsgdmFsdWV+MCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgZm9udCBhY2Nlc3Mgd2l0aG91dCBhIG5hbWVkICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UpLiAgRm9yIG5vbi12YXJpYXRpb24gZm9udHMsIGJpdHMgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LTMwIGFyZSBpZ25vcmVkLiAgSWYgd2UgaGF2ZSB0aGUgdGhpcmQgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZCBpbnN0YW5jZSBvZiBmYWNlfjQsIHNheSwgYGZhY2VfaW5kZXgnICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIDB4MDAwMzAwMDQuICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMzEgaXMgYWx3YXlzIHplcm8gKHRoaXMgaXMsICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZhY2VfaW5kZXgnIGlzIGFsd2F5cyBhIHBvc2l0aXZlIHZhbHVlKS4gICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBbU2luY2UgMi45XSBDaGFuZ2luZyB0aGUgZGVzaWduIGNvb3JkaW5hdGVzICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBARlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMgb3IgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzIGRvZXMgbm90ICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZsdWVuY2UgdGhlIG5hbWVkIGluc3RhbmNlIGluZGV4IHZhbHVlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgQEZUX1NldF9OYW1lZF9JbnN0YW5jZSBkb2VzIHRoYXQpLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmFjZV9mbGFncyAgICAgICAgICA6OiBBIHNldCBvZiBiaXQgZmxhZ3MgdGhhdCBnaXZlIGltcG9ydGFudCAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhY2U7IHNlZSAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9GQUNFX0ZMQUdfWFhYIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHN0eWxlX2ZsYWdzICAgICAgICAgOjogVGhlIGxvd2VyIDE2fmJpdHMgY29udGFpbiBhIHNldCBvZiBiaXQgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIGluZGljYXRpbmcgdGhlIHN0eWxlIG9mIHRoZSBmYWNlOyBzZWUgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfU1RZTEVfRkxBR19YWFggZm9yIHRoZSBkZXRhaWxzLiAgQml0cyAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYtMzAgaG9sZCB0aGUgbnVtYmVyIG9mIG5hbWVkIGluc3RhbmNlcyAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgZmFjZSBpZiB3ZSBoYXZlIGEgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBHWCBvciBPcGVuVHlwZSB2YXJpYXRpb24gKHN1Yilmb250LiAgQml0IDMxICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgYWx3YXlzIHplcm8gKHRoaXMgaXMsIGBzdHlsZV9mbGFncycgaXMgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsd2F5cyBhIHBvc2l0aXZlIHZhbHVlKS4gIE5vdGUgdGhhdCBhICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYXRpb24gZm9udCBoYXMgYWx3YXlzIGF0IGxlYXN0IG9uZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWQgaW5zdGFuY2UsIG5hbWVseSB0aGUgZGVmYXVsdCAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfU1RZTEVfRkxBR19YWFggZm9yIHRoZSBkZXRhaWxzLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTaW5jZSAyLjYuMV0gQml0cyAxNi0zMCBob2xkIHRoZSBudW1iZXIgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBuYW1lZCBpbnN0YW5jZXMgYXZhaWxhYmxlIGZvciB0aGUgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCBmYWNlIGlmIHdlIGhhdmUgYSBHWCBvciBPcGVuVHlwZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbiAoc3ViKWZvbnQuICBCaXQgMzEgaXMgYWx3YXlzIHplcm8gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyBpcywgYHN0eWxlX2ZsYWdzJyBpcyBhbHdheXMgYSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmUgdmFsdWUpLiAgTm90ZSB0aGF0IGEgdmFyaWF0aW9uICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgaGFzIGFsd2F5cyBhdCBsZWFzdCBvbmUgbmFtZWQgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSwgbmFtZWx5IHRoZSBkZWZhdWx0IGluc3RhbmNlLiAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBudW1fZ2x5cGhzICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoZSBmYWNlLiAgSWYgdGhlICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlIGlzIHNjYWxhYmxlIGFuZCBoYXMgc2JpdHMgKHNlZSAgICAgICAgICovCkBAIC0xMDUxLDYgKzEwNjIsOSBAQAogICAvKiAgICBgZGVzY2VuZGVyJywgYGhlaWdodCcsIGB1bmRlcmxpbmVfcG9zaXRpb24nLCBhbmQgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYHVuZGVybGluZV90aGlja25lc3MnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFc3BlY2lhbGx5IGZvciBUcnVlVHlwZSBmb250cyBzZWUgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgICAgICAgKi8KKyAgLyogICAgQEZUX1NpemVfTWV0cmljcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfRmFjZVJlY18KICAgewogICAgIEZUX0xvbmcgICAgICAgICAgIG51bV9mYWNlczsKQEAgLTEyMTEsOCArMTIyNSwxNSBAQAogICAvKiAgICAgIHRyaWNreSBmb250czsgdGhleSBhcmUgaGFyZC1jb2RlZCBpbiBmaWxlIGB0dG9ianMuYycuICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0ZBQ0VfRkxBR19DT0xPUiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIFRoZSBmYWNlIGhhcyBjb2xvciBnbHlwaCB0YWJsZXMuICBUbyBhY2Nlc3MgY29sb3IgZ2x5cGhzIHVzZSAgICAgKi8KLSAgLyogICAgICBARlRfTE9BRF9DT0xPUi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgW1NpbmNlIDIuNS4xXSBUaGUgZmFjZSBoYXMgY29sb3IgZ2x5cGggdGFibGVzLiAgVG8gYWNjZXNzIGNvbG9yICAqLworICAvKiAgICAgIGdseXBocyB1c2UgQEZUX0xPQURfQ09MT1IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19WQVJJQVRJT04gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFtTaW5jZSAyLjldIFNldCBpZiB0aGUgY3VycmVudCBmYWNlIChvciBuYW1lZCBpbnN0YW5jZSkgaGFzIGJlZW4gKi8KKyAgLyogICAgICBhbHRlcmVkIHdpdGggQEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMsICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzLCBvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzLiAgVGhpcyBmbGFnIGlzIHVuc2V0IGJ5IGEgY2FsbCB0byAgKi8KKyAgLyogICAgICBARlRfU2V0X05hbWVkX0luc3RhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgICAgICAgICAgKCAxTCA8PCAgMCApCiAjZGVmaW5lIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyAgICAgICAoIDFMIDw8ICAxICkKQEAgLTEyMjksNiArMTI1MCw3IEBACiAjZGVmaW5lIEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgICAgICAgICAoIDFMIDw8IDEyICkKICNkZWZpbmUgRlRfRkFDRV9GTEFHX1RSSUNLWSAgICAgICAgICAgICggMUwgPDwgMTMgKQogI2RlZmluZSBGVF9GQUNFX0ZMQUdfQ09MT1IgICAgICAgICAgICAgKCAxTCA8PCAxNCApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19WQVJJQVRJT04gICAgICAgICAoIDFMIDw8IDE1ICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzkwLDYgKzE0MTIsMTQgQEAKICAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgaXMgYSBuYW1lZCBpbnN0YW5jZQogICAgKiAgIG9mIGEgR1ggb3IgT3BlblR5cGUgdmFyaWF0aW9uIGZvbnQuCiAgICAqCisgICAqICAgW1NpbmNlIDIuOV0gQ2hhbmdpbmcgdGhlIGRlc2lnbiBjb29yZGluYXRlcyB3aXRoCisgICAqICAgQEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzIG9yIEBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzIGRvZXMKKyAgICogICBub3QgaW5mbHVlbmNlIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBtYWNybyAob25seQorICAgKiAgIEBGVF9TZXRfTmFtZWRfSW5zdGFuY2UgZG9lcyB0aGF0KS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNworICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfTkFNRURfSU5TVEFOQ0UoIGZhY2UgKSBcCiAgICAgICAgICAgKCAoZmFjZSktPmZhY2VfaW5kZXggJiAweDdGRkYwMDAwTCApCkBAIC0xMzk4LDYgKzE0MjgsMjQgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQG1hY3JvOgorICAgKiAgIEZUX0lTX1ZBUklBVElPTiggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgaGFzIGJlZW4gYWx0ZXJlZAorICAgKiAgIGJ5IEBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzLCBARlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMsIG9yCisgICAqICAgQEZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjkKKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0lTX1ZBUklBVElPTiggZmFjZSApIFwKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19WQVJJQVRJT04gKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgogICAgKiAgIEZUX0lTX0NJRF9LRVlFRCggZmFjZSApCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKQEAgLTE0MzYsNiArMTQ4NCw5IEBACiAgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zCiAgICAqICAgdGFibGVzIGZvciBjb2xvciBnbHlwaHMuCiAgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjUuMQorICAgKgogICAgKi8KICNkZWZpbmUgRlRfSEFTX0NPTE9SKCBmYWNlICkgXAogICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NPTE9SICkKQEAgLTE1MDYsMjcgKzE1NTcsNDAgQEAKICAgLyogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWxzLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICBmb250IGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYXNjZW5kZXIgICAgIDo6IFRoZSBhc2NlbmRlciBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLiAgU2VlICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhc2NlbmRlciAgICAgOjogVGhlIGFzY2VuZGVyIGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMsIHJvdW5kZWQgdXAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHRvIGFuIGludGVnZXIgdmFsdWUuICBTZWUgQEZUX0ZhY2VSZWMgZm9yIHRoZSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVzY2VuZGVyICAgIDo6IFRoZSBkZXNjZW5kZXIgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gIFNlZSAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZXNjZW5kZXIgICAgOjogVGhlIGRlc2NlbmRlciBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLCByb3VuZGVkICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGRvd24gdG8gYW4gaW50ZWdlciB2YWx1ZS4gIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlICovCisgIC8qICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGVpZ2h0ICAgICAgIDo6IFRoZSBoZWlnaHQgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gIFNlZSAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICAgICAgOjogVGhlIGhlaWdodCBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLCByb3VuZGVkIHRvICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGFuIGludGVnZXIgdmFsdWUuICBTZWUgQEZUX0ZhY2VSZWMgZm9yIHRoZSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgbWF4X2FkdmFuY2UgIDo6IFRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggaW4gMjYuNiBmcmFjdGlvbmFsICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICBwaXhlbHMuICBTZWUgQEZUX0ZhY2VSZWMgZm9yIHRoZSBkZXRhaWxzLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgcGl4ZWxzLCByb3VuZGVkIHRvIGFuIGludGVnZXIgdmFsdWUuICBTZWUgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIHNjYWxpbmcgdmFsdWVzLCBpZiByZWxldmFudCwgYXJlIGRldGVybWluZWQgZmlyc3QgZHVyaW5nIGEgICAgICovCiAgIC8qICAgIHNpemUgY2hhbmdpbmcgb3BlcmF0aW9uLiAgVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIHRoZW4gc2V0IGJ5IHRoZSAqLwogICAvKiAgICBkcml2ZXIuICBGb3Igc2NhbGFibGUgZm9ybWF0cywgdGhleSBhcmUgdXN1YWxseSBzZXQgdG8gc2NhbGVkICAgICAgKi8KLSAgLyogICAgdmFsdWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBpbiBARlRfRmFjZVJlYy4gICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZhbHVlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgaW4gQEZUX0ZhY2VSZWMuICBTb21lIHZhbHVlcyAgICAqLworICAvKiAgICBsaWtlIGFzY2VuZGVyIG9yIGRlc2NlbmRlciBhcmUgcm91bmRlZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zOyAgICAgKi8KKyAgLyogICAgbW9yZSBwcmVjaXNlIHZhbHVlcyAoZm9yIG91dGxpbmUgZm9udHMpIGNhbiBiZSBkZXJpdmVkIGJ5IHNjYWxpbmcgICovCisgIC8qICAgIHRoZSBjb3JyZXNwb25kaW5nIEBGVF9GYWNlUmVjIHZhbHVlcyBtYW51YWxseSwgd2l0aCBjb2RlIHNpbWlsYXIgICAqLworICAvKiAgICB0byB0aGUgZm9sbG93aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgdGhhdCBkdWUgdG8gZ2x5cGggaGludGluZywgdGhlc2UgdmFsdWVzIG1pZ2h0IG5vdCBiZSBleGFjdCAgICAqLwotICAvKiAgICBmb3IgY2VydGFpbiBmb250cy4gIFRodXMgdGhleSBtdXN0IGJlIHRyZWF0ZWQgYXMgdW5yZWxpYWJsZSAgICAgICAgKi8KLSAgLyogICAgd2l0aCBhbiBlcnJvciBtYXJnaW4gb2YgYXQgbGVhc3Qgb25lIHBpeGVsISAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHNjYWxlZF9hc2NlbmRlciA9IEZUX011bEZpeCggZmFjZS0+YXNjZW5kZXIsICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfbWV0cmljcy0+eV9zY2FsZSApOyAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IGR1ZSB0byBnbHlwaCBoaW50aW5nIGFuZCB0aGUgc2VsZWN0ZWQgcmVuZGVyaW5nIG1vZGUgICAgICovCisgIC8qICAgIHRoZXNlIHZhbHVlcyBhcmUgdXN1YWxseSBub3QgZXhhY3Q7IGNvbnNlcXVlbnRseSwgdGhleSBtdXN0IGJlICAgICAqLworICAvKiAgICB0cmVhdGVkIGFzIHVucmVsaWFibGUgd2l0aCBhbiBlcnJvciBtYXJnaW4gb2YgYXQgbGVhc3Qgb25lIHBpeGVsISAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEluZGVlZCwgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgZXhhY3QgbWV0cmljcyBpcyB0byByZW5kZXIgX2FsbF8gICAqLwogICAvKiAgICBnbHlwaHMuICBBcyB0aGlzIHdvdWxkIGJlIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2UgaGl0LCBpdCBpcyB1cCB0byAgKi8KQEAgLTE1MzQsNiArMTU5OCw0MyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIGBGVF9TaXplX01ldHJpY3MnIHN0cnVjdHVyZSBpcyB2YWxpZCBmb3IgYml0bWFwIGZvbnRzIGFsc28uICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgKlRydWVUeXBlKiAqZm9udHMqICp3aXRoKiAqbmF0aXZlKiAqYnl0ZWNvZGUqICpoaW50aW5nKiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbGwgYXBwbGljYXRpb25zIHRoYXQgaGFuZGxlIFRydWVUeXBlIGZvbnRzIHdpdGggbmF0aXZlIGhpbnRpbmcgICAgKi8KKyAgLyogICAgbXVzdCBiZSBhd2FyZSB0aGF0IFRURnMgZXhwZWN0IGRpZmZlcmVudCByb3VuZGluZyBvZiB2ZXJ0aWNhbCBmb250ICovCisgIC8qICAgIGRpbWVuc2lvbnMuICBUaGUgYXBwbGljYXRpb24gaGFzIHRvIGNhdGVyIGZvciB0aGlzLCBlc3BlY2lhbGx5IGlmICAqLworICAvKiAgICBpdCB3YW50cyB0byByZWx5IG9uIGEgVFRGJ3MgdmVydGljYWwgZGF0YSAoZm9yIGV4YW1wbGUsIHRvICAgICAgICAgKi8KKyAgLyogICAgcHJvcGVybHkgYWxpZ24gYm94IGNoYXJhY3RlcnMgdmVydGljYWxseSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPbmx5IHRoZSBhcHBsaWNhdGlvbiBrbm93cyBfaW5fIF9hZHZhbmNlXyB0aGF0IGl0IGlzIGdvaW5nIHRvIHVzZSAgKi8KKyAgLyogICAgbmF0aXZlIGhpbnRpbmcgZm9yIFRURnMhICBGcmVlVHlwZSwgb24gdGhlIG90aGVyIGhhbmQsIHNlbGVjdHMgdGhlICovCisgIC8qICAgIGhpbnRpbmcgbW9kZSBub3QgYXQgdGhlIHRpbWUgb2YgY3JlYXRpbmcgYW4gQEZUX1NpemUgb2JqZWN0IGJ1dCAgICAqLworICAvKiAgICBtdWNoIGxhdGVyLCBuYW1lbHkgd2hpbGUgY2FsbGluZyBARlRfTG9hZF9HbHlwaC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhlcmUgaXMgc29tZSBwc2V1ZG8gY29kZSB0aGF0IGlsbHVzdHJhdGVzIGEgcG9zc2libGUgc29sdXRpb24uICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgZm9udF9mb3JtYXQgPSBGVF9HZXRfRm9udF9Gb3JtYXQoIGZhY2UgKTsgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBpZiAoICFzdHJjbXAoIGZvbnRfZm9ybWF0LCAiVHJ1ZVR5cGUiICkgJiYgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICBkb19uYXRpdmVfYnl0ZWNvZGVfaGludGluZyAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGFzY2VuZGVyICA9IFJPVU5EKCBGVF9NdWxGaXgoIGZhY2UtPmFzY2VuZGVyLCAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgKSApOyAgICAgICAqLworICAvKiAgICAgICAgZGVzY2VuZGVyID0gUk9VTkQoIEZUX011bEZpeCggZmFjZS0+ZGVzY2VuZGVyLCAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfbWV0cmljcy0+eV9zY2FsZSApICk7ICAgICAgICovCisgIC8qICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBhc2NlbmRlciAgPSBzaXplX21ldHJpY3MtPmFzY2VuZGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgZGVzY2VuZGVyID0gc2l6ZV9tZXRyaWNzLT5kZXNjZW5kZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGhlaWdodCAgICAgID0gc2l6ZV9tZXRyaWNzLT5oZWlnaHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBtYXhfYWR2YW5jZSA9IHNpemVfbWV0cmljcy0+bWF4X2FkdmFuY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NpemVfTWV0cmljc18KICAgewogICAgIEZUX1VTaG9ydCAgeF9wcGVtOyAgICAgIC8qIGhvcml6b250YWwgcGl4ZWxzIHBlciBFTSAgICAgICAgICAgICAgICovCkBAIC0xNjc1LDE3ICsxNzc2LDEzIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFLCBidXQgb3RoZXIgdmFsdWVzICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgcG9zc2libGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJpdG1hcCAgICAgICAgICAgIDo6IFRoaXMgZmllbGQgaXMgdXNlZCBhcyBhIGJpdG1hcCBkZXNjcmlwdG9yICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBzbG90IGZvcm1hdCBpcyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAuICBOb3RlIHRoYXQgdGhlICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgYW5kIGNvbnRlbnQgb2YgdGhlIGJpdG1hcCBidWZmZXIgY2FuICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgYmV0d2VlbiBjYWxscyBvZiBARlRfTG9hZF9HbHlwaCBhbmQgYSAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZmV3IG90aGVyIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJpdG1hcCAgICAgICAgICAgIDo6IFRoaXMgZmllbGQgaXMgdXNlZCBhcyBhIGJpdG1hcCBkZXNjcmlwdG9yLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlIGFkZHJlc3MgYW5kIGNvbnRlbnQgb2YgdGhlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIGJ1ZmZlciBjYW4gY2hhbmdlIGJldHdlZW4gY2FsbHMgb2YgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9Mb2FkX0dseXBoIGFuZCBhIGZldyBvdGhlciBmdW5jdGlvbnMuICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYml0bWFwX2xlZnQgICAgICAgOjogVGhlIGJpdG1hcCdzIGxlZnQgYmVhcmluZyBleHByZXNzZWQgaW4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIgcGl4ZWxzLiAgT25seSB2YWxpZCBpZiB0aGUgZm9ybWF0IGlzICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR0xZUEhfRk9STUFUX0JJVE1BUCwgdGhpcyBpcywgaWYgdGhlICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGggc2xvdCBjb250YWlucyBhIGJpdG1hcC4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXIgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYml0bWFwX3RvcCAgICAgICAgOjogVGhlIGJpdG1hcCdzIHRvcCBiZWFyaW5nIGV4cHJlc3NlZCBpbiBpbnRlZ2VyICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscy4gIFRoaXMgaXMgdGhlIGRpc3RhbmNlIGZyb20gdGhlICAgICAgICAqLwpAQCAtMTczMiw3ICsxODI5LDkgQEAKICAgLyogICAgSWYgQEZUX0xvYWRfR2x5cGggaXMgY2FsbGVkIHdpdGggZGVmYXVsdCBmbGFncyAoc2VlICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEBGVF9MT0FEX0RFRkFVTFQpIHRoZSBnbHlwaCBpbWFnZSBpcyBsb2FkZWQgaW4gdGhlIGdseXBoIHNsb3QgaW4gICAqLwogICAvKiAgICBpdHMgbmF0aXZlIGZvcm1hdCAoZS5nLiwgYW4gb3V0bGluZSBnbHlwaCBmb3IgVHJ1ZVR5cGUgYW5kIFR5cGV+MSAgKi8KLSAgLyogICAgZm9ybWF0cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZvcm1hdHMpLiAgW1NpbmNlIDIuOV0gVGhlIHByb3NwZWN0aXZlIGJpdG1hcCBtZXRyaWNzIGFyZSAgICAgICAgICAqLworICAvKiAgICBjYWxjdWxhdGVkIGFjY29yZGluZyB0byBARlRfTE9BRF9UQVJHRVRfWFhYIGFuZCBvdGhlciBmbGFncyBldmVuICAgKi8KKyAgLyogICAgZm9yIHRoZSBvdXRsaW5lIGdseXBoLCBldmVuIGlmIEBGVF9MT0FEX1JFTkRFUiBpcyBub3Qgc2V0LiAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUaGlzIGltYWdlIGNhbiBsYXRlciBiZSBjb252ZXJ0ZWQgaW50byBhIGJpdG1hcCBieSBjYWxsaW5nICAgICAgICAgKi8KICAgLyogICAgQEZUX1JlbmRlcl9HbHlwaC4gIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yICovCkBAIC0xNzQ4LDExICsxODQ3LDM3IEBACiAgIC8qICAgIGBzbG90LT5mb3JtYXQnIGlzIGFsc28gY2hhbmdlZCB0byBARlRfR0xZUEhfRk9STUFUX0JJVE1BUC4gICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgSGVyZSBpcyBhIHNtYWxsIHBzZXVkbyBjb2RlIGZyYWdtZW50IHRoYXQgc2hvd3MgaG93IHRvIHVzZSAgICAgICAgICovCi0gIC8qICAgIGBsc2JfZGVsdGEnIGFuZCBgcnNiX2RlbHRhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YScgdG8gZG8gZnJhY3Rpb25hbCBwb3NpdGlvbmluZyBvZiAgICAgICAgKi8KKyAgLyogICAgZ2x5cGhzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBGVF9Qb3MgIG9yaWdpbl94ICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgRlRfUG9zICBwcmV2X3JzYl9kZWx0YSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0dseXBoU2xvdCAgc2xvdCAgICAgPSBmYWNlLT5nbHlwaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9Qb3MgICAgICAgIG9yaWdpbl94ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBmb3IgYWxsIGdseXBocyBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICA8bG9hZCBnbHlwaCB3aXRoIGBGVF9Mb2FkX0dseXBoJz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBzbG90LT5vdXRsaW5lLCBvcmlnaW5feCAmIDYzLCAwICk7ICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgPHNhdmUgZ2x5cGggaW1hZ2UsIG9yIHJlbmRlciBnbHlwaCwgb3IgLi4uPiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICA8Y29tcHV0ZSBrZXJuIGJldHdlZW4gY3VycmVudCBhbmQgbmV4dCBnbHlwaCAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgIGFuZCBhZGQgaXQgdG8gYG9yaWdpbl94Jz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBvcmlnaW5feCArPSBzbG90LT5hZHZhbmNlLng7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgb3JpZ2luX3ggKz0gc2xvdC0+cnNiX2RlbHRhIC0gc2xvdC0+bHNiX2RlbHRhOyAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBlbmRmb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSGVyZSBpcyBhbm90aGVyIHNtYWxsIHBzZXVkbyBjb2RlIGZyYWdtZW50IHRoYXQgc2hvd3MgaG93IHRvIHVzZSAgICovCisgIC8qICAgIGBsc2JfZGVsdGEnIGFuZCBgcnNiX2RlbHRhJyB0byBpbXByb3ZlIGludGVnZXIgcG9zaXRpb25pbmcgb2YgICAgICAqLworICAvKiAgICBnbHlwaHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX0dseXBoU2xvdCAgc2xvdCAgICAgICAgICAgPSBmYWNlLT5nbHlwaDsgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9Qb3MgICAgICAgIG9yaWdpbl94ICAgICAgID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfUG9zICAgICAgICBwcmV2X3JzYl9kZWx0YSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgZm9yIGFsbCBnbHlwaHMgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTc2MSwxNiArMTg4NiwxNiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgIDxsb2FkIGdseXBoIHdpdGggYEZUX0xvYWRfR2x5cGgnPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgaWYgKCBwcmV2X3JzYl9kZWx0YSAtIGZhY2UtPmdseXBoLT5sc2JfZGVsdGEgPj0gMzIgKSAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGlmICggcHJldl9yc2JfZGVsdGEgLSBzbG90LT5sc2JfZGVsdGEgPiAgMzIgKSAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgIG9yaWdpbl94IC09IDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgZWxzZSBpZiAoIHByZXZfcnNiX2RlbHRhIC0gZmFjZS0+Z2x5cGgtPmxzYl9kZWx0YSA8IC0zMiApICAgICAgKi8KKyAgLyogICAgICAgIGVsc2UgaWYgKCBwcmV2X3JzYl9kZWx0YSAtIHNsb3QtPmxzYl9kZWx0YSA8IC0zMSApICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgIG9yaWdpbl94ICs9IDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgIHByZXZfcnNiX2RlbHRhID0gZmFjZS0+Z2x5cGgtPnJzYl9kZWx0YTsgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICBwcmV2X3JzYl9kZWx0YSA9IHNsb3QtPnJzYl9kZWx0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgIDxzYXZlIGdseXBoIGltYWdlLCBvciByZW5kZXIgZ2x5cGgsIG9yIC4uLj4gICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgb3JpZ2luX3ggKz0gZmFjZS0+Z2x5cGgtPmFkdmFuY2UueDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIG9yaWdpbl94ICs9IHNsb3QtPmFkdmFuY2UueDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgZW5kZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xODU1LDggKzE5ODAsOCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgSWYgY29tcGlsYXRpb24gb3B0aW9uIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUyBpcyAgICovCiAgIC8qICAgIHNldCwgdGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50ICAgICAqLwotICAvKiAgICB2YXJpYWJsZSB0byBjb250cm9sIGRyaXZlciBwcm9wZXJ0aWVzLiAgU2VlIHNlY3Rpb25zIEBhdXRvX2hpbnRlciwgKi8KLSAgLyogICAgQGNmZl9kcml2ZXIsIEBwY2ZfZHJpdmVyLCBhbmQgQHR0X2RyaXZlciBmb3IgbW9yZS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZhcmlhYmxlIHRvIGNvbnRyb2wgZHJpdmVyIHByb3BlcnRpZXMuICBTZWUgc2VjdGlvbiBAcHJvcGVydGllcyAgICAqLworICAvKiAgICBmb3IgbW9yZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9Jbml0X0ZyZWVUeXBlKCBGVF9MaWJyYXJ5ICAqYWxpYnJhcnkgKTsKQEAgLTIwMDQsNyArMjEyOSw3IEBACiAgIC8qICAgIGBudW1fcGFyYW1zJyBhbmQgYHBhcmFtcycgaXMgdXNlZC4gIFRoZXkgYXJlIGlnbm9yZWQgb3RoZXJ3aXNlLiAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgSWRlYWxseSwgYm90aCB0aGUgYHBhdGhuYW1lJyBhbmQgYHBhcmFtcycgZmllbGRzIHNob3VsZCBiZSB0YWdnZWQgICovCi0gIC8qICAgIGFzIGBjb25zdCc7IHRoaXMgaXMgbWlzc2luZyBmb3IgQVBJIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgSW4gICAqLworICAvKiAgICBhcyBgY29uc3QnOyB0aGlzIGlzIG1pc3NpbmcgZm9yIEFQSSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgSW4gICAgKi8KICAgLyogICAgb3RoZXIgd29yZHMsIGFwcGxpY2F0aW9ucyBzaG91bGQgdHJlYXQgdGhlbSBhcyByZWFkLW9ubHkuICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfT3Blbl9BcmdzXwpAQCAtMjExNSwxNCArMjI0MCwxNCBAQAogICAvKiAgICAgICAgICAgICAgICAgIHdpdGggdmFsdWV+MCkuICBTZXQgaXQgdG9+MCBpZiB0aGVyZSBpcyBvbmx5IG9uZSAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBmYWNlIGluIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIEJpdHMgMTYtMzAgYXJlIHJlbGV2YW50IHRvIEdYIGFuZCBPcGVuVHlwZSB2YXJpYXRpb24gKi8KLSAgLyogICAgICAgICAgICAgICAgICBmb250cyBvbmx5LCBzcGVjaWZ5aW5nIHRoZSBuYW1lZCBpbnN0YW5jZSBpbmRleCBmb3IgICovCi0gIC8qICAgICAgICAgICAgICAgICAgdGhlIGN1cnJlbnQgZmFjZSBpbmRleCAoc3RhcnRpbmcgd2l0aCB2YWx1ZX4xOyAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlfjAgbWFrZXMgRnJlZVR5cGUgaWdub3JlIG5hbWVkIGluc3RhbmNlcykuICBGb3IgKi8KLSAgLyogICAgICAgICAgICAgICAgICBub24tdmFyaWF0aW9uIGZvbnRzLCBiaXRzIDE2LTMwIGFyZSBpZ25vcmVkLiAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgQXNzdW1pbmcgdGhhdCB5b3Ugd2FudCB0byBhY2Nlc3MgdGhlIHRoaXJkIG5hbWVkICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGluc3RhbmNlIGluIGZhY2V+NCwgYGZhY2VfaW5kZXgnIHNob3VsZCBiZSBzZXQgdG8gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAweDAwMDMwMDA0LiAgSWYgeW91IHdhbnQgdG8gYWNjZXNzIGZhY2V+NCB3aXRob3V0ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgW1NpbmNlIDIuNi4xXSBCaXRzIDE2LTMwIGFyZSByZWxldmFudCB0byBHWCBhbmQgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250cyBvbmx5LCBzcGVjaWZ5aW5nIHRoZSBuYW1lZCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpbnN0YW5jZSBpbmRleCBmb3IgdGhlIGN1cnJlbnQgZmFjZSBpbmRleCAoc3RhcnRpbmcgICovCisgIC8qICAgICAgICAgICAgICAgICAgd2l0aCB2YWx1ZX4xOyB2YWx1ZX4wIG1ha2VzIEZyZWVUeXBlIGlnbm9yZSBuYW1lZCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGluc3RhbmNlcykuICBGb3Igbm9uLXZhcmlhdGlvbiBmb250cywgYml0cyAxNi0zMCBhcmUgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpZ25vcmVkLiAgQXNzdW1pbmcgdGhhdCB5b3Ugd2FudCB0byBhY2Nlc3MgdGhlIHRoaXJkICovCisgIC8qICAgICAgICAgICAgICAgICAgbmFtZWQgaW5zdGFuY2UgaW4gZmFjZX40LCBgZmFjZV9pbmRleCcgc2hvdWxkIGJlIHNldCAqLworICAvKiAgICAgICAgICAgICAgICAgIHRvIDB4MDAwMzAwMDQuICBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZmFjZX40IHdpdGhvdXQgKi8KICAgLyogICAgICAgICAgICAgICAgICB2YXJpYXRpb24gaGFuZGxpbmcsIHNpbXBseSBzZXQgYGZhY2VfaW5kZXgnIHRvICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgdmFsdWV+NC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI1NDAsNiArMjY2NSwxMCBAQAogICAvKiAgICBnbHlwaCByZWxhdGl2ZSB0byB0aGlzIHNpemUuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWZlciB0byAgICAgICAgKi8KICAgLyogICAgYGh0dHBzOi8vd3d3LmZyZWV0eXBlLm9yZy9mcmVldHlwZTIvZG9jcy9nbHlwaHMvZ2x5cGhzLTIuaHRtbCcuICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDb250cmFyeSB0byBARlRfU2V0X0NoYXJfU2l6ZSwgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgc3BlY2lhbCAgKi8KKyAgLyogICAgY29kZSB0byBub3JtYWxpemUgemVyby12YWx1ZWQgd2lkdGhzLCBoZWlnaHRzLCBvciByZXNvbHV0aW9ucyAgICAgICovCisgIC8qICAgICh3aGljaCBsZWFkIHRvIGVycm9ycyBpbiBtb3N0IGNhc2VzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLiAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKQEAgLTI4MjUsMjYgKzI5NTQsMjYgQEAKICAgICogICAgIERpc2FibGUgdGhlIGF1dG8taGludGVyLiAgU2VlIGFsc28gdGhlIG5vdGUgYmVsb3cuCiAgICAqCiAgICAqICAgRlRfTE9BRF9DT0xPUiA6OgotICAgKiAgICAgTG9hZCBlbWJlZGRlZCBjb2xvciBiaXRtYXAgaW1hZ2VzLiAgVGhlIHJlc3VsdGluZyBjb2xvciBiaXRtYXBzLAotICAgKiAgICAgaWYgYXZhaWxhYmxlLCB3aWxsIGhhdmUgdGhlIEBGVF9QSVhFTF9NT0RFX0JHUkEgZm9ybWF0LiAgSWYgdGhlCi0gICAqICAgICBmbGFnIGlzIG5vdCBzZXQgYW5kIGNvbG9yIGJpdG1hcHMgYXJlIGZvdW5kLCB0aGV5IGFyZSBjb252ZXJ0ZWQKLSAgICogICAgIHRvIDI1Ni1sZXZlbCBncmF5IGJpdG1hcHMgdHJhbnNwYXJlbnRseSwgdXNpbmcgdGhlCisgICAqICAgICBbU2luY2UgMi41XSBMb2FkIGVtYmVkZGVkIGNvbG9yIGJpdG1hcCBpbWFnZXMuICBUaGUgcmVzdWx0aW5nIGNvbG9yCisgICAqICAgICBiaXRtYXBzLCBpZiBhdmFpbGFibGUsIHdpbGwgaGF2ZSB0aGUgQEZUX1BJWEVMX01PREVfQkdSQSBmb3JtYXQuCisgICAqICAgICBJZiB0aGUgZmxhZyBpcyBub3Qgc2V0IGFuZCBjb2xvciBiaXRtYXBzIGFyZSBmb3VuZCwgdGhleSBhcmUKKyAgICogICAgIGNvbnZlcnRlZCB0byAyNTYtbGV2ZWwgZ3JheSBiaXRtYXBzIHRyYW5zcGFyZW50bHksIHVzaW5nIHRoZQogICAgKiAgICAgQEZUX1BJWEVMX01PREVfR1JBWSBmb3JtYXQuCiAgICAqCiAgICAqICAgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgOjoKLSAgICogICAgIENvbXB1dGUgZ2x5cGggbWV0cmljcyBmcm9tIHRoZSBnbHlwaCBkYXRhLCB3aXRob3V0IHRoZSB1c2Ugb2YKLSAgICogICAgIGJ1bmRsZWQgbWV0cmljcyB0YWJsZXMgKGZvciBleGFtcGxlLCB0aGUgYGhkbXgnIHRhYmxlIGluIFRydWVUeXBlCi0gICAqICAgICBmb250cykuICBUaGlzIGZsYWcgaXMgbWFpbmx5IHVzZWQgYnkgZm9udCB2YWxpZGF0aW5nIG9yIGZvbnQKLSAgICogICAgIGVkaXRpbmcgYXBwbGljYXRpb25zLCB3aGljaCBuZWVkIHRvIGlnbm9yZSwgdmVyaWZ5LCBvciBlZGl0IHRob3NlCi0gICAqICAgICB0YWJsZXMuCisgICAqICAgICBbU2luY2UgMi42LjFdIENvbXB1dGUgZ2x5cGggbWV0cmljcyBmcm9tIHRoZSBnbHlwaCBkYXRhLCB3aXRob3V0CisgICAqICAgICB0aGUgdXNlIG9mIGJ1bmRsZWQgbWV0cmljcyB0YWJsZXMgKGZvciBleGFtcGxlLCB0aGUgYGhkbXgnIHRhYmxlIGluCisgICAqICAgICBUcnVlVHlwZSBmb250cykuICBUaGlzIGZsYWcgaXMgbWFpbmx5IHVzZWQgYnkgZm9udCB2YWxpZGF0aW5nIG9yCisgICAqICAgICBmb250IGVkaXRpbmcgYXBwbGljYXRpb25zLCB3aGljaCBuZWVkIHRvIGlnbm9yZSwgdmVyaWZ5LCBvciBlZGl0CisgICAqICAgICB0aG9zZSB0YWJsZXMuCiAgICAqCiAgICAqICAgICBDdXJyZW50bHksIHRoaXMgZmxhZyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciBUcnVlVHlwZSBmb250cy4KICAgICoKICAgICogICBGVF9MT0FEX0JJVE1BUF9NRVRSSUNTX09OTFkgOjoKLSAgICogICAgIFJlcXVlc3QgbG9hZGluZyBvZiB0aGUgbWV0cmljcyBhbmQgYml0bWFwIGltYWdlIGluZm9ybWF0aW9uIG9mIGEKLSAgICogICAgIChwb3NzaWJseSBlbWJlZGRlZCkgYml0bWFwIGdseXBoIHdpdGhvdXQgYWxsb2NhdGluZyBvciBjb3B5aW5nCi0gICAqICAgICB0aGUgYml0bWFwIGltYWdlIGRhdGEgaXRzZWxmLiAgTm8gZWZmZWN0IGlmIHRoZSB0YXJnZXQgZ2x5cGggaXMKLSAgICogICAgIG5vdCBhIGJpdG1hcCBpbWFnZS4KKyAgICogICAgIFtTaW5jZSAyLjcuMV0gUmVxdWVzdCBsb2FkaW5nIG9mIHRoZSBtZXRyaWNzIGFuZCBiaXRtYXAgaW1hZ2UKKyAgICogICAgIGluZm9ybWF0aW9uIG9mIGEgKHBvc3NpYmx5IGVtYmVkZGVkKSBiaXRtYXAgZ2x5cGggd2l0aG91dAorICAgKiAgICAgYWxsb2NhdGluZyBvciBjb3B5aW5nIHRoZSBiaXRtYXAgaW1hZ2UgZGF0YSBpdHNlbGYuICBObyBlZmZlY3QgaWYKKyAgICogICAgIHRoZSB0YXJnZXQgZ2x5cGggaXMgbm90IGEgYml0bWFwIGltYWdlLgogICAgKgogICAgKiAgICAgVGhpcyBmbGFnIHVuc2V0cyBARlRfTE9BRF9SRU5ERVIuCiAgICAqCkBAIC0yOTI4LDE5ICszMDU3LDI5IEBACiAgICAqICAgICBBIGxpZ2h0ZXIgaGludGluZyBhbGdvcml0aG0gZm9yIGdyYXktbGV2ZWwgbW9kZXMuICBNYW55IGdlbmVyYXRlZAogICAgKiAgICAgZ2x5cGhzIGFyZSBmdXp6aWVyIGJ1dCBiZXR0ZXIgcmVzZW1ibGUgdGhlaXIgb3JpZ2luYWwgc2hhcGUuICBUaGlzCiAgICAqICAgICBpcyBhY2hpZXZlZCBieSBzbmFwcGluZyBnbHlwaHMgdG8gdGhlIHBpeGVsIGdyaWQgb25seSB2ZXJ0aWNhbGx5Ci0gICAqICAgICAoWS1heGlzKSwgYXMgaXMgZG9uZSBieSBNaWNyb3NvZnQncyBDbGVhclR5cGUgYW5kIEFkb2JlJ3MKLSAgICogICAgIHByb3ByaWV0YXJ5IGZvbnQgcmVuZGVyZXIuICBUaGlzIHByZXNlcnZlcyBpbnRlci1nbHlwaCBzcGFjaW5nIGluCisgICAqICAgICAoWS1heGlzKSwgYXMgaXMgZG9uZSBieSBGcmVlVHlwZSdzIG5ldyBDRkYgZW5naW5lIG9yIE1pY3Jvc29mdCdzCisgICAqICAgICBDbGVhclR5cGUgZm9udCByZW5kZXJlci4gIFRoaXMgcHJlc2VydmVzIGludGVyLWdseXBoIHNwYWNpbmcgaW4KICAgICogICAgIGhvcml6b250YWwgdGV4dC4gIFRoZSBzbmFwcGluZyBpcyBkb25lIGVpdGhlciBieSB0aGUgbmF0aXZlIGZvbnQKICAgICogICAgIGRyaXZlciwgaWYgdGhlIGRyaXZlciBpdHNlbGYgYW5kIHRoZSBmb250IHN1cHBvcnQgaXQsIG9yIGJ5IHRoZQogICAgKiAgICAgYXV0by1oaW50ZXIuCiAgICAqCisgICAqICAgICBBZHZhbmNlIHdpZHRocyBhcmUgcm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlczsgaG93ZXZlciwgdXNpbmcgdGhlCisgICAqICAgICBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YScgZmllbGRzIG9mIEBGVF9HbHlwaFNsb3RSZWMsIGl0IGlzCisgICAqICAgICBwb3NzaWJsZSB0byBnZXQgZnJhY3Rpb25hbCBhZHZhbmNlIHdpZHRocyBmb3Igc3ViLXBpeGVsIHBvc2l0aW9uaW5nCisgICAqICAgICAod2hpY2ggaXMgcmVjb21tZW5kZWQgdG8gdXNlKS4KKyAgICoKKyAgICogICAgIElmIGNvbmZpZ3VyYXRpb24gb3B0aW9uIEFGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTIGlzIGFjdGl2ZSwKKyAgICogICAgIFRydWVUeXBlLWxpa2UgbWV0cmljcyBhcmUgdXNlZCB0byBtYWtlIHRoaXMgbW9kZSBiZWhhdmUgc2ltaWxhcmx5CisgICAqICAgICBhcyBpbiB1bnBhdGNoZWQgRnJlZVR5cGUgdmVyc2lvbnMgYmV0d2VlbiAyLjQuNiBhbmQgMi43LjEKKyAgICogICAgIChpbmNsdXNpdmUpLgorICAgKgogICAgKiAgIEZUX0xPQURfVEFSR0VUX01PTk8gOjoKICAgICogICAgIFN0cm9uZyBoaW50aW5nIGFsZ29yaXRobSB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG1vbm9jaHJvbWUKICAgICogICAgIG91dHB1dC4gIFRoZSByZXN1bHQgaXMgcHJvYmFibHkgdW5wbGVhc2FudCBpZiB0aGUgZ2x5cGggaXMgcmVuZGVyZWQKICAgICogICAgIGluIG5vbi1tb25vY2hyb21lIG1vZGVzLgogICAgKgogICAgKiAgIEZUX0xPQURfVEFSR0VUX0xDRCA6OgotICAgKiAgICAgQSB2YXJpYW50IG9mIEBGVF9MT0FEX1RBUkdFVF9OT1JNQUwgb3B0aW1pemVkIGZvciBob3Jpem9udGFsbHkKKyAgICogICAgIEEgdmFyaWFudCBvZiBARlRfTE9BRF9UQVJHRVRfTElHSFQgb3B0aW1pemVkIGZvciBob3Jpem9udGFsbHkKICAgICogICAgIGRlY2ltYXRlZCBMQ0QgZGlzcGxheXMuCiAgICAqCiAgICAqICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgOjoKQEAgLTI5NjgsNiArMzEwNywxMyBAQAogICAgKiAgICAgICBGVF9SZW5kZXJfR2x5cGgoIGZhY2UtPmdseXBoLCBGVF9SRU5ERVJfTU9ERV9MQ0QgKTsKICAgICogICAgIH0KICAgICoKKyAgICogICBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHN0aWNrIHdpdGggb25lIHJlbmRlcmluZyBtb2RlLiAgRm9yIGV4YW1wbGUsCisgICAqICAgc3dpdGNoaW5nIGJldHdlZW4gQEZUX0xPQURfVEFSR0VUX05PUk1BTCBhbmQgQEZUX0xPQURfVEFSR0VUX01PTk8KKyAgICogICBlbmZvcmNlcyBhIGxvdCBvZiByZWNvbXB1dGF0aW9uIGZvciBUcnVlVHlwZSBmb250cywgd2hpY2ggaXMgc2xvdy4KKyAgICogICBBbm90aGVyIHJlYXNvbiBpcyBjYWNoaW5nOiBTZWxlY3RpbmcgYSBkaWZmZXJlbnQgbW9kZSB1c3VhbGx5IGNhdXNlcworICAgKiAgIGNoYW5nZXMgaW4gYm90aCB0aGUgb3V0bGluZXMgYW5kIHRoZSByYXN0ZXJpemVkIGJpdG1hcHM7IGl0IGlzIHRodXMKKyAgICogICBuZWNlc3NhcnkgdG8gZW1wdHkgdGhlIGNhY2hlIGFmdGVyIGEgbW9kZSBzd2l0Y2ggdG8gYXZvaWQgZmFsc2UgaGl0cy4KKyAgICoKICAgICovCiAjZGVmaW5lIEZUX0xPQURfVEFSR0VUXyggeCApICAgKCAoRlRfSW50MzIpKCAoeCkgJiAxNSApIDw8IDE2ICkKIApAQCAtMzA3MCwxMSArMzIxNiwxMyBAQAogICAvKiAgICAgIGdseXBoIG91dGxpbmUgaW4gcGl4ZWxzIGFuZCB1c2UgdGhlIEBGVF9QSVhFTF9NT0RFX0xDRF9WIG1vZGUuICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgTENELW9wdGltaXplZCBnbHlwaCBiaXRtYXBzIHByb2R1Y2VkIGJ5IGBGVF9SZW5kZXJfR2x5cGgnIGNhbiAgKi8KLSAgLyogICAgYmUgZmlsdGVyZWQgdG8gcmVkdWNlIGNvbG9yLWZyaW5nZXMgYnkgdXNpbmcgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciAobm90IGFjdGl2ZSBpbiB0aGUgZGVmYXVsdCBidWlsZHMpLiAgSXQgICAqLwotICAvKiAgICBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIGVpdGhlciBjYWxsIGBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcicgKGlmICAgKi8KLSAgLyogICAgYXZhaWxhYmxlKSBvciBkbyB0aGUgZmlsdGVyaW5nIGl0c2VsZi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNob3VsZCB5b3UgZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HIGluIHlvdXIgICAgICAqLworICAvKiAgICBgZnRvcHRpb24uaCcsIHdoaWNoIGVuYWJsZXMgcGF0ZW50ZWQgQ2xlYXJUeXBlLXN0eWxlIHJlbmRlcmluZywgICAgKi8KKyAgLyogICAgdGhlIExDRC1vcHRpbWl6ZWQgZ2x5cGggYml0bWFwcyBzaG91bGQgYmUgZmlsdGVyZWQgdG8gcmVkdWNlIGNvbG9yICovCisgIC8qICAgIGZyaW5nZXMgaW5oZXJlbnQgdG8gdGhpcyB0ZWNobm9sb2d5LiAgWW91IGNhbiBlaXRoZXIgc2V0IHVwIExDRCAgICAqLworICAvKiAgICBmaWx0ZXJpbmcgd2l0aCBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgb3IgQEZUX0ZhY2VfUHJvcGVydGllcywgICAgKi8KKyAgLyogICAgb3IgZG8gdGhlIGZpbHRlcmluZyB5b3Vyc2VsZi4gIFRoZSBkZWZhdWx0IEZyZWVUeXBlIExDRCByZW5kZXJpbmcgICovCisgIC8qICAgIHRlY2hub2xvZ3kgZG9lcyBub3QgcmVxdWlyZSBmaWx0ZXJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVGhlIHNlbGVjdGVkIHJlbmRlciBtb2RlIG9ubHkgYWZmZWN0cyB2ZWN0b3IgZ2x5cGhzIG9mIGEgZm9udC4gICAgICovCiAgIC8qICAgIEVtYmVkZGVkIGJpdG1hcHMgb2Z0ZW4gaGF2ZSBhIGRpZmZlcmVudCBwaXhlbCBtb2RlIGxpa2UgICAgICAgICAgICAqLwpAQCAtMzE1MCw3ICszMjk4LDcgQEAKICAgLyogICAgdGhpcyBkb2VzIG5vdCB0cmFuc2xhdGUgdG8gNTAlIGJyaWdodG5lc3MgZm9yIHRoYXQgcGl4ZWwgb24gb3VyICAgICovCiAgIC8qICAgIHNSR0IgYW5kIGdhbW1hfjIuMiBzY3JlZW5zLiAgRHVlIHRvIHRoZWlyIG5vbi1saW5lYXJpdHksIHRoZXkgICAgICAqLwogICAvKiAgICBkd2VsbCBsb25nZXIgaW4gdGhlIGRhcmtzIGFuZCBvbmx5IGEgcGl4ZWwgdmFsdWUgb2YgYWJvdXQgMTg2ICAgICAgKi8KLSAgLyogICAgcmVzdWx0cyBpbiA1MCUgYnJpZ2h0bmVzcyDigJMgMTI4IGVuZHMgdXAgdG9vIGRhcmsgb24gYm90aCBicmlnaHQgICAgKi8KKyAgLyogICAgcmVzdWx0cyBpbiA1MCUgYnJpZ2h0bmVzcyAtLSAxMjggZW5kcyB1cCB0b28gZGFyayBvbiBib3RoIGJyaWdodCAgICovCiAgIC8qICAgIGFuZCBkYXJrIGJhY2tncm91bmRzLiAgVGhlIG5ldCByZXN1bHQgaXMgdGhhdCBkYXJrIHRleHQgbG9va3MgICAgICAqLwogICAvKiAgICBidXJudC1vdXQsIHBpeGVseSBhbmQgYmxvdGNoeSBvbiBicmlnaHQgYmFja2dyb3VuZCwgYnJpZ2h0IHRleHQgICAgKi8KICAgLyogICAgdG9vIGZyYWlsIG9uIGRhcmsgYmFja2dyb3VuZHMsIGFuZCBjb2xvcmVkIHRleHQgb24gY29sb3JlZCAgICAgICAgICovCkBAIC0zNDAzLDYgKzM1NTEsMjAgQEAKICAgLyogICAgVGhlIHJldHVybmVkIHBvaW50ZXIgaXMgb3duZWQgYnkgdGhlIGZhY2UgYW5kIGlzIGRlc3Ryb3llZCB3aXRoICAgICovCiAgIC8qICAgIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRm9yIHZhcmlhdGlvbiBmb250cywgdGhpcyBzdHJpbmcgY2hhbmdlcyBpZiB5b3Ugc2VsZWN0IGEgZGlmZmVyZW50ICovCisgIC8qICAgIGluc3RhbmNlLCBhbmQgeW91IGhhdmUgdG8gY2FsbCBgRlRfR2V0X1Bvc3RTY3JpcHRfTmFtZScgYWdhaW4gdG8gICAqLworICAvKiAgICByZXRyaWV2ZSBpdC4gIEZyZWVUeXBlIGZvbGxvd3MgQWRvYmUgVGVjaE5vdGUgIzU5MDIsIGBHZW5lcmF0aW5nICAgKi8KKyAgLyogICAgUG9zdFNjcmlwdCBOYW1lcyBmb3IgRm9udHMgVXNpbmcgT3BlblR5cGUgRm9udCBWYXJpYXRpb25zJy4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGh0dHBzOi8vZG93bmxvYWQubWFjcm9tZWRpYS5jb20vcHViL2RldmVsb3Blci9vcGVudHlwZS90ZWNoLW5vdGVzLzU5MDIuQWRvYmVQU05hbWVHZW5lcmF0aW9uLmh0bWwgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFtTaW5jZSAyLjldIFNwZWNpYWwgUG9zdFNjcmlwdCBuYW1lcyBmb3IgbmFtZWQgaW5zdGFuY2VzIGFyZSBvbmx5ICAqLworICAvKiAgICByZXR1cm5lZCBpZiB0aGUgbmFtZWQgaW5zdGFuY2UgaXMgc2V0IHdpdGggQEZUX1NldF9OYW1lZF9JbnN0YW5jZSAgKi8KKyAgLyogICAgKGFuZCB0aGUgZm9udCBoYXMgY29ycmVzcG9uZGluZyBlbnRyaWVzIGluIGl0cyBgZnZhcicgdGFibGUpLiAgSWYgICovCisgIC8qICAgIEBGVF9JU19WQVJJQVRJT04gcmV0dXJucyB0cnVlLCB0aGUgYWxnb3JpdGhtaWNhbGx5IGRlcml2ZWQgICAgICAgICAqLworICAvKiAgICBQb3N0U2NyaXB0IG5hbWUgaXMgcHJvdmlkZWQsIG5vdCBsb29raW5nIHVwIHNwZWNpYWwgZW50cmllcyBmb3IgICAgKi8KKyAgLyogICAgbmFtZWQgaW5zdGFuY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIGNvbnN0IGNoYXIqICkKICAgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZSggRlRfRmFjZSAgZmFjZSApOwogCkBAIC0zNjMyLDE3ICszNzk0LDE3IEBACiAgICAqICAgTm90ZSB0aGF0IG9ubHkgYSBzdWJzZXQgb2YgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzIGNhbiBiZQogICAgKiAgIGNvbnRyb2xsZWQuCiAgICAqCi0gICAqICAgKiBTdGVtIGRhcmtlbmluZyAoQEZUX1BBUkFNX1RBR19TVEVNX0RBUktFTklORywgY29ycmVzcG9uZGluZyB0byB0aGUKLSAgICogICAgIHByb3BlcnR5IGBuby1zdGVtLWRhcmtlbmluZycgcHJvdmlkZWQgYnkgdGhlIGBhdXRvZml0JyBhbmQgYGNmZicKLSAgICogICAgIG1vZHVsZXM7IHNlZSBAbm8tc3RlbS1kYXJrZW5pbmdbYXV0b2ZpdF0gYW5kCi0gICAqICAgICBAbm8tc3RlbS1kYXJrZW5pbmdbY2ZmXSkuCisgICAqICAgKiBARlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HIChzdGVtIGRhcmtlbmluZywgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICogICAgIHByb3BlcnR5IGBuby1zdGVtLWRhcmtlbmluZycgcHJvdmlkZWQgYnkgdGhlIGBhdXRvZml0JywgYGNmZicsCisgICAqICAgICBgdHlwZTEnLCBhbmQgYHQxY2lkJyBtb2R1bGVzOyBzZWUgQG5vLXN0ZW0tZGFya2VuaW5nKS4KICAgICoKLSAgICogICAqIExDRCBmaWx0ZXIgd2VpZ2h0cyAoQEZUX1BBUkFNX1RBR19MQ0RfRklMVEVSX1dFSUdIVFMsIGNvcnJlc3BvbmRpbmcKKyAgICogICAqIEBGVF9QQVJBTV9UQUdfTENEX0ZJTFRFUl9XRUlHSFRTIChMQ0QgZmlsdGVyIHdlaWdodHMsIGNvcnJlc3BvbmRpbmcKICAgICogICAgIHRvIGZ1bmN0aW9uIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMpLgogICAgKgotICAgKiAgICogU2VlZCB2YWx1ZSBmb3IgdGhlIENGRiBgcmFuZG9tJyBvcGVyYXRvcgotICAgKiAgICAgKEBGVF9QQVJBTV9UQUdfUkFORE9NX1NFRUQsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGByYW5kb20tc2VlZCcKLSAgICogICAgIHByb3BlcnR5IHByb3ZpZGVkIGJ5IHRoZSBgY2ZmJyBtb2R1bGU7IHNlZSBAcmFuZG9tLXNlZWQpLgorICAgKiAgICogQEZUX1BBUkFNX1RBR19SQU5ET01fU0VFRCAoc2VlZCB2YWx1ZSBmb3IgdGhlIENGRiwgVHlwZX4xLCBhbmQgQ0lECisgICAqICAgICBgcmFuZG9tJyBvcGVyYXRvciwgY29ycmVzcG9uZGluZyB0byB0aGUgYHJhbmRvbS1zZWVkJyBwcm9wZXJ0eQorICAgKiAgICAgcHJvdmlkZWQgYnkgdGhlIGBjZmYnLCBgdHlwZTEnLCBhbmQgYHQxY2lkJyBtb2R1bGVzOyBzZWUKKyAgICogICAgIEByYW5kb20tc2VlZCkuCiAgICAqCiAgICAqICAgUGFzcyBOVUxMIGFzIGBkYXRhJyBpbiBARlRfUGFyYW1ldGVyIGZvciBhIGdpdmVuIHRhZyB0byByZXNldCB0aGUKICAgICogICBvcHRpb24gYW5kIHVzZSB0aGUgbGlicmFyeSBvciBtb2R1bGUgZGVmYXVsdCBhZ2Fpbi4KQEAgLTM3MDUsNiArMzg2Nyw5IEBACiAgICAqICAgICBGVF9GYWNlX1Byb3BlcnRpZXMoIGZhY2UsIDEsICZwcm9wZXJ0eSApOwogICAgKiAgIH0KICAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOAorICAgKgogICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0ZhY2VfUHJvcGVydGllcyggRlRfRmFjZSAgICAgICAgZmFjZSwKQEAgLTM4MjksNyArMzk5NCw3IEBACiAgIC8qICAgIGFuZCBzdWJzZXR0aW5nIHJlc3RyaWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmb250LiAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgU2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGh0dHA6Ly93d3cuYWRvYmUuY29tL2NvbnRlbnQvZGFtL0Fkb2JlL2VuL2Rldm5ldC9hY3JvYmF0L3BkZnMvRm9udFBvbGljaWVzLnBkZiAqLworICAvKiAgICBodHRwczovL3d3dy5hZG9iZS5jb20vY29udGVudC9kYW0vQWRvYmUvZW4vZGV2bmV0L2Fjcm9iYXQvcGRmcy9Gb250UG9saWNpZXMucGRmICovCiAgIC8qICAgIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zOTI5LDkgKzQwOTQsOSBAQAogICAvKiAgICBTZXF1ZW5jZXMnIChJVlMpLCBjb2xsZWN0ZWQgaW4gdGhlIGBJZGVvZ3JhcGhpYyBWYXJpYXRpb24gICAgICAgICAgKi8KICAgLyogICAgRGF0YWJhc2UnIChJVkQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGh0dHA6Ly91bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvU3RhbmRhcmRpemVkVmFyaWFudHMudHh0ICovCi0gIC8qICAgICAgaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIzNy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgIGh0dHA6Ly91bmljb2RlLm9yZy9pdmQvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBodHRwczovL3VuaWNvZGUub3JnL1B1YmxpYy9VQ0QvbGF0ZXN0L3VjZC9TdGFuZGFyZGl6ZWRWYXJpYW50cy50eHQgKi8KKyAgLyogICAgICBodHRwczovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHIzNy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgaHR0cHM6Ly91bmljb2RlLm9yZy9pdmQvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVG8gZGF0ZSAoSmFudWFyeSAyMDE3KSwgdGhlIGNoYXJhY3RlciB3aXRoIHRoZSBtb3N0IGlkZW9ncmFwaGljICAgICovCiAgIC8qICAgIHZhcmlhdGlvbnMgaXMgVSs5MDg5LCBoYXZpbmcgMzIgc3VjaCBJVlMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDI2Niw2ICs0NDMxLDkgQEAKICAgLyogICAgYGEnIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgMTYuMTYgZml4ZWQgaW50ZWdlciwgaGFsZndheSBjYXNlcyBhd2F5ICovCiAgIC8qICAgIGZyb20gemVyby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBmdW5jdGlvbiB1c2VzIHdyYXAtYXJvdW5kIGFyaXRobWV0aWMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9GaXhlZCApCiAgIEZUX1JvdW5kRml4KCBGVF9GaXhlZCAgYSApOwogCkBAIC00Mjg0LDYgKzQ0NTIsOSBAQAogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYGEnIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZ1bmN0aW9uIHVzZXMgd3JhcC1hcm91bmQgYXJpdGhtZXRpYy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0ZpeGVkICkKICAgRlRfQ2VpbEZpeCggRlRfRml4ZWQgIGEgKTsKIApAQCAtNDM4MCw4ICs0NTUxLDggQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZSRUVUWVBFX01BSk9SICAyCi0jZGVmaW5lIEZSRUVUWVBFX01JTk9SICA3Ci0jZGVmaW5lIEZSRUVUWVBFX1BBVENIICAxCisjZGVmaW5lIEZSRUVUWVBFX01JTk9SICA5CisjZGVmaW5lIEZSRUVUWVBFX1BBVENIICAwCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaAppbmRleCBkZWE5NmUwLi5mNzhlOGIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGFkdmFuYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFF1aWNrIGNvbXB1dGF0aW9uIG9mIGFkdmFuY2Ugd2lkdGhzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA4LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRhdXRvaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzAwYWUxLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRhdXRvaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0YXV0b2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBhdXRvLWhpbnRlciAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBGVEFVVE9IX0hfCi0jZGVmaW5lIEZUQVVUT0hfSF8KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0KLSNpZmRlZiBGUkVFVFlQRV9ICi0jZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgotI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCi0jZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKLSNlbmRpZgotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBzZWN0aW9uOgotICAgKiAgIGF1dG9faGludGVyCi0gICAqCi0gICAqIEB0aXRsZToKLSAgICogICBUaGUgYXV0by1oaW50ZXIKLSAgICoKLSAgICogQGFic3RyYWN0OgotICAgKiAgIENvbnRyb2xsaW5nIHRoZSBhdXRvLWhpbnRpbmcgbW9kdWxlLgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgV2hpbGUgRnJlZVR5cGUncyBhdXRvLWhpbnRlciBkb2Vzbid0IGV4cG9zZSBBUEkgZnVuY3Rpb25zIGJ5IGl0c2VsZiwKLSAgICogICBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvdXIgd2l0aCBARlRfUHJvcGVydHlfU2V0IGFuZAotICAgKiAgIEBGVF9Qcm9wZXJ0eV9HZXQuICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSBhdmFpbGFibGUgcHJvcGVydGllcwotICAgKiAgIHRvZ2V0aGVyIHdpdGggdGhlIG5lY2Vzc2FyeSBtYWNyb3MgYW5kIHN0cnVjdHVyZXMuCi0gICAqCi0gICAqICAgTm90ZSB0aGF0IHRoZSBhdXRvLWhpbnRlcidzIG1vZHVsZSBuYW1lIGlzIGBhdXRvZml0dGVyJyBmb3IKLSAgICogICBoaXN0b3JpY2FsIHJlYXNvbnMuCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBwcm9wZXJ0eToKLSAgICogICBnbHlwaC10by1zY3JpcHQtbWFwCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKLSAgICoKLSAgICogICBUaGUgYXV0by1oaW50ZXIgcHJvdmlkZXMgdmFyaW91cyBzY3JpcHQgbW9kdWxlcyB0byBoaW50IGdseXBocy4KLSAgICogICBFeGFtcGxlcyBvZiBzdXBwb3J0ZWQgc2NyaXB0cyBhcmUgTGF0aW4gb3IgQ0pLLiAgQmVmb3JlIGEgZ2x5cGggaXMKLSAgICogICBhdXRvLWhpbnRlZCwgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIG1hcCBvZiB0aGUgZm9udCBnZXRzIGV4YW1pbmVkLCBhbmQKLSAgICogICB0aGUgc2NyaXB0IGlzIHRoZW4gZGV0ZXJtaW5lZCBiYXNlZCBvbiBVbmljb2RlIGNoYXJhY3RlciByYW5nZXMsIHNlZQotICAgKiAgIGJlbG93LgotICAgKgotICAgKiAgIE9wZW5UeXBlIGZvbnRzLCBob3dldmVyLCBvZnRlbiBwcm92aWRlIG11Y2ggbW9yZSBnbHlwaHMgdGhhbgotICAgKiAgIGNoYXJhY3RlciBjb2RlcyAoc21hbGwgY2Fwcywgc3VwZXJzY3JpcHRzLCBsaWdhdHVyZXMsIHN3YXNoZXMsIGV0Yy4pLAotICAgKiAgIHRvIGJlIGNvbnRyb2xsZWQgYnkgc28tY2FsbGVkIGBmZWF0dXJlcycuICBIYW5kbGluZyBPcGVuVHlwZSBmZWF0dXJlcwotICAgKiAgIGNhbiBiZSBxdWl0ZSBjb21wbGljYXRlZCBhbmQgdGh1cyBuZWVkcyBhIHNlcGFyYXRlIGxpYnJhcnkgb24gdG9wIG9mCi0gICAqICAgRnJlZVR5cGUuCi0gICAqCi0gICAqICAgVGhlIG1hcHBpbmcgYmV0d2VlbiBnbHlwaCBpbmRpY2VzIGFuZCBzY3JpcHRzIChpbiB0aGUgYXV0by1oaW50ZXIKLSAgICogICBzZW5zZSwgc2VlIHRoZSBARlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIHZhbHVlcykgaXMgc3RvcmVkIGFzIGFuCi0gICAqICAgYXJyYXkgd2l0aCBgbnVtX2dseXBocycgZWxlbWVudHMsIGFzIGZvdW5kIGluIHRoZSBmb250J3MgQEZUX0ZhY2UKLSAgICogICBzdHJ1Y3R1cmUuICBUaGUgYGdseXBoLXRvLXNjcmlwdC1tYXAnIHByb3BlcnR5IHJldHVybnMgYSBwb2ludGVyIHRvCi0gICAqICAgdGhpcyBhcnJheSwgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIGFzIG5lZWRlZC4gIE5vdGUgdGhhdCB0aGUKLSAgICogICBtb2RpZmljYXRpb24gc2hvdWxkIGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IGdseXBoIGdldHMgcHJvY2Vzc2VkIGJ5Ci0gICAqICAgdGhlIGF1dG8taGludGVyIHNvIHRoYXQgdGhlIGdsb2JhbCBhbmFseXNpcyBvZiB0aGUgZm9udCBzaGFwZXMKLSAgICogICBhY3R1YWxseSB1c2VzIHRoZSBtb2RpZmllZCBtYXBwaW5nLgotICAgKgotICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWNjZXNzIGl0IChvbWl0dGluZwotICAgKiAgIHRoZSBlcnJvciBoYW5kbGluZykuCi0gICAqCi0gICAqICAgewotICAgKiAgICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgICBsaWJyYXJ5OwotICAgKiAgICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgICBmYWNlOwotICAgKiAgICAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwICBwcm9wOwotICAgKgotICAgKgotICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICogICAgIEZUX05ld19GYWNlKCBsaWJyYXJ5LCAiZm9vLnR0ZiIsIDAsICZmYWNlICk7Ci0gICAqCi0gICAqICAgICBwcm9wLmZhY2UgPSBmYWNlOwotICAgKgotICAgKiAgICAgRlRfUHJvcGVydHlfR2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnbHlwaC10by1zY3JpcHQtbWFwIiwgJnByb3AgKTsKLSAgICoKLSAgICogICAgIC8vIGFkanVzdCBgcHJvcC5tYXAnIGFzIG5lZWRlZCByaWdodCBoZXJlCi0gICAqCi0gICAqICAgICBGVF9Mb2FkX0dseXBoKCBmYWNlLCAuLi4sIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgKTsKLSAgICogICB9Ci0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBlbnVtOgotICAgKiAgIEZUX0FVVE9ISU5URVJfU0NSSVBUX1hYWAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCi0gICAqCi0gICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGdseXBoLXRvLXNjcmlwdC1tYXAgcHJvcGVydHkgdG8KLSAgICogICBzcGVjaWZ5IHRoZSBzY3JpcHQgc3VibW9kdWxlIHRoZSBhdXRvLWhpbnRlciBzaG91bGQgdXNlIGZvciBoaW50aW5nIGEKLSAgICogICBwYXJ0aWN1bGFyIGdseXBoLgotICAgKgotICAgKiBAdmFsdWVzOgotICAgKiAgIEZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkUgOjoKLSAgICogICAgIERvbid0IGF1dG8taGludCB0aGlzIGdseXBoLgotICAgKgotICAgKiAgIEZUX0FVVE9ISU5URVJfU0NSSVBUX0xBVElOIDo6Ci0gICAqICAgICBBcHBseSB0aGUgbGF0aW4gYXV0by1oaW50ZXIuICBGb3IgdGhlIGF1dG8taGludGVyLCBgbGF0aW4nIGlzIGEKLSAgICogICAgIHZlcnkgYnJvYWQgdGVybSwgaW5jbHVkaW5nIEN5cmlsbGljIGFuZCBHcmVlayBhbHNvIHNpbmNlIGNoYXJhY3RlcnMKLSAgICogICAgIGZyb20gdGhvc2Ugc2NyaXB0cyBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gY29uc3RyYWludHMuCi0gICAqCi0gICAqICAgICBCeSBkZWZhdWx0LCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvbGxvd2luZyBVbmljb2RlIHJhbmdlcyBhcmUKLSAgICogICAgIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLgotICAgKgotICAgKiAgICAgewotICAgKiAgICAgICBVKzAwMjAgLSBVKzAwN0YgIC8vIEJhc2ljIExhdGluIChubyBjb250cm9sIGNoYXJhY3RlcnMpCi0gICAqICAgICAgIFUrMDBBMCAtIFUrMDBGRiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IChubyBjb250cm9sIGNoYXJhY3RlcnMpCi0gICAqICAgICAgIFUrMDEwMCAtIFUrMDE3RiAgLy8gTGF0aW4gRXh0ZW5kZWQtQQotICAgKiAgICAgICBVKzAxODAgLSBVKzAyNEYgIC8vIExhdGluIEV4dGVuZGVkLUIKLSAgICogICAgICAgVSswMjUwIC0gVSswMkFGICAvLyBJUEEgRXh0ZW5zaW9ucwotICAgKiAgICAgICBVKzAyQjAgLSBVKzAyRkYgIC8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycwotICAgKiAgICAgICBVKzAzMDAgLSBVKzAzNkYgIC8vIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcwotICAgKiAgICAgICBVKzAzNzAgLSBVKzAzRkYgIC8vIEdyZWVrIGFuZCBDb3B0aWMKLSAgICogICAgICAgVSswNDAwIC0gVSswNEZGICAvLyBDeXJpbGxpYwotICAgKiAgICAgICBVKzA1MDAgLSBVKzA1MkYgIC8vIEN5cmlsbGljIFN1cHBsZW1lbnQKLSAgICogICAgICAgVSsxRDAwIC0gVSsxRDdGICAvLyBQaG9uZXRpYyBFeHRlbnNpb25zCi0gICAqICAgICAgIFUrMUQ4MCAtIFUrMURCRiAgLy8gUGhvbmV0aWMgRXh0ZW5zaW9ucyBTdXBwbGVtZW50Ci0gICAqICAgICAgIFUrMURDMCAtIFUrMURGRiAgLy8gQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQKLSAgICogICAgICAgVSsxRTAwIC0gVSsxRUZGICAvLyBMYXRpbiBFeHRlbmRlZCBBZGRpdGlvbmFsCi0gICAqICAgICAgIFUrMUYwMCAtIFUrMUZGRiAgLy8gR3JlZWsgRXh0ZW5kZWQKLSAgICogICAgICAgVSsyMDAwIC0gVSsyMDZGICAvLyBHZW5lcmFsIFB1bmN0dWF0aW9uCi0gICAqICAgICAgIFUrMjA3MCAtIFUrMjA5RiAgLy8gU3VwZXJzY3JpcHRzIGFuZCBTdWJzY3JpcHRzCi0gICAqICAgICAgIFUrMjBBMCAtIFUrMjBDRiAgLy8gQ3VycmVuY3kgU3ltYm9scwotICAgKiAgICAgICBVKzIxNTAgLSBVKzIxOEYgIC8vIE51bWJlciBGb3JtcwotICAgKiAgICAgICBVKzI0NjAgLSBVKzI0RkYgIC8vIEVuY2xvc2VkIEFscGhhbnVtZXJpY3MKLSAgICogICAgICAgVSsyQzYwIC0gVSsyQzdGICAvLyBMYXRpbiBFeHRlbmRlZC1DCi0gICAqICAgICAgIFUrMkRFMCAtIFUrMkRGRiAgLy8gQ3lyaWxsaWMgRXh0ZW5kZWQtQQotICAgKiAgICAgICBVKzJFMDAgLSBVKzJFN0YgIC8vIFN1cHBsZW1lbnRhbCBQdW5jdHVhdGlvbgotICAgKiAgICAgICBVK0E2NDAgLSBVK0E2OUYgIC8vIEN5cmlsbGljIEV4dGVuZGVkLUIKLSAgICogICAgICAgVStBNzIwIC0gVStBN0ZGICAvLyBMYXRpbiBFeHRlbmRlZC1ECi0gICAqICAgICAgIFUrRkIwMCAtIFUrRkIwNiAgLy8gQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoTGF0aW4gTGlnYXR1cmVzKQotICAgKiAgICAgIFUrMUQ0MDAgLSBVKzFEN0ZGIC8vIE1hdGhlbWF0aWNhbCBBbHBoYW51bWVyaWMgU3ltYm9scwotICAgKiAgICAgIFUrMUYxMDAgLSBVKzFGMUZGIC8vIEVuY2xvc2VkIEFscGhhbnVtZXJpYyBTdXBwbGVtZW50Ci0gICAqICAgICB9Ci0gICAqCi0gICAqICAgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfQ0pLIDo6Ci0gICAqICAgICBBcHBseSB0aGUgQ0pLIGF1dG8taGludGVyLCBjb3ZlcmluZyBDaGluZXNlLCBKYXBhbmVzZSwgS29yZWFuLCBvbGQKLSAgICogICAgIFZpZXRuYW1lc2UsIGFuZCBzb21lIG90aGVyIHNjcmlwdHMuCi0gICAqCi0gICAqICAgICBCeSBkZWZhdWx0LCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvbGxvd2luZyBVbmljb2RlIHJhbmdlcyBhcmUKLSAgICogICAgIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLgotICAgKgotICAgKiAgICAgewotICAgKiAgICAgICBVKzExMDAgLSBVKzExRkYgIC8vIEhhbmd1bCBKYW1vCi0gICAqICAgICAgIFUrMkU4MCAtIFUrMkVGRiAgLy8gQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQKLSAgICogICAgICAgVSsyRjAwIC0gVSsyRkRGICAvLyBLYW5neGkgUmFkaWNhbHMKLSAgICogICAgICAgVSsyRkYwIC0gVSsyRkZGICAvLyBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzCi0gICAqICAgICAgIFUrMzAwMCAtIFUrMzAzRiAgLy8gQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uCi0gICAqICAgICAgIFUrMzA0MCAtIFUrMzA5RiAgLy8gSGlyYWdhbmEKLSAgICogICAgICAgVSszMEEwIC0gVSszMEZGICAvLyBLYXRha2FuYQotICAgKiAgICAgICBVKzMxMDAgLSBVKzMxMkYgIC8vIEJvcG9tb2ZvCi0gICAqICAgICAgIFUrMzEzMCAtIFUrMzE4RiAgLy8gSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbwotICAgKiAgICAgICBVKzMxOTAgLSBVKzMxOUYgIC8vIEthbmJ1bgotICAgKiAgICAgICBVKzMxQTAgLSBVKzMxQkYgIC8vIEJvcG9tb2ZvIEV4dGVuZGVkCi0gICAqICAgICAgIFUrMzFDMCAtIFUrMzFFRiAgLy8gQ0pLIFN0cm9rZXMKLSAgICogICAgICAgVSszMUYwIC0gVSszMUZGICAvLyBLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zCi0gICAqICAgICAgIFUrMzIwMCAtIFUrMzJGRiAgLy8gRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocwotICAgKiAgICAgICBVKzMzMDAgLSBVKzMzRkYgIC8vIENKSyBDb21wYXRpYmlsaXR5Ci0gICAqICAgICAgIFUrMzQwMCAtIFUrNERCRiAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQQotICAgKiAgICAgICBVKzREQzAgLSBVKzRERkYgIC8vIFlpamluZyBIZXhhZ3JhbSBTeW1ib2xzCi0gICAqICAgICAgIFUrNEUwMCAtIFUrOUZGRiAgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocwotICAgKiAgICAgICBVK0E5NjAgLSBVK0E5N0YgIC8vIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUEKLSAgICogICAgICAgVStBQzAwIC0gVStEN0FGICAvLyBIYW5ndWwgU3lsbGFibGVzCi0gICAqICAgICAgIFUrRDdCMCAtIFUrRDdGRiAgLy8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQgotICAgKiAgICAgICBVK0Y5MDAgLSBVK0ZBRkYgIC8vIENKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMKLSAgICogICAgICAgVStGRTEwIC0gVStGRTFGICAvLyBWZXJ0aWNhbCBmb3JtcwotICAgKiAgICAgICBVK0ZFMzAgLSBVK0ZFNEYgIC8vIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zCi0gICAqICAgICAgIFUrRkYwMCAtIFUrRkZFRiAgLy8gSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMKLSAgICogICAgICBVKzFCMDAwIC0gVSsxQjBGRiAvLyBLYW5hIFN1cHBsZW1lbnQKLSAgICogICAgICBVKzFEMzAwIC0gVSsxRDM1RiAvLyBUYWkgWHVhbiBIaW5nIFN5bWJvbHMKLSAgICogICAgICBVKzFGMjAwIC0gVSsxRjJGRiAvLyBFbmNsb3NlZCBJZGVvZ3JhcGhpYyBTdXBwbGVtZW50Ci0gICAqICAgICAgVSsyMDAwMCAtIFUrMkE2REYgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQgotICAgKiAgICAgIFUrMkE3MDAgLSBVKzJCNzNGIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEMKLSAgICogICAgICBVKzJCNzQwIC0gVSsyQjgxRiAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBECi0gICAqICAgICAgVSsyRjgwMCAtIFUrMkZBMUYgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50Ci0gICAqICAgICB9Ci0gICAqCi0gICAqICAgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfSU5ESUMgOjoKLSAgICogICAgIEFwcGx5IHRoZSBpbmRpYyBhdXRvLWhpbnRlciwgY292ZXJpbmcgYWxsIG1ham9yIHNjcmlwdHMgZnJvbSB0aGUKLSAgICogICAgIEluZGlhbiBzdWItY29udGluZW50IGFuZCBzb21lIG90aGVyIHJlbGF0ZWQgc2NyaXB0cyBsaWtlIFRoYWksIExhbywKLSAgICogICAgIG9yIFRpYmV0YW4uCi0gICAqCi0gICAqICAgICBCeSBkZWZhdWx0LCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZvbGxvd2luZyBVbmljb2RlIHJhbmdlcyBhcmUKLSAgICogICAgIGFzc2lnbmVkIHRvIHRoaXMgc3VibW9kdWxlLgotICAgKgotICAgKiAgICAgewotICAgKiAgICAgICBVKzA5MDAgLSBVKzBERkYgIC8vIEluZGljIFJhbmdlCi0gICAqICAgICAgIFUrMEYwMCAtIFUrMEZGRiAgLy8gVGliZXRhbgotICAgKiAgICAgICBVKzE5MDAgLSBVKzE5NEYgIC8vIExpbWJ1Ci0gICAqICAgICAgIFUrMUI4MCAtIFUrMUJCRiAgLy8gU3VuZGFuZXNlCi0gICAqICAgICAgIFUrQTgwMCAtIFUrQTgyRiAgLy8gU3lsb3RpIE5hZ3JpCi0gICAqICAgICAgIFUrQUJDMCAtIFUrQUJGRiAgLy8gTWVldGVpIE1heWVrCi0gICAqICAgICAgVSsxMTgwMCAtIFUrMTE4REYgLy8gU2hhcmFkYQotICAgKiAgICAgfQotICAgKgotICAgKiAgICAgTm90ZSB0aGF0IGN1cnJlbnRseSBJbmRpYyBzdXBwb3J0IGlzIHJ1ZGltZW50YXJ5IG9ubHksIG1pc3NpbmcgYmx1ZQotICAgKiAgICAgem9uZSBzdXBwb3J0LgotICAgKgotICAgKi8KLSNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTk9ORSAgIDAKLSNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTEFUSU4gIDEKLSNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfQ0pLICAgIDIKLSNkZWZpbmUgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfSU5ESUMgIDMKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAc3RydWN0OgotICAgKiAgIEZUX1Byb3BfR2x5cGhUb1NjcmlwdE1hcAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCi0gICAqCi0gICAqICAgVGhlIGRhdGEgZXhjaGFuZ2Ugc3RydWN0dXJlIGZvciB0aGUgQGdseXBoLXRvLXNjcmlwdC1tYXAgcHJvcGVydHkuCi0gICAqCi0gICAqLwotICB0eXBlZGVmIHN0cnVjdCAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwXwotICB7Ci0gICAgRlRfRmFjZSAgICAgZmFjZTsKLSAgICBGVF9VU2hvcnQqICBtYXA7Ci0KLSAgfSBGVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXA7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHByb3BlcnR5OgotICAgKiAgIGZhbGxiYWNrLXNjcmlwdAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCi0gICAqCi0gICAqICAgSWYgbm8gYXV0by1oaW50ZXIgc2NyaXB0IG1vZHVsZSBjYW4gYmUgYXNzaWduZWQgdG8gYSBnbHlwaCwgYQotICAgKiAgIGZhbGxiYWNrIHNjcmlwdCBnZXRzIGFzc2lnbmVkIHRvIGl0IChzZWUgYWxzbyB0aGUKLSAgICogICBAZ2x5cGgtdG8tc2NyaXB0LW1hcCBwcm9wZXJ0eSkuICBCeSBkZWZhdWx0LCB0aGlzIGlzCi0gICAqICAgQEZUX0FVVE9ISU5URVJfU0NSSVBUX0NKSy4gIFVzaW5nIHRoZSBgZmFsbGJhY2stc2NyaXB0JyBwcm9wZXJ0eSwKLSAgICogICB0aGlzIGZhbGxiYWNrIHZhbHVlIGNhbiBiZSBjaGFuZ2VkLgotICAgKgotICAgKiAgIHsKLSAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0gICAqICAgICBGVF9VSW50ICAgICBmYWxsYmFja19zY3JpcHQgPSBGVF9BVVRPSElOVEVSX1NDUklQVF9OT05FOwotICAgKgotICAgKgotICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICoKLSAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFsbGJhY2stc2NyaXB0IiwgJmZhbGxiYWNrX3NjcmlwdCApOwotICAgKiAgIH0KLSAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KLSAgICoKLSAgICogICBJdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIHJpZ2h0IHRpbWluZyBmb3IgY2hhbmdpbmcgdGhpcyB2YWx1ZTogVGhlCi0gICAqICAgY3JlYXRpb24gb2YgdGhlIGdseXBoLXRvLXNjcmlwdCBtYXAgdGhhdCBldmVudHVhbGx5IHVzZXMgdGhlCi0gICAqICAgZmFsbGJhY2sgc2NyaXB0IHZhbHVlIGdldHMgdHJpZ2dlcmVkIGVpdGhlciBieSBzZXR0aW5nIG9yIHJlYWRpbmcgYQotICAgKiAgIGZhY2Utc3BlY2lmaWMgcHJvcGVydHkgbGlrZSBAZ2x5cGgtdG8tc2NyaXB0LW1hcCwgb3IgYnkgYXV0by1oaW50aW5nCi0gICAqICAgYW55IGdseXBoIGZyb20gdGhhdCBmYWNlLiAgSW4gcGFydGljdWxhciwgaWYgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkCi0gICAqICAgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlIGJ1dCBub3QgbG9hZGVkIGFueSBnbHlwaCAodXNpbmcgdGhlCi0gICAqICAgYXV0by1oaW50ZXIpLCBhIGNoYW5nZSBvZiB0aGUgZmFsbGJhY2sgc2NyaXB0IHdpbGwgYWZmZWN0IHRoaXMgZmFjZS4KLSAgICoKLSAgICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHByb3BlcnR5OgotICAgKiAgIGRlZmF1bHQtc2NyaXB0Ci0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKLSAgICoKLSAgICogICBJZiBGcmVlVHlwZSBnZXRzIGNvbXBpbGVkIHdpdGggRlRfQ09ORklHX09QVElPTl9VU0VfSEFSRkJVWlogdG8gbWFrZQotICAgKiAgIHRoZSBIYXJmQnV6eiBsaWJyYXJ5IGFjY2VzcyBPcGVuVHlwZSBmZWF0dXJlcyBmb3IgZ2V0dGluZyBiZXR0ZXIKLSAgICogICBnbHlwaCBjb3ZlcmFnZXMsIHRoaXMgcHJvcGVydHkgc2V0cyB0aGUgKGF1dG8tZml0dGVyKSBzY3JpcHQgdG8gYmUKLSAgICogICB1c2VkIGZvciB0aGUgZGVmYXVsdCAoT3BlblR5cGUpIHNjcmlwdCBkYXRhIG9mIGEgZm9udCdzIEdTVUIgdGFibGUuCi0gICAqICAgRmVhdHVyZXMgZm9yIHRoZSBkZWZhdWx0IHNjcmlwdCBhcmUgaW50ZW5kZWQgZm9yIGFsbCBzY3JpcHRzIG5vdAotICAgKiAgIGV4cGxpY2l0bHkgaGFuZGxlZCBpbiBHU1VCOyBhbiBleGFtcGxlIGlzIGEgYGRsaWcnIGZlYXR1cmUsCi0gICAqICAgY29udGFpbmluZyB0aGUgY29tYmluYXRpb24gb2YgdGhlIGNoYXJhY3RlcnMgYFQnLCBgRScsIGFuZCBgTCcgdG8KLSAgICogICBmb3JtIGEgYFRFTCcgbGlnYXR1cmUuCi0gICAqCi0gICAqICAgQnkgZGVmYXVsdCwgdGhpcyBpcyBARlRfQVVUT0hJTlRFUl9TQ1JJUFRfTEFUSU4uICBVc2luZyB0aGUKLSAgICogICBgZGVmYXVsdC1zY3JpcHQnIHByb3BlcnR5LCB0aGlzIGRlZmF1bHQgdmFsdWUgY2FuIGJlIGNoYW5nZWQuCi0gICAqCi0gICAqICAgewotICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKLSAgICogICAgIEZUX1VJbnQgICAgIGRlZmF1bHRfc2NyaXB0ID0gRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTk9ORTsKLSAgICoKLSAgICoKLSAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7Ci0gICAqCi0gICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJhdXRvZml0dGVyIiwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQtc2NyaXB0IiwgJmRlZmF1bHRfc2NyaXB0ICk7Ci0gICAqICAgfQotICAgKgotICAgKiBAbm90ZToKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgotICAgKgotICAgKiAgIEl0J3MgaW1wb3J0YW50IHRvIHVzZSB0aGUgcmlnaHQgdGltaW5nIGZvciBjaGFuZ2luZyB0aGlzIHZhbHVlOiBUaGUKLSAgICogICBjcmVhdGlvbiBvZiB0aGUgZ2x5cGgtdG8tc2NyaXB0IG1hcCB0aGF0IGV2ZW50dWFsbHkgdXNlcyB0aGUKLSAgICogICBkZWZhdWx0IHNjcmlwdCB2YWx1ZSBnZXRzIHRyaWdnZXJlZCBlaXRoZXIgYnkgc2V0dGluZyBvciByZWFkaW5nIGEKLSAgICogICBmYWNlLXNwZWNpZmljIHByb3BlcnR5IGxpa2UgQGdseXBoLXRvLXNjcmlwdC1tYXAsIG9yIGJ5IGF1dG8taGludGluZwotICAgKiAgIGFueSBnbHlwaCBmcm9tIHRoYXQgZmFjZS4gIEluIHBhcnRpY3VsYXIsIGlmIHlvdSBoYXZlIGFscmVhZHkgY3JlYXRlZAotICAgKiAgIGFuIEBGVF9GYWNlIHN0cnVjdHVyZSBidXQgbm90IGxvYWRlZCBhbnkgZ2x5cGggKHVzaW5nIHRoZQotICAgKiAgIGF1dG8taGludGVyKSwgYSBjaGFuZ2Ugb2YgdGhlIGRlZmF1bHQgc2NyaXB0IHdpbGwgYWZmZWN0IHRoaXMgZmFjZS4KLSAgICoKLSAgICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHByb3BlcnR5OgotICAgKiAgIGluY3JlYXNlLXgtaGVpZ2h0Ci0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBGb3IgcHBlbSB2YWx1ZXMgaW4gdGhlIHJhbmdlIDZ+PD0gcHBlbSA8PSBgaW5jcmVhc2UteC1oZWlnaHQnLCByb3VuZAotICAgKiAgIHVwIHRoZSBmb250J3MgeH5oZWlnaHQgbXVjaCBtb3JlIG9mdGVuIHRoYW4gbm9ybWFsbHkuICBJZiB0aGUgdmFsdWUKLSAgICogICBpcyBzZXQgdG9+MCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIHRoaXMgZmVhdHVyZSBpcyBzd2l0Y2hlZCBvZmYuICBVc2UKLSAgICogICB0aGlzIHByb3BlcnR5IHRvIGltcHJvdmUgdGhlIGxlZ2liaWxpdHkgb2Ygc21hbGwgZm9udCBzaXplcyBpZgotICAgKiAgIG5lY2Vzc2FyeS4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgbGlicmFyeTsKLSAgICogICAgIEZUX0ZhY2UgICAgICAgICAgICAgICAgICBmYWNlOwotICAgKiAgICAgRlRfUHJvcF9JbmNyZWFzZVhIZWlnaHQgIHByb3A7Ci0gICAqCi0gICAqCi0gICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOwotICAgKiAgICAgRlRfTmV3X0ZhY2UoIGxpYnJhcnksICJmb28udHRmIiwgMCwgJmZhY2UgKTsKLSAgICogICAgIEZUX1NldF9DaGFyX1NpemUoIGZhY2UsIDEwICogNjQsIDAsIDcyLCAwICk7Ci0gICAqCi0gICAqICAgICBwcm9wLmZhY2UgID0gZmFjZTsKLSAgICogICAgIHByb3AubGltaXQgPSAxNDsKLSAgICoKLSAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jcmVhc2UteC1oZWlnaHQiLCAmcHJvcCApOwotICAgKiAgIH0KLSAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KLSAgICoKLSAgICogICBTZXQgdGhpcyB2YWx1ZSByaWdodCBhZnRlciBjYWxsaW5nIEBGVF9TZXRfQ2hhcl9TaXplLCBidXQgYmVmb3JlCi0gICAqICAgbG9hZGluZyBhbnkgZ2x5cGggKHVzaW5nIHRoZSBhdXRvLWhpbnRlcikuCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBzdHJ1Y3Q6Ci0gICAqICAgRlRfUHJvcF9JbmNyZWFzZVhIZWlnaHQKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIFRoZSBkYXRhIGV4Y2hhbmdlIHN0cnVjdHVyZSBmb3IgdGhlIEBpbmNyZWFzZS14LWhlaWdodCBwcm9wZXJ0eS4KLSAgICoKLSAgICovCi0gIHR5cGVkZWYgc3RydWN0ICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodF8KLSAgewotICAgIEZUX0ZhY2UgIGZhY2U7Ci0gICAgRlRfVUludCAgbGltaXQ7Ci0KLSAgfSBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodDsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAcHJvcGVydHk6Ci0gICAqICAgd2FycGluZwotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCi0gICAqCi0gICAqICAgSWYgRnJlZVR5cGUgZ2V0cyBjb21waWxlZCB3aXRoIG9wdGlvbiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIgdG8KLSAgICogICBhY3RpdmF0ZSB0aGUgd2FycCBoaW50aW5nIGNvZGUgaW4gdGhlIGF1dG8taGludGVyLCB0aGlzIHByb3BlcnR5Ci0gICAqICAgc3dpdGNoZXMgd2FycGluZyBvbiBhbmQgb2ZmLgotICAgKgotICAgKiAgIFdhcnBpbmcgb25seSB3b3JrcyBpbiBgbGlnaHQnIGF1dG8taGludGluZyBtb2RlLiAgVGhlIGlkZWEgb2YgdGhlCi0gICAqICAgY29kZSBpcyB0byBzbGlnaHRseSBzY2FsZSBhbmQgc2hpZnQgYSBnbHlwaCBhbG9uZyB0aGUgbm9uLWhpbnRlZAotICAgKiAgIGRpbWVuc2lvbiAod2hpY2ggaXMgdXN1YWxseSB0aGUgaG9yaXpvbnRhbCBheGlzKSBzbyB0aGF0IGFzIG11Y2ggb2YKLSAgICogICBpdHMgc2VnbWVudHMgYXJlIGFsaWduZWQgKG1vcmUgb3IgbGVzcykgdG8gdGhlIGdyaWQuICBUbyBmaW5kIG91dCBhCi0gICAqICAgZ2x5cGgncyBvcHRpbWFsIHNjYWxpbmcgYW5kIHNoaWZ0aW5nIHZhbHVlLCB2YXJpb3VzIHBhcmFtZXRlcgotICAgKiAgIGNvbWJpbmF0aW9ucyBhcmUgdHJpZWQgYW5kIHNjb3JlZC4KLSAgICoKLSAgICogICBCeSBkZWZhdWx0LCB3YXJwaW5nIGlzIG9mZi4gIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0byBzd2l0Y2ggb24KLSAgICogICB3YXJwaW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgotICAgKgotICAgKiAgIHsKLSAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7Ci0gICAqICAgICBGVF9Cb29sICAgICB3YXJwaW5nID0gMTsKLSAgICoKLSAgICoKLSAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7Ci0gICAqCi0gICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJhdXRvZml0dGVyIiwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcnBpbmciLCAmd2FycGluZyApOwotICAgKiAgIH0KLSAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KLSAgICoKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKLSAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIDEgYW5kIDAgZm9yIGBvbicgYW5kIGBvZmYnLCByZXNwZWN0aXZlbHkpLgotICAgKgotICAgKiAgIFRoZSB3YXJwaW5nIGNvZGUgY2FuIGFsc28gY2hhbmdlIGFkdmFuY2Ugd2lkdGhzLiAgSGF2ZSBhIGxvb2sgYXQgdGhlCi0gICAqICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnIGZpZWxkcyBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUKLSAgICogICBmb3IgZGV0YWlscyBvbiBpbXByb3ZpbmcgaW50ZXItZ2x5cGggZGlzdGFuY2VzIHdoaWxlIHJlbmRlcmluZy4KLSAgICoKLSAgICogICBTaW5jZSB3YXJwaW5nIGlzIGEgZ2xvYmFsIHByb3BlcnR5IG9mIHRoZSBhdXRvLWhpbnRlciBpdCBpcyBiZXN0IHRvCi0gICAqICAgY2hhbmdlIGl0cyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nIGFueSBmYWNlLiAgT3RoZXJ3aXNlLCB5b3Ugc2hvdWxkCi0gICAqICAgcmVsb2FkIGFsbCBmYWNlcyB0aGF0IGdldCBhdXRvLWhpbnRlZCBpbiBgbGlnaHQnIGhpbnRpbmcgbW9kZS4KLSAgICoKLSAgICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHByb3BlcnR5OgotICAgKiAgIG5vLXN0ZW0tZGFya2VuaW5nW2F1dG9maXRdCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSwqICpyZXF1aXJlcyogKmxpbmVhciogKmFscGhhKiAqYmxlbmRpbmcqICphbmQqCi0gICAqICAgKmdhbW1hKiAqY29ycmVjdGlvbioKLSAgICoKLSAgICogICBTdGVtIGRhcmtlbmluZyBlbWJvbGRlbnMgZ2x5cGhzIGF0IHNtYWxsZXIgc2l6ZXMgdG8gbWFrZSB0aGVtIG1vcmUKLSAgICogICByZWFkYWJsZSBvbiBjb21tb24gbG93LURQSSBzY3JlZW5zIHdoZW4gdXNpbmcgbGluZWFyIGFscGhhIGJsZW5kaW5nCi0gICAqICAgYW5kIGdhbW1hIGNvcnJlY3Rpb24sIHNlZSBARlRfUmVuZGVyX0dseXBoLiAgV2hlbiBub3QgdXNpbmcgbGluZWFyCi0gICAqICAgYWxwaGEgYmxlbmRpbmcgYW5kIGdhbW1hIGNvcnJlY3Rpb24sIGdseXBocyB3aWxsIGFwcGVhciBoZWF2eSBhbmQKLSAgICogICBmdXp6eSEKLSAgICoKLSAgICogICBHYW1tYSBjb3JyZWN0aW9uIGVzc2VudGlhbGx5IGxpZ2h0ZW5zIGZvbnRzIHNpbmNlIHNoYWRlcyBvZiBncmV5IGFyZQotICAgKiAgIHNoaWZ0ZWQgdG8gaGlnaGVyIHBpeGVsIHZhbHVlcyAoPX5oaWdoZXIgYnJpZ2h0bmVzcykgdG8gbWF0Y2ggdGhlCi0gICAqICAgb3JpZ2luYWwgaW50ZW50aW9uIHRvIHRoZSByZWFsaXR5IG9mIG91ciBzY3JlZW5zLiAgVGhlIHNpZGUtZWZmZWN0IGlzCi0gICAqICAgdGhhdCBnbHlwaHMgYHRoaW4gb3V0Jy4gIE1hYyBPU35YIGFuZCBBZG9iZSdzIHByb3ByaWV0YXJ5IGZvbnQKLSAgICogICByZW5kZXJpbmcgbGlicmFyeSBpbXBsZW1lbnQgYSBjb3VudGVyLW1lYXN1cmU6IHN0ZW0gZGFya2VuaW5nIGF0Ci0gICAqICAgc21hbGxlciBzaXplcyB3aGVyZSBzaGFkZXMgb2YgZ3JheSBkb21pbmF0ZS4gIEJ5IGVtYm9sZGVuaW5nIGEgZ2x5cGgKLSAgICogICBzbGlnaHRseSBpbiByZWxhdGlvbiB0byBpdHMgcGl4ZWwgc2l6ZSwgaW5kaXZpZHVhbCBwaXhlbHMgZ2V0IGhpZ2hlcgotICAgKiAgIGNvdmVyYWdlIG9mIGZpbGxlZC1pbiBvdXRsaW5lcyBhbmQgYXJlIHRoZXJlZm9yZSBgYmxhY2tlcicuICBUaGlzCi0gICAqICAgY291bnRlcmFjdHMgdGhlIGB0aGlubmluZyBvdXQnIG9mIGdseXBocywgbWFraW5nIHRleHQgcmVtYWluIHJlYWRhYmxlCi0gICAqICAgYXQgc21hbGxlciBzaXplcy4gIEFsbCBnbHlwaHMgdGhhdCBwYXNzIHRocm91Z2ggdGhlIGF1dG8taGludGVyIHdpbGwKLSAgICogICBiZSBlbWJvbGRlbmVkIHVubGVzcyB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBUUlVFLgotICAgKgotICAgKiAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIENGRiBkcml2ZXIgZm9yIGFsZ29yaXRobWljIGRldGFpbHMuICBUb3RhbAotICAgKiAgIGNvbnNpc3RlbmN5IHdpdGggdGhlIENGRiBkcml2ZXIgaXMgY3VycmVudGx5IG5vdCBhY2hpZXZlZCBiZWNhdXNlIHRoZQotICAgKiAgIGVtYm9sZGVuaW5nIG1ldGhvZCBkaWZmZXJzIGFuZCBnbHlwaHMgbXVzdCBiZSBzY2FsZWQgZG93biBvbiB0aGUKLSAgICogICBZLWF4aXMgdG8ga2VlcCBvdXRsaW5lIHBvaW50cyBpbnNpZGUgdGhlaXIgcHJlY29tcHV0ZWQgYmx1ZSB6b25lcy4KLSAgICogICBUaGUgc21hbGxlciB0aGUgc2l6ZSAoZXNwZWNpYWxseSA5cHBlbSBhbmQgZG93biksIHRoZSBoaWdoZXIgdGhlIGxvc3MKLSAgICogICBvZiBlbWJvbGRlbmluZyB2ZXJzdXMgdGhlIENGRiBkcml2ZXIuCi0gICAqCi0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50Ci0gICAqICAgdmFyaWFibGUgc2ltaWxhciB0byB0aGUgQ0ZGIGRyaXZlci4gIEl0IGNhbiBhbHNvIGJlIHNldCBwZXIgZmFjZQotICAgKiAgIHVzaW5nIEBGVF9GYWNlX1Byb3BlcnRpZXMgd2l0aCBARlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HLgotICAgKgotICAgKi8KLQotCi0gIC8qCi0gICAqIEBjb25zdGFudDoKLSAgICogICBGVF9QQVJBTV9UQUdfU1RFTV9EQVJLRU5JTkcKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEFuIEBGVF9QYXJhbWV0ZXIgdGFnIHRvIGJlIHVzZWQgd2l0aCBARlRfRmFjZV9Qcm9wZXJ0aWVzLiAgVGhlCi0gICAqICAgY29ycmVzcG9uZGluZyBCb29sZWFuIGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIHRvIGFwcGx5IHN0ZW0KLSAgICogICBkYXJrZW5pbmcsIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBkZWZhdWx0IHZhbHVlcyBvciB0aGUgdmFsdWVzIHNldCB1cAotICAgKiAgIHdpdGggQEZUX1Byb3BlcnR5X1NldCAoc2VlIEBuby1zdGVtLWRhcmtlbmluZ1thdXRvZml0XSBhbmQKLSAgICogICBAbm8tc3RlbS1kYXJrZW5pbmdbY2ZmXSkuCi0gICAqCi0gICAqICAgVGhpcyBpcyBhIHBhc3NpdmUgc2V0dGluZyB0aGF0IG9ubHkgdGFrZXMgZWZmZWN0IGlmIHRoZSBmb250IGRyaXZlcgotICAgKiAgIG9yIGF1dG9oaW50ZXIgaG9ub3JzIGl0LCB3aGljaCB0aGUgQ0ZGIGRyaXZlciBhbHdheXMgZG9lcywgYnV0IHRoZQotICAgKiAgIGF1dG9oaW50ZXIgb25seSBpbiBgbGlnaHQnIGhpbnRpbmcgbW9kZSAoYXMgb2YgdmVyc2lvbiAyLjcuMCkuCi0gICAqCi0gICAqLwotI2RlZmluZSBGVF9QQVJBTV9UQUdfU1RFTV9EQVJLRU5JTkcgXAotICAgICAgICAgIEZUX01BS0VfVEFHKCAnZCcsICdhJywgJ3InLCAnaycgKQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBwcm9wZXJ0eToKLSAgICogICBkYXJrZW5pbmctcGFyYW1ldGVyc1thdXRvZml0XQotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCi0gICAqCi0gICAqICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQ0ZGIGRyaXZlciBmb3IgZGV0YWlscy4gIFRoaXMKLSAgICogICBpbXBsZW1lbnRhdGlvbiBhcHByb3ByaWF0ZXMgdGhlCi0gICAqICAgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl8qICNkZWZpbmVzIGZvciBjb25zaXN0ZW5jeS4KLSAgICogICBOb3RlIHRoZSBkaWZmZXJlbmNlcyBkZXNjcmliZWQgaW4gQG5vLXN0ZW0tZGFya2VuaW5nW2F1dG9maXRdLgotICAgKgotICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAotICAgKiAgIHZhcmlhYmxlIHNpbWlsYXIgdG8gdGhlIENGRiBkcml2ZXIuCi0gICAqLwotCi0KLSAgLyogKi8KLQotCi1GVF9FTkRfSEVBREVSCi0KLSNlbmRpZiAvKiBGVEFVVE9IX0hfICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJib3guaAppbmRleCBmMDNiZGMxLi5mOWViNzBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiYm94LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgZXhhY3QgYmJveCBjb21wdXRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTYxLDcgKzYxLDcgQEAKICAgLyogICAgQ29tcHV0ZSB0aGUgZXhhY3QgYm91bmRpbmcgYm94IG9mIGFuIG91dGxpbmUuICBUaGlzIGlzIHNsb3dlciAgICAgICovCiAgIC8qICAgIHRoYW4gY29tcHV0aW5nIHRoZSBjb250cm9sIGJveC4gIEhvd2V2ZXIsIGl0IHVzZXMgYW4gYWR2YW5jZWQgICAgICAqLwogICAvKiAgICBhbGdvcml0aG0gdGhhdCByZXR1cm5zIF92ZXJ5XyBxdWlja2x5IHdoZW4gdGhlIHR3byBib3hlcyAgICAgICAgICAgKi8KLSAgLyogICAgY29pbmNpZGUuICBPdGhlcndpc2UsIHRoZSBvdXRsaW5lIELDqXppZXIgYXJjcyBhcmUgdHJhdmVyc2VkIHRvICAgICAqLworICAvKiAgICBjb2luY2lkZS4gIE90aGVyd2lzZSwgdGhlIG91dGxpbmUgQmV6aWVyIGFyY3MgYXJlIHRyYXZlcnNlZCB0byAgICAgKi8KICAgLyogICAgZXh0cmFjdCB0aGVpciBleHRyZW1hLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaAppbmRleCAzZDMxMDZiLi4xYjZkZWE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIEJERi1zcGVjaWZpYyBzdHJpbmdzIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgKaW5kZXggMDRiMjQwMi4uYTQzMTg3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYml0bWFwcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtOTcsNyArOTcsNyBAQAogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfQml0bWFwX0NvcHkoIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CaXRtYXAgICpzb3VyY2UsCi0gICAgICAgICAgICAgICAgICBGVF9CaXRtYXAgICAgICAgICp0YXJnZXQpOworICAgICAgICAgICAgICAgICAgRlRfQml0bWFwICAgICAgICAqdGFyZ2V0ICk7CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiemlwMi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKaW5kZXggOTE0N2E3OS4uNmVkZmEwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJ6aXAyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQnppcDItY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBKb2VsIEtsaW5naGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKaW5kZXggNWZmM2NjZi4uNTJkNWYwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQ2FjaGUgc3Vic3lzdGVtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTU0MCwxMyArNTQwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfRmFjZUlEICAgZmFjZV9pZCApOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2FjaGVfc3Vic3lzdGVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgKgogICAgKiBAdHlwZToKQEAgLTYyNCwxNCArNjE3LDYgQEAKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNhY2hlX3N1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjZmZkcnYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjZmZkcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YjU5MS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2ZmZHJ2LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjZmZkcnYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgY29udHJvbGxpbmcgdGhlIENGRiBkcml2ZXIgKHNwZWNpZmljYXRpb24gb25seSkuICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIEZUQ0ZGRFJWX0hfCi0jZGVmaW5lIEZUQ0ZGRFJWX0hfCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotCi0jaWZkZWYgRlJFRVRZUEVfSAotI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKLSNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgotI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCi0jZW5kaWYKLQotCi1GVF9CRUdJTl9IRUFERVIKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAc2VjdGlvbjoKLSAgICogICBjZmZfZHJpdmVyCi0gICAqCi0gICAqIEB0aXRsZToKLSAgICogICBUaGUgQ0ZGIGRyaXZlcgotICAgKgotICAgKiBAYWJzdHJhY3Q6Ci0gICAqICAgQ29udHJvbGxpbmcgdGhlIENGRiBkcml2ZXIgbW9kdWxlLgotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgV2hpbGUgRnJlZVR5cGUncyBDRkYgZHJpdmVyIGRvZXNuJ3QgZXhwb3NlIEFQSSBmdW5jdGlvbnMgYnkgaXRzZWxmLAotICAgKiAgIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQgYW5kCi0gICAqICAgQEZUX1Byb3BlcnR5X0dldC4gIFRoZSBsaXN0IGJlbG93IGdpdmVzIHRoZSBhdmFpbGFibGUgcHJvcGVydGllcwotICAgKiAgIHRvZ2V0aGVyIHdpdGggdGhlIG5lY2Vzc2FyeSBtYWNyb3MgYW5kIHN0cnVjdHVyZXMuCi0gICAqCi0gICAqICAgVGhlIENGRiBkcml2ZXIncyBtb2R1bGUgbmFtZSBpcyBgY2ZmJy4KLSAgICoKLSAgICogICAqSGludGluZyogKmFuZCogKmFudGlhbGlhc2luZyogKnByaW5jaXBsZXMqICpvZiogKnRoZSogKm5ldyogKmVuZ2luZSoKLSAgICoKLSAgICogICBUaGUgcmFzdGVyaXplciBpcyBwb3NpdGlvbmluZyBob3Jpem9udGFsIGZlYXR1cmVzIChlLmcuLCBhc2NlbmRlcgotICAgKiAgIGhlaWdodCAmIHgtaGVpZ2h0LCBvciBjcm9zc2JhcnMpIG9uIHRoZSBwaXhlbCBncmlkIGFuZCBtaW5pbWl6aW5nIHRoZQotICAgKiAgIGFtb3VudCBvZiBhbnRpYWxpYXNpbmcgYXBwbGllZCB0byB0aGVtLCB3aGlsZSBwbGFjaW5nIHZlcnRpY2FsCi0gICAqICAgZmVhdHVyZXMgKHZlcnRpY2FsIHN0ZW1zKSBvbiB0aGUgcGl4ZWwgZ3JpZCB3aXRob3V0IGhpbnRpbmcsIHRodXMKLSAgICogICByZXByZXNlbnRpbmcgdGhlIHN0ZW0gcG9zaXRpb24gYW5kIHdlaWdodCBhY2N1cmF0ZWx5LiAgU29tZXRpbWVzIHRoZQotICAgKiAgIHZlcnRpY2FsIHN0ZW1zIG1heSBiZSBvbmx5IHBhcnRpYWxseSBibGFjay4gIEluIHRoaXMgY29udGV4dCwKLSAgICogICBgYW50aWFsaWFzaW5nJyBtZWFucyB0aGF0IHN0ZW1zIGFyZSBub3QgcG9zaXRpb25lZCBleGFjdGx5IG9uIHBpeGVsCi0gICAqICAgYm9yZGVycywgY2F1c2luZyBhIGZ1enp5IGFwcGVhcmFuY2UuCi0gICAqCi0gICAqICAgVGhlcmUgYXJlIHR3byBwcmluY2lwbGVzIGJlaGluZCB0aGlzIGFwcHJvYWNoLgotICAgKgotICAgKiAgIDEpIE5vIGhpbnRpbmcgaW4gdGhlIGhvcml6b250YWwgZGlyZWN0aW9uOiBVbmxpa2UgYHN1cGVyaGludGVkJwotICAgKiAgIFRydWVUeXBlLCB3aGljaCBjaGFuZ2VzIGdseXBoIHdpZHRocyB0byBhY2NvbW1vZGF0ZSByZWd1bGFyCi0gICAqICAgaW50ZXItZ2x5cGggc3BhY2luZywgQWRvYmUncyBhcHByb2FjaCBpcyBgZmFpdGhmdWwgdG8gdGhlIGRlc2lnbicgaW4KLSAgICogICByZXByZXNlbnRpbmcgYm90aCB0aGUgZ2x5cGggd2lkdGggYW5kIHRoZSBpbnRlci1nbHlwaCBzcGFjaW5nCi0gICAqICAgZGVzaWduZWQgZm9yIHRoZSBmb250LiAgVGhpcyBtYWtlcyB0aGUgc2NyZWVuIGRpc3BsYXkgYXMgY2xvc2UgYXMgaXQKLSAgICogICBjYW4gYmUgdG8gdGhlIHJlc3VsdCBvbmUgd291bGQgZ2V0IHdpdGggaW5maW5pdGUgcmVzb2x1dGlvbiwgd2hpbGUKLSAgICogICBwcmVzZXJ2aW5nIHdoYXQgaXMgY29uc2lkZXJlZCB0aGUga2V5IGNoYXJhY3RlcmlzdGljcyBvZiBlYWNoIGdseXBoLgotICAgKiAgIE5vdGUgdGhhdCB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdW5oaW50ZWQgYW5kIGdyaWQtZml0dGVkIHBvc2l0aW9ucyBhdAotICAgKiAgIHNtYWxsIHNpemVzIGFyZSBjb21wYXJhYmxlIHRvIGtlcm5pbmcgdmFsdWVzIGFuZCB0aHVzIHdvdWxkIGJlCi0gICAqICAgbm90aWNlYWJsZSAoYW5kIGRpc3RyYWN0aW5nKSB3aGlsZSByZWFkaW5nIGlmIGhpbnRpbmcgd2VyZSBhcHBsaWVkLgotICAgKgotICAgKiAgIE9uZSBvZiB0aGUgcmVhc29ucyB0byBub3QgaGludCBob3Jpem9udGFsbHkgaXMgYW50aWFsaWFzaW5nIGZvciBMQ0QKLSAgICogICBzY3JlZW5zOiBUaGUgcGl4ZWwgZ2VvbWV0cnkgb2YgbW9kZXJuIGRpc3BsYXlzIHN1cHBsaWVzIHRocmVlCi0gICAqICAgdmVydGljYWwgc3ViLXBpeGVscyBhcyB0aGUgZXllIG1vdmVzIGhvcml6b250YWxseSBhY3Jvc3MgZWFjaCB2aXNpYmxlCi0gICAqICAgcGl4ZWwuICBPbiBkZXZpY2VzIHdoZXJlIHdlIGNhbiBiZSBjZXJ0YWluIHRoaXMgY2hhcmFjdGVyaXN0aWMgaXMKLSAgICogICBwcmVzZW50IGEgcmFzdGVyaXplciBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIHN1Yi1waXhlbHMgdG8gYWRkCi0gICAqICAgaW5jcmVtZW50cyBvZiB3ZWlnaHQuICBJbiBXZXN0ZXJuIHdyaXRpbmcgc3lzdGVtcyB0aGlzIHR1cm5zIG91dCB0bwotICAgKiAgIGJlIHRoZSBtb3JlIGNyaXRpY2FsIGRpcmVjdGlvbiBhbnl3YXk7IHRoZSB3ZWlnaHRzIGFuZCBzcGFjaW5nIG9mCi0gICAqICAgdmVydGljYWwgc3RlbXMgKHNlZSBhYm92ZSkgYXJlIGNlbnRyYWwgdG8gQXJtZW5pYW4sIEN5cmlsbGljLCBHcmVlaywKLSAgICogICBhbmQgTGF0aW4gdHlwZSBkZXNpZ25zLiAgRXZlbiB3aGVuIHRoZSByYXN0ZXJpemVyIHVzZXMgZ3JleXNjYWxlCi0gICAqICAgYW50aWFsaWFzaW5nIGluc3RlYWQgb2YgY29sb3IgKGEgbmVjZXNzYXJ5IGNvbXByb21pc2Ugd2hlbiBvbmUKLSAgICogICBkb2Vzbid0IGtub3cgdGhlIHNjcmVlbiBjaGFyYWN0ZXJpc3RpY3MpLCB0aGUgdW5oaW50ZWQgdmVydGljYWwKLSAgICogICBmZWF0dXJlcyBwcmVzZXJ2ZSB0aGUgZGVzaWduJ3Mgd2VpZ2h0IGFuZCBzcGFjaW5nIG11Y2ggYmV0dGVyIHRoYW4KLSAgICogICBhbGlhc2VkIHR5cGUgd291bGQuCi0gICAqCi0gICAqICAgMikgQWxpZ25tZW50IGluIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb246IFdlaWdodHMgYW5kIHNwYWNpbmcgYWxvbmcgdGhlCi0gICAqICAgeX5heGlzIGFyZSBsZXNzIGNyaXRpY2FsOyB3aGF0IGlzIG11Y2ggbW9yZSBpbXBvcnRhbnQgaXMgdGhlIHZpc3VhbAotICAgKiAgIGFsaWdubWVudCBvZiByZWxhdGVkIGZlYXR1cmVzIChsaWtlIGNhcC1oZWlnaHQgYW5kIHgtaGVpZ2h0KS4gIFRoZQotICAgKiAgIHNlbnNlIG9mIGFsaWdubWVudCBmb3IgdGhlc2UgaXMgZW5oYW5jZWQgYnkgdGhlIHNoYXJwbmVzcyBvZiBncmlkLWZpdAotICAgKiAgIGVkZ2VzLCB3aGlsZSB0aGUgY3J1ZGVyIHZlcnRpY2FsIHJlc29sdXRpb24gKGZ1bGwgcGl4ZWxzIGluc3RlYWQgb2YKLSAgICogICAxLzMgcGl4ZWxzKSBpcyBsZXNzIG9mIGEgcHJvYmxlbS4KLSAgICoKLSAgICogICBPbiB0aGUgdGVjaG5pY2FsIHNpZGUsIGhvcml6b250YWwgYWxpZ25tZW50IHpvbmVzIGZvciBhc2NlbmRlciwKLSAgICogICB4LWhlaWdodCwgYW5kIG90aGVyIGltcG9ydGFudCBoZWlnaHQgdmFsdWVzICh0cmFkaXRpb25hbGx5IGNhbGxlZAotICAgKiAgIGBibHVlIHpvbmVzJykgYXMgZGVmaW5lZCBpbiB0aGUgZm9udCBhcmUgcG9zaXRpb25lZCBpbmRlcGVuZGVudGx5LAotICAgKiAgIGVhY2ggYmVpbmcgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBwaXhlbCBlZGdlLCB0YWtpbmcgY2FyZSBvZgotICAgKiAgIG92ZXJzaG9vdCBzdXBwcmVzc2lvbiBhdCBzbWFsbCBzaXplcywgc3RlbSBkYXJrZW5pbmcsIGFuZCBzY2FsaW5nLgotICAgKgotICAgKiAgIEhzdGVtcyAodGhpcyBpcywgaGludCB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgZm9udCB0byBoZWxwIGFsaWduCi0gICAqICAgaG9yaXpvbnRhbCBmZWF0dXJlcykgdGhhdCBmYWxsIHdpdGhpbiBhIGJsdWUgem9uZSBhcmUgc2FpZCB0byBiZQotICAgKiAgIGBjYXB0dXJlZCcgYW5kIGFyZSBhbGlnbmVkIHRvIHRoYXQgem9uZS4gIFVuY2FwdHVyZWQgc3RlbXMgYXJlIG1vdmVkCi0gICAqICAgaW4gb25lIG9mIGZvdXIgd2F5cywgdG9wIGVkZ2UgdXAgb3IgZG93biwgYm90dG9tIGVkZ2UgdXAgb3IgZG93bi4KLSAgICogICBVbmxlc3MgdGhlcmUgYXJlIGNvbmZsaWN0aW5nIGhzdGVtcywgdGhlIHNtYWxsZXN0IG1vdmVtZW50IGlzIHRha2VuCi0gICAqICAgdG8gbWluaW1pemUgZGlzdG9ydGlvbi4KLSAgICoKLSAgICogQG9yZGVyOgotICAgKiAgIGhpbnRpbmctZW5naW5lW2NmZl0KLSAgICogICBuby1zdGVtLWRhcmtlbmluZ1tjZmZdCi0gICAqICAgZGFya2VuaW5nLXBhcmFtZXRlcnNbY2ZmXQotICAgKiAgIHJhbmRvbS1zZWVkCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBwcm9wZXJ0eToKLSAgICogICBoaW50aW5nLWVuZ2luZVtjZmZdCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBUaGFua3MgdG8gQWRvYmUsIHdoaWNoIGNvbnRyaWJ1dGVkIGEgbmV3IGhpbnRpbmcgKGFuZCBwYXJzaW5nKQotICAgKiAgIGVuZ2luZSwgYW4gYXBwbGljYXRpb24gY2FuIHNlbGVjdCBiZXR3ZWVuIGBmcmVldHlwZScgYW5kIGBhZG9iZScgaWYKLSAgICogICBjb21waWxlZCB3aXRoIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUuICBJZiB0aGlzIGNvbmZpZ3VyYXRpb24KLSAgICogICBtYWNybyBpc24ndCBkZWZpbmVkLCBgaGludGluZy1lbmdpbmUnIGRvZXMgbm90aGluZy4KLSAgICoKLSAgICogICBUaGUgZGVmYXVsdCBlbmdpbmUgaXMgYGZyZWV0eXBlJyBpZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FIGlzCi0gICAqICAgZGVmaW5lZCwgYW5kIGBhZG9iZScgb3RoZXJ3aXNlLgotICAgKgotICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gc2VsZWN0IEFkb2JlJ3MgaGludGluZwotICAgKiAgIGVuZ2luZSAob21pdHRpbmcgdGhlIGVycm9yIGhhbmRsaW5nKS4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OwotICAgKiAgICAgRlRfVUludCAgICAgaGludGluZ19lbmdpbmUgPSBGVF9DRkZfSElOVElOR19BRE9CRTsKLSAgICoKLSAgICoKLSAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7Ci0gICAqCi0gICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJjZmYiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGludGluZy1lbmdpbmUiLCAmaGludGluZ19lbmdpbmUgKTsKLSAgICogICB9Ci0gICAqCi0gICAqIEBub3RlOgotICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCi0gICAqCi0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50Ci0gICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyBgYWRvYmUnIG9yIGBmcmVldHlwZScpLgotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAZW51bToKLSAgICogICBGVF9DRkZfSElOVElOR19YWFgKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEEgbGlzdCBvZiBjb25zdGFudHMgdXNlZCBmb3IgdGhlIEBoaW50aW5nLWVuZ2luZVtjZmZdIHByb3BlcnR5IHRvCi0gICAqICAgc2VsZWN0IHRoZSBoaW50aW5nIGVuZ2luZSBmb3IgQ0ZGIGZvbnRzLgotICAgKgotICAgKiBAdmFsdWVzOgotICAgKiAgIEZUX0NGRl9ISU5USU5HX0ZSRUVUWVBFIDo6Ci0gICAqICAgICBVc2UgdGhlIG9sZCBGcmVlVHlwZSBoaW50aW5nIGVuZ2luZS4KLSAgICoKLSAgICogICBGVF9DRkZfSElOVElOR19BRE9CRSA6OgotICAgKiAgICAgVXNlIHRoZSBoaW50aW5nIGVuZ2luZSBjb250cmlidXRlZCBieSBBZG9iZS4KLSAgICoKLSAgICovCi0jZGVmaW5lIEZUX0NGRl9ISU5USU5HX0ZSRUVUWVBFICAwCi0jZGVmaW5lIEZUX0NGRl9ISU5USU5HX0FET0JFICAgICAxCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHByb3BlcnR5OgotICAgKiAgIG5vLXN0ZW0tZGFya2VuaW5nW2NmZl0KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEJ5IGRlZmF1bHQsIHRoZSBBZG9iZSBDRkYgZW5naW5lIGRhcmtlbnMgc3RlbXMgYXQgc21hbGxlciBzaXplcywKLSAgICogICByZWdhcmRsZXNzIG9mIGhpbnRpbmcsIHRvIGVuaGFuY2UgY29udHJhc3QuICBUaGlzIGZlYXR1cmUgcmVxdWlyZXMKLSAgICogICBhIHJlbmRlcmluZyBzeXN0ZW0gd2l0aCBwcm9wZXIgZ2FtbWEgY29ycmVjdGlvbi4gIFNldHRpbmcgdGhpcwotICAgKiAgIHByb3BlcnR5LCBzdGVtIGRhcmtlbmluZyBnZXRzIHN3aXRjaGVkIG9mZi4KLSAgICoKLSAgICogICBOb3RlIHRoYXQgc3RlbSBkYXJrZW5pbmcgaXMgbmV2ZXIgYXBwbGllZCBpZiBARlRfTE9BRF9OT19TQ0FMRSBpcyBzZXQuCi0gICAqCi0gICAqICAgewotICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKLSAgICogICAgIEZUX0Jvb2wgICAgIG5vX3N0ZW1fZGFya2VuaW5nID0gVFJVRTsKLSAgICoKLSAgICoKLSAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7Ci0gICAqCi0gICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJjZmYiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8tc3RlbS1kYXJrZW5pbmciLCAmbm9fc3RlbV9kYXJrZW5pbmcgKTsKLSAgICogICB9Ci0gICAqCi0gICAqIEBub3RlOgotICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCi0gICAqCi0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50Ci0gICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KLSAgICogICBJdCBjYW4gYWxzbyBiZSBzZXQgcGVyIGZhY2UgdXNpbmcgQEZUX0ZhY2VfUHJvcGVydGllcyB3aXRoCi0gICAqICAgQEZUX1BBUkFNX1RBR19TVEVNX0RBUktFTklORy4KLSAgICoKLSAgICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHByb3BlcnR5OgotICAgKiAgIGRhcmtlbmluZy1wYXJhbWV0ZXJzW2NmZl0KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEJ5IGRlZmF1bHQsIHRoZSBBZG9iZSBDRkYgZW5naW5lIGRhcmtlbnMgc3RlbXMgYXMgZm9sbG93cyAoaWYgdGhlCi0gICAqICAgYG5vLXN0ZW0tZGFya2VuaW5nJyBwcm9wZXJ0eSBpc24ndCBzZXQpOgotICAgKgotICAgKiAgIHsKLSAgICogICAgIHN0ZW0gd2lkdGggPD0gMC41cHg6ICAgZGFya2VuaW5nIGFtb3VudCA9IDAuNHB4Ci0gICAqICAgICBzdGVtIHdpZHRoICA9IDFweDogICAgIGRhcmtlbmluZyBhbW91bnQgPSAwLjI3NXB4Ci0gICAqICAgICBzdGVtIHdpZHRoICA9IDEuNjY3cHg6IGRhcmtlbmluZyBhbW91bnQgPSAwLjI3NXB4Ci0gICAqICAgICBzdGVtIHdpZHRoID49IDIuMzMzcHg6IGRhcmtlbmluZyBhbW91bnQgPSAwcHgKLSAgICogICB9Ci0gICAqCi0gICAqICAgYW5kIHBpZWNld2lzZSBsaW5lYXIgaW4tYmV0d2Vlbi4gIEF0IGNvbmZpZ3VyYXRpb24gdGltZSwgdGhlc2UgZm91cgotICAgKiAgIGNvbnRyb2wgcG9pbnRzIGNhbiBiZSBzZXQgd2l0aCB0aGUgbWFjcm8KLSAgICogICBgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUlMnLiAgQXQgcnVudGltZSwgdGhlIGNvbnRyb2wKLSAgICogICBwb2ludHMgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBkYXJrZW5pbmctcGFyYW1ldGVycycgcHJvcGVydHksIGFzCi0gICAqICAgdGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcy4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OwotICAgKiAgICAgRlRfSW50ICAgICAgZGFya2VuX3BhcmFtc1s4XSA9IHsgIDUwMCwgMzAwLCAgIC8vIHgxLCB5MQotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMCwgMjAwLCAgIC8vIHgyLCB5MgotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUwMCwgMTAwLCAgIC8vIHgzLCB5MwotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMCwgICAwIH07IC8vIHg0LCB5NAotICAgKgotICAgKgotICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICoKLSAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImNmZiIsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXJrZW5pbmctcGFyYW1ldGVycyIsIGRhcmtlbl9wYXJhbXMgKTsKLSAgICogICB9Ci0gICAqCi0gICAqICAgVGhlIHh+dmFsdWVzIGdpdmUgdGhlIHN0ZW0gd2lkdGgsIGFuZCB0aGUgeX52YWx1ZXMgdGhlIGRhcmtlbmluZwotICAgKiAgIGFtb3VudC4gIFRoZSB1bml0IGlzIDEwMDB0aCBvZiBwaXhlbHMuICBBbGwgY29vcmRpbmF0ZSB2YWx1ZXMgbXVzdCBiZQotICAgKiAgIHBvc2l0aXZlOyB0aGUgeH52YWx1ZXMgbXVzdCBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmc7IHRoZQotICAgKiAgIHl+dmFsdWVzIG11c3QgYmUgbW9ub3RvbmljYWxseSBkZWNyZWFzaW5nIGFuZCBzbWFsbGVyIHRoYW4gb3IKLSAgICogICBlcXVhbCB0byA1MDAgKGNvcnJlc3BvbmRpbmcgdG8gaGFsZiBhIHBpeGVsKTsgdGhlIHNsb3BlIG9mIGVhY2gKLSAgICogICBsaW5lYXIgcGllY2UgbXVzdCBiZSBzaGFsbG93ZXIgdGhhbiAtMSAoZS5nLiwgLS40KS4KLSAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KLSAgICoKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKLSAgICogICB2YXJpYWJsZSwgdXNpbmcgZWlnaHQgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzIHdpdGhvdXQgc3BhY2VzLiAgSGVyZQotICAgKiAgIHRoZSBhYm92ZSBleGFtcGxlLCB1c2luZyBgXCcgdG8gYnJlYWsgdGhlIGxpbmUgZm9yIHJlYWRhYmlsaXR5LgotICAgKgotICAgKiAgIHsKLSAgICogICAgIEZSRUVUWVBFX1BST1BFUlRJRVM9XAotICAgKiAgICAgY2ZmOmRhcmtlbmluZy1wYXJhbWV0ZXJzPTUwMCwzMDAsMTAwMCwyMDAsMTUwMCwxMDAsMjAwMCwwCi0gICAqICAgfQotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAcHJvcGVydHk6Ci0gICAqICAgcmFuZG9tLXNlZWQKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEJ5IGRlZmF1bHQsIHRoZSBzZWVkIHZhbHVlIGZvciB0aGUgQ0ZGIGByYW5kb20nIG9wZXJhdG9yIGlzIHNldCB0byBhCi0gICAqICAgcmFuZG9tIHZhbHVlLiAgSG93ZXZlciwgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIGl0IGlzIG9mdGVuCi0gICAqICAgbmVjZXNzYXJ5IHRvIHVzZSBhIGtub3duIHZhbHVlIGFzIGEgc2VlZCBzbyB0aGF0IHRoZSBwc2V1ZG8tcmFuZG9tCi0gICAqICAgbnVtYmVyIHNlcXVlbmNlcyBnZW5lcmF0ZWQgYnkgYHJhbmRvbScgYXJlIHJlcGVhdGFibGUuCi0gICAqCi0gICAqICAgVGhlIGByYW5kb20tc2VlZCcgcHJvcGVydHkgZG9lcyB0aGF0LiAgSXRzIGFyZ3VtZW50IGlzIGEgc2lnbmVkIDMyYml0Ci0gICAqICAgaW50ZWdlcjsgaWYgdGhlIHZhbHVlIGlzIHplcm8gb3IgbmVnYXRpdmUsIHRoZSBzZWVkIGdpdmVuIGJ5IHRoZQotICAgKiAgIGBpbnRpdGlhbFJhbmRvbVNlZWQnIHByaXZhdGUgRElDVCBvcGVyYXRvciBpbiBhIENGRiBmaWxlIGdldHMgdXNlZAotICAgKiAgIChvciBhIGRlZmF1bHQgdmFsdWUgaWYgdGhlcmUgaXMgbm8gc3VjaCBvcGVyYXRvcikuICBJZiB0aGUgdmFsdWUgaXMKLSAgICogICBwb3NpdGl2ZSwgdXNlIGl0IGluc3RlYWQgb2YgYGluaXRpYWxSYW5kb21TZWVkJywgd2hpY2ggaXMKLSAgICogICBjb25zZXF1ZW50bHkgaWdub3JlZC4KLSAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50Ci0gICAqICAgdmFyaWFibGUuICBJdCBjYW4gYWxzbyBiZSBzZXQgcGVyIGZhY2UgdXNpbmcgQEZUX0ZhY2VfUHJvcGVydGllcyB3aXRoCi0gICAqICAgQEZUX1BBUkFNX1RBR19SQU5ET01fU0VFRC4KLSAgICoKLSAgICovCi0KLQotICAvKgotICAgKiBAY29uc3RhbnQ6Ci0gICAqICAgRlRfUEFSQU1fVEFHX1JBTkRPTV9TRUVECi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBbiBARlRfUGFyYW1ldGVyIHRhZyB0byBiZSB1c2VkIHdpdGggQEZUX0ZhY2VfUHJvcGVydGllcy4gIFRoZQotICAgKiAgIGNvcnJlc3BvbmRpbmcgMzJiaXQgc2lnbmVkIGludGVnZXIgYXJndW1lbnQgb3ZlcnJpZGVzIHRoZSBDRkYKLSAgICogICBtb2R1bGUncyByYW5kb20gc2VlZCB2YWx1ZSB3aXRoIGEgZmFjZS1zcGVjaWZpYyBvbmU7IHNlZQotICAgKiAgIEByYW5kb20tc2VlZC4KLSAgICoKLSAgICovCi0jZGVmaW5lIEZUX1BBUkFNX1RBR19SQU5ET01fU0VFRCBcCi0gICAgICAgICAgRlRfTUFLRV9UQUcoICdzJywgJ2UnLCAnZScsICdkJyApCi0KLQotICAvKiAqLwotCi0KLUZUX0VORF9IRUFERVIKLQotCi0jZW5kaWYgLyogRlRDRkZEUlZfSF8gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjaGFwdGVycy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmgKaW5kZXggYTBhMTIxYi4uNTEyNTdiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNoYXB0ZXJzLmgKQEAgLTc2LDggKzc2LDExIEBACiAvKiA8U2VjdGlvbnM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgYXV0b19oaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIGNmZl9kcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICB0MV9jaWRfZHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgdHRfZHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIHBjZl9kcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBwcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgcGFyYW1ldGVyX3RhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2lkLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2lkLmgKaW5kZXggNGFkY2JlZS4uNWU5MTAwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGNpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBDSUQgZm9udCBpbmZvcm1hdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERlcmVnIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtODcsNyArODcsNyBAQAogICBGVF9HZXRfQ0lEX1JlZ2lzdHJ5X09yZGVyaW5nX1N1cHBsZW1lbnQoIEZUX0ZhY2UgICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgKnJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqb3JkZXJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpzdXBwbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnN1cHBsZW1lbnQgKTsKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZHJpdmVyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkMTA0ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRkcml2ZXIuaApAQCAtMCwwICsxLDEyMjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0ZHJpdmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIGRyaXZlciBtb2R1bGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBGVERSSVZFUl9IXworI2RlZmluZSBGVERSSVZFUl9IXworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX1BBUkFNRVRFUl9UQUdTX0gKKworI2lmZGVmIEZSRUVUWVBFX0gKKyNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCisjZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKKyNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgorI2VuZGlmCisKKworRlRfQkVHSU5fSEVBREVSCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHNlY3Rpb246CisgICAqICAgYXV0b19oaW50ZXIKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIFRoZSBhdXRvLWhpbnRlcgorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQ29udHJvbGxpbmcgdGhlIGF1dG8taGludGluZyBtb2R1bGUuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXaGlsZSBGcmVlVHlwZSdzIGF1dG8taGludGVyIGRvZXNuJ3QgZXhwb3NlIEFQSSBmdW5jdGlvbnMgYnkgaXRzZWxmLAorICAgKiAgIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQgYW5kCisgICAqICAgQEZUX1Byb3BlcnR5X0dldC4gIFRoZSBmb2xsb3dpbmcgbGlzdHMgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzCisgICAqICAgdG9nZXRoZXIgd2l0aCB0aGUgbmVjZXNzYXJ5IG1hY3JvcyBhbmQgc3RydWN0dXJlcy4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhlIGF1dG8taGludGVyJ3MgbW9kdWxlIG5hbWUgaXMgYGF1dG9maXR0ZXInIGZvcgorICAgKiAgIGhpc3RvcmljYWwgcmVhc29ucy4KKyAgICoKKyAgICogICBBdmFpbGFibGUgcHJvcGVydGllcyBhcmUgQGluY3JlYXNlLXgtaGVpZ2h0LCBAbm8tc3RlbS1kYXJrZW5pbmcKKyAgICogICAoZXhwZXJpbWVudGFsKSwgQGRhcmtlbmluZy1wYXJhbWV0ZXJzIChleHBlcmltZW50YWwpLCBAd2FycGluZworICAgKiAgIChleHBlcmltZW50YWwpLCBAZ2x5cGgtdG8tc2NyaXB0LW1hcCAoZXhwZXJpbWVudGFsKSwgQGZhbGxiYWNrLXNjcmlwdAorICAgKiAgIChleHBlcmltZW50YWwpLCBhbmQgQGRlZmF1bHQtc2NyaXB0IChleHBlcmltZW50YWwpLCBhcyBkb2N1bWVudGVkIGluCisgICAqICAgdGhlIEBwcm9wZXJ0aWVzIHNlY3Rpb24uCisgICAqCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIGNmZl9kcml2ZXIKKyAgICoKKyAgICogQHRpdGxlOgorICAgKiAgIFRoZSBDRkYgZHJpdmVyCisgICAqCisgICAqIEBhYnN0cmFjdDoKKyAgICogICBDb250cm9sbGluZyB0aGUgQ0ZGIGRyaXZlciBtb2R1bGUuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXaGlsZSBGcmVlVHlwZSdzIENGRiBkcml2ZXIgZG9lc24ndCBleHBvc2UgQVBJIGZ1bmN0aW9ucyBieSBpdHNlbGYsCisgICAqICAgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCBpdHMgYmVoYXZpb3VyIHdpdGggQEZUX1Byb3BlcnR5X1NldCBhbmQKKyAgICogICBARlRfUHJvcGVydHlfR2V0LgorICAgKgorICAgKiAgIFRoZSBDRkYgZHJpdmVyJ3MgbW9kdWxlIG5hbWUgaXMgYGNmZicuCisgICAqCisgICAqICAgQXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlIEBoaW50aW5nLWVuZ2luZSwgQG5vLXN0ZW0tZGFya2VuaW5nLAorICAgKiAgIEBkYXJrZW5pbmctcGFyYW1ldGVycywgYW5kIEByYW5kb20tc2VlZCwgYXMgZG9jdW1lbnRlZCBpbiB0aGUKKyAgICogICBAcHJvcGVydGllcyBzZWN0aW9uLgorICAgKgorICAgKgorICAgKiAgICpIaW50aW5nKiAqYW5kKiAqYW50aWFsaWFzaW5nKiAqcHJpbmNpcGxlcyogKm9mKiAqdGhlKiAqbmV3KiAqZW5naW5lKgorICAgKgorICAgKiAgIFRoZSByYXN0ZXJpemVyIGlzIHBvc2l0aW9uaW5nIGhvcml6b250YWwgZmVhdHVyZXMgKGUuZy4sIGFzY2VuZGVyCisgICAqICAgaGVpZ2h0ICYgeC1oZWlnaHQsIG9yIGNyb3NzYmFycykgb24gdGhlIHBpeGVsIGdyaWQgYW5kIG1pbmltaXppbmcgdGhlCisgICAqICAgYW1vdW50IG9mIGFudGlhbGlhc2luZyBhcHBsaWVkIHRvIHRoZW0sIHdoaWxlIHBsYWNpbmcgdmVydGljYWwKKyAgICogICBmZWF0dXJlcyAodmVydGljYWwgc3RlbXMpIG9uIHRoZSBwaXhlbCBncmlkIHdpdGhvdXQgaGludGluZywgdGh1cworICAgKiAgIHJlcHJlc2VudGluZyB0aGUgc3RlbSBwb3NpdGlvbiBhbmQgd2VpZ2h0IGFjY3VyYXRlbHkuICBTb21ldGltZXMgdGhlCisgICAqICAgdmVydGljYWwgc3RlbXMgbWF5IGJlIG9ubHkgcGFydGlhbGx5IGJsYWNrLiAgSW4gdGhpcyBjb250ZXh0LAorICAgKiAgIGBhbnRpYWxpYXNpbmcnIG1lYW5zIHRoYXQgc3RlbXMgYXJlIG5vdCBwb3NpdGlvbmVkIGV4YWN0bHkgb24gcGl4ZWwKKyAgICogICBib3JkZXJzLCBjYXVzaW5nIGEgZnV6enkgYXBwZWFyYW5jZS4KKyAgICoKKyAgICogICBUaGVyZSBhcmUgdHdvIHByaW5jaXBsZXMgYmVoaW5kIHRoaXMgYXBwcm9hY2guCisgICAqCisgICAqICAgMSkgTm8gaGludGluZyBpbiB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb246IFVubGlrZSBgc3VwZXJoaW50ZWQnCisgICAqICAgVHJ1ZVR5cGUsIHdoaWNoIGNoYW5nZXMgZ2x5cGggd2lkdGhzIHRvIGFjY29tbW9kYXRlIHJlZ3VsYXIKKyAgICogICBpbnRlci1nbHlwaCBzcGFjaW5nLCBBZG9iZSdzIGFwcHJvYWNoIGlzIGBmYWl0aGZ1bCB0byB0aGUgZGVzaWduJyBpbgorICAgKiAgIHJlcHJlc2VudGluZyBib3RoIHRoZSBnbHlwaCB3aWR0aCBhbmQgdGhlIGludGVyLWdseXBoIHNwYWNpbmcKKyAgICogICBkZXNpZ25lZCBmb3IgdGhlIGZvbnQuICBUaGlzIG1ha2VzIHRoZSBzY3JlZW4gZGlzcGxheSBhcyBjbG9zZSBhcyBpdAorICAgKiAgIGNhbiBiZSB0byB0aGUgcmVzdWx0IG9uZSB3b3VsZCBnZXQgd2l0aCBpbmZpbml0ZSByZXNvbHV0aW9uLCB3aGlsZQorICAgKiAgIHByZXNlcnZpbmcgd2hhdCBpcyBjb25zaWRlcmVkIHRoZSBrZXkgY2hhcmFjdGVyaXN0aWNzIG9mIGVhY2ggZ2x5cGguCisgICAqICAgTm90ZSB0aGF0IHRoZSBkaXN0YW5jZXMgYmV0d2VlbiB1bmhpbnRlZCBhbmQgZ3JpZC1maXR0ZWQgcG9zaXRpb25zIGF0CisgICAqICAgc21hbGwgc2l6ZXMgYXJlIGNvbXBhcmFibGUgdG8ga2VybmluZyB2YWx1ZXMgYW5kIHRodXMgd291bGQgYmUKKyAgICogICBub3RpY2VhYmxlIChhbmQgZGlzdHJhY3RpbmcpIHdoaWxlIHJlYWRpbmcgaWYgaGludGluZyB3ZXJlIGFwcGxpZWQuCisgICAqCisgICAqICAgT25lIG9mIHRoZSByZWFzb25zIHRvIG5vdCBoaW50IGhvcml6b250YWxseSBpcyBhbnRpYWxpYXNpbmcgZm9yIExDRAorICAgKiAgIHNjcmVlbnM6IFRoZSBwaXhlbCBnZW9tZXRyeSBvZiBtb2Rlcm4gZGlzcGxheXMgc3VwcGxpZXMgdGhyZWUKKyAgICogICB2ZXJ0aWNhbCBzdWItcGl4ZWxzIGFzIHRoZSBleWUgbW92ZXMgaG9yaXpvbnRhbGx5IGFjcm9zcyBlYWNoIHZpc2libGUKKyAgICogICBwaXhlbC4gIE9uIGRldmljZXMgd2hlcmUgd2UgY2FuIGJlIGNlcnRhaW4gdGhpcyBjaGFyYWN0ZXJpc3RpYyBpcworICAgKiAgIHByZXNlbnQgYSByYXN0ZXJpemVyIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgc3ViLXBpeGVscyB0byBhZGQKKyAgICogICBpbmNyZW1lbnRzIG9mIHdlaWdodC4gIEluIFdlc3Rlcm4gd3JpdGluZyBzeXN0ZW1zIHRoaXMgdHVybnMgb3V0IHRvCisgICAqICAgYmUgdGhlIG1vcmUgY3JpdGljYWwgZGlyZWN0aW9uIGFueXdheTsgdGhlIHdlaWdodHMgYW5kIHNwYWNpbmcgb2YKKyAgICogICB2ZXJ0aWNhbCBzdGVtcyAoc2VlIGFib3ZlKSBhcmUgY2VudHJhbCB0byBBcm1lbmlhbiwgQ3lyaWxsaWMsIEdyZWVrLAorICAgKiAgIGFuZCBMYXRpbiB0eXBlIGRlc2lnbnMuICBFdmVuIHdoZW4gdGhlIHJhc3Rlcml6ZXIgdXNlcyBncmV5c2NhbGUKKyAgICogICBhbnRpYWxpYXNpbmcgaW5zdGVhZCBvZiBjb2xvciAoYSBuZWNlc3NhcnkgY29tcHJvbWlzZSB3aGVuIG9uZQorICAgKiAgIGRvZXNuJ3Qga25vdyB0aGUgc2NyZWVuIGNoYXJhY3RlcmlzdGljcyksIHRoZSB1bmhpbnRlZCB2ZXJ0aWNhbAorICAgKiAgIGZlYXR1cmVzIHByZXNlcnZlIHRoZSBkZXNpZ24ncyB3ZWlnaHQgYW5kIHNwYWNpbmcgbXVjaCBiZXR0ZXIgdGhhbgorICAgKiAgIGFsaWFzZWQgdHlwZSB3b3VsZC4KKyAgICoKKyAgICogICAyKSBBbGlnbm1lbnQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbjogV2VpZ2h0cyBhbmQgc3BhY2luZyBhbG9uZyB0aGUKKyAgICogICB5fmF4aXMgYXJlIGxlc3MgY3JpdGljYWw7IHdoYXQgaXMgbXVjaCBtb3JlIGltcG9ydGFudCBpcyB0aGUgdmlzdWFsCisgICAqICAgYWxpZ25tZW50IG9mIHJlbGF0ZWQgZmVhdHVyZXMgKGxpa2UgY2FwLWhlaWdodCBhbmQgeC1oZWlnaHQpLiAgVGhlCisgICAqICAgc2Vuc2Ugb2YgYWxpZ25tZW50IGZvciB0aGVzZSBpcyBlbmhhbmNlZCBieSB0aGUgc2hhcnBuZXNzIG9mIGdyaWQtZml0CisgICAqICAgZWRnZXMsIHdoaWxlIHRoZSBjcnVkZXIgdmVydGljYWwgcmVzb2x1dGlvbiAoZnVsbCBwaXhlbHMgaW5zdGVhZCBvZgorICAgKiAgIDEvMyBwaXhlbHMpIGlzIGxlc3Mgb2YgYSBwcm9ibGVtLgorICAgKgorICAgKiAgIE9uIHRoZSB0ZWNobmljYWwgc2lkZSwgaG9yaXpvbnRhbCBhbGlnbm1lbnQgem9uZXMgZm9yIGFzY2VuZGVyLAorICAgKiAgIHgtaGVpZ2h0LCBhbmQgb3RoZXIgaW1wb3J0YW50IGhlaWdodCB2YWx1ZXMgKHRyYWRpdGlvbmFsbHkgY2FsbGVkCisgICAqICAgYGJsdWUgem9uZXMnKSBhcyBkZWZpbmVkIGluIHRoZSBmb250IGFyZSBwb3NpdGlvbmVkIGluZGVwZW5kZW50bHksCisgICAqICAgZWFjaCBiZWluZyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHBpeGVsIGVkZ2UsIHRha2luZyBjYXJlIG9mCisgICAqICAgb3ZlcnNob290IHN1cHByZXNzaW9uIGF0IHNtYWxsIHNpemVzLCBzdGVtIGRhcmtlbmluZywgYW5kIHNjYWxpbmcuCisgICAqCisgICAqICAgSHN0ZW1zICh0aGlzIGlzLCBoaW50IHZhbHVlcyBkZWZpbmVkIGluIHRoZSBmb250IHRvIGhlbHAgYWxpZ24KKyAgICogICBob3Jpem9udGFsIGZlYXR1cmVzKSB0aGF0IGZhbGwgd2l0aGluIGEgYmx1ZSB6b25lIGFyZSBzYWlkIHRvIGJlCisgICAqICAgYGNhcHR1cmVkJyBhbmQgYXJlIGFsaWduZWQgdG8gdGhhdCB6b25lLiAgVW5jYXB0dXJlZCBzdGVtcyBhcmUgbW92ZWQKKyAgICogICBpbiBvbmUgb2YgZm91ciB3YXlzLCB0b3AgZWRnZSB1cCBvciBkb3duLCBib3R0b20gZWRnZSB1cCBvciBkb3duLgorICAgKiAgIFVubGVzcyB0aGVyZSBhcmUgY29uZmxpY3RpbmcgaHN0ZW1zLCB0aGUgc21hbGxlc3QgbW92ZW1lbnQgaXMgdGFrZW4KKyAgICogICB0byBtaW5pbWl6ZSBkaXN0b3J0aW9uLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBwY2ZfZHJpdmVyCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUaGUgUENGIGRyaXZlcgorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQ29udHJvbGxpbmcgdGhlIFBDRiBkcml2ZXIgbW9kdWxlLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgV2hpbGUgRnJlZVR5cGUncyBQQ0YgZHJpdmVyIGRvZXNuJ3QgZXhwb3NlIEFQSSBmdW5jdGlvbnMgYnkgaXRzZWxmLAorICAgKiAgIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQgYW5kCisgICAqICAgQEZUX1Byb3BlcnR5X0dldC4gIFJpZ2h0IG5vdywgdGhlcmUgaXMgYSBzaW5nbGUgcHJvcGVydHkKKyAgICogICBAbm8tbG9uZy1mYW1pbHktbmFtZXMgYXZhaWxhYmxlIGlmIEZyZWVUeXBlIGlzIGNvbXBpbGVkIHdpdGgKKyAgICogICBQQ0ZfQ09ORklHX09QVElPTl9MT05HX0ZBTUlMWV9OQU1FUy4KKyAgICoKKyAgICogICBUaGUgUENGIGRyaXZlcidzIG1vZHVsZSBuYW1lIGlzIGBwY2YnLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICB0MV9jaWRfZHJpdmVyCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBUaGUgVHlwZSAxIGFuZCBDSUQgZHJpdmVycworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQ29udHJvbGxpbmcgdGhlIFR5cGV+MSBhbmQgQ0lEIGRyaXZlciBtb2R1bGVzLgorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgSXQgaXMgcG9zc2libGUgdG8gY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIEZyZWVUeXBlJ3MgVHlwZX4xIGFuZAorICAgKiAgIFR5cGV+MSBDSUQgZHJpdmVycyB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQgYW5kIEBGVF9Qcm9wZXJ0eV9HZXQuCisgICAqCisgICAqICAgQmVoaW5kIHRoZSBzY2VuZXMsIGJvdGggZHJpdmVycyB1c2UgdGhlIEFkb2JlIENGRiBlbmdpbmUgZm9yIGhpbnRpbmc7CisgICAqICAgaG93ZXZlciwgdGhlIHVzZWQgcHJvcGVydGllcyBtdXN0IGJlIHNwZWNpZmllZCBzZXBhcmF0ZWx5LgorICAgKgorICAgKiAgIFRoZSBUeXBlfjEgZHJpdmVyJ3MgbW9kdWxlIG5hbWUgaXMgYHR5cGUxJzsgdGhlIENJRCBkcml2ZXIncyBtb2R1bGUKKyAgICogICBuYW1lIGlzIGB0MWNpZCcuCisgICAqCisgICAqICAgQXZhaWxhYmxlIHByb3BlcnRpZXMgYXJlIEBoaW50aW5nLWVuZ2luZSwgQG5vLXN0ZW0tZGFya2VuaW5nLAorICAgKiAgIEBkYXJrZW5pbmctcGFyYW1ldGVycywgYW5kIEByYW5kb20tc2VlZCwgYXMgZG9jdW1lbnRlZCBpbiB0aGUKKyAgICogICBAcHJvcGVydGllcyBzZWN0aW9uLgorICAgKgorICAgKiAgIFBsZWFzZSBzZWUgdGhlIEBjZmZfZHJpdmVyIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgbmV3CisgICAqICAgaGludGluZyBlbmdpbmUuCisgICAqCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBzZWN0aW9uOgorICAgKiAgIHR0X2RyaXZlcgorICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgVGhlIFRydWVUeXBlIGRyaXZlcgorICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQ29udHJvbGxpbmcgdGhlIFRydWVUeXBlIGRyaXZlciBtb2R1bGUuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBXaGlsZSBGcmVlVHlwZSdzIFRydWVUeXBlIGRyaXZlciBkb2Vzbid0IGV4cG9zZSBBUEkgZnVuY3Rpb25zIGJ5CisgICAqICAgaXRzZWxmLCBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvdXIgd2l0aCBARlRfUHJvcGVydHlfU2V0CisgICAqICAgYW5kIEBGVF9Qcm9wZXJ0eV9HZXQuICBUaGUgZm9sbG93aW5nIGxpc3RzIHRoZSBhdmFpbGFibGUgcHJvcGVydGllcworICAgKiAgIHRvZ2V0aGVyIHdpdGggdGhlIG5lY2Vzc2FyeSBtYWNyb3MgYW5kIHN0cnVjdHVyZXMuCisgICAqCisgICAqICAgVGhlIFRydWVUeXBlIGRyaXZlcidzIG1vZHVsZSBuYW1lIGlzIGB0cnVldHlwZScuCisgICAqCisgICAqICAgQSBzaW5nbGUgcHJvcGVydHkgQGludGVycHJldGVyLXZlcnNpb24gaXMgYXZhaWxhYmxlLCBhcyBkb2N1bWVudGVkIGluCisgICAqICAgdGhlIEBwcm9wZXJ0aWVzIHNlY3Rpb24uCisgICAqCisgICAqICAgV2Ugc3RhcnQgd2l0aCBhIGxpc3Qgb2YgZGVmaW5pdGlvbnMsIGtpbmRseSBwcm92aWRlZCBieSBHcmVnCisgICAqICAgSGl0Y2hjb2NrLgorICAgKgorICAgKiAgIF9CaS1MZXZlbF8gX1JlbmRlcmluZ18KKyAgICoKKyAgICogICBNb25vY2hyb21hdGljIHJlbmRlcmluZywgZXhjbHVzaXZlbHkgdXNlZCBpbiB0aGUgZWFybHkgZGF5cyBvZgorICAgKiAgIFRydWVUeXBlIGJ5IGJvdGggQXBwbGUgYW5kIE1pY3Jvc29mdC4gIE1pY3Jvc29mdCdzIEdESSBpbnRlcmZhY2UKKyAgICogICBzdXBwb3J0ZWQgaGludGluZyBvZiB0aGUgcmlnaHQtc2lkZSBiZWFyaW5nIHBvaW50LCBzdWNoIHRoYXQgdGhlCisgICAqICAgYWR2YW5jZSB3aWR0aCBjb3VsZCBiZSBub24tbGluZWFyLiAgTW9zdCBvZnRlbiB0aGlzIHdhcyBkb25lIHRvCisgICAqICAgYWNoaWV2ZSBzb21lIGxldmVsIG9mIGdseXBoIHN5bW1ldHJ5LiAgVG8gZW5hYmxlIHJlYXNvbmFibGUKKyAgICogICBwZXJmb3JtYW5jZSAoZS5nLiwgbm90IGhhdmluZyB0byBydW4gaGludGluZyBvbiBhbGwgZ2x5cGhzIGp1c3QgdG8KKyAgICogICBnZXQgdGhlIHdpZHRocykgdGhlcmUgd2FzIGEgYml0IGluIHRoZSBoZWFkIHRhYmxlIGluZGljYXRpbmcgaWYgdGhlCisgICAqICAgc2lkZSBiZWFyaW5nIHdhcyBoaW50ZWQsIGFuZCBhZGRpdGlvbmFsIHRhYmxlcywgYGhkbXgnIGFuZCBgTFRTSCcsIHRvCisgICAqICAgY2FjaGUgaGludGluZyB3aWR0aHMgYWNyb3NzIG11bHRpcGxlIHNpemVzIGFuZCBkZXZpY2UgYXNwZWN0IHJhdGlvcy4KKyAgICoKKyAgICogICBfRm9udF8gX1Ntb290aGluZ18KKyAgICoKKyAgICogICBNaWNyb3NvZnQncyBHREkgaW1wbGVtZW50YXRpb24gb2YgYW50aS1hbGlhc2luZy4gIE5vdCB0cmFkaXRpb25hbAorICAgKiAgIGFudGktYWxpYXNpbmcgYXMgdGhlIG91dGxpbmVzIHdlcmUgaGludGVkIGJlZm9yZSB0aGUgc2FtcGxpbmcuICBUaGUKKyAgICogICB3aWR0aHMgbWF0Y2hlZCB0aGUgYmktbGV2ZWwgcmVuZGVyaW5nLgorICAgKgorICAgKiAgIF9DbGVhclR5cGVfIF9SZW5kZXJpbmdfCisgICAqCisgICAqICAgVGVjaG5pcXVlIHRoYXQgdXNlcyBwaHlzaWNhbCBzdWJwaXhlbHMgdG8gaW1wcm92ZSByZW5kZXJpbmcgb24gTENECisgICAqICAgKGFuZCBvdGhlcikgZGlzcGxheXMuICBCZWNhdXNlIG9mIHRoZSBoaWdoZXIgcmVzb2x1dGlvbiwgbWFueSBtZXRob2RzCisgICAqICAgb2YgaW1wcm92aW5nIHN5bW1ldHJ5IGluIGdseXBocyB0aHJvdWdoIGhpbnRpbmcgdGhlIHJpZ2h0LXNpZGUKKyAgICogICBiZWFyaW5nIHdlcmUgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4gIFRoaXMgbGVhZCB0byB3aGF0IEdESSBjYWxscworICAgKiAgIGBuYXR1cmFsIHdpZHRocycgQ2xlYXJUeXBlLCBzZWUKKyAgICogICBodHRwOi8vd3d3LmJlYXRzdGFtbS5jb20vdHlwb2dyYXBoeS9SVFJDaDQuaHRtI1NlYzIxLiAgU2luY2UgaGludGluZworICAgKiAgIGhhcyBleHRyYSByZXNvbHV0aW9uLCBtb3N0IG5vbi1saW5lYXJpdHkgd2VudCBhd2F5LCBidXQgaXQgaXMgc3RpbGwKKyAgICogICBwb3NzaWJsZSBmb3IgaGludHMgdG8gY2hhbmdlIHRoZSBhZHZhbmNlIHdpZHRocyBpbiB0aGlzIG1vZGUuCisgICAqCisgICAqICAgX0NsZWFyVHlwZV8gX0NvbXBhdGlibGVfIF9XaWR0aHNfCisgICAqCisgICAqICAgT25lIG9mIHRoZSBlYXJsaWVzdCBjaGFsbGVuZ2VzIHdpdGggQ2xlYXJUeXBlIHdhcyBhbGxvd2luZyB0aGUKKyAgICogICBpbXBsZW1lbnRhdGlvbiBpbiBHREkgdG8gYmUgc2VsZWN0ZWQgd2l0aG91dCByZXF1aXJpbmcgYWxsIFVJIGFuZAorICAgKiAgIGRvY3VtZW50cyB0byByZWZsb3cuICBUbyBhZGRyZXNzIHRoaXMsIGEgY29tcGF0aWJsZSBtZXRob2Qgb2YKKyAgICogICByZW5kZXJpbmcgQ2xlYXJUeXBlIHdhcyBhZGRlZCB3aGVyZSB0aGUgZm9udCBoaW50cyBhcmUgZXhlY3V0ZWQgb25jZQorICAgKiAgIHRvIGRldGVybWluZSB0aGUgd2lkdGggaW4gYmktbGV2ZWwgcmVuZGVyaW5nLCBhbmQgdGhlbiByZS1ydW4gaW4KKyAgICogICBDbGVhclR5cGUsIHdpdGggdGhlIGRpZmZlcmVuY2UgaW4gd2lkdGhzIGJlaW5nIGFic29yYmVkIGluIHRoZSBmb250CisgICAqICAgaGludHMgZm9yIENsZWFyVHlwZSAobW9zdGx5IGluIHRoZSB3aGl0ZSBzcGFjZSBvZiBoaW50cyk7IHNlZQorICAgKiAgIGh0dHA6Ly93d3cuYmVhdHN0YW1tLmNvbS90eXBvZ3JhcGh5L1JUUkNoNC5odG0jU2VjMjAuICBTb21ld2hhdCBieQorICAgKiAgIGRlZmluaXRpb24sIGNvbXBhdGlibGUgd2lkdGggQ2xlYXJUeXBlIGFsbG93cyBmb3Igbm9uLWxpbmVhciB3aWR0aHMsCisgICAqICAgYnV0IG9ubHkgd2hlbiB0aGUgYmktbGV2ZWwgdmVyc2lvbiBoYXMgbm9uLWxpbmVhciB3aWR0aHMuCisgICAqCisgICAqICAgX0NsZWFyVHlwZV8gX1N1YnBpeGVsXyBfUG9zaXRpb25pbmdfCisgICAqCisgICAqICAgT25lIG9mIHRoZSBuaWNlIGJlbmVmaXRzIG9mIENsZWFyVHlwZSBpcyB0aGUgYWJpbGl0eSB0byBtb3JlIGNyaXNwbHkKKyAgICogICBkaXNwbGF5IGZyYWN0aW9uYWwgd2lkdGhzOyB1bmZvcnR1bmF0ZWx5LCB0aGUgR0RJIG1vZGVsIG9mIGludGVnZXIKKyAgICogICBiaXRtYXBzIGRpZCBub3Qgc3VwcG9ydCB0aGlzLiAgSG93ZXZlciwgdGhlIFdQRiBhbmQgRGlyZWN0IFdyaXRlCisgICAqICAgZnJhbWV3b3JrcyBkbyBzdXBwb3J0IGZyYWN0aW9uYWwgd2lkdGhzLiAgRFdyaXRlIGNhbGxzIHRoaXMgYG5hdHVyYWwKKyAgICogICBtb2RlJywgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggR0RJJ3MgYG5hdHVyYWwgd2lkdGhzJy4gIFN1YnBpeGVsCisgICAqICAgcG9zaXRpb25pbmcsIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIERpcmVjdCBXcml0ZSwKKyAgICogICB1bmZvcnR1bmF0ZWx5IGRvZXMgbm90IHN1cHBvcnQgaGludGVkIGFkdmFuY2Ugd2lkdGhzLCBzZWUKKyAgICogICBodHRwOi8vd3d3LmJlYXRzdGFtbS5jb20vdHlwb2dyYXBoeS9SVFJDaDQuaHRtI1NlYzIyLiAgTm90ZSB0aGF0IHRoZQorICAgKiAgIFRydWVUeXBlIGludGVycHJldGVyIGZ1bGx5IGFsbG93cyB0aGUgYWR2YW5jZSB3aWR0aCB0byBiZSBhZGp1c3RlZCBpbgorICAgKiAgIHRoaXMgbW9kZSwganVzdCB0aGUgRFdyaXRlIGNsaWVudCB3aWxsIGlnbm9yZSB0aG9zZSBjaGFuZ2VzLgorICAgKgorICAgKiAgIF9DbGVhclR5cGVfIF9CYWNrd2FyZF8gX0NvbXBhdGliaWxpdHlfCisgICAqCisgICAqICAgVGhpcyBpcyBhIHNldCBvZiBleGNlcHRpb25zIG1hZGUgaW4gdGhlIFRydWVUeXBlIGludGVycHJldGVyIHRvCisgICAqICAgbWluaW1pemUgaGludGluZyB0ZWNobmlxdWVzIHRoYXQgd2VyZSBwcm9ibGVtYXRpYyB3aXRoIHRoZSBleHRyYQorICAgKiAgIHJlc29sdXRpb24gb2YgQ2xlYXJUeXBlOyBzZWUKKyAgICogICBodHRwOi8vd3d3LmJlYXRzdGFtbS5jb20vdHlwb2dyYXBoeS9SVFJDaDQuaHRtI1NlYzEgYW5kCisgICAqICAgaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4LgorICAgKiAgIFRoaXMgdGVjaG5pcXVlIGlzIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIENsZWFyVHlwZSBjb21wYXRpYmxlCisgICAqICAgd2lkdGhzLiAgQ2xlYXJUeXBlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaGFzIG5vIGRpcmVjdCBpbXBhY3Qgb24KKyAgICogICBjaGFuZ2luZyBhZHZhbmNlIHdpZHRocywgYnV0IHRoZXJlIG1pZ2h0IGJlIGFuIGluZGlyZWN0IGltcGFjdCBvbgorICAgKiAgIGRpc2FibGluZyBzb21lIGRlbHRhcy4gIFRoaXMgY291bGQgYmUgd29ya2VkIGFyb3VuZCBpbiBiYWNrd2FyZAorICAgKiAgIGNvbXBhdGliaWxpdHkgbW9kZS4KKyAgICoKKyAgICogICBfTmF0aXZlXyBfQ2xlYXJUeXBlXyBfTW9kZV8KKyAgICoKKyAgICogICAoTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggYG5hdHVyYWwgd2lkdGhzJy4pICBUaGlzIG1vZGUgcmVtb3ZlcyBhbGwKKyAgICogICB0aGUgZXhjZXB0aW9ucyBpbiB0aGUgVHJ1ZVR5cGUgaW50ZXJwcmV0ZXIgd2hlbiBydW5uaW5nIHdpdGgKKyAgICogICBDbGVhclR5cGUuICBBbnkgaXNzdWVzIG9uIHdpZHRocyB3b3VsZCBzdGlsbCBhcHBseSwgdGhvdWdoLgorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBwcm9wZXJ0aWVzCisgICAqCisgICAqIEB0aXRsZToKKyAgICogICBEcml2ZXIgcHJvcGVydGllcworICAgKgorICAgKiBAYWJzdHJhY3Q6CisgICAqICAgQ29udHJvbGxpbmcgZHJpdmVyIG1vZHVsZXMuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBEcml2ZXIgbW9kdWxlcyBjYW4gYmUgY29udHJvbGxlZCBieSBzZXR0aW5nIGFuZCB1bnNldHRpbmcgcHJvcGVydGllcywKKyAgICogICB1c2luZyB0aGUgZnVuY3Rpb25zIEBGVF9Qcm9wZXJ0eV9TZXQgYW5kIEBGVF9Qcm9wZXJ0eV9HZXQuICBUaGlzCisgICAqICAgc2VjdGlvbiBkb2N1bWVudHMgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzLCB0b2dldGhlciB3aXRoIGF1eGlsaWFyeQorICAgKiAgIG1hY3JvcyBhbmQgc3RydWN0dXJlcy4KKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfSElOVElOR19YWFgKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbGlzdCBvZiBjb25zdGFudHMgdXNlZCBmb3IgdGhlIEBoaW50aW5nLWVuZ2luZSBwcm9wZXJ0eSB0bworICAgKiAgIHNlbGVjdCB0aGUgaGludGluZyBlbmdpbmUgZm9yIENGRiwgVHlwZX4xLCBhbmQgQ0lEIGZvbnRzLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0hJTlRJTkdfRlJFRVRZUEUgOjoKKyAgICogICAgIFVzZSB0aGUgb2xkIEZyZWVUeXBlIGhpbnRpbmcgZW5naW5lLgorICAgKgorICAgKiAgIEZUX0hJTlRJTkdfQURPQkUgOjoKKyAgICogICAgIFVzZSB0aGUgaGludGluZyBlbmdpbmUgY29udHJpYnV0ZWQgYnkgQWRvYmUuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjkKKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0hJTlRJTkdfRlJFRVRZUEUgIDAKKyNkZWZpbmUgRlRfSElOVElOR19BRE9CRSAgICAgMQorCisgIC8qIHRoZXNlIGNvbnN0YW50cyAoaW50cm9kdWNlZCBpbiAyLjQuMTIpIGFyZSBkZXByZWNhdGVkICovCisjZGVmaW5lIEZUX0NGRl9ISU5USU5HX0ZSRUVUWVBFICBGVF9ISU5USU5HX0ZSRUVUWVBFCisjZGVmaW5lIEZUX0NGRl9ISU5USU5HX0FET0JFICAgICBGVF9ISU5USU5HX0FET0JFCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHByb3BlcnR5OgorICAgKiAgIGhpbnRpbmctZW5naW5lCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGFua3MgdG8gQWRvYmUsIHdoaWNoIGNvbnRyaWJ1dGVkIGEgbmV3IGhpbnRpbmcgKGFuZCBwYXJzaW5nKQorICAgKiAgIGVuZ2luZSwgYW4gYXBwbGljYXRpb24gY2FuIHNlbGVjdCBiZXR3ZWVuIGBmcmVldHlwZScgYW5kIGBhZG9iZScgaWYKKyAgICogICBjb21waWxlZCB3aXRoIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUuICBJZiB0aGlzIGNvbmZpZ3VyYXRpb24KKyAgICogICBtYWNybyBpc24ndCBkZWZpbmVkLCBgaGludGluZy1lbmdpbmUnIGRvZXMgbm90aGluZy4KKyAgICoKKyAgICogICBUaGUgc2FtZSBob2xkcyBmb3IgdGhlIFR5cGV+MSBhbmQgQ0lEIG1vZHVsZXMgaWYgY29tcGlsZWQgd2l0aAorICAgKiAgIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORS4KKyAgICoKKyAgICogICBGb3IgdGhlIGBjZmYnIG1vZHVsZSwgdGhlIGRlZmF1bHQgZW5naW5lIGlzIGBmcmVldHlwZScgaWYKKyAgICogICBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FIGlzIGRlZmluZWQsIGFuZCBgYWRvYmUnIG90aGVyd2lzZS4KKyAgICoKKyAgICogICBGb3IgYm90aCB0aGUgYHR5cGUxJyBhbmQgYHQxY2lkJyBtb2R1bGVzLCB0aGUgZGVmYXVsdCBlbmdpbmUgaXMKKyAgICogICBgZnJlZXR5cGUnIGlmIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSBpcyBkZWZpbmVkLCBhbmQgYGFkb2JlJworICAgKiAgIG90aGVyd2lzZS4KKyAgICoKKyAgICogICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHNlbGVjdCBBZG9iZSdzIGhpbnRpbmcKKyAgICogICBlbmdpbmUgZm9yIHRoZSBgY2ZmJyBtb2R1bGUgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX1VJbnQgICAgIGhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfQURPQkU7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAiY2ZmIiwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpbnRpbmctZW5naW5lIiwgJmhpbnRpbmdfZW5naW5lICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlICh1c2luZyB2YWx1ZXMgYGFkb2JlJyBvciBgZnJlZXR5cGUnKS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNC4xMiAoZm9yIGBjZmYnIG1vZHVsZSkKKyAgICoKKyAgICogICAyLjkgKGZvciBgdHlwZTEnIGFuZCBgdDFjaWQnIG1vZHVsZXMpCisgICAqCisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICBuby1zdGVtLWRhcmtlbmluZworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQWxsIGdseXBocyB0aGF0IHBhc3MgdGhyb3VnaCB0aGUgYXV0by1oaW50ZXIgd2lsbCBiZSBlbWJvbGRlbmVkCisgICAqICAgdW5sZXNzIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIFRSVUUuICBUaGUgc2FtZSBpcyB0cnVlIGZvciB0aGUgQ0ZGLAorICAgKiAgIFR5cGV+MSwgYW5kIENJRCBmb250IG1vZHVsZXMgaWYgdGhlIGBBZG9iZScgZW5naW5lIGlzIHNlbGVjdGVkICh3aGljaAorICAgKiAgIGlzIHRoZSBkZWZhdWx0KS4KKyAgICoKKyAgICogICBTdGVtIGRhcmtlbmluZyBlbWJvbGRlbnMgZ2x5cGhzIGF0IHNtYWxsZXIgc2l6ZXMgdG8gbWFrZSB0aGVtIG1vcmUKKyAgICogICByZWFkYWJsZSBvbiBjb21tb24gbG93LURQSSBzY3JlZW5zIHdoZW4gdXNpbmcgbGluZWFyIGFscGhhIGJsZW5kaW5nCisgICAqICAgYW5kIGdhbW1hIGNvcnJlY3Rpb24sIHNlZSBARlRfUmVuZGVyX0dseXBoLiAgV2hlbiBub3QgdXNpbmcgbGluZWFyCisgICAqICAgYWxwaGEgYmxlbmRpbmcgYW5kIGdhbW1hIGNvcnJlY3Rpb24sIGdseXBocyB3aWxsIGFwcGVhciBoZWF2eSBhbmQKKyAgICogICBmdXp6eSEKKyAgICoKKyAgICogICBHYW1tYSBjb3JyZWN0aW9uIGVzc2VudGlhbGx5IGxpZ2h0ZW5zIGZvbnRzIHNpbmNlIHNoYWRlcyBvZiBncmV5IGFyZQorICAgKiAgIHNoaWZ0ZWQgdG8gaGlnaGVyIHBpeGVsIHZhbHVlcyAoPX5oaWdoZXIgYnJpZ2h0bmVzcykgdG8gbWF0Y2ggdGhlCisgICAqICAgb3JpZ2luYWwgaW50ZW50aW9uIHRvIHRoZSByZWFsaXR5IG9mIG91ciBzY3JlZW5zLiAgVGhlIHNpZGUtZWZmZWN0IGlzCisgICAqICAgdGhhdCBnbHlwaHMgYHRoaW4gb3V0Jy4gIE1hYyBPU35YIGFuZCBBZG9iZSdzIHByb3ByaWV0YXJ5IGZvbnQKKyAgICogICByZW5kZXJpbmcgbGlicmFyeSBpbXBsZW1lbnQgYSBjb3VudGVyLW1lYXN1cmU6IHN0ZW0gZGFya2VuaW5nIGF0CisgICAqICAgc21hbGxlciBzaXplcyB3aGVyZSBzaGFkZXMgb2YgZ3JheSBkb21pbmF0ZS4gIEJ5IGVtYm9sZGVuaW5nIGEgZ2x5cGgKKyAgICogICBzbGlnaHRseSBpbiByZWxhdGlvbiB0byBpdHMgcGl4ZWwgc2l6ZSwgaW5kaXZpZHVhbCBwaXhlbHMgZ2V0IGhpZ2hlcgorICAgKiAgIGNvdmVyYWdlIG9mIGZpbGxlZC1pbiBvdXRsaW5lcyBhbmQgYXJlIHRoZXJlZm9yZSBgYmxhY2tlcicuICBUaGlzCisgICAqICAgY291bnRlcmFjdHMgdGhlIGB0aGlubmluZyBvdXQnIG9mIGdseXBocywgbWFraW5nIHRleHQgcmVtYWluIHJlYWRhYmxlCisgICAqICAgYXQgc21hbGxlciBzaXplcy4KKyAgICoKKyAgICogICBCeSBkZWZhdWx0LCB0aGUgQWRvYmUgZW5naW5lcyBmb3IgQ0ZGLCBUeXBlfjEsIGFuZCBDSUQgZm9udHMgZGFya2VuCisgICAqICAgc3RlbXMgYXQgc21hbGxlciBzaXplcywgcmVnYXJkbGVzcyBvZiBoaW50aW5nLCB0byBlbmhhbmNlIGNvbnRyYXN0LiAKKyAgICogICBTZXR0aW5nIHRoaXMgcHJvcGVydHksIHN0ZW0gZGFya2VuaW5nIGdldHMgc3dpdGNoZWQgb2ZmLgorICAgKgorICAgKiAgIEZvciB0aGUgYXV0by1oaW50ZXIsIHN0ZW0tZGFya2VuaW5nIGlzIGV4cGVyaW1lbnRhbCBjdXJyZW50bHkgYW5kCisgICAqICAgdGh1cyBzd2l0Y2hlZCBvZmYgYnkgZGVmYXVsdCAodGhpcyBpcywgYG5vLXN0ZW0tZGFya2VuaW5nJyBpcyBzZXQgdG8KKyAgICogICBUUlVFIGJ5IGRlZmF1bHQpLiAgVG90YWwgY29uc2lzdGVuY3kgd2l0aCB0aGUgQ0ZGIGRyaXZlciBpcyBub3QKKyAgICogICBhY2hpZXZlZCByaWdodCBub3cgYmVjYXVzZSB0aGUgZW1ib2xkZW5pbmcgbWV0aG9kIGRpZmZlcnMgYW5kIGdseXBocworICAgKiAgIG11c3QgYmUgc2NhbGVkIGRvd24gb24gdGhlIFktYXhpcyB0byBrZWVwIG91dGxpbmUgcG9pbnRzIGluc2lkZSB0aGVpcgorICAgKiAgIHByZWNvbXB1dGVkIGJsdWUgem9uZXMuICBUaGUgc21hbGxlciB0aGUgc2l6ZSAoZXNwZWNpYWxseSA5cHBlbSBhbmQKKyAgICogICBkb3duKSwgdGhlIGhpZ2hlciB0aGUgbG9zcyBvZiBlbWJvbGRlbmluZyB2ZXJzdXMgdGhlIENGRiBkcml2ZXIuCisgICAqCisgICAqICAgTm90ZSB0aGF0IHN0ZW0gZGFya2VuaW5nIGlzIG5ldmVyIGFwcGxpZWQgaWYgQEZUX0xPQURfTk9fU0NBTEUgaXMKKyAgICogICBzZXQuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX0Jvb2wgICAgIG5vX3N0ZW1fZGFya2VuaW5nID0gVFJVRTsKKyAgICoKKyAgICoKKyAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7CisgICAqCisgICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJjZmYiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8tc3RlbS1kYXJrZW5pbmciLCAmbm9fc3RlbV9kYXJrZW5pbmcgKTsKKyAgICogICB9CisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCisgICAqCisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50CisgICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KKyAgICogICBJdCBjYW4gYWxzbyBiZSBzZXQgcGVyIGZhY2UgdXNpbmcgQEZUX0ZhY2VfUHJvcGVydGllcyB3aXRoCisgICAqICAgQEZUX1BBUkFNX1RBR19TVEVNX0RBUktFTklORy4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNC4xMiAoZm9yIGBjZmYnIG1vZHVsZSkKKyAgICoKKyAgICogICAyLjYuMiAoZm9yIGBhdXRvZml0dGVyJyBtb2R1bGUpCisgICAqCisgICAqICAgMi45IChmb3IgYHR5cGUxJyBhbmQgYHQxY2lkJyBtb2R1bGVzKQorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgZGFya2VuaW5nLXBhcmFtZXRlcnMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEJ5IGRlZmF1bHQsIHRoZSBBZG9iZSBoaW50aW5nIGVuZ2luZSwgYXMgdXNlZCBieSB0aGUgQ0ZGLCBUeXBlfjEsIGFuZAorICAgKiAgIENJRCBmb250IGRyaXZlcnMsIGRhcmtlbnMgc3RlbXMgYXMgZm9sbG93cyAoaWYgdGhlCisgICAqICAgYG5vLXN0ZW0tZGFya2VuaW5nJyBwcm9wZXJ0eSBpc24ndCBzZXQpOgorICAgKgorICAgKiAgIHsKKyAgICogICAgIHN0ZW0gd2lkdGggPD0gMC41cHg6ICAgZGFya2VuaW5nIGFtb3VudCA9IDAuNHB4CisgICAqICAgICBzdGVtIHdpZHRoICA9IDFweDogICAgIGRhcmtlbmluZyBhbW91bnQgPSAwLjI3NXB4CisgICAqICAgICBzdGVtIHdpZHRoICA9IDEuNjY3cHg6IGRhcmtlbmluZyBhbW91bnQgPSAwLjI3NXB4CisgICAqICAgICBzdGVtIHdpZHRoID49IDIuMzMzcHg6IGRhcmtlbmluZyBhbW91bnQgPSAwcHgKKyAgICogICB9CisgICAqCisgICAqICAgYW5kIHBpZWNld2lzZSBsaW5lYXIgaW4tYmV0d2Vlbi4gIEF0IGNvbmZpZ3VyYXRpb24gdGltZSwgdGhlc2UgZm91cgorICAgKiAgIGNvbnRyb2wgcG9pbnRzIGNhbiBiZSBzZXQgd2l0aCB0aGUgbWFjcm8KKyAgICogICBgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUlMnOyB0aGUgQ0ZGLCBUeXBlfjEsIGFuZCBDSUQKKyAgICogICBkcml2ZXJzIHNoYXJlIHRoZXNlIHZhbHVlcy4gIEF0IHJ1bnRpbWUsIHRoZSBjb250cm9sIHBvaW50cyBjYW4gYmUKKyAgICogICBjaGFuZ2VkIHVzaW5nIHRoZSBgZGFya2VuaW5nLXBhcmFtZXRlcnMnIHByb3BlcnR5LCBhcyB0aGUgZm9sbG93aW5nCisgICAqICAgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgZm9yIHRoZSBUeXBlfjEgZHJpdmVyLgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAqICAgICBGVF9JbnQgICAgICBkYXJrZW5fcGFyYW1zWzhdID0geyAgNTAwLCAzMDAsICAgLy8geDEsIHkxCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwLCAyMDAsICAgLy8geDIsIHkyCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTAwLCAxMDAsICAgLy8geDMsIHkzCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAgIDAgfTsgLy8geDQsIHk0CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LCAidHlwZTEiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFya2VuaW5nLXBhcmFtZXRlcnMiLCBkYXJrZW5fcGFyYW1zICk7CisgICAqICAgfQorICAgKgorICAgKiAgIFRoZSB4fnZhbHVlcyBnaXZlIHRoZSBzdGVtIHdpZHRoLCBhbmQgdGhlIHl+dmFsdWVzIHRoZSBkYXJrZW5pbmcKKyAgICogICBhbW91bnQuICBUaGUgdW5pdCBpcyAxMDAwdGggb2YgcGl4ZWxzLiAgQWxsIGNvb3JkaW5hdGUgdmFsdWVzIG11c3QgYmUKKyAgICogICBwb3NpdGl2ZTsgdGhlIHh+dmFsdWVzIG11c3QgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nOyB0aGUKKyAgICogICB5fnZhbHVlcyBtdXN0IGJlIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBhbmQgc21hbGxlciB0aGFuIG9yCisgICAqICAgZXF1YWwgdG8gNTAwIChjb3JyZXNwb25kaW5nIHRvIGhhbGYgYSBwaXhlbCk7IHRoZSBzbG9wZSBvZiBlYWNoCisgICAqICAgbGluZWFyIHBpZWNlIG11c3QgYmUgc2hhbGxvd2VyIHRoYW4gLTEgKGUuZy4sIC0uNCkuCisgICAqCisgICAqICAgVGhlIGF1dG8taGludGVyIHByb3ZpZGVzIHRoaXMgcHJvcGVydHksIHRvbywgYXMgYW4gZXhwZXJpbWVudGFsCisgICAqICAgZmVhdHVyZS4gIFNlZSBAbm8tc3RlbS1kYXJrZW5pbmcgZm9yIG1vcmUuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCisgICAqCisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50CisgICAqICAgdmFyaWFibGUsIHVzaW5nIGVpZ2h0IGNvbW1hLXNlcGFyYXRlZCBpbnRlZ2VycyB3aXRob3V0IHNwYWNlcy4gIEhlcmUKKyAgICogICB0aGUgYWJvdmUgZXhhbXBsZSwgdXNpbmcgYFwnIHRvIGJyZWFrIHRoZSBsaW5lIGZvciByZWFkYWJpbGl0eS4KKyAgICoKKyAgICogICB7CisgICAqICAgICBGUkVFVFlQRV9QUk9QRVJUSUVTPVwKKyAgICogICAgIHR5cGUxOmRhcmtlbmluZy1wYXJhbWV0ZXJzPTUwMCwzMDAsMTAwMCwyMDAsMTUwMCwxMDAsMjAwMCwwCisgICAqICAgfQorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi41LjEgKGZvciBgY2ZmJyBtb2R1bGUpCisgICAqCisgICAqICAgMi42LjIgKGZvciBgYXV0b2ZpdHRlcicgbW9kdWxlKQorICAgKgorICAgKiAgIDIuOSAoZm9yIGB0eXBlMScgYW5kIGB0MWNpZCcgbW9kdWxlcykKKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHByb3BlcnR5OgorICAgKiAgIHJhbmRvbS1zZWVkCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBCeSBkZWZhdWx0LCB0aGUgc2VlZCB2YWx1ZSBmb3IgdGhlIENGRiBgcmFuZG9tJyBvcGVyYXRvciBhbmQgdGhlCisgICAqICAgc2ltaWxhciBgMCAyOCBjYWxsb3RoZXJzdWJyIHBvcCcgY29tbWFuZCBmb3IgdGhlIFR5cGV+MSBhbmQgQ0lECisgICAqICAgZHJpdmVycyBpcyBzZXQgdG8gYSByYW5kb20gdmFsdWUuICBIb3dldmVyLCBtYWlubHkgZm9yIGRlYnVnZ2luZworICAgKiAgIHB1cnBvc2VzLCBpdCBpcyBvZnRlbiBuZWNlc3NhcnkgdG8gdXNlIGEga25vd24gdmFsdWUgYXMgYSBzZWVkIHNvCisgICAqICAgdGhhdCB0aGUgcHNldWRvLXJhbmRvbSBudW1iZXIgc2VxdWVuY2VzIGdlbmVyYXRlZCBieSBgcmFuZG9tJyBhcmUKKyAgICogICByZXBlYXRhYmxlLgorICAgKgorICAgKiAgIFRoZSBgcmFuZG9tLXNlZWQnIHByb3BlcnR5IGRvZXMgdGhhdC4gIEl0cyBhcmd1bWVudCBpcyBhIHNpZ25lZCAzMmJpdAorICAgKiAgIGludGVnZXI7IGlmIHRoZSB2YWx1ZSBpcyB6ZXJvIG9yIG5lZ2F0aXZlLCB0aGUgc2VlZCBnaXZlbiBieSB0aGUKKyAgICogICBgaW50aXRpYWxSYW5kb21TZWVkJyBwcml2YXRlIERJQ1Qgb3BlcmF0b3IgaW4gYSBDRkYgZmlsZSBnZXRzIHVzZWQKKyAgICogICAob3IgYSBkZWZhdWx0IHZhbHVlIGlmIHRoZXJlIGlzIG5vIHN1Y2ggb3BlcmF0b3IpLiAgSWYgdGhlIHZhbHVlIGlzCisgICAqICAgcG9zaXRpdmUsIHVzZSBpdCBpbnN0ZWFkIG9mIGBpbml0aWFsUmFuZG9tU2VlZCcsIHdoaWNoIGlzCisgICAqICAgY29uc2VxdWVudGx5IGlnbm9yZWQuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlLiAgSXQgY2FuIGFsc28gYmUgc2V0IHBlciBmYWNlIHVzaW5nIEBGVF9GYWNlX1Byb3BlcnRpZXMgd2l0aAorICAgKiAgIEBGVF9QQVJBTV9UQUdfUkFORE9NX1NFRUQuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjggKGZvciBgY2ZmJyBtb2R1bGUpCisgICAqCisgICAqICAgMi45IChmb3IgYHR5cGUxJyBhbmQgYHQxY2lkJyBtb2R1bGVzKQorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgbm8tbG9uZy1mYW1pbHktbmFtZXMKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIElmIFBDRl9DT05GSUdfT1BUSU9OX0xPTkdfRkFNSUxZX05BTUVTIGlzIGFjdGl2ZSB3aGlsZSBjb21waWxpbmcKKyAgICogICBGcmVlVHlwZSwgdGhlIFBDRiBkcml2ZXIgY29uc3RydWN0cyBsb25nIGZhbWlseSBuYW1lcy4KKyAgICoKKyAgICogICBUaGVyZSBhcmUgbWFueSBQQ0YgZm9udHMganVzdCBjYWxsZWQgYEZpeGVkJyB3aGljaCBsb29rIGNvbXBsZXRlbHkKKyAgICogICBkaWZmZXJlbnQsIGFuZCB3aGljaCBoYXZlIG5vdGhpbmcgdG8gZG8gd2l0aCBlYWNoIG90aGVyLiAgV2hlbgorICAgKiAgIHNlbGVjdGluZyBgRml4ZWQnIGluIEtERSBvciBHbm9tZSBvbmUgZ2V0cyByZXN1bHRzIHRoYXQgYXBwZWFyIHJhdGhlcgorICAgKiAgIHJhbmRvbSwgdGhlIHN0eWxlIGNoYW5nZXMgb2Z0ZW4gaWYgb25lIGNoYW5nZXMgdGhlIHNpemUgYW5kIG9uZQorICAgKiAgIGNhbm5vdCBzZWxlY3Qgc29tZSBmb250cyBhdCBhbGwuICBUaGUgaW1wcm92ZSB0aGlzIHNpdHVhdGlvbiwgdGhlIFBDRgorICAgKiAgIG1vZHVsZSBwcmVwZW5kcyB0aGUgZm91bmRyeSBuYW1lIChwbHVzIGEgc3BhY2UpIHRvIHRoZSBmYW1pbHkgbmFtZS4KKyAgICogICBJdCBhbHNvIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGFyZSBgd2lkZScgY2hhcmFjdGVyczsgYWxsIHB1dCB0b2dldGhlciwKKyAgICogICBmYW1pbHkgbmFtZXMgbGlrZSBgU29ueSBGaXhlZCcgb3IgYE1pc2MgRml4ZWQgV2lkZScgYXJlIGNvbnN0cnVjdGVkLgorICAgKgorICAgKiAgIElmIGBuby1sb25nLWZhbWlseS1uYW1lcycgaXMgc2V0LCB0aGlzIGZlYXR1cmUgZ2V0cyBzd2l0Y2hlZCBvZmYuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX0Jvb2wgICAgIG5vX2xvbmdfZmFtaWx5X25hbWVzID0gVFJVRTsKKyAgICoKKyAgICoKKyAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7CisgICAqCisgICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJwY2YiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8tbG9uZy1mYW1pbHktbmFtZXMiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9fbG9uZ19mYW1pbHlfbmFtZXMgKTsKKyAgICogICB9CisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCisgICAqCisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50CisgICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOAorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGludGVycHJldGVyLXZlcnNpb24gcHJvcGVydHkgdG8KKyAgICogICBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBUcnVldHlwZSBmb250cy4KKyAgICoKKyAgICogICBUaGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgY29uc3RhbnQgbmFtZXMgcmVwcmVzZW50cyB0aGUgdmVyc2lvbgorICAgKiAgIG51bWJlciBhcyByZXR1cm5lZCBieSB0aGUgYEdFVElORk8nIGJ5dGVjb2RlIGluc3RydWN0aW9uLgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgOjoKKyAgICogICAgIFZlcnNpb25+MzUgY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuNyBhcyB1c2VkIGUuZy4gaW4KKyAgICogICAgIFdpbmRvd3N+OTg7IG9ubHkgZ3JheXNjYWxlIGFuZCBCL1cgcmFzdGVyaXppbmcgaXMgc3VwcG9ydGVkLgorICAgKgorICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggOjoKKyAgICogICAgIFZlcnNpb25+MzggY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuOTsgaXQgaXMgcm91Z2hseQorICAgKiAgICAgZXF1aXZhbGVudCB0byB0aGUgaGludGluZyBwcm92aWRlZCBieSBEaXJlY3RXcml0ZSBDbGVhclR5cGUgKGFzIGNhbgorICAgKiAgICAgYmUgZm91bmQsIGZvciBleGFtcGxlLCBpbiB0aGUgSW50ZXJuZXQgRXhwbG9yZXJ+OSBydW5uaW5nIG9uCisgICAqICAgICBXaW5kb3dzfjcpLiAgSXQgaXMgdXNlZCBpbiBGcmVlVHlwZSB0byBzZWxlY3QgdGhlIGBJbmZpbmFsaXR5JworICAgKiAgICAgc3VicGl4ZWwgaGludGluZyBjb2RlLiAgVGhlIGNvZGUgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKKyAgICogICAgIHZlcnNpb24uCisgICAqCisgICAqICAgVFRfSU5URVJQUkVURVJfVkVSU0lPTl80MCA6OgorICAgKiAgICAgVmVyc2lvbn40MCBjb3JyZXNwb25kcyB0byBNUyByYXN0ZXJpemVyIHYuMi4xOyBpdCBpcyByb3VnaGx5CisgICAqICAgICBlcXVpdmFsZW50IHRvIHRoZSBoaW50aW5nIHByb3ZpZGVkIGJ5IERpcmVjdFdyaXRlIENsZWFyVHlwZSAoYXMgY2FuCisgICAqICAgICBiZSBmb3VuZCwgZm9yIGV4YW1wbGUsIGluIE1pY3Jvc29mdCdzIEVkZ2UgQnJvd3NlciBvbiBXaW5kb3dzfjEwKS4KKyAgICogICAgIEl0IGlzIHVzZWQgaW4gRnJlZVR5cGUgdG8gc2VsZWN0IHRoZSBgbWluaW1hbCcgc3VicGl4ZWwgaGludGluZworICAgKiAgICAgY29kZSwgYSBzdHJpcHBlZC1kb3duIGFuZCBoaWdoZXIgcGVyZm9ybWFuY2UgdmVyc2lvbiBvZiB0aGUKKyAgICogICAgIGBJbmZpbmFsaXR5JyBjb2RlLgorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyCisgICAqICAgYW5kIHRodXMgaG93IG91dGxpbmVzIGdldCBoaW50ZWQuICBJdCBkb2VzICpub3QqIGNvbnRyb2wgaG93IGdseXBoCisgICAqICAgZ2V0IHJhc3Rlcml6ZWQhICBJbiBwYXJ0aWN1bGFyLCBpdCBkb2VzIG5vdCBjb250cm9sIHN1YnBpeGVsIGNvbG9yCisgICAqICAgZmlsdGVyaW5nLgorICAgKgorICAgKiAgIElmIEZyZWVUeXBlIGhhcyBub3QgYmVlbiBjb21waWxlZCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbgorICAgKiAgIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORywgc2VsZWN0aW5nIHZlcnNpb25+Mzggb3J+NDAgY2F1c2VzCisgICAqICAgYW4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGVycm9yLgorICAgKgorICAgKiAgIERlcGVuZGluZyBvbiB0aGUgZ3JhcGhpY3MgZnJhbWV3b3JrLCBNaWNyb3NvZnQgdXNlcyBkaWZmZXJlbnQKKyAgICogICBieXRlY29kZSBhbmQgcmVuZGVyaW5nIGVuZ2luZXMuICBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgdmVyc2lvbgorICAgKiAgIG51bWJlcnMgcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHRoZSBgR0VUSU5GTycgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gYXJlCisgICAqICAgbW9yZSBjb252b2x1dGVkIHRoYW4gZGVzaXJlZC4KKyAgICoKKyAgICogICBIZXJlIGFyZSB0d28gdGFibGVzIHRoYXQgdHJ5IHRvIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgcG9zc2libGUKKyAgICogICB2YWx1ZXMgZm9yIHRoZSBNUyByYXN0ZXJpemVyIGVuZ2luZSwgdG9nZXRoZXIgd2l0aCB0aGUgYWRkaXRpb25hbAorICAgKiAgIGZlYXR1cmVzIGludHJvZHVjZWQgYnkgaXQuCisgICAqCisgICAqICAgeworICAgKiAgICAgR0VUSU5GTyBmcmFtZXdvcmsgICAgICAgICAgICAgICB2ZXJzaW9uIGZlYXR1cmUKKyAgICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICogICAgICAgICAzICAgR0RJIChXaW4gMy4xKSwgICAgICAgICAgICB2MS4wICAxNi1iaXQsIGZpcnN0IHZlcnNpb24KKyAgICogICAgICAgICAgICAgVHJ1ZUltYWdlCisgICAqICAgICAgICAzMyAgIEdESSAoV2luIE5UIDMuMSksICAgICAgICAgdjEuNSAgMzItYml0CisgICAqICAgICAgICAgICAgIEhQIExhc2VyamV0CisgICAqICAgICAgICAzNCAgIEdESSAoV2luIDk1KSAgICAgICAgICAgICAgdjEuNiAgZm9udCBzbW9vdGhpbmcsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNDQU5UWVBFIG9wY29kZQorICAgKiAgICAgICAgMzUgICBHREkgKFdpbiA5OC8yMDAwKSAgICAgICAgIHYxLjcgIChVTilTQ0FMRURfQ09NUE9ORU5UX09GRlNFVAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyBpbiBjb21wb3NpdGUgZ2x5cGhzCisgICAqICAgICAgICAzNiAgIE1HREkgKFdpbiBDRSAyKSAgICAgICAgICAgdjEuNisgY2xhc3NpYyBDbGVhclR5cGUKKyAgICogICAgICAgIDM3ICAgR0RJIChYUCBhbmQgbGF0ZXIpLCAgICAgICB2MS44ICBDbGVhclR5cGUKKyAgICogICAgICAgICAgICAgR0RJKyBvbGQgKGJlZm9yZSBWaXN0YSkKKyAgICogICAgICAgIDM4ICAgR0RJKyBvbGQgKFZpc3RhLCBXaW4gNyksICB2MS45ICBzdWJwaXhlbCBDbGVhclR5cGUsCisgICAqICAgICAgICAgICAgIFdQRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWS1kaXJlY3Rpb24gQ2xlYXJUeXBlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgZXJyb3IgY2hlY2tpbmcKKyAgICogICAgICAgIDM5ICAgRFdyaXRlIChiZWZvcmUgV2luIDgpICAgICB2Mi4wICBzdWJwaXhlbCBDbGVhclR5cGUgZmxhZ3MKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEdFVElORk8gb3Bjb2RlLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZyBmaXhlcworICAgKiAgICAgICAgNDAgICBHREkrIChhZnRlciBXaW4gNyksICAgICAgIHYyLjEgIFktZGlyZWN0aW9uIENsZWFyVHlwZSBmbGFnCisgICAqICAgICAgICAgICAgIERXcml0ZSAoV2luIDgpICAgICAgICAgICAgICAgICAgICBpbiBHRVRJTkZPIG9wY29kZSwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmF5IENsZWFyVHlwZQorICAgKiAgIH0KKyAgICoKKyAgICogICBUaGUgYHZlcnNpb24nIGZpZWxkIGdpdmVzIGEgcm91Z2ggb3JpZW50YXRpb24gb25seSwgc2luY2Ugc29tZQorICAgKiAgIGFwcGxpY2F0aW9ucyBwcm92aWRlZCBjZXJ0YWluIGZlYXR1cmVzIG11Y2ggZWFybGllciAoYXMgYW4gZXhhbXBsZSwKKyAgICogICBNaWNyb3NvZnQgUmVhZGVyIHVzZWQgc3VicGl4ZWwgYW5kIFktZGlyZWN0aW9uIENsZWFyVHlwZSBhbHJlYWR5IGluCisgICAqICAgV2luZG93cyAyMDAwKS4gIFNpbWlsYXJseSwgdXBkYXRlcyB0byBhIGdpdmVuIGZyYW1ld29yayBtaWdodCBpbmNsdWRlCisgICAqICAgaW1wcm92ZWQgaGludGluZyBzdXBwb3J0LgorICAgKgorICAgKiAgIHsKKyAgICogICAgICB2ZXJzaW9uICAgc2FtcGxpbmcgICAgICAgICAgcmVuZGVyaW5nICAgICAgICBjb21tZW50CisgICAqICAgICAgICAgICAgICAgeCAgICAgICAgeSAgICAgICB4ICAgICAgICAgICB5CisgICAqICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgKiAgICAgICB2MS4wICAgbm9ybWFsICBub3JtYWwgIEIvVyAgICAgICAgICAgQi9XICAgIGJpLWxldmVsCisgICAqICAgICAgIHYxLjYgICBoaWdoICAgIGhpZ2ggICAgZ3JheSAgICAgICAgICBncmF5ICAgZ3JheXNjYWxlCisgICAqICAgICAgIHYxLjggICBoaWdoICAgIG5vcm1hbCAgY29sb3ItZmlsdGVyICBCL1cgICAgKEdESSkgQ2xlYXJUeXBlCisgICAqICAgICAgIHYxLjkgICBoaWdoICAgIGhpZ2ggICAgY29sb3ItZmlsdGVyICBncmF5ICAgQ29sb3IgQ2xlYXJUeXBlCisgICAqICAgICAgIHYyLjEgICBoaWdoICAgIG5vcm1hbCAgZ3JheSAgICAgICAgICBCL1cgICAgR3JheSBDbGVhclR5cGUKKyAgICogICAgICAgdjIuMSAgIGhpZ2ggICAgaGlnaCAgICBncmF5ICAgICAgICAgIGdyYXkgICBHcmF5IENsZWFyVHlwZQorICAgKiAgIH0KKyAgICoKKyAgICogICBDb2xvciBhbmQgR3JheSBDbGVhclR5cGUgYXJlIHRoZSB0d28gYXZhaWxhYmxlIHZhcmlhbnRzIG9mCisgICAqICAgYFktZGlyZWN0aW9uIENsZWFyVHlwZScsIG1lYW5pbmcgZ3JheXNjYWxlIHJhc3Rlcml6YXRpb24gYWxvbmcgdGhlCisgICAqICAgWS1kaXJlY3Rpb247IHRoZSBuYW1lIHVzZWQgaW4gdGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gZm9yIHRoaXMKKyAgICogICBmZWF0dXJlIGlzIGBzeW1tZXRyaWMgc21vb3RoaW5nJy4gIGBDbGFzc2ljIENsZWFyVHlwZScgaXMgdGhlCisgICAqICAgb3JpZ2luYWwgYWxnb3JpdGhtIHVzZWQgYmVmb3JlIGludHJvZHVjaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBpbgorICAgKiAgIFdpbn5YUC4gIEFub3RoZXIgbmFtZSBmb3IgdjEuNidzIGdyYXlzY2FsZSByZW5kZXJpbmcgaXMgYGZvbnQKKyAgICogICBzbW9vdGhpbmcnLCBhbmQgYENvbG9yIENsZWFyVHlwZScgaXMgc29tZXRpbWVzIGFsc28gY2FsbGVkIGBEV3JpdGUKKyAgICogICBDbGVhclR5cGUnLiAgVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRvZGF5J3MgQ29sb3IgQ2xlYXJUeXBlIGFuZCB0aGUKKyAgICogICBlYXJsaWVyIENsZWFyVHlwZSB2YXJpYW50IHdpdGggQi9XIHJlbmRlcmluZyBhbG9uZyB0aGUgdmVydGljYWwgYXhpcywKKyAgICogICB0aGUgbGF0dGVyIGlzIHNvbWV0aW1lcyBjYWxsZWQgYEdESSBDbGVhclR5cGUnLgorICAgKgorICAgKiAgIGBOb3JtYWwnIGFuZCBgaGlnaCcgc2FtcGxpbmcgZGVzY3JpYmUgdGhlICh2aXJ0dWFsKSByZXNvbHV0aW9uIHRvCisgICAqICAgYWNjZXNzIHRoZSByYXN0ZXJpemVkIG91dGxpbmUgYWZ0ZXIgdGhlIGhpbnRpbmcgcHJvY2Vzcy4gIGBOb3JtYWwnCisgICAqICAgbWVhbnMgMSBzYW1wbGUgcGVyIGdyaWQgbGluZSAoaS5lLiwgQi9XKS4gIEluIHRoZSBjdXJyZW50IE1pY3Jvc29mdAorICAgKiAgIGltcGxlbWVudGF0aW9uLCBgaGlnaCcgbWVhbnMgYW4gZXh0cmEgdmlydHVhbCByZXNvbHV0aW9uIG9mIDE2eDE2IChvcgorICAgKiAgIDE2eDEpIGdyaWQgbGluZXMgcGVyIHBpeGVsIGZvciBieXRlY29kZSBpbnN0cnVjdGlvbnMgbGlrZSBgTUlSUCcuCisgICAqICAgQWZ0ZXIgaGludGluZywgdGhlc2UgMTYgZ3JpZCBsaW5lcyBhcmUgbWFwcGVkIHRvIDZ4NSAob3IgNngxKSBncmlkCisgICAqICAgbGluZXMgZm9yIGNvbG9yIGZpbHRlcmluZyBpZiBDb2xvciBDbGVhclR5cGUgaXMgYWN0aXZhdGVkLgorICAgKgorICAgKiAgIE5vdGUgdGhhdCBgR3JheSBDbGVhclR5cGUnIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHYxLjYncworICAgKiAgIGdyYXlzY2FsZSByZW5kZXJpbmcuICBIb3dldmVyLCB0aGUgR0VUSU5GTyBpbnN0cnVjdGlvbiBoYW5kbGVzIGl0CisgICAqICAgZGlmZmVyZW50bHk6IHYxLjYgcmV0dXJucyBiaXR+MTIgKGhpbnRpbmcgZm9yIGdyYXlzY2FsZSksIHdoaWxlIHYyLjEKKyAgICogICByZXR1cm5zIGJpdHN+MTMgKGhpbnRpbmcgZm9yIENsZWFyVHlwZSksIDE4IChzeW1tZXRyaWNhbCBzbW9vdGhpbmcpLAorICAgKiAgIGFuZH4xOSAoR3JheSBDbGVhclR5cGUpLiAgQWxzbywgdGhpcyBtb2RlIHJlc3BlY3RzIGJpdHMgMiBhbmR+MyBmb3IKKyAgICogICB0aGUgdmVyc2lvbn4xIGdhc3AgdGFibGUgZXhjbHVzaXZlbHkgKGxpa2UgQ29sb3IgQ2xlYXJUeXBlKSwgd2hpbGUKKyAgICogICB2MS42IG9ubHkgcmVzcGVjdHMgdGhlIHZhbHVlcyBvZiB2ZXJzaW9ufjAgKGJpdHMgMCBhbmR+MSkuCisgICAqCisgICAqICAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGZlYXR1cmVzIG9mIHRoZSBhYm92ZSBpbnRlcnByZXRlciB2ZXJzaW9ucworICAgKiAgIG1pZ2h0IG5vdCBtYXAgZXhhY3RseSB0byBGcmVlVHlwZSBmZWF0dXJlcyBvciBiZWhhdmlvciBiZWNhdXNlIGl0IGlzCisgICAqICAgYSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBsaWJyYXJ5IHdpdGggZGlmZmVyZW50IGludGVybmFscy4KKyAgICoKKyAgICovCisjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgIDM1CisjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggIDM4CisjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgIDQwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHByb3BlcnR5OgorICAgKiAgIGludGVycHJldGVyLXZlcnNpb24KKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEN1cnJlbnRseSwgdGhyZWUgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgdHdvIHJlcHJlc2VudGluZyB0aGUKKyAgICogICBieXRlY29kZSBpbnRlcnByZXRlciB3aXRoIHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCAob2xkIGBJbmZpbmFsaXR5JworICAgKiAgIGNvZGUgYW5kIG5ldyBzdHJpcHBlZC1kb3duIGFuZCBoaWdoZXIgcGVyZm9ybWFuY2UgYG1pbmltYWwnIGNvZGUpIGFuZAorICAgKiAgIG9uZSB3aXRob3V0LCByZXNwZWN0aXZlbHkuICBUaGUgZGVmYXVsdCBpcyBzdWJwaXhlbCBzdXBwb3J0IGlmCisgICAqICAgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HIGlzIGRlZmluZWQsIGFuZCBubyBzdWJwaXhlbCBzdXBwb3J0CisgICAqICAgb3RoZXJ3aXNlIChzaW5jZSBpdCBpc24ndCBhdmFpbGFibGUgdGhlbikuCisgICAqCisgICAqICAgSWYgc3VicGl4ZWwgaGludGluZyBpcyBvbiwgbWFueSBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgYmVoYXZlCisgICAqICAgZGlmZmVyZW50bHkgY29tcGFyZWQgdG8gQi9XIG9yIGdyYXlzY2FsZSByZW5kZXJpbmcgKGV4Y2VwdCBpZiBgbmF0aXZlCisgICAqICAgQ2xlYXJUeXBlJyBpcyBzZWxlY3RlZCBieSB0aGUgZm9udCkuICBNaWNyb3NvZnQncyBtYWluIGlkZWEgaXMgdG8KKyAgICogICByZW5kZXIgYXQgYSBtdWNoIGluY3JlYXNlZCBob3Jpem9udGFsIHJlc29sdXRpb24sIHRoZW4gc2FtcGxpbmcgZG93bgorICAgKiAgIHRoZSBjcmVhdGVkIG91dHB1dCB0byBzdWJwaXhlbCBwcmVjaXNpb24uICBIb3dldmVyLCBtYW55IG9sZGVyIGZvbnRzCisgICAqICAgYXJlIG5vdCBzdWl0ZWQgdG8gdGhpcyBhbmQgbXVzdCBiZSBzcGVjaWFsbHkgdGFrZW4gY2FyZSBvZiBieQorICAgKiAgIGFwcGx5aW5nIChoYXJkY29kZWQpIHR3ZWFrcyBpbiBNaWNyb3NvZnQncyBpbnRlcnByZXRlci4KKyAgICoKKyAgICogICBEZXRhaWxzIG9uIHN1YnBpeGVsIGhpbnRpbmcgYW5kIHNvbWUgb2YgdGhlIG5lY2Vzc2FyeSB0d2Vha3MgY2FuIGJlCisgICAqICAgZm91bmQgaW4gR3JlZyBIaXRjaGNvY2sncyB3aGl0ZXBhcGVyIGF0CisgICAqICAgYGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweCcuCisgICAqICAgTm90ZSB0aGF0IEZyZWVUeXBlIGN1cnJlbnRseSBkb2Vzbid0IHJlYWxseSBgc3VicGl4ZWwgaGludCcgKDZ4MSwgNngyLAorICAgKiAgIG9yIDZ4NSBzdXBlcnNhbXBsaW5nKSBsaWtlIGRpc2N1c3NlZCBpbiB0aGUgcGFwZXIuICBEZXBlbmRpbmcgb24gdGhlCisgICAqICAgY2hvc2VuIGludGVycHJldGVyLCBpdCBzaW1wbHkgaWdub3JlcyBpbnN0cnVjdGlvbnMgb24gdmVydGljYWwgc3RlbXMKKyAgICogICB0byBhcnJpdmUgYXQgdmVyeSBzaW1pbGFyIHJlc3VsdHMuCisgICAqCisgICAqICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGNvZGUgZGVtb25zdHJhdGVzIGhvdyB0byBkZWFjdGl2YXRlIHN1YnBpeGVsCisgICAqICAgaGludGluZyAob21pdHRpbmcgdGhlIGVycm9yIGhhbmRsaW5nKS4KKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICAgKiAgICAgRlRfRmFjZSAgICAgZmFjZTsKKyAgICogICAgIEZUX1VJbnQgICAgIGludGVycHJldGVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1OworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgInRydWV0eXBlIiwKKyAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVycHJldGVyLXZlcnNpb24iLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJwcmV0ZXJfdmVyc2lvbiApOworICAgKiAgIH0KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIGAzNScsIGAzOCcsIG9yIGA0MCcpLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi41CisgICAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICBnbHlwaC10by1zY3JpcHQtbWFwCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKKyAgICoKKyAgICogICBUaGUgYXV0by1oaW50ZXIgcHJvdmlkZXMgdmFyaW91cyBzY3JpcHQgbW9kdWxlcyB0byBoaW50IGdseXBocy4KKyAgICogICBFeGFtcGxlcyBvZiBzdXBwb3J0ZWQgc2NyaXB0cyBhcmUgTGF0aW4gb3IgQ0pLLiAgQmVmb3JlIGEgZ2x5cGggaXMKKyAgICogICBhdXRvLWhpbnRlZCwgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIG1hcCBvZiB0aGUgZm9udCBnZXRzIGV4YW1pbmVkLCBhbmQKKyAgICogICB0aGUgc2NyaXB0IGlzIHRoZW4gZGV0ZXJtaW5lZCBiYXNlZCBvbiBVbmljb2RlIGNoYXJhY3RlciByYW5nZXMsIHNlZQorICAgKiAgIGJlbG93LgorICAgKgorICAgKiAgIE9wZW5UeXBlIGZvbnRzLCBob3dldmVyLCBvZnRlbiBwcm92aWRlIG11Y2ggbW9yZSBnbHlwaHMgdGhhbgorICAgKiAgIGNoYXJhY3RlciBjb2RlcyAoc21hbGwgY2Fwcywgc3VwZXJzY3JpcHRzLCBsaWdhdHVyZXMsIHN3YXNoZXMsIGV0Yy4pLAorICAgKiAgIHRvIGJlIGNvbnRyb2xsZWQgYnkgc28tY2FsbGVkIGBmZWF0dXJlcycuICBIYW5kbGluZyBPcGVuVHlwZSBmZWF0dXJlcworICAgKiAgIGNhbiBiZSBxdWl0ZSBjb21wbGljYXRlZCBhbmQgdGh1cyBuZWVkcyBhIHNlcGFyYXRlIGxpYnJhcnkgb24gdG9wIG9mCisgICAqICAgRnJlZVR5cGUuCisgICAqCisgICAqICAgVGhlIG1hcHBpbmcgYmV0d2VlbiBnbHlwaCBpbmRpY2VzIGFuZCBzY3JpcHRzIChpbiB0aGUgYXV0by1oaW50ZXIKKyAgICogICBzZW5zZSwgc2VlIHRoZSBARlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYIHZhbHVlcykgaXMgc3RvcmVkIGFzIGFuCisgICAqICAgYXJyYXkgd2l0aCBgbnVtX2dseXBocycgZWxlbWVudHMsIGFzIGZvdW5kIGluIHRoZSBmb250J3MgQEZUX0ZhY2UKKyAgICogICBzdHJ1Y3R1cmUuICBUaGUgYGdseXBoLXRvLXNjcmlwdC1tYXAnIHByb3BlcnR5IHJldHVybnMgYSBwb2ludGVyIHRvCisgICAqICAgdGhpcyBhcnJheSwgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIGFzIG5lZWRlZC4gIE5vdGUgdGhhdCB0aGUKKyAgICogICBtb2RpZmljYXRpb24gc2hvdWxkIGhhcHBlbiBiZWZvcmUgdGhlIGZpcnN0IGdseXBoIGdldHMgcHJvY2Vzc2VkIGJ5CisgICAqICAgdGhlIGF1dG8taGludGVyIHNvIHRoYXQgdGhlIGdsb2JhbCBhbmFseXNpcyBvZiB0aGUgZm9udCBzaGFwZXMKKyAgICogICBhY3R1YWxseSB1c2VzIHRoZSBtb2RpZmllZCBtYXBwaW5nLgorICAgKgorICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWNjZXNzIGl0IChvbWl0dGluZworICAgKiAgIHRoZSBlcnJvciBoYW5kbGluZykuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgICAgICAgICAgICAgICBsaWJyYXJ5OworICAgKiAgICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgICBmYWNlOworICAgKiAgICAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwICBwcm9wOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICogICAgIEZUX05ld19GYWNlKCBsaWJyYXJ5LCAiZm9vLnR0ZiIsIDAsICZmYWNlICk7CisgICAqCisgICAqICAgICBwcm9wLmZhY2UgPSBmYWNlOworICAgKgorICAgKiAgICAgRlRfUHJvcGVydHlfR2V0KCBsaWJyYXJ5LCAiYXV0b2ZpdHRlciIsCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnbHlwaC10by1zY3JpcHQtbWFwIiwgJnByb3AgKTsKKyAgICoKKyAgICogICAgIC8vIGFkanVzdCBgcHJvcC5tYXAnIGFzIG5lZWRlZCByaWdodCBoZXJlCisgICAqCisgICAqICAgICBGVF9Mb2FkX0dseXBoKCBmYWNlLCAuLi4sIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgKTsKKyAgICogICB9CisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjQuMTEKKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKKyAgICoKKyAgICogICBBIGxpc3Qgb2YgY29uc3RhbnRzIHVzZWQgZm9yIHRoZSBAZ2x5cGgtdG8tc2NyaXB0LW1hcCBwcm9wZXJ0eSB0bworICAgKiAgIHNwZWNpZnkgdGhlIHNjcmlwdCBzdWJtb2R1bGUgdGhlIGF1dG8taGludGVyIHNob3VsZCB1c2UgZm9yIGhpbnRpbmcgYQorICAgKiAgIHBhcnRpY3VsYXIgZ2x5cGguCisgICAqCisgICAqIEB2YWx1ZXM6CisgICAqICAgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTk9ORSA6OgorICAgKiAgICAgRG9uJ3QgYXV0by1oaW50IHRoaXMgZ2x5cGguCisgICAqCisgICAqICAgRlRfQVVUT0hJTlRFUl9TQ1JJUFRfTEFUSU4gOjoKKyAgICogICAgIEFwcGx5IHRoZSBsYXRpbiBhdXRvLWhpbnRlci4gIEZvciB0aGUgYXV0by1oaW50ZXIsIGBsYXRpbicgaXMgYQorICAgKiAgICAgdmVyeSBicm9hZCB0ZXJtLCBpbmNsdWRpbmcgQ3lyaWxsaWMgYW5kIEdyZWVrIGFsc28gc2luY2UgY2hhcmFjdGVycworICAgKiAgICAgZnJvbSB0aG9zZSBzY3JpcHRzIHNoYXJlIHRoZSBzYW1lIGRlc2lnbiBjb25zdHJhaW50cy4KKyAgICoKKyAgICogICAgIEJ5IGRlZmF1bHQsIGNoYXJhY3RlcnMgZnJvbSB0aGUgZm9sbG93aW5nIFVuaWNvZGUgcmFuZ2VzIGFyZQorICAgKiAgICAgYXNzaWduZWQgdG8gdGhpcyBzdWJtb2R1bGUuCisgICAqCisgICAqICAgICB7CisgICAqICAgICAgIFUrMDAyMCAtIFUrMDA3RiAgLy8gQmFzaWMgTGF0aW4gKG5vIGNvbnRyb2wgY2hhcmFjdGVycykKKyAgICogICAgICAgVSswMEEwIC0gVSswMEZGICAvLyBMYXRpbi0xIFN1cHBsZW1lbnQgKG5vIGNvbnRyb2wgY2hhcmFjdGVycykKKyAgICogICAgICAgVSswMTAwIC0gVSswMTdGICAvLyBMYXRpbiBFeHRlbmRlZC1BCisgICAqICAgICAgIFUrMDE4MCAtIFUrMDI0RiAgLy8gTGF0aW4gRXh0ZW5kZWQtQgorICAgKiAgICAgICBVKzAyNTAgLSBVKzAyQUYgIC8vIElQQSBFeHRlbnNpb25zCisgICAqICAgICAgIFUrMDJCMCAtIFUrMDJGRiAgLy8gU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzCisgICAqICAgICAgIFUrMDMwMCAtIFUrMDM2RiAgLy8gQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzCisgICAqICAgICAgIFUrMDM3MCAtIFUrMDNGRiAgLy8gR3JlZWsgYW5kIENvcHRpYworICAgKiAgICAgICBVKzA0MDAgLSBVKzA0RkYgIC8vIEN5cmlsbGljCisgICAqICAgICAgIFUrMDUwMCAtIFUrMDUyRiAgLy8gQ3lyaWxsaWMgU3VwcGxlbWVudAorICAgKiAgICAgICBVKzFEMDAgLSBVKzFEN0YgIC8vIFBob25ldGljIEV4dGVuc2lvbnMKKyAgICogICAgICAgVSsxRDgwIC0gVSsxREJGICAvLyBQaG9uZXRpYyBFeHRlbnNpb25zIFN1cHBsZW1lbnQKKyAgICogICAgICAgVSsxREMwIC0gVSsxREZGICAvLyBDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgU3VwcGxlbWVudAorICAgKiAgICAgICBVKzFFMDAgLSBVKzFFRkYgIC8vIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwKKyAgICogICAgICAgVSsxRjAwIC0gVSsxRkZGICAvLyBHcmVlayBFeHRlbmRlZAorICAgKiAgICAgICBVKzIwMDAgLSBVKzIwNkYgIC8vIEdlbmVyYWwgUHVuY3R1YXRpb24KKyAgICogICAgICAgVSsyMDcwIC0gVSsyMDlGICAvLyBTdXBlcnNjcmlwdHMgYW5kIFN1YnNjcmlwdHMKKyAgICogICAgICAgVSsyMEEwIC0gVSsyMENGICAvLyBDdXJyZW5jeSBTeW1ib2xzCisgICAqICAgICAgIFUrMjE1MCAtIFUrMjE4RiAgLy8gTnVtYmVyIEZvcm1zCisgICAqICAgICAgIFUrMjQ2MCAtIFUrMjRGRiAgLy8gRW5jbG9zZWQgQWxwaGFudW1lcmljcworICAgKiAgICAgICBVKzJDNjAgLSBVKzJDN0YgIC8vIExhdGluIEV4dGVuZGVkLUMKKyAgICogICAgICAgVSsyREUwIC0gVSsyREZGICAvLyBDeXJpbGxpYyBFeHRlbmRlZC1BCisgICAqICAgICAgIFUrMkUwMCAtIFUrMkU3RiAgLy8gU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uCisgICAqICAgICAgIFUrQTY0MCAtIFUrQTY5RiAgLy8gQ3lyaWxsaWMgRXh0ZW5kZWQtQgorICAgKiAgICAgICBVK0E3MjAgLSBVK0E3RkYgIC8vIExhdGluIEV4dGVuZGVkLUQKKyAgICogICAgICAgVStGQjAwIC0gVStGQjA2ICAvLyBBbHBoYWIuIFByZXNlbnQuIEZvcm1zIChMYXRpbiBMaWdhdHVyZXMpCisgICAqICAgICAgVSsxRDQwMCAtIFUrMUQ3RkYgLy8gTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzCisgICAqICAgICAgVSsxRjEwMCAtIFUrMUYxRkYgLy8gRW5jbG9zZWQgQWxwaGFudW1lcmljIFN1cHBsZW1lbnQKKyAgICogICAgIH0KKyAgICoKKyAgICogICBGVF9BVVRPSElOVEVSX1NDUklQVF9DSksgOjoKKyAgICogICAgIEFwcGx5IHRoZSBDSksgYXV0by1oaW50ZXIsIGNvdmVyaW5nIENoaW5lc2UsIEphcGFuZXNlLCBLb3JlYW4sIG9sZAorICAgKiAgICAgVmlldG5hbWVzZSwgYW5kIHNvbWUgb3RoZXIgc2NyaXB0cy4KKyAgICoKKyAgICogICAgIEJ5IGRlZmF1bHQsIGNoYXJhY3RlcnMgZnJvbSB0aGUgZm9sbG93aW5nIFVuaWNvZGUgcmFuZ2VzIGFyZQorICAgKiAgICAgYXNzaWduZWQgdG8gdGhpcyBzdWJtb2R1bGUuCisgICAqCisgICAqICAgICB7CisgICAqICAgICAgIFUrMTEwMCAtIFUrMTFGRiAgLy8gSGFuZ3VsIEphbW8KKyAgICogICAgICAgVSsyRTgwIC0gVSsyRUZGICAvLyBDSksgUmFkaWNhbHMgU3VwcGxlbWVudAorICAgKiAgICAgICBVKzJGMDAgLSBVKzJGREYgIC8vIEthbmd4aSBSYWRpY2FscworICAgKiAgICAgICBVKzJGRjAgLSBVKzJGRkYgIC8vIElkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMKKyAgICogICAgICAgVSszMDAwIC0gVSszMDNGICAvLyBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24KKyAgICogICAgICAgVSszMDQwIC0gVSszMDlGICAvLyBIaXJhZ2FuYQorICAgKiAgICAgICBVKzMwQTAgLSBVKzMwRkYgIC8vIEthdGFrYW5hCisgICAqICAgICAgIFUrMzEwMCAtIFUrMzEyRiAgLy8gQm9wb21vZm8KKyAgICogICAgICAgVSszMTMwIC0gVSszMThGICAvLyBIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vCisgICAqICAgICAgIFUrMzE5MCAtIFUrMzE5RiAgLy8gS2FuYnVuCisgICAqICAgICAgIFUrMzFBMCAtIFUrMzFCRiAgLy8gQm9wb21vZm8gRXh0ZW5kZWQKKyAgICogICAgICAgVSszMUMwIC0gVSszMUVGICAvLyBDSksgU3Ryb2tlcworICAgKiAgICAgICBVKzMxRjAgLSBVKzMxRkYgIC8vIEthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMKKyAgICogICAgICAgVSszMjAwIC0gVSszMkZGICAvLyBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzCisgICAqICAgICAgIFUrMzMwMCAtIFUrMzNGRiAgLy8gQ0pLIENvbXBhdGliaWxpdHkKKyAgICogICAgICAgVSszNDAwIC0gVSs0REJGICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBBCisgICAqICAgICAgIFUrNERDMCAtIFUrNERGRiAgLy8gWWlqaW5nIEhleGFncmFtIFN5bWJvbHMKKyAgICogICAgICAgVSs0RTAwIC0gVSs5RkZGICAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzCisgICAqICAgICAgIFUrQTk2MCAtIFUrQTk3RiAgLy8gSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQQorICAgKiAgICAgICBVK0FDMDAgLSBVK0Q3QUYgIC8vIEhhbmd1bCBTeWxsYWJsZXMKKyAgICogICAgICAgVStEN0IwIC0gVStEN0ZGICAvLyBIYW5ndWwgSmFtbyBFeHRlbmRlZC1CCisgICAqICAgICAgIFUrRjkwMCAtIFUrRkFGRiAgLy8gQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocworICAgKiAgICAgICBVK0ZFMTAgLSBVK0ZFMUYgIC8vIFZlcnRpY2FsIGZvcm1zCisgICAqICAgICAgIFUrRkUzMCAtIFUrRkU0RiAgLy8gQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMKKyAgICogICAgICAgVStGRjAwIC0gVStGRkVGICAvLyBIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcworICAgKiAgICAgIFUrMUIwMDAgLSBVKzFCMEZGIC8vIEthbmEgU3VwcGxlbWVudAorICAgKiAgICAgIFUrMUQzMDAgLSBVKzFEMzVGIC8vIFRhaSBYdWFuIEhpbmcgU3ltYm9scworICAgKiAgICAgIFUrMUYyMDAgLSBVKzFGMkZGIC8vIEVuY2xvc2VkIElkZW9ncmFwaGljIFN1cHBsZW1lbnQKKyAgICogICAgICBVKzIwMDAwIC0gVSsyQTZERiAvLyBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBCCisgICAqICAgICAgVSsyQTcwMCAtIFUrMkI3M0YgLy8gQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQworICAgKiAgICAgIFUrMkI3NDAgLSBVKzJCODFGIC8vIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQKKyAgICogICAgICBVKzJGODAwIC0gVSsyRkExRiAvLyBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIFN1cHBsZW1lbnQKKyAgICogICAgIH0KKyAgICoKKyAgICogICBGVF9BVVRPSElOVEVSX1NDUklQVF9JTkRJQyA6OgorICAgKiAgICAgQXBwbHkgdGhlIGluZGljIGF1dG8taGludGVyLCBjb3ZlcmluZyBhbGwgbWFqb3Igc2NyaXB0cyBmcm9tIHRoZQorICAgKiAgICAgSW5kaWFuIHN1Yi1jb250aW5lbnQgYW5kIHNvbWUgb3RoZXIgcmVsYXRlZCBzY3JpcHRzIGxpa2UgVGhhaSwgTGFvLAorICAgKiAgICAgb3IgVGliZXRhbi4KKyAgICoKKyAgICogICAgIEJ5IGRlZmF1bHQsIGNoYXJhY3RlcnMgZnJvbSB0aGUgZm9sbG93aW5nIFVuaWNvZGUgcmFuZ2VzIGFyZQorICAgKiAgICAgYXNzaWduZWQgdG8gdGhpcyBzdWJtb2R1bGUuCisgICAqCisgICAqICAgICB7CisgICAqICAgICAgIFUrMDkwMCAtIFUrMERGRiAgLy8gSW5kaWMgUmFuZ2UKKyAgICogICAgICAgVSswRjAwIC0gVSswRkZGICAvLyBUaWJldGFuCisgICAqICAgICAgIFUrMTkwMCAtIFUrMTk0RiAgLy8gTGltYnUKKyAgICogICAgICAgVSsxQjgwIC0gVSsxQkJGICAvLyBTdW5kYW5lc2UKKyAgICogICAgICAgVStBODAwIC0gVStBODJGICAvLyBTeWxvdGkgTmFncmkKKyAgICogICAgICAgVStBQkMwIC0gVStBQkZGICAvLyBNZWV0ZWkgTWF5ZWsKKyAgICogICAgICBVKzExODAwIC0gVSsxMThERiAvLyBTaGFyYWRhCisgICAqICAgICB9CisgICAqCisgICAqICAgICBOb3RlIHRoYXQgY3VycmVudGx5IEluZGljIHN1cHBvcnQgaXMgcnVkaW1lbnRhcnkgb25seSwgbWlzc2luZyBibHVlCisgICAqICAgICB6b25lIHN1cHBvcnQuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjQuMTEKKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0FVVE9ISU5URVJfU0NSSVBUX05PTkUgICAwCisjZGVmaW5lIEZUX0FVVE9ISU5URVJfU0NSSVBUX0xBVElOICAxCisjZGVmaW5lIEZUX0FVVE9ISU5URVJfU0NSSVBUX0NKSyAgICAyCisjZGVmaW5lIEZUX0FVVE9ISU5URVJfU0NSSVBUX0lORElDICAzCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXAKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICpFeHBlcmltZW50YWwqICpvbmx5KgorICAgKgorICAgKiAgIFRoZSBkYXRhIGV4Y2hhbmdlIHN0cnVjdHVyZSBmb3IgdGhlIEBnbHlwaC10by1zY3JpcHQtbWFwIHByb3BlcnR5LgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi40LjExCisgICAqCisgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfUHJvcF9HbHlwaFRvU2NyaXB0TWFwXworICB7CisgICAgRlRfRmFjZSAgICAgZmFjZTsKKyAgICBGVF9VU2hvcnQqICBtYXA7CisKKyAgfSBGVF9Qcm9wX0dseXBoVG9TY3JpcHRNYXA7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHByb3BlcnR5OgorICAgKiAgIGZhbGxiYWNrLXNjcmlwdAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgKkV4cGVyaW1lbnRhbCogKm9ubHkqCisgICAqCisgICAqICAgSWYgbm8gYXV0by1oaW50ZXIgc2NyaXB0IG1vZHVsZSBjYW4gYmUgYXNzaWduZWQgdG8gYSBnbHlwaCwgYQorICAgKiAgIGZhbGxiYWNrIHNjcmlwdCBnZXRzIGFzc2lnbmVkIHRvIGl0IChzZWUgYWxzbyB0aGUKKyAgICogICBAZ2x5cGgtdG8tc2NyaXB0LW1hcCBwcm9wZXJ0eSkuICBCeSBkZWZhdWx0LCB0aGlzIGlzCisgICAqICAgQEZUX0FVVE9ISU5URVJfU0NSSVBUX0NKSy4gIFVzaW5nIHRoZSBgZmFsbGJhY2stc2NyaXB0JyBwcm9wZXJ0eSwKKyAgICogICB0aGlzIGZhbGxiYWNrIHZhbHVlIGNhbiBiZSBjaGFuZ2VkLgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CisgICAqICAgICBGVF9VSW50ICAgICBmYWxsYmFja19zY3JpcHQgPSBGVF9BVVRPSElOVEVSX1NDUklQVF9OT05FOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFsbGJhY2stc2NyaXB0IiwgJmZhbGxiYWNrX3NjcmlwdCApOworICAgKiAgIH0KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICogICBJdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIHJpZ2h0IHRpbWluZyBmb3IgY2hhbmdpbmcgdGhpcyB2YWx1ZTogVGhlCisgICAqICAgY3JlYXRpb24gb2YgdGhlIGdseXBoLXRvLXNjcmlwdCBtYXAgdGhhdCBldmVudHVhbGx5IHVzZXMgdGhlCisgICAqICAgZmFsbGJhY2sgc2NyaXB0IHZhbHVlIGdldHMgdHJpZ2dlcmVkIGVpdGhlciBieSBzZXR0aW5nIG9yIHJlYWRpbmcgYQorICAgKiAgIGZhY2Utc3BlY2lmaWMgcHJvcGVydHkgbGlrZSBAZ2x5cGgtdG8tc2NyaXB0LW1hcCwgb3IgYnkgYXV0by1oaW50aW5nCisgICAqICAgYW55IGdseXBoIGZyb20gdGhhdCBmYWNlLiAgSW4gcGFydGljdWxhciwgaWYgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkCisgICAqICAgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlIGJ1dCBub3QgbG9hZGVkIGFueSBnbHlwaCAodXNpbmcgdGhlCisgICAqICAgYXV0by1oaW50ZXIpLCBhIGNoYW5nZSBvZiB0aGUgZmFsbGJhY2sgc2NyaXB0IHdpbGwgYWZmZWN0IHRoaXMgZmFjZS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNC4xMQorICAgKgorICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAcHJvcGVydHk6CisgICAqICAgZGVmYXVsdC1zY3JpcHQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgICpFeHBlcmltZW50YWwqICpvbmx5KgorICAgKgorICAgKiAgIElmIEZyZWVUeXBlIGdldHMgY29tcGlsZWQgd2l0aCBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiB0byBtYWtlCisgICAqICAgdGhlIEhhcmZCdXp6IGxpYnJhcnkgYWNjZXNzIE9wZW5UeXBlIGZlYXR1cmVzIGZvciBnZXR0aW5nIGJldHRlcgorICAgKiAgIGdseXBoIGNvdmVyYWdlcywgdGhpcyBwcm9wZXJ0eSBzZXRzIHRoZSAoYXV0by1maXR0ZXIpIHNjcmlwdCB0byBiZQorICAgKiAgIHVzZWQgZm9yIHRoZSBkZWZhdWx0IChPcGVuVHlwZSkgc2NyaXB0IGRhdGEgb2YgYSBmb250J3MgR1NVQiB0YWJsZS4KKyAgICogICBGZWF0dXJlcyBmb3IgdGhlIGRlZmF1bHQgc2NyaXB0IGFyZSBpbnRlbmRlZCBmb3IgYWxsIHNjcmlwdHMgbm90CisgICAqICAgZXhwbGljaXRseSBoYW5kbGVkIGluIEdTVUI7IGFuIGV4YW1wbGUgaXMgYSBgZGxpZycgZmVhdHVyZSwKKyAgICogICBjb250YWluaW5nIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgY2hhcmFjdGVycyBgVCcsIGBFJywgYW5kIGBMJyB0bworICAgKiAgIGZvcm0gYSBgVEVMJyBsaWdhdHVyZS4KKyAgICoKKyAgICogICBCeSBkZWZhdWx0LCB0aGlzIGlzIEBGVF9BVVRPSElOVEVSX1NDUklQVF9MQVRJTi4gIFVzaW5nIHRoZQorICAgKiAgIGBkZWZhdWx0LXNjcmlwdCcgcHJvcGVydHksIHRoaXMgZGVmYXVsdCB2YWx1ZSBjYW4gYmUgY2hhbmdlZC4KKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OworICAgKiAgICAgRlRfVUludCAgICAgZGVmYXVsdF9zY3JpcHQgPSBGVF9BVVRPSElOVEVSX1NDUklQVF9OT05FOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdC1zY3JpcHQiLCAmZGVmYXVsdF9zY3JpcHQgKTsKKyAgICogICB9CisgICAqCisgICAqIEBub3RlOgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCisgICAqCisgICAqICAgSXQncyBpbXBvcnRhbnQgdG8gdXNlIHRoZSByaWdodCB0aW1pbmcgZm9yIGNoYW5naW5nIHRoaXMgdmFsdWU6IFRoZQorICAgKiAgIGNyZWF0aW9uIG9mIHRoZSBnbHlwaC10by1zY3JpcHQgbWFwIHRoYXQgZXZlbnR1YWxseSB1c2VzIHRoZQorICAgKiAgIGRlZmF1bHQgc2NyaXB0IHZhbHVlIGdldHMgdHJpZ2dlcmVkIGVpdGhlciBieSBzZXR0aW5nIG9yIHJlYWRpbmcgYQorICAgKiAgIGZhY2Utc3BlY2lmaWMgcHJvcGVydHkgbGlrZSBAZ2x5cGgtdG8tc2NyaXB0LW1hcCwgb3IgYnkgYXV0by1oaW50aW5nCisgICAqICAgYW55IGdseXBoIGZyb20gdGhhdCBmYWNlLiAgSW4gcGFydGljdWxhciwgaWYgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkCisgICAqICAgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlIGJ1dCBub3QgbG9hZGVkIGFueSBnbHlwaCAodXNpbmcgdGhlCisgICAqICAgYXV0by1oaW50ZXIpLCBhIGNoYW5nZSBvZiB0aGUgZGVmYXVsdCBzY3JpcHQgd2lsbCBhZmZlY3QgdGhpcyBmYWNlLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi41LjMKKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHByb3BlcnR5OgorICAgKiAgIGluY3JlYXNlLXgtaGVpZ2h0CisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBGb3IgcHBlbSB2YWx1ZXMgaW4gdGhlIHJhbmdlIDZ+PD0gcHBlbSA8PSBgaW5jcmVhc2UteC1oZWlnaHQnLCByb3VuZAorICAgKiAgIHVwIHRoZSBmb250J3MgeH5oZWlnaHQgbXVjaCBtb3JlIG9mdGVuIHRoYW4gbm9ybWFsbHkuICBJZiB0aGUgdmFsdWUKKyAgICogICBpcyBzZXQgdG9+MCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQsIHRoaXMgZmVhdHVyZSBpcyBzd2l0Y2hlZCBvZmYuICBVc2UKKyAgICogICB0aGlzIHByb3BlcnR5IHRvIGltcHJvdmUgdGhlIGxlZ2liaWxpdHkgb2Ygc21hbGwgZm9udCBzaXplcyBpZgorICAgKiAgIG5lY2Vzc2FyeS4KKyAgICoKKyAgICogICB7CisgICAqICAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgbGlicmFyeTsKKyAgICogICAgIEZUX0ZhY2UgICAgICAgICAgICAgICAgICBmYWNlOworICAgKiAgICAgRlRfUHJvcF9JbmNyZWFzZVhIZWlnaHQgIHByb3A7CisgICAqCisgICAqCisgICAqICAgICBGVF9Jbml0X0ZyZWVUeXBlKCAmbGlicmFyeSApOworICAgKiAgICAgRlRfTmV3X0ZhY2UoIGxpYnJhcnksICJmb28udHRmIiwgMCwgJmZhY2UgKTsKKyAgICogICAgIEZUX1NldF9DaGFyX1NpemUoIGZhY2UsIDEwICogNjQsIDAsIDcyLCAwICk7CisgICAqCisgICAqICAgICBwcm9wLmZhY2UgID0gZmFjZTsKKyAgICogICAgIHByb3AubGltaXQgPSAxNDsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jcmVhc2UteC1oZWlnaHQiLCAmcHJvcCApOworICAgKiAgIH0KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KKyAgICoKKyAgICogICBTZXQgdGhpcyB2YWx1ZSByaWdodCBhZnRlciBjYWxsaW5nIEBGVF9TZXRfQ2hhcl9TaXplLCBidXQgYmVmb3JlCisgICAqICAgbG9hZGluZyBhbnkgZ2x5cGggKHVzaW5nIHRoZSBhdXRvLWhpbnRlcikuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjQuMTEKKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQHN0cnVjdDoKKyAgICogICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgVGhlIGRhdGEgZXhjaGFuZ2Ugc3RydWN0dXJlIGZvciB0aGUgQGluY3JlYXNlLXgtaGVpZ2h0IHByb3BlcnR5LgorICAgKgorICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0XworICB7CisgICAgRlRfRmFjZSAgZmFjZTsKKyAgICBGVF9VSW50ICBsaW1pdDsKKworICB9IEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBwcm9wZXJ0eToKKyAgICogICB3YXJwaW5nCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICAqRXhwZXJpbWVudGFsKiAqb25seSoKKyAgICoKKyAgICogICBJZiBGcmVlVHlwZSBnZXRzIGNvbXBpbGVkIHdpdGggb3B0aW9uIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiB0bworICAgKiAgIGFjdGl2YXRlIHRoZSB3YXJwIGhpbnRpbmcgY29kZSBpbiB0aGUgYXV0by1oaW50ZXIsIHRoaXMgcHJvcGVydHkKKyAgICogICBzd2l0Y2hlcyB3YXJwaW5nIG9uIGFuZCBvZmYuCisgICAqCisgICAqICAgV2FycGluZyBvbmx5IHdvcmtzIGluIGBub3JtYWwnIGF1dG8taGludGluZyBtb2RlIHJlcGxhY2luZyBpdC4KKyAgICogICBUaGUgaWRlYSBvZiB0aGUgY29kZSBpcyB0byBzbGlnaHRseSBzY2FsZSBhbmQgc2hpZnQgYSBnbHlwaCBhbG9uZworICAgKiAgIHRoZSBub24taGludGVkIGRpbWVuc2lvbiAod2hpY2ggaXMgdXN1YWxseSB0aGUgaG9yaXpvbnRhbCBheGlzKSBzbworICAgKiAgIHRoYXQgYXMgbXVjaCBvZiBpdHMgc2VnbWVudHMgYXJlIGFsaWduZWQgKG1vcmUgb3IgbGVzcykgdG8gdGhlIGdyaWQuCisgICAqICAgVG8gZmluZCBvdXQgYSBnbHlwaCdzIG9wdGltYWwgc2NhbGluZyBhbmQgc2hpZnRpbmcgdmFsdWUsIHZhcmlvdXMKKyAgICogICBwYXJhbWV0ZXIgY29tYmluYXRpb25zIGFyZSB0cmllZCBhbmQgc2NvcmVkLgorICAgKgorICAgKiAgIEJ5IGRlZmF1bHQsIHdhcnBpbmcgaXMgb2ZmLiAgVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHRvIHN3aXRjaCBvbgorICAgKiAgIHdhcnBpbmcgKG9taXR0aW5nIHRoZSBlcnJvciBoYW5kbGluZykuCisgICAqCisgICAqICAgeworICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICogICAgIEZUX0Jvb2wgICAgIHdhcnBpbmcgPSAxOworICAgKgorICAgKgorICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKKyAgICoKKyAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgImF1dG9maXR0ZXIiLAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FycGluZyIsICZ3YXJwaW5nICk7CisgICAqICAgfQorICAgKgorICAgKiBAbm90ZToKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgorICAgKgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlICh1c2luZyB2YWx1ZXMgMSBhbmQgMCBmb3IgYG9uJyBhbmQgYG9mZicsIHJlc3BlY3RpdmVseSkuCisgICAqCisgICAqICAgVGhlIHdhcnBpbmcgY29kZSBjYW4gYWxzbyBjaGFuZ2UgYWR2YW5jZSB3aWR0aHMuICBIYXZlIGEgbG9vayBhdCB0aGUKKyAgICogICBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YScgZmllbGRzIGluIHRoZSBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZQorICAgKiAgIGZvciBkZXRhaWxzIG9uIGltcHJvdmluZyBpbnRlci1nbHlwaCBkaXN0YW5jZXMgd2hpbGUgcmVuZGVyaW5nLgorICAgKgorICAgKiAgIFNpbmNlIHdhcnBpbmcgaXMgYSBnbG9iYWwgcHJvcGVydHkgb2YgdGhlIGF1dG8taGludGVyIGl0IGlzIGJlc3QgdG8KKyAgICogICBjaGFuZ2UgaXRzIHZhbHVlIGJlZm9yZSByZW5kZXJpbmcgYW55IGZhY2UuICBPdGhlcndpc2UsIHlvdSBzaG91bGQKKyAgICogICByZWxvYWQgYWxsIGZhY2VzIHRoYXQgZ2V0IGF1dG8taGludGVkIGluIGBub3JtYWwnIGhpbnRpbmcgbW9kZS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuNgorICAgKgorICAgKi8KKworCisgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIEZURFJJVkVSX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmgKaW5kZXggMjMyZGNjZC4uOGZmZDM0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMxLDYgKzIzMSwxMCBAQAogICAgICAgICAgICAgICAgICJpbnZhbGlkIFBvc3RTY3JpcHQgKHBvc3QpIHRhYmxlIGZvcm1hdCIgKQogICBGVF9FUlJPUkRFRl8oIEludmFsaWRfUG9zdF9UYWJsZSwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OUIsCiAgICAgICAgICAgICAgICAgImludmFsaWQgUG9zdFNjcmlwdCAocG9zdCkgdGFibGUiICkKKyAgRlRfRVJST1JERUZfKCBERUZfSW5fR2x5Zl9CeXRlY29kZSwgICAgICAgICAgICAgICAgICAgICAgICAweDlDLAorICAgICAgICAgICAgICAgICJmb3VuZCBGREVGIG9yIElERUYgb3Bjb2RlIGluIGdseWYgYnl0ZWNvZGUiICkKKyAgRlRfRVJST1JERUZfKCBNaXNzaW5nX0JpdG1hcCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDlELAorICAgICAgICAgICAgICAgICJtaXNzaW5nIGJpdG1hcCBpbiBzdHJpa2UiICkKIAogICAvKiBDRkYsIENJRCwgYW5kIFR5cGUgMSBlcnJvcnMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oCmluZGV4IDAyMTk4OWQuLmY2ZWU1YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZSBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM4LDE1ICszOCwxNSBAQAogICAvKiAgIFRoZSBjb25maWd1cmF0aW9uIG1hY3JvIEZUX0NPTkZJR19PUFRJT05fVVNFX01PRFVMRV9FUlJPUlMgY2FuIGJlICAgKi8KICAgLyogICBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJyBpbiBvcmRlciB0byBtYWtlIHRoZSBoaWdoZXIgYnl0ZSBpbmRpY2F0ZSAgICovCiAgIC8qICAgdGhlIG1vZHVsZSB3aGVyZSB0aGUgZXJyb3IgaGFzIGhhcHBlbmVkICh0aGlzIGlzIG5vdCBjb21wYXRpYmxlICAgICAqLwotICAvKiAgIHdpdGggc3RhbmRhcmQgYnVpbGRzIG9mIEZyZWVUeXBlJm5ic3A7MiwgaG93ZXZlcikuICBTZWUgdGhlIGZpbGUgICAgKi8KKyAgLyogICB3aXRoIHN0YW5kYXJkIGJ1aWxkcyBvZiBGcmVlVHlwZX4yLCBob3dldmVyKS4gIFNlZSB0aGUgZmlsZSAgICAgICAgICovCiAgIC8qICAgYGZ0bW9kZXJyLmgnIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAqRXJyb3IqICpNZXNzYWdlKiAqU3RyaW5ncyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIEVycm9yIGRlZmluaXRpb25zIGFyZSBzZXQgdXAgd2l0aCBzcGVjaWFsIG1hY3JvcyB0aGF0IGFsbG93IGNsaWVudCAgKi8KICAgLyogICBhcHBsaWNhdGlvbnMgdG8gYnVpbGQgYSB0YWJsZSBvZiBlcnJvciBtZXNzYWdlIHN0cmluZ3MuICBUaGUgICAgICAgICovCi0gIC8qICAgc3RyaW5ncyBhcmUgbm90IGluY2x1ZGVkIGluIGEgbm9ybWFsIGJ1aWxkIG9mIEZyZWVUeXBlJm5ic3A7MiB0byAgICAqLwotICAvKiAgIHNhdmUgc3BhY2UgKG1vc3QgY2xpZW50IGFwcGxpY2F0aW9ucyBkbyBub3QgdXNlIHRoZW0pLiAgICAgICAgICAgICAgKi8KKyAgLyogICBzdHJpbmdzIGFyZSBub3QgaW5jbHVkZWQgaW4gYSBub3JtYWwgYnVpbGQgb2YgRnJlZVR5cGV+MiB0byBzYXZlICAgICovCisgIC8qICAgc3BhY2UgKG1vc3QgY2xpZW50IGFwcGxpY2F0aW9ucyBkbyBub3QgdXNlIHRoZW0pLiAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBUbyBkbyBzbywgeW91IGhhdmUgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGJlZm9yZSBpbmNsdWRpbmcgICovCiAgIC8qICAgdGhpcyBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgI3VuZGVmaW5lIF9fRlRFUlJPUlNfSF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIHdvcmsgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHdvcmsgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWYgISggZGVmaW5lZCggRlRFUlJPUlNfSF8gKSAmJiBkZWZpbmVkICggX19GVEVSUk9SU19IX18gKSApCiAjZGVmaW5lIEZURVJST1JTX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKaW5kZXggMzM3NzU4My4uY2M4NmVmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGZudGZtdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRmbnRmbXQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZm9udCBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnYXNwLmgKaW5kZXggY2UxOGQ2NC4uOWI1NGZjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFjY2VzcyBvZiBUcnVlVHlwZSdzIGBnYXNwJyB0YWJsZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCmluZGV4IDc5ODc5YTcuLjVmM2ZjMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMzEsNiArMjMxLDEyIEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCZWNhdXNlIGAqYWdseXBoLT5hZHZhbmNlLngnIGFuZCAnKmFnbHlwaC0+YWR2YW5jZS55JyBhcmUgMTYuMTYgICAgKi8KKyAgLyogICAgZml4ZWQtcG9pbnQgbnVtYmVycywgYHNsb3QtPmFkdmFuY2UueCcgYW5kIGBzbG90LT5hZHZhbmNlLnknICAgICAgICovCisgIC8qICAgICh3aGljaCBhcmUgaW4gMjYuNiBmaXhlZC1wb2ludCBmb3JtYXQpIG11c3QgYmUgaW4gdGhlIHJhbmdlICAgICAgICAqLworICAvKiAgICBdLTMyNzY4OzMyNzY4Wy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfR2x5cGgoIEZUX0dseXBoU2xvdCAgc2xvdCwKICAgICAgICAgICAgICAgICBGVF9HbHlwaCAgICAgKmFnbHlwaCApOwpAQCAtMzQxLDEwICszNDcsMTAgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBSZXR1cm4gYSBnbHlwaCdzIGBjb250cm9sIGJveCcuICBUaGUgY29udHJvbCBib3ggZW5jbG9zZXMgYWxsIHRoZSAgKi8KLSAgLyogICAgb3V0bGluZSdzIHBvaW50cywgaW5jbHVkaW5nIELDqXppZXIgY29udHJvbCBwb2ludHMuICBUaG91Z2ggaXQgICAgICAqLworICAvKiAgICBvdXRsaW5lJ3MgcG9pbnRzLCBpbmNsdWRpbmcgQmV6aWVyIGNvbnRyb2wgcG9pbnRzLiAgVGhvdWdoIGl0ICAgICAgKi8KICAgLyogICAgY29pbmNpZGVzIHdpdGggdGhlIGV4YWN0IGJvdW5kaW5nIGJveCBmb3IgbW9zdCBnbHlwaHMsIGl0IGNhbiBiZSAgICovCiAgIC8qICAgIHNsaWdodGx5IGxhcmdlciBpbiBzb21lIHNpdHVhdGlvbnMgKGxpa2Ugd2hlbiByb3RhdGluZyBhbiBvdXRsaW5lICAqLwotICAvKiAgICB0aGF0IGNvbnRhaW5zIELDqXppZXIgb3V0c2lkZSBhcmNzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRoYXQgY29udGFpbnMgQmV6aWVyIG91dHNpZGUgYXJjcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgQ29tcHV0aW5nIHRoZSBjb250cm9sIGJveCBpcyB2ZXJ5IGZhc3QsIHdoaWxlIGdldHRpbmcgdGhlIGJvdW5kaW5nICovCiAgIC8qICAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzICAqLwpAQCAtNTY2LDYgKzU3Miw5IEBACiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUaGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBlaXRoZXIgYGEnIG9yIGBiJyBpcyB6ZXJvLiAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNpbmNlIHRoZSBmdW5jdGlvbiB1c2VzIHdyYXAtYXJvdW5kIGFyaXRobWV0aWMsIHJlc3VsdHMgYmVjb21lICAgICAqLworICAvKiAgICBtZWFuaW5nbGVzcyBpZiB0aGUgYXJndW1lbnRzIGFyZSB2ZXJ5IGxhcmdlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX01hdHJpeF9NdWx0aXBseSggY29uc3QgRlRfTWF0cml4KiAgYSwKICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICAgICAgICBiICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCmluZGV4IGYyMzljNzEuLjgzODJkNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKHNwZWNpZmljYXRpb24pLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDEsMTUgKzEwMSwxNSBAQAogICAgKiAgIFRoZSBudW1iZXIgb2YgdGFibGVzIGNoZWNrZWQgaW4gdGhpcyBtb2R1bGUuICBVc2UgaXQgYXMgYSBwYXJhbWV0ZXIKICAgICogICBmb3IgdGhlIGB0YWJsZS1sZW5ndGgnIGFyZ3VtZW50IG9mIGZ1bmN0aW9uIEBGVF9UcnVlVHlwZUdYX1ZhbGlkYXRlLgogICAgKi8KLSNkZWZpbmUgRlRfVkFMSURBVEVfR1hfTEVOR1RIICAgICAoRlRfVkFMSURBVEVfR1hfTEFTVF9JTkRFWCArIDEpCisjZGVmaW5lIEZUX1ZBTElEQVRFX0dYX0xFTkdUSCAgKCBGVF9WQUxJREFURV9HWF9MQVNUX0lOREVYICsgMSApCiAKICAgLyogKi8KIAogICAvKiBVcCB0byAweDEwMDAgaXMgdXNlZCBieSBvdHZhbGlkLgogICAgICBPeDJ4eHggaXMgcmVzZXJ2ZWQgZm9yIGZlYXR1cmUgT1QgZXh0ZW5zaW9uLiAqLwotI2RlZmluZSBGVF9WQUxJREFURV9HWF9TVEFSVCAweDQwMDAKLSNkZWZpbmUgRlRfVkFMSURBVEVfR1hfQklURklFTEQoIHRhZyApICAgICAgICAgICAgICAgICAgXAotICAoIEZUX1ZBTElEQVRFX0dYX1NUQVJUIDw8IEZUX1ZBTElEQVRFXyMjdGFnIyNfSU5ERVggKQorI2RlZmluZSBGVF9WQUxJREFURV9HWF9TVEFSVCAgMHg0MDAwCisjZGVmaW5lIEZUX1ZBTElEQVRFX0dYX0JJVEZJRUxEKCB0YWcgKSBcCisgICAgICAgICAgKCBGVF9WQUxJREFURV9HWF9TVEFSVCA8PCBGVF9WQUxJREFURV8jI3RhZyMjX0lOREVYICkKIAogCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oCmluZGV4IGJkNWNlYWEuLmRiMDMzZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBHemlwLWNvbXByZXNzZWQgc3RyZWFtIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTI5LDYgKzEyOSw5IEBACiAgICogQG5vdGU6CiAgICogICBUaGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gYEZUX0Vycl9VbmltcGxlbWVudGVkX0ZlYXR1cmUnIGlmIHlvdXIgYnVpbGQKICAgKiAgIG9mIEZyZWVUeXBlIHdhcyBub3QgY29tcGlsZWQgd2l0aCB6bGliIHN1cHBvcnQuCisgICoKKyAgKiBAc2luY2U6CisgICogICAyLjUuMQogICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR3ppcF9VbmNvbXByZXNzKCBGVF9NZW1vcnkgICAgICAgbWVtb3J5LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaAppbmRleCAxYTA0OWVmLi43OWVkZTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEZyZWVUeXBlIGdseXBoIGltYWdlIGZvcm1hdHMgYW5kIGRlZmF1bHQgcmFzdGVyIGludGVyZmFjZSAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTY5LDEzICsxNjksMTMgQEAKICAgLyogICAgICBARlRfUkVOREVSX01PREVfTENEX1YuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9QSVhFTF9NT0RFX0JHUkEgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBBbiBpbWFnZSB3aXRoIGZvdXIgOC1iaXQgY2hhbm5lbHMgcGVyIHBpeGVsLCByZXByZXNlbnRpbmcgYSAgICAgICovCi0gIC8qICAgICAgY29sb3IgaW1hZ2UgKHN1Y2ggYXMgZW1vdGljb25zKSB3aXRoIGFscGhhIGNoYW5uZWwuICBGb3IgZWFjaCAgICAqLwotICAvKiAgICAgIHBpeGVsLCB0aGUgZm9ybWF0IGlzIEJHUkEsIHdoaWNoIG1lYW5zLCB0aGUgYmx1ZSBjaGFubmVsIGNvbWVzICAgKi8KLSAgLyogICAgICBmaXJzdCBpbiBtZW1vcnkuICBUaGUgY29sb3IgY2hhbm5lbHMgYXJlIHByZS1tdWx0aXBsaWVkIGFuZCBpbiAgICovCi0gIC8qICAgICAgdGhlIHNSR0IgY29sb3JzcGFjZS4gIEZvciBleGFtcGxlLCBmdWxsIHJlZCBhdCBoYWxmLXRyYW5zbHVjZW50ICAqLwotICAvKiAgICAgIG9wYWNpdHkgd2lsbCBiZSByZXByZXNlbnRlZCBhcyBgMDAsMDAsODAsODAnLCBub3QgYDAwLDAwLEZGLDgwJy4gKi8KLSAgLyogICAgICBTZWUgYWxzbyBARlRfTE9BRF9DT0xPUi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgW1NpbmNlIDIuNV0gQW4gaW1hZ2Ugd2l0aCBmb3VyIDgtYml0IGNoYW5uZWxzIHBlciBwaXhlbCwgICAgICAgICAqLworICAvKiAgICAgIHJlcHJlc2VudGluZyBhIGNvbG9yIGltYWdlIChzdWNoIGFzIGVtb3RpY29ucykgd2l0aCBhbHBoYSAgICAgICAgKi8KKyAgLyogICAgICBjaGFubmVsLiAgRm9yIGVhY2ggcGl4ZWwsIHRoZSBmb3JtYXQgaXMgQkdSQSwgd2hpY2ggbWVhbnMsIHRoZSAgICovCisgIC8qICAgICAgYmx1ZSBjaGFubmVsIGNvbWVzIGZpcnN0IGluIG1lbW9yeS4gIFRoZSBjb2xvciBjaGFubmVscyBhcmUgICAgICAqLworICAvKiAgICAgIHByZS1tdWx0aXBsaWVkIGFuZCBpbiB0aGUgc1JHQiBjb2xvcnNwYWNlLiAgRm9yIGV4YW1wbGUsIGZ1bGwgICAgKi8KKyAgLyogICAgICByZWQgYXQgaGFsZi10cmFuc2x1Y2VudCBvcGFjaXR5IHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgICAgICAgICAgICovCisgIC8qICAgICAgYDAwLDAwLDgwLDgwJywgbm90IGAwMCwwMCxGRiw4MCcuICBTZWUgYWxzbyBARlRfTE9BRF9DT0xPUi4gICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiBlbnVtICBGVF9QaXhlbF9Nb2RlXwogICB7CkBAIC0zMDEsMTEgKzMwMSwxMSBAQAogICAvKiAgICAgICAgICAgICAgICAgIGVhY2ggb3V0bGluZSBwb2ludCdzIHR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgSWYgYml0fjAgaXMgdW5zZXQsIHRoZSBwb2ludCBpcyBgb2ZmJyB0aGUgY3VydmUsICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGkuZS4sIGEgQsOpemllciBjb250cm9sIHBvaW50LCB3aGlsZSBpdCBpcyBgb24nIGlmICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgaS5lLiwgYSBCZXppZXIgY29udHJvbCBwb2ludCwgd2hpbGUgaXQgaXMgYG9uJyBpZiAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgQml0fjEgaXMgbWVhbmluZ2Z1bCBmb3IgYG9mZicgcG9pbnRzIG9ubHkuICBJZiBzZXQsICAqLwotICAvKiAgICAgICAgICAgICAgICAgIGl0IGluZGljYXRlcyBhIHRoaXJkLW9yZGVyIELDqXppZXIgYXJjIGNvbnRyb2wgcG9pbnQ7ICovCisgIC8qICAgICAgICAgICAgICAgICAgaXQgaW5kaWNhdGVzIGEgdGhpcmQtb3JkZXIgQmV6aWVyIGFyYyBjb250cm9sIHBvaW50OyAqLwogICAvKiAgICAgICAgICAgICAgICAgIGFuZCBhIHNlY29uZC1vcmRlciBjb250cm9sIHBvaW50IGlmIHVuc2V0LiAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgSWYgYml0fjIgaXMgc2V0LCBiaXRzIDUtNyBjb250YWluIHRoZSBkcm9wLW91dCBtb2RlICAqLwpAQCAtNTMyLDcgKzUzMiw3IEBACiAgIC8qICAgIEEgZnVuY3Rpb24gcG9pbnRlciB0eXBlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHNpZ25hdHVyZSBvZiBhIGBjb25pYyAqLwogICAvKiAgICB0bycgZnVuY3Rpb24gZHVyaW5nIG91dGxpbmUgd2Fsa2luZyBvciBkZWNvbXBvc2l0aW9uLiAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgYGNvbmljIHRvJyBpcyBlbWl0dGVkIHRvIGluZGljYXRlIGEgc2Vjb25kLW9yZGVyIELDqXppZXIgYXJjIGluICAgKi8KKyAgLyogICAgQSBgY29uaWMgdG8nIGlzIGVtaXR0ZWQgdG8gaW5kaWNhdGUgYSBzZWNvbmQtb3JkZXIgQmV6aWVyIGFyYyBpbiAgICovCiAgIC8qICAgIHRoZSBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01NjQsMTIgKzU2NCwxMiBAQAogICAvKiAgICBBIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBzaWduYXR1cmUgb2YgYSBgY3ViaWMgKi8KICAgLyogICAgdG8nIGZ1bmN0aW9uIGR1cmluZyBvdXRsaW5lIHdhbGtpbmcgb3IgZGVjb21wb3NpdGlvbi4gICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBBIGBjdWJpYyB0bycgaXMgZW1pdHRlZCB0byBpbmRpY2F0ZSBhIHRoaXJkLW9yZGVyIELDqXppZXIgYXJjLiAgICAgICovCisgIC8qICAgIEEgYGN1YmljIHRvJyBpcyBlbWl0dGVkIHRvIGluZGljYXRlIGEgdGhpcmQtb3JkZXIgQmV6aWVyIGFyYy4gICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGNvbnRyb2wxIDo6IEEgcG9pbnRlciB0byB0aGUgZmlyc3QgQsOpemllciBjb250cm9sIHBvaW50LiAgICAgICAgICAgKi8KKyAgLyogICAgY29udHJvbDEgOjogQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBCZXppZXIgY29udHJvbCBwb2ludC4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjb250cm9sMiA6OiBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBCw6l6aWVyIGNvbnRyb2wgcG9pbnQuICAgICAgICAgICovCisgIC8qICAgIGNvbnRyb2wyIDo6IEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIEJlemllciBjb250cm9sIHBvaW50LiAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgdG8gICAgICAgOjogQSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgZW5kIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTk1LDE2ICs1OTUsMTYgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBBIHN0cnVjdHVyZSB0byBob2xkIHZhcmlvdXMgZnVuY3Rpb24gcG9pbnRlcnMgdXNlZCBkdXJpbmcgb3V0bGluZSAgKi8KLSAgLyogICAgZGVjb21wb3NpdGlvbiBpbiBvcmRlciB0byBlbWl0IHNlZ21lbnRzLCBjb25pYywgYW5kIGN1YmljIELDqXppZXJzLiAqLworICAvKiAgICBkZWNvbXBvc2l0aW9uIGluIG9yZGVyIHRvIGVtaXQgc2VnbWVudHMsIGNvbmljLCBhbmQgY3ViaWMgQmV6aWVycy4gKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBtb3ZlX3RvICA6OiBUaGUgYG1vdmUgdG8nIGVtaXR0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGxpbmVfdG8gIDo6IFRoZSBzZWdtZW50IGVtaXR0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY29uaWNfdG8gOjogVGhlIHNlY29uZC1vcmRlciBCw6l6aWVyIGFyYyBlbWl0dGVyLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb25pY190byA6OiBUaGUgc2Vjb25kLW9yZGVyIEJlemllciBhcmMgZW1pdHRlci4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGN1YmljX3RvIDo6IFRoZSB0aGlyZC1vcmRlciBCw6l6aWVyIGFyYyBlbWl0dGVyLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY3ViaWNfdG8gOjogVGhlIHRoaXJkLW9yZGVyIEJlemllciBhcmMgZW1pdHRlci4gICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBzaGlmdCAgICA6OiBUaGUgc2hpZnQgdGhhdCBpcyBhcHBsaWVkIHRvIGNvb3JkaW5hdGVzIGJlZm9yZSB0aGV5ICAgKi8KICAgLyogICAgICAgICAgICAgICAgYXJlIHNlbnQgdG8gdGhlIGVtaXR0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03MDEsNyArNzAxLDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIFRoZSBnbHlwaCBpbWFnZSBpcyBhIHZlY3RvcmlhbCBvdXRsaW5lIG1hZGUgb2YgbGluZSBzZWdtZW50cyAgICAgKi8KLSAgLyogICAgICBhbmQgQsOpemllciBhcmNzOyBpdCBjYW4gYmUgZGVzY3JpYmVkIGFzIGFuIEBGVF9PdXRsaW5lOyB5b3UgICAgICAqLworICAvKiAgICAgIGFuZCBCZXppZXIgYXJjczsgaXQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhbiBARlRfT3V0bGluZTsgeW91ICAgICAgKi8KICAgLyogICAgICBnZW5lcmFsbHkgd2FudCB0byBhY2Nlc3MgdGhlIGBvdXRsaW5lJyBmaWVsZCBvZiB0aGUgICAgICAgICAgICAgICovCiAgIC8qICAgICAgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUgdG8gcmVhZCBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwNjQsMjQgKzEwNjQsMjQgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGcmVlVHlwZSB1c2VkIHRvIHByb3ZpZGUgYW4gYXJlYSBvZiBtZW1vcnkgY2FsbGVkIHRoZSBgcmVuZGVyICAgICAgKi8KLSAgLyogICAgcG9vbCcgYXZhaWxhYmxlIHRvIGFsbCByZWdpc3RlcmVkIHJhc3RlcnMuICBUaGlzIHdhcyBub3QgdGhyZWFkICAgICovCi0gIC8qICAgIHNhZmUgaG93ZXZlciBhbmQgbm93IEZyZWVUeXBlIG5ldmVyIGFsbG9jYXRlcyB0aGlzIHBvb2wuICBOVUxMICAgICAqLwotICAvKiAgICBpcyBhbHdheXMgcGFzc2VkIGluIGFzIHBvb2xfYmFzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9vbCcgYXZhaWxhYmxlIHRvIGFsbCByZWdpc3RlcmVkIHJhc3Rlcml6ZXJzLiAgVGhpcyB3YXMgbm90ICAgICAgICovCisgIC8qICAgIHRocmVhZCBzYWZlLCBob3dldmVyLCBhbmQgbm93IEZyZWVUeXBlIG5ldmVyIGFsbG9jYXRlcyB0aGlzIHBvb2wuICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZWFjaCB0aW1lIHRoZSByZW5kZXIgcG9vbCBjaGFuZ2VzLCBvciBqdXN0ICovCi0gIC8qICAgIGFmdGVyIGEgbmV3IHJhc3RlciBvYmplY3QgaXMgY3JlYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhIG5ldyByYXN0ZXIgb2JqZWN0IGlzIGNyZWF0ZWQuICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICByYXN0ZXIgICAgOjogQSBoYW5kbGUgdG8gdGhlIG5ldyByYXN0ZXIgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBvb2xfYmFzZSA6OiBUaGUgYWRkcmVzcyBpbiBtZW1vcnkgb2YgdGhlIHJlbmRlciBwb29sLiAgICAgICAgICAgICAqLworICAvKiAgICBwb29sX2Jhc2UgOjogUHJldmlvdXNseSwgdGhlIGFkZHJlc3MgaW4gbWVtb3J5IG9mIHRoZSByZW5kZXIgcG9vbC4gKi8KKyAgLyogICAgICAgICAgICAgICAgIFNldCB0aGlzIHRvIE5VTEwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb29sX3NpemUgOjogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9vbF9zaXplIDo6IFByZXZpb3VzbHksIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSByZW5kZXIgcG9vbC4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICBTZXQgdGhpcyB0byAwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFJhc3RlcnMgc2hvdWxkIGlnbm9yZSB0aGUgcmVuZGVyIHBvb2wgYW5kIHJlbHkgb24gZHluYW1pYyBvciBzdGFjayAqLwotICAvKiAgICBhbGxvY2F0aW9uIGlmIHRoZXkgd2FudCB0byAoYSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IgaXMgICAgKi8KLSAgLyogICAgcGFzc2VkIHRvIHRoZSByYXN0ZXIgY29uc3RydWN0b3IpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJhc3Rlcml6ZXJzIHNob3VsZCByZWx5IG9uIGR5bmFtaWMgb3Igc3RhY2sgYWxsb2NhdGlvbiBpZiB0aGV5ICAgICAqLworICAvKiAgICB3YW50IHRvIChhIGhhbmRsZSB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciBpcyBwYXNzZWQgdG8gdGhlICAgICAgICAgKi8KKyAgLyogICAgcmFzdGVyaXplciBjb25zdHJ1Y3RvcikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIHZvaWQKICAgKCpGVF9SYXN0ZXJfUmVzZXRGdW5jKSggRlRfUmFzdGVyICAgICAgIHJhc3RlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaAppbmRleCBmNmFlMmJhLi40NDYxOWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGluY3JlbWVudGFsIGxvYWRpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfUEFSQU1FVEVSX1RBR1NfSAogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKQEAgLTMzMSwxOCArMzMyLDYgQEAKICAgdHlwZWRlZiBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMqICAgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlOwogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAY29uc3RhbnQ6Ci0gICAqICAgRlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMCi0gICAqCi0gICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZXMgdG8gaW5kaWNhdGUKLSAgICogICBhbiBpbmNyZW1lbnRhbCBsb2FkaW5nIG9iamVjdCB0byBiZSB1c2VkIGJ5IEZyZWVUeXBlLgotICAgKgotICAgKi8KLSNkZWZpbmUgRlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMICBGVF9NQUtFX1RBRyggJ2knLCAnbicsICdjJywgJ3InICkKLQogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaAppbmRleCBhMDIxYzgwLi4yYTI3MTk2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwIGdseXBocyAgICAgICAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfUEFSQU1FVEVSX1RBR1NfSAogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKQEAgLTQ0LDkgKzQ1LDE2IEBACiAgICAqICAgUmVkdWNlIGNvbG9yIGZyaW5nZXMgb2Ygc3VicGl4ZWwtcmVuZGVyZWQgYml0bWFwcy4KICAgICoKICAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIFN1YnBpeGVsIHJlbmRlcmluZyBleHBsb2l0cyB0aGUgY29sb3Itc3RyaXBlZCBzdHJ1Y3R1cmUgb2YgTENECi0gICAqICAgcGl4ZWxzLCBpbmNyZWFzaW5nIHRoZSBhdmFpbGFibGUgcmVzb2x1dGlvbiBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZQotICAgKiAgIHN0cmlwZSAodXN1YWxseSBob3Jpem9udGFsIFJHQikgYnkgYSBmYWN0b3Igb2Z+My4gIFNpbmNlIHRoZXNlCisgICAqICAgU2hvdWxkIHlvdSAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HIGluIHlvdXIKKyAgICogICBgZnRvcHRpb24uaCcsIHdoaWNoIGVuYWJsZXMgcGF0ZW50ZWQgQ2xlYXJUeXBlLXN0eWxlIHJlbmRlcmluZywKKyAgICogICB0aGUgTENELW9wdGltaXplZCBnbHlwaCBiaXRtYXBzIHNob3VsZCBiZSBmaWx0ZXJlZCB0byByZWR1Y2UgY29sb3IKKyAgICogICBmcmluZ2VzIGluaGVyZW50IHRvIHRoaXMgdGVjaG5vbG9neS4gIFRoZSBkZWZhdWx0IEZyZWVUeXBlIExDRAorICAgKiAgIHJlbmRlcmluZyB1c2VzIGRpZmZlcmVudCB0ZWNobm9sb2d5LCBhbmQgQVBJIGRlc2NyaWJlZCBiZWxvdywKKyAgICogICBhbHRob3VnaCBhdmFpbGFibGUsIGRvZXMgbm90aGluZy4KKyAgICoKKyAgICogICBDbGVhclR5cGUtc3R5bGUgTENEIHJlbmRlcmluZyBleHBsb2l0cyB0aGUgY29sb3Itc3RyaXBlZCBzdHJ1Y3R1cmUgb2YKKyAgICogICBMQ0QgcGl4ZWxzLCBpbmNyZWFzaW5nIHRoZSBhdmFpbGFibGUgcmVzb2x1dGlvbiBpbiB0aGUgZGlyZWN0aW9uIG9mCisgICAqICAgdGhlIHN0cmlwZSAodXN1YWxseSBob3Jpem9udGFsIFJHQikgYnkgYSBmYWN0b3Igb2Z+My4gIFNpbmNlIHRoZXNlCiAgICAqICAgc3VicGl4ZWxzIGFyZSBjb2xvciBwaXhlbHMsIHVzaW5nIHRoZW0gdW5maWx0ZXJlZCBjcmVhdGVzIHNldmVyZQogICAgKiAgIGNvbG9yIGZyaW5nZXMuICBVc2UgdGhlIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciBBUEkgdG8gc3BlY2lmeSBhCiAgICAqICAgbG93LXBhc3MgZmlsdGVyLCB3aGljaCBpcyB0aGVuIGFwcGxpZWQgdG8gc3VicGl4ZWwtcmVuZGVyZWQgYml0bWFwcwpAQCAtNTQsMTIgKzYyLDYgQEAKICAgICogICB0aGUgaGlnaGVyIHJlc29sdXRpb24gdG8gcmVkdWNlIGNvbG9yIGZyaW5nZXMsIG1ha2luZyB0aGUgZ2x5cGggaW1hZ2UKICAgICogICBzbGlnaHRseSBibHVycmllci4gIFBvc2l0aW9uYWwgaW1wcm92ZW1lbnRzIHdpbGwgcmVtYWluLgogICAgKgotICAgKiAgIE5vdGUgdGhhdCBubyBmaWx0ZXIgaXMgYWN0aXZlIGJ5IGRlZmF1bHQsIGFuZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMKLSAgICogICAqbm90KiBpbXBsZW1lbnRlZCBpbiBkZWZhdWx0IGJ1aWxkcyBvZiB0aGUgbGlicmFyeS4gIFlvdSBuZWVkIHRvCi0gICAqICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpbiB5b3VyIGBmdG9wdGlvbi5oJyBmaWxlCi0gICAqICAgaW4gb3JkZXIgdG8gYWN0aXZhdGUgaXQgYW5kIGV4cGxpY2l0bHkgY2FsbCBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIKLSAgICogICB0byBlbmFibGUgaXQuCi0gICAqCiAgICAqICAgQSBmaWx0ZXIgc2hvdWxkIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAgICAqCiAgICAqICAgMSkgSXQgc2hvdWxkIGJlIG5vcm1hbGl6ZWQsIG1lYW5pbmcgdGhlIHN1bSBvZiB0aGUgNX5jb21wb25lbnRzCkBAIC0yODAsMjIgKzI4Miw2IEBACiAKIAogICAvKgotICAgKiBAY29uc3RhbnQ6Ci0gICAqICAgRlRfUEFSQU1fVEFHX0xDRF9GSUxURVJfV0VJR0hUUwotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQW4gQEZUX1BhcmFtZXRlciB0YWcgdG8gYmUgdXNlZCB3aXRoIEBGVF9GYWNlX1Byb3BlcnRpZXMuICBUaGUKLSAgICogICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgZml2ZSBMQ0QgZmlsdGVyIHdlaWdodHMgZm9yIGEKLSAgICogICBnaXZlbiBmYWNlIChpZiB1c2luZyBARlRfTE9BRF9UQVJHRVRfTENELCBmb3IgZXhhbXBsZSksIG92ZXJyaWRpbmcKLSAgICogICB0aGUgZ2xvYmFsIGRlZmF1bHQgdmFsdWVzIG9yIHRoZSB2YWx1ZXMgc2V0IHVwIHdpdGgKLSAgICogICBARlRfTGlicmFyeV9TZXRfTGNkRmlsdGVyV2VpZ2h0cy4KLSAgICoKLSAgICovCi0jZGVmaW5lIEZUX1BBUkFNX1RBR19MQ0RfRklMVEVSX1dFSUdIVFMgXAotICAgICAgICAgIEZUX01BS0VfVEFHKCAnbCcsICdjJywgJ2QnLCAnZicgKQotCi0KLSAgLyoKICAgICogQHR5cGU6CiAgICAqICAgRlRfTGNkRml2ZVRhcEZpbHRlcgogICAgKgpAQCAtMzAzLDYgKzI4OSw5IEBACiAgICAqICAgQSB0eXBlZGVmIGZvciBwYXNzaW5nIHRoZSBmaXZlIExDRCBmaWx0ZXIgd2VpZ2h0cyB0bwogICAgKiAgIEBGVF9GYWNlX1Byb3BlcnRpZXMgd2l0aGluIGFuIEBGVF9QYXJhbWV0ZXIgc3RydWN0dXJlLgogICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi44CisgICAqCiAgICAqLwogI2RlZmluZSBGVF9MQ0RfRklMVEVSX0ZJVkVfVEFQUyAgNQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGxpc3QuaAppbmRleCA1MzA5Y2IxLi4xMTc0NzNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgR2VuZXJpYyBsaXN0IHN1cHBvcnQgZm9yIEZyZWVUeXBlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaAppbmRleCBhODJjOTVlLi4xNjE1OTEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGx6dy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIExaVy1jb21wcmVzc2VkIHN0cmVhbSBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKaW5kZXggYWQ5N2M2ZS4uYzFlNDk3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZGRpdGlvbmFsIE1hYy1zcGVjaWZpYyBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzUsMTEgKzM1LDEyIEBACiBGVF9CRUdJTl9IRUFERVIKIAogCi0vKiBnY2MtMy40LjEgYW5kIGxhdGVyIGNhbiB3YXJuIGFib3V0IGZ1bmN0aW9ucyB0YWdnZWQgYXMgZGVwcmVjYXRlZCAqLworICAvKiBnY2MtMy4xIGFuZCBsYXRlciBjYW4gd2FybiBhYm91dCBmdW5jdGlvbnMgdGFnZ2VkIGFzIGRlcHJlY2F0ZWQgKi8KICNpZm5kZWYgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEUKLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgXAotICAgICgoX19HTlVDX18gPj0gNCkgfHwgKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMSkpKQotI2RlZmluZSBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURSAgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCisjaWYgZGVmaW5lZCggX19HTlVDX18gKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBcCisgICAgKCAoIF9fR05VQ19fID49IDQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgICBcCisgICAgICAoICggX19HTlVDX18gPT0gMyApICYmICggX19HTlVDX01JTk9SX18gPj0gMSApICkgKQorI2RlZmluZSBGVF9ERVBSRUNBVEVEX0FUVFJJQlVURSAgX19hdHRyaWJ1dGVfXygoIGRlcHJlY2F0ZWQgKSkKICNlbHNlCiAjZGVmaW5lIEZUX0RFUFJFQ0FURURfQVRUUklCVVRFCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKaW5kZXggYzQxYjgwZS4uOTk0ODEwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgTXVsdGlwbGUgTWFzdGVyIGZvbnQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3OCw3ICsxNzgsOCBAQAogICAvKiAgICBzdHJpZCAgOjogVGhlIGVudHJ5IGluIGBuYW1lJyB0YWJsZSBpZGVudGlmeWluZyB0aGlzIGluc3RhbmNlLiAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHBzaWQgICA6OiBUaGUgZW50cnkgaW4gYG5hbWUnIHRhYmxlIGlkZW50aWZ5aW5nIGEgUG9zdFNjcmlwdCBuYW1lICAqLwotICAvKiAgICAgICAgICAgICAgZm9yIHRoaXMgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgIGZvciB0aGlzIGluc3RhbmNlLiAgVmFsdWUgMHhGRkZGIGluZGljYXRlcyBhIG1pc3NpbmcgICAgICovCisgIC8qICAgICAgICAgICAgICBlbnRyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1Zhcl9OYW1lZF9TdHlsZV8KICAgewpAQCAtMTk1LDcgKzE5Niw3IEBACiAgIC8qICAgIEZUX01NX1ZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgc3RydWN0dXJlIHRvIG1vZGVsIHRoZSBheGVzIGFuZCBzcGFjZSBvZiBhIEFkb2JlIE1NLCBUcnVlVHlwZSAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB0byBtb2RlbCB0aGUgYXhlcyBhbmQgc3BhY2Ugb2YgYW4gQWRvYmUgTU0sIFRydWVUeXBlICAgKi8KICAgLyogICAgR1gsIG9yIE9wZW5UeXBlIHZhcmlhdGlvbiBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBTb21lIGZpZWxkcyBhcmUgc3BlY2lmaWMgdG8gb25lIGZvcm1hdCBhbmQgbm90IHRvIHRoZSBvdGhlcnMuICAgICAgKi8KQEAgLTI4NSw3ICsyODYsNyBAQAogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgYW1hc3RlciA6OiBUaGUgdmFyaWF0aW9uIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgQWxsb2NhdGVzIGEgZGF0YSBzdHJ1Y3R1cmUsIHdoaWNoIHRoZSB1c2VyIG11c3QgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgIGRlYWxsb2NhdGUgd2l0aCBgZnJlZScgYWZ0ZXIgdXNlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICBkZWFsbG9jYXRlIHdpdGggYSBjYWxsIHRvIEBGVF9Eb25lX01NX1ZhciBhZnRlciB1c2UuICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yOTgsNiArMjk5LDI2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RvbmVfTU1fVmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgQEZUX0dldF9NTV9WYXIuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgb2YgdGhlIGZhY2UncyBwYXJlbnQgbGlicmFyeSBvYmplY3QgdGhhdCB3YXMgICAqLworICAvKiAgICAgICAgICAgICAgIHVzZWQgaW4gdGhlIGNhbGwgdG8gQEZUX0dldF9NTV9WYXIgdG8gY3JlYXRlIGBhbWFzdGVyJy4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9Eb25lX01NX1ZhciggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICBGVF9NTV9WYXIgICAqYW1hc3RlciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMyMSw2ICszNDIsMTUgQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFtTaW5jZSAyLjguMV0gVG8gcmVzZXQgYWxsIGF4ZXMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLCBjYWxsIHRoZSAgICAqLworICAvKiAgICBmdW5jdGlvbiB3aXRoIGBudW1fY29vcmRzJyBzZXQgdG8gemVybyBhbmQgYGNvb3Jkcycgc2V0IHRvIE5VTEwuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFtTaW5jZSAyLjldIElmIGBudW1fY29vcmRzJyBpcyBsYXJnZXIgdGhhbiB6ZXJvLCB0aGlzIGZ1bmN0aW9uICAgICAqLworICAvKiAgICBzZXRzIHRoZSBARlRfRkFDRV9GTEFHX1ZBUklBVElPTiBiaXQgaW4gQEZUX0ZhY2UncyBgZmFjZV9mbGFncycgICAgKi8KKyAgLyogICAgZmllbGQgKGkuZS4sIEBGVF9JU19WQVJJQVRJT04gd2lsbCByZXR1cm4gdHJ1ZSkuICBJZiBgbnVtX2Nvb3JkcycgICovCisgIC8qICAgIGlzIHplcm8sIHRoaXMgYml0IGZsYWcgZ2V0cyB1bnNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgbnVtX2Nvb3JkcywKQEAgLTM1MSw2ICszODEsMTcgQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFtTaW5jZSAyLjguMV0gVG8gcmVzZXQgYWxsIGF4ZXMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLCBjYWxsIHRoZSAgICAqLworICAvKiAgICBmdW5jdGlvbiB3aXRoIGBudW1fY29vcmRzJyBzZXQgdG8gemVybyBhbmQgYGNvb3Jkcycgc2V0IHRvIE5VTEwuICAgKi8KKyAgLyogICAgW1NpbmNlIDIuOV0gYERlZmF1bHQgdmFsdWVzJyBtZWFucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5hbWVkICAgICovCisgIC8qICAgIGluc3RhbmNlIChvciB0aGUgYmFzZSBmb250IGlmIG5vIG5hbWVkIGluc3RhbmNlIGlzIHNlbGVjdGVkKS4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgW1NpbmNlIDIuOV0gSWYgYG51bV9jb29yZHMnIGlzIGxhcmdlciB0aGFuIHplcm8sIHRoaXMgZnVuY3Rpb24gICAgICovCisgIC8qICAgIHNldHMgdGhlIEBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OIGJpdCBpbiBARlRfRmFjZSdzIGBmYWNlX2ZsYWdzJyAgICAqLworICAvKiAgICBmaWVsZCAoaS5lLiwgQEZUX0lTX1ZBUklBVElPTiB3aWxsIHJldHVybiB0cnVlKS4gIElmIGBudW1fY29vcmRzJyAgKi8KKyAgLyogICAgaXMgemVybywgdGhpcyBiaXQgZmxhZyBnZXRzIHVuc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKQEAgLTM4MSw2ICs0MjIsOSBAQAogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi43LjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKQEAgLTQxNSw2ICs0NTksMTcgQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFtTaW5jZSAyLjguMV0gVG8gcmVzZXQgYWxsIGF4ZXMgdG8gdGhlIGRlZmF1bHQgdmFsdWVzLCBjYWxsIHRoZSAgICAqLworICAvKiAgICBmdW5jdGlvbiB3aXRoIGBudW1fY29vcmRzJyBzZXQgdG8gemVybyBhbmQgYGNvb3Jkcycgc2V0IHRvIE5VTEwuICAgKi8KKyAgLyogICAgW1NpbmNlIDIuOV0gYERlZmF1bHQgdmFsdWVzJyBtZWFucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5hbWVkICAgICovCisgIC8qICAgIGluc3RhbmNlIChvciB0aGUgYmFzZSBmb250IGlmIG5vIG5hbWVkIGluc3RhbmNlIGlzIHNlbGVjdGVkKS4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgW1NpbmNlIDIuOV0gSWYgYG51bV9jb29yZHMnIGlzIGxhcmdlciB0aGFuIHplcm8sIHRoaXMgZnVuY3Rpb24gICAgICovCisgIC8qICAgIHNldHMgdGhlIEBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OIGJpdCBpbiBARlRfRmFjZSdzIGBmYWNlX2ZsYWdzJyAgICAqLworICAvKiAgICBmaWVsZCAoaS5lLiwgQEZUX0lTX1ZBUklBVElPTiB3aWxsIHJldHVybiB0cnVlKS4gIElmIGBudW1fY29vcmRzJyAgKi8KKyAgLyogICAgaXMgemVybywgdGhpcyBiaXQgZmxhZyBnZXRzIHVuc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfU2V0X01NX0JsZW5kX0Nvb3JkaW5hdGVzKCBGVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLApAQCAtNDQ2LDYgKzUwMSw5IEBACiAgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAyLjcuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCkBAIC00NzQsMTEgKzUzMiwxMDEgQEAKICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoaXMgaXMgYW5vdGhlciBuYW1lIG9mIEBGVF9HZXRfTU1fQmxlbmRfQ29vcmRpbmF0ZXMuICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuNy4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0dldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApOwogCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVkFSX0FYSVNfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBsaXN0IG9mIGJpdCBmbGFncyB1c2VkIGluIHRoZSByZXR1cm4gdmFsdWUgb2YgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9HZXRfVmFyX0F4aXNfRmxhZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1ZBUl9BWElTX0ZMQUdfSElEREVOIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSB2YXJpYXRpb24gYXhpcyBzaG91bGQgbm90IGJlIGV4cG9zZWQgdG8gdXNlciBpbnRlcmZhY2VzLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAyLjguMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX1ZBUl9BWElTX0ZMQUdfSElEREVOICAxCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfVmFyX0F4aXNfRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHZXQgdGhlIGBmbGFncycgZmllbGQgb2YgYW4gT3BlblR5cGUgVmFyaWF0aW9uIEF4aXMgUmVjb3JkLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdCBtZWFuaW5nZnVsIGZvciBBZG9iZSBNTSBmb250cyAoYCpmbGFncycgaXMgYWx3YXlzIHplcm8pLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1hc3RlciAgICAgOjogVGhlIHZhcmlhdGlvbiBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXhpc19pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIHJlcXVlc3RlZCB2YXJpYXRpb24gYXhpcy4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmxhZ3MgICAgICA6OiBUaGUgYGZsYWdzJyBmaWVsZC4gIFNlZSBARlRfVkFSX0FYSVNfRkxBR19YWFggZm9yICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgcG9zc2libGUgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuOC4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9WYXJfQXhpc19GbGFncyggRlRfTU1fVmFyKiAgbWFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGF4aXNfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCogICAgZmxhZ3MgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NldF9OYW1lZF9JbnN0YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNldCBvciBjaGFuZ2UgdGhlIGN1cnJlbnQgbmFtZWQgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZS4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaW5zdGFuY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSByZXF1ZXN0ZWQgaW5zdGFuY2UsIHN0YXJ0aW5nICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIHdpdGggdmFsdWUgMS4gIElmIHNldCB0byB2YWx1ZSAwLCBGcmVlVHlwZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hlcyB0byBmb250IGFjY2VzcyB3aXRob3V0IGEgbmFtZWQgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGZ1bmN0aW9uIHVzZXMgdGhlIHZhbHVlIG9mIGBpbnN0YW5jZV9pbmRleCcgdG8gc2V0IGJpdHMgMTYtMzAgICovCisgIC8qICAgIG9mIHRoZSBmYWNlJ3MgYGZhY2VfaW5kZXgnIGZpZWxkLiAgSXQgYWxzbyByZXNldHMgYW55IHZhcmlhdGlvbiAgICAqLworICAvKiAgICBhcHBsaWVkIHRvIHRoZSBmb250LCBhbmQgdGhlIEBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OIGJpdCBvZiB0aGUgICAgKi8KKyAgLyogICAgZmFjZSdzIGBmYWNlX2ZsYWdzJyBmaWVsZCBnZXRzIHJlc2V0IHRvIHplcm8gKGkuZS4sICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9JU19WQVJJQVRJT04gd2lsbCByZXR1cm4gZmFsc2UpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRm9yIEFkb2JlIE1NIGZvbnRzICh3aGljaCBkb24ndCBoYXZlIG5hbWVkIGluc3RhbmNlcykgdGhpcyAgICAgICAgICovCisgIC8qICAgIGZ1bmN0aW9uIHNpbXBseSByZXNldHMgdGhlIGN1cnJlbnQgZmFjZSB0byB0aGUgZGVmYXVsdCBpbnN0YW5jZS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NldF9OYW1lZF9JbnN0YW5jZSggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBpbnN0YW5jZV9pbmRleCApOworCiAgIC8qICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oCmluZGV4IDQxNDdhYWQuLmE2ZWI4NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTMyMywxNiArMzIzLDE1IEBACiAgICAqICAgICAgIFRoZSBtb2R1bGUgbmFtZS4KICAgICoKICAgICogICAgcHJvcGVydHlfbmFtZSA6OgotICAgKiAgICAgICBUaGUgcHJvcGVydHkgbmFtZS4gIFByb3BlcnRpZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgYFN5bm9wc2lzJwotICAgKiAgICAgICBzdWJzZWN0aW9uIG9mIHRoZSBtb2R1bGUncyBkb2N1bWVudGF0aW9uLgorICAgKiAgICAgICBUaGUgcHJvcGVydHkgbmFtZS4gIFByb3BlcnRpZXMgYXJlIGRlc2NyaWJlZCBpbiBzZWN0aW9uCisgICAqICAgICAgIEBwcm9wZXJ0aWVzLgogICAgKgogICAgKiAgICAgICBOb3RlIHRoYXQgb25seSBhIGZldyBtb2R1bGVzIGhhdmUgcHJvcGVydGllcy4KICAgICoKICAgICogICAgdmFsdWUgOjoKICAgICogICAgICAgQSBnZW5lcmljIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBvciBzdHJ1Y3R1cmUgdGhhdCBnaXZlcyB0aGUgbmV3CiAgICAqICAgICAgIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS4gIFRoZSBleGFjdCBkZWZpbml0aW9uIG9mIGB2YWx1ZScgaXMKLSAgICogICAgICAgZGVwZW5kZW50IG9uIHRoZSBwcm9wZXJ0eTsgc2VlIHRoZSBgU3lub3BzaXMnIHN1YnNlY3Rpb24gb2YgdGhlCi0gICAqICAgICAgIG1vZHVsZSdzIGRvY3VtZW50YXRpb24uCisgICAqICAgICAgIGRlcGVuZGVudCBvbiB0aGUgcHJvcGVydHk7IHNlZSBzZWN0aW9uIEBwcm9wZXJ0aWVzLgogICAgKgogICAgKiBAcmV0dXJuOgogICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC0zOTAsMTUgKzM4OSwxNCBAQAogICAgKiAgICAgICBUaGUgbW9kdWxlIG5hbWUuCiAgICAqCiAgICAqICAgIHByb3BlcnR5X25hbWUgOjoKLSAgICogICAgICAgVGhlIHByb3BlcnR5IG5hbWUuICBQcm9wZXJ0aWVzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGBTeW5vcHNpcycKLSAgICogICAgICAgc3Vic2VjdGlvbiBvZiB0aGUgbW9kdWxlJ3MgZG9jdW1lbnRhdGlvbi4KKyAgICogICAgICAgVGhlIHByb3BlcnR5IG5hbWUuICBQcm9wZXJ0aWVzIGFyZSBkZXNjcmliZWQgaW4gc2VjdGlvbgorICAgKiAgICAgICBAcHJvcGVydGllcy4KICAgICoKICAgICogQGlub3V0OgogICAgKiAgICB2YWx1ZSA6OgogICAgKiAgICAgICBBIGdlbmVyaWMgcG9pbnRlciB0byBhIHZhcmlhYmxlIG9yIHN0cnVjdHVyZSB0aGF0IGdpdmVzIHRoZQogICAgKiAgICAgICB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuICBUaGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgdmFsdWUnIGlzCi0gICAqICAgICAgIGRlcGVuZGVudCBvbiB0aGUgcHJvcGVydHk7IHNlZSB0aGUgYFN5bm9wc2lzJyBzdWJzZWN0aW9uIG9mIHRoZQotICAgKiAgICAgICBtb2R1bGUncyBkb2N1bWVudGF0aW9uLgorICAgKiAgICAgICBkZXBlbmRlbnQgb24gdGhlIHByb3BlcnR5OyBzZWUgc2VjdGlvbiBAcHJvcGVydGllcy4KICAgICoKICAgICogQHJldHVybjoKICAgICogICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLgpAQCAtNDQ2LDggKzQ0NCw4IEBACiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBJZiBjb21waWxhdGlvbiBvcHRpb24gRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTIGlzICAgKi8KICAgLyogICAgc2V0LCB0aGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQgICAgICovCi0gIC8qICAgIHZhcmlhYmxlIHRvIGNvbnRyb2wgZHJpdmVyIHByb3BlcnRpZXMuICBTZWUgc2VjdGlvbnMgQGF1dG9faGludGVyLCAqLwotICAvKiAgICBAY2ZmX2RyaXZlciwgQHBjZl9kcml2ZXIsIGFuZCBAdHRfZHJpdmVyIGZvciBtb3JlLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmFyaWFibGUgdG8gY29udHJvbCBkcml2ZXIgcHJvcGVydGllcy4gIFNlZSBzZWN0aW9uIEBwcm9wZXJ0aWVzICAgICovCisgIC8qICAgIGZvciBtb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgSWYgdGhlIGNvbXBpbGF0aW9uIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4gICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDc1LDYgKzQ3Myw5IEBACiAgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBsaWJyYXJ5IDo6IEEgaGFuZGxlIHRvIGEgbmV3IGxpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAyLjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggdm9pZCApCiAgIEZUX1NldF9EZWZhdWx0X1Byb3BlcnRpZXMoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oCmluZGV4IDdmNjA4MzcuLmUwZmMxMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgbW9kdWxlIGVycm9yIG9mZnNldHMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmgKaW5kZXggYjVkMjdjZi4uMjY3MzFjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIE9wZW5UeXBlIHRhYmxlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmgKaW5kZXggMDdmNzNlYi4uODkzODlhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBTdXBwb3J0IGZvciB0aGUgRlRfT3V0bGluZSB0eXBlIHVzZWQgdG8gc3RvcmUgZ2x5cGggc2hhcGVzIG9mICAgICAgICAqLwogLyogICAgbW9zdCBzY2FsYWJsZSBmb250IGZvcm1hdHMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTg5LDcgKzg5LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBXYWxrIG92ZXIgYW4gb3V0bGluZSdzIHN0cnVjdHVyZSB0byBkZWNvbXBvc2UgaXQgaW50byBpbmRpdmlkdWFsICAgKi8KLSAgLyogICAgc2VnbWVudHMgYW5kIELDqXppZXIgYXJjcy4gIFRoaXMgZnVuY3Rpb24gYWxzbyBlbWl0cyBgbW92ZSB0bycgICAgICAqLworICAvKiAgICBzZWdtZW50cyBhbmQgQmV6aWVyIGFyY3MuICBUaGlzIGZ1bmN0aW9uIGFsc28gZW1pdHMgYG1vdmUgdG8nICAgICAgKi8KICAgLyogICAgb3BlcmF0aW9ucyB0byBpbmRpY2F0ZSB0aGUgc3RhcnQgb2YgbmV3IGNvbnRvdXJzIGluIHRoZSBvdXRsaW5lLiAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE5MCw5ICsxOTAsNiBAQAogICAvKiAgICBJZiB0aGUgb3V0bGluZSdzIGBvd25lcicgZmllbGQgaXMgbm90IHNldCwgb25seSB0aGUgb3V0bGluZSAgICAgICAgKi8KICAgLyogICAgZGVzY3JpcHRvciB3aWxsIGJlIHJlbGVhc2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgcmVhc29uIHdoeSB0aGlzIGZ1bmN0aW9uIHRha2VzIGFuIGBsaWJyYXJ5JyBwYXJhbWV0ZXIgaXMgICAgICAgKi8KLSAgLyogICAgc2ltcGx5IHRvIHVzZSBmdF9tZW1fZnJlZSgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfT3V0bGluZV9Eb25lKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSApOwpAQCAtMjMyLDEwICsyMjksMTAgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBSZXR1cm4gYW4gb3V0bGluZSdzIGBjb250cm9sIGJveCcuICBUaGUgY29udHJvbCBib3ggZW5jbG9zZXMgYWxsICAgKi8KLSAgLyogICAgdGhlIG91dGxpbmUncyBwb2ludHMsIGluY2x1ZGluZyBCw6l6aWVyIGNvbnRyb2wgcG9pbnRzLiAgVGhvdWdoIGl0ICAqLworICAvKiAgICB0aGUgb3V0bGluZSdzIHBvaW50cywgaW5jbHVkaW5nIEJlemllciBjb250cm9sIHBvaW50cy4gIFRob3VnaCBpdCAgKi8KICAgLyogICAgY29pbmNpZGVzIHdpdGggdGhlIGV4YWN0IGJvdW5kaW5nIGJveCBmb3IgbW9zdCBnbHlwaHMsIGl0IGNhbiBiZSAgICovCiAgIC8qICAgIHNsaWdodGx5IGxhcmdlciBpbiBzb21lIHNpdHVhdGlvbnMgKGxpa2Ugd2hlbiByb3RhdGluZyBhbiBvdXRsaW5lICAqLwotICAvKiAgICB0aGF0IGNvbnRhaW5zIELDqXppZXIgb3V0c2lkZSBhcmNzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRoYXQgY29udGFpbnMgQmV6aWVyIG91dHNpZGUgYXJjcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgQ29tcHV0aW5nIHRoZSBjb250cm9sIGJveCBpcyB2ZXJ5IGZhc3QsIHdoaWxlIGdldHRpbmcgdGhlIGJvdW5kaW5nICovCiAgIC8qICAgIGJveCBjYW4gdGFrZSBtdWNoIG1vcmUgdGltZSBhcyBpdCBuZWVkcyB0byB3YWxrIG92ZXIgYWxsIHNlZ21lbnRzICAqLwpAQCAtMzg1LDYgKzM4Miw5IEBACiAgIC8qICAgIEBGVF9PdXRsaW5lX0VtYm9sZGVuLCB3aGljaCB1c2VzIHRoZSBzYW1lIHN0cmVuZ3RoIGluIGJvdGggICAgICAgICAqLwogICAvKiAgICBkaXJlY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAyLjQuMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9PdXRsaW5lX0VtYm9sZGVuWFkoIEZUX091dGxpbmUqICBvdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICB4c3RyZW5ndGgsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGFyYW1zLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGFyYW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5MDA2YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRwYXJhbXMuaApAQCAtMCwwICsxLDIwNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRwYXJhbXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIEFQSSBmb3IgcG9zc2libGUgRlRfUGFyYW1ldGVyIHRhZ3MgKHNwZWNpZmljYXRpb24gb25seSkuICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDE3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIEZUUEFSQU1TX0hfCisjZGVmaW5lIEZUUEFSQU1TX0hfCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisjaWZkZWYgRlJFRVRZUEVfSAorI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKKyNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgorI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCisjZW5kaWYKKworCitGVF9CRUdJTl9IRUFERVIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAc2VjdGlvbjoKKyAgICogICBwYXJhbWV0ZXJfdGFncworICAgKgorICAgKiBAdGl0bGU6CisgICAqICAgUGFyYW1ldGVyIFRhZ3MKKyAgICoKKyAgICogQGFic3RyYWN0OgorICAgKiAgIE1hY3JvcyBmb3IgZHJpdmVyIHByb3BlcnR5IGFuZCBmb250IGxvYWRpbmcgcGFyYW1ldGVyIHRhZ3MuCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGlzIHNlY3Rpb24gY29udGFpbnMgbWFjcm9zIGZvciB0aGUgQEZUX1BhcmFtZXRlciBzdHJ1Y3R1cmUgdGhhdCBhcmUKKyAgICogICB1c2VkIHdpdGggdmFyaW91cyBmdW5jdGlvbnMgdG8gYWN0aXZhdGUgc29tZSBzcGVjaWFsIGZ1bmN0aW9uYWxpdHkgb3IKKyAgICogICBkaWZmZXJlbnQgYmVoYXZpb3VyIG9mIHZhcmlvdXMgY29tcG9uZW50cyBvZiBGcmVlVHlwZS4KKyAgICoKKyAgICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBjb25zdGFudDoKKyAgICogICBGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX0ZBTUlMWQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSB0YWcgZm9yIEBGVF9QYXJhbWV0ZXIgdG8gbWFrZSBARlRfT3Blbl9GYWNlIGlnbm9yZSB0eXBvZ3JhcGhpYworICAgKiAgIGZhbWlseSBuYW1lcyBpbiB0aGUgYG5hbWUnIHRhYmxlIChpbnRyb2R1Y2VkIGluIE9wZW5UeXBlIHZlcnNpb24KKyAgICogICAxLjQpLiAgVXNlIHRoaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgc3lzdGVtcyB0aGF0CisgICAqICAgaGF2ZSBhIGZvdXItZmFjZXMtcGVyLWZhbWlseSByZXN0cmljdGlvbi4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOAorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfUEFSQU1fVEFHX0lHTk9SRV9UWVBPR1JBUEhJQ19GQU1JTFkgXAorICAgICAgICAgIEZUX01BS0VfVEFHKCAnaScsICdnJywgJ3AnLCAnZicgKQorCisKKyAgLyogdGhpcyBjb25zdGFudCBpcyBkZXByZWNhdGVkICovCisjZGVmaW5lIEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX0ZBTUlMWSBcCisgICAgICAgICAgRlRfUEFSQU1fVEFHX0lHTk9SRV9UWVBPR1JBUEhJQ19GQU1JTFkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGNvbnN0YW50OgorICAgKiAgIEZUX1BBUkFNX1RBR19JR05PUkVfVFlQT0dSQVBISUNfU1VCRkFNSUxZCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIHRhZyBmb3IgQEZUX1BhcmFtZXRlciB0byBtYWtlIEBGVF9PcGVuX0ZhY2UgaWdub3JlIHR5cG9ncmFwaGljCisgICAqICAgc3ViZmFtaWx5IG5hbWVzIGluIHRoZSBgbmFtZScgdGFibGUgKGludHJvZHVjZWQgaW4gT3BlblR5cGUgdmVyc2lvbgorICAgKiAgIDEuNCkuICBVc2UgdGhpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBzeXN0ZW1zIHRoYXQKKyAgICogICBoYXZlIGEgZm91ci1mYWNlcy1wZXItZmFtaWx5IHJlc3RyaWN0aW9uLgorICAgKgorICAgKiBAc2luY2U6CisgICAqICAgMi44CisgICAqCisgICAqLworI2RlZmluZSBGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX1NVQkZBTUlMWSBcCisgICAgICAgICAgRlRfTUFLRV9UQUcoICdpJywgJ2cnLCAncCcsICdzJyApCisKKworICAvKiB0aGlzIGNvbnN0YW50IGlzIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfU1VCRkFNSUxZIFwKKyAgICAgICAgICBGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX1NVQkZBTUlMWQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY29uc3RhbnQ6CisgICAqICAgRlRfUEFSQU1fVEFHX0lOQ1JFTUVOVEFMCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBARlRfUGFyYW1ldGVyIHRhZyB0byBiZSB1c2VkIHdpdGggQEZUX09wZW5fRmFjZSB0byBpbmRpY2F0ZQorICAgKiAgIGluY3JlbWVudGFsIGdseXBoIGxvYWRpbmcuCisgICAqCisgICAqLworI2RlZmluZSBGVF9QQVJBTV9UQUdfSU5DUkVNRU5UQUwgXAorICAgICAgICAgIEZUX01BS0VfVEFHKCAnaScsICduJywgJ2MnLCAncicgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBjb25zdGFudDoKKyAgICogICBGVF9QQVJBTV9UQUdfTENEX0ZJTFRFUl9XRUlHSFRTCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBARlRfUGFyYW1ldGVyIHRhZyB0byBiZSB1c2VkIHdpdGggQEZUX0ZhY2VfUHJvcGVydGllcy4gIFRoZQorICAgKiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBmaXZlIExDRCBmaWx0ZXIgd2VpZ2h0cyBmb3IgYQorICAgKiAgIGdpdmVuIGZhY2UgKGlmIHVzaW5nIEBGVF9MT0FEX1RBUkdFVF9MQ0QsIGZvciBleGFtcGxlKSwgb3ZlcnJpZGluZworICAgKiAgIHRoZSBnbG9iYWwgZGVmYXVsdCB2YWx1ZXMgb3IgdGhlIHZhbHVlcyBzZXQgdXAgd2l0aAorICAgKiAgIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlcldlaWdodHMuCisgICAqCisgICAqIEBzaW5jZToKKyAgICogICAyLjgKKyAgICoKKyAgICovCisjZGVmaW5lIEZUX1BBUkFNX1RBR19MQ0RfRklMVEVSX1dFSUdIVFMgXAorICAgICAgICAgIEZUX01BS0VfVEFHKCAnbCcsICdjJywgJ2QnLCAnZicgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBjb25zdGFudDoKKyAgICogICBGVF9QQVJBTV9UQUdfUkFORE9NX1NFRUQKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEFuIEBGVF9QYXJhbWV0ZXIgdGFnIHRvIGJlIHVzZWQgd2l0aCBARlRfRmFjZV9Qcm9wZXJ0aWVzLiAgVGhlCisgICAqICAgY29ycmVzcG9uZGluZyAzMmJpdCBzaWduZWQgaW50ZWdlciBhcmd1bWVudCBvdmVycmlkZXMgdGhlIGZvbnQKKyAgICogICBkcml2ZXIncyByYW5kb20gc2VlZCB2YWx1ZSB3aXRoIGEgZmFjZS1zcGVjaWZpYyBvbmU7IHNlZQorICAgKiAgIEByYW5kb20tc2VlZC4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOAorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfUEFSQU1fVEFHX1JBTkRPTV9TRUVEIFwKKyAgICAgICAgICBGVF9NQUtFX1RBRyggJ3MnLCAnZScsICdlJywgJ2QnICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAY29uc3RhbnQ6CisgICAqICAgRlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBbiBARlRfUGFyYW1ldGVyIHRhZyB0byBiZSB1c2VkIHdpdGggQEZUX0ZhY2VfUHJvcGVydGllcy4gIFRoZQorICAgKiAgIGNvcnJlc3BvbmRpbmcgQm9vbGVhbiBhcmd1bWVudCBzcGVjaWZpZXMgd2hldGhlciB0byBhcHBseSBzdGVtCisgICAqICAgZGFya2VuaW5nLCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgZGVmYXVsdCB2YWx1ZXMgb3IgdGhlIHZhbHVlcyBzZXQgdXAKKyAgICogICB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQgKHNlZSBAbm8tc3RlbS1kYXJrZW5pbmcpLgorICAgKgorICAgKiAgIFRoaXMgaXMgYSBwYXNzaXZlIHNldHRpbmcgdGhhdCBvbmx5IHRha2VzIGVmZmVjdCBpZiB0aGUgZm9udCBkcml2ZXIKKyAgICogICBvciBhdXRvaGludGVyIGhvbm9ycyBpdCwgd2hpY2ggdGhlIENGRiwgVHlwZX4xLCBhbmQgQ0lEIGRyaXZlcnMKKyAgICogICBhbHdheXMgZG8sIGJ1dCB0aGUgYXV0b2hpbnRlciBvbmx5IGluIGBsaWdodCcgaGludGluZyBtb2RlIChhcyBvZgorICAgKiAgIHZlcnNpb24gMi45KS4KKyAgICoKKyAgICogQHNpbmNlOgorICAgKiAgIDIuOAorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfUEFSQU1fVEFHX1NURU1fREFSS0VOSU5HIFwKKyAgICAgICAgICBGVF9NQUtFX1RBRyggJ2QnLCAnYScsICdyJywgJ2snICkKKworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqCisgICogQGNvbnN0YW50OgorICAqICAgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORworICAqCisgICogQGRlc2NyaXB0aW9uOgorICAqICAgRGVwcmVjYXRlZCwgbm8gZWZmZWN0LgorICAqCisgICogICBQcmV2aW91c2x5OiBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBhbiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZSB0bworICAqICAgaW5kaWNhdGUgdGhhdCB1bnBhdGVudGVkIG1ldGhvZHMgb25seSBzaG91bGQgYmUgdXNlZCBieSB0aGUgVHJ1ZVR5cGUKKyAgKiAgIGJ5dGVjb2RlIGludGVycHJldGVyIGZvciBhIHR5cGVmYWNlIG9wZW5lZCBieSBARlRfT3Blbl9GYWNlLgorICAqCisgICovCisjZGVmaW5lIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcgXAorICAgICAgICAgIEZUX01BS0VfVEFHKCAndScsICduJywgJ3AnLCAnYScgKQorCisKKyAgLyogKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIEZUUEFSQU1TX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGNmZHJ2LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGNmZHJ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MjJjOTMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHBjZmRydi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0cGNmZHJ2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBQQ0YgZHJpdmVyIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBGVFBDRkRSVl9IXwotI2RlZmluZSBGVFBDRkRSVl9IXwotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLQotI2lmZGVmIEZSRUVUWVBFX0gKLSNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCi0jZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKLSNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgotI2VuZGlmCi0KLQotRlRfQkVHSU5fSEVBREVSCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHNlY3Rpb246Ci0gICAqICAgcGNmX2RyaXZlcgotICAgKgotICAgKiBAdGl0bGU6Ci0gICAqICAgVGhlIFBDRiBkcml2ZXIKLSAgICoKLSAgICogQGFic3RyYWN0OgotICAgKiAgIENvbnRyb2xsaW5nIHRoZSBQQ0YgZHJpdmVyIG1vZHVsZS4KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIFdoaWxlIEZyZWVUeXBlJ3MgUENGIGRyaXZlciBkb2Vzbid0IGV4cG9zZSBBUEkgZnVuY3Rpb25zIGJ5IGl0c2VsZiwKLSAgICogICBpdCBpcyBwb3NzaWJsZSB0byBjb250cm9sIGl0cyBiZWhhdmlvdXIgd2l0aCBARlRfUHJvcGVydHlfU2V0IGFuZAotICAgKiAgIEBGVF9Qcm9wZXJ0eV9HZXQuICBSaWdodCBub3csIHRoZXJlIGlzIGEgc2luZ2xlIHByb3BlcnR5Ci0gICAqICAgYG5vLWxvbmctZmFtaWx5LW5hbWVzJyBhdmFpbGFibGUgaWYgRnJlZVR5cGUgaXMgY29tcGlsZWQgd2l0aAotICAgKiAgIFBDRl9DT05GSUdfT1BUSU9OX0xPTkdfRkFNSUxZX05BTUVTLgotICAgKgotICAgKiAgIFRoZSBQQ0YgZHJpdmVyJ3MgbW9kdWxlIG5hbWUgaXMgYHBjZicuCi0gICAqCi0gICAqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBwcm9wZXJ0eToKLSAgICogICBuby1sb25nLWZhbWlseS1uYW1lcwotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgSWYgUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVMgaXMgYWN0aXZlIHdoaWxlIGNvbXBpbGluZwotICAgKiAgIEZyZWVUeXBlLCB0aGUgUENGIGRyaXZlciBjb25zdHJ1Y3RzIGxvbmcgZmFtaWx5IG5hbWVzLgotICAgKgotICAgKiAgIFRoZXJlIGFyZSBtYW55IFBDRiBmb250cyBqdXN0IGNhbGxlZCBgRml4ZWQnIHdoaWNoIGxvb2sgY29tcGxldGVseQotICAgKiAgIGRpZmZlcmVudCwgYW5kIHdoaWNoIGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGVhY2ggb3RoZXIuICBXaGVuCi0gICAqICAgc2VsZWN0aW5nIGBGaXhlZCcgaW4gS0RFIG9yIEdub21lIG9uZSBnZXRzIHJlc3VsdHMgdGhhdCBhcHBlYXIgcmF0aGVyCi0gICAqICAgcmFuZG9tLCB0aGUgc3R5bGUgY2hhbmdlcyBvZnRlbiBpZiBvbmUgY2hhbmdlcyB0aGUgc2l6ZSBhbmQgb25lCi0gICAqICAgY2Fubm90IHNlbGVjdCBzb21lIGZvbnRzIGF0IGFsbC4gIFRoZSBpbXByb3ZlIHRoaXMgc2l0dWF0aW9uLCB0aGUgUENGCi0gICAqICAgbW9kdWxlIHByZXBlbmRzIHRoZSBmb3VuZHJ5IG5hbWUgKHBsdXMgYSBzcGFjZSkgdG8gdGhlIGZhbWlseSBuYW1lLiAKLSAgICogICBJdCBhbHNvIGNoZWNrcyB3aGV0aGVyIHRoZXJlIGFyZSBgd2lkZScgY2hhcmFjdGVyczsgYWxsIHB1dCB0b2dldGhlciwKLSAgICogICBmYW1pbHkgbmFtZXMgbGlrZSBgU29ueSBGaXhlZCcgb3IgYE1pc2MgRml4ZWQgV2lkZScgYXJlIGNvbnN0cnVjdGVkLgotICAgKgotICAgKiAgIElmIGBuby1sb25nLWZhbWlseS1uYW1lcycgaXMgc2V0LCB0aGlzIGZlYXR1cmUgZ2V0cyBzd2l0Y2hlZCBvZmYuCi0gICAqCi0gICAqICAgewotICAgKiAgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKLSAgICogICAgIEZUX0Jvb2wgICAgIG5vX2xvbmdfZmFtaWx5X25hbWVzID0gVFJVRTsKLSAgICoKLSAgICoKLSAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7Ci0gICAqCi0gICAqICAgICBGVF9Qcm9wZXJ0eV9TZXQoIGxpYnJhcnksICJwY2YiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8tbG9uZy1mYW1pbHktbmFtZXMiLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9fbG9uZ19mYW1pbHlfbmFtZXMgKTsKLSAgICogICB9Ci0gICAqCi0gICAqIEBub3RlOgotICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWQgd2l0aCBARlRfUHJvcGVydHlfR2V0IGFsc28uCi0gICAqCi0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50Ci0gICAqICAgdmFyaWFibGUgKHVzaW5nIHZhbHVlcyAxIGFuZCAwIGZvciBgb24nIGFuZCBgb2ZmJywgcmVzcGVjdGl2ZWx5KS4KLSAgICoKLSAgICovCi0KLQotRlRfRU5EX0hFQURFUgotCi0KLSNlbmRpZiAvKiBGVFBDRkRSVl9IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oCmluZGV4IGYyYTZhZTkuLmNlNjBlYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgUEZSLXNwZWNpZmljIGRhdGEgKHNwZWNpZmljYXRpb24gb25seSkuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaAppbmRleCA5NjA4Mzc1Li5mYThhZDIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHJlbmRlcmVyIG1vZHVsZXMgcHVibGljIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC04OCw3ICs4OCw3IEBACiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpGVF9SZW5kZXJlcl9SZW5kZXJGdW5jKSggRlRfUmVuZGVyZXIgICAgICAgcmVuZGVyZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICAgIHNsb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIG9yaWdpbiApOwogCiAgIHR5cGVkZWYgRlRfRXJyb3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKaW5kZXggMmYzOTU4YS4uNzJjYjA4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc2l6ZSBvYmplY3RzIG1hbmFnZW1lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaAppbmRleCBmZjg4OGI3Li44ZWI4ZDcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCkBAIC03LDcgKzcsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoaXMgaXMgX25vdF8gdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcyEgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfUEFSQU1FVEVSX1RBR1NfSAogCiAjaWZkZWYgRlJFRVRZUEVfSAogI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKQEAgLTE4OSw2ICsxOTAsOSBAQAogICAvKiAgICBQbGVhc2UgcmVmZXIgdG8gdGhlIFRydWVUeXBlIG9yIE9wZW5UeXBlIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgICAgKi8KICAgLyogICAgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIHN0cnVjdCAgRlRfU2ZudExhbmdUYWdfCiAgIHsKICAgICBGVF9CeXRlKiAgc3RyaW5nOyAgICAgIC8qIHRoaXMgc3RyaW5nIGlzICpub3QqIG51bGwtdGVybWluYXRlZCEgKi8KQEAgLTIyOSw1MyArMjMzLDE1IEBACiAgIC8qICAgIGludmFsaWQgZm9ybWF0fjEgbGFuZ3VhZ2UgSUQgdmFsdWVzLCBGVF9FcnJfSW52YWxpZF9Bcmd1bWVudCBpcyAgICAqLwogICAvKiAgICByZXR1cm5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAyLjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9HZXRfU2ZudF9MYW5nVGFnKCBGVF9GYWNlICAgICAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgbGFuZ0lELAogICAgICAgICAgICAgICAgICAgICAgICBGVF9TZm50TGFuZ1RhZyAgKmFsYW5nVGFnICk7CiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAqCi0gICAqIEBjb25zdGFudDoKLSAgICogICBGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX0ZBTUlMWQotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSB0YWcgZm9yIEBGVF9QYXJhbWV0ZXIgdG8gbWFrZSBARlRfT3Blbl9GYWNlIGlnbm9yZSB0eXBvZ3JhcGhpYwotICAgKiAgIGZhbWlseSBuYW1lcyBpbiB0aGUgYG5hbWUnIHRhYmxlIChpbnRyb2R1Y2VkIGluIE9wZW5UeXBlIHZlcnNpb24KLSAgICogICAxLjQpLiAgVXNlIHRoaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IHN5c3RlbXMgdGhhdAotICAgKiAgIGhhdmUgYSBmb3VyLWZhY2VzLXBlci1mYW1pbHkgcmVzdHJpY3Rpb24uCi0gICAqCi0gICAqLwotI2RlZmluZSBGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX0ZBTUlMWSBcCi0gICAgICAgICAgRlRfTUFLRV9UQUcoICdpJywgJ2cnLCAncCcsICdmJyApCi0KLQotICAvKiB0aGlzIGNvbnN0YW50IGlzIGRlcHJlY2F0ZWQgKi8KLSNkZWZpbmUgRlRfUEFSQU1fVEFHX0lHTk9SRV9QUkVGRVJSRURfRkFNSUxZIFwKLSAgICAgICAgICBGVF9QQVJBTV9UQUdfSUdOT1JFX1RZUE9HUkFQSElDX0ZBTUlMWQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAY29uc3RhbnQ6Ci0gICAqICAgRlRfUEFSQU1fVEFHX0lHTk9SRV9UWVBPR1JBUEhJQ19TVUJGQU1JTFkKLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEEgdGFnIGZvciBARlRfUGFyYW1ldGVyIHRvIG1ha2UgQEZUX09wZW5fRmFjZSBpZ25vcmUgdHlwb2dyYXBoaWMKLSAgICogICBzdWJmYW1pbHkgbmFtZXMgaW4gdGhlIGBuYW1lJyB0YWJsZSAoaW50cm9kdWNlZCBpbiBPcGVuVHlwZSB2ZXJzaW9uCi0gICAqICAgMS40KS4gIFVzZSB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBzeXN0ZW1zIHRoYXQKLSAgICogICBoYXZlIGEgZm91ci1mYWNlcy1wZXItZmFtaWx5IHJlc3RyaWN0aW9uLgotICAgKgotICAgKi8KLSNkZWZpbmUgRlRfUEFSQU1fVEFHX0lHTk9SRV9UWVBPR1JBUEhJQ19TVUJGQU1JTFkgXAotICAgICAgICAgIEZUX01BS0VfVEFHKCAnaScsICdnJywgJ3AnLCAncycgKQotCi0KLSAgLyogdGhpcyBjb25zdGFudCBpcyBkZXByZWNhdGVkICovCi0jZGVmaW5lIEZUX1BBUkFNX1RBR19JR05PUkVfUFJFRkVSUkVEX1NVQkZBTUlMWSBcCi0gICAgICAgICAgRlRfUEFSQU1fVEFHX0lHTk9SRV9UWVBPR1JBUEhJQ19TVUJGQU1JTFkKLQogICAvKiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaAppbmRleCA4YTg2ODA4Li40NGI2ZmJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHBhdGggc3Ryb2tlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICogICAgIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEUgZ2VuZXJhdGVzIGEgbWl0ZXJlZCBsaW5lCiAgICAqICAgICBqb2luIGFzIHVzZWQgaW4gWFBTLiAgRlRfU1RST0tFUl9MSU5FSk9JTl9NSVRFUiBpcyBhbiBhbGlhcwogICAgKiAgICAgZm9yIEZUX1NUUk9LRVJfTElORUpPSU5fTUlURVJfVkFSSUFCTEUsIHJldGFpbmVkIGZvcgotICAgKiAgICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgICAqICAgICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICAgKi8KICAgdHlwZWRlZiBlbnVtICBGVF9TdHJva2VyX0xpbmVKb2luXwogICB7CkBAIC00NjYsNyArNDY2LDcgQEAKICAgICogICBGVF9TdHJva2VyX0NvbmljVG8KICAgICoKICAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIGBEcmF3JyBhIHNpbmdsZSBxdWFkcmF0aWMgQsOpemllciBpbiB0aGUgc3Ryb2tlcidzIGN1cnJlbnQgc3ViLXBhdGgsCisgICAqICAgYERyYXcnIGEgc2luZ2xlIHF1YWRyYXRpYyBCZXppZXIgaW4gdGhlIHN0cm9rZXIncyBjdXJyZW50IHN1Yi1wYXRoLAogICAgKiAgIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uCiAgICAqCiAgICAqIEBpbnB1dDoKQEAgLTQ3NCw3ICs0NzQsNyBAQAogICAgKiAgICAgVGhlIHRhcmdldCBzdHJva2VyIGhhbmRsZS4KICAgICoKICAgICogICBjb250cm9sIDo6Ci0gICAqICAgICBBIHBvaW50ZXIgdG8gYSBCw6l6aWVyIGNvbnRyb2wgcG9pbnQuCisgICAqICAgICBBIHBvaW50ZXIgdG8gYSBCZXppZXIgY29udHJvbCBwb2ludC4KICAgICoKICAgICogICB0byA6OgogICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBwb2ludC4KQEAgLTQ5OCw3ICs0OTgsNyBAQAogICAgKiAgIEZUX1N0cm9rZXJfQ3ViaWNUbwogICAgKgogICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgYERyYXcnIGEgc2luZ2xlIGN1YmljIELDqXppZXIgaW4gdGhlIHN0cm9rZXIncyBjdXJyZW50IHN1Yi1wYXRoLAorICAgKiAgIGBEcmF3JyBhIHNpbmdsZSBjdWJpYyBCZXppZXIgaW4gdGhlIHN0cm9rZXIncyBjdXJyZW50IHN1Yi1wYXRoLAogICAgKiAgIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uCiAgICAqCiAgICAqIEBpbnB1dDoKQEAgLTUwNiwxMCArNTA2LDEwIEBACiAgICAqICAgICBUaGUgdGFyZ2V0IHN0cm9rZXIgaGFuZGxlLgogICAgKgogICAgKiAgIGNvbnRyb2wxIDo6Ci0gICAqICAgICBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IELDqXppZXIgY29udHJvbCBwb2ludC4KKyAgICogICAgIEEgcG9pbnRlciB0byB0aGUgZmlyc3QgQmV6aWVyIGNvbnRyb2wgcG9pbnQuCiAgICAqCiAgICAqICAgY29udHJvbDIgOjoKLSAgICogICAgIEEgcG9pbnRlciB0byBzZWNvbmQgQsOpemllciBjb250cm9sIHBvaW50LgorICAgKiAgICAgQSBwb2ludGVyIHRvIHNlY29uZCBCZXppZXIgY29udHJvbCBwb2ludC4KICAgICoKICAgICogICB0byA6OgogICAgKiAgICAgQSBwb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiBwb2ludC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzeW50aC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN5bnRoLmgKaW5kZXggMTg2M2ZhMi4uZmY5ZmI0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHN5bnRoLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN5bnRoLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBGcmVlVHlwZSBzeW50aGVzaXppbmcgY29kZSBmb3IgZW1ib2xkZW5pbmcgYW5kIHNsYW50aW5nICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzeXN0ZW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzeXN0ZW0uaAppbmRleCAxYWE0NzYyLi5mNmIxNjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGxvdy1sZXZlbCBzeXN0ZW0gaW50ZXJmYWNlIGRlZmluaXRpb24gKHNwZWNpZmljYXRpb24pLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmgKaW5kZXggODlmMDM1MC4uMmUzZjNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnR0cmlnb24uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHR0ZHJ2LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHRkcnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzllM2U2ZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHRkcnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdHR0ZHJ2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyB0aGUgVHJ1ZVR5cGUgZHJpdmVyICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIEZUVFREUlZfSF8KLSNkZWZpbmUgRlRUVERSVl9IXwotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLQotI2lmZGVmIEZSRUVUWVBFX0gKLSNlcnJvciAiZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAxIGhhcyBiZWVuIGxvYWRlZCEiCi0jZXJyb3IgIlBsZWFzZSBmaXggdGhlIGRpcmVjdG9yeSBzZWFyY2ggb3JkZXIgZm9yIGhlYWRlciBmaWxlcyIKLSNlcnJvciAic28gdGhhdCBmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDIgaXMgZm91bmQgZmlyc3QuIgotI2VuZGlmCi0KLQotRlRfQkVHSU5fSEVBREVSCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHNlY3Rpb246Ci0gICAqICAgdHRfZHJpdmVyCi0gICAqCi0gICAqIEB0aXRsZToKLSAgICogICBUaGUgVHJ1ZVR5cGUgZHJpdmVyCi0gICAqCi0gICAqIEBhYnN0cmFjdDoKLSAgICogICBDb250cm9sbGluZyB0aGUgVHJ1ZVR5cGUgZHJpdmVyIG1vZHVsZS4KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIFdoaWxlIEZyZWVUeXBlJ3MgVHJ1ZVR5cGUgZHJpdmVyIGRvZXNuJ3QgZXhwb3NlIEFQSSBmdW5jdGlvbnMgYnkKLSAgICogICBpdHNlbGYsIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgaXRzIGJlaGF2aW91ciB3aXRoIEBGVF9Qcm9wZXJ0eV9TZXQKLSAgICogICBhbmQgQEZUX1Byb3BlcnR5X0dldC4gIFRoZSBmb2xsb3dpbmcgbGlzdHMgdGhlIGF2YWlsYWJsZSBwcm9wZXJ0aWVzCi0gICAqICAgdG9nZXRoZXIgd2l0aCB0aGUgbmVjZXNzYXJ5IG1hY3JvcyBhbmQgc3RydWN0dXJlcy4KLSAgICoKLSAgICogICBUaGUgVHJ1ZVR5cGUgZHJpdmVyJ3MgbW9kdWxlIG5hbWUgaXMgYHRydWV0eXBlJy4KLSAgICoKLSAgICogICBXZSBzdGFydCB3aXRoIGEgbGlzdCBvZiBkZWZpbml0aW9ucywga2luZGx5IHByb3ZpZGVkIGJ5IEdyZWcKLSAgICogICBIaXRjaGNvY2suCi0gICAqCi0gICAqICAgX0JpLUxldmVsXyBfUmVuZGVyaW5nXwotICAgKgotICAgKiAgIE1vbm9jaHJvbWF0aWMgcmVuZGVyaW5nLCBleGNsdXNpdmVseSB1c2VkIGluIHRoZSBlYXJseSBkYXlzIG9mCi0gICAqICAgVHJ1ZVR5cGUgYnkgYm90aCBBcHBsZSBhbmQgTWljcm9zb2Z0LiAgTWljcm9zb2Z0J3MgR0RJIGludGVyZmFjZQotICAgKiAgIHN1cHBvcnRlZCBoaW50aW5nIG9mIHRoZSByaWdodC1zaWRlIGJlYXJpbmcgcG9pbnQsIHN1Y2ggdGhhdCB0aGUKLSAgICogICBhZHZhbmNlIHdpZHRoIGNvdWxkIGJlIG5vbi1saW5lYXIuICBNb3N0IG9mdGVuIHRoaXMgd2FzIGRvbmUgdG8KLSAgICogICBhY2hpZXZlIHNvbWUgbGV2ZWwgb2YgZ2x5cGggc3ltbWV0cnkuICBUbyBlbmFibGUgcmVhc29uYWJsZQotICAgKiAgIHBlcmZvcm1hbmNlIChlLmcuLCBub3QgaGF2aW5nIHRvIHJ1biBoaW50aW5nIG9uIGFsbCBnbHlwaHMganVzdCB0bwotICAgKiAgIGdldCB0aGUgd2lkdGhzKSB0aGVyZSB3YXMgYSBiaXQgaW4gdGhlIGhlYWQgdGFibGUgaW5kaWNhdGluZyBpZiB0aGUKLSAgICogICBzaWRlIGJlYXJpbmcgd2FzIGhpbnRlZCwgYW5kIGFkZGl0aW9uYWwgdGFibGVzLCBgaGRteCcgYW5kIGBMVFNIJywgdG8KLSAgICogICBjYWNoZSBoaW50aW5nIHdpZHRocyBhY3Jvc3MgbXVsdGlwbGUgc2l6ZXMgYW5kIGRldmljZSBhc3BlY3QgcmF0aW9zLgotICAgKgotICAgKiAgIF9Gb250XyBfU21vb3RoaW5nXwotICAgKgotICAgKiAgIE1pY3Jvc29mdCdzIEdESSBpbXBsZW1lbnRhdGlvbiBvZiBhbnRpLWFsaWFzaW5nLiAgTm90IHRyYWRpdGlvbmFsCi0gICAqICAgYW50aS1hbGlhc2luZyBhcyB0aGUgb3V0bGluZXMgd2VyZSBoaW50ZWQgYmVmb3JlIHRoZSBzYW1wbGluZy4gIFRoZQotICAgKiAgIHdpZHRocyBtYXRjaGVkIHRoZSBiaS1sZXZlbCByZW5kZXJpbmcuCi0gICAqCi0gICAqICAgX0NsZWFyVHlwZV8gX1JlbmRlcmluZ18KLSAgICoKLSAgICogICBUZWNobmlxdWUgdGhhdCB1c2VzIHBoeXNpY2FsIHN1YnBpeGVscyB0byBpbXByb3ZlIHJlbmRlcmluZyBvbiBMQ0QKLSAgICogICAoYW5kIG90aGVyKSBkaXNwbGF5cy4gIEJlY2F1c2Ugb2YgdGhlIGhpZ2hlciByZXNvbHV0aW9uLCBtYW55IG1ldGhvZHMKLSAgICogICBvZiBpbXByb3Zpbmcgc3ltbWV0cnkgaW4gZ2x5cGhzIHRocm91Z2ggaGludGluZyB0aGUgcmlnaHQtc2lkZQotICAgKiAgIGJlYXJpbmcgd2VyZSBubyBsb25nZXIgbmVjZXNzYXJ5LiAgVGhpcyBsZWFkIHRvIHdoYXQgR0RJIGNhbGxzCi0gICAqICAgYG5hdHVyYWwgd2lkdGhzJyBDbGVhclR5cGUsIHNlZQotICAgKiAgIGh0dHA6Ly93d3cuYmVhdHN0YW1tLmNvbS90eXBvZ3JhcGh5L1JUUkNoNC5odG0jU2VjMjEuICBTaW5jZSBoaW50aW5nCi0gICAqICAgaGFzIGV4dHJhIHJlc29sdXRpb24sIG1vc3Qgbm9uLWxpbmVhcml0eSB3ZW50IGF3YXksIGJ1dCBpdCBpcyBzdGlsbAotICAgKiAgIHBvc3NpYmxlIGZvciBoaW50cyB0byBjaGFuZ2UgdGhlIGFkdmFuY2Ugd2lkdGhzIGluIHRoaXMgbW9kZS4KLSAgICoKLSAgICogICBfQ2xlYXJUeXBlXyBfQ29tcGF0aWJsZV8gX1dpZHRoc18KLSAgICoKLSAgICogICBPbmUgb2YgdGhlIGVhcmxpZXN0IGNoYWxsZW5nZXMgd2l0aCBDbGVhclR5cGUgd2FzIGFsbG93aW5nIHRoZQotICAgKiAgIGltcGxlbWVudGF0aW9uIGluIEdESSB0byBiZSBzZWxlY3RlZCB3aXRob3V0IHJlcXVpcmluZyBhbGwgVUkgYW5kCi0gICAqICAgZG9jdW1lbnRzIHRvIHJlZmxvdy4gIFRvIGFkZHJlc3MgdGhpcywgYSBjb21wYXRpYmxlIG1ldGhvZCBvZgotICAgKiAgIHJlbmRlcmluZyBDbGVhclR5cGUgd2FzIGFkZGVkIHdoZXJlIHRoZSBmb250IGhpbnRzIGFyZSBleGVjdXRlZCBvbmNlCi0gICAqICAgdG8gZGV0ZXJtaW5lIHRoZSB3aWR0aCBpbiBiaS1sZXZlbCByZW5kZXJpbmcsIGFuZCB0aGVuIHJlLXJ1biBpbgotICAgKiAgIENsZWFyVHlwZSwgd2l0aCB0aGUgZGlmZmVyZW5jZSBpbiB3aWR0aHMgYmVpbmcgYWJzb3JiZWQgaW4gdGhlIGZvbnQKLSAgICogICBoaW50cyBmb3IgQ2xlYXJUeXBlIChtb3N0bHkgaW4gdGhlIHdoaXRlIHNwYWNlIG9mIGhpbnRzKTsgc2VlCi0gICAqICAgaHR0cDovL3d3dy5iZWF0c3RhbW0uY29tL3R5cG9ncmFwaHkvUlRSQ2g0Lmh0bSNTZWMyMC4gIFNvbWV3aGF0IGJ5Ci0gICAqICAgZGVmaW5pdGlvbiwgY29tcGF0aWJsZSB3aWR0aCBDbGVhclR5cGUgYWxsb3dzIGZvciBub24tbGluZWFyIHdpZHRocywKLSAgICogICBidXQgb25seSB3aGVuIHRoZSBiaS1sZXZlbCB2ZXJzaW9uIGhhcyBub24tbGluZWFyIHdpZHRocy4KLSAgICoKLSAgICogICBfQ2xlYXJUeXBlXyBfU3VicGl4ZWxfIF9Qb3NpdGlvbmluZ18KLSAgICoKLSAgICogICBPbmUgb2YgdGhlIG5pY2UgYmVuZWZpdHMgb2YgQ2xlYXJUeXBlIGlzIHRoZSBhYmlsaXR5IHRvIG1vcmUgY3Jpc3BseQotICAgKiAgIGRpc3BsYXkgZnJhY3Rpb25hbCB3aWR0aHM7IHVuZm9ydHVuYXRlbHksIHRoZSBHREkgbW9kZWwgb2YgaW50ZWdlcgotICAgKiAgIGJpdG1hcHMgZGlkIG5vdCBzdXBwb3J0IHRoaXMuICBIb3dldmVyLCB0aGUgV1BGIGFuZCBEaXJlY3QgV3JpdGUKLSAgICogICBmcmFtZXdvcmtzIGRvIHN1cHBvcnQgZnJhY3Rpb25hbCB3aWR0aHMuICBEV3JpdGUgY2FsbHMgdGhpcyBgbmF0dXJhbAotICAgKiAgIG1vZGUnLCBub3QgdG8gYmUgY29uZnVzZWQgd2l0aCBHREkncyBgbmF0dXJhbCB3aWR0aHMnLiAgU3VicGl4ZWwKLSAgICogICBwb3NpdGlvbmluZywgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgRGlyZWN0IFdyaXRlLAotICAgKiAgIHVuZm9ydHVuYXRlbHkgZG9lcyBub3Qgc3VwcG9ydCBoaW50ZWQgYWR2YW5jZSB3aWR0aHMsIHNlZQotICAgKiAgIGh0dHA6Ly93d3cuYmVhdHN0YW1tLmNvbS90eXBvZ3JhcGh5L1JUUkNoNC5odG0jU2VjMjIuICBOb3RlIHRoYXQgdGhlCi0gICAqICAgVHJ1ZVR5cGUgaW50ZXJwcmV0ZXIgZnVsbHkgYWxsb3dzIHRoZSBhZHZhbmNlIHdpZHRoIHRvIGJlIGFkanVzdGVkIGluCi0gICAqICAgdGhpcyBtb2RlLCBqdXN0IHRoZSBEV3JpdGUgY2xpZW50IHdpbGwgaWdub3JlIHRob3NlIGNoYW5nZXMuCi0gICAqCi0gICAqICAgX0NsZWFyVHlwZV8gX0JhY2t3YXJkc18gX0NvbXBhdGliaWxpdHlfCi0gICAqCi0gICAqICAgVGhpcyBpcyBhIHNldCBvZiBleGNlcHRpb25zIG1hZGUgaW4gdGhlIFRydWVUeXBlIGludGVycHJldGVyIHRvCi0gICAqICAgbWluaW1pemUgaGludGluZyB0ZWNobmlxdWVzIHRoYXQgd2VyZSBwcm9ibGVtYXRpYyB3aXRoIHRoZSBleHRyYQotICAgKiAgIHJlc29sdXRpb24gb2YgQ2xlYXJUeXBlOyBzZWUKLSAgICogICBodHRwOi8vd3d3LmJlYXRzdGFtbS5jb20vdHlwb2dyYXBoeS9SVFJDaDQuaHRtI1NlYzEgYW5kCi0gICAqICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHguCi0gICAqICAgVGhpcyB0ZWNobmlxdWUgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggQ2xlYXJUeXBlIGNvbXBhdGlibGUKLSAgICogICB3aWR0aHMuICBDbGVhclR5cGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGFzIG5vIGRpcmVjdCBpbXBhY3Qgb24KLSAgICogICBjaGFuZ2luZyBhZHZhbmNlIHdpZHRocywgYnV0IHRoZXJlIG1pZ2h0IGJlIGFuIGluZGlyZWN0IGltcGFjdCBvbgotICAgKiAgIGRpc2FibGluZyBzb21lIGRlbHRhcy4gIFRoaXMgY291bGQgYmUgd29ya2VkIGFyb3VuZCBpbiBiYWNrd2FyZHMKLSAgICogICBjb21wYXRpYmlsaXR5IG1vZGUuCi0gICAqCi0gICAqICAgX05hdGl2ZV8gX0NsZWFyVHlwZV8gX01vZGVfCi0gICAqCi0gICAqICAgKE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIGBuYXR1cmFsIHdpZHRocycuKSAgVGhpcyBtb2RlIHJlbW92ZXMgYWxsCi0gICAqICAgdGhlIGV4Y2VwdGlvbnMgaW4gdGhlIFRydWVUeXBlIGludGVycHJldGVyIHdoZW4gcnVubmluZyB3aXRoCi0gICAqICAgQ2xlYXJUeXBlLiAgQW55IGlzc3VlcyBvbiB3aWR0aHMgd291bGQgc3RpbGwgYXBwbHksIHRob3VnaC4KLSAgICoKLSAgICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICoKLSAgICogQHByb3BlcnR5OgotICAgKiAgIGludGVycHJldGVyLXZlcnNpb24KLSAgICoKLSAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEN1cnJlbnRseSwgdGhyZWUgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgdHdvIHJlcHJlc2VudGluZyB0aGUKLSAgICogICBieXRlY29kZSBpbnRlcnByZXRlciB3aXRoIHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCAob2xkIGBJbmZpbmFsaXR5JwotICAgKiAgIGNvZGUgYW5kIG5ldyBzdHJpcHBlZC1kb3duIGFuZCBoaWdoZXIgcGVyZm9ybWFuY2UgYG1pbmltYWwnIGNvZGUpIGFuZAotICAgKiAgIG9uZSB3aXRob3V0LCByZXNwZWN0aXZlbHkuICBUaGUgZGVmYXVsdCBpcyBzdWJwaXhlbCBzdXBwb3J0IGlmCi0gICAqICAgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HIGlzIGRlZmluZWQsIGFuZCBubyBzdWJwaXhlbCBzdXBwb3J0Ci0gICAqICAgb3RoZXJ3aXNlIChzaW5jZSBpdCBpc24ndCBhdmFpbGFibGUgdGhlbikuCi0gICAqCi0gICAqICAgSWYgc3VicGl4ZWwgaGludGluZyBpcyBvbiwgbWFueSBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgYmVoYXZlCi0gICAqICAgZGlmZmVyZW50bHkgY29tcGFyZWQgdG8gQi9XIG9yIGdyYXlzY2FsZSByZW5kZXJpbmcgKGV4Y2VwdCBpZiBgbmF0aXZlCi0gICAqICAgQ2xlYXJUeXBlJyBpcyBzZWxlY3RlZCBieSB0aGUgZm9udCkuICBNaWNyb3NvZnQncyBtYWluIGlkZWEgaXMgdG8KLSAgICogICByZW5kZXIgYXQgYSBtdWNoIGluY3JlYXNlZCBob3Jpem9udGFsIHJlc29sdXRpb24sIHRoZW4gc2FtcGxpbmcgZG93bgotICAgKiAgIHRoZSBjcmVhdGVkIG91dHB1dCB0byBzdWJwaXhlbCBwcmVjaXNpb24uICBIb3dldmVyLCBtYW55IG9sZGVyIGZvbnRzCi0gICAqICAgYXJlIG5vdCBzdWl0ZWQgdG8gdGhpcyBhbmQgbXVzdCBiZSBzcGVjaWFsbHkgdGFrZW4gY2FyZSBvZiBieQotICAgKiAgIGFwcGx5aW5nIChoYXJkY29kZWQpIHR3ZWFrcyBpbiBNaWNyb3NvZnQncyBpbnRlcnByZXRlci4KLSAgICoKLSAgICogICBEZXRhaWxzIG9uIHN1YnBpeGVsIGhpbnRpbmcgYW5kIHNvbWUgb2YgdGhlIG5lY2Vzc2FyeSB0d2Vha3MgY2FuIGJlCi0gICAqICAgZm91bmQgaW4gR3JlZyBIaXRjaGNvY2sncyB3aGl0ZXBhcGVyIGF0Ci0gICAqICAgYGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4Jy4gCi0gICAqICAgTm90ZSB0aGF0IEZyZWVUeXBlIGN1cnJlbnRseSBkb2Vzbid0IHJlYWxseSBgc3VicGl4ZWwgaGludCcgKDZ4MSwgNngyLAotICAgKiAgIG9yIDZ4NSBzdXBlcnNhbXBsaW5nKSBsaWtlIGRpc2N1c3NlZCBpbiB0aGUgcGFwZXIuICBEZXBlbmRpbmcgb24gdGhlCi0gICAqICAgY2hvc2VuIGludGVycHJldGVyLCBpdCBzaW1wbHkgaWdub3JlcyBpbnN0cnVjdGlvbnMgb24gdmVydGljYWwgc3RlbXMKLSAgICogICB0byBhcnJpdmUgYXQgdmVyeSBzaW1pbGFyIHJlc3VsdHMuCi0gICAqCi0gICAqICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIGNvZGUgZGVtb25zdHJhdGVzIGhvdyB0byBkZWFjdGl2YXRlIHN1YnBpeGVsCi0gICAqICAgaGludGluZyAob21pdHRpbmcgdGhlIGVycm9yIGhhbmRsaW5nKS4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5OwotICAgKiAgICAgRlRfRmFjZSAgICAgZmFjZTsKLSAgICogICAgIEZUX1VJbnQgICAgIGludGVycHJldGVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1OwotICAgKgotICAgKgotICAgKiAgICAgRlRfSW5pdF9GcmVlVHlwZSggJmxpYnJhcnkgKTsKLSAgICoKLSAgICogICAgIEZUX1Byb3BlcnR5X1NldCggbGlicmFyeSwgInRydWV0eXBlIiwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVycHJldGVyLXZlcnNpb24iLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJwcmV0ZXJfdmVyc2lvbiApOwotICAgKiAgIH0KLSAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KLSAgICoKLSAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKLSAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIGAzNScsIGAzOCcsIG9yIGA0MCcpLgotICAgKi8KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgKgotICAgKiBAZW51bToKLSAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OX1hYWAotICAgKgotICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGludGVycHJldGVyLXZlcnNpb24gcHJvcGVydHkgdG8KLSAgICogICBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBUcnVldHlwZSBmb250cy4KLSAgICoKLSAgICogICBUaGUgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgY29uc3RhbnQgbmFtZXMgcmVwcmVzZW50cyB0aGUgdmVyc2lvbgotICAgKiAgIG51bWJlciBhcyByZXR1cm5lZCBieSB0aGUgYEdFVElORk8nIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAgKgotICAgKiBAdmFsdWVzOgotICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgOjoKLSAgICogICAgIFZlcnNpb25+MzUgY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuNyBhcyB1c2VkIGUuZy4gaW4KLSAgICogICAgIFdpbmRvd3N+OTg7IG9ubHkgZ3JheXNjYWxlIGFuZCBCL1cgcmFzdGVyaXppbmcgaXMgc3VwcG9ydGVkLgotICAgKgotICAgKiAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggOjoKLSAgICogICAgIFZlcnNpb25+MzggY29ycmVzcG9uZHMgdG8gTVMgcmFzdGVyaXplciB2LjEuOTsgaXQgaXMgcm91Z2hseQotICAgKiAgICAgZXF1aXZhbGVudCB0byB0aGUgaGludGluZyBwcm92aWRlZCBieSBEaXJlY3RXcml0ZSBDbGVhclR5cGUgKGFzIGNhbgotICAgKiAgICAgYmUgZm91bmQsIGZvciBleGFtcGxlLCBpbiB0aGUgSW50ZXJuZXQgRXhwbG9yZXJ+OSBydW5uaW5nIG9uCi0gICAqICAgICBXaW5kb3dzfjcpLiAgSXQgaXMgdXNlZCBpbiBGcmVlVHlwZSB0byBzZWxlY3QgdGhlIGBJbmZpbmFsaXR5JwotICAgKiAgICAgc3VicGl4ZWwgaGludGluZyBjb2RlLiAgVGhlIGNvZGUgbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUKLSAgICogICAgIHZlcnNpb24uCi0gICAqCi0gICAqICAgVFRfSU5URVJQUkVURVJfVkVSU0lPTl80MCA6OgotICAgKiAgICAgVmVyc2lvbn40MCBjb3JyZXNwb25kcyB0byBNUyByYXN0ZXJpemVyIHYuMi4xOyBpdCBpcyByb3VnaGx5Ci0gICAqICAgICBlcXVpdmFsZW50IHRvIHRoZSBoaW50aW5nIHByb3ZpZGVkIGJ5IERpcmVjdFdyaXRlIENsZWFyVHlwZSAoYXMgY2FuCi0gICAqICAgICBiZSBmb3VuZCwgZm9yIGV4YW1wbGUsIGluIE1pY3Jvc29mdCdzIEVkZ2UgQnJvd3NlciBvbiBXaW5kb3dzfjEwKS4gCi0gICAqICAgICBJdCBpcyB1c2VkIGluIEZyZWVUeXBlIHRvIHNlbGVjdCB0aGUgYG1pbmltYWwnIHN1YnBpeGVsIGhpbnRpbmcKLSAgICogICAgIGNvZGUsIGEgc3RyaXBwZWQtZG93biBhbmQgaGlnaGVyIHBlcmZvcm1hbmNlIHZlcnNpb24gb2YgdGhlCi0gICAqICAgICBgSW5maW5hbGl0eScgY29kZS4KLSAgICoKLSAgICogQG5vdGU6Ci0gICAqICAgVGhpcyBwcm9wZXJ0eSBjb250cm9scyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBieXRlY29kZSBpbnRlcnByZXRlcgotICAgKiAgIGFuZCB0aHVzIGhvdyBvdXRsaW5lcyBnZXQgaGludGVkLiAgSXQgZG9lcyAqbm90KiBjb250cm9sIGhvdyBnbHlwaAotICAgKiAgIGdldCByYXN0ZXJpemVkISAgSW4gcGFydGljdWxhciwgaXQgZG9lcyBub3QgY29udHJvbCBzdWJwaXhlbCBjb2xvcgotICAgKiAgIGZpbHRlcmluZy4KLSAgICoKLSAgICogICBJZiBGcmVlVHlwZSBoYXMgbm90IGJlZW4gY29tcGlsZWQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24KLSAgICogICBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcsIHNlbGVjdGluZyB2ZXJzaW9ufjM4IG9yfjQwIGNhdXNlcwotICAgKiAgIGFuIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJyBlcnJvci4KLSAgICoKLSAgICogICBEZXBlbmRpbmcgb24gdGhlIGdyYXBoaWNzIGZyYW1ld29yaywgTWljcm9zb2Z0IHVzZXMgZGlmZmVyZW50Ci0gICAqICAgYnl0ZWNvZGUgYW5kIHJlbmRlcmluZyBlbmdpbmVzLiAgQXMgYSBjb25zZXF1ZW5jZSwgdGhlIHZlcnNpb24KLSAgICogICBudW1iZXJzIHJldHVybmVkIGJ5IGEgY2FsbCB0byB0aGUgYEdFVElORk8nIGJ5dGVjb2RlIGluc3RydWN0aW9uIGFyZQotICAgKiAgIG1vcmUgY29udm9sdXRlZCB0aGFuIGRlc2lyZWQuCi0gICAqCi0gICAqICAgSGVyZSBhcmUgdHdvIHRhYmxlcyB0aGF0IHRyeSB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIHBvc3NpYmxlCi0gICAqICAgdmFsdWVzIGZvciB0aGUgTVMgcmFzdGVyaXplciBlbmdpbmUsIHRvZ2V0aGVyIHdpdGggdGhlIGFkZGl0aW9uYWwKLSAgICogICBmZWF0dXJlcyBpbnRyb2R1Y2VkIGJ5IGl0LgotICAgKgotICAgKiAgIHsKLSAgICogICAgIEdFVElORk8gZnJhbWV3b3JrICAgICAgICAgICAgICAgdmVyc2lvbiBmZWF0dXJlCi0gICAqICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAqICAgICAgICAgMyAgIEdESSAoV2luIDMuMSksICAgICAgICAgICAgdjEuMCAgMTYtYml0LCBmaXJzdCB2ZXJzaW9uCi0gICAqICAgICAgICAgICAgIFRydWVJbWFnZQotICAgKiAgICAgICAgMzMgICBHREkgKFdpbiBOVCAzLjEpLCAgICAgICAgIHYxLjUgIDMyLWJpdAotICAgKiAgICAgICAgICAgICBIUCBMYXNlcmpldAotICAgKiAgICAgICAgMzQgICBHREkgKFdpbiA5NSkgICAgICAgICAgICAgIHYxLjYgIGZvbnQgc21vb3RoaW5nLAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTQ0FOVFlQRSBvcGNvZGUKLSAgICogICAgICAgIDM1ICAgR0RJIChXaW4gOTgvMjAwMCkgICAgICAgICB2MS43ICAoVU4pU0NBTEVEX0NPTVBPTkVOVF9PRkZTRVQKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHMgaW4gY29tcG9zaXRlIGdseXBocwotICAgKiAgICAgICAgMzYgICBNR0RJIChXaW4gQ0UgMikgICAgICAgICAgIHYxLjYrIGNsYXNzaWMgQ2xlYXJUeXBlCi0gICAqICAgICAgICAzNyAgIEdESSAoWFAgYW5kIGxhdGVyKSwgICAgICAgdjEuOCAgQ2xlYXJUeXBlCi0gICAqICAgICAgICAgICAgIEdESSsgb2xkIChiZWZvcmUgVmlzdGEpCi0gICAqICAgICAgICAzOCAgIEdESSsgb2xkIChWaXN0YSwgV2luIDcpLCAgdjEuOSAgc3VicGl4ZWwgQ2xlYXJUeXBlLAotICAgKiAgICAgICAgICAgICBXUEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFktZGlyZWN0aW9uIENsZWFyVHlwZSwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsIGVycm9yIGNoZWNraW5nCi0gICAqICAgICAgICAzOSAgIERXcml0ZSAoYmVmb3JlIFdpbiA4KSAgICAgdjIuMCAgc3VicGl4ZWwgQ2xlYXJUeXBlIGZsYWdzCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBHRVRJTkZPIG9wY29kZSwKLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWcgZml4ZXMKLSAgICogICAgICAgIDQwICAgR0RJKyAoYWZ0ZXIgV2luIDcpLCAgICAgICB2Mi4xICBZLWRpcmVjdGlvbiBDbGVhclR5cGUgZmxhZwotICAgKiAgICAgICAgICAgICBEV3JpdGUgKFdpbiA4KSAgICAgICAgICAgICAgICAgICAgaW4gR0VUSU5GTyBvcGNvZGUsCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JheSBDbGVhclR5cGUKLSAgICogICB9Ci0gICAqCi0gICAqICAgVGhlIGB2ZXJzaW9uJyBmaWVsZCBnaXZlcyBhIHJvdWdoIG9yaWVudGF0aW9uIG9ubHksIHNpbmNlIHNvbWUKLSAgICogICBhcHBsaWNhdGlvbnMgcHJvdmlkZWQgY2VydGFpbiBmZWF0dXJlcyBtdWNoIGVhcmxpZXIgKGFzIGFuIGV4YW1wbGUsCi0gICAqICAgTWljcm9zb2Z0IFJlYWRlciB1c2VkIHN1YnBpeGVsIGFuZCBZLWRpcmVjdGlvbiBDbGVhclR5cGUgYWxyZWFkeSBpbgotICAgKiAgIFdpbmRvd3MgMjAwMCkuICBTaW1pbGFybHksIHVwZGF0ZXMgdG8gYSBnaXZlbiBmcmFtZXdvcmsgbWlnaHQgaW5jbHVkZQotICAgKiAgIGltcHJvdmVkIGhpbnRpbmcgc3VwcG9ydC4KLSAgICoKLSAgICogICB7Ci0gICAqICAgICAgdmVyc2lvbiAgIHNhbXBsaW5nICAgICAgICAgIHJlbmRlcmluZyAgICAgICAgY29tbWVudAotICAgKiAgICAgICAgICAgICAgIHggICAgICAgIHkgICAgICAgeCAgICAgICAgICAgeQotICAgKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICogICAgICAgdjEuMCAgIG5vcm1hbCAgbm9ybWFsICBCL1cgICAgICAgICAgIEIvVyAgICBiaS1sZXZlbAotICAgKiAgICAgICB2MS42ICAgaGlnaCAgICBoaWdoICAgIGdyYXkgICAgICAgICAgZ3JheSAgIGdyYXlzY2FsZQotICAgKiAgICAgICB2MS44ICAgaGlnaCAgICBub3JtYWwgIGNvbG9yLWZpbHRlciAgQi9XICAgIChHREkpIENsZWFyVHlwZQotICAgKiAgICAgICB2MS45ICAgaGlnaCAgICBoaWdoICAgIGNvbG9yLWZpbHRlciAgZ3JheSAgIENvbG9yIENsZWFyVHlwZQotICAgKiAgICAgICB2Mi4xICAgaGlnaCAgICBub3JtYWwgIGdyYXkgICAgICAgICAgQi9XICAgIEdyYXkgQ2xlYXJUeXBlCi0gICAqICAgICAgIHYyLjEgICBoaWdoICAgIGhpZ2ggICAgZ3JheSAgICAgICAgICBncmF5ICAgR3JheSBDbGVhclR5cGUKLSAgICogICB9Ci0gICAqCi0gICAqICAgQ29sb3IgYW5kIEdyYXkgQ2xlYXJUeXBlIGFyZSB0aGUgdHdvIGF2YWlsYWJsZSB2YXJpYW50cyBvZgotICAgKiAgIGBZLWRpcmVjdGlvbiBDbGVhclR5cGUnLCBtZWFuaW5nIGdyYXlzY2FsZSByYXN0ZXJpemF0aW9uIGFsb25nIHRoZQotICAgKiAgIFktZGlyZWN0aW9uOyB0aGUgbmFtZSB1c2VkIGluIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIGZvciB0aGlzCi0gICAqICAgZmVhdHVyZSBpcyBgc3ltbWV0cmljIHNtb290aGluZycuICBgQ2xhc3NpYyBDbGVhclR5cGUnIGlzIHRoZQotICAgKiAgIG9yaWdpbmFsIGFsZ29yaXRobSB1c2VkIGJlZm9yZSBpbnRyb2R1Y2luZyBhIG1vZGlmaWVkIHZlcnNpb24gaW4KLSAgICogICBXaW5+WFAuICBBbm90aGVyIG5hbWUgZm9yIHYxLjYncyBncmF5c2NhbGUgcmVuZGVyaW5nIGlzIGBmb250Ci0gICAqICAgc21vb3RoaW5nJywgYW5kIGBDb2xvciBDbGVhclR5cGUnIGlzIHNvbWV0aW1lcyBhbHNvIGNhbGxlZCBgRFdyaXRlCi0gICAqICAgQ2xlYXJUeXBlJy4gIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0b2RheSdzIENvbG9yIENsZWFyVHlwZSBhbmQgdGhlCi0gICAqICAgZWFybGllciBDbGVhclR5cGUgdmFyaWFudCB3aXRoIEIvVyByZW5kZXJpbmcgYWxvbmcgdGhlIHZlcnRpY2FsIGF4aXMsCi0gICAqICAgdGhlIGxhdHRlciBpcyBzb21ldGltZXMgY2FsbGVkIGBHREkgQ2xlYXJUeXBlJy4KLSAgICoKLSAgICogICBgTm9ybWFsJyBhbmQgYGhpZ2gnIHNhbXBsaW5nIGRlc2NyaWJlIHRoZSAodmlydHVhbCkgcmVzb2x1dGlvbiB0bwotICAgKiAgIGFjY2VzcyB0aGUgcmFzdGVyaXplZCBvdXRsaW5lIGFmdGVyIHRoZSBoaW50aW5nIHByb2Nlc3MuICBgTm9ybWFsJwotICAgKiAgIG1lYW5zIDEgc2FtcGxlIHBlciBncmlkIGxpbmUgKGkuZS4sIEIvVykuICBJbiB0aGUgY3VycmVudCBNaWNyb3NvZnQKLSAgICogICBpbXBsZW1lbnRhdGlvbiwgYGhpZ2gnIG1lYW5zIGFuIGV4dHJhIHZpcnR1YWwgcmVzb2x1dGlvbiBvZiAxNngxNiAob3IKLSAgICogICAxNngxKSBncmlkIGxpbmVzIHBlciBwaXhlbCBmb3IgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIGxpa2UgYE1JUlAnLgotICAgKiAgIEFmdGVyIGhpbnRpbmcsIHRoZXNlIDE2IGdyaWQgbGluZXMgYXJlIG1hcHBlZCB0byA2eDUgKG9yIDZ4MSkgZ3JpZAotICAgKiAgIGxpbmVzIGZvciBjb2xvciBmaWx0ZXJpbmcgaWYgQ29sb3IgQ2xlYXJUeXBlIGlzIGFjdGl2YXRlZC4KLSAgICoKLSAgICogICBOb3RlIHRoYXQgYEdyYXkgQ2xlYXJUeXBlJyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB2MS42J3MKLSAgICogICBncmF5c2NhbGUgcmVuZGVyaW5nLiAgSG93ZXZlciwgdGhlIEdFVElORk8gaW5zdHJ1Y3Rpb24gaGFuZGxlcyBpdAotICAgKiAgIGRpZmZlcmVudGx5OiB2MS42IHJldHVybnMgYml0fjEyIChoaW50aW5nIGZvciBncmF5c2NhbGUpLCB3aGlsZSB2Mi4xCi0gICAqICAgcmV0dXJucyBiaXRzfjEzIChoaW50aW5nIGZvciBDbGVhclR5cGUpLCAxOCAoc3ltbWV0cmljYWwgc21vb3RoaW5nKSwKLSAgICogICBhbmR+MTkgKEdyYXkgQ2xlYXJUeXBlKS4gIEFsc28sIHRoaXMgbW9kZSByZXNwZWN0cyBiaXRzIDIgYW5kfjMgZm9yCi0gICAqICAgdGhlIHZlcnNpb25+MSBnYXNwIHRhYmxlIGV4Y2x1c2l2ZWx5IChsaWtlIENvbG9yIENsZWFyVHlwZSksIHdoaWxlCi0gICAqICAgdjEuNiBvbmx5IHJlc3BlY3RzIHRoZSB2YWx1ZXMgb2YgdmVyc2lvbn4wIChiaXRzIDAgYW5kfjEpLgotICAgKgotICAgKiAgIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBmZWF0dXJlcyBvZiB0aGUgYWJvdmUgaW50ZXJwcmV0ZXIgdmVyc2lvbnMKLSAgICogICBtaWdodCBub3QgbWFwIGV4YWN0bHkgdG8gRnJlZVR5cGUgZmVhdHVyZXMgb3IgYmVoYXZpb3IgYmVjYXVzZSBpdCBpcwotICAgKiAgIGEgZnVuZGFtZW50YWxseSBkaWZmZXJlbnQgbGlicmFyeSB3aXRoIGRpZmZlcmVudCBpbnRlcm5hbHMuCi0gICAqCi0gICAqLwotI2RlZmluZSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1ICAzNQotI2RlZmluZSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICAzOAotI2RlZmluZSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICA0MAotCi0gLyogKi8KLQotCi1GVF9FTkRfSEVBREVSCi0KLQotI2VuZGlmIC8qIEZUVFREUlZfSF8gKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKaW5kZXggZWFiOGFkYS4uZjYzOGMyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc2ltcGxlIHR5cGVzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTQyNSw3ICs0MjUsNyBAQAogICAvKiAgICBUaGUgYWRkcmVzcyBvZiB0aGUgRnJlZVR5cGUgb2JqZWN0IHRoYXQgaXMgdW5kZXIgZmluYWxpemF0aW9uLiAgICAgKi8KICAgLyogICAgSXRzIGNsaWVudCBkYXRhIGlzIGFjY2Vzc2VkIHRocm91Z2ggaXRzIGBnZW5lcmljJyBmaWVsZC4gICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHZvaWQgICgqRlRfR2VuZXJpY19GaW5hbGl6ZXIpKHZvaWQqICBvYmplY3QpOworICB0eXBlZGVmIHZvaWQgICgqRlRfR2VuZXJpY19GaW5hbGl6ZXIpKCB2b2lkKiAgb2JqZWN0ICk7CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaAppbmRleCAxZWVlZjZjLi40NjFjNjViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0d2luZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgZm50LXNwZWNpZmljIGRhdGEuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03OCw3ICs3OCw3IEBACiAgICAqICAgICBNYWMgUm9tYW4gZW5jb2RpbmcuCiAgICAqCiAgICAqICAgRlRfV2luRk5UX0lEX09FTSA6OgotICAgKiAgICAgRnJvbSBNaWNoYWVsIFDDtnR0Z2VuIDxtaWNoYWVsQHBvZXR0Z2VuLmRlPjoKKyAgICogICAgIEZyb20gTWljaGFlbCBQb2V0dGdlbiA8bWljaGFlbEBwb2V0dGdlbi5kZT46CiAgICAqCiAgICAqICAgICAgIFRoZSBgV2luZG93cyBGb250IE1hcHBpbmcnIGFydGljbGUgc2F5cyB0aGF0IEZUX1dpbkZOVF9JRF9PRU0KICAgICogICAgICAgaXMgdXNlZCBmb3IgdGhlIGNoYXJzZXQgb2YgdmVjdG9yIGZvbnRzLCBsaWtlIGBtb2Rlcm4uZm9uJywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaAppbmRleCBiYWU4M2U3Li5mNGQzMDhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgYGF1dG9oaW50JyBtb2R1bGUtc3BlY2lmaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2NmZm90eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U3NTkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZvdHlwZXMuaApAQCAtMCwwICsxLDEwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2Zmb3R5cGVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEJhc2ljIE9wZW5UeXBlL0NGRiBvYmplY3QgdHlwZSBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDE3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIENGRk9UWVBFU19IXworI2RlZmluZSBDRkZPVFlQRVNfSF8KKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9UUlVFVFlQRV9UWVBFU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9ISU5UU19ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICB0eXBlZGVmIFRUX0ZhY2UgIENGRl9GYWNlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ0ZGX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYW4gT3BlblR5cGUgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX1NpemVSZWNfCisgIHsKKyAgICBGVF9TaXplUmVjICByb290OworICAgIEZUX1VMb25nICAgIHN0cmlrZV9pbmRleDsgICAgLyogMHhGRkZGRkZGRiB0byBpbmRpY2F0ZSBpbnZhbGlkICovCisKKyAgfSBDRkZfU2l6ZVJlYywgKkNGRl9TaXplOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ0ZGX0dseXBoU2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYW4gT3BlblR5cGUgZ2x5cGggc2xvdCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0dseXBoU2xvdFJlY18KKyAgeworICAgIEZUX0dseXBoU2xvdFJlYyAgcm9vdDsKKworICAgIEZUX0Jvb2wgIGhpbnQ7CisgICAgRlRfQm9vbCAgc2NhbGVkOworCisgICAgRlRfRml4ZWQgIHhfc2NhbGU7CisgICAgRlRfRml4ZWQgIHlfc2NhbGU7CisKKyAgfSBDRkZfR2x5cGhTbG90UmVjLCAqQ0ZGX0dseXBoU2xvdDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENGRl9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBpbnRlcmZhY2UgdG8gdGhlIGBpbnRlcm5hbCcgZmllbGQgb2YgYEZUX1NpemUnLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9JbnRlcm5hbFJlY18KKyAgeworICAgIFBTSF9HbG9iYWxzICB0b3Bmb250OworICAgIFBTSF9HbG9iYWxzICBzdWJmb250c1tDRkZfTUFYX0NJRF9GT05UU107CisKKyAgfSBDRkZfSW50ZXJuYWxSZWMsICpDRkZfSW50ZXJuYWw7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFN1YmdseXBoIHRyYW5zZm9ybWF0aW9uIHJlY29yZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9UcmFuc2Zvcm1fCisgIHsKKyAgICBGVF9GaXhlZCAgICB4eCwgeHk7ICAgICAvKiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggY29lZmZpY2llbnRzICovCisgICAgRlRfRml4ZWQgICAgeXgsIHl5OworICAgIEZUX0YyNkRvdDYgIG94LCBveTsgICAgIC8qIG9mZnNldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICB9IENGRl9UcmFuc2Zvcm07CisKKworRlRfRU5EX0hFQURFUgorCisKKyNlbmRpZiAvKiBDRkZPVFlQRVNfSF8gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmdHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmZnR5cGVzLmgKcmVuYW1lIHRvIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvY2ZmdHlwZXMuaAppbmRleCA4ZDQzZTI4Li43YzA3ZTFhIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnR5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9jZmZ0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgT3BlblR5cGUvQ0ZGIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTExMiw4ICsxMTMsOCBAQAogICAgIEZUX1VJbnQgIHNob3J0RGVsdGFDb3VudDsgLyogbm90IHVzZWQ7IGFsd2F5cyB6ZXJvICovCiAjZW5kaWYKIAotICAgIEZUX1VJbnQgICByZWdpb25JZHhDb3VudDsgLyogbnVtYmVyIG9mIHJlZ2lvbnMgaW4gdGhpcyB2YXIgZGF0YSAqLwotICAgIEZUX1VJbnQqICByZWdpb25JbmRpY2VzOyAgLyogYXJyYXkgb2YgYHJlZ2lvbkNvdW50JyBpbmRpY2VzOyAgICAqLworICAgIEZUX1VJbnQgICByZWdpb25JZHhDb3VudDsgLyogbnVtYmVyIG9mIHJlZ2lvbiBpbmRleGVzICAgICAgICAgICAqLworICAgIEZUX1VJbnQqICByZWdpb25JbmRpY2VzOyAgLyogYXJyYXkgb2YgYHJlZ2lvbklkeENvdW50JyBpbmRpY2VzOyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlc2UgaW5kZXggYHZhclJlZ2lvbkxpc3QnICAgICAgICAqLwogICB9IENGRl9WYXJEYXRhOwogCkBAIC0zODEsNiArMzgyLDkgQEAKICAgICAvKiBpbnRlcmZhY2UgdG8gUG9zdHNjcmlwdCBOYW1lcyBzZXJ2aWNlICovCiAgICAgRlRfU2VydmljZV9Qc0NNYXBzICBwc25hbWVzOwogCisgICAgLyogaW50ZXJmYWNlIHRvIENGRkxvYWQgc2VydmljZSAqLworICAgIGNvbnN0IHZvaWQqICBjZmZsb2FkOworCiAgICAgLyogc2luY2UgdmVyc2lvbiAyLjMuMCAqLwogICAgIFBTX0ZvbnRJbmZvUmVjKiAgZm9udF9pbmZvOyAgIC8qIGZvbnQgaW5mbyBkaWN0aW9uYXJ5ICovCiAKQEAgLTM5NCw2ICszOTgsOSBAQAogICAgIC8qIHNpbmNlIHZlcnNpb24gMi43LjEgKi8KICAgICBDRkZfVlN0b3JlUmVjICAgIHZzdG9yZTsgICAgICAgIC8qIHBhcnNlZCB2c3RvcmUgc3RydWN0dXJlICovCiAKKyAgICAvKiBzaW5jZSB2ZXJzaW9uIDIuOSAqLworICAgIFBTX0ZvbnRFeHRyYVJlYyogIGZvbnRfZXh0cmE7CisKICAgfSBDRkZfRm9udFJlYzsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaAppbmRleCBjOWFjOWQ4Li44MThhODEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM5OSwxNiArMzk5LDQyIEBACiAjZW5kaWYgLyogMCAqLwogCiAKLSNkZWZpbmUgSU5UX1RPX0YyNkRPVDYoIHggKSAgICAoIChGVF9Mb25nKSh4KSA8PCA2ICApCi0jZGVmaW5lIElOVF9UT19GMkRPVDE0KCB4ICkgICAgKCAoRlRfTG9uZykoeCkgPDwgMTQgKQotI2RlZmluZSBJTlRfVE9fRklYRUQoIHggKSAgICAgICggKEZUX0xvbmcpKHgpIDw8IDE2ICkKLSNkZWZpbmUgRjJET1QxNF9UT19GSVhFRCggeCApICAoIChGVF9Mb25nKSh4KSA8PCAyICApCi0jZGVmaW5lIEZMT0FUX1RPX0ZJWEVEKCB4ICkgICAgKCAoRlRfTG9uZykoIHggKiA2NTUzNi4wICkgKQorI2RlZmluZSBJTlRfVE9fRjI2RE9UNiggeCApICAgICggKEZUX0xvbmcpKHgpICogNjQgICkgICAgLyogPDwgNiAgKi8KKyNkZWZpbmUgSU5UX1RPX0YyRE9UMTQoIHggKSAgICAoIChGVF9Mb25nKSh4KSAqIDE2Mzg0ICkgIC8qIDw8IDE0ICovCisjZGVmaW5lIElOVF9UT19GSVhFRCggeCApICAgICAgKCAoRlRfTG9uZykoeCkgKiA2NTUzNiApICAvKiA8PCAxNiAqLworI2RlZmluZSBGMkRPVDE0X1RPX0ZJWEVEKCB4ICkgICggKEZUX0xvbmcpKHgpICogNCApICAgICAgLyogPDwgMiAgKi8KICNkZWZpbmUgRklYRURfVE9fSU5UKCB4ICkgICAgICAoIEZUX1JvdW5kRml4KCB4ICkgPj4gMTYgKQogCiAjZGVmaW5lIFJPVU5EX0YyNkRPVDYoIHggKSAgICAgKCB4ID49IDAgPyAoICAgICggKHgpICsgMzIgKSAmIC02NCApICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIC0oICggMzIgLSAoeCkgKSAmIC02NCApICkgKQogCisgIC8qCisgICAqICBUaGUgZm9sbG93aW5nIG1hY3JvcyBoYXZlIHR3byBwdXJwb3Nlcy4KKyAgICoKKyAgICogIC4gVGFnIHBsYWNlcyB3aGVyZSBvdmVyZmxvdyBpcyBleHBlY3RlZCBhbmQgaGFybWxlc3MuCisgICAqCisgICAqICAuIEF2b2lkIHJ1bi10aW1lIHNhbml0aXplciBlcnJvcnMuCisgICAqCisgICAqICBVc2Ugd2l0aCBjYXJlIQorICAgKi8KKyNkZWZpbmUgQUREX0xPTkcoIGEsIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChGVF9Mb25nKSggKEZUX1VMb25nKShhKSArIChGVF9VTG9uZykoYikgKQorI2RlZmluZSBTVUJfTE9ORyggYSwgYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEZUX0xvbmcpKCAoRlRfVUxvbmcpKGEpIC0gKEZUX1VMb25nKShiKSApCisjZGVmaW5lIE1VTF9MT05HKCBhLCBiICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoRlRfTG9uZykoIChGVF9VTG9uZykoYSkgKiAoRlRfVUxvbmcpKGIpICkKKyNkZWZpbmUgTkVHX0xPTkcoIGEgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChGVF9Mb25nKSggKEZUX1VMb25nKTAgLSAoRlRfVUxvbmcpKGEpICkKKworI2RlZmluZSBBRERfSU5UMzIoIGEsIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEZUX0ludDMyKSggKEZUX1VJbnQzMikoYSkgKyAoRlRfVUludDMyKShiKSApCisjZGVmaW5lIFNVQl9JTlQzMiggYSwgYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAoRlRfSW50MzIpKCAoRlRfVUludDMyKShhKSAtIChGVF9VSW50MzIpKGIpICkKKyNkZWZpbmUgTVVMX0lOVDMyKCBhLCBiICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChGVF9JbnQzMikoIChGVF9VSW50MzIpKGEpICogKEZUX1VJbnQzMikoYikgKQorI2RlZmluZSBORUdfSU5UMzIoIGEgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKEZUX0ludDMyKSggKEZUX1VJbnQzMikwIC0gKEZUX1VJbnQzMikoYSkgKQorCiAKIEZUX0VORF9IRUFERVIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaAppbmRleCA1ZGNkMmIxLi4yOTJhNGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgY29tcG9uZW50IChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGluY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaApyZW5hbWUgdG8gaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oCmluZGV4IGU4MmZhOGQuLjU4ZGQzNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJ2LmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0ZHJpdmVyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGRydi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgZm9udCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIGludGVybmFsIGZvbnQgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgRlREUklWRVJfSF8KLSNkZWZpbmUgRlREUklWRVJfSF8KKyNpZm5kZWYgRlREUlZfSF8KKyNkZWZpbmUgRlREUlZfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTM5NCw3ICszOTQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBGVERSSVZFUl9IXyAqLworI2VuZGlmIC8qIEZURFJWX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmgKaW5kZXggZjQxYzNkZi4uYTAwMmZkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCmluZGV4IDU5ZTViNTguLjA1NGVhZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIG1lbW9yeSBtYW5hZ2VtZW50IG1hY3JvcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIxMCw3ICsyMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IgKSApCiAKLSNkZWZpbmUgRlRfTUVNX1FSRUFMTE9DX01VTFQoIHB0ciwgb2xkY250LCBuZXdjbnQsIGl0bXN6KSAgICAgICAgICAgIFwKKyNkZWZpbmUgRlRfTUVNX1FSRUFMTE9DX01VTFQoIHB0ciwgb2xkY250LCBuZXdjbnQsIGl0bXN6ICkgICAgICAgICAgIFwKICAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9xcmVhbGxvYyggbWVtb3J5LCAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKGl0bXN6KSwgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKG9sZGNudCksIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oCmluZGV4IDJmMThkMDcuLjM3YzZiYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcHJpdmF0ZSBiYXNlIGNsYXNzZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfQVVUT0hJTlRfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCiAjaW5jbHVkZSBGVF9JTkNSRU1FTlRBTF9ICkBAIC04NCwxNCArODUsMzAgQEAKICAgICAgICAgICAgICAgICAgIDogeSArICggMyAqIHggPj4gMyApICkKIAogICAvKiB3ZSB1c2UgRlRfVFlQRU9GIHRvIHN1cHByZXNzIHNpZ25lZG5lc3MgY29tcGlsYXRpb24gd2FybmluZ3MgKi8KLSNkZWZpbmUgRlRfUEFEX0ZMT09SKCB4LCBuICkgICggKHgpICYgfkZUX1RZUEVPRiggeCApKCAobiktMSApICkKLSNkZWZpbmUgRlRfUEFEX1JPVU5EKCB4LCBuICkgIEZUX1BBRF9GTE9PUiggKHgpICsgKChuKS8yKSwgbiApCi0jZGVmaW5lIEZUX1BBRF9DRUlMKCB4LCBuICkgICBGVF9QQURfRkxPT1IoICh4KSArICgobiktMSksIG4gKQorI2RlZmluZSBGVF9QQURfRkxPT1IoIHgsIG4gKSAgKCAoeCkgJiB+RlRfVFlQRU9GKCB4ICkoIChuKSAtIDEgKSApCisjZGVmaW5lIEZUX1BBRF9ST1VORCggeCwgbiApICBGVF9QQURfRkxPT1IoICh4KSArIChuKSAvIDIsIG4gKQorI2RlZmluZSBGVF9QQURfQ0VJTCggeCwgbiApICAgRlRfUEFEX0ZMT09SKCAoeCkgKyAobikgLSAxLCBuICkKIAogI2RlZmluZSBGVF9QSVhfRkxPT1IoIHggKSAgICAgKCAoeCkgJiB+RlRfVFlQRU9GKCB4ICk2MyApCiAjZGVmaW5lIEZUX1BJWF9ST1VORCggeCApICAgICBGVF9QSVhfRkxPT1IoICh4KSArIDMyICkKICNkZWZpbmUgRlRfUElYX0NFSUwoIHggKSAgICAgIEZUX1BJWF9GTE9PUiggKHgpICsgNjMgKQogCisgIC8qIHNwZWNpYWxpemVkIHZlcnNpb25zIChmb3Igc2lnbmVkIHZhbHVlcykgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogdGhhdCBkb24ndCBwcm9kdWNlIHJ1bi10aW1lIGVycm9ycyBkdWUgdG8gaW50ZWdlciBvdmVyZmxvdyAqLworI2RlZmluZSBGVF9QQURfUk9VTkRfTE9ORyggeCwgbiApICBGVF9QQURfRkxPT1IoIEFERF9MT05HKCAoeCksIChuKSAvIDIgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gKQorI2RlZmluZSBGVF9QQURfQ0VJTF9MT05HKCB4LCBuICkgICBGVF9QQURfRkxPT1IoIEFERF9MT05HKCAoeCksIChuKSAtIDEgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gKQorI2RlZmluZSBGVF9QSVhfUk9VTkRfTE9ORyggeCApICAgICBGVF9QSVhfRkxPT1IoIEFERF9MT05HKCAoeCksIDMyICkgKQorI2RlZmluZSBGVF9QSVhfQ0VJTF9MT05HKCB4ICkgICAgICBGVF9QSVhfRkxPT1IoIEFERF9MT05HKCAoeCksIDYzICkgKQorCisjZGVmaW5lIEZUX1BBRF9ST1VORF9JTlQzMiggeCwgbiApICBGVF9QQURfRkxPT1IoIEFERF9JTlQzMiggKHgpLCAobikgLyAyICksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiApCisjZGVmaW5lIEZUX1BBRF9DRUlMX0lOVDMyKCB4LCBuICkgICBGVF9QQURfRkxPT1IoIEFERF9JTlQzMiggKHgpLCAobikgLSAxICksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiApCisjZGVmaW5lIEZUX1BJWF9ST1VORF9JTlQzMiggeCApICAgICBGVF9QSVhfRkxPT1IoIEFERF9JTlQzMiggKHgpLCAzMiApICkKKyNkZWZpbmUgRlRfUElYX0NFSUxfSU5UMzIoIHggKSAgICAgIEZUX1BJWF9GTE9PUiggQUREX0lOVDMyKCAoeCksIDYzICkgKQorCiAKICAgLyoKICAgICogIGNoYXJhY3RlciBjbGFzc2lmaWNhdGlvbiBmdW5jdGlvbnMgLS0gc2luY2UgdGhlc2UgYXJlIHVzZWQgdG8gcGFyc2UKQEAgLTEzOSw3ICsxNTYsNyBAQAogICB9IEZUX0NNYXBSZWM7CiAKICAgLyogdHlwZWNhc2UgYW55IHBvaW50ZXIgdG8gYSBjaGFybWFwIGhhbmRsZSAqLwotI2RlZmluZSBGVF9DTUFQKCB4ICkgICAgICAgICAgICAgICgoRlRfQ01hcCkoIHggKSkKKyNkZWZpbmUgRlRfQ01BUCggeCApICAoIChGVF9DTWFwKSggeCApICkKIAogICAvKiBvYnZpb3VzIG1hY3JvcyAqLwogI2RlZmluZSBGVF9DTUFQX1BMQVRGT1JNX0lEKCB4ICkgIEZUX0NNQVAoIHggKS0+Y2hhcm1hcC5wbGF0Zm9ybV9pZApAQCAtMjk1LDYgKzMxMiwyNyBAQAogICBGVF9DTWFwX0RvbmUoIEZUX0NNYXAgIGNtYXAgKTsKIAogCisgIC8qIGFkZHMgTENEIHBhZGRpbmcgdG8gTWluIGFuZCBNYXggYm91bmRhcmllcyAqLworICBGVF9CQVNFKCB2b2lkICkKKyAgZnRfbGNkX3BhZGRpbmcoIEZUX1BvcyogICAgICAgTWluLAorICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICBNYXgsCisgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCisKKyAgdHlwZWRlZiB2b2lkICAoKkZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jKSggRlRfQml0bWFwKiAgICAgIGJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgd2VpZ2h0cyApOworCisKKyAgLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBMQ0QgZmlsdGVyLCBhbiBpbi1wbGFjZSwgNS10YXAgRklSIGZpbHRlci4gKi8KKyAgRlRfQkFTRSggdm9pZCApCisgIGZ0X2xjZF9maWx0ZXJfZmlyKCBGVF9CaXRtYXAqICAgICAgICAgICBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICAgICBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgRlRfTGNkRml2ZVRhcEZpbHRlciAgd2VpZ2h0cyApOworCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KKwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzUyLDkgKzM5MCwxMCBAQAogICAvKiAgICAgIG9wZXJhdG9yLiAgVmFsdWV+MCBtZWFucyB0byB1c2UgdGhlIGZvbnQncyB2YWx1ZS4gIFZhbHVlfi0xICAgICAgKi8KICAgLyogICAgICBtZWFucyB0byB1c2UgdGhlIENGRiBkcml2ZXIncyBkZWZhdWx0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsY2Rfd2VpZ2h0cyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBPdmVycmlkZXMgdGhlIGxpYnJhcnkgZGVmYXVsdCB3aXRoIGN1c3RvbSB3ZWlnaHRzIGZvciB0aGUgNS10YXAgICovCi0gIC8qICAgICAgRklSIGZpbHRlci4gIGB7MCwgMCwgMCwgMCwgMH0nIG1lYW5zIHRvIHVzZSB0aGUgbGlicmFyeSBkZWZhdWx0LiAqLworICAvKiAgICBsY2Rfd2VpZ2h0cyAgICAgIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGNkX2ZpbHRlcl9mdW5jICA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSWYgc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGFjdGl2YXRlZCwgdGhlIExDRCBmaWx0ZXJpbmcgd2VpZ2h0cyAgICAqLworICAvKiAgICAgIGFuZCBjYWxsYmFjayBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHJlZmNvdW50IDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIEEgY291bnRlciBpbml0aWFsaXplZCB0b34xIGF0IHRoZSB0aW1lIGFuIEBGVF9GYWNlIHN0cnVjdHVyZSBpcyAgKi8KQEAgLTM3Niw4ICs0MTUsMTAgQEAKIAogICAgIEZUX0NoYXIgICAgICAgICAgICAgIG5vX3N0ZW1fZGFya2VuaW5nOwogICAgIEZUX0ludDMyICAgICAgICAgICAgIHJhbmRvbV9zZWVkOworCiAjaWZkZWYgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcKLSAgICBGVF9MY2RGaXZlVGFwRmlsdGVyICBsY2Rfd2VpZ2h0czsgIC8qIHByZXNldCBvciBjdXN0b20gZmlsdGVyIHdlaWdodHMgKi8KKyAgICBGVF9MY2RGaXZlVGFwRmlsdGVyICAgICAgbGNkX3dlaWdodHM7ICAgICAgLyogZmlsdGVyIHdlaWdodHMsIGlmIGFueSAqLworICAgIEZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jICBsY2RfZmlsdGVyX2Z1bmM7ICAvKiBmaWx0ZXJpbmcgY2FsbGJhY2sgICAgICovCiAjZW5kaWYKIAogICAgIEZUX0ludCAgcmVmY291bnQ7CkBAIC00MzMsOCArNDc0LDYgQEAKICAgfSBGVF9HbHlwaFNsb3RfSW50ZXJuYWxSZWM7CiAKIAotI2lmIDAKLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDQyLDE4ICs0ODEsMjYgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmllbGRzIG9mIGVhY2ggRlRfU2l6ZSAgICAgICAgKi8KLSAgLyogICAgb2JqZWN0LiAgQ3VycmVudGx5LCBpdCdzIGVtcHR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1vZHVsZV9kYXRhICAgICAgOjogRGF0YSBzcGVjaWZpYyB0byBhIGRyaXZlciBtb2R1bGUuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXV0b2hpbnRfbW9kZSAgICA6OiBUaGUgdXNlZCBhdXRvLWhpbnRpbmcgbW9kZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhdXRvaGludF9tZXRyaWNzIDo6IE1ldHJpY3MgdXNlZCBieSB0aGUgYXV0by1oaW50ZXIuICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9TaXplX0ludGVybmFsUmVjXwogICB7Ci0gICAgLyogZW1wdHkgKi8KKyAgICB2b2lkKiAgbW9kdWxlX2RhdGE7CisKKyAgICBGVF9SZW5kZXJfTW9kZSAgIGF1dG9oaW50X21vZGU7CisgICAgRlRfU2l6ZV9NZXRyaWNzICBhdXRvaGludF9tZXRyaWNzOwogCiAgIH0gRlRfU2l6ZV9JbnRlcm5hbFJlYzsKIAotI2VuZGlmCi0KIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00OTMsNyArNTQwLDggQEAKIAogCiAgIC8qIHR5cGVjYXN0IGFuIG9iamVjdCB0byBhbiBGVF9Nb2R1bGUgKi8KLSNkZWZpbmUgRlRfTU9EVUxFKCB4ICkgICAgICAgICAgKChGVF9Nb2R1bGUpKCB4ICkpCisjZGVmaW5lIEZUX01PRFVMRSggeCApICAoIChGVF9Nb2R1bGUpKHgpICkKKwogI2RlZmluZSBGVF9NT0RVTEVfQ0xBU1MoIHggKSAgICBGVF9NT0RVTEUoIHggKS0+Y2xhenoKICNkZWZpbmUgRlRfTU9EVUxFX0xJQlJBUlkoIHggKSAgRlRfTU9EVUxFKCB4ICktPmxpYnJhcnkKICNkZWZpbmUgRlRfTU9EVUxFX01FTU9SWSggeCApICAgRlRfTU9EVUxFKCB4ICktPm1lbW9yeQpAQCAtNTc5LDkgKzYyNyw5IEBACiAKICAgLyogYSBmZXcgbWFjcm9zIHVzZWQgdG8gcGVyZm9ybSBlYXN5IHR5cGVjYXN0cyB3aXRoIG1pbmltYWwgYnJhaW4gZGFtYWdlICovCiAKLSNkZWZpbmUgRlRfRkFDRSggeCApICAgICAgICAgICgoRlRfRmFjZSkoeCkpCi0jZGVmaW5lIEZUX1NJWkUoIHggKSAgICAgICAgICAoKEZUX1NpemUpKHgpKQotI2RlZmluZSBGVF9TTE9UKCB4ICkgICAgICAgICAgKChGVF9HbHlwaFNsb3QpKHgpKQorI2RlZmluZSBGVF9GQUNFKCB4ICkgICAgICAgICAgKCAoRlRfRmFjZSkoeCkgKQorI2RlZmluZSBGVF9TSVpFKCB4ICkgICAgICAgICAgKCAoRlRfU2l6ZSkoeCkgKQorI2RlZmluZSBGVF9TTE9UKCB4ICkgICAgICAgICAgKCAoRlRfR2x5cGhTbG90KSh4KSApCiAKICNkZWZpbmUgRlRfRkFDRV9EUklWRVIoIHggKSAgIEZUX0ZBQ0UoIHggKS0+ZHJpdmVyCiAjZGVmaW5lIEZUX0ZBQ0VfTElCUkFSWSggeCApICBGVF9GQUNFX0RSSVZFUiggeCApLT5yb290LmxpYnJhcnkKQEAgLTY4Miw2ICs3MzAsMTIgQEAKICAgZnRfZ2x5cGhzbG90X2ZyZWVfYml0bWFwKCBGVF9HbHlwaFNsb3QgIHNsb3QgKTsKIAogCisgIC8qIFByZXNldCBiaXRtYXAgbWV0cmljcyBvZiBhbiBvdXRsaW5lIGdseXBoc2xvdCBwcmlvciB0byByZW5kZXJpbmcuICovCisgIEZUX0JBU0UoIHZvaWQgKQorICBmdF9nbHlwaHNsb3RfcHJlc2V0X2JpdG1hcCggRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBvcmlnaW4gKTsKKwogICAvKiBBbGxvY2F0ZSBhIG5ldyBiaXRtYXAgYnVmZmVyIGluIGEgZ2x5cGggc2xvdC4gKi8KICAgRlRfQkFTRSggRlRfRXJyb3IgKQogICBmdF9nbHlwaHNsb3RfYWxsb2NfYml0bWFwKCBGVF9HbHlwaFNsb3QgIHNsb3QsCkBAIC03MDgsMTAgKzc2MiwxMCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jZGVmaW5lIEZUX1JFTkRFUkVSKCB4ICkgICAgICAoKEZUX1JlbmRlcmVyKSggeCApKQotI2RlZmluZSBGVF9HTFlQSCggeCApICAgICAgICAgKChGVF9HbHlwaCkoIHggKSkKLSNkZWZpbmUgRlRfQklUTUFQX0dMWVBIKCB4ICkgICgoRlRfQml0bWFwR2x5cGgpKCB4ICkpCi0jZGVmaW5lIEZUX09VVExJTkVfR0xZUEgoIHggKSAoKEZUX091dGxpbmVHbHlwaCkoIHggKSkKKyNkZWZpbmUgRlRfUkVOREVSRVIoIHggKSAgICAgICAoIChGVF9SZW5kZXJlcikoeCkgKQorI2RlZmluZSBGVF9HTFlQSCggeCApICAgICAgICAgICggKEZUX0dseXBoKSh4KSApCisjZGVmaW5lIEZUX0JJVE1BUF9HTFlQSCggeCApICAgKCAoRlRfQml0bWFwR2x5cGgpKHgpICkKKyNkZWZpbmUgRlRfT1VUTElORV9HTFlQSCggeCApICAoIChGVF9PdXRsaW5lR2x5cGgpKHgpICkKIAogCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9SZW5kZXJlclJlY18KQEAgLTc0Miw3ICs3OTYsNyBAQAogCiAKICAgLyogdHlwZWNhc3QgYSBtb2R1bGUgaW50byBhIGRyaXZlciBlYXNpbHkgKi8KLSNkZWZpbmUgRlRfRFJJVkVSKCB4ICkgICAgICAgICgoRlRfRHJpdmVyKSh4KSkKKyNkZWZpbmUgRlRfRFJJVkVSKCB4ICkgICggKEZUX0RyaXZlcikoeCkgKQogCiAgIC8qIHR5cGVjYXN0IGEgbW9kdWxlIGFzIGEgZHJpdmVyLCBhbmQgZ2V0IGl0cyBkcml2ZXIgY2xhc3MgKi8KICNkZWZpbmUgRlRfRFJJVkVSX0NMQVNTKCB4ICkgIEZUX0RSSVZFUiggeCApLT5jbGF6egpAQCAtNzk4LDE4ICs4NTIsNiBAQAogI2RlZmluZSBGVF9ERUJVR19IT09LX1RSVUVUWVBFICAwCiAKIAotICB0eXBlZGVmIHZvaWQgICgqRlRfQml0bWFwX0xjZEZpbHRlckZ1bmMpKCBGVF9CaXRtYXAqICAgICAgYml0bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgcmVuZGVyX21vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgICB3ZWlnaHRzICk7Ci0KLQotICAvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IExDRCBmaWx0ZXIsIGFuIGluLXBsYWNlLCA1LXRhcCBGSVIgZmlsdGVyLiAqLwotICBGVF9CQVNFKCB2b2lkICkKLSAgZnRfbGNkX2ZpbHRlcl9maXIoIEZUX0JpdG1hcCogICAgICAgICAgIGJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgICAgIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICBGVF9MY2RGaXZlVGFwRmlsdGVyICB3ZWlnaHRzICk7Ci0KLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODUwLDIyICs4OTIsMTEgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGF1dG9faGludGVyICAgICAgOjogVGhlIGF1dG8taGludGVyIG1vZHVsZSBpbnRlcmZhY2UuICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFzdGVyX3Bvb2wgICAgICA6OiBUaGUgcmFzdGVyIG9iamVjdCdzIHJlbmRlciBwb29sLiAgVGhpcyBjYW4gICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgaWRlYWxseSBiZSBjaGFuZ2VkIGR5bmFtaWNhbGx5IGF0IHJ1bi10aW1lLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcmFzdGVyX3Bvb2xfc2l6ZSA6OiBUaGUgc2l6ZSBvZiB0aGUgcmVuZGVyIHBvb2wgaW4gYnl0ZXMuICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBkZWJ1Z19ob29rcyAgICAgIDo6IEFuIGFycmF5IG9mIGZvdXIgZnVuY3Rpb24gcG9pbnRlcnMgdGhhdCBhbGxvdyAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2dlcnMgdG8gaG9vayBpbnRvIGEgZm9udCBmb3JtYXQncyAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0ZXIuICBDdXJyZW50bHksIG9ubHkgdGhlIFRydWVUeXBlICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlIGRlYnVnZ2VyIHVzZXMgdGhpcy4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxjZF9maWx0ZXIgICAgICAgOjogSWYgc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGFjdGl2YXRlZCwgdGhlICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIExDRCBmaWx0ZXIgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGxjZF9leHRyYSAgICAgICAgOjogSWYgc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGFjdGl2YXRlZCwgdGhlIG51bWJlciAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgIG9mIGV4dHJhIHBpeGVscyBuZWVkZWQgZm9yIHRoZSBMQ0QgZmlsdGVyLiAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGxjZF93ZWlnaHRzICAgICAgOjogSWYgc3VicGl4ZWwgcmVuZGVyaW5nIGlzIGFjdGl2YXRlZCwgdGhlIExDRCAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciB3ZWlnaHRzLCBpZiBhbnkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04OTcsMTUgKzkyOCw5IEBACiAgICAgRlRfUmVuZGVyZXIgICAgICAgIGN1cl9yZW5kZXJlcjsgICAgIC8qIGN1cnJlbnQgb3V0bGluZSByZW5kZXJlciAqLwogICAgIEZUX01vZHVsZSAgICAgICAgICBhdXRvX2hpbnRlcjsKIAotICAgIEZUX0J5dGUqICAgICAgICAgICByYXN0ZXJfcG9vbDsgICAgICAvKiBzY2FuLWxpbmUgY29udmVyc2lvbiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW5kZXIgcG9vbCAgICAgICAgICAqLwotICAgIEZUX1VMb25nICAgICAgICAgICByYXN0ZXJfcG9vbF9zaXplOyAvKiBzaXplIG9mIHJlbmRlciBwb29sIGluIGJ5dGVzICovCi0KICAgICBGVF9EZWJ1Z0hvb2tfRnVuYyAgZGVidWdfaG9va3NbNF07CiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORwotICAgIEZUX0xjZEZpbHRlciAgICAgICAgICAgICBsY2RfZmlsdGVyOwotICAgIEZUX0ludCAgICAgICAgICAgICAgICAgICBsY2RfZXh0cmE7ICAgICAgICAvKiBudW1iZXIgb2YgZXh0cmEgcGl4ZWxzICovCiAgICAgRlRfTGNkRml2ZVRhcEZpbHRlciAgICAgIGxjZF93ZWlnaHRzOyAgICAgIC8qIGZpbHRlciB3ZWlnaHRzLCBpZiBhbnkgKi8KICAgICBGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYyAgbGNkX2ZpbHRlcl9mdW5jOyAgLyogZmlsdGVyaW5nIGNhbGxiYWNrICAgICAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmgKaW5kZXggMGQ0M2VkMi4uNTIxNGYwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBpYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyAoZGVjbGFyYXRpb24pLiAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmI2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cHNwcm9wLmgKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRwc3Byb3AuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEdldCBhbmQgc2V0IHByb3BlcnRpZXMgb2YgUG9zdFNjcmlwdCBkcml2ZXJzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDE3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIEZUUFNQUk9QX0hfCisjZGVmaW5lIEZUUFNQUk9QX0hfCisKKworI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICisKKworRlRfQkVHSU5fSEVBREVSCisKKworICBGVF9CQVNFX0NBTExCQUNLKCBGVF9FcnJvciApCisgIHBzX3Byb3BlcnR5X3NldCggRlRfTW9kdWxlICAgIG1vZHVsZSwgICAgICAgICAvKiBQU19Ecml2ZXIgKi8KKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIHZhbHVlX2lzX3N0cmluZyApOworCisgIEZUX0JBU0VfQ0FMTEJBQ0soIEZUX0Vycm9yICkKKyAgcHNfcHJvcGVydHlfZ2V0KCBGVF9Nb2R1bGUgICAgbW9kdWxlLCAgICAgICAgIC8qIFBTX0RyaXZlciAqLworICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICB2YWx1ZSApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogRlRQU1BST1BfSF8gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKaW5kZXggMjVhNDRhNC4uMWFjYTQ4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRW1iZWRkZWQgcmVzb3VyY2UgZm9ya3MgYWNjZXNzb3IgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oCmluZGV4IDcxZWY5Y2EuLmUwMWMxNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgc2VydmljZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzMwLDYgKzMzMCwzMiBAQAogICAgIHsgTlVMTCwgTlVMTCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAorI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxMCggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF82LCBzZXJ2X2RhdGFfNiwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNywgc2Vydl9kYXRhXzcsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzgsIHNlcnZfZGF0YV84LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF85LCBzZXJ2X2RhdGFfOSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMTAsIHNlcnZfZGF0YV8xMCApICAgICAgICAgICAgICBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlRGVzY1JlYyAgY2xhc3NfW10gPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF82LCBzZXJ2X2RhdGFfNiB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfNywgc2Vydl9kYXRhXzcgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBzZXJ2X2lkXzgsIHNlcnZfZGF0YV84IH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgc2Vydl9pZF85LCBzZXJ2X2RhdGFfOSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7IHNlcnZfaWRfMTAsIHNlcnZfZGF0YV8xMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyBOVUxMLCBOVUxMIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9OworCiAjZWxzZSAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzEoIGNsYXNzXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTU3LDcgKzU4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MpICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTYwOCw3ICs2MzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzKSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcyApICAgICAgICAgICBcCiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEZUX1NlcnZpY2VEZXNjUmVjKiAgY2xhenogID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBGVF9FcnJvciAgICAgICAgICAgIGVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC02NjIsNyArNjg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGVF9DcmVhdGVfQ2xhc3NfICMjIGNsYXNzXyggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NlcnZpY2VEZXNjUmVjKiogIG91dHB1dF9jbGFzcykgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MgKSAgICAgICAgICAgXAogICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNzE5LDcgKzc0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGVF9FcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRlRfQ3JlYXRlX0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyoqICBvdXRwdXRfY2xhc3MpICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTc1NSw2ICs3ODEsNjggQEAKICAgICByZXR1cm4gRlRfRXJyX09rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0KIAorI2RlZmluZSBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUMxMCggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMSwgc2Vydl9kYXRhXzEsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzIsIHNlcnZfZGF0YV8yLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF8zLCBzZXJ2X2RhdGFfMywgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNCwgc2Vydl9kYXRhXzQsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzUsIHNlcnZfZGF0YV81LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF82LCBzZXJ2X2RhdGFfNiwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfNywgc2Vydl9kYXRhXzcsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2X2lkXzgsIHNlcnZfZGF0YV84LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydl9pZF85LCBzZXJ2X2RhdGFfOSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZfaWRfMTAsIHNlcnZfZGF0YV8xMCApICAgICAgICAgICAgICBcCisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9EZXN0cm95X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgbGlicmFyeSwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TZXJ2aWNlRGVzY1JlYyogIGNsYXp6ICkgICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggY2xhenogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEZUX0ZSRUUoIGNsYXp6ICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIEZUX0NyZWF0ZV9DbGFzc18gIyMgY2xhc3NfKCBGVF9MaWJyYXJ5ICAgICAgICAgICBsaWJyYXJ5LCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZURlc2NSZWMqKiAgb3V0cHV0X2NsYXNzICkgICAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRlRfU2VydmljZURlc2NSZWMqICBjbGF6eiAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEZUX0Vycm9yICAgICAgICAgICAgZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBGVF9NZW1vcnkgICAgICAgICAgIG1lbW9yeSA9IGxpYnJhcnktPm1lbW9yeTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIEZUX0FMTE9DKCBjbGF6eiwgc2l6ZW9mICggKmNsYXp6ICkgKiAxMSApICkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICByZXR1cm4gZXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsgMF0uc2Vydl9pZCAgID0gc2Vydl9pZF8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbIDBdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WyAxXS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsgMV0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbIDJdLnNlcnZfaWQgICA9IHNlcnZfaWRfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WyAyXS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsgM10uc2Vydl9pZCAgID0gc2Vydl9pZF80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbIDNdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV80OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WyA0XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsgNF0uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbIDVdLnNlcnZfaWQgICA9IHNlcnZfaWRfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WyA1XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsgNl0uc2Vydl9pZCAgID0gc2Vydl9pZF83OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbIDZdLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV83OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WyA3XS5zZXJ2X2lkICAgPSBzZXJ2X2lkXzg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsgN10uc2Vydl9kYXRhID0gc2Vydl9kYXRhXzg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbIDhdLnNlcnZfaWQgICA9IHNlcnZfaWRfOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WyA4XS5zZXJ2X2RhdGEgPSBzZXJ2X2RhdGFfOTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsgOV0uc2Vydl9pZCAgID0gc2Vydl9pZF8xMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2xhenpbIDldLnNlcnZfZGF0YSA9IHNlcnZfZGF0YV8xMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNsYXp6WzEwXS5zZXJ2X2lkICAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6elsxMF0uc2Vydl9kYXRhID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICpvdXRwdXRfY2xhc3MgPSBjbGF6ejsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX1BJQyAqLwogCiAKQEAgLTg5OCw3ICs5ODYsOSBAQAogICAgKi8KIAogI2RlZmluZSBGVF9TRVJWSUNFX0JERl9IICAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oPgorI2RlZmluZSBGVF9TRVJWSUNFX0NGRl9UQUJMRV9MT0FEX0ggICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmg+CiAjZGVmaW5lIEZUX1NFUlZJQ0VfQ0lEX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmg+CisjZGVmaW5lIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSCAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10Lmg+CiAjZGVmaW5lIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9IICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0Lmg+CiAjZGVmaW5lIEZUX1NFUlZJQ0VfR1hfVkFMSURBVEVfSCAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z3h2YWwuaD4KICNkZWZpbmUgRlRfU0VSVklDRV9LRVJOSU5HX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmg+CkBAIC05MTIsMTAgKzEwMDIsOSBAQAogI2RlZmluZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSCAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaD4KICNkZWZpbmUgRlRfU0VSVklDRV9TRk5UX0ggICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50Lmg+CiAjZGVmaW5lIEZUX1NFUlZJQ0VfVFJVRVRZUEVfRU5HSU5FX0ggICAgPGZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaD4KKyNkZWZpbmUgRlRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0ggICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaD4KICNkZWZpbmUgRlRfU0VSVklDRV9UVF9DTUFQX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaD4KICNkZWZpbmUgRlRfU0VSVklDRV9XSU5GTlRfSCAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9GT05UX0ZPUk1BVF9IICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaD4KLSNkZWZpbmUgRlRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0ggICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaD4KIAogIC8qICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaAppbmRleCAzZTJjMDdiLi5mOTAwMDJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFN0cmVhbSBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNjUsOCArMTY1LDggQEAKICNkZWZpbmUgRlRfQllURV9VMzIoIHAsIGksIHMgKSAgKCBGVF9VSU5UMzIoIEZUX0JZVEVfKCBwLCBpICkgKSA8PCAocykgKQogCiAKLSNkZWZpbmUgRlRfUEVFS19TSE9SVCggcCApICBGVF9JTlQxNiggRlRfQllURV9VMTYoIHAsIDAsIDgpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UxNiggcCwgMSwgMCkgKQorI2RlZmluZSBGVF9QRUVLX1NIT1JUKCBwICkgIEZUX0lOVDE2KCBGVF9CWVRFX1UxNiggcCwgMCwgOCApIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CWVRFX1UxNiggcCwgMSwgMCApICkKIAogI2RlZmluZSBGVF9QRUVLX1VTSE9SVCggcCApICBGVF9VSU5UMTYoIEZUX0JZVEVfVTE2KCBwLCAwLCA4ICkgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQllURV9VMTYoIHAsIDEsIDAgKSApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCmluZGV4IGNhZjVmYzkuLjgwOTJlNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRyYWNpbmcgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zOSw2ICszOSw3IEBACiBGVF9UUkFDRV9ERUYoIHJhY2Nlc3MgKSAgIC8qIHJlc291cmNlIGZvcmsgYWNjZXNzb3IgIChmdHJmb3JrLmMpICAqLwogRlRfVFJBQ0VfREVGKCBzeW50aCApICAgICAvKiBib2xkL3NsYW50IHN5bnRoZXNpemVyICAoZnRzeW50aC5jKSAgKi8KIEZUX1RSQUNFX0RFRiggYml0bWFwICkgICAgLyogYml0bWFwIGNoZWNrc3VtICAgICAgICAgKGZ0b2Jqcy5jKSAgICovCitGVF9UUkFDRV9ERUYoIHBzcHJvcHMgKSAgIC8qIFBTIGRyaXZlciBwcm9wZXJ0aWVzICAgIChmdHBzcHJvcC5jKSAqLwogCiAgIC8qIENhY2hlIHN1Yi1zeXN0ZW0gKi8KIEZUX1RSQUNFX0RFRiggY2FjaGUgKSAgICAgLyogY2FjaGUgc3ViLXN5c3RlbSAgICAgICAgKGZ0Y2FjaGUuYywgZXRjLikgKi8KQEAgLTY2LDIwICs2NywxOSBAQAogRlRfVFJBQ0VfREVGKCB0MWFmbSApCiBGVF9UUkFDRV9ERUYoIHQxZHJpdmVyICkKIEZUX1RSQUNFX0RFRiggdDFnbG9hZCApCi1GVF9UUkFDRV9ERUYoIHQxaGludCApCiBGVF9UUkFDRV9ERUYoIHQxbG9hZCApCiBGVF9UUkFDRV9ERUYoIHQxb2JqcyApCiBGVF9UUkFDRV9ERUYoIHQxcGFyc2UgKQogCiAgIC8qIFBvc3RTY3JpcHQgaGVscGVyIG1vZHVsZSBgcHNhdXgnICovCiBGVF9UUkFDRV9ERUYoIHQxZGVjb2RlICkKK0ZUX1RSQUNFX0RFRiggY2ZmZGVjb2RlICkKIEZUX1RSQUNFX0RFRiggcHNvYmpzICkKIEZUX1RSQUNFX0RFRiggcHNjb252ICkKIAogICAvKiBQb3N0U2NyaXB0IGhpbnRpbmcgbW9kdWxlIGBwc2hpbnRlcicgKi8KIEZUX1RSQUNFX0RFRiggcHNocmVjICkKLUZUX1RSQUNFX0RFRiggcHNoYWxnbzEgKQotRlRfVFJBQ0VfREVGKCBwc2hhbGdvMiApCitGVF9UUkFDRV9ERUYoIHBzaGFsZ28gKQogCiAgIC8qIFR5cGUgMiBkcml2ZXIgY29tcG9uZW50cyAqLwogRlRfVFJBQ0VfREVGKCBjZmZkcml2ZXIgKQpAQCAtOTYsNyArOTYsNiBAQAogRlRfVFJBQ0VfREVGKCB0NDIgKQogCiAgIC8qIENJRCBkcml2ZXIgY29tcG9uZW50cyAqLwotRlRfVFJBQ0VfREVGKCBjaWRhZm0gKQogRlRfVFJBQ0VfREVGKCBjaWRkcml2ZXIgKQogRlRfVFJBQ0VfREVGKCBjaWRnbG9hZCApCiBGVF9UUkFDRV9ERUYoIGNpZGxvYWQgKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHZhbGlkLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaAppbmRleCBkZjZmN2M1Li5jYWQ0N2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB2YWxpZGF0aW9uIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oCmluZGV4IDAyMDQ2ODEuLjhmNTQ2ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSW50ZXJuYWwgaGVhZGVyIGZpbGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgRlRfSU5URVJOQUxfREVCVUdfSCAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAjZGVmaW5lIEZUX0lOVEVSTkFMX0NBTENfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CiAjZGVmaW5lIEZUX0lOVEVSTkFMX0hBU0hfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmg+Ci0jZGVmaW5lIEZUX0lOVEVSTkFMX0RSSVZFUl9IICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfRFJJVkVSX0ggICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRydi5oPgogI2RlZmluZSBGVF9JTlRFUk5BTF9UUkFDRV9IICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaD4KICNkZWZpbmUgRlRfSU5URVJOQUxfR0xZUEhfTE9BREVSX0ggICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oPgogI2RlZmluZSBGVF9JTlRFUk5BTF9TRk5UX0ggICAgICAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3NmbnQuaD4KQEAgLTQ0LDkgKzQ0LDEzIEBACiAKICNkZWZpbmUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSCAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oPgogI2RlZmluZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0ggICAgPGZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaD4KKyNkZWZpbmUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19IICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHBzcHJvcC5oPgogCiAjZGVmaW5lIEZUX0lOVEVSTkFMX0FVVE9ISU5UX0ggICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaD4KIAorI2RlZmluZSBGVF9JTlRFUk5BTF9DRkZfVFlQRVNfSCAgICAgICAgICAgPGZyZWV0eXBlL2ludGVybmFsL2NmZnR5cGVzLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0NGRl9PQkpFQ1RTX1RZUEVTX0ggICA8ZnJlZXR5cGUvaW50ZXJuYWwvY2Zmb3R5cGVzLmg+CisKIAogI2lmIGRlZmluZWQoIF9NU0NfVkVSICkgICAgICAvKiBWaXN1YWwgQysrIChhbmQgSW50ZWwgQysrKSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKaW5kZXggMjg2ZDYwNC4uZjc3MzgwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIFBvc3RTY3JpcHQgZm9udHMgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUsMTIgKzI1LDMyIEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1RZUEUxX1RZUEVTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0hBU0hfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DRkZfT0JKRUNUU19UWVBFU19ICisKIAogCiBGVF9CRUdJTl9IRUFERVIKIAogCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBQb3N0U2NyaXB0IG1vZHVsZXMgZHJpdmVyIGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0RyaXZlclJlY18KKyAgeworICAgIEZUX0RyaXZlclJlYyAgcm9vdDsKKworICAgIEZUX1VJbnQgICBoaW50aW5nX2VuZ2luZTsKKyAgICBGVF9Cb29sICAgbm9fc3RlbV9kYXJrZW5pbmc7CisgICAgRlRfSW50ICAgIGRhcmtlbl9wYXJhbXNbOF07CisgICAgRlRfSW50MzIgIHJhbmRvbV9zZWVkOworCisgIH0gUFNfRHJpdmVyUmVjLCAqUFNfRHJpdmVyOworCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KQEAgLTQ0Miw2ICs0NjIsMjAyIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICBQUyBCVUlMREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgUFNfQnVpbGRlcl8gIFBTX0J1aWxkZXI7CisgIHR5cGVkZWYgY29uc3Qgc3RydWN0IFBTX0J1aWxkZXJfRnVuY3NSZWNfKiAgUFNfQnVpbGRlcl9GdW5jczsKKworICB0eXBlZGVmIHN0cnVjdCAgUFNfQnVpbGRlcl9GdW5jc1JlY18KKyAgeworICAgIHZvaWQKKyAgICAoKmluaXQpKCBQU19CdWlsZGVyKiAgcHNfYnVpbGRlciwKKyAgICAgICAgICAgICB2b2lkKiAgICAgICAgYnVpbGRlciwKKyAgICAgICAgICAgICBGVF9Cb29sICAgICAgaXNfdDEgKTsKKworICAgIHZvaWQKKyAgICAoKmRvbmUpKCBQU19CdWlsZGVyKiAgYnVpbGRlciApOworCisgIH0gUFNfQnVpbGRlcl9GdW5jc1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdHVyZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFBTX0J1aWxkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBBIHN0cnVjdHVyZSB1c2VkIGR1cmluZyBnbHlwaCBsb2FkaW5nIHRvIHN0b3JlIGl0cyBvdXRsaW5lLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSAgICAgICA6OiBUaGUgY3VycmVudCBtZW1vcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgIDo6IFRoZSBjdXJyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaCAgICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRlciAgICAgICA6OiBYWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmFzZSAgICAgICAgIDo6IFRoZSBiYXNlIGdseXBoIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjdXJyZW50ICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBvc194ICAgICAgICA6OiBUaGUgaG9yaXpvbnRhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9zX3kgICAgICAgIDo6IFRoZSB2ZXJ0aWNhbCB0cmFuc2xhdGlvbiAoaWYgY29tcG9zaXRlIGdseXBoKS4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsZWZ0X2JlYXJpbmcgOjogVGhlIGxlZnQgc2lkZSBiZWFyaW5nIHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFkdmFuY2UgICAgICA6OiBUaGUgaG9yaXpvbnRhbCBhZHZhbmNlIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmJveCAgICAgICAgIDo6IFVudXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXRoX2JlZ3VuICAgOjogQSBmbGFnIHdoaWNoIGluZGljYXRlcyB0aGF0IGEgbmV3IHBhdGggaGFzIGJlZ3VuLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfcG9pbnRzICA6OiBJZiB0aGlzIGZsYWcgaXMgbm90IHNldCwgbm8gcG9pbnRzIGFyZSBsb2FkZWQuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbm9fcmVjdXJzZSAgIDo6IFNldCBidXQgbm90IHVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZXRyaWNzX29ubHkgOjogQSBib29sZWFuIGluZGljYXRpbmcgdGhhdCB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHRoZSBtZXRyaWNzIG9mIGEgZ2l2ZW4gZ2x5cGgsIG5vdCBsb2FkIGFsbCBvZiBpdHMgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaXNfdDEgICAgICAgIDo6IFNldCBpZiBjdXJyZW50IGZvbnQgdHlwZSBpcyBUeXBlIDEuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdW5jcyAgICAgICAgOjogQW4gYXJyYXkgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSBidWlsZGVyLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0cnVjdCAgUFNfQnVpbGRlcl8KKyAgeworICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnk7CisgICAgRlRfRmFjZSAgICAgICAgIGZhY2U7CisgICAgQ0ZGX0dseXBoU2xvdCAgIGdseXBoOworICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXI7CisgICAgRlRfT3V0bGluZSogICAgIGJhc2U7CisgICAgRlRfT3V0bGluZSogICAgIGN1cnJlbnQ7CisKKyAgICBGVF9Qb3MqICBwb3NfeDsKKyAgICBGVF9Qb3MqICBwb3NfeTsKKworICAgIEZUX1ZlY3RvciogIGxlZnRfYmVhcmluZzsKKyAgICBGVF9WZWN0b3IqICBhZHZhbmNlOworCisgICAgRlRfQkJveCogIGJib3g7ICAgICAgICAgIC8qIGJvdW5kaW5nIGJveCAqLworICAgIEZUX0Jvb2wgICBwYXRoX2JlZ3VuOworICAgIEZUX0Jvb2wgICBsb2FkX3BvaW50czsKKyAgICBGVF9Cb29sICAgbm9fcmVjdXJzZTsKKworICAgIEZUX0Jvb2wgIG1ldHJpY3Nfb25seTsKKyAgICBGVF9Cb29sICBpc190MTsKKworICAgIFBTX0J1aWxkZXJfRnVuY3NSZWMgIGZ1bmNzOworCisgIH07CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFMgREVDT0RFUiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQU19NQVhfT1BFUkFORFMgICAgICAgIDQ4CisjZGVmaW5lIFBTX01BWF9TVUJSU19DQUxMUyAgICAgMTYgICAvKiBtYXhpbXVtIHN1YnJvdXRpbmUgbmVzdGluZzsgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25seSAxMCBhcmUgYWxsb3dlZCBidXQgdGhlcmUgZXhpc3QgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvbnRzIGxpa2UgYEhpcmFLYWt1UHJvTi1XMy50dGYnICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvTiBXMzsgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOC4yZDZlMTsgMjAxNC0xMi0xOSkgdGhhdCBleGNlZWQgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgLyogZXhlY3V0aW9uIGNvbnRleHQgY2hhcnN0cmluZyB6b25lICovCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIFBTX0RlY29kZXJfWm9uZV8KKyAgeworICAgIEZUX0J5dGUqICBiYXNlOworICAgIEZUX0J5dGUqICBsaW1pdDsKKyAgICBGVF9CeXRlKiAgY3Vyc29yOworCisgIH0gUFNfRGVjb2Rlcl9ab25lOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkNGRl9EZWNvZGVyX0dldF9HbHlwaF9DYWxsYmFjaykoIFRUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyogIGxlbmd0aCApOworCisgIHR5cGVkZWYgdm9pZAorICAoKkNGRl9EZWNvZGVyX0ZyZWVfR2x5cGhfQ2FsbGJhY2spKCBUVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgcG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBsZW5ndGggKTsKKworCisgIHR5cGVkZWYgc3RydWN0ICBQU19EZWNvZGVyXworICB7CisgICAgUFNfQnVpbGRlciAgYnVpbGRlcjsKKworICAgIEZUX0ZpeGVkICAgc3RhY2tbUFNfTUFYX09QRVJBTkRTICsgMV07CisgICAgRlRfRml4ZWQqICB0b3A7CisKKyAgICBQU19EZWNvZGVyX1pvbmUgICB6b25lc1tQU19NQVhfU1VCUlNfQ0FMTFMgKyAxXTsKKyAgICBQU19EZWNvZGVyX1pvbmUqICB6b25lOworCisgICAgRlRfSW50ICAgICBmbGV4X3N0YXRlOworICAgIEZUX0ludCAgICAgbnVtX2ZsZXhfdmVjdG9yczsKKyAgICBGVF9WZWN0b3IgIGZsZXhfdmVjdG9yc1s3XTsKKworICAgIENGRl9Gb250ICAgICBjZmY7CisgICAgQ0ZGX1N1YkZvbnQgIGN1cnJlbnRfc3ViZm9udDsgLyogZm9yIGN1cnJlbnQgZ2x5cGhfaW5kZXggKi8KKyAgICBGVF9HZW5lcmljKiAgY2YyX2luc3RhbmNlOworCisgICAgRlRfUG9zKiAgZ2x5cGhfd2lkdGg7CisgICAgRlRfQm9vbCAgd2lkdGhfb25seTsKKyAgICBGVF9JbnQgICBudW1faGludHM7CisKKyAgICBGVF9VSW50ICBudW1fbG9jYWxzOworICAgIEZUX1VJbnQgIG51bV9nbG9iYWxzOworCisgICAgRlRfSW50ICBsb2NhbHNfYmlhczsKKyAgICBGVF9JbnQgIGdsb2JhbHNfYmlhczsKKworICAgIEZUX0J5dGUqKiAgbG9jYWxzOworICAgIEZUX0J5dGUqKiAgZ2xvYmFsczsKKworICAgIEZUX0J5dGUqKiAgZ2x5cGhfbmFtZXM7ICAgLyogZm9yIHB1cmUgQ0ZGIGZvbnRzIG9ubHkgICovCisgICAgRlRfVUludCAgICBudW1fZ2x5cGhzOyAgICAvKiBudW1iZXIgb2YgZ2x5cGhzIGluIGZvbnQgKi8KKworICAgIEZUX1JlbmRlcl9Nb2RlICBoaW50X21vZGU7CisKKyAgICBGVF9Cb29sICBzZWFjOworCisgICAgQ0ZGX0RlY29kZXJfR2V0X0dseXBoX0NhbGxiYWNrICAgZ2V0X2dseXBoX2NhbGxiYWNrOworICAgIENGRl9EZWNvZGVyX0ZyZWVfR2x5cGhfQ2FsbGJhY2sgIGZyZWVfZ2x5cGhfY2FsbGJhY2s7CisKKyAgICAvKiBUeXBlIDEgc3R1ZmYgKi8KKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXM7ICAgICAgLyogZm9yIHNlYWMgKi8KKworICAgIEZUX0ludCAgICBsZW5JVjsgICAgICAgICAvKiBpbnRlcm5hbCBmb3Igc3ViIHJvdXRpbmUgY2FsbHMgICAqLworICAgIEZUX1VJbnQqICBsb2NhbHNfbGVuOyAgICAvKiBhcnJheSBvZiBzdWJycyBsZW5ndGggKG9wdGlvbmFsKSAqLworICAgIEZUX0hhc2ggICBsb2NhbHNfaGFzaDsgICAvKiB1c2VkIGlmIGBudW1fc3VicnMnIHdhcyBtYXNzYWdlZCAqLworCisgICAgRlRfTWF0cml4ICBmb250X21hdHJpeDsKKyAgICBGVF9WZWN0b3IgIGZvbnRfb2Zmc2V0OworCisgICAgUFNfQmxlbmQgIGJsZW5kOyAgICAgICAgIC8qIGZvciBtdWx0aXBsZSBtYXN0ZXIgc3VwcG9ydCAqLworCisgICAgRlRfTG9uZyogIGJ1aWxkY2hhcjsKKyAgICBGVF9VSW50ICAgbGVuX2J1aWxkY2hhcjsKKworICB9IFBTX0RlY29kZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgVDEgQlVJTERFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNjUzLDEwICs4NjksMjMgQEAKICAgICB2b2lkCiAgICAgKCpkb25lKSggVDFfRGVjb2RlciAgZGVjb2RlciApOwogCisjaWZkZWYgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCiAgICAgRlRfRXJyb3IKLSAgICAoKnBhcnNlX2NoYXJzdHJpbmdzKSggVDFfRGVjb2RlciAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgbGVuICk7CisgICAgKCpwYXJzZV9jaGFyc3RyaW5nc19vbGQpKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGxlbiApOworI2Vsc2UKKyAgICBGVF9FcnJvcgorICAgICgqcGFyc2VfbWV0cmljcykoIFQxX0RlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZW4gKTsKKyNlbmRpZgorCisgICAgRlRfRXJyb3IKKyAgICAoKnBhcnNlX2NoYXJzdHJpbmdzKSggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBjaGFyc3RyaW5nX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBjaGFyc3RyaW5nX2xlbiApOworCiAKICAgfSBUMV9EZWNvZGVyX0Z1bmNzUmVjOwogCkBAIC03MDAsMTIgKzkyOSwyNjEgQEAKIAogICAgIEZUX0Jvb2wgICAgICAgICAgICAgIHNlYWM7CiAKKyAgICBGVF9HZW5lcmljICAgICAgICAgICBjZjJfaW5zdGFuY2U7CisKICAgfSBUMV9EZWNvZGVyUmVjOwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGIEJVSUxERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICB0eXBlZGVmIHN0cnVjdCBDRkZfQnVpbGRlcl8gIENGRl9CdWlsZGVyOworCisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkNGRl9CdWlsZGVyX0NoZWNrX1BvaW50c19GdW5jKSggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBjb3VudCApOworCisgIHR5cGVkZWYgdm9pZAorICAoKkNGRl9CdWlsZGVyX0FkZF9Qb2ludF9GdW5jKSggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSAgICAgICBmbGFnICk7CisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpDRkZfQnVpbGRlcl9BZGRfUG9pbnQxX0Z1bmMpKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgeSApOworICB0eXBlZGVmIEZUX0Vycm9yCisgICgqQ0ZGX0J1aWxkZXJfU3RhcnRfUG9pbnRfRnVuYykoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKTsKKyAgdHlwZWRlZiB2b2lkCisgICgqQ0ZGX0J1aWxkZXJfQ2xvc2VfQ29udG91cl9GdW5jKSggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICk7CisKKyAgdHlwZWRlZiBGVF9FcnJvcgorICAoKkNGRl9CdWlsZGVyX0FkZF9Db250b3VyX0Z1bmMpKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIgKTsKKworICB0eXBlZGVmIGNvbnN0IHN0cnVjdCBDRkZfQnVpbGRlcl9GdW5jc1JlY18qICBDRkZfQnVpbGRlcl9GdW5jczsKKworICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0J1aWxkZXJfRnVuY3NSZWNfCisgIHsKKyAgICB2b2lkCisgICAgKCppbml0KSggQ0ZGX0J1aWxkZXIqICAgYnVpbGRlciwKKyAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgIENGRl9TaXplICAgICAgIHNpemUsCisgICAgICAgICAgICAgQ0ZGX0dseXBoU2xvdCAgZ2x5cGgsCisgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgaGludGluZyApOworCisgICAgdm9pZAorICAgICgqZG9uZSkoIENGRl9CdWlsZGVyKiAgYnVpbGRlciApOworCisgICAgQ0ZGX0J1aWxkZXJfQ2hlY2tfUG9pbnRzX0Z1bmMgICBjaGVja19wb2ludHM7CisgICAgQ0ZGX0J1aWxkZXJfQWRkX1BvaW50X0Z1bmMgICAgICBhZGRfcG9pbnQ7CisgICAgQ0ZGX0J1aWxkZXJfQWRkX1BvaW50MV9GdW5jICAgICBhZGRfcG9pbnQxOworICAgIENGRl9CdWlsZGVyX0FkZF9Db250b3VyX0Z1bmMgICAgYWRkX2NvbnRvdXI7CisgICAgQ0ZGX0J1aWxkZXJfU3RhcnRfUG9pbnRfRnVuYyAgICBzdGFydF9wb2ludDsKKyAgICBDRkZfQnVpbGRlcl9DbG9zZV9Db250b3VyX0Z1bmMgIGNsb3NlX2NvbnRvdXI7CisKKyAgfSBDRkZfQnVpbGRlcl9GdW5jc1JlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdHVyZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENGRl9CdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICBBIHN0cnVjdHVyZSB1c2VkIGR1cmluZyBnbHlwaCBsb2FkaW5nIHRvIHN0b3JlIGl0cyBvdXRsaW5lLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSAgICAgICAgOjogVGhlIGN1cnJlbnQgbWVtb3J5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaCAgICAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRlciAgICAgICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggbG9hZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmFzZSAgICAgICAgICA6OiBUaGUgYmFzZSBnbHlwaCBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjdXJyZW50ICAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIG91dGxpbmUuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBvc194ICAgICAgICAgOjogVGhlIGhvcml6b250YWwgdHJhbnNsYXRpb24gKGlmIGNvbXBvc2l0ZSBnbHlwaCkuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcG9zX3kgICAgICAgICA6OiBUaGUgdmVydGljYWwgdHJhbnNsYXRpb24gKGlmIGNvbXBvc2l0ZSBnbHlwaCkuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsZWZ0X2JlYXJpbmcgIDo6IFRoZSBsZWZ0IHNpZGUgYmVhcmluZyBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFkdmFuY2UgICAgICAgOjogVGhlIGhvcml6b250YWwgYWR2YW5jZSB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYmJveCAgICAgICAgICA6OiBVbnVzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXRoX2JlZ3VuICAgIDo6IEEgZmxhZyB3aGljaCBpbmRpY2F0ZXMgdGhhdCBhIG5ldyBwYXRoIGhhcyBiZWd1bi4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfcG9pbnRzICAgOjogSWYgdGhpcyBmbGFnIGlzIG5vdCBzZXQsIG5vIHBvaW50cyBhcmUgbG9hZGVkLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbm9fcmVjdXJzZSAgICA6OiBTZXQgYnV0IG5vdCB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZXRyaWNzX29ubHkgIDo6IEEgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICB0aGUgbWV0cmljcyBvZiBhIGdpdmVuIGdseXBoLCBub3QgbG9hZCBhbGwgb2YgaXRzICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGludHNfZnVuY3MgICA6OiBBdXhpbGlhcnkgcG9pbnRlciBmb3IgaGludGluZy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoaW50c19nbG9iYWxzIDo6IEF1eGlsaWFyeSBwb2ludGVyIGZvciBoaW50aW5nLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ1bmNzICAgICAgICAgOjogQSB0YWJsZSBvZiBtZXRob2QgcG9pbnRlcnMgZm9yIHRoaXMgb2JqZWN0LiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RydWN0ICBDRkZfQnVpbGRlcl8KKyAgeworICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnk7CisgICAgVFRfRmFjZSAgICAgICAgIGZhY2U7CisgICAgQ0ZGX0dseXBoU2xvdCAgIGdseXBoOworICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXI7CisgICAgRlRfT3V0bGluZSogICAgIGJhc2U7CisgICAgRlRfT3V0bGluZSogICAgIGN1cnJlbnQ7CisKKyAgICBGVF9Qb3MgIHBvc194OworICAgIEZUX1BvcyAgcG9zX3k7CisKKyAgICBGVF9WZWN0b3IgIGxlZnRfYmVhcmluZzsKKyAgICBGVF9WZWN0b3IgIGFkdmFuY2U7CisKKyAgICBGVF9CQm94ICBiYm94OyAgICAgICAgICAvKiBib3VuZGluZyBib3ggKi8KKworICAgIEZUX0Jvb2wgIHBhdGhfYmVndW47CisgICAgRlRfQm9vbCAgbG9hZF9wb2ludHM7CisgICAgRlRfQm9vbCAgbm9fcmVjdXJzZTsKKworICAgIEZUX0Jvb2wgIG1ldHJpY3Nfb25seTsKKworICAgIHZvaWQqICBoaW50c19mdW5jczsgICAgIC8qIGhpbnRlci1zcGVjaWZpYyAqLworICAgIHZvaWQqICBoaW50c19nbG9iYWxzOyAgIC8qIGhpbnRlci1zcGVjaWZpYyAqLworCisgICAgQ0ZGX0J1aWxkZXJfRnVuY3NSZWMgIGZ1bmNzOworICB9OworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGIERFQ09ERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2RlZmluZSBDRkZfTUFYX09QRVJBTkRTICAgICAgICA0OAorI2RlZmluZSBDRkZfTUFYX1NVQlJTX0NBTExTICAgICAxNiAgLyogbWF4aW11bSBzdWJyb3V0aW5lIG5lc3Rpbmc7ICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9ubHkgMTAgYXJlIGFsbG93ZWQgYnV0IHRoZXJlIGV4aXN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb250cyBsaWtlIGBIaXJhS2FrdVByb04tVzMudHRmJyAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKEhpcmFnaW5vIEtha3UgR290aGljIFByb04gVzM7ICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDguMmQ2ZTE7IDIwMTQtMTItMTkpIHRoYXQgZXhjZWVkICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIGxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBDRkZfTUFYX1RSQU5TX0VMRU1FTlRTICAzMgorCisgIC8qIGV4ZWN1dGlvbiBjb250ZXh0IGNoYXJzdHJpbmcgem9uZSAqLworCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfRGVjb2Rlcl9ab25lXworICB7CisgICAgRlRfQnl0ZSogIGJhc2U7CisgICAgRlRfQnl0ZSogIGxpbWl0OworICAgIEZUX0J5dGUqICBjdXJzb3I7CisKKyAgfSBDRkZfRGVjb2Rlcl9ab25lOworCisKKyAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9EZWNvZGVyXworICB7CisgICAgQ0ZGX0J1aWxkZXIgIGJ1aWxkZXI7CisgICAgQ0ZGX0ZvbnQgICAgIGNmZjsKKworICAgIEZUX0ZpeGVkICAgc3RhY2tbQ0ZGX01BWF9PUEVSQU5EUyArIDFdOworICAgIEZUX0ZpeGVkKiAgdG9wOworCisgICAgQ0ZGX0RlY29kZXJfWm9uZSAgIHpvbmVzW0NGRl9NQVhfU1VCUlNfQ0FMTFMgKyAxXTsKKyAgICBDRkZfRGVjb2Rlcl9ab25lKiAgem9uZTsKKworICAgIEZUX0ludCAgICAgZmxleF9zdGF0ZTsKKyAgICBGVF9JbnQgICAgIG51bV9mbGV4X3ZlY3RvcnM7CisgICAgRlRfVmVjdG9yICBmbGV4X3ZlY3RvcnNbN107CisKKyAgICBGVF9Qb3MgIGdseXBoX3dpZHRoOworICAgIEZUX1BvcyAgbm9taW5hbF93aWR0aDsKKworICAgIEZUX0Jvb2wgICByZWFkX3dpZHRoOworICAgIEZUX0Jvb2wgICB3aWR0aF9vbmx5OworICAgIEZUX0ludCAgICBudW1faGludHM7CisgICAgRlRfRml4ZWQgIGJ1aWxkY2hhcltDRkZfTUFYX1RSQU5TX0VMRU1FTlRTXTsKKworICAgIEZUX1VJbnQgIG51bV9sb2NhbHM7CisgICAgRlRfVUludCAgbnVtX2dsb2JhbHM7CisKKyAgICBGVF9JbnQgIGxvY2Fsc19iaWFzOworICAgIEZUX0ludCAgZ2xvYmFsc19iaWFzOworCisgICAgRlRfQnl0ZSoqICBsb2NhbHM7CisgICAgRlRfQnl0ZSoqICBnbG9iYWxzOworCisgICAgRlRfQnl0ZSoqICBnbHlwaF9uYW1lczsgICAvKiBmb3IgcHVyZSBDRkYgZm9udHMgb25seSAgKi8KKyAgICBGVF9VSW50ICAgIG51bV9nbHlwaHM7ICAgIC8qIG51bWJlciBvZiBnbHlwaHMgaW4gZm9udCAqLworCisgICAgRlRfUmVuZGVyX01vZGUgIGhpbnRfbW9kZTsKKworICAgIEZUX0Jvb2wgIHNlYWM7CisKKyAgICBDRkZfU3ViRm9udCAgY3VycmVudF9zdWJmb250OyAvKiBmb3IgY3VycmVudCBnbHlwaF9pbmRleCAqLworCisgICAgQ0ZGX0RlY29kZXJfR2V0X0dseXBoX0NhbGxiYWNrICAgZ2V0X2dseXBoX2NhbGxiYWNrOworICAgIENGRl9EZWNvZGVyX0ZyZWVfR2x5cGhfQ2FsbGJhY2sgIGZyZWVfZ2x5cGhfY2FsbGJhY2s7CisKKyAgfSBDRkZfRGVjb2RlcjsKKworCisgIHR5cGVkZWYgY29uc3Qgc3RydWN0IENGRl9EZWNvZGVyX0Z1bmNzUmVjXyogIENGRl9EZWNvZGVyX0Z1bmNzOworCisgIHR5cGVkZWYgc3RydWN0ICBDRkZfRGVjb2Rlcl9GdW5jc1JlY18KKyAgeworICAgIHZvaWQKKyAgICAoKmluaXQpKCBDRkZfRGVjb2RlciogICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLAorICAgICAgICAgICAgIFRUX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgQ0ZGX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICBDRkZfR2x5cGhTbG90ICAgICAgICAgICAgICAgICAgICBzbG90LAorICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRpbmcsCisgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgICAgICAgICAgICAgICAgaGludF9tb2RlLAorICAgICAgICAgICAgIENGRl9EZWNvZGVyX0dldF9HbHlwaF9DYWxsYmFjayAgIGdldF9jYWxsYmFjaywKKyAgICAgICAgICAgICBDRkZfRGVjb2Rlcl9GcmVlX0dseXBoX0NhbGxiYWNrICBmcmVlX2NhbGxiYWNrICk7CisKKyAgICBGVF9FcnJvcgorICAgICgqcHJlcGFyZSkoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCApOworCisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgIEZUX0Vycm9yCisgICAgKCpwYXJzZV9jaGFyc3RyaW5nc19vbGQpKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIGluX2RpY3QgKTsKKyNlbmRpZgorCisgICAgRlRfRXJyb3IKKyAgICAoKnBhcnNlX2NoYXJzdHJpbmdzKSggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBjaGFyc3RyaW5nX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBjaGFyc3RyaW5nX2xlbiApOworCisgIH0gQ0ZGX0RlY29kZXJfRnVuY3NSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZNIFBBUlNFUiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODEwLDE0ICsxMjg4LDI5IEBACiAgICAgICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICBzZWVkICk7CiAKKyAgICBGVF9VSW50MzIKKyAgICAoKmNmZl9yYW5kb20pKCBGVF9VSW50MzIgIHIgKTsKKworICAgIHZvaWQKKyAgICAoKnBzX2RlY29kZXJfaW5pdCkoIFBTX0RlY29kZXIqICBwc19kZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgaXNfdDEgKTsKKworICAgIHZvaWQKKyAgICAoKnQxX21ha2Vfc3ViZm9udCkoIEZUX0ZhY2UgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgUFNfUHJpdmF0ZSAgIHByaXYsCisgICAgICAgICAgICAgICAgICAgICAgICBDRkZfU3ViRm9udCAgc3ViZm9udCApOworCiAgICAgVDFfQ01hcF9DbGFzc2VzICB0MV9jbWFwX2NsYXNzZXM7CiAKICAgICAvKiBmaWVsZHMgYWZ0ZXIgdGhpcyBjb21tZW50IGxpbmUgd2VyZSBhZGRlZCBhZnRlciB2ZXJzaW9uIDIuMS4xMCAqLwogICAgIGNvbnN0IEFGTV9QYXJzZXJfRnVuY3NSZWMqICBhZm1fcGFyc2VyX2Z1bmNzOwogCisgICAgY29uc3QgQ0ZGX0RlY29kZXJfRnVuY3NSZWMqICBjZmZfZGVjb2Rlcl9mdW5jczsKKwogICB9IFBTQXV4X1NlcnZpY2VSZWMsICpQU0F1eF9TZXJ2aWNlOwogCi0gIC8qIGJhY2t3YXJkcy1jb21wYXRpYmxlIHR5cGUgZGVmaW5pdGlvbiAqLworICAvKiBiYWNrd2FyZCBjb21wYXRpYmxlIHR5cGUgZGVmaW5pdGlvbiAqLwogICB0eXBlZGVmIFBTQXV4X1NlcnZpY2VSZWMgICBQU0F1eF9JbnRlcmZhY2U7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaAppbmRleCA0OTExNmViLi5kMjkzMTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaApAQCAtNiw3ICs2LDcgQEAKIC8qICAgIHJlY29yZGVycyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gIFRoZXNlIGFyZSB1c2VkIHRvIHN1cHBvcnQgbmF0aXZlICAgICovCiAvKiAgICBUMS9UMiBoaW50cyBpbiB0aGUgYHR5cGUxJywgYGNpZCcsIGFuZCBgY2ZmJyBmb250IGRyaXZlcnMuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oCmluZGV4IGVlZWJmNjcuLjRhOWVjMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIEJERiBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNmZnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2MjNlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjZmZ0bC5oCkBAIC0wLDAgKzEsMTEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBzdmNmZnRsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgVGhlIEZyZWVUeXBlIENGRiB0YWJsZXMgbG9hZGVyIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgU1ZDRkZUTF9IXworI2RlZmluZSBTVkNGRlRMX0hfCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX1RZUEVTX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworCisjZGVmaW5lIEZUX1NFUlZJQ0VfSURfQ0ZGX0xPQUQgICJjZmYtbG9hZCIKKworCisgIHR5cGVkZWYgRlRfVVNob3J0CisgICgqRlRfR2V0X1N0YW5kYXJkX0VuY29kaW5nX0Z1bmMpKCBGVF9VSW50ICBjaGFyY29kZSApOworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9Mb2FkX1ByaXZhdGVfRGljdF9GdW5jKSggQ0ZGX0ZvbnQgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGRl9TdWJGb250ICBzdWJmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgbGVuTkRWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogICAgTkRWICk7CisKKyAgdHlwZWRlZiBGVF9CeXRlCisgICgqRlRfRkRfU2VsZWN0X0dldF9GdW5jKSggQ0ZGX0ZEU2VsZWN0ICBmZHNlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgIGdseXBoX2luZGV4ICk7CisKKyAgdHlwZWRlZiBGVF9Cb29sCisgICgqRlRfQmxlbmRfQ2hlY2tfVmVjdG9yX0Z1bmMpKCBDRkZfQmxlbmQgIGJsZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICB2c2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBsZW5ORFYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIE5EViApOworCisgIHR5cGVkZWYgRlRfRXJyb3IKKyAgKCpGVF9CbGVuZF9CdWlsZF9WZWN0b3JfRnVuYykoIENGRl9CbGVuZCAgYmxlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHZzaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGxlbk5EViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgTkRWICk7CisKKworICBGVF9ERUZJTkVfU0VSVklDRSggQ0ZGTG9hZCApCisgIHsKKyAgICBGVF9HZXRfU3RhbmRhcmRfRW5jb2RpbmdfRnVuYyAgZ2V0X3N0YW5kYXJkX2VuY29kaW5nOworICAgIEZUX0xvYWRfUHJpdmF0ZV9EaWN0X0Z1bmMgICAgICBsb2FkX3ByaXZhdGVfZGljdDsKKyAgICBGVF9GRF9TZWxlY3RfR2V0X0Z1bmMgICAgICAgICAgZmRfc2VsZWN0X2dldDsKKyAgICBGVF9CbGVuZF9DaGVja19WZWN0b3JfRnVuYyAgICAgYmxlbmRfY2hlY2tfdmVjdG9yOworICAgIEZUX0JsZW5kX0J1aWxkX1ZlY3Rvcl9GdW5jICAgICBibGVuZF9idWlsZF92ZWN0b3I7CisgIH07CisKKworI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQworCisjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX0NGRkxPQURSRUMoIGNsYXNzXywgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9zdGFuZGFyZF9lbmNvZGluZ18sICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfcHJpdmF0ZV9kaWN0XywgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NlbGVjdF9nZXRfLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kX2NoZWNrX3ZlY3Rvcl8sICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kX2J1aWxkX3ZlY3Rvcl8gKSAgICBcCisgIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX0NGRkxvYWRSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICBcCisgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZ2V0X3N0YW5kYXJkX2VuY29kaW5nXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbG9hZF9wcml2YXRlX2RpY3RfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZmRfc2VsZWN0X2dldF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxlbmRfY2hlY2tfdmVjdG9yXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYmxlbmRfYnVpbGRfdmVjdG9yXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH07CisKKyNlbHNlIC8qIEZUX0NPTkZJR19PUFRJT05fUElDICovCisKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfQ0ZGTE9BRFJFQyggY2xhc3NfLCAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3N0YW5kYXJkX2VuY29kaW5nXywgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9wcml2YXRlX2RpY3RfLCAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2VsZWN0X2dldF8sICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRfY2hlY2tfdmVjdG9yXywgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRfYnVpbGRfdmVjdG9yXyApICAgIFwKKyAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRlRfSW5pdF9DbGFzc18gIyMgY2xhc3NfKCBGVF9TZXJ2aWNlX0NGRkxvYWRSZWMqICBjbGF6eiApICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+Z2V0X3N0YW5kYXJkX2VuY29kaW5nID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nXzsgICAgIFwKKyAgICBjbGF6ei0+bG9hZF9wcml2YXRlX2RpY3QgICAgID0gbG9hZF9wcml2YXRlX2RpY3RfOyAgICAgICAgIFwKKyAgICBjbGF6ei0+ZmRfc2VsZWN0X2dldCAgICAgICAgID0gZmRfc2VsZWN0X2dldF87ICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+YmxlbmRfY2hlY2tfdmVjdG9yICAgID0gYmxlbmRfY2hlY2tfdmVjdG9yXzsgICAgICAgIFwKKyAgICBjbGF6ei0+YmxlbmRfYnVpbGRfdmVjdG9yICAgID0gYmxlbmRfYnVpbGRfdmVjdG9yXzsgICAgICAgIFwKKyAgfQorCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKaW5kZXggY2NlOTRkOC4uY2I1OWFjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgQ0lEIGZvbnQgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERlcmVrIENsZWdnIGFuZCBNaWNoYWVsIFRvZnRkYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oCmluZGV4IDM3NmQ5MjUuLjNiNzMyYmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGZvbnQgZm9ybWF0IHNlcnZpY2UgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaAppbmRleCAwY2QxMzYxLi5mMWE2OGUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCBkaWN0aW9uYXJ5IHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC01Niw3ICs1Niw3IEBACiAKICNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfR0xZUEhESUNUUkVDKCBjbGFzc18sICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9uYW1lXywgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9pbmRleF8pICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2luZGV4XyApICAgICAgICAgICAgICAgICAgXAogICBzdGF0aWMgY29uc3QgRlRfU2VydmljZV9HbHlwaERpY3RSZWMgIGNsYXNzXyA9ICAgICAgICAgICAgICAgICAgICAgICBcCiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBnZXRfbmFtZV8sIG5hbWVfaW5kZXhfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjYsNyArNjYsNyBAQAogCiAjZGVmaW5lIEZUX0RFRklORV9TRVJWSUNFX0dMWVBIRElDVFJFQyggY2xhc3NfLCAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbmFtZV8sICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfaW5kZXhfKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9pbmRleF8gKSAgICAgICAgICAgICAgICAgIFwKICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBGVF9Jbml0X0NsYXNzXyAjIyBjbGFzc18oIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgbGlicmFyeSwgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2VydmljZV9HbHlwaERpY3RSZWMqICBjbGF6eiApICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKaW5kZXggNzFiZmE5Ny4uZWQ3OWViZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoc3BlY2lmaWNhdGlvbikuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oCmluZGV4IGI4MzQ0ZTkuLmM3ZThmNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgS2VybmluZyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1ldHJpYy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1ldHJpYy5oCmluZGV4IDFmN2Q1ZGQuLmFiYWFjZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtZXRyaWMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bWV0cmljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHNlcnZpY2VzIGZvciBtZXRyaWNzIHZhcmlhdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDE2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZtbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKaW5kZXggMWQ1MWNkOS4uYmNiYjM4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIE11bHRpcGxlIE1hc3RlcnMgYW5kIEdYIHZhciBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTQ4LDExICs0OCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICBjb29yZHMgKTsKIAorICAvKiB1c2UgcmV0dXJuIHZhbHVlIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlIG5ldyBjb29yZGluYXRlcyAgKi8KKyAgLyogYXJlIGVxdWFsIHRvIHRoZSBjdXJyZW50IG9uZXM7IG5vIGNoYW5nZXMgYXJlIHRodXMgbmVlZGVkICovCiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpGVF9TZXRfVmFyX0Rlc2lnbl9GdW5jKSggRlRfRmFjZSAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIG51bV9jb29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICk7CiAKKyAgLyogdXNlIHJldHVybiB2YWx1ZSAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBuZXcgY29vcmRpbmF0ZXMgICovCisgIC8qIGFyZSBlcXVhbCB0byB0aGUgY3VycmVudCBvbmVzOyBubyBjaGFuZ2VzIGFyZSB0aHVzIG5lZWRlZCAqLwogICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqRlRfU2V0X01NX0JsZW5kX0Z1bmMpKCBGVF9GYWNlICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBudW1fY29vcmRzLApAQCAtNjQsNiArNjgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBjb29yZHMgKTsKIAogICB0eXBlZGVmIEZUX0Vycm9yCisgICgqRlRfU2V0X0luc3RhbmNlX0Z1bmMpKCBGVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgaW5zdGFuY2VfaW5kZXggKTsKKworICB0eXBlZGVmIEZUX0Vycm9yCiAgICgqRlRfR2V0X01NX0JsZW5kX0Z1bmMpKCBGVF9GYWNlICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogIGNvb3JkcyApOwpAQCAtODgsNiArOTYsNyBAQAogICAgIEZUX0dldF9NTV9WYXJfRnVuYyAgICAgIGdldF9tbV92YXI7CiAgICAgRlRfU2V0X1Zhcl9EZXNpZ25fRnVuYyAgc2V0X3Zhcl9kZXNpZ247CiAgICAgRlRfR2V0X1Zhcl9EZXNpZ25fRnVuYyAgZ2V0X3Zhcl9kZXNpZ247CisgICAgRlRfU2V0X0luc3RhbmNlX0Z1bmMgICAgc2V0X2luc3RhbmNlOwogCiAgICAgLyogZm9yIGludGVybmFsIHVzZTsgb25seSBuZWVkZWQgZm9yIGNvZGUgc2hhcmluZyBiZXR3ZWVuIG1vZHVsZXMgKi8KICAgICBGVF9HZXRfVmFyX0JsZW5kX0Z1bmMgICBnZXRfdmFyX2JsZW5kOwpAQCAtOTcsMjcgKzEwNiwyOSBAQAogCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKLSNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfTVVMVElNQVNURVJTUkVDKCBjbGFzc18sICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X21tXywgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9tbV9kZXNpZ25fLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbW1fYmxlbmRfLCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X21tX2JsZW5kXywgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9tbV92YXJfLCAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfdmFyX2Rlc2lnbl8sICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Zhcl9kZXNpZ25fLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF92YXJfYmxlbmRfLCAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lX2JsZW5kXyAgICAgKSBcCi0gIHN0YXRpYyBjb25zdCBGVF9TZXJ2aWNlX011bHRpTWFzdGVyc1JlYyAgY2xhc3NfID0gICAgICAgICAgXAotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnZXRfbW1fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc2V0X21tX2Rlc2lnbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHNldF9tbV9ibGVuZF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnZXRfbW1fYmxlbmRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2V0X21tX3Zhcl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHNldF92YXJfZGVzaWduXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBnZXRfdmFyX2Rlc2lnbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2V0X3Zhcl9ibGVuZF8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvbmVfYmxlbmRfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRlRfREVGSU5FX1NFUlZJQ0VfTVVMVElNQVNURVJTUkVDKCBjbGFzc18sICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbW1fLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbW1fZGVzaWduXywgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfbW1fYmxlbmRfLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbW1fYmxlbmRfLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfbW1fdmFyXywgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfdmFyX2Rlc2lnbl8sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdmFyX2Rlc2lnbl8sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaW5zdGFuY2VfLCAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdmFyX2JsZW5kXywgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lX2JsZW5kXyApICAgIFwKKyAgc3RhdGljIGNvbnN0IEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzUmVjICBjbGFzc18gPSAgICAgICAgIFwKKyAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfbW1fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZXRfbW1fZGVzaWduXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZXRfbW1fYmxlbmRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfbW1fYmxlbmRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfbW1fdmFyXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZXRfdmFyX2Rlc2lnbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfdmFyX2Rlc2lnbl8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzZXRfaW5zdGFuY2VfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBnZXRfdmFyX2JsZW5kXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkb25lX2JsZW5kXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfTsKIAogI2Vsc2UgLyogRlRfQ09ORklHX09QVElPTl9QSUMgKi8KQEAgLTEzMCw2ICsxNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9tbV92YXJfLCAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3Zhcl9kZXNpZ25fLCAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdmFyX2Rlc2lnbl8sICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9pbnN0YW5jZV8sICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Zhcl9ibGVuZF8sICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lX2JsZW5kXyApICAgICAgICAgXAogICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNDIsNiArMTU0LDcgQEAKICAgICBjbGF6ei0+Z2V0X21tX3ZhciAgICAgPSBnZXRfbW1fdmFyXzsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNsYXp6LT5zZXRfdmFyX2Rlc2lnbiA9IHNldF92YXJfZGVzaWduXzsgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2xhenotPmdldF92YXJfZGVzaWduID0gZ2V0X3Zhcl9kZXNpZ25fOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjbGF6ei0+c2V0X2luc3RhbmNlICAgPSBzZXRfaW5zdGFuY2VfOyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGNsYXp6LT5nZXRfdmFyX2JsZW5kICA9IGdldF92YXJfYmxlbmRfOyAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgY2xhenotPmRvbmVfYmxlbmQgICAgID0gZG9uZV9ibGVuZF87ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAppbmRleCBhYzg0YWJlLi4zMTI5NDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgT3BlblR5cGUgdmFsaWRhdGlvbiBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCmluZGV4IGM5YTE4MmYuLmU2NWQ1N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSW50ZXJuYWwgUEZSIHNlcnZpY2UgZnVuY3Rpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaAppbmRleCAwMjJjZGVjLi40YTQ5ZDhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IG5hbWUgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaAppbmRleCBlYjJkNGVlLi5hZGMwYmNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByb3BlcnR5IHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaAppbmRleCBiMzIxMjJlLi41NTg5NTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IGNoYXJtYXAgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKaW5kZXggMDIyMGNlNS4uNDA4ZjQwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgUG9zdFNjcmlwdCBpbmZvIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50LmgKaW5kZXggNDlkMThlNC4uZThiMzdiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBTRk5UIHRhYmxlIGxvYWRpbmcgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKaW5kZXggMzBmN2ZlZS4uY2QwZTZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUvc2ZudCBjbWFwIGV4dHJhIGluZm9ybWF0aW9uIHNlcnZpY2UuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTywgUmVkaGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaAppbmRleCBlNGIzNjhhLi45MmUzYzU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRlbmcuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUgZW5naW5lIHF1ZXJ5IHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCmluZGV4IGI3NzkzMDUuLjE2ZmFjMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFRydWVUeXBlIGdseXBoIHNlcnZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaAppbmRleCBjOTRiN2UxLi44MGQ0ODFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBXaW5kb3dzIEZOVC9GT05UIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NmbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCmluZGV4IGI4NjY3YTAuLmZiMWUzMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgYHNmbnQnIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3QxdHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCmluZGV4IGIyZTM1ZDQuLjIxMThlMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgVHlwZTEvVHlwZTIgdHlwZSBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAgICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3R0dHlwZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oCmluZGV4IGFiZTRkY2QuLjEwZGQzMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgU0ZOVC9UcnVlVHlwZSB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24gICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFNlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9XT0ZGLyNXT0ZGSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dPRkYvI1dPRkZIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiBzdHJ1Y3QgIFdPRkZfSGVhZGVyUmVjXwogICB7CkBAIC0xMjk5LDE2ICsxMjk5LDIxIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhdGlvbiB0YWJsZXMgKHJhdGhlciBsaWtlIE11bHRpcGxlICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXN0ZXIgZGF0YSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGlzX2RlZmF1bHRfaW5zdGFuY2UgIDo6IFNldCBpZiB0aGUgZ2x5cGggb3V0bGluZXMgY2FuIGJlIHVzZWQgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1vZGlmaWVkIChpLmUuLCB3aXRob3V0IGFwcGx5aW5nIGdseXBoICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWF0aW9uIGRlbHRhcykuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICB2YXJpYXRpb25fc3VwcG9ydCAgICA6OiBGbGFncyB0aGF0IGluZGljYXRlIHdoaWNoIE9wZW5UeXBlICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIGZvbnQgdmFyaWF0aW9uICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgaXMgcHJlc2VudCwgdmFsaWQsIGFuZCB1c2FibGUuICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSwgVFRfRkFDRV9GTEFHX1ZBUl9GVkFSIGlzIG9ubHkgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGlmIHdlIGhhdmUgYXQgbGVhc3Qgb25lIGRlc2lnbiBheGlzLiAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2YXJfcG9zdHNjcmlwdF9wcmVmaXggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFBvc3RTY3JpcHQgbmFtZSBwcmVmaXggbmVlZGVkIGZvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdGluZyBhIHZhcmlhdGlvbiBmb250IGluc3RhbmNlJ3MgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUyBuYW1lIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZhcl9wb3N0c2NyaXB0X3ByZWZpeF9sZW4gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBgdmFyX3Bvc3RzY3JpcHRfcHJlZml4JyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBob3J6X21ldHJpY3Nfc2l6ZSAgICA6OiBUaGUgc2l6ZSBvZiB0aGUgYGhtdHgnIHRhYmxlLiAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHZlcnRfbWV0cmljc19zaXplICAgIDo6IFRoZSBzaXplIG9mIHRoZSBgdm10eCcgdGFibGUuICAgICAgICAgICAgICAqLwpAQCAtMTM3NCw3ICsxMzc5LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHNwaF9jb21wYXRpYmlsaXR5X21vZGUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZsYWcgaXMgc2V0IGlmIHdlIGFyZSBpbiBDbGVhclR5cGUgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZSAodXNlZCBieSB0aGUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZSAodXNlZCBieSB0aGUgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MzggaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ5dGVjb2RlICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0ZXIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTQzNiw2ICsxNDQxLDkgQEAKICAgICB2b2lkKiAgICAgICAgICAgICAgICAgdmFyOwogI2VuZGlmCiAKKyAgICAvKiBhIHR5cGVsZXNzIHBvaW50ZXIgdG8gdGhlIFBvc3RTY3JpcHQgQXV4IHNlcnZpY2UgKi8KKyAgICB2b2lkKiAgICAgICAgICAgICAgICAgcHNhdXg7CisKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNTAwLDggKzE1MDgsMTEgQEAKICAgICBGVF9Cb29sICAgICAgICAgICAgICAgZG9ibGVuZDsKICAgICBHWF9CbGVuZCAgICAgICAgICAgICAgYmxlbmQ7CiAKLSAgICBGVF9Cb29sICAgICAgICAgICAgICAgaXNfZGVmYXVsdF9pbnN0YW5jZTsgICAvKiBzaW5jZSAyLjcuMSAqLwogICAgIEZUX1VJbnQzMiAgICAgICAgICAgICB2YXJpYXRpb25fc3VwcG9ydDsgICAgIC8qIHNpbmNlIDIuNy4xICovCisKKyAgICBjb25zdCBjaGFyKiAgICAgICAgICAgdmFyX3Bvc3RzY3JpcHRfcHJlZml4OyAgICAgLyogc2luY2UgMi43LjIgKi8KKyAgICBGVF9VSW50ICAgICAgICAgICAgICAgdmFyX3Bvc3RzY3JpcHRfcHJlZml4X2xlbjsgLyogc2luY2UgMi43LjIgKi8KKwogI2VuZGlmCiAKICAgICAvKiBzaW5jZSB2ZXJzaW9uIDIuMiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oCmluZGV4IDgxYzkwMzQuLjM1MDNjMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBUeXBlIDEvVHlwZSAyIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI5MSw3ICsyOTEsNyBAQAogCiAgIH0gUFNfRGVzaWduTWFwUmVjLCAqUFNfRGVzaWduTWFwOwogCi0gIC8qIGJhY2t3YXJkcy1jb21wYXRpYmxlIGRlZmluaXRpb24gKi8KKyAgLyogYmFja3dhcmQgY29tcGF0aWJsZSBkZWZpbml0aW9uICovCiAgIHR5cGVkZWYgUFNfRGVzaWduTWFwUmVjICBUMV9EZXNpZ25NYXA7CiAKIApAQCAtMzI2LDcgKzMyNiw3IEBACiAgIH0gUFNfQmxlbmRSZWMsICpQU19CbGVuZDsKIAogCi0gIC8qIGJhY2t3YXJkcy1jb21wYXRpYmxlIGRlZmluaXRpb24gKi8KKyAgLyogYmFja3dhcmQgY29tcGF0aWJsZSBkZWZpbml0aW9uICovCiAgIHR5cGVkZWYgUFNfQmxlbmRSZWMgIFQxX0JsZW5kOwogCiAKQEAgLTU1NCw2ICs1NTQsOSBAQAogICAvKiAgICBUMV9FTkNPRElOR19UWVBFX0lTT0xBVElOMSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVDFfRU5DT0RJTkdfVFlQRV9FWFBFUlQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi40LjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB0eXBlZGVmIGVudW0gIFQxX0VuY29kaW5nVHlwZV8KICAgewogICAgIFQxX0VOQ09ESU5HX1RZUEVfTk9ORSA9IDAsCkBAIC02MjIsNiArNjI1LDkgQEAKICAgLyogICAgUFNfRElDVF9GU19UWVBFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFBTX0RJQ1RfSVRBTElDX0FOR0xFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuNC44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiBlbnVtICBQU19EaWN0X0tleXNfCiAgIHsKICAgICAvKiBjb252ZW50aW9uYWxseSBpbiB0aGUgZm9udCBkaWN0aW9uYXJ5ICovCkBAIC03NDMsNiArNzQ5LDkgQEAKICAgICogICAgSWYgdGhlIGZvbnQncyBmb3JtYXQgaXMgbm90IFBvc3RTY3JpcHQtYmFzZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucwogICAgKiAgICB0aGUgYEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JyBlcnJvciBjb2RlLgogICAgKgorICAgKiBAc2luY2U6CisgICAqICAgIDIuNC44CisgICAqCiAgICAqLwogICBGVF9FWFBPUlQoIEZUX0xvbmcgKQogICBGVF9HZXRfUFNfRm9udF9WYWx1ZSggRlRfRmFjZSAgICAgICBmYWNlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oIGIvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oCmluZGV4IDA0YmUzZjcuLjg2MDUxODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgbmFtZSBJRCBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgKgogICAgKiAgIFRoZSBjYW5vbmljYWwgc291cmNlIGZvciBNaWNyb3NvZnQncyBJRHMgaXMKICAgICoKLSAgICogICAgIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9nbG9iYWxkZXYvcmVmZXJlbmNlL2xjaWQtYWxsLm1zcHggLAorICAgKiAgICAgaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9nbG9iYWxkZXYvcmVmZXJlbmNlL2xjaWQtYWxsLm1zcHggLAogICAgKgogICAgKiAgIGhvd2V2ZXIsIHdlIG9ubHkgcHJvdmlkZSBtYWNyb3MgZm9yIGxhbmd1YWdlIGlkZW50aWZpZXJzIHByZXNlbnQgaW4KICAgICogICB0aGUgT3BlblR5cGUgc3BlY2lmaWNhdGlvbjogTWljcm9zb2Z0IGhhcyBhYmFuZG9uZWQgdGhlIGNvbmNlcHQgb2YKQEAgLTEyMTYsNyArMTIxNiw3IEBACiAKICAgLyogKi8KIAotICAvKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBGcmVlVHlwZSB2ZXJzaW9ucyAqLworICAvKiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIEZyZWVUeXBlIHZlcnNpb25zICovCiAjZGVmaW5lIFRUX1VDUl9BUkFCSUNfUFJFU0VOVEFUSU9OX0EgICAgICAgICBcCiAgICAgICAgICAgVFRfVUNSX0FSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQQogI2RlZmluZSBUVF9VQ1JfQVJBQklDX1BSRVNFTlRBVElPTl9CICAgICAgICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oCmluZGV4IDU4MzEyMDQuLmNlNmE2MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBTRk5UL1RydWVUeXBlIHRhYmxlcyBkZWZpbml0aW9ucyBhbmQgaW50ZXJmYWNlICAgICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oCmluZGV4IDMyZWIyZmQuLmU1Y2VlNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUYWdzIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgdGFibGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTA2LDYgKzEwNiwxMiBAQAogI2RlZmluZSBUVEFHX1ZWQVIgIEZUX01BS0VfVEFHKCAnVicsICdWJywgJ0EnLCAnUicgKQogI2RlZmluZSBUVEFHX3dPRkYgIEZUX01BS0VfVEFHKCAndycsICdPJywgJ0YnLCAnRicgKQogCisvKiB1c2VkIGJ5ICJLZXlib2FyZC5kZm9udCIgb24gbGVnYWN5IE1hYyBPUyBYICovCisjZGVmaW5lIFRUQUdfMHhBNWtiZCAgRlRfTUFLRV9UQUcoIDB4QTUsICdrJywgJ2InLCAnZCcgKQorCisvKiB1c2VkIGJ5ICJMYXN0UmVzb3J0LmRmb250IiBvbiBsZWdhY3kgTWFjIE9TIFggKi8KKyNkZWZpbmUgVFRBR18weEE1bHN0ICBGVF9NQUtFX1RBRyggMHhBNSwgJ2wnLCAncycsICd0JyApCisKIAogRlRfRU5EX0hFQURFUgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvdHR1bnBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWY2ZGVkLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHR1bnBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgdHR1bnBhdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIERlZmluaXRpb25zIGZvciB0aGUgdW5wYXRlbnRlZCBUcnVlVHlwZSBoaW50aW5nIHN5c3RlbS4gICAgICAgICAgICAgICovCi0vKiAgICBPYnNvbGV0ZSwgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBXcml0dGVuIGJ5IEdyYWhhbSBBc2hlciA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPiAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaWZuZGVmIFRUVU5QQVRfSF8KLSNkZWZpbmUgVFRVTlBBVF9IXwotCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotCi0jaWZkZWYgRlJFRVRZUEVfSAotI2Vycm9yICJmcmVldHlwZS5oIG9mIEZyZWVUeXBlIDEgaGFzIGJlZW4gbG9hZGVkISIKLSNlcnJvciAiUGxlYXNlIGZpeCB0aGUgZGlyZWN0b3J5IHNlYXJjaCBvcmRlciBmb3IgaGVhZGVyIGZpbGVzIgotI2Vycm9yICJzbyB0aGF0IGZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMiBpcyBmb3VuZCBmaXJzdC4iCi0jZW5kaWYKLQotCi1GVF9CRUdJTl9IRUFERVIKLQotCi0gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqCi0gICogQGNvbnN0YW50OgotICAqICAgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORwotICAqCi0gICogQGRlc2NyaXB0aW9uOgotICAqICAgRGVwcmVjYXRlZC4KLSAgKgotICAqICAgUHJldmlvdXNseTogQSBjb25zdGFudCB1c2VkIGFzIHRoZSB0YWcgb2YgYW4gQEZUX1BhcmFtZXRlciBzdHJ1Y3R1cmUgdG8KLSAgKiAgIGluZGljYXRlIHRoYXQgdW5wYXRlbnRlZCBtZXRob2RzIG9ubHkgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIFRydWVUeXBlCi0gICogICBieXRlY29kZSBpbnRlcnByZXRlciBmb3IgYSB0eXBlZmFjZSBvcGVuZWQgYnkgQEZUX09wZW5fRmFjZS4KLSAgKgotICAqLwotI2RlZmluZSBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HICBGVF9NQUtFX1RBRyggJ3UnLCAnbicsICdwJywgJ2EnICkKLQotICAvKiAqLwotCi0KLUZUX0VORF9IRUFERVIKLQotCi0jZW5kaWYgLyogVFRVTlBBVF9IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdDJidWlsZC5oIGIvaW5jbHVkZS9mdDJidWlsZC5oCmluZGV4IGU3ZDgwOGYuLmU3Y2U5OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnQyYnVpbGQuaAorKysgYi9pbmNsdWRlL2Z0MmJ1aWxkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgMiBidWlsZCBhbmQgc2V0dXAgbWFjcm9zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL21vZHVsZXMuY2ZnIGIvbW9kdWxlcy5jZmcKaW5kZXggNTE3MTExZS4uNmNlMGYzZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy5jZmcKKysrIGIvbW9kdWxlcy5jZmcKQEAgLTEsNiArMSw2IEBACiAjIG1vZHVsZXMuY2ZnCiAjCi0jIENvcHlyaWdodCAyMDA1LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDUtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC00Miw3ICs0Miw3IEBACiAKICMgQ0ZGL09wZW5UeXBlIGZvbnQgZHJpdmVyLgogIwotIyBUaGlzIGRyaXZlciBuZWVkcyB0aGUgYHNmbnQnLCBgcHNoaW50ZXInLCBhbmQgYHBzbmFtZXMnIG1vZHVsZXMuCisjIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgc2ZudCcsIGBwc2F1eCcsIGBwc2hpbnRlcicsIGFuZCBgcHNuYW1lcycgbW9kdWxlcy4KIEZPTlRfTU9EVUxFUyArPSBjZmYKIAogIyBUeXBlIDEgQ0lELWtleWVkIGZvbnQgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvb2Jqcy8uZ2l0aWdub3JlIGIvb2Jqcy8uZ2l0aWdub3JlCmluZGV4IDIxYjY3ZjYuLmY4NDc2MjAgMTAwNjQ0Ci0tLSBhL29ianMvLmdpdGlnbm9yZQorKysgYi9vYmpzLy5naXRpZ25vcmUKQEAgLTEsMTUgKzEsMyBAQAotYXBpbmFtZXMKLWZyZWV0eXBlLmRlZgotZnJlZXR5cGUubGliCi1mdGV4cG9ydC5zeW0KLWZ0bW9kdWxlLmgKLWZ0b3B0aW9uLmgKLWxpYmZyZWV0eXBlLmxhCi0ubGlicwotKi5sbwotKi5vCi0qLmEKLWRlYnVnKi8KLXJlbGVhc2UqLwotd2luMzIvCi13aW42NC8KKyoKKyFSRUFETUUKKyEuZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9zcmMvSmFtZmlsZSBiL3NyYy9KYW1maWxlCmluZGV4IGMwYmMwMjIuLjU2MjQ4MGMgMTAwNjQ0Ci0tLSBhL3NyYy9KYW1maWxlCisrKyBiL3NyYy9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYyBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9KYW1maWxlIGIvc3JjL2F1dG9maXQvSmFtZmlsZQppbmRleCA5YTNkYzhhLi4wMWI4NjZlIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9KYW1maWxlCisrKyBiL3NyYy9hdXRvZml0L0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL2F1dG9maXQgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAzLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZhbmdsZXMuYyBiL3NyYy9hdXRvZml0L2FmYW5nbGVzLmMKaW5kZXggY2NkYWU4NC4uYzY1YTNhZSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZhbmdsZXMuYworKysgYi9zcmMvYXV0b2ZpdC9hZmFuZ2xlcy5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgUm91dGluZXMgdXNlZCB0byBjb21wdXRlIHZlY3RvciBhbmdsZXMgd2l0aCBsaW1pdGVkIGFjY3VyYWN5ICAgICAgICAgKi8KIC8qICAgIGFuZCB2ZXJ5IGhpZ2ggc3BlZWQuICBJdCBhbHNvIGNvbnRhaW5zIHNvcnRpbmcgcm91dGluZXMgKGJvZHkpLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmJsdWUuYyBiL3NyYy9hdXRvZml0L2FmYmx1ZS5jCmluZGV4IDUyNGY2ODguLjYxYWI3OTUgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYmx1ZS5jCisrKyBiL3NyYy9hdXRvZml0L2FmYmx1ZS5jCkBAIC03LDcgKzcsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNiw2ICsyNiwxNCBAQAogICBhZl9ibHVlX3N0cmluZ3NbXSA9CiAgIHsKICAgICAvKiAqLworICAgICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceDhDJywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTQnLCAnXHg4NScsICcgJywgJ1x4RjAnLCAnXHg5RScsICdceEE0JywgJ1x4ODgnLCAnICcsICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceDhGJywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTQnLCAnXHg5NCcsICcgJywgJ1x4RjAnLCAnXHg5RScsICdceEE0JywgJ1x4OUEnLCAgLyog8J6kjCDwnqSFIPCepIgg8J6kjyDwnqSUIPCepJogKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceDgyJywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTQnLCAnXHg5NicsICAvKiDwnqSCIPCepJYgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceEFDJywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTQnLCAnXHhBRScsICcgJywgJ1x4RjAnLCAnXHg5RScsICdceEE0JywgJ1x4QkInLCAnICcsICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceEJDJywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTQnLCAnXHhCRScsICAvKiDwnqSsIPCepK4g8J6kuyDwnqS8IPCepL4gKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceEE0JywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTQnLCAnXHhBOCcsICcgJywgJ1x4RjAnLCAnXHg5RScsICdceEE0JywgJ1x4QTknLCAnICcsICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceEFEJywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTQnLCAnXHhCNCcsICcgJywgJ1x4RjAnLCAnXHg5RScsICdceEE0JywgJ1x4QjgnLCAnICcsICdceEYwJywgJ1x4OUUnLCAnXHhBNCcsICdceEJBJywgJyAnLCAnXHhGMCcsICdceDlFJywgJ1x4QTUnLCAnXHg4MCcsICAvKiDwnqSkIPCepKgg8J6kqSDwnqStIPCepLQg8J6kuCDwnqS6IPCepYAgKi8KKyAgICAnXDAnLAogICAgICdceEQ4JywgJ1x4QTcnLCAnICcsICdceEQ4JywgJ1x4QTUnLCAnICcsICdceEQ5JywgJ1x4ODQnLCAnICcsICdceEQ5JywgJ1x4ODMnLCAnICcsICdceEQ4JywgJ1x4QjcnLCAnICcsICdceEQ4JywgJ1x4QjgnLCAgLyog2Kcg2KUg2YQg2YMg2Lcg2LggKi8KICAgICAnXDAnLAogICAgICdceEQ4JywgJ1x4QUEnLCAnICcsICdceEQ4JywgJ1x4QUInLCAnICcsICdceEQ4JywgJ1x4QjcnLCAnICcsICdceEQ4JywgJ1x4QjgnLCAnICcsICdceEQ5JywgJ1x4ODMnLCAgLyog2Kog2Ksg2Lcg2Lgg2YMgKi8KQEAgLTQ0LDEyICs1Miw1MCBAQAogICAgICdcMCcsCiAgICAgJ1x4RDUnLCAnXHhBMicsICcgJywgJ1x4RDUnLCAnXHhBOCcsICcgJywgJ1x4RDUnLCAnXHhBQicsICcgJywgJ1x4RDUnLCAnXHhBQycsICcgJywgJ1x4RDUnLCAnXHhCMicsICcgJywgJ1x4RDUnLCAnXHhCQScsICcgJywgJ1x4RDYnLCAnXHg4MycsICcgJywgJ1x4RDYnLCAnXHg4MScsICAvKiDVoiDVqCDVqyDVrCDVsiDVuiDWgyDWgSAqLwogICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceEFDJywgJ1x4ODAnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhBQycsICdceDgxJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QUMnLCAnXHg5MCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEFDJywgJ1x4OUInLCAgLyog8JCsgCDwkKyBIPCQrJAg8JCsmyAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceEFDJywgJ1x4ODAnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhBQycsICdceDgxJywgIC8qIPCQrIAg8JCsgSAqLworICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHg5QScsICdceEE3JywgJyAnLCAnXHhFQScsICdceDlBJywgJ1x4QTgnLCAnICcsICdceEVBJywgJ1x4OUInLCAnXHg5QicsICcgJywgJ1x4RUEnLCAnXHg5QicsICdceDg5JywgJyAnLCAnXHhFQScsICdceDlCJywgJ1x4ODEnLCAnICcsICdceEVBJywgJ1x4OUInLCAnXHg4OCcsICcgJywgJ1x4RUEnLCAnXHg5QicsICdceEFCJywgJyAnLCAnXHhFQScsICdceDlCJywgJ1x4QUYnLCAgLyog6pqnIOqaqCDqm5sg6puJIOqbgSDqm4gg6purIOqbryAqLworICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHg5QScsICdceEFEJywgJyAnLCAnXHhFQScsICdceDlBJywgJ1x4QjMnLCAnICcsICdceEVBJywgJ1x4OUEnLCAnXHhCNicsICcgJywgJ1x4RUEnLCAnXHg5QicsICdceEFDJywgJyAnLCAnXHhFQScsICdceDlBJywgJ1x4QTInLCAnICcsICdceEVBJywgJ1x4OUEnLCAnXHhCRCcsICcgJywgJ1x4RUEnLCAnXHg5QicsICdceEFGJywgJyAnLCAnXHhFQScsICdceDlCJywgJ1x4QjInLCAgLyog6pqtIOqasyDqmrYg6pusIOqaoiDqmr0g6puvIOqbsiAqLworICAgICdcMCcsCiAgICAgJ1x4RTAnLCAnXHhBNicsICdceDg1JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QTEnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBNCcsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QUMnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBRCcsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEIyJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4OTUnLCAgLyog4KaFIOCmoSDgpqQg4KaoIOCmrCDgpq0g4KayIOCmlSAqLwogICAgICdcMCcsCiAgICAgJ1x4RTAnLCAnXHhBNicsICdceDg3JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4OUYnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBMCcsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEE3JywgJ1x4ODAnLCAnICcsICdceEUwJywgJ1x4QTcnLCAnXHg4OCcsICcgJywgJ1x4RTAnLCAnXHhBNycsICdceDk3JywgIC8qIOCmhyDgpp8g4KagIOCmvyDgp4Ag4KeIIOCnlyAqLwogICAgICdcMCcsCiAgICAgJ1x4RTAnLCAnXHhBNicsICdceDkzJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4OEYnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBMScsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEE0JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QTgnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBQycsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEIyJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4OTUnLCAgLyog4KaTIOCmjyDgpqEg4KakIOCmqCDgpqwg4KayIOCmlSAqLwogICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RCcsICdceDkwJywgJyAnLCAnXHhFMScsICdceDlEJywgJ1x4ODgnLCAgLyog4Z2QIOGdiCAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RCcsICdceDg1JywgJyAnLCAnXHhFMScsICdceDlEJywgJ1x4OEEnLCAnICcsICdceEUxJywgJ1x4OUQnLCAnXHg4RScsICAvKiDhnYUg4Z2KIOGdjiAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RCcsICdceDgyJywgJyAnLCAnXHhFMScsICdceDlEJywgJ1x4ODMnLCAnICcsICdceEUxJywgJ1x4OUQnLCAnXHg4OScsICcgJywgJ1x4RTEnLCAnXHg5RCcsICdceDhDJywgIC8qIOGdgiDhnYMg4Z2JIOGdjCAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5RCcsICdceDgwJywgJyAnLCAnXHhFMScsICdceDlEJywgJ1x4ODMnLCAnICcsICdceEUxJywgJ1x4OUQnLCAnXHg4NicsICcgJywgJ1x4RTEnLCAnXHg5RCcsICdceDg5JywgJyAnLCAnXHhFMScsICdceDlEJywgJ1x4OEInLCAnICcsICdceEUxJywgJ1x4OUQnLCAnXHg4RicsICcgJywgJ1x4RTEnLCAnXHg5RCcsICdceDkxJywgIC8qIOGdgCDhnYMg4Z2GIOGdiSDhnYsg4Z2PIOGdkSAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5NycsICdceDlDJywgJyAnLCAnXHhFMScsICdceDk2JywgJ1x4QjQnLCAnICcsICdceEUxJywgJ1x4OTAnLCAnXHg4MScsICcgJywgJ1x4RTEnLCAnXHg5MicsICdceEEzJywgJyAnLCAnXHhFMScsICdceDkxJywgJ1x4QUInLCAnICcsICdceEUxJywgJ1x4OTEnLCAnXHg4RScsICcgJywgJ1x4RTEnLCAnXHg5NCcsICdceDkxJywgJyAnLCAnXHhFMScsICdceDk3JywgJ1x4QjAnLCAgLyog4ZecIOGWtCDhkIEg4ZKjIOGRqyDhkY4g4ZSRIOGXsCAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5NycsICdceEI2JywgJyAnLCAnXHhFMScsICdceDk2JywgJ1x4QjUnLCAnICcsICdceEUxJywgJ1x4OTInLCAnXHhBNycsICcgJywgJ1x4RTEnLCAnXHg5MCcsICdceDgzJywgJyAnLCAnXHhFMScsICdceDkxJywgJ1x4OEMnLCAnICcsICdceEUxJywgJ1x4OTInLCAnXHg4RCcsICcgJywgJ1x4RTEnLCAnXHg5NCcsICdceDkxJywgJyAnLCAnXHhFMScsICdceDk3JywgJ1x4QTInLCAgLyog4Ze2IOGWtSDhkqcg4ZCDIOGRjCDhko0g4ZSRIOGXoiAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5MycsICdceDkzJywgJyAnLCAnXHhFMScsICdceDkzJywgJ1x4OTUnLCAnICcsICdceEUxJywgJ1x4OTMnLCAnXHg4MCcsICcgJywgJ1x4RTEnLCAnXHg5MycsICdceDgyJywgJyAnLCAnXHhFMScsICdceDkzJywgJ1x4ODQnLCAnICcsICdceEUxJywgJ1x4OTUnLCAnXHg4NCcsICcgJywgJ1x4RTEnLCAnXHg5NScsICdceDg2JywgJyAnLCAnXHhFMScsICdceDk4JywgJ1x4QTMnLCAgLyog4ZOTIOGTlSDhk4Ag4ZOCIOGThCDhlYQg4ZWGIOGYoyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5NScsICdceDgzJywgJyAnLCAnXHhFMScsICdceDkzJywgJ1x4ODInLCAnICcsICdceEUxJywgJ1x4OTMnLCAnXHg4MCcsICcgJywgJ1x4RTEnLCAnXHg5NScsICdceDgyJywgJyAnLCAnXHhFMScsICdceDkzJywgJ1x4OTcnLCAnICcsICdceEUxJywgJ1x4OTMnLCAnXHg5QScsICcgJywgJ1x4RTEnLCAnXHg5NScsICdceDg2JywgJyAnLCAnXHhFMScsICdceDk4JywgJ1x4QTMnLCAgLyog4ZWDIOGTgiDhk4Ag4ZWCIOGTlyDhk5og4ZWGIOGYoyAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5MCcsICdceEFBJywgJyAnLCAnXHhFMScsICdceDk5JywgJ1x4ODYnLCAnICcsICdceEUxJywgJ1x4QTMnLCAnXHg5OCcsICcgJywgJ1x4RTEnLCAnXHg5MCcsICdceEEyJywgJyAnLCAnXHhFMScsICdceDkyJywgJ1x4QkUnLCAnICcsICdceEUxJywgJ1x4QTMnLCAnXHg5NycsICcgJywgJ1x4RTEnLCAnXHg5NCcsICdceDg2JywgIC8qIOGQqiDhmYYg4aOYIOGQoiDhkr4g4aOXIOGUhiAqLworICAgICdcMCcsCisgICAgJ1x4RTEnLCAnXHg5OScsICdceDg2JywgJyAnLCAnXHhFMScsICdceDk3JywgJ1x4QUUnLCAnICcsICdceEUxJywgJ1x4OTInLCAnXHhCQicsICcgJywgJ1x4RTEnLCAnXHg5MCcsICdceDlFJywgJyAnLCAnXHhFMScsICdceDk0JywgJ1x4ODYnLCAnICcsICdceEUxJywgJ1x4OTInLCAnXHhBMScsICcgJywgJ1x4RTEnLCAnXHg5MicsICdceEEyJywgJyAnLCAnXHhFMScsICdceDkzJywgJ1x4OTEnLCAgLyog4ZmGIOGXriDhkrsg4ZCeIOGUhiDhkqEg4ZKiIOGTkSAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceDhBJywgJ1x4QTcnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QScsICdceEFCJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OEEnLCAnXHhBQycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDhBJywgJ1x4QUQnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QScsICdceEIxJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OEEnLCAnXHhCQScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDhBJywgJ1x4QkMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QScsICdceEJGJywgIC8qIPCQiqcg8JCKqyDwkIqsIPCQiq0g8JCKsSDwkIq6IPCQirwg8JCKvyAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceDhBJywgJ1x4QTMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QScsICdceEE3JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OEEnLCAnXHhCNycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDhCJywgJ1x4ODAnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QScsICdceEFCJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OEEnLCAnXHhCOCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDhCJywgJ1x4ODknLCAgLyog8JCKoyDwkIqnIPCQircg8JCLgCDwkIqrIPCQirgg8JCLiSAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4ODMnLCAnICcsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceDg1JywgJyAnLCAnXHhGMCcsICdceDkxJywgJ1x4ODQnLCAnXHg4OScsICcgJywgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4OTknLCAnICcsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceDk3JywgIC8qIPCRhIMg8JGEhSDwkYSJIPCRhJkg8JGElyAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4ODUnLCAnICcsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceDlCJywgJyAnLCAnXHhGMCcsICdceDkxJywgJ1x4ODQnLCAnXHg5RCcsICcgJywgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4OTcnLCAnICcsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceDkzJywgIC8qIPCRhIUg8JGEmyDwkYSdIPCRhJcg8JGEkyAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4OTYnLCAnXHhGMCcsICdceDkxJywgJ1x4ODQnLCAnXHhCMycsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceEEyJywgJyAnLCAnXHhGMCcsICdceDkxJywgJ1x4ODQnLCAnXHg5OCcsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceEIzJywgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4QTInLCAnICcsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceDk5JywgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4QjMnLCAnXHhGMCcsICdceDkxJywgJ1x4ODQnLCAnXHhBMicsICcgJywgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4QTQnLCAnXHhGMCcsICdceDkxJywgJ1x4ODQnLCAnXHhCMycsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceEEyJywgJyAnLCAnXHhGMCcsICdceDkxJywgJ1x4ODQnLCAnXHhBNScsICdceEYwJywgJ1x4OTEnLCAnXHg4NCcsICdceEIzJywgJ1x4RjAnLCAnXHg5MScsICdceDg0JywgJ1x4QTInLCAgLyog8JGElvCRhLPwkYSiIPCRhJjwkYSz8JGEoiDwkYSZ8JGEs/CRhKIg8JGEpPCRhLPwkYSiIPCRhKXwkYSz8JGEoiAqLworICAgICdcMCcsCiAgICAgJ1x4RTEnLCAnXHg4RicsICdceDg2JywgJyAnLCAnXHhFMScsICdceDhFJywgJ1x4QkInLCAnICcsICdceEUxJywgJ1x4OEUnLCAnXHhBQycsICcgJywgJ1x4RTEnLCAnXHg4RicsICdceDgzJywgJyAnLCAnXHhFMScsICdceDhFJywgJ1x4QTQnLCAnICcsICdceEUxJywgJ1x4OEYnLCAnXHhBMycsICcgJywgJ1x4RTEnLCAnXHg4RScsICdceEE2JywgJyAnLCAnXHhFMScsICdceDhGJywgJ1x4OTUnLCAgLyog4Y+GIOGOuyDhjqwg4Y+DIOGOpCDhj6Mg4Y6mIOGPlSAqLwogICAgICdcMCcsCiAgICAgJ1x4RUEnLCAnXHhBRScsICdceDkyJywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4QTQnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHhCNicsICcgJywgJ1x4RUEnLCAnXHhBRCcsICdceEI0JywgJyAnLCAnXHhFQScsICdceEFEJywgJ1x4QkUnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHg5NycsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceDlEJywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4QkYnLCAgLyog6q6SIOqupCDqrrYg6q20IOqtviDqrpcg6q6dIOquvyAqLwpAQCAtNTgsNiArMTA0LDIwIEBACiAgICAgJ1wwJywKICAgICAnXHhFMScsICdceDhGJywgJ1x4QjgnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHg5MCcsICcgJywgJ1x4RUEnLCAnXHhBRCcsICdceEI5JywgJyAnLCAnXHhFQScsICdceEFEJywgJ1x4QkInLCAgLyog4Y+4IOqukCDqrbkg6q27ICovCiAgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEIyJywgJ1x4OEMnLCAnICcsICdceEUyJywgJ1x4QjInLCAnXHg4RScsICcgJywgJ1x4RTInLCAnXHhCMicsICdceEEwJywgJyAnLCAnXHhFMicsICdceEIzJywgJ1x4OUUnLCAnICcsICdceEUyJywgJ1x4QjInLCAnXHg5RScsICcgJywgJ1x4RTInLCAnXHhCMicsICdceDkwJywgJyAnLCAnXHhFMicsICdceEIyJywgJ1x4QTQnLCAnICcsICdceEUyJywgJ1x4QjMnLCAnXHg4QScsICAvKiDisowg4rKOIOKyoCDis54g4rKeIOKykCDisqQg4rOKICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEIzJywgJ1x4OTAnLCAnICcsICdceEUyJywgJ1x4QjMnLCAnXHg5OCcsICcgJywgJ1x4RTInLCAnXHhCMycsICdceDlFJywgJyAnLCAnXHhFMicsICdceEIyJywgJ1x4OEUnLCAnICcsICdceEUyJywgJ1x4QjInLCAnXHg5RScsICcgJywgJ1x4RTInLCAnXHhCMicsICdceDkwJywgJyAnLCAnXHhFMicsICdceEIzJywgJ1x4OUMnLCAnICcsICdceEUyJywgJ1x4QjInLCAnXHhCMCcsICAvKiDis5Ag4rOYIOKzniDiso4g4rKeIOKykCDis5wg4rKwICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEIyJywgJ1x4OEQnLCAnICcsICdceEUyJywgJ1x4QjInLCAnXHg4RicsICcgJywgJ1x4RTInLCAnXHhCMicsICdceEExJywgJyAnLCAnXHhFMicsICdceEIzJywgJ1x4OUYnLCAnICcsICdceEUyJywgJ1x4QjInLCAnXHg5RicsICcgJywgJ1x4RTInLCAnXHhCMicsICdceDkxJywgJyAnLCAnXHhFMicsICdceEIyJywgJ1x4QTUnLCAnICcsICdceEUyJywgJ1x4QjMnLCAnXHg4QicsICAvKiDiso0g4rKPIOKyoSDis58g4rKfIOKykSDisqUg4rOLICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEIzJywgJ1x4OTEnLCAnICcsICdceEUyJywgJ1x4QjMnLCAnXHg5OScsICcgJywgJ1x4RTInLCAnXHhCMycsICdceDlGJywgJyAnLCAnXHhFMicsICdceEIyJywgJ1x4OEYnLCAnICcsICdceEUyJywgJ1x4QjInLCAnXHg5RicsICcgJywgJ1x4RTInLCAnXHhCMicsICdceDkxJywgJyAnLCAnXHhFMicsICdceEIzJywgJ1x4OUQnLCAnICcsICdceEUyJywgJ1x4QjMnLCAnXHg5MicsICAvKiDis5Eg4rOZIOKznyDiso8g4rKfIOKykSDis50g4rOSICovCisgICAgJ1wwJywKKyAgICAnXHhGMCcsICdceDkwJywgJ1x4QTAnLCAnXHg4RCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEEwJywgJ1x4OTknLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhBMCcsICdceEIzJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QTAnLCAnXHhCMScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEEwJywgJ1x4ODUnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhBMCcsICdceDkzJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QTAnLCAnXHhBMycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEEwJywgJ1x4QTYnLCAgLyog8JCgjSDwkKCZIPCQoLMg8JCgsSDwkKCFIPCQoJMg8JCgoyDwkKCmICovCisgICAgJ1wwJywKKyAgICAnXHhGMCcsICdceDkwJywgJ1x4QTAnLCAnXHg4MycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEEwJywgJ1x4OEEnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhBMCcsICdceDlCJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QTAnLCAnXHhBMycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEEwJywgJ1x4QjMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhBMCcsICdceEI1JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QTAnLCAnXHg5MCcsICAvKiDwkKCDIPCQoIog8JCgmyDwkKCjIPCQoLMg8JCgtSDwkKCQICovCisgICAgJ1wwJywKKyAgICAnXHhGMCcsICdceDkwJywgJ1x4QTAnLCAnXHg4OCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEEwJywgJ1x4OEYnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhBMCcsICdceDk2JywgIC8qIPCQoIgg8JCgjyDwkKCWICovCisgICAgJ1wwJywKICAgICAnXHhEMCcsICdceDkxJywgJyAnLCAnXHhEMCcsICdceDkyJywgJyAnLCAnXHhEMCcsICdceDk1JywgJyAnLCAnXHhEMCcsICdceDlGJywgJyAnLCAnXHhEMCcsICdceDk3JywgJyAnLCAnXHhEMCcsICdceDlFJywgJyAnLCAnXHhEMCcsICdceEExJywgJyAnLCAnXHhEMCcsICdceEFEJywgIC8qINCRINCSINCVINCfINCXINCeINChINCtICovCiAgICAgJ1wwJywKICAgICAnXHhEMCcsICdceDkxJywgJyAnLCAnXHhEMCcsICdceDkyJywgJyAnLCAnXHhEMCcsICdceDk1JywgJyAnLCAnXHhEMCcsICdceEE4JywgJyAnLCAnXHhEMCcsICdceDk3JywgJyAnLCAnXHhEMCcsICdceDlFJywgJyAnLCAnXHhEMCcsICdceEExJywgJyAnLCAnXHhEMCcsICdceEFEJywgIC8qINCRINCSINCVINCoINCXINCeINChINCtICovCkBAIC02Niw2ICsxMjYsMTQgQEAKICAgICAnXDAnLAogICAgICdceEQxJywgJ1x4ODAnLCAnICcsICdceEQxJywgJ1x4ODMnLCAnICcsICdceEQxJywgJ1x4ODQnLCAgLyog0YAg0YMg0YQgKi8KICAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceDgyJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHg4NCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkwJywgJ1x4OEInLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceDk3JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHg5MScsICAvKiDwkJCCIPCQkIQg8JCQiyDwkJCXIPCQkJEgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceDgwJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHg4MicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkwJywgJ1x4ODQnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceDk3JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHg5QicsICAvKiDwkJCAIPCQkIIg8JCQhCDwkJCXIPCQkJsgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceEFBJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHhBQycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkwJywgJ1x4QjMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceEJGJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHhCOScsICAvKiDwkJCqIPCQkKwg8JCQsyDwkJC/IPCQkLkgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceEE4JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTAnLCAnXHhBQScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkwJywgJ1x4QUMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MCcsICdceEJGJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHg4MycsICAvKiDwkJCoIPCQkKog8JCQrCDwkJC/IPCQkYMgKi8KKyAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QTQnLCAnXHg5NScsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEFFJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4ODUnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg4NicsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEE1JywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4QTcnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHhBRCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEI2JywgIC8qIOCklSDgpK4g4KSFIOCkhiDgpKUg4KSnIOCkrSDgpLYgKi8KICAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QTQnLCAnXHg4OCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceDkwJywgJyAnLCAnXHhFMCcsICdceEE0JywgJ1x4OTMnLCAnICcsICdceEUwJywgJ1x4QTQnLCAnXHg5NCcsICcgJywgJ1x4RTAnLCAnXHhBNCcsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEE1JywgJ1x4ODAnLCAnICcsICdceEUwJywgJ1x4QTUnLCAnXHg4QicsICcgJywgJ1x4RTAnLCAnXHhBNScsICdceDhDJywgIC8qIOCkiCDgpJAg4KSTIOCklCDgpL8g4KWAIOCliyDgpYwgKi8KQEAgLTk4LDYgKzE2NiwxOCBAQAogICAgICdcMCcsCiAgICAgJ1x4RTInLCAnXHhCNCcsICdceDg0JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4ODUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5NCcsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk1JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4ODEnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4MicsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk4JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OUQnLCAgLyog4rSEIOK0hSDitJQg4rSVIOK0gSDitIIg4rSYIOK0nSAqLwogICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCMCcsICdceDg1JywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4OTQnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHhBQScsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceDg0JywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4ODInLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg4QScsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceEFCJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4OEInLCAgLyog4rCFIOKwlCDisKog4rCEIOKwgiDisIog4rCrIOKwiyAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCMCcsICdceDg1JywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4ODQnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHg4MicsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceEFBJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4OUUnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHhBMScsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceDhBJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4OTQnLCAgLyog4rCFIOKwhCDisIIg4rCqIOKwniDisKEg4rCKIOKwlCAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCMCcsICdceEI1JywgJyAnLCAnXHhFMicsICdceEIxJywgJ1x4ODQnLCAnICcsICdceEUyJywgJ1x4QjEnLCAnXHg5QScsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceEI0JywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4QjInLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHhCQScsICcgJywgJ1x4RTInLCAnXHhCMScsICdceDlCJywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4QkInLCAgLyog4rC1IOKxhCDisZog4rC0IOKwsiDisLog4rGbIOKwuyAqLworICAgICdcMCcsCisgICAgJ1x4RTInLCAnXHhCMCcsICdceEI1JywgJyAnLCAnXHhFMicsICdceEIwJywgJ1x4QjQnLCAnICcsICdceEUyJywgJ1x4QjAnLCAnXHhCMicsICcgJywgJ1x4RTInLCAnXHhCMScsICdceDlBJywgJyAnLCAnXHhFMicsICdceEIxJywgJ1x4OEUnLCAnICcsICdceEUyJywgJ1x4QjEnLCAnXHg5MScsICcgJywgJ1x4RTInLCAnXHhCMCcsICdceEJBJywgJyAnLCAnXHhFMicsICdceEIxJywgJ1x4ODQnLCAgLyog4rC1IOKwtCDisLIg4rGaIOKxjiDisZEg4rC6IOKxhCAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceDhDJywgJ1x4QjInLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QycsICdceEI2JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OEQnLCAnXHg4MCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDhEJywgJ1x4ODQnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QycsICdceEI0JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OEQnLCAnXHg4MycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDhEJywgJ1x4ODgnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QycsICdceEJFJywgIC8qIPCQjLIg8JCMtiDwkI2AIPCQjYQg8JCMtCDwkI2DIPCQjYgg8JCMviAqLworICAgICdcMCcsCisgICAgJ1x4RjAnLCAnXHg5MCcsICdceDhDJywgJ1x4QjYnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg4QycsICdceEI0JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OEQnLCAnXHg4MycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDhEJywgJ1x4ODgnLCAgLyog8JCMtiDwkIy0IPCQjYMg8JCNiCAqLworICAgICdcMCcsCiAgICAgJ1x4Q0UnLCAnXHg5MycsICcgJywgJ1x4Q0UnLCAnXHg5MicsICcgJywgJ1x4Q0UnLCAnXHg5NScsICcgJywgJ1x4Q0UnLCAnXHg5NicsICcgJywgJ1x4Q0UnLCAnXHg5OCcsICcgJywgJ1x4Q0UnLCAnXHg5RicsICcgJywgJ1x4Q0UnLCAnXHhBOScsICAvKiDOkyDOkiDOlSDOliDOmCDOnyDOqSAqLwogICAgICdcMCcsCiAgICAgJ1x4Q0UnLCAnXHg5MicsICcgJywgJ1x4Q0UnLCAnXHg5NCcsICcgJywgJ1x4Q0UnLCAnXHg5NicsICcgJywgJ1x4Q0UnLCAnXHg5RScsICcgJywgJ1x4Q0UnLCAnXHg5OCcsICcgJywgJ1x4Q0UnLCAnXHg5RicsICAvKiDOkiDOlCDOliDOniDOmCDOnyAqLwpAQCAtMTM4LDYgKzIxOCwxNiBAQAogICAgICdcMCcsCiAgICAgJ1x4RTAnLCAnXHhCMicsICdceDg1JywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4ODknLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHg4RScsICcgJywgJ1x4RTAnLCAnXHhCMicsICdceEIyJywgJyAnLCAnXHhFMCcsICdceEIzJywgJ1x4QTYnLCAnICcsICdceEUwJywgJ1x4QjMnLCAnXHhBOCcsICcgJywgJ1x4RTAnLCAnXHhCMycsICdceEFDJywgJyAnLCAnXHhFMCcsICdceEIzJywgJ1x4QUQnLCAgLyog4LKFIOCyiSDgso4g4LKyIOCzpiDgs6gg4LOsIOCzrSAqLwogICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHhBNCcsICdceDg1JywgJyAnLCAnXHhFQScsICdceEE0JywgJ1x4OEYnLCAnICcsICdceEVBJywgJ1x4QTQnLCAnXHg4MScsICcgJywgJ1x4RUEnLCAnXHhBNCcsICdceDhCJywgJyAnLCAnXHhFQScsICdceEE0JywgJ1x4ODAnLCAnICcsICdceEVBJywgJ1x4QTQnLCAnXHg4RCcsICAvKiDqpIUg6qSPIOqkgSDqpIsg6qSAIOqkjSAqLworICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHhBNCcsICdceDg4JywgJyAnLCAnXHhFQScsICdceEE0JywgJ1x4OTgnLCAnICcsICdceEVBJywgJ1x4QTQnLCAnXHg4MCcsICcgJywgJ1x4RUEnLCAnXHhBNCcsICdceDhEJywgJyAnLCAnXHhFQScsICdceEE0JywgJ1x4QTInLCAgLyog6qSIIOqkmCDqpIAg6qSNIOqkoiAqLworICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHhBNCcsICdceDk2JywgJyAnLCAnXHhFQScsICdceEE0JywgJ1x4QTEnLCAgLyog6qSWIOqkoSAqLworICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHhBNCcsICdceDkxJywgJyAnLCAnXHhFQScsICdceEE0JywgJ1x4OUMnLCAnICcsICdceEVBJywgJ1x4QTQnLCAnXHg5RScsICAvKiDqpJEg6qScIOqkniAqLworICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHhBNCcsICdceDkxJywgJ1x4RUEnLCAnXHhBNCcsICdceEFDJywgJyAnLCAnXHhFQScsICdceEE0JywgJ1x4OUMnLCAnXHhFQScsICdceEE0JywgJ1x4QUQnLCAnICcsICdceEVBJywgJ1x4QTQnLCAnXHg5NCcsICdceEVBJywgJ1x4QTQnLCAnXHhBQycsICAvKiDqpJHqpKwg6qSc6qStIOqklOqkrCAqLworICAgICdcMCcsCiAgICAgJ1x4RTEnLCAnXHg5RScsICdceDgxJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4OTEnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg5MycsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceEE3JywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4QTknLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHhCNicsICAvKiDhnoEg4Z6RIOGekyDhnqcg4Z6pIOGetiAqLwogICAgICdcMCcsCiAgICAgJ1x4RTEnLCAnXHg5RScsICdceDgwJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDgwJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4ODAnLCAnXHhFMScsICdceDlGJywgJ1x4OTInLCAnXHhFMScsICdceDlFJywgJ1x4ODEnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg4MCcsICdceEUxJywgJ1x4OUYnLCAnXHg5MicsICdceEUxJywgJ1x4OUUnLCAnXHg4MicsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceDgwJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDkwJywgIC8qIOGegOGfkuGegCDhnoDhn5LhnoEg4Z6A4Z+S4Z6CIOGegOGfkuGekCAqLwpAQCAtMTk0LDYgKzI4NCwxMCBAQAogICAgICdcMCcsCiAgICAgJ1x4RTEnLCAnXHhCNScsICdceDk2JywgJyAnLCAnXHhDQScsICdceEI4JywgJyAnLCAnXHhFMScsICdceEI1JywgJ1x4OEQnLCAgLyog4bWWIMq4IOG1jSAqLwogICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHg5MycsICdceEExJywgJyAnLCAnXHhFQScsICdceDkzJywgJ1x4QTcnLCAnICcsICdceEVBJywgJ1x4OTMnLCAnXHhCMScsICcgJywgJ1x4RUEnLCAnXHg5MycsICdceEI2JywgJyAnLCAnXHhFQScsICdceDkzJywgJ1x4QTknLCAnICcsICdceEVBJywgJ1x4OTMnLCAnXHg5QScsICcgJywgJ1x4RUEnLCAnXHg5MycsICdceEI1JywgJyAnLCAnXHhFQScsICdceDkzJywgJ1x4QjMnLCAgLyog6pOhIOqTpyDqk7Eg6pO2IOqTqSDqk5og6pO1IOqTsyAqLworICAgICdcMCcsCisgICAgJ1x4RUEnLCAnXHg5MycsICdceDk1JywgJyAnLCAnXHhFQScsICdceDkzJywgJ1x4OUMnLCAnICcsICdceEVBJywgJ1x4OTMnLCAnXHg5RScsICcgJywgJ1x4RUEnLCAnXHg5MycsICdceEExJywgJyAnLCAnXHhFQScsICdceDkzJywgJ1x4OUInLCAnICcsICdceEVBJywgJ1x4OTMnLCAnXHhBMicsICcgJywgJ1x4RUEnLCAnXHg5MycsICdceEIzJywgJyAnLCAnXHhFQScsICdceDkzJywgJ1x4QjQnLCAgLyog6pOVIOqTnCDqk54g6pOhIOqTmyDqk6Ig6pOzIOqTtCAqLworICAgICdcMCcsCiAgICAgJ1x4RTAnLCAnXHhCNCcsICdceDkyJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OUYnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBMCcsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEIxJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OUEnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBQScsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceDlBJywgJ1x4RTAnLCAnXHhCNScsICdceDhEJywgJ1x4RTAnLCAnXHhCNCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QUEnLCAnXHhFMCcsICdceEI1JywgJ1x4OEQnLCAnXHhFMCcsICdceEI0JywgJ1x4QUEnLCAgLyog4LSSIOC0nyDgtKAg4LSxIOC0miDgtKog4LSa4LWN4LSaIOC0quC1jeC0qiAqLwogICAgICdcMCcsCiAgICAgJ1x4RTAnLCAnXHhCNCcsICdceDlGJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QTAnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEI2JywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OTgnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEE1JywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QjInLCAgLyog4LSfIOC0oCDgtKcg4LS2IOC0mCDgtJog4LSlIOC0siAqLwpAQCAtMjA2LDEyICszMDAsNjggQEAKICAgICAnXDAnLAogICAgICdceEUxJywgJ1x4ODAnLCAnXHg4OScsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceDhBJywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4QTUnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHhBOScsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceEE4JywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4ODInLCAnICcsICdceEUxJywgJ1x4ODEnLCAnXHg4NScsICcgJywgJ1x4RTEnLCAnXHg4MScsICdceDg5JywgIC8qIOGAiSDhgIog4YClIOGAqSDhgKgg4YGCIOGBhSDhgYkgKi8KICAgICAnXDAnLAorICAgICdceERGJywgJ1x4OTAnLCAnICcsICdceERGJywgJ1x4ODknLCAnICcsICdceERGJywgJ1x4OTInLCAnICcsICdceERGJywgJ1x4OUYnLCAnICcsICdceERGJywgJ1x4OTYnLCAnICcsICdceERGJywgJ1x4OUMnLCAnICcsICdceERGJywgJ1x4QTAnLCAnICcsICdceERGJywgJ1x4QTUnLCAgLyog35Ag34kg35Ig358g35Yg35wg36Ag36UgKi8KKyAgICAnXDAnLAorICAgICdceERGJywgJ1x4ODAnLCAnICcsICdceERGJywgJ1x4OTgnLCAnICcsICdceERGJywgJ1x4QTEnLCAnICcsICdceERGJywgJ1x4QTAnLCAnICcsICdceERGJywgJ1x4QTUnLCAgLyog34Ag35gg36Eg36Ag36UgKi8KKyAgICAnXDAnLAorICAgICdceERGJywgJ1x4OEYnLCAnICcsICdceERGJywgJ1x4OUInLCAnICcsICdceERGJywgJ1x4OEInLCAgLyog348g35sg34sgKi8KKyAgICAnXDAnLAorICAgICdceERGJywgJ1x4OEUnLCAnICcsICdceERGJywgJ1x4OEYnLCAnICcsICdceERGJywgJ1x4OUInLCAnICcsICdceERGJywgJ1x4OEInLCAgLyog344g348g35sg34sgKi8KKyAgICAnXDAnLAorICAgICdceEUxJywgJ1x4QjEnLCAnXHg5QicsICcgJywgJ1x4RTEnLCAnXHhCMScsICdceDlDJywgJyAnLCAnXHhFMScsICdceEIxJywgJ1x4OUQnLCAnICcsICdceEUxJywgJ1x4QjEnLCAnXHhBMScsICcgJywgJ1x4RTEnLCAnXHhCMScsICdceEEyJywgJyAnLCAnXHhFMScsICdceEIxJywgJ1x4QTUnLCAgLyog4bGbIOGxnCDhsZ0g4bGhIOGxoiDhsaUgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHhCMCcsICdceDk3JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QjAnLCAnXHg5OCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEIwJywgJ1x4QTcnLCAgLyog8JCwlyDwkLCYIPCQsKcgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHhCMCcsICdceDg5JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4QjAnLCAnXHg5NycsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceEIwJywgJ1x4QTYnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHhCMCcsICdceEE3JywgIC8qIPCQsIkg8JCwlyDwkLCmIPCQsKcgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEJFJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHg4RCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4OTInLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceDkzJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHhCQicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4ODInLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEI1JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHg4NicsICAvKiDwkJK+IPCQk40g8JCTkiDwkJOTIPCQkrsg8JCTgiDwkJK1IPCQk4YgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEIwJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHg4RCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4ODInLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEJGJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHg4RScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4QjknLCAgLyog8JCSsCDwkJONIPCQk4Ig8JCSvyDwkJOOIPCQkrkgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEJDJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHhCRCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4QkUnLCAgLyog8JCSvCDwkJK9IPCQkr4gKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEI1JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHhCNicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4QkEnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEJCJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHg5RCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4QTMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEFBJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHhBRScsICAvKiDwkJO1IPCQk7Yg8JCTuiDwkJO7IPCQk50g8JCToyDwkJOqIPCQk64gKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceDk4JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHg5QScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4QTMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEI1JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHhBMScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4QTcnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEFBJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHhCNicsICAvKiDwkJOYIPCQk5og8JCToyDwkJO1IPCQk6Eg8JCTpyDwkJOqIPCQk7YgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEE0JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHhBNicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4QjgnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEI5JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHg5QicsICAvKiDwkJOkIPCQk6Yg8JCTuCDwkJO5IPCQk5sgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MycsICdceEE0JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTMnLCAnXHhBNScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkzJywgJ1x4QTYnLCAgLyog8JCTpCDwkJOlIPCQk6YgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceDg2JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHg4OScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4OTAnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceDkyJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHg5OCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4OUInLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEEwJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHhBMycsICAvKiDwkJKGIPCQkokg8JCSkCDwkJKSIPCQkpgg8JCSmyDwkJKgIPCQkqMgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceDgwJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHg4MicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4ODYnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceDg4JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHg4QScsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkyJywgJ1x4OTInLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MicsICdceEEwJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTInLCAnXHhBOScsICAvKiDwkJKAIPCQkoIg8JCShiDwkJKIIPCQkoog8JCSkiDwkJKgIPCQkqkgKi8KKyAgICAnXDAnLAorICAgICdceEVBJywgJ1x4QTInLCAnXHg5QycsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceDlFJywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4QjMnLCAnICcsICdceEVBJywgJ1x4QTInLCAnXHg4MicsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceDk2JywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4OTInLCAnICcsICdceEVBJywgJ1x4QTInLCAnXHg5RCcsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceDlCJywgIC8qIOqinCDqop4g6qKzIOqigiDqopYg6qKSIOqinSDqopsgKi8KKyAgICAnXDAnLAorICAgICdceEVBJywgJ1x4QTInLCAnXHg4MicsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceEE4JywgJyAnLCAnXHhFQScsICdceEEyJywgJ1x4QkEnLCAnICcsICdceEVBJywgJ1x4QTInLCAnXHhBNCcsICcgJywgJ1x4RUEnLCAnXHhBMicsICdceDhFJywgIC8qIOqigiDqoqgg6qK6IOqipCDqoo4gKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceDk1JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHg5OScsICAvKiDwkJGVIPCQkZkgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceDk0JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHg5NicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkxJywgJ1x4OTcnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceEI5JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHhCQicsICAvKiDwkJGUIPCQkZYg8JCRlyDwkJG5IPCQkbsgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceDlGJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHhBMycsICAvKiDwkJGfIPCQkaMgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceEIxJywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHhCMicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkxJywgJ1x4QjMnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceEI0JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHhCOCcsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkxJywgJ1x4QkEnLCAnICcsICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceEJDJywgIC8qIPCQkbEg8JCRsiDwkJGzIPCQkbQg8JCRuCDwkJG6IPCQkbwgKi8KKyAgICAnXDAnLAorICAgICdceEYwJywgJ1x4OTAnLCAnXHg5MScsICdceEI0JywgJyAnLCAnXHhGMCcsICdceDkwJywgJ1x4OTEnLCAnXHhCQicsICcgJywgJ1x4RjAnLCAnXHg5MCcsICdceDkxJywgJ1x4QjknLCAgLyog8JCRtCDwkJG7IPCQkbkgKi8KKyAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QjYnLCAnXHg4OScsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4OUQnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCMycsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEI0JywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QkEnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCRCcsICcgJywgJ1x4RTAnLCAnXHhCNycsICdceDg2JywgIC8qIOC2iSDgtpog4LadIOC2syDgtrQg4La6IOC2vSDgt4YgKi8KICAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QjYnLCAnXHg5MScsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceDk0JywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4OUQnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhBMicsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEE3JywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QUUnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCMCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEJCJywgIC8qIOC2kSDgtpQg4LadIOC2oiDgtqcg4LauIOC2sCDgtrsgKi8KICAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QjYnLCAnXHhBRicsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEIzJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4OEInLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCRCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEFEJywgJ1x4RTAnLCAnXHhCNycsICdceDk2JywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QUQnLCAnXHhFMCcsICdceEI3JywgJ1x4OTQnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCNicsICdceEUwJywgJ1x4QjcnLCAnXHg5NCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEFGJywgJ1x4RTAnLCAnXHhCNycsICdceDk0JywgIC8qIOC2ryDgtrMg4LaLIOC2vSDgtq3gt5Yg4Lat4LeUIOC2tuC3lCDgtq/gt5QgKi8KICAgICAnXDAnLAorICAgICdceEUxJywgJ1x4QUUnLCAnXHg4QicsICcgJywgJ1x4RTEnLCAnXHhBRScsICdceDlFJywgJyAnLCAnXHhFMScsICdceEFFJywgJ1x4QUUnLCAnICcsICdceEUxJywgJ1x4QUUnLCAnXHhCRCcsICcgJywgJ1x4RTEnLCAnXHhBRScsICdceEIwJywgJyAnLCAnXHhFMScsICdceEFFJywgJ1x4ODgnLCAgLyog4a6LIOGuniDhrq4g4a69IOGusCDhroggKi8KKyAgICAnXDAnLAorICAgICdceEUxJywgJ1x4QUUnLCAnXHg4NCcsICcgJywgJ1x4RTEnLCAnXHhBRScsICdceDk0JywgJyAnLCAnXHhFMScsICdceEFFJywgJ1x4OTUnLCAnICcsICdceEUxJywgJ1x4QUUnLCAnXHg5NycsICcgJywgJ1x4RTEnLCAnXHhBRScsICdceEIwJywgJyAnLCAnXHhFMScsICdceEFFJywgJ1x4ODYnLCAnICcsICdceEUxJywgJ1x4QUUnLCAnXHg4OCcsICcgJywgJ1x4RTEnLCAnXHhBRScsICdceDg5JywgIC8qIOGuhCDhrpQg4a6VIOGulyDhrrAg4a6GIOGuiCDhrokgKi8KKyAgICAnXDAnLAorICAgICdceEUxJywgJ1x4QUUnLCAnXHhCQycsICcgJywgJ1x4RTEnLCAnXHhCMycsICdceDg0JywgIC8qIOGuvCDhs4QgKi8KKyAgICAnXDAnLAorICAgICdceEVBJywgJ1x4QUEnLCAnXHg4NicsICcgJywgJ1x4RUEnLCAnXHhBQScsICdceDk0JywgJyAnLCAnXHhFQScsICdceEFBJywgJ1x4OTInLCAnICcsICdceEVBJywgJ1x4QUEnLCAnXHg5NicsICcgJywgJ1x4RUEnLCAnXHhBQScsICdceEFCJywgIC8qIOqqhiDqqpQg6qqSIOqqliDqqqsgKi8KKyAgICAnXDAnLAorICAgICdceEVBJywgJ1x4QUEnLCAnXHg4OScsICcgJywgJ1x4RUEnLCAnXHhBQScsICdceEFCJywgJyAnLCAnXHhFQScsICdceEFBJywgJ1x4QUUnLCAgLyog6qqJIOqqqyDqqq4gKi8KKyAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QUUnLCAnXHg4OScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDkyJywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OTMnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHhCMScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDg4JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OTUnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5OScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDlBJywgIC8qIOCuiSDgrpIg4K6TIOCusSDgrogg4K6VIOCumSDgrpogKi8KICAgICAnXDAnLAogICAgICdceEUwJywgJ1x4QUUnLCAnXHg5NScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4QjInLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHhCNicsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDg5JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OTknLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5RicsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceEFBJywgIC8qIOCulSDgrpog4K6yIOCutiDgrokg4K6ZIOCunyDgrqogKi8KQEAgLTIzMyw2ICszODMsMTIgQEAKICAgICAnXHhFMCcsICdceEI4JywgJ1x4OEQnLCAnICcsICdceEUwJywgJ1x4QjgnLCAnXHg5MCcsICAvKiDguI0g4LiQICovCiAgICAgJ1wwJywKICAgICAnXHhFMCcsICdceEI5JywgJ1x4OTAnLCAnICcsICdceEUwJywgJ1x4QjknLCAnXHg5MScsICcgJywgJ1x4RTAnLCAnXHhCOScsICdceDkzJywgIC8qIOC5kCDguZEg4LmTICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEI1JywgJ1x4OTQnLCAnICcsICdceEUyJywgJ1x4QjUnLCAnXHg5OScsICcgJywgJ1x4RTInLCAnXHhCNScsICdceDlCJywgJyAnLCAnXHhFMicsICdceEI1JywgJ1x4OUUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHhCNScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceEJDJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4QjknLCAnICcsICdceEUyJywgJ1x4QjUnLCAnXHg4RScsICAvKiDitZQg4rWZIOK1myDitZ4g4rS1IOK0vCDitLkg4rWOICovCisgICAgJ1wwJywKKyAgICAnXHhFQScsICdceDk3JywgJ1x4OEQnLCAnICcsICdceEVBJywgJ1x4OTgnLCAnXHg5NicsICcgJywgJ1x4RUEnLCAnXHg5OCcsICdceDk5JywgJyAnLCAnXHhFQScsICdceDk4JywgJ1x4OUMnLCAnICcsICdceEVBJywgJ1x4OTYnLCAnXHg5QycsICcgJywgJ1x4RUEnLCAnXHg5NicsICdceDlEJywgJyAnLCAnXHhFQScsICdceDk0JywgJ1x4ODUnLCAnICcsICdceEVBJywgJ1x4OTUnLCAnXHhBMicsICAvKiDql40g6piWIOqYmSDqmJwg6pacIOqWnSDqlIUg6pWiICovCisgICAgJ1wwJywKKyAgICAnXHhFQScsICdceDk3JywgJ1x4OEQnLCAnICcsICdceEVBJywgJ1x4OTgnLCAnXHg5NicsICcgJywgJ1x4RUEnLCAnXHg5OCcsICdceDk5JywgJyAnLCAnXHhFQScsICdceDk3JywgJ1x4OUUnLCAnICcsICdceEVBJywgJ1x4OTQnLCAnXHg4NScsICcgJywgJ1x4RUEnLCAnXHg5NScsICdceEEyJywgJyAnLCAnXHhFQScsICdceDk2JywgJ1x4OUMnLCAnICcsICdceEVBJywgJ1x4OTQnLCAnXHg4NicsICAvKiDql40g6piWIOqYmSDql54g6pSFIOqVoiDqlpwg6pSGICovCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKICAgICAnXDAnLAogICAgICdceEU0JywgJ1x4QkInLCAnXHg5NicsICcgJywgJ1x4RTQnLCAnXHhCQicsICdceEFDJywgJyAnLCAnXHhFNCcsICdceEJEJywgJ1x4QTAnLCAnICcsICdceEU0JywgJ1x4QkUnLCAnXHg4NicsICcgJywgJ1x4RTUnLCAnXHg4MCcsICdceDkxJywgJyAnLCAnXHhFNScsICdceDg4JywgJ1x4QjAnLCAnICcsICdceEU1JywgJ1x4OTInLCAnXHg4QycsICcgJywgJ1x4RTUnLCAnXHg5QycsICdceEIwJywgIC8qIOS7liDku6wg5L2gIOS+hiDlgJEg5YiwIOWSjCDlnLAgKi8KQEAgLTI4Myw2ICs0MzksMTIgQEAKICAgYWZfYmx1ZV9zdHJpbmdzZXRzW10gPQogICB7CiAgICAgLyogKi8KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FETEFNX0NBUElUQUxfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FETEFNX0NBUElUQUxfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FETEFNX1NNQUxMX1RPUCwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FETEFNX1NNQUxMX0JPVFRPTSwgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTiwgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgfSwKQEAgLTI5NSw2ICs0NTcsMTIgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FWRVNUQU5fVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVZFU1RBTl9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JBTVVNX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JBTVVNX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfVE9QLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0hFQUQsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9CQVNFLCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKQEAgLTMwMiw2ICs0NzAsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0JBU0UsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JVSElEX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19CVUhJRF9MQVJHRSwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQlVISURfU01BTEwsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19CVUhJRF9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIQUtNQV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DSEFLTUFfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hBS01BX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19CT1RUT00sICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TTUFMTF9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NVUFNfVE9QLCAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU1VQU19CT1RUT00sICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FSSUFOX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBUklBTl9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfQ0FQSVRBTCwgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwsICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9TTUFMTF9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LApAQCAtMzEwLDYgKzQ5OSwxNyBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTEwsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ09QVElDX0NBUElUQUxfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NPUFRJQ19DQVBJVEFMX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DT1BUSUNfU01BTExfVE9QLCAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NPUFRJQ19TTUFMTF9CT1RUT00sICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lQUklPVF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DWVBSSU9UX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUFJJT1RfU01BTEwsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lQUklPVF9TTUFMTCwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTEwsICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKQEAgLTMyNSw2ICs1MjUsMTIgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQkFTRSwgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFU0VSRVRfQ0FQSVRBTF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfREVTRVJFVF9DQVBJVEFMX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19ERVNFUkVUX1NNQUxMX1RPUCwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfREVTRVJFVF9TTUFMTF9CT1RUT00sICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKQEAgLTM0Miw2ICs1NDgsMTUgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dMQUdPTElUSUNfQ0FQSVRBTF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19DQVBJVEFMX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX1NNQUxMX1RPUCwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9CT1RUT00sICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dPVEhJQ19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HT1RISUNfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKQEAgLTM3MCw5ICs1ODUsMTMgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0hFQlJFV19CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAotICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX1RPUCwgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfQk9UVE9NLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0FTQ0VOREVSLCAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9ERVNDRU5ERVIsICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfTEFSR0VfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX1NVQlNDUklQVF9UT1AsICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9TVUJfVE9QICAgIH0sCkBAIC0zODQsNiArNjAzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBTklOR19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19UT1AsICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSwgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKQEAgLTQxNSw2ICs2MzcsOSBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19TTUFMTCwgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTElTVV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MSVNVX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BTEFZQUxBTV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LApAQCAtNDI0LDE3ICs2NDksNjEgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX05LT19UT1AsICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTktPX0JPVFRPTSwgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19OS09fU01BTExfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTktPX1NNQUxMX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgMCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfT0xfQ0hJS0ksIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19PTF9DSElLSSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfT0xEX1RVUktJQ19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19PTERfVFVSS0lDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NBR0VfQ0FQSVRBTF9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfVE9QLCAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0JPVFRPTSwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfQVNDRU5ERVIsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9ERVNDRU5ERVIsICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19PU01BTllBX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19TQVVSQVNIVFJBX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9UT1AsICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9CT1RUT00sICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9ERVNDRU5ERVIsICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9TTUFMTF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9TTUFMTF9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19TVU5EQU5FU0VfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFJX1ZJRVRfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFJX1ZJRVRfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVElGSU5BR0gsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19USUZJTkFHSCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEhBSV9UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEhBSV9CT1RUT00sICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LApAQCAtNDQ0LDYgKzcxMyw5IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19USEFJX0RJR0lUX1RPUCwgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19WQUlfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVkFJX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NKS19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfQ0pLX1RPUCAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NKS19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5jaW4gYi9zcmMvYXV0b2ZpdC9hZmJsdWUuY2luCmluZGV4IGY5MDgwYzUuLjQ5MTNlMmUgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYmx1ZS5jaW4KKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmNpbgpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmRhdCBiL3NyYy9hdXRvZml0L2FmYmx1ZS5kYXQKaW5kZXggOGI3NWFlYy4uZDNjYzQyOCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmRhdAorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0CkBAIC0yLDcgKzIsNyBAQAogLy8KIC8vICAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncy4KIC8vCi0vLyAgQ29weXJpZ2h0IDIwMTMtMjAxNyBieQorLy8gIENvcHlyaWdodCAyMDEzLTIwMTggYnkKIC8vICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAvLwogLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTc0LDYgKzc0LDE1IEBACiAKIEFGX0JMVUVfU1RSSU5HX0VOVU0gQUZfQkxVRV9TVFJJTkdTX0FSUkFZIEFGX0JMVUVfU1RSSU5HX01BWF9MRU46CiAKKyAgQUZfQkxVRV9TVFJJTkdfQURMQU1fQ0FQSVRBTF9UT1AKKyAgICAi8J6kjCDwnqSFIPCepIgg8J6kjyDwnqSUIPCepJoiCisgIEFGX0JMVUVfU1RSSU5HX0FETEFNX0NBUElUQUxfQk9UVE9NCisgICAgIvCepIIg8J6kliIKKyAgQUZfQkxVRV9TVFJJTkdfQURMQU1fU01BTExfVE9QCisgICAgIvCepKwg8J6kriDwnqS7IPCepLwg8J6kviIKKyAgQUZfQkxVRV9TVFJJTkdfQURMQU1fU01BTExfQk9UVE9NCisgICAgIvCepKQg8J6kqCDwnqSpIPCepK0g8J6ktCDwnqS4IPCepLog8J6lgCIKKwogICBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QCiAgICAgItinINilINmEINmDINi3INi4IgogICBBRl9CTFVFX1NUUklOR19BUkFCSUNfQk9UVE9NCkBAIC05OSw2ICsxMDgsMTYgQEAKICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfREVTQ0VOREVSCiAgICAgItWiINWoINWrINWsINWyINW6INaDINaBIgogCisgIEFGX0JMVUVfU1RSSU5HX0FWRVNUQU5fVE9QCisgICAgIvCQrIAg8JCsgSDwkKyQIPCQrJsiCisgIEFGX0JMVUVfU1RSSU5HX0FWRVNUQU5fQk9UVE9NCisgICAgIvCQrIAg8JCsgSIKKworICBBRl9CTFVFX1NUUklOR19CQU1VTV9UT1AKKyAgICAi6pqnIOqaqCDqm5sg6puJIOqbgSDqm4gg6purIOqbryIKKyAgQUZfQkxVRV9TVFJJTkdfQkFNVU1fQk9UVE9NCisgICAgIuqarSDqmrMg6pq2IOqbrCDqmqIg6pq9IOqbryDqm7IiCisKICAgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9CQVNFCiAgICAgIuCmhSDgpqEg4KakIOCmqCDgpqwg4KatIOCmsiDgppUiCiAgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfVE9QCkBAIC0xMDYsNiArMTI1LDQwIEBACiAgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfSEVBRAogICAgICLgppMg4KaPIOCmoSDgpqQg4KaoIOCmrCDgprIg4KaVIgogCisgIEFGX0JMVUVfU1RSSU5HX0JVSElEX1RPUAorICAgICLhnZAg4Z2IIgorICBBRl9CTFVFX1NUUklOR19CVUhJRF9MQVJHRQorICAgICLhnYUg4Z2KIOGdjiIKKyAgQUZfQkxVRV9TVFJJTkdfQlVISURfU01BTEwKKyAgICAi4Z2CIOGdgyDhnYkg4Z2MIgorICBBRl9CTFVFX1NUUklOR19CVUhJRF9CT1RUT00KKyAgICAi4Z2AIOGdgyDhnYYg4Z2JIOGdiyDhnY8g4Z2RIgorCisgIEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19UT1AKKyAgICAi4ZecIOGWtCDhkIEg4ZKjIOGRqyDhkY4g4ZSRIOGXsCIKKyAgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX0JPVFRPTQorICAgICLhl7Yg4Za1IOGSpyDhkIMg4ZGMIOGSjSDhlJEg4ZeiIgorICBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU01BTExfVE9QCisgICAgIuGTkyDhk5Ug4ZOAIOGTgiDhk4Qg4ZWEIOGVhiDhmKMiCisgIEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TTUFMTF9CT1RUT00KKyAgICAi4ZWDIOGTgiDhk4Ag4ZWCIOGTlyDhk5og4ZWGIOGYoyIKKyAgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NVUFNfVE9QCisgICAgIuGQqiDhmYYg4aOYIOGQoiDhkr4g4aOXIOGUhiIKKyAgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NVUFNfQk9UVE9NCisgICAgIuGZhiDhl64g4ZK7IOGQniDhlIYg4ZKhIOGSoiDhk5EiCisKKyAgQUZfQkxVRV9TVFJJTkdfQ0FSSUFOX1RPUAorICAgICLwkIqnIPCQiqsg8JCKrCDwkIqtIPCQirEg8JCKuiDwkIq8IPCQir8iCisgIEFGX0JMVUVfU1RSSU5HX0NBUklBTl9CT1RUT00KKyAgICAi8JCKoyDwkIqnIPCQircg8JCLgCDwkIqrIPCQirgg8JCLiSIKKworICBBRl9CTFVFX1NUUklOR19DSEFLTUFfVE9QCisgICAgIvCRhIMg8JGEhSDwkYSJIPCRhJkg8JGElyIKKyAgQUZfQkxVRV9TVFJJTkdfQ0hBS01BX0JPVFRPTQorICAgICLwkYSFIPCRhJsg8JGEnSDwkYSXIPCRhJMiCisgIEFGX0JMVUVfU1RSSU5HX0NIQUtNQV9ERVNDRU5ERVIKKyAgICAi8JGElvCRhLPwkYSiIPCRhJjwkYSz8JGEoiDwkYSZ8JGEs/CRhKIg8JGEpPCRhLPwkYSiIPCRhKXwkYSz8JGEoiIKKwogICBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMCiAgICAgIuGPhiDhjrsg4Y6sIOGPgyDhjqQg4Y+jIOGOpiDhj5UiCiAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0FTQ0VOREVSCkBAIC0xMTUsNiArMTY4LDIyIEBACiAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0RFU0NFTkRFUgogICAgICLhj7gg6q6QIOqtuSDqrbsiCiAKKyAgQUZfQkxVRV9TVFJJTkdfQ09QVElDX0NBUElUQUxfVE9QCisgICAgIuKyjCDiso4g4rKgIOKzniDisp4g4rKQIOKypCDis4oiCisgIEFGX0JMVUVfU1RSSU5HX0NPUFRJQ19DQVBJVEFMX0JPVFRPTQorICAgICLis5Ag4rOYIOKzniDiso4g4rKeIOKykCDis5wg4rKwIgorICBBRl9CTFVFX1NUUklOR19DT1BUSUNfU01BTExfVE9QCisgICAgIuKyjSDiso8g4rKhIOKznyDisp8g4rKRIOKypSDis4siCisgIEFGX0JMVUVfU1RSSU5HX0NPUFRJQ19TTUFMTF9CT1RUT00KKyAgICAi4rORIOKzmSDis58g4rKPIOKynyDispEg4rOdIOKzkiIKKworICBBRl9CTFVFX1NUUklOR19DWVBSSU9UX1RPUAorICAgICLwkKCNIPCQoJkg8JCgsyDwkKCxIPCQoIUg8JCgkyDwkKCjIPCQoKYiCisgIEFGX0JMVUVfU1RSSU5HX0NZUFJJT1RfQk9UVE9NCisgICAgIvCQoIMg8JCgiiDwkKCbIPCQoKMg8JCgsyDwkKC1IPCQoJAiCisgIEFGX0JMVUVfU1RSSU5HX0NZUFJJT1RfU01BTEwKKyAgICAi8JCgiCDwkKCPIPCQoJYiCisKICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9UT1AKICAgICAi0JEg0JIg0JUg0J8g0Jcg0J4g0KEg0K0iCiAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NCkBAIC0xMjQsNiArMTkzLDE1IEBACiAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMX0RFU0NFTkRFUgogICAgICLRgCDRgyDRhCIKIAorICBBRl9CTFVFX1NUUklOR19ERVNFUkVUX0NBUElUQUxfVE9QCisgICAgIvCQkIIg8JCQhCDwkJCLIPCQkJcg8JCQkSIKKyAgQUZfQkxVRV9TVFJJTkdfREVTRVJFVF9DQVBJVEFMX0JPVFRPTQorICAgICLwkJCAIPCQkIIg8JCQhCDwkJCXIPCQkJsiCisgIEFGX0JMVUVfU1RSSU5HX0RFU0VSRVRfU01BTExfVE9QCisgICAgIvCQkKog8JCQrCDwkJCzIPCQkL8g8JCQuSIKKyAgQUZfQkxVRV9TVFJJTkdfREVTRVJFVF9TTUFMTF9CT1RUT00KKyAgICAi8JCQqCDwkJCqIPCQkKwg8JCQvyDwkJGDIgorCiAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQkFTRQogICAgICLgpJUg4KSuIOCkhSDgpIYg4KSlIOCkpyDgpK0g4KS2IgogICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX1RPUApAQCAtMTY0LDYgKzI0MiwyMCBAQAogICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9ERVNDRU5ERVIKICAgICAi4rSEIOK0hSDitJQg4rSVIOK0gSDitIIg4rSYIOK0nSIKIAorICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX0NBUElUQUxfVE9QCisgICAgIuKwhSDisJQg4rCqIOKwhCDisIIg4rCKIOKwqyDisIsiCisgIEFGX0JMVUVfU1RSSU5HX0dMQUdPTElUSUNfQ0FQSVRBTF9CT1RUT00KKyAgICAi4rCFIOKwhCDisIIg4rCqIOKwniDisKEg4rCKIOKwlCIKKyAgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9UT1AKKyAgICAi4rC1IOKxhCDisZog4rC0IOKwsiDisLog4rGbIOKwuyIKKyAgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9CT1RUT00KKyAgICAi4rC1IOKwtCDisLIg4rGaIOKxjiDisZEg4rC6IOKxhCIKKworICBBRl9CTFVFX1NUUklOR19HT1RISUNfVE9QCisgICAgIvCQjLIg8JCMtiDwkI2AIPCQjYQg8JCMtCDwkI2DIPCQjYgg8JCMviIKKyAgQUZfQkxVRV9TVFJJTkdfR09USElDX0JPVFRPTQorICAgICLwkIy2IPCQjLQg8JCNgyDwkI2IIgorCiAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QCiAgICAgIs6TIM6SIM6VIM6WIM6YIM6fIM6pIgogICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX0JPVFRPTQpAQCAtMjA5LDYgKzMwMSwxNyBAQAogICBBRl9CTFVFX1NUUklOR19LQU5OQURBX0JPVFRPTQogICAgICLgsoUg4LKJIOCyjiDgsrIg4LOmIOCzqCDgs6wg4LOtIgogCisgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX1RPUAorICAgICLqpIUg6qSPIOqkgSDqpIsg6qSAIOqkjSIKKyAgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfQk9UVE9NCisgICAgIuqkiCDqpJgg6qSAIOqkjSDqpKIiCisgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0FTQ0VOREVSCisgICAgIuqkliDqpKEiCisgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0RFU0NFTkRFUgorICAgICLqpJEg6qScIOqkniIKKyAgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfTEFSR0VfREVTQ0VOREVSCisgICAgIuqkkeqkrCDqpJzqpK0g6qSU6qSsIgorCiAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1RPUAogICAgICLhnoEg4Z6RIOGekyDhnqcg4Z6pIOGetiIKICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1VCU0NSSVBUX1RPUApAQCAtMjc0LDYgKzM3NywxMSBAQAogICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0RFU0NFTkRFUgogICAgICLhtZYgyrgg4bWNIgogCisgIEFGX0JMVUVfU1RSSU5HX0xJU1VfVE9QCisgICAgIuqToSDqk6cg6pOxIOqTtiDqk6kg6pOaIOqTtSDqk7MiCisgIEFGX0JMVUVfU1RSSU5HX0xJU1VfQk9UVE9NCisgICAgIuqTlSDqk5wg6pOeIOqToSDqk5sg6pOiIOqTsyDqk7QiCisKICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUAogICAgICLgtJIg4LSfIOC0oCDgtLEg4LSaIOC0qiDgtJrgtY3gtJog4LSq4LWN4LSqIgogICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NCkBAIC0yODgsNiArMzk2LDU5IEBACiAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSCiAgICAgIuGAiSDhgIog4YClIOGAqSDhgKgg4YGCIOGBhSDhgYkiCiAKKyAgQUZfQkxVRV9TVFJJTkdfTktPX1RPUAorICAgICLfkCDfiSDfkiDfnyDfliDfnCDfoCDfpSIKKyAgQUZfQkxVRV9TVFJJTkdfTktPX0JPVFRPTQorICAgICLfgCDfmCDfoSDfoCDfpSIKKyAgQUZfQkxVRV9TVFJJTkdfTktPX1NNQUxMX1RPUAorICAgICLfjyDfmyDfiyIKKyAgQUZfQkxVRV9TVFJJTkdfTktPX1NNQUxMX0JPVFRPTQorICAgICLfjiDfjyDfmyDfiyIKKworICBBRl9CTFVFX1NUUklOR19PTF9DSElLSQorICAgICLhsZsg4bGcIOGxnSDhsaEg4bGiIOGxpSIKKworICBBRl9CTFVFX1NUUklOR19PTERfVFVSS0lDX1RPUAorICAgICLwkLCXIPCQsJgg8JCwpyIKKyAgQUZfQkxVRV9TVFJJTkdfT0xEX1RVUktJQ19CT1RUT00KKyAgICAi8JCwiSDwkLCXIPCQsKYg8JCwpyIKKworICBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX1RPUAorICAgICLwkJK+IPCQk40g8JCTkiDwkJOTIPCQkrsg8JCTgiDwkJK1IPCQk4YiCisgIEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfQk9UVE9NCisgICAgIvCQkrAg8JCTjSDwkJOCIPCQkr8g8JCTjiDwkJK5IgorICBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX0RFU0NFTkRFUgorICAgICLwkJK8IPCQkr0g8JCSviIKKyAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfVE9QCisgICAgIvCQk7Ug8JCTtiDwkJO6IPCQk7sg8JCTnSDwkJOjIPCQk6og8JCTriIKKyAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfQk9UVE9NCisgICAgIvCQk5gg8JCTmiDwkJOjIPCQk7Ug8JCToSDwkJOnIPCQk6og8JCTtiIKKyAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfQVNDRU5ERVIKKyAgICAi8JCTpCDwkJOmIPCQk7gg8JCTuSDwkJObIgorICBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9ERVNDRU5ERVIKKyAgICAi8JCTpCDwkJOlIPCQk6YiCisKKyAgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9UT1AKKyAgICAi8JCShiDwkJKJIPCQkpAg8JCSkiDwkJKYIPCQkpsg8JCSoCDwkJKjIgorICBBRl9CTFVFX1NUUklOR19PU01BTllBX0JPVFRPTQorICAgICLwkJKAIPCQkoIg8JCShiDwkJKIIPCQkoog8JCSkiDwkJKgIPCQkqkiCisKKyAgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9UT1AKKyAgICAi6qKcIOqiniDqorMg6qKCIOqiliDqopIg6qKdIOqimyIKKyAgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9CT1RUT00KKyAgICAi6qKCIOqiqCDqorog6qKkIOqijiIKKworICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1RPUAorICAgICLwkJGVIPCQkZkiCisgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fQk9UVE9NCisgICAgIvCQkZQg8JCRliDwkJGXIPCQkbkg8JCRuyIKKyAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9ERVNDRU5ERVIKKyAgICAi8JCRnyDwkJGjIgorICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1NNQUxMX1RPUAorICAgICLwkJGxIPCQkbIg8JCRsyDwkJG0IPCQkbgg8JCRuiDwkJG8IgorICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1NNQUxMX0JPVFRPTQorICAgICLwkJG0IPCQkbsg8JCRuSIKKwogICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX1RPUAogICAgICLgtokg4LaaIOC2nSDgtrMg4La0IOC2uiDgtr0g4LeGIgogICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0JPVFRPTQpAQCAtMjk1LDYgKzQ1NiwxOCBAQAogICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUgogICAgICLgtq8g4LazIOC2iyDgtr0g4Lat4LeWIOC2reC3lCDgtrbgt5Qg4Lav4LeUIgogCisgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9UT1AKKyAgICAi4a6LIOGuniDhrq4g4a69IOGusCDhrogiCisgIEFGX0JMVUVfU1RSSU5HX1NVTkRBTkVTRV9CT1RUT00KKyAgICAi4a6EIOGulCDhrpUg4a6XIOGusCDhroYg4a6IIOGuiSIKKyAgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX0RFU0NFTkRFUgorICAgICLhrrwg4bOEIgorCisgIEFGX0JMVUVfU1RSSU5HX1RBSV9WSUVUX1RPUAorICAgICLqqoYg6qqUIOqqkiDqqpYg6qqrIgorICBBRl9CTFVFX1NUUklOR19UQUlfVklFVF9CT1RUT00KKyAgICAi6qqJIOqqqyDqqq4iCisKICAgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QCiAgICAgIuCuiSDgrpIg4K6TIOCusSDgrogg4K6VIOCumSDgrpoiCiAgIEFGX0JMVUVfU1RSSU5HX1RBTUlMX0JPVFRPTQpAQCAtMzIwLDYgKzQ5MywxNCBAQAogICBBRl9CTFVFX1NUUklOR19USEFJX0RJR0lUX1RPUAogICAgICLguZAg4LmRIOC5kyIKIAorICBBRl9CTFVFX1NUUklOR19USUZJTkFHSAorICAgICLitZQg4rWZIOK1myDitZ4g4rS1IOK0vCDitLkg4rWOIgorCisgIEFGX0JMVUVfU1RSSU5HX1ZBSV9UT1AKKyAgICAi6peNIOqYliDqmJkg6picIOqWnCDqlp0g6pSFIOqVoiIKKyAgQUZfQkxVRV9TVFJJTkdfVkFJX0JPVFRPTQorICAgICLql40g6piWIOqYmSDql54g6pSFIOqVoiDqlpwg6pSGIgorCiAKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSwogCkBAIC00ODUsNiArNjY2LDE0IEBACiAKIEFGX0JMVUVfU1RSSU5HU0VUX0VOVU0gQUZfQkxVRV9TVFJJTkdTRVRTX0FSUkFZIEFGX0JMVUVfU1RSSU5HU0VUX01BWF9MRU46CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfQURMTQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQURMQU1fQ0FQSVRBTF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19BRExBTV9DQVBJVEFMX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FETEFNX1NNQUxMX1RPUCwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQURMQU1fU01BTExfQk9UVE9NLCAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICBBRl9CTFVFX1NUUklOR1NFVF9BUkFCCiAgICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUwMSw2ICs2OTAsMTYgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9BVlNUCisgICAgeyBBRl9CTFVFX1NUUklOR19BVkVTVEFOX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVZFU1RBTl9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfQkFNVQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQkFNVU1fVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CisgICAgeyBBRl9CTFVFX1NUUklOR19CQU1VTV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0JFTkcKICAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfVE9QLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfSEVBRCwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KQEAgLTUxMCw2ICs3MDksMzUgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfQkFTRSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9CVUhECisgICAgeyBBRl9CTFVFX1NUUklOR19CVUhJRF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19CVUhJRF9MQVJHRSwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19CVUhJRF9TTUFMTCwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQlVISURfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0NBS00KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIQUtNQV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIQUtNQV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIQUtNQV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9DQU5TCisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX0JPVFRPTSwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TTUFMTF9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TTUFMTF9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU1VQU19UT1AsICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NVUFNfQk9UVE9NLCAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfQ0FSSQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FSSUFOX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0FSSUFOX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0NIRVIKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwsICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwsICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUyMCw2ICs3NDgsMjEgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9DT1BUCisgICAgeyBBRl9CTFVFX1NUUklOR19DT1BUSUNfQ0FQSVRBTF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DT1BUSUNfQ0FQSVRBTF9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DT1BUSUNfU01BTExfVE9QLCAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ09QVElDX1NNQUxMX0JPVFRPTSwgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0NQUlQKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUFJJT1RfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DWVBSSU9UX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lQUklPVF9TTUFMTCwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUFJJT1RfU01BTEwsICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0NZUkwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUzOSw2ICs3ODIsMTQgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfRFNSVAorICAgIHsgQUZfQkxVRV9TVFJJTkdfREVTRVJFVF9DQVBJVEFMX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0RFU0VSRVRfQ0FQSVRBTF9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19ERVNFUkVUX1NNQUxMX1RPUCwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19ERVNFUkVUX1NNQUxMX0JPVFRPTSwgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICBBRl9CTFVFX1NUUklOR1NFVF9FVEhJCiAgICAgeyBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTYzLDYgKzgxNCwxOSBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgIEFGX0JMVUVfU1RSSU5HU0VUX0dMQUcKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dMQUdPTElUSUNfQ0FQSVRBTF9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX0NBUElUQUxfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9UT1AsICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9CT1RUT00sICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfR09USAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR09USElDX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR09USElDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0dSRUsKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTU5OSwxMCArODYzLDE0IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQQotICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KLSAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICBBRl9CTFVFX1NUUklOR1NFVF9LQUxJCisgICAgeyBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfQk9UVE9NLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfQVNDRU5ERVIsICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfREVTQ0VOREVSLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfTEFSR0VfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVIKICAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX1RPUCwgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CkBAIC02MTksNiArODg3LDExIEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBTklOR19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBTwogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCwgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KQEAgLTY1OCw2ICs5MzEsMTEgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfTElTVQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTElTVV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xJU1VfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX01MWU0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BTEFZQUxBTV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BTEFZQUxBTV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTY3MSwyNSArOTQ5LDg5IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgIEFGX0JMVUVfU1RSSU5HU0VUX05LT08KKyAgICB7IEFGX0JMVUVfU1RSSU5HX05LT19UT1AsICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19OS09fQk9UVE9NLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTktPX1NNQUxMX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTktPX1NNQUxMX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgQUZfQkxVRV9TVFJJTkdTRVRfTk9ORQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAwIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9PTENLCisgICAgeyBBRl9CTFVFX1NUUklOR19PTF9DSElLSSwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfT0xfQ0hJS0ksIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfT1JLSAorICAgIHsgQUZfQkxVRV9TVFJJTkdfT0xEX1RVUktJQ19UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX09MRF9UVVJLSUNfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX09TR0UKKyAgICB7IEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NBR0VfQ0FQSVRBTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX1RPUCwgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0JPVFRPTSwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9BU0NFTkRFUiwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfREVTQ0VOREVSLCAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfT1NNQQorICAgIHsgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX1NBVVIKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NBVVJBU0hUUkFfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CisgICAgeyBBRl9CTFVFX1NUUklOR19TQVVSQVNIVFJBX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9TSEFXCisgICAgeyBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1RPUCwgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fQk9UVE9NLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9ERVNDRU5ERVIsICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1NNQUxMX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fU01BTExfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgQUZfQkxVRV9TVFJJTkdTRVRfU0lOSAogICAgIHsgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9TVU5ECisgICAgeyBBRl9CTFVFX1NUUklOR19TVU5EQU5FU0VfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CisgICAgeyBBRl9CTFVFX1NUUklOR19TVU5EQU5FU0VfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19TVU5EQU5FU0VfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKICAgQUZfQkxVRV9TVFJJTkdTRVRfVEFNTAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19UQU1JTF9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCisgIEFGX0JMVUVfU1RSSU5HU0VUX1RBVlQKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RBSV9WSUVUX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFJX1ZJRVRfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwogICBBRl9CTFVFX1NUUklOR1NFVF9URUxVCiAgICAgeyBBRl9CTFVFX1NUUklOR19URUxVR1VfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19URUxVR1VfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfVEZORworICAgIHsgQUZfQkxVRV9TVFJJTkdfVElGSU5BR0gsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX1RJRklOQUdILCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX1RIQUkKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQpAQCAtNzAxLDYgKzEwNDMsMTAgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RIQUlfRElHSVRfVE9QLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfVkFJSQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVkFJX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfVkFJX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKIApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmggYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaAppbmRleCBmNDcyMGVkLi41NmI1OTFhIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmJsdWUuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaApAQCAtNyw3ICs3LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzcsMTExICs3NywxODkgQEAKIAogICB0eXBlZGVmIGVudW0gIEFGX0JsdWVfU3RyaW5nXwogICB7Ci0gICAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX1RPUCA9IDAsCi0gICAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0JPVFRPTSA9IDE4LAotICAgIEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19KT0lOID0gMzMsCi0gICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fQ0FQSVRBTF9UT1AgPSAzNiwKLSAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX0JPVFRPTSA9IDYwLAotICAgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0FTQ0VOREVSID0gODQsCi0gICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfVE9QID0gMTA1LAotICAgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0JPVFRPTSA9IDEyOSwKLSAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9ERVNDRU5ERVIgPSAxNTMsCi0gICAgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9CQVNFID0gMTc3LAotICAgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfVE9QID0gMjA5LAotICAgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfSEVBRCA9IDIzNywKLSAgICBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMID0gMjY5LAotICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0FTQ0VOREVSID0gMzAxLAotICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMID0gMzMzLAotICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0RFU0NFTkRFUiA9IDM2NSwKLSAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX1RPUCA9IDM4MSwKLSAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX0JPVFRPTSA9IDQwNSwKLSAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTCA9IDQyOSwKLSAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTF9ERVNDRU5ERVIgPSA0NTMsCi0gICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CQVNFID0gNDYyLAotICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfVE9QID0gNDk0LAotICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfSEVBRCA9IDUyNiwKLSAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JPVFRPTSA9IDU1OCwKLSAgICBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19UT1AgPSA1NjYsCi0gICAgQUZfQkxVRV9TVFJJTkdfRVRISU9QSUNfQk9UVE9NID0gNTk4LAotICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9UT1AgPSA2MzAsCi0gICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0JPVFRPTSA9IDY2MiwKLSAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfQVNDRU5ERVIgPSA2OTQsCi0gICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0RFU0NFTkRFUiA9IDcyNiwKLSAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9UT1AgPSA3NTgsCi0gICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fQVNPTVRBVlJVTElfQk9UVE9NID0gNzkwLAotICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX1RPUCA9IDgyMiwKLSAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9CT1RUT00gPSA4NTQsCi0gICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQVNDRU5ERVIgPSA4ODYsCi0gICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfREVTQ0VOREVSID0gOTE4LAotICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QID0gOTUwLAotICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NID0gOTcxLAotICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0JFVEFfVE9QID0gOTg5LAotICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMID0gMTAwNywKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIgPSAxMDMxLAotICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX1RPUCA9IDEwNTUsCi0gICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQk9UVE9NID0gMTA4NywKLSAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9BU0NFTkRFUiA9IDExMTksCi0gICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfREVTQ0VOREVSID0gMTE2OSwKLSAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ESUdJVF9UT1AgPSAxMjAyLAotICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JBU0UgPSAxMjIyLAotICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0hFQUQgPSAxMjU0LAotICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX1RPUCA9IDEyODYsCi0gICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQk9UVE9NID0gMTMxOCwKLSAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9ESUdJVF9UT1AgPSAxMzUwLAotICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AgPSAxMzcwLAotICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19CT1RUT00gPSAxMzk0LAotICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIgPSAxNDEyLAotICAgIEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QID0gMTQyNywKLSAgICBBRl9CTFVFX1NUUklOR19LQU5OQURBX0JPVFRPTSA9IDE0NzEsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QID0gMTUwMywKLSAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TVUJTQ1JJUFRfVE9QID0gMTUyNywKLSAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9CT1RUT00gPSAxNTY3LAotICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0RFU0NFTkRFUiA9IDE1OTksCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfTEFSR0VfREVTQ0VOREVSID0gMTYzMywKLSAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBWElOR19UT1AgPSAxNzIwLAotICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NZTUJPTFNfV0FOSU5HX0JPVFRPTSA9IDE3MjgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCA9IDE3MzYsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSA9IDE3NjgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFPX0FTQ0VOREVSID0gMTgwMCwKLSAgICBBRl9CTFVFX1NUUklOR19MQU9fTEFSR0VfQVNDRU5ERVIgPSAxODE2LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBT19ERVNDRU5ERVIgPSAxODI4LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QID0gMTg1MiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX0JPVFRPTSA9IDE4NjgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfRl9UT1AgPSAxODg0LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX1RPUCA9IDE4OTgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfQk9UVE9NID0gMTkxNCwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIgPSAxOTMwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9UT1AgPSAxOTQwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9CT1RUT00gPSAxOTYwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfRl9UT1AgPSAxOTgwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTEwgPSAyMDAwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfREVTQ0VOREVSID0gMjAzNiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfVE9QID0gMjA1NiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfQk9UVE9NID0gMjA4NywKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0ZfVE9QID0gMjExNiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMID0gMjE0MiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0RFU0NFTkRFUiA9IDIxNjcsCi0gICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUCA9IDIxNzgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSA9IDIyMjIsCi0gICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9UT1AgPSAyMjU0LAotICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQk9UVE9NID0gMjI4NiwKLSAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0FTQ0VOREVSID0gMjMxOCwKLSAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0RFU0NFTkRFUiA9IDIzNDYsCi0gICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9UT1AgPSAyMzc4LAotICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfQk9UVE9NID0gMjQxMCwKLSAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUiA9IDI0NDIsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QID0gMjQ4NiwKLSAgICBBRl9CTFVFX1NUUklOR19UQU1JTF9CT1RUT00gPSAyNTE4LAotICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9UT1AgPSAyNTUwLAotICAgIEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00gPSAyNTc4LAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfVE9QID0gMjYwNiwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0JPVFRPTSA9IDI2MzAsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9BU0NFTkRFUiA9IDI2NTgsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9BU0NFTkRFUiA9IDI2NzAsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ERVNDRU5ERVIgPSAyNjgyLAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfREVTQ0VOREVSID0gMjY5OCwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0RJR0lUX1RPUCA9IDI3MDYsCi0gICAgYWZfYmx1ZV8xXzEgPSAyNzE3LAorICAgIEFGX0JMVUVfU1RSSU5HX0FETEFNX0NBUElUQUxfVE9QID0gMCwKKyAgICBBRl9CTFVFX1NUUklOR19BRExBTV9DQVBJVEFMX0JPVFRPTSA9IDMwLAorICAgIEFGX0JMVUVfU1RSSU5HX0FETEFNX1NNQUxMX1RPUCA9IDQwLAorICAgIEFGX0JMVUVfU1RSSU5HX0FETEFNX1NNQUxMX0JPVFRPTSA9IDY1LAorICAgIEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19UT1AgPSAxMDUsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0JPVFRPTSA9IDEyMywKKyAgICBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTiA9IDEzOCwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX1RPUCA9IDE0MSwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX0JPVFRPTSA9IDE2NSwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9BU0NFTkRFUiA9IDE4OSwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9UT1AgPSAyMTAsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfQk9UVE9NID0gMjM0LAorICAgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0RFU0NFTkRFUiA9IDI1OCwKKyAgICBBRl9CTFVFX1NUUklOR19BVkVTVEFOX1RPUCA9IDI4MiwKKyAgICBBRl9CTFVFX1NUUklOR19BVkVTVEFOX0JPVFRPTSA9IDMwMiwKKyAgICBBRl9CTFVFX1NUUklOR19CQU1VTV9UT1AgPSAzMTIsCisgICAgQUZfQkxVRV9TVFJJTkdfQkFNVU1fQk9UVE9NID0gMzQ0LAorICAgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfQkFTRSA9IDM3NiwKKyAgICBBRl9CTFVFX1NUUklOR19CRU5HQUxJX1RPUCA9IDQwOCwKKyAgICBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0hFQUQgPSA0MzYsCisgICAgQUZfQkxVRV9TVFJJTkdfQlVISURfVE9QID0gNDY4LAorICAgIEFGX0JMVUVfU1RSSU5HX0JVSElEX0xBUkdFID0gNDc2LAorICAgIEFGX0JMVUVfU1RSSU5HX0JVSElEX1NNQUxMID0gNDg4LAorICAgIEFGX0JMVUVfU1RSSU5HX0JVSElEX0JPVFRPTSA9IDUwNCwKKyAgICBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfVE9QID0gNTMyLAorICAgIEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19CT1RUT00gPSA1NjQsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0FOQURJQU5fU1lMTEFCSUNTX1NNQUxMX1RPUCA9IDU5NiwKKyAgICBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU01BTExfQk9UVE9NID0gNjI4LAorICAgIEFGX0JMVUVfU1RSSU5HX0NBTkFESUFOX1NZTExBQklDU19TVVBTX1RPUCA9IDY2MCwKKyAgICBBRl9CTFVFX1NUUklOR19DQU5BRElBTl9TWUxMQUJJQ1NfU1VQU19CT1RUT00gPSA2ODgsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0FSSUFOX1RPUCA9IDcyMCwKKyAgICBBRl9CTFVFX1NUUklOR19DQVJJQU5fQk9UVE9NID0gNzYwLAorICAgIEFGX0JMVUVfU1RSSU5HX0NIQUtNQV9UT1AgPSA3OTUsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0hBS01BX0JPVFRPTSA9IDgyMCwKKyAgICBBRl9CTFVFX1NUUklOR19DSEFLTUFfREVTQ0VOREVSID0gODQ1LAorICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwgPSA5MTAsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfQVNDRU5ERVIgPSA5NDIsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTEwgPSA5NzQsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfREVTQ0VOREVSID0gMTAwNiwKKyAgICBBRl9CTFVFX1NUUklOR19DT1BUSUNfQ0FQSVRBTF9UT1AgPSAxMDIyLAorICAgIEFGX0JMVUVfU1RSSU5HX0NPUFRJQ19DQVBJVEFMX0JPVFRPTSA9IDEwNTQsCisgICAgQUZfQkxVRV9TVFJJTkdfQ09QVElDX1NNQUxMX1RPUCA9IDEwODYsCisgICAgQUZfQkxVRV9TVFJJTkdfQ09QVElDX1NNQUxMX0JPVFRPTSA9IDExMTgsCisgICAgQUZfQkxVRV9TVFJJTkdfQ1lQUklPVF9UT1AgPSAxMTUwLAorICAgIEFGX0JMVUVfU1RSSU5HX0NZUFJJT1RfQk9UVE9NID0gMTE5MCwKKyAgICBBRl9CTFVFX1NUUklOR19DWVBSSU9UX1NNQUxMID0gMTIyNSwKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX1RPUCA9IDEyNDAsCisgICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9CT1RUT00gPSAxMjY0LAorICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMID0gMTI4OCwKKyAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTF9ERVNDRU5ERVIgPSAxMzEyLAorICAgIEFGX0JMVUVfU1RSSU5HX0RFU0VSRVRfQ0FQSVRBTF9UT1AgPSAxMzIxLAorICAgIEFGX0JMVUVfU1RSSU5HX0RFU0VSRVRfQ0FQSVRBTF9CT1RUT00gPSAxMzQ2LAorICAgIEFGX0JMVUVfU1RSSU5HX0RFU0VSRVRfU01BTExfVE9QID0gMTM3MSwKKyAgICBBRl9CTFVFX1NUUklOR19ERVNFUkVUX1NNQUxMX0JPVFRPTSA9IDEzOTYsCisgICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CQVNFID0gMTQyMSwKKyAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX1RPUCA9IDE0NTMsCisgICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9IRUFEID0gMTQ4NSwKKyAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JPVFRPTSA9IDE1MTcsCisgICAgQUZfQkxVRV9TVFJJTkdfRVRISU9QSUNfVE9QID0gMTUyNSwKKyAgICBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19CT1RUT00gPSAxNTU3LAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9UT1AgPSAxNTg5LAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9CT1RUT00gPSAxNjIxLAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9BU0NFTkRFUiA9IDE2NTMsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0RFU0NFTkRFUiA9IDE2ODUsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fQVNPTVRBVlJVTElfVE9QID0gMTcxNywKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9CT1RUT00gPSAxNzQ5LAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX1RPUCA9IDE3ODEsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQk9UVE9NID0gMTgxMywKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9BU0NFTkRFUiA9IDE4NDUsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfREVTQ0VOREVSID0gMTg3NywKKyAgICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX0NBUElUQUxfVE9QID0gMTkwOSwKKyAgICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX0NBUElUQUxfQk9UVE9NID0gMTk0MSwKKyAgICBBRl9CTFVFX1NUUklOR19HTEFHT0xJVElDX1NNQUxMX1RPUCA9IDE5NzMsCisgICAgQUZfQkxVRV9TVFJJTkdfR0xBR09MSVRJQ19TTUFMTF9CT1RUT00gPSAyMDA1LAorICAgIEFGX0JMVUVfU1RSSU5HX0dPVEhJQ19UT1AgPSAyMDM3LAorICAgIEFGX0JMVUVfU1RSSU5HX0dPVEhJQ19CT1RUT00gPSAyMDc3LAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QID0gMjA5NywKKyAgICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX0JPVFRPTSA9IDIxMTgsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AgPSAyMTM2LAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMID0gMjE1NCwKKyAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIgPSAyMTc4LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX1RPUCA9IDIyMDIsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQk9UVE9NID0gMjIzNCwKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9BU0NFTkRFUiA9IDIyNjYsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfREVTQ0VOREVSID0gMjMxNiwKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ESUdJVF9UT1AgPSAyMzQ5LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JBU0UgPSAyMzY5LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0hFQUQgPSAyNDAxLAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX1RPUCA9IDI0MzMsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQk9UVE9NID0gMjQ2NSwKKyAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9ESUdJVF9UT1AgPSAyNDk3LAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AgPSAyNTE3LAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19CT1RUT00gPSAyNTQxLAorICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIgPSAyNTU5LAorICAgIEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QID0gMjU3NCwKKyAgICBBRl9CTFVFX1NUUklOR19LQU5OQURBX0JPVFRPTSA9IDI2MTgsCisgICAgQUZfQkxVRV9TVFJJTkdfS0FZQUhfTElfVE9QID0gMjY1MCwKKyAgICBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9CT1RUT00gPSAyNjc0LAorICAgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0FTQ0VOREVSID0gMjY5NCwKKyAgICBBRl9CTFVFX1NUUklOR19LQVlBSF9MSV9ERVNDRU5ERVIgPSAyNzAyLAorICAgIEFGX0JMVUVfU1RSSU5HX0tBWUFIX0xJX0xBUkdFX0RFU0NFTkRFUiA9IDI3MTQsCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QID0gMjczNSwKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TVUJTQ1JJUFRfVE9QID0gMjc1OSwKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9CT1RUT00gPSAyNzk5LAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0RFU0NFTkRFUiA9IDI4MzEsCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfTEFSR0VfREVTQ0VOREVSID0gMjg2NSwKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBWElOR19UT1AgPSAyOTUyLAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NZTUJPTFNfV0FOSU5HX0JPVFRPTSA9IDI5NjAsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCA9IDI5NjgsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSA9IDMwMDAsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX0FTQ0VOREVSID0gMzAzMiwKKyAgICBBRl9CTFVFX1NUUklOR19MQU9fTEFSR0VfQVNDRU5ERVIgPSAzMDQ4LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBT19ERVNDRU5ERVIgPSAzMDYwLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QID0gMzA4NCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX0JPVFRPTSA9IDMxMDAsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfRl9UT1AgPSAzMTE2LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX1RPUCA9IDMxMzAsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfQk9UVE9NID0gMzE0NiwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9ERVNDRU5ERVIgPSAzMTYyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9UT1AgPSAzMTcyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9CT1RUT00gPSAzMTkyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfRl9UT1AgPSAzMjEyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTEwgPSAzMjMyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfREVTQ0VOREVSID0gMzI2OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfVE9QID0gMzI4OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX0NBUElUQUxfQk9UVE9NID0gMzMxOSwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0ZfVE9QID0gMzM0OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMID0gMzM3NCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0RFU0NFTkRFUiA9IDMzOTksCisgICAgQUZfQkxVRV9TVFJJTkdfTElTVV9UT1AgPSAzNDEwLAorICAgIEFGX0JMVUVfU1RSSU5HX0xJU1VfQk9UVE9NID0gMzQ0MiwKKyAgICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fVE9QID0gMzQ3NCwKKyAgICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NID0gMzUxOCwKKyAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX1RPUCA9IDM1NTAsCisgICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00gPSAzNTgyLAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQVNDRU5ERVIgPSAzNjE0LAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSID0gMzY0MiwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fVE9QID0gMzY3NCwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fQk9UVE9NID0gMzY5OCwKKyAgICBBRl9CTFVFX1NUUklOR19OS09fU01BTExfVE9QID0gMzcxMywKKyAgICBBRl9CTFVFX1NUUklOR19OS09fU01BTExfQk9UVE9NID0gMzcyMiwKKyAgICBBRl9CTFVFX1NUUklOR19PTF9DSElLSSA9IDM3MzQsCisgICAgQUZfQkxVRV9TVFJJTkdfT0xEX1RVUktJQ19UT1AgPSAzNzU4LAorICAgIEFGX0JMVUVfU1RSSU5HX09MRF9UVVJLSUNfQk9UVE9NID0gMzc3MywKKyAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9DQVBJVEFMX1RPUCA9IDM3OTMsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfQ0FQSVRBTF9CT1RUT00gPSAzODMzLAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX0NBUElUQUxfREVTQ0VOREVSID0gMzg2MywKKyAgICBBRl9CTFVFX1NUUklOR19PU0FHRV9TTUFMTF9UT1AgPSAzODc4LAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0JPVFRPTSA9IDM5MTgsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NBR0VfU01BTExfQVNDRU5ERVIgPSAzOTU4LAorICAgIEFGX0JMVUVfU1RSSU5HX09TQUdFX1NNQUxMX0RFU0NFTkRFUiA9IDM5ODMsCisgICAgQUZfQkxVRV9TVFJJTkdfT1NNQU5ZQV9UT1AgPSAzOTk4LAorICAgIEFGX0JMVUVfU1RSSU5HX09TTUFOWUFfQk9UVE9NID0gNDAzOCwKKyAgICBBRl9CTFVFX1NUUklOR19TQVVSQVNIVFJBX1RPUCA9IDQwNzgsCisgICAgQUZfQkxVRV9TVFJJTkdfU0FVUkFTSFRSQV9CT1RUT00gPSA0MTEwLAorICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fVE9QID0gNDEzMCwKKyAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX0JPVFRPTSA9IDQxNDAsCisgICAgQUZfQkxVRV9TVFJJTkdfU0hBVklBTl9ERVNDRU5ERVIgPSA0MTY1LAorICAgIEFGX0JMVUVfU1RSSU5HX1NIQVZJQU5fU01BTExfVE9QID0gNDE3NSwKKyAgICBBRl9CTFVFX1NUUklOR19TSEFWSUFOX1NNQUxMX0JPVFRPTSA9IDQyMTAsCisgICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9UT1AgPSA0MjI1LAorICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfQk9UVE9NID0gNDI1NywKKyAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUiA9IDQyODksCisgICAgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX1RPUCA9IDQzMzMsCisgICAgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX0JPVFRPTSA9IDQzNTcsCisgICAgQUZfQkxVRV9TVFJJTkdfU1VOREFORVNFX0RFU0NFTkRFUiA9IDQzODksCisgICAgQUZfQkxVRV9TVFJJTkdfVEFJX1ZJRVRfVE9QID0gNDM5NywKKyAgICBBRl9CTFVFX1NUUklOR19UQUlfVklFVF9CT1RUT00gPSA0NDE3LAorICAgIEFGX0JMVUVfU1RSSU5HX1RBTUlMX1RPUCA9IDQ0MjksCisgICAgQUZfQkxVRV9TVFJJTkdfVEFNSUxfQk9UVE9NID0gNDQ2MSwKKyAgICBBRl9CTFVFX1NUUklOR19URUxVR1VfVE9QID0gNDQ5MywKKyAgICBBRl9CTFVFX1NUUklOR19URUxVR1VfQk9UVE9NID0gNDUyMSwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX1RPUCA9IDQ1NDksCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9CT1RUT00gPSA0NTczLAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfQVNDRU5ERVIgPSA0NjAxLAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfQVNDRU5ERVIgPSA0NjEzLAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfREVTQ0VOREVSID0gNDYyNSwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0RFU0NFTkRFUiA9IDQ2NDEsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ESUdJVF9UT1AgPSA0NjQ5LAorICAgIEFGX0JMVUVfU1RSSU5HX1RJRklOQUdIID0gNDY2MSwKKyAgICBBRl9CTFVFX1NUUklOR19WQUlfVE9QID0gNDY5MywKKyAgICBBRl9CTFVFX1NUUklOR19WQUlfQk9UVE9NID0gNDcyNSwKKyAgICBhZl9ibHVlXzFfMSA9IDQ3NTYsCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKICAgICBBRl9CTFVFX1NUUklOR19DSktfVE9QID0gYWZfYmx1ZV8xXzEgKyAxLAogICAgIEFGX0JMVUVfU1RSSU5HX0NKS19CT1RUT00gPSBhZl9ibHVlXzFfMSArIDIwMywKQEAgLTI0MCwzNCArMzE4LDU5IEBACiAKICAgdHlwZWRlZiBlbnVtICBBRl9CbHVlX1N0cmluZ3NldF8KICAgewotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0FSQUIgPSAwLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0FSTU4gPSA0LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0JFTkcgPSAxMSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9DSEVSID0gMTYsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfQ1lSTCA9IDIzLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0RFVkEgPSAyOSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9FVEhJID0gMzUsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPUiA9IDM4LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dFT0sgPSA0MywKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9HUkVLID0gNTAsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfR1VKUiA9IDU3LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dVUlUgPSA2MywKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9IRUJSID0gNjksCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQSA9IDczLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVIgPSA3NiwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9LSE1TID0gODIsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFPID0gODUsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUTiA9IDkxLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVEIgPSA5OCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVRQID0gMTA1LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX01MWU0gPSAxMTIsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTVlNUiA9IDExNSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9OT05FID0gMTIwLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NJTkggPSAxMjEsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfVEFNTCA9IDEyNSwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9URUxVID0gMTI4LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RIQUkgPSAxMzEsCi0gICAgYWZfYmx1ZV8yXzEgPSAxMzksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQURMTSA9IDAsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQVJBQiA9IDUsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQVJNTiA9IDksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQVZTVCA9IDE2LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0JBTVUgPSAxOSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9CRU5HID0gMjIsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQlVIRCA9IDI3LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NBS00gPSAzMiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9DQU5TID0gMzYsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQ0FSSSA9IDQzLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NIRVIgPSA0NiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9DT1BUID0gNTMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQ1BSVCA9IDU4LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NZUkwgPSA2MywKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9ERVZBID0gNjksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfRFNSVCA9IDc1LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0VUSEkgPSA4MCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HRU9SID0gODMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPSyA9IDg4LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dMQUcgPSA5NSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HT1RIID0gMTAwLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dSRUsgPSAxMDMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfR1VKUiA9IDExMCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HVVJVID0gMTE2LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hFQlIgPSAxMjIsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfS0FMSSA9IDEyNiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9LSE1SID0gMTMyLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVMgPSAxMzgsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQSA9IDE0MSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9MQU8gPSAxNDQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUTiA9IDE1MCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVRCID0gMTU3LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVFAgPSAxNjQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTElTVSA9IDE3MSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9NTFlNID0gMTc0LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX01ZTVIgPSAxNzcsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTktPTyA9IDE4MiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9OT05FID0gMTg3LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX09MQ0sgPSAxODgsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfT1JLSCA9IDE5MSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9PU0dFID0gMTk0LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX09TTUEgPSAyMDIsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfU0FVUiA9IDIwNSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9TSEFXID0gMjA4LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NJTkggPSAyMTQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfU1VORCA9IDIxOCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9UQU1MID0gMjIyLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RBVlQgPSAyMjUsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEVMVSA9IDIyOCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9URk5HID0gMjMxLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RIQUkgPSAyMzQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVkFJSSA9IDI0MiwKKyAgICBhZl9ibHVlXzJfMSA9IDI0NSwKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSwogICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hBTkkgPSBhZl9ibHVlXzJfMSArIDAsCiAgICAgYWZfYmx1ZV8yXzFfMSA9IGFmX2JsdWVfMl8xICsgMiwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4gYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaGluCmluZGV4IDI2OGJjYmMuLjY4MjE0N2MgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4KKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmhpbgpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjamsuYyBiL3NyYy9hdXRvZml0L2FmY2prLmMKaW5kZXggZjE3MmE5Zi4uMjFiNmJmZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjamsuYworKysgYi9zcmMvYXV0b2ZpdC9hZmNqay5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIENKSyB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw5ICsxNiw5IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAgIC8qCi0gICAqICBUaGUgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIGFraXRvJ3MgYXV0b2hpbnQgcGF0Y2gsIGF2YWlsYWJsZSBoZXJlOgorICAgKiAgVGhlIGFsZ29yaXRobSBpcyBiYXNlZCBvbiBha2l0bydzIGF1dG9oaW50IHBhdGNoLCBhcmNoaXZlZCBhdAogICAgKgotICAgKiAgaHR0cDovL3d3dy5rZGUuZ3IuanAvfmFraXRvL3BhdGNoL2ZyZWV0eXBlMi8KKyAgICogIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA1MTIxOTE2MDQ1NC9odHRwOi8vd3d3LmtkZS5nci5qcDo4MC9+YWtpdG8vcGF0Y2gvZnJlZXR5cGUyLzIuMS43LwogICAgKgogICAgKi8KIApAQCAtMjksMTMgKzI5LDEzIEBACiAjaW5jbHVkZSAiYWZnbG9iYWwuaCIKICNpbmNsdWRlICJhZnBpYy5oIgogI2luY2x1ZGUgImFmbGF0aW4uaCIKKyNpbmNsdWRlICJhZmNqay5oIgogCiAKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSwogCiAjdW5kZWYgQUZfQ09ORklHX09QVElPTl9DSktfQkxVRV9IQU5JX1ZFUlQKIAotI2luY2x1ZGUgImFmY2prLmgiCiAjaW5jbHVkZSAiYWZlcnJvcnMuaCIKIAogCkBAIC0xMzk4LDkgKzEzOTgsOSBAQAogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfVkVSVF9TTkFQOwogCiAgICAgLyoKLSAgICAgKiAgV2UgYWRqdXN0IHN0ZW1zIHRvIGZ1bGwgcGl4ZWxzIG9ubHkgaWYgd2UgZG9uJ3QgdXNlIHRoZSBgbGlnaHQnIG1vZGUuCisgICAgICogIFdlIGFkanVzdCBzdGVtcyB0byBmdWxsIHBpeGVscyB1bmxlc3MgaW4gYGxpZ2h0JyBvciBgbGNkJyBtb2RlLgogICAgICAqLwotICAgIGlmICggbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCApCisgICAgaWYgKCBtb2RlICE9IEZUX1JFTkRFUl9NT0RFX0xJR0hUICYmIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTENEICkKICAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX1NURU1fQURKVVNUOwogCiAgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gKQpAQCAtMjI3MiwxMyArMjI3Miw3IEBACiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAvKiBhbmFseXplIGdseXBoIG91dGxpbmUgKi8KLSNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKLSAgICBpZiAoICggbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgJiYKLSAgICAgICAgICAgQUZfSElOVFNfRE9fV0FSUCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fAotICAgICAgICAgQUZfSElOVFNfRE9fSE9SSVpPTlRBTCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSNlbHNlCiAgICAgaWYgKCBBRl9ISU5UU19ET19IT1JJWk9OVEFMKCBoaW50cyApICkKLSNlbmRpZgogICAgIHsKICAgICAgIGVycm9yID0gYWZfY2prX2hpbnRzX2RldGVjdF9mZWF0dXJlcyggaGludHMsIEFGX0RJTUVOU0lPTl9IT1JaICk7CiAgICAgICBpZiAoIGVycm9yICkKQEAgLTIzMDQsOSArMjI5OCw5IEBACiAgICAgICB7CiAKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKLSAgICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnJlbmRlcl9tb2RlID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUICYmCi0gICAgICAgICAgICAgQUZfSElOVFNfRE9fV0FSUCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIG1ldHJpY3MtPnJvb3Quc2NhbGVyLnJlbmRlcl9tb2RlID09IEZUX1JFTkRFUl9NT0RFX05PUk1BTCAmJgorICAgICAgICAgICAgIEFGX0hJTlRTX0RPX1dBUlAoIGhpbnRzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgIHsKICAgICAgICAgICBBRl9XYXJwZXJSZWMgIHdhcnBlcjsKICAgICAgICAgICBGVF9GaXhlZCAgICAgIHNjYWxlOwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjamsuaCBiL3NyYy9hdXRvZml0L2FmY2prLmgKaW5kZXggODRmODkyZi4uZDIyOWMwYyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjamsuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmNqay5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIENKSyB3cml0aW5nIHN5c3RlbSAoc3BlY2lmaWNhdGlvbikuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmNvdmVyLmggYi9zcmMvYXV0b2ZpdC9hZmNvdmVyLmgKaW5kZXggMWIxOGM2Ni4uNmVlYjhmYyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjb3Zlci5oCisrKyBiL3NyYy9hdXRvZml0L2FmY292ZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBjb3ZlcmFnZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZkdW1teS5jIGIvc3JjL2F1dG9maXQvYWZkdW1teS5jCmluZGV4IDYxYzMyZGIuLmYzMGM1MTcgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmZHVtbXkuYworKysgYi9zcmMvYXV0b2ZpdC9hZmR1bW15LmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBBdXRvLWZpdHRlciBkdW1teSByb3V0aW5lcyB0byBiZSB1c2VkIGlmIG5vIGhpbnRpbmcgc2hvdWxkIGJlICAgICAgICAqLwogLyogICAgcGVyZm9ybWVkIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmZHVtbXkuaCBiL3NyYy9hdXRvZml0L2FmZHVtbXkuaAppbmRleCBlYmFhN2Q3Li5iMzgyYWNkIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmR1bW15LmgKKysrIGIvc3JjL2F1dG9maXQvYWZkdW1teS5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQXV0by1maXR0ZXIgZHVtbXkgcm91dGluZXMgdG8gYmUgdXNlZCBpZiBubyBoaW50aW5nIHNob3VsZCBiZSAgICAgICAgKi8KIC8qICAgIHBlcmZvcm1lZCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oIGIvc3JjL2F1dG9maXQvYWZlcnJvcnMuaAppbmRleCBkZGUxODJmLi5lNWRlNTQzIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oCisrKyBiL3NyYy9hdXRvZml0L2FmZXJyb3JzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0b2ZpdHRlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMgYi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jCmluZGV4IDg1YmVmMDAuLjNkMDljNTMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMKKysrIGIvc3JjL2F1dG9maXQvYWZnbG9iYWwuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcyAoYm9keSkuICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuaCBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmgKaW5kZXggZGU2MTQyZS4uNDg5ZWQ0NiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQXV0by1maXR0ZXIgcm91dGluZXMgdG8gY29tcHV0ZSBnbG9iYWwgaGludGluZyB2YWx1ZXMgICAgICAgICAgICAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMgYi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMKaW5kZXggZjFmZjBiYS4uMDY2NmRiYyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZoaW50cy5jCisrKyBiL3NyYy9hdXRvZml0L2FmaGludHMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzE0LDggKzMxNCwxMiBAQAogICAgIEFGX0RVTVAoKCAiVGFibGUgb2YgcG9pbnRzOlxuIiApKTsKIAogICAgIGlmICggaGludHMtPm51bV9wb2ludHMgKQorICAgIHsKICAgICAgIEFGX0RVTVAoKCAiICBpbmRleCAgaGVkZ2UgIGhzZWcgIHZlZGdlICB2c2VnICBmbGFncyAiCisgICAgICAgICAgICAgLyogIiAgWFhYWFggIFhYWFhYIFhYWFhYICBYWFhYWCBYWFhYWCAgWFhYWFhYIiAqLwogICAgICAgICAgICAgICAgICIgIHhvcmcgIHlvcmcgIHhzY2FsZSAgeXNjYWxlICAgeGZpdCAgICB5Zml0IiApKTsKKyAgICAgICAgICAgICAvKiAiIFhYWFhYIFhYWFhYIFhYWFguWFggWFhYWC5YWCBYWFhYLlhYIFhYWFguWFgiICovCisgICAgfQogICAgIGVsc2UKICAgICAgIEFGX0RVTVAoKCAiICAobm9uZSlcbiIgKSk7CiAKQEAgLTQyMCw5ICs0MjQsMTQgQEAKICAgICAgICAgICAgICAgICBkaW1lbnNpb24gPT0gQUZfRElNRU5TSU9OX0hPUlogPyAidmVydGljYWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImhvcml6b250YWwiICkpOwogICAgICAgaWYgKCBheGlzLT5udW1fc2VnbWVudHMgKQorICAgICAgewogICAgICAgICBBRl9EVU1QKCggIiAgaW5kZXggICBwb3MgICBkZWx0YSAgIGRpciAgIGZyb20gICB0byAiCisgICAgICAgICAgICAgICAvKiAiICBYWFhYWCAgWFhYWFggIFhYWFhYICBYWFhYWCAgWFhYWCAgWFhYWCIgKi8KICAgICAgICAgICAgICAgICAgICIgIGxpbmsgIHNlcmlmICBlZGdlIgorICAgICAgICAgICAgICAgLyogIiAgWFhYWCAgWFhYWFggIFhYWFgiICovCiAgICAgICAgICAgICAgICAgICAiICBoZWlnaHQgIGV4dHJhICAgICBmbGFnc1xuIiApKTsKKyAgICAgICAgICAgICAgIC8qICIgIFhYWFhYWCAgWFhYWFggIFhYWFhYWFhYWFhYIiAqLworICAgICAgfQogICAgICAgZWxzZQogICAgICAgICBBRl9EVU1QKCggIiAgKG5vbmUpXG4iICkpOwogCkBAIC01MDcsMTUgKzUxNiwxNSBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKICAgICBzZWcgICAgICA9ICZheGlzLT5zZWdtZW50c1tpZHhdOwotICAgICpvZmZzZXQgID0gKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogKSA/IHNlZy0+Zmlyc3QtPm94Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VnLT5maXJzdC0+b3k7CisgICAgKm9mZnNldCAgPSAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApID8gc2VnLT5maXJzdC0+ZngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWctPmZpcnN0LT5meTsKICAgICBpZiAoIHNlZy0+ZWRnZSApCiAgICAgICAqaXNfYmx1ZSA9IChGVF9Cb29sKSggc2VnLT5lZGdlLT5ibHVlX2VkZ2UgIT0gMCApOwogICAgIGVsc2UKICAgICAgICppc19ibHVlID0gRkFMU0U7CiAKICAgICBpZiAoICppc19ibHVlICkKLSAgICAgICpibHVlX29mZnNldCA9IHNlZy0+ZWRnZS0+Ymx1ZV9lZGdlLT5jdXI7CisgICAgICAqYmx1ZV9vZmZzZXQgPSBzZWctPmVkZ2UtPmJsdWVfZWRnZS0+b3JnOwogICAgIGVsc2UKICAgICAgICpibHVlX29mZnNldCA9IDA7CiAKQEAgLTU2NCw4ICs1NzMsMTIgQEAKICAgICAgICAgICAgICAgICAgIDEwLjAgKiBoaW50cy0+eV9zY2FsZSAvIDY1NTM2LjAgLyA2NC4wICkpOwogCiAgICAgICBpZiAoIGF4aXMtPm51bV9lZGdlcyApCisgICAgICB7CiAgICAgICAgIEFGX0RVTVAoKCAiICBpbmRleCAgICBwb3MgICAgIGRpciAgIGxpbmsgIHNlcmlmIgorICAgICAgICAgICAgICAgLyogIiAgWFhYWFggIFhYWFguWFggIFhYWFhYICBYWFhYICBYWFhYWCIgKi8KICAgICAgICAgICAgICAgICAgICIgIGJsdWUgICAgb3BvcyAgICAgcG9zICAgICAgIGZsYWdzXG4iICkpOworICAgICAgICAgICAgICAgLyogIiAgICBYICAgWFhYWC5YWCAgWFhYWC5YWCAgWFhYWFhYWFhYWFgiICovCisgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIEFGX0RVTVAoKCAiICAobm9uZSlcbiIgKSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmaGludHMuaCBiL3NyYy9hdXRvZml0L2FmaGludHMuaAppbmRleCAxNjYzOGIxLi4zMzI2ZWJjIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmhpbnRzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZoaW50cy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02Miw3ICs2Miw3IEBACiAgICAqCiAgICAqICBieSBEYXZpZCBUdXJuZXIgYW5kIFdlcm5lciBMZW1iZXJnCiAgICAqCi0gICAqICAgIGh0dHA6Ly93d3cudHVnLm9yZy9UVUdib2F0L0FydGljbGVzL3RiMjQtMy9sZW1iZXJnLnBkZgorICAgKiAgICBodHRwczovL3d3dy50dWcub3JnL1RVR2JvYXQvQXJ0aWNsZXMvdGIyNC0zL2xlbWJlcmcucGRmCiAgICAqCiAgICAqICB3aXRoIGFwcHJvcHJpYXRlIHVwZGF0ZXMuCiAgICAqCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmluZGljLmMgYi9zcmMvYXV0b2ZpdC9hZmluZGljLmMKaW5kZXggMDNjNjExYi4uZGZiZWE1ZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZpbmRpYy5jCisrKyBiL3NyYy9hdXRvZml0L2FmaW5kaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBJbmRpYyB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFJhaHVsIEJoYWxlcmFvIDxyYWh1bC5iaGFsZXJhb0ByZWRoYXQuY29tPiwgPGIucmFodWwucG1AZ21haWwuY29tPi4gICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTgsMTMgKzE4LDEzIEBACiAKICNpbmNsdWRlICJhZnR5cGVzLmgiCiAjaW5jbHVkZSAiYWZsYXRpbi5oIgorI2luY2x1ZGUgImFmY2prLmgiCiAKIAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKIAogI2luY2x1ZGUgImFmaW5kaWMuaCIKICNpbmNsdWRlICJhZmVycm9ycy5oIgotI2luY2x1ZGUgImFmY2prLmgiCiAKIAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZpbmRpYy5oIGIvc3JjL2F1dG9maXQvYWZpbmRpYy5oCmluZGV4IGVjOWUyNjMuLjU2ODg3MzggMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaW5kaWMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmluZGljLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBJbmRpYyB3cml0aW5nIHN5c3RlbSAgICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBSYWh1bCBCaGFsZXJhbyA8cmFodWwuYmhhbGVyYW9AcmVkaGF0LmNvbT4sIDxiLnJhaHVsLnBtQGdtYWlsLmNvbT4uICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4uYyBiL3NyYy9hdXRvZml0L2FmbGF0aW4uYwppbmRleCBiOTgzNDYwLi45ZjFiNTQwIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmMKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNjkwLDkgKzE2OTAsMTEgQEAKICAgICAgICAgICAgICAgICBpZiAoIHByZXZfbWF4X29uX2Nvb3JkID4gbWF4X29uX2Nvb3JkICkKICAgICAgICAgICAgICAgICAgIG1heF9vbl9jb29yZCA9IHByZXZfbWF4X29uX2Nvb3JkOwogCi0gICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5sYXN0ID0gcG9pbnQ7Ci0gICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5wb3MgID0gKEZUX1Nob3J0KSggKCBtaW5fcG9zICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wb3MgKSA+PiAxICk7CisgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5sYXN0ICA9IHBvaW50OworICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+cG9zICAgPSAoRlRfU2hvcnQpKCAoIG1pbl9wb3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wb3MgKSA+PiAxICk7CisgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5kZWx0YSA9IChGVF9TaG9ydCkoICggbWF4X3BvcyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX3BvcyApID4+IDEgKTsKIAogICAgICAgICAgICAgICAgIGlmICggKCBtaW5fZmxhZ3MgfCBtYXhfZmxhZ3MgKSAmIEFGX0ZMQUdfQ09OVFJPTCAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgICAoIG1heF9vbl9jb29yZCAtIG1pbl9vbl9jb29yZCApIDwgZmxhdF90aHJlc2hvbGQgKQpAQCAtMTcyMCw5ICsxNzIyLDExIEBACiAgICAgICAgICAgICAgICAgICBpZiAoIG1heF9wb3MgPiBwcmV2X21heF9wb3MgKQogICAgICAgICAgICAgICAgICAgICBwcmV2X21heF9wb3MgPSBtYXhfcG9zOwogCi0gICAgICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQtPmxhc3QgPSBwb2ludDsKLSAgICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+cG9zICA9IChGVF9TaG9ydCkoICggcHJldl9taW5fcG9zICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9tYXhfcG9zICkgPj4gMSApOworICAgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5sYXN0ICA9IHBvaW50OworICAgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5wb3MgICA9IChGVF9TaG9ydCkoICggcHJldl9taW5fcG9zICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfbWF4X3BvcyApID4+IDEgKTsKKyAgICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+ZGVsdGEgPSAoRlRfU2hvcnQpKCAoIHByZXZfbWF4X3BvcyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X21pbl9wb3MgKSA+PiAxICk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7CkBAIC0xNzMzLDggKzE3MzcsOSBAQAogICAgICAgICAgICAgICAgICAgaWYgKCBwcmV2X21heF9wb3MgPiBtYXhfcG9zICkKICAgICAgICAgICAgICAgICAgICAgbWF4X3BvcyA9IHByZXZfbWF4X3BvczsKIAotICAgICAgICAgICAgICAgICAgc2VnbWVudC0+bGFzdCA9IHBvaW50OwotICAgICAgICAgICAgICAgICAgc2VnbWVudC0+cG9zICA9IChGVF9TaG9ydCkoICggbWluX3BvcyArIG1heF9wb3MgKSA+PiAxICk7CisgICAgICAgICAgICAgICAgICBzZWdtZW50LT5sYXN0ICA9IHBvaW50OworICAgICAgICAgICAgICAgICAgc2VnbWVudC0+cG9zICAgPSAoRlRfU2hvcnQpKCAoIG1pbl9wb3MgKyBtYXhfcG9zICkgPj4gMSApOworICAgICAgICAgICAgICAgICAgc2VnbWVudC0+ZGVsdGEgPSAoRlRfU2hvcnQpKCAoIG1heF9wb3MgLSBtaW5fcG9zICkgPj4gMSApOwogCiAgICAgICAgICAgICAgICAgICBpZiAoICggbWluX2ZsYWdzIHwgbWF4X2ZsYWdzICkgJiBBRl9GTEFHX0NPTlRST0wgICAgICAmJgogICAgICAgICAgICAgICAgICAgICAgICAoIG1heF9vbl9jb29yZCAtIG1pbl9vbl9jb29yZCApIDwgZmxhdF90aHJlc2hvbGQgKQpAQCAtMjU3NSwyMyArMjU4MCwyMyBAQAogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfVkVSVF9TTkFQOwogCiAgICAgLyoKLSAgICAgKiAgV2UgYWRqdXN0IHN0ZW1zIHRvIGZ1bGwgcGl4ZWxzIG9ubHkgaWYgd2UgZG9uJ3QgdXNlIHRoZSBgbGlnaHQnIG1vZGUuCisgICAgICogIFdlIGFkanVzdCBzdGVtcyB0byBmdWxsIHBpeGVscyB1bmxlc3MgaW4gYGxpZ2h0JyBvciBgbGNkJyBtb2RlLgogICAgICAqLwotICAgIGlmICggbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCApCisgICAgaWYgKCBtb2RlICE9IEZUX1JFTkRFUl9NT0RFX0xJR0hUICYmIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTENEICkKICAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX1NURU1fQURKVVNUOwogCiAgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gKQogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfTU9OTzsKIAogICAgIC8qCi0gICAgICogIEluIGBsaWdodCcgaGludGluZyBtb2RlIHdlIGRpc2FibGUgaG9yaXpvbnRhbCBoaW50aW5nIGNvbXBsZXRlbHkuCisgICAgICogIEluIGBsaWdodCcgb3IgYGxjZCcgbW9kZSB3ZSBkaXNhYmxlIGhvcml6b250YWwgaGludGluZyBjb21wbGV0ZWx5LgogICAgICAqICBXZSBhbHNvIGRvIGl0IGlmIHRoZSBmYWNlIGlzIGl0YWxpYy4KICAgICAgKgogICAgICAqICBIb3dldmVyLCBpZiB3YXJwaW5nIGlzIGVuYWJsZWQgKHdoaWNoIG9ubHkgd29ya3MgaW4gYGxpZ2h0JyBoaW50aW5nCiAgICAgICogIG1vZGUpLCBhZHZhbmNlIHdpZHRocyBnZXQgYWRqdXN0ZWQsIHRvby4KICAgICAgKi8KLSAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICggZmFjZS0+c3R5bGVfZmxhZ3MgJiBGVF9TVFlMRV9GTEFHX0lUQUxJQyApICE9IDAgKQorICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCB8fAorICAgICAgICAgKCBmYWNlLT5zdHlsZV9mbGFncyAmIEZUX1NUWUxFX0ZMQUdfSVRBTElDICkgIT0gMCAgICAgICAgICApCiAgICAgICBzY2FsZXJfZmxhZ3MgfD0gQUZfU0NBTEVSX0ZMQUdfTk9fSE9SSVpPTlRBTDsKIAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgpAQCAtMzQ5MiwxMyArMzQ5Nyw3IEBACiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAvKiBhbmFseXplIGdseXBoIG91dGxpbmUgKi8KLSNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKLSAgICBpZiAoICggbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgJiYKLSAgICAgICAgICAgQUZfSElOVFNfRE9fV0FSUCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fAotICAgICAgICAgQUZfSElOVFNfRE9fSE9SSVpPTlRBTCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSNlbHNlCiAgICAgaWYgKCBBRl9ISU5UU19ET19IT1JJWk9OVEFMKCBoaW50cyApICkKLSNlbmRpZgogICAgIHsKICAgICAgIGF4aXMgID0gJm1ldHJpY3MtPmF4aXNbQUZfRElNRU5TSU9OX0hPUlpdOwogICAgICAgZXJyb3IgPSBhZl9sYXRpbl9oaW50c19kZXRlY3RfZmVhdHVyZXMoIGhpbnRzLApAQCAtMzUyOCw5ICszNTI3LDkgQEAKICAgICBmb3IgKCBkaW0gPSAwOyBkaW0gPCBBRl9ESU1FTlNJT05fTUFYOyBkaW0rKyApCiAgICAgewogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgotICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAmJgotICAgICAgICAgICBBRl9ISU5UU19ET19XQVJQKCBoaW50cyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBtZXRyaWNzLT5yb290LnNjYWxlci5yZW5kZXJfbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgJiYKKyAgICAgICAgICAgQUZfSElOVFNfRE9fV0FSUCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgIHsKICAgICAgICAgQUZfV2FycGVyUmVjICB3YXJwZXI7CiAgICAgICAgIEZUX0ZpeGVkICAgICAgc2NhbGU7CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmggYi9zcmMvYXV0b2ZpdC9hZmxhdGluLmgKaW5kZXggZDgwZTEyNS4uNDMyY2NjYyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbi5oCisrKyBiL3NyYy9hdXRvZml0L2FmbGF0aW4uaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtICAgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYyBiL3NyYy9hdXRvZml0L2FmbGF0aW4yLmMKaW5kZXggNzA0ODc1Ni4uNWM3MTM3OCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuYworKysgYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5jCkBAIC05LDcgKzksNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMyw2ICsyMyw5IEBACiAKICNpbmNsdWRlIEZUX0FEVkFOQ0VTX0gKIAorCisjaWZkZWYgRlRfT1BUSU9OX0FVVE9GSVQyCisKICNpbmNsdWRlICJhZmdsb2JhbC5oIgogI2luY2x1ZGUgImFmbGF0aW4uaCIKICNpbmNsdWRlICJhZmxhdGluMi5oIgpAQCAtMTU1NSwyMCArMTU1OCwyMCBAQAogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfVkVSVF9TTkFQOwogCiAgICAgLyoKLSAgICAgKiAgV2UgYWRqdXN0IHN0ZW1zIHRvIGZ1bGwgcGl4ZWxzIG9ubHkgaWYgd2UgZG9uJ3QgdXNlIHRoZSBgbGlnaHQnIG1vZGUuCisgICAgICogIFdlIGFkanVzdCBzdGVtcyB0byBmdWxsIHBpeGVscyB1bmxlc3MgaW4gYGxpZ2h0JyBvciBgbGNkJyBtb2RlLgogICAgICAqLwotICAgIGlmICggbW9kZSAhPSBGVF9SRU5ERVJfTU9ERV9MSUdIVCApCisgICAgaWYgKCBtb2RlICE9IEZUX1JFTkRFUl9NT0RFX0xJR0hUICYmIG1vZGUgIT0gRlRfUkVOREVSX01PREVfTENEICkKICAgICAgIG90aGVyX2ZsYWdzIHw9IEFGX0xBVElOX0hJTlRTX1NURU1fQURKVVNUOwogCiAgICAgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX01PTk8gKQogICAgICAgb3RoZXJfZmxhZ3MgfD0gQUZfTEFUSU5fSElOVFNfTU9OTzsKIAogICAgIC8qCi0gICAgICogIEluIGBsaWdodCcgaGludGluZyBtb2RlIHdlIGRpc2FibGUgaG9yaXpvbnRhbCBoaW50aW5nIGNvbXBsZXRlbHkuCisgICAgICogIEluIGBsaWdodCcgb3IgYGxjZCcgbW9kZSB3ZSBkaXNhYmxlIGhvcml6b250YWwgaGludGluZyBjb21wbGV0ZWx5LgogICAgICAqICBXZSBhbHNvIGRvIGl0IGlmIHRoZSBmYWNlIGlzIGl0YWxpYy4KICAgICAgKi8KLSAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICggZmFjZS0+c3R5bGVfZmxhZ3MgJiBGVF9TVFlMRV9GTEFHX0lUQUxJQyApICE9IDAgKQorICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCB8fCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRCB8fAorICAgICAgICAgKCBmYWNlLT5zdHlsZV9mbGFncyAmIEZUX1NUWUxFX0ZMQUdfSVRBTElDICkgIT0gMCAgICAgICAgICApCiAgICAgICBzY2FsZXJfZmxhZ3MgfD0gQUZfU0NBTEVSX0ZMQUdfTk9fSE9SSVpPTlRBTDsKIAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgpAQCAtMjMzNywxMyArMjM0MCw3IEBACiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAvKiBhbmFseXplIGdseXBoIG91dGxpbmUgKi8KLSNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKLSAgICBpZiAoICggbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgJiYKLSAgICAgICAgICAgQUZfSElOVFNfRE9fV0FSUCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fAotICAgICAgICAgQUZfSElOVFNfRE9fSE9SSVpPTlRBTCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSNlbHNlCiAgICAgaWYgKCBBRl9ISU5UU19ET19IT1JJWk9OVEFMKCBoaW50cyApICkKLSNlbmRpZgogICAgIHsKICAgICAgIGVycm9yID0gYWZfbGF0aW4yX2hpbnRzX2RldGVjdF9mZWF0dXJlcyggaGludHMsIEFGX0RJTUVOU0lPTl9IT1JaICk7CiAgICAgICBpZiAoIGVycm9yICkKQEAgLTIzNjMsOSArMjM2MCw5IEBACiAgICAgZm9yICggZGltID0gMDsgZGltIDwgQUZfRElNRU5TSU9OX01BWDsgZGltKysgKQogICAgIHsKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKLSAgICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9IT1JaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgJiYKLSAgICAgICAgICAgQUZfSElOVFNfRE9fV0FSUCggaGludHMgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgaWYgKCBkaW0gPT0gQUZfRElNRU5TSU9OX0hPUlogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgbWV0cmljcy0+cm9vdC5zY2FsZXIucmVuZGVyX21vZGUgPT0gRlRfUkVOREVSX01PREVfTk9STUFMICYmCisgICAgICAgICAgIEFGX0hJTlRTX0RPX1dBUlAoIGhpbnRzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICB7CiAgICAgICAgIEFGX1dhcnBlclJlYyAgd2FycGVyOwogICAgICAgICBGVF9GaXhlZCAgICAgIHNjYWxlOwpAQCAtMjQxOSw1ICsyNDE2LDEyIEBACiAgICAgKEFGX1dyaXRpbmdTeXN0ZW1fQXBwbHlIaW50c0Z1bmMpICBhZl9sYXRpbjJfaGludHNfYXBwbHkgICAgICAgICAgLyogc3R5bGVfaGludHNfYXBwbHkgICAgICovCiAgICkKIAorI2Vsc2UgLyogIUZUX09QVElPTl9BVVRPRklUMiAqLworCisgIC8qIEFOU0kgQyBkb2Vzbid0IGxpa2UgZW1wdHkgc291cmNlIGZpbGVzICovCisgIHR5cGVkZWYgaW50ICBfYWZfbGF0aW4yX2R1bW15OworCisjZW5kaWYgLyogIUZUX09QVElPTl9BVVRPRklUMiAqLworCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuaCBiL3NyYy9hdXRvZml0L2FmbGF0aW4yLmgKaW5kZXggMmQwYjE1NC4uMDEyOWRjNyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsYXRpbjIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oCkBAIC0xMCw3ICsxMCw3IEBACiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAgICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmMgYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jCmluZGV4IGZiOGVhM2MuLmE1NTU1MGIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmMKKysrIGIvc3JjL2F1dG9maXQvYWZsb2FkZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBnbHlwaCBsb2FkaW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtOTcsMTEgKzk3LDEzIEBACiAgICAgQUZfRmFjZUdsb2JhbHMgICAgICAgICBnbG9iYWxzID0gbG9hZGVyLT5nbG9iYWxzOwogICAgIEFGX1dyaXRpbmdTeXN0ZW1DbGFzcyAgd3JpdGluZ19zeXN0ZW1fY2xhc3M7CiAKKyAgICBGVF9TaXplX01ldHJpY3MqICBzaXplX21ldHJpY3MgPSAmZmFjZS0+c2l6ZS0+aW50ZXJuYWwtPmF1dG9oaW50X21ldHJpY3M7CisKICAgICBGVF9Qb3MgIHN0ZFZXID0gMDsKICAgICBGVF9Qb3MgIHN0ZEhXID0gMDsKIAotICAgIEZUX0Jvb2wgIHNpemVfY2hhbmdlZCA9IGZhY2UtPnNpemUtPm1ldHJpY3MueF9wcGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBnbG9iYWxzLT5zdGVtX2RhcmtlbmluZ19mb3JfcHBlbTsKKyAgICBGVF9Cb29sICBzaXplX2NoYW5nZWQgPSBzaXplX21ldHJpY3MtPnhfcHBlbSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscy0+c3RlbV9kYXJrZW5pbmdfZm9yX3BwZW07CiAKICAgICBGVF9GaXhlZCAgZW1fc2l6ZSAgPSBhZl9pbnRUb0ZpeGVkKCBmYWNlLT51bml0c19wZXJfRU0gKTsKICAgICBGVF9GaXhlZCAgZW1fcmF0aW8gPSBGVF9EaXZGaXgoIGFmX2ludFRvRml4ZWQoIDEwMDAgKSwgZW1fc2l6ZSApOwpAQCAtMTQ1LDExICsxNDcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZFZXICkgKTsKICAgICAgIGRhcmtlbl94ID0gRlRfRGl2Rml4KCBGVF9NdWxGaXgoIGRhcmtlbl9ieV9mb250X3VuaXRzX3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5zaXplLT5tZXRyaWNzLnhfc2NhbGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfbWV0cmljcy0+eF9zY2FsZSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtX3JhdGlvICk7CiAKICAgICAgIGdsb2JhbHMtPnN0YW5kYXJkX3ZlcnRpY2FsX3dpZHRoID0gc3RkVlc7Ci0gICAgICBnbG9iYWxzLT5zdGVtX2RhcmtlbmluZ19mb3JfcHBlbSA9IGZhY2UtPnNpemUtPm1ldHJpY3MueF9wcGVtOworICAgICAgZ2xvYmFscy0+c3RlbV9kYXJrZW5pbmdfZm9yX3BwZW0gPSBzaXplX21ldHJpY3MtPnhfcHBlbTsKICAgICAgIGdsb2JhbHMtPmRhcmtlbl94ICAgICAgICAgICAgICAgID0gYWZfZml4ZWRUb0ludCggZGFya2VuX3ggKTsKICAgICB9CiAKQEAgLTE2NCwxMSArMTY2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRIVyApICk7CiAgICAgICBkYXJrZW5feSA9IEZUX0RpdkZpeCggRlRfTXVsRml4KCBkYXJrZW5fYnlfZm9udF91bml0c195LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+c2l6ZS0+bWV0cmljcy55X3NjYWxlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbV9yYXRpbyApOwogCiAgICAgICBnbG9iYWxzLT5zdGFuZGFyZF9ob3Jpem9udGFsX3dpZHRoID0gc3RkSFc7Ci0gICAgICBnbG9iYWxzLT5zdGVtX2RhcmtlbmluZ19mb3JfcHBlbSAgID0gZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW07CisgICAgICBnbG9iYWxzLT5zdGVtX2RhcmtlbmluZ19mb3JfcHBlbSAgID0gc2l6ZV9tZXRyaWNzLT54X3BwZW07CiAgICAgICBnbG9iYWxzLT5kYXJrZW5feSAgICAgICAgICAgICAgICAgID0gYWZfZml4ZWRUb0ludCggZGFya2VuX3kgKTsKIAogICAgICAgLyoKQEAgLTIxNywxMCArMjE5LDExIEBACiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3I7CiAKLSAgICBGVF9TaXplICAgICAgICAgICBzaXplICAgICA9IGZhY2UtPnNpemU7Ci0gICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCAgICAgPSBmYWNlLT5nbHlwaDsKLSAgICBGVF9TbG90X0ludGVybmFsICBpbnRlcm5hbCA9IHNsb3QtPmludGVybmFsOwotICAgIEZUX0dseXBoTG9hZGVyICAgIGdsb2FkZXIgID0gaW50ZXJuYWwtPmxvYWRlcjsKKyAgICBGVF9TaXplICAgICAgICAgICBzaXplICAgICAgICAgID0gZmFjZS0+c2l6ZTsKKyAgICBGVF9TaXplX0ludGVybmFsICBzaXplX2ludGVybmFsID0gc2l6ZS0+aW50ZXJuYWw7CisgICAgRlRfR2x5cGhTbG90ICAgICAgc2xvdCAgICAgICAgICA9IGZhY2UtPmdseXBoOworICAgIEZUX1Nsb3RfSW50ZXJuYWwgIHNsb3RfaW50ZXJuYWwgPSBzbG90LT5pbnRlcm5hbDsKKyAgICBGVF9HbHlwaExvYWRlciAgICBnbG9hZGVyICAgICAgID0gc2xvdF9pbnRlcm5hbC0+bG9hZGVyOwogCiAgICAgQUZfR2x5cGhIaW50cyAgICAgICAgICBoaW50cyAgICAgICAgID0gbG9hZGVyLT5oaW50czsKICAgICBBRl9TY2FsZXJSZWMgICAgICAgICAgIHNjYWxlcjsKQEAgLTIzOSw2ICsyNDIsNDUgQEAKIAogICAgIEZUX1pFUk8oICZzY2FsZXIgKTsKIAorICAgIGlmICggIXNpemVfaW50ZXJuYWwtPmF1dG9oaW50X21ldHJpY3MueF9zY2FsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIHNpemVfaW50ZXJuYWwtPmF1dG9oaW50X21vZGUgIT0gRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICkKKyAgICB7CisgICAgICAvKiBzd2l0Y2hpbmcgYmV0d2VlbiBoaW50aW5nIG1vZGVzIHVzdWFsbHkgbWVhbnMgZGlmZmVyZW50IHNjYWxpbmcgKi8KKyAgICAgIC8qIHZhbHVlczsgdGhpcyBsYXRlciBvbiBlbmZvcmNlcyByZWNvbXB1dGF0aW9uIG9mIGV2ZXJ5dGhpbmcgICAgICAqLworICAgICAgLyogcmVsYXRlZCB0byB0aGUgY3VycmVudCBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgIHNpemVfaW50ZXJuYWwtPmF1dG9oaW50X21vZGUgICAgPSBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICk7CisgICAgICBzaXplX2ludGVybmFsLT5hdXRvaGludF9tZXRyaWNzID0gc2l6ZS0+bWV0cmljczsKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTCisgICAgICB7CisgICAgICAgIEZUX1NpemVfTWV0cmljcyogIHNpemVfbWV0cmljcyA9ICZzaXplX2ludGVybmFsLT5hdXRvaGludF9tZXRyaWNzOworCisKKyAgICAgICAgLyogc2V0IG1ldHJpY3MgdG8gaW50ZWdlciB2YWx1ZXMgYW5kIGFkanVzdCBzY2FsaW5nIGFjY29yZGluZ2x5OyAqLworICAgICAgICAvKiB0aGlzIGlzIHRoZSBzYW1lIHNldHVwIGFzIHdpdGggVHJ1ZVR5cGUgZm9udHMsIGNmLiBmdW5jdGlvbiAgICovCisgICAgICAgIC8qIGB0dF9zaXplX3Jlc2V0JyBpbiBmaWxlIGB0dG9ianMuYycgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgc2l6ZV9tZXRyaWNzLT5hc2NlbmRlciAgPSBGVF9QSVhfUk9VTkQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIGZhY2UtPmFzY2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgKSApOworICAgICAgICBzaXplX21ldHJpY3MtPmRlc2NlbmRlciA9IEZUX1BJWF9ST1VORCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZmFjZS0+ZGVzY2VuZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgKSApOworICAgICAgICBzaXplX21ldHJpY3MtPmhlaWdodCAgICA9IEZUX1BJWF9ST1VORCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZmFjZS0+aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgKSApOworCisgICAgICAgIHNpemVfbWV0cmljcy0+eF9zY2FsZSAgICAgPSBGVF9EaXZGaXgoIHNpemVfbWV0cmljcy0+eF9wcGVtIDw8IDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnVuaXRzX3Blcl9FTSApOworICAgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgICAgID0gRlRfRGl2Rml4KCBzaXplX21ldHJpY3MtPnlfcHBlbSA8PCA2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT51bml0c19wZXJfRU0gKTsKKyAgICAgICAgc2l6ZV9tZXRyaWNzLT5tYXhfYWR2YW5jZSA9IEZUX1BJWF9ST1VORCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBmYWNlLT5tYXhfYWR2YW5jZV93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnhfc2NhbGUgKSApOworICAgICAgfQorI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTICovCisgICAgfQorCiAgICAgLyoKICAgICAgKiAgVE9ETzogVGhpcyBjb2RlIGN1cnJlbnRseSBkb2Vzbid0IHN1cHBvcnQgZnJhY3Rpb25hbCBhZHZhbmNlIHdpZHRocywKICAgICAgKiAgaS5lLiwgcGxhY2luZyBoaW50ZWQgZ2x5cGhzIGF0IGFueXRoaW5nIG90aGVyIHRoYW4gaW50ZWdlcgpAQCAtMjQ5LDE2ICsyOTEsMTYgQEAKICAgICAgKiAgdmFsdWVzIG9mIHRoZSBzY2FsZXIgd291bGQgbmVlZCB0byBiZSBhZGp1c3RlZC4KICAgICAgKi8KICAgICBzY2FsZXIuZmFjZSAgICA9IGZhY2U7Ci0gICAgc2NhbGVyLnhfc2NhbGUgPSBzaXplLT5tZXRyaWNzLnhfc2NhbGU7CisgICAgc2NhbGVyLnhfc2NhbGUgPSBzaXplX2ludGVybmFsLT5hdXRvaGludF9tZXRyaWNzLnhfc2NhbGU7CiAgICAgc2NhbGVyLnhfZGVsdGEgPSAwOwotICAgIHNjYWxlci55X3NjYWxlID0gc2l6ZS0+bWV0cmljcy55X3NjYWxlOworICAgIHNjYWxlci55X3NjYWxlID0gc2l6ZV9pbnRlcm5hbC0+YXV0b2hpbnRfbWV0cmljcy55X3NjYWxlOwogICAgIHNjYWxlci55X2RlbHRhID0gMDsKIAogICAgIHNjYWxlci5yZW5kZXJfbW9kZSA9IEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKTsKICAgICBzY2FsZXIuZmxhZ3MgICAgICAgPSAwOwogCiAgICAgLyogbm90ZSB0aGF0IHRoZSBmYWxsYmFjayBzdHlsZSBjYW4ndCBiZSBjaGFuZ2VkIGFueW1vcmUgKi8KLSAgICAvKiBhZnRlciB0aGUgZmlyc3QgY2FsbCBvZiBgdGFfbG9hZGVyX2xvYWRfZ2x5cGgnICAgICAgICAqLworICAgIC8qIGFmdGVyIHRoZSBmaXJzdCBjYWxsIG9mIGBhZl9sb2FkZXJfbG9hZF9nbHlwaCcgICAgICAgICovCiAgICAgZXJyb3IgPSBhZl9sb2FkZXJfcmVzZXQoIGxvYWRlciwgbW9kdWxlLCBmYWNlICk7CiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CkBAIC0zNDYsMTQgKzM4OCwxNCBAQAogICAgICAgICAgICAgICFtb2R1bGUtPm5vX3N0ZW1fZGFya2VuaW5nICAgICAgICAgICAgKSApICkKICAgICAgIGFmX2xvYWRlcl9lbWJvbGRlbl9nbHlwaF9pbl9zbG90KCBsb2FkZXIsIGZhY2UsIHN0eWxlX21ldHJpY3MgKTsKIAotICAgIGxvYWRlci0+dHJhbnNmb3JtZWQgPSBpbnRlcm5hbC0+Z2x5cGhfdHJhbnNmb3JtZWQ7CisgICAgbG9hZGVyLT50cmFuc2Zvcm1lZCA9IHNsb3RfaW50ZXJuYWwtPmdseXBoX3RyYW5zZm9ybWVkOwogICAgIGlmICggbG9hZGVyLT50cmFuc2Zvcm1lZCApCiAgICAgewogICAgICAgRlRfTWF0cml4ICBpbnZlcnNlOwogCiAKLSAgICAgIGxvYWRlci0+dHJhbnNfbWF0cml4ID0gaW50ZXJuYWwtPmdseXBoX21hdHJpeDsKLSAgICAgIGxvYWRlci0+dHJhbnNfZGVsdGEgID0gaW50ZXJuYWwtPmdseXBoX2RlbHRhOworICAgICAgbG9hZGVyLT50cmFuc19tYXRyaXggPSBzbG90X2ludGVybmFsLT5nbHlwaF9tYXRyaXg7CisgICAgICBsb2FkZXItPnRyYW5zX2RlbHRhICA9IHNsb3RfaW50ZXJuYWwtPmdseXBoX2RlbHRhOwogCiAgICAgICBpbnZlcnNlID0gbG9hZGVyLT50cmFuc19tYXRyaXg7CiAgICAgICBpZiAoICFGVF9NYXRyaXhfSW52ZXJ0KCAmaW52ZXJzZSApICkKQEAgLTQ0MSwyMSArNDgzLDIzIEBACiAgICAgICAgICAgRlRfUG9zICBwcDJ4ID0gbG9hZGVyLT5wcDIueDsKIAogCi0gICAgICAgICAgbG9hZGVyLT5wcDEueCA9IEZUX1BJWF9ST1VORCggcHAxeCApOwotICAgICAgICAgIGxvYWRlci0+cHAyLnggPSBGVF9QSVhfUk9VTkQoIHBwMnggKTsKKyAgICAgICAgICBsb2FkZXItPnBwMS54ID0gRlRfUElYX1JPVU5EKCBwcDF4ICsgaGludHMtPnhtaW5fZGVsdGEgKTsKKyAgICAgICAgICBsb2FkZXItPnBwMi54ID0gRlRfUElYX1JPVU5EKCBwcDJ4ICsgaGludHMtPnhtYXhfZGVsdGEgKTsKIAogICAgICAgICAgIHNsb3QtPmxzYl9kZWx0YSA9IGxvYWRlci0+cHAxLnggLSBwcDF4OwogICAgICAgICAgIHNsb3QtPnJzYl9kZWx0YSA9IGxvYWRlci0+cHAyLnggLSBwcDJ4OwogICAgICAgICB9CiAgICAgICB9CisgICAgICAvKiBgbGlnaHQnIG1vZGUgdXNlcyBpbnRlZ2VyIGFkdmFuY2Ugd2lkdGhzICovCisgICAgICAvKiBidXQgc2V0cyBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YScgICAgICovCiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIEZUX1BvcyAgcHAxeCA9IGxvYWRlci0+cHAxLng7CiAgICAgICAgIEZUX1BvcyAgcHAyeCA9IGxvYWRlci0+cHAyLng7CiAKIAotICAgICAgICBsb2FkZXItPnBwMS54ID0gRlRfUElYX1JPVU5EKCBwcDF4ICsgaGludHMtPnhtaW5fZGVsdGEgKTsKLSAgICAgICAgbG9hZGVyLT5wcDIueCA9IEZUX1BJWF9ST1VORCggcHAyeCArIGhpbnRzLT54bWF4X2RlbHRhICk7CisgICAgICAgIGxvYWRlci0+cHAxLnggPSBGVF9QSVhfUk9VTkQoIHBwMXggKTsKKyAgICAgICAgbG9hZGVyLT5wcDIueCA9IEZUX1BJWF9ST1VORCggcHAyeCApOwogCiAgICAgICAgIHNsb3QtPmxzYl9kZWx0YSA9IGxvYWRlci0+cHAxLnggLSBwcDF4OwogICAgICAgICBzbG90LT5yc2JfZGVsdGEgPSBsb2FkZXItPnBwMi54IC0gcHAyeDsKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmggYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5oCmluZGV4IDI1NzhhYmUuLmQ0ZDcyZDEgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsb2FkZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBnbHlwaCBsb2FkaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuYyBiL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMKaW5kZXggOWQ3YmEyMi4uZGNhYTE3YSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuYworKysgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC01Niw3ICs1Niw3IEBACiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfQVVUT0hJTlRFUl9ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKIAogCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5oIGIvc3JjL2F1dG9maXQvYWZtb2R1bGUuaAppbmRleCAwNTcxZDE0Li41NmY2NGVhIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5oCisrKyBiL3NyYy9hdXRvZml0L2FmbW9kdWxlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgbW9kdWxlIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmcGljLmMgYi9zcmMvYXV0b2ZpdC9hZnBpYy5jCmluZGV4IDMxMjVlMDMuLmQ0OGQwMTYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmcGljLmMKKysrIGIvc3JjL2F1dG9maXQvYWZwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYXV0b2ZpdCBtb2R1bGUuICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZwaWMuaCBiL3NyYy9hdXRvZml0L2FmcGljLmgKaW5kZXggOGNkMzM5Mi4uMGM3MzQ1NiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZwaWMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBhdXRvZml0IG1vZHVsZS4gICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jIGIvc3JjL2F1dG9maXQvYWZyYW5nZXMuYwppbmRleCBmZGQyODAwLi4xMzU1YzVlIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jCisrKyBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgVW5pY29kZSBzY3JpcHQgcmFuZ2VzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTUyLDggKzUyLDIxIEBACiAgIC8qIG5vdCBiZSBhZmZlY3RlZCBieSBibHVlIHpvbmVzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBpcyBhICAgICAgICovCiAgIC8qIHNwYWNpbmcgb3Igbm8tc3BhY2luZyBnbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgLyogdGhlIGB0YV94eHh4X25vbmJhc2VfdW5pcmFuZ2VzJyByYW5nZXMgbXVzdCBiZSBzdHJpY3Qgc3Vic2V0cyAqLwotICAvKiBvZiB0aGUgY29ycmVzcG9uZGluZyBgdGFfeHh4eF91bmlyYW5nZXMnIHJhbmdlcyAgICAgICAgICAgICAgICovCisgIC8qIHRoZSBgYWZfeHh4eF9ub25iYXNlX3VuaXJhbmdlcycgcmFuZ2VzIG11c3QgYmUgc3RyaWN0IHN1YnNldHMgKi8KKyAgLyogb2YgdGhlIGNvcnJlc3BvbmRpbmcgYGFmX3h4eHhfdW5pcmFuZ2VzJyByYW5nZXMgICAgICAgICAgICAgICAqLworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9hZGxtX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxRTkwMCwgMHgxRTk1RiApLCAgIC8qIEFkbGFtICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2FkbG1fbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUQ5NDQsIDB4MUU5NEEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OwogCiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9hcmFiX3VuaXJhbmdlc1tdID0KQEAgLTEwNiw2ICsxMTksMzcgQEAKICAgfTsKIAogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfYXZzdF91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTBCMDAsICAweDEwQjNGICksICAvKiBBdmVzdGFuICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9hdnN0X25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwQjM5LCAgMHgxMEIzRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9iYW11X3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBNkEwLCAgIDB4QTZGRiApLCAgIC8qIEJhbXVtICovCisjaWYgMAorICAgIC8qIFRoZSBjaGFyYWN0ZXJzIGluIHRoZSBCYW11bSBzdXBwbGVtZW50IGFyZSBwaWN0b2dyYW1zLCAqLworICAgIC8qIG5vdCAoZGlyZWN0bHkpIHJlbGF0ZWQgdG8gdGhlIHN5bGxhYmljIEJhbXVtIHNjcmlwdCAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxNjgwMCwgMHgxNkEzRiApLCAgIC8qIEJhbXVtIFN1cHBsZW1lbnQgKi8KKyNlbmRpZgorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9iYW11X25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBNkYwLCAgMHhBNkYxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfYmVuZ191bmlyYW5nZXNbXSA9CiAgIHsKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5ODAsICAweDA5RkYgKSwgIC8qIEJlbmdhbGkgKi8KQEAgLTEyMyw2ICsxNjcsNTggQEAKICAgfTsKIAogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfYnVoZF91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDE3NDAsICAweDE3NUYgKSwgICAvKiBCdWhpZCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9idWhkX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxNzUyLCAgMHgxNzUzICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2FrbV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTExMDAsIDB4MTExNEYgKSwgICAvKiBDaGFrbWEgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2FrbV9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMTEwMCwgMHgxMTEwMiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMTEyNywgMHgxMTEzNCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2NhbnNfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxNDAwLCAgMHgxNjdGICksIC8qIFVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDE4QjAsICAweDE4RkYgKSwgLyogVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9jYW5zX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2FyaV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAyQTAsIDB4MTAyREYgKSwgICAvKiBDYXJpYW4gKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2FyaV9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKwogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2NoZXJfdW5pcmFuZ2VzW10gPQogICB7CiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxM0EwLCAgMHgxM0ZGICksICAvKiBDaGVyb2tlZSAgICAgICAgICAgICovCkBAIC0xMzYsNiArMjMyLDMxIEBACiAgIH07CiAKIAorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2NvcHRfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyQzgwLCAgMHgyQ0ZGICksICAgLyogQ29wdGljICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2NvcHRfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDRUYsICAweDJDRjEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9jcHJ0X3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDgwMCwgMHgxMDgzRiApLCAgIC8qIEN5cHJpb3QgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY3BydF9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKwogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2N5cmxfdW5pcmFuZ2VzW10gPQogICB7CiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNDAwLCAgMHgwNEZGICksICAvKiBDeXJpbGxpYyAgICAgICAgICAgICovCkBAIC0xODcsNiArMzA4LDE4IEBACiAgIH07CiAKIAorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2RzcnRfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwNDAwLCAweDEwNDRGICksICAvKiBEZXNlcmV0ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2RzcnRfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ldGhpX3VuaXJhbmdlc1tdID0KICAgewogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTIwMCwgIDB4MTM3RiApLCAgLyogRXRoaW9waWMgICAgICAgICAgICAqLwpAQCAtMjMzLDYgKzM2NiwzMiBAQAogICB9OwogCiAKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9nbGFnX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkMwMCwgIDB4MkM1RiApLCAgLyogR2xhZ29saXRpYyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxRTAwMCwgMHgxRTAyRiApLCAgLyogR2xhZ29saXRpYyBTdXBwbGVtZW50ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2dsYWdfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUUwMDAsIDB4MUUwMkYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9nb3RoX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDMzMCwgMHgxMDM0RiApLCAgIC8qIEdvdGhpYyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9nb3RoX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ3Jla191bmlyYW5nZXNbXSA9CiAgIHsKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDAzNzAsICAweDAzRkYgKSwgIC8qIEdyZWVrIGFuZCBDb3B0aWMgKi8KQEAgLTMwNSw2ICs0NjQsMTkgQEAKICAgfTsKIAogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfa2FsaV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE5MDAsICAweEE5MkYgKSwgICAvKiBLYXlhaCBMaSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9rYWxpX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBOTI2LCAgMHhBOTJEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfa25kYV91bmlyYW5nZXNbXSA9CiAgIHsKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDODAsICAweDBDRkYgKSwgIC8qIEthbm5hZGEgKi8KQEAgLTQ2Myw2ICs2MzUsMTggQEAKICAgfTsKIAogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGlzdV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE0RDAsICAweEE0RkYgKSwgICAgLyogTGlzdSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9saXN1X25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbWx5bV91bmlyYW5nZXNbXSA9CiAgIHsKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDBEMDAsICAweDBEN0YgKSwgIC8qIE1hbGF5YWxhbSAqLwpAQCAtNDgwLDI3ICs2NjQsNDAgQEAKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX215bXJfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwMDAsIDB4MTA5RiApLCAgICAvKiBNeWFubWFyICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4QTlFMCwgMHhBOUZGICksICAgIC8qIE15YW5tYXIgRXh0ZW5kZWQtQiAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBQTYwLCAweEFBN0YgKSwgICAgLyogTXlhbm1hciBFeHRlbmRlZC1BICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgIDAsICAgICAgMCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMDAwLCAgMHgxMDlGICksICAgIC8qIE15YW5tYXIgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTlFMCwgIDB4QTlGRiApLCAgICAvKiBNeWFubWFyIEV4dGVuZGVkLUIgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFBNjAsICAweEFBN0YgKSwgICAgLyogTXlhbm1hciBFeHRlbmRlZC1BICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX215bXJfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAyRCwgMHgxMDMwICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwMzIsIDB4MTAzNyApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDNBLCAweDEwM0EgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAzRCwgMHgxMDNFICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwNTgsIDB4MTA1OSApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDVFLCAweDEwNjAgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA3MSwgMHgxMDc0ICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwODIsIDB4MTA4MiApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDg1LCAweDEwODYgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA4RCwgMHgxMDhEICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweEE5RTUsIDB4QTlFNSApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBQTdDLCAweEFBN0MgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgMCwgICAgICAwICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwMkQsICAweDEwMzAgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwMzIsICAweDEwMzcgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwM0EsICAweDEwM0EgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwM0QsICAweDEwM0UgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwNTgsICAweDEwNTkgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwNUUsICAweDEwNjAgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwNzEsICAweDEwNzQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwODIsICAweDEwODIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwODUsICAweDEwODYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwOEQsICAweDEwOEQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE5RTUsICAweEE5RTUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFBN0MsICAweEFBN0MgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ua29vX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDdDMCwgIDB4MDdGRiApLCAgICAvKiBOJ0tvICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX25rb29fbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA3RUIsICAweDA3RjUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAKQEAgLTUxNSw2ICs3MTIsODAgQEAKICAgfTsKIAogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfb2xja191bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFDNTAsICAweDFDN0YgKSwgICAgLyogT2wgQ2hpa2kgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfb2xja19ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29ya2hfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwQzAwLCAweDEwQzRGICksICAgIC8qIE9sZCBUdXJraWMgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfb3JraF9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29zZ2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwNEIwLCAweDEwNEZGICksICAgIC8qIE9zYWdlICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29zZ2Vfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9vc21hX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDQ4MCwgMHgxMDRBRiApLCAgIC8qIE9zbWFueWEgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfb3NtYV9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3NhdXJfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBODgwLCAgMHhBOERGICksICAgLyogU2F1cmFzaHRyYSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zYXVyX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBODgwLCAgMHhBODgxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBOEI0LCAgMHhBOEM1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc2hhd191bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA0NTAsIDB4MTA0N0YgKSwgICAvKiBTaGF2aWFuICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3NoYXdfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zaW5oX3VuaXJhbmdlc1tdID0KICAgewogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ4MCwgIDB4MERGRiApLCAgLyogU2luaGFsYSAqLwpAQCAtNTI5LDYgKzgwMCwyMSBAQAogICB9OwogCiAKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zdW5kX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUI4MCwgIDB4MUJCRiApLCAvKiBTdW5kYW5lc2UgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUNDMCwgIDB4MUNDRiApLCAvKiBTdW5kYW5lc2UgU3VwcGxlbWVudCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zdW5kX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQjgwLCAgMHgxQjgyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQkExLCAgMHgxQkFEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGFtbF91bmlyYW5nZXNbXSA9CiAgIHsKICAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCODAsICAweDBCRkYgKSwgIC8qIFRhbWlsICovCkBAIC01NDQsNiArODMwLDIzIEBACiAgIH07CiAKIAorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RhdnRfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBQTgwLCAgMHhBQURGICksICAgLyogVGFpIFZpZXQgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGF2dF9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUFCMCwgIDB4QUFCMCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUFCMiwgIDB4QUFCNCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUFCNywgIDB4QUFCOCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUFCRSwgIDB4QUFCRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUFDMSwgIDB4QUFDMSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKwogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RlbHVfdW5pcmFuZ2VzW10gPQogICB7CiAgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzAwLCAgMHgwQzdGICksICAvKiBUZWx1Z3UgKi8KQEAgLTU3NSw2ICs4NzgsMzAgQEAKICAgfTsKIAogCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGZuZ191bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJEMzAsICAweDJEN0YgKSwgICAvKiBUaWZpbmFnaCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90Zm5nX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdmFpaV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE1MDAsICAweEE2M0YgKSwgICAvKiBWYWkgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdmFpaV9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKwogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xpbWJfdW5pcmFuZ2VzW10gPQpAQCAtNjEwLDIxICs5MzcsNiBAQAogICB9OwogCiAKLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zdW5kX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUI4MCwgIDB4MUJCRiApLCAgLyogU3VuZGFuZXNlICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFDQzAsICAweDFDQ0YgKSwgIC8qIFN1bmRhbmVzZSBTdXBwbGVtZW50ICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3N1bmRfbm9uYmFzZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFCODAsICAweDFCODIgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFCQTEsICAweDFCQUQgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQotICB9OwotCi0KICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zeWxvX3VuaXJhbmdlc1tdID0KICAgewogICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTgwMCwgIDB4QTgyRiApLCAgLyogU3lsb3RpIE5hZ3JpICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oIGIvc3JjL2F1dG9maXQvYWZyYW5nZXMuaAppbmRleCA3MmQ5ZWFhLi5iYTNiNWU3IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oCisrKyBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgVW5pY29kZSBzY3JpcHQgcmFuZ2VzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc2NyaXB0LmggYi9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oCmluZGV4IGM2NTZjNzguLjZhYzE5M2YgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc2NyaXB0LmgKKysrIGIvc3JjL2F1dG9maXQvYWZzY3JpcHQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBzY3JpcHRzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzAsNiArMzAsMTIgQEAKICAgLyogdXNlIGBIQl9TQ1JJUFRfSU5WQUxJRCcgYXMgdGhlIEhhcmZCdXp6IHNjcmlwdCBuYW1lIHRhZyBmb3IgICAgICAqLwogICAvKiB0aGVtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKKyAgU0NSSVBUKCBhZGxtLCBBRExNLAorICAgICAgICAgICJBZGxhbSIsCisgICAgICAgICAgSEJfU0NSSVBUX0FETEFNLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhGMFx4OUVceEE0XHg4QyBceEYwXHg5RVx4QTRceEFFIiApIC8qIPCepIwg8J6kriAqLworCiAgIFNDUklQVCggYXJhYiwgQVJBQiwKICAgICAgICAgICAiQXJhYmljIiwKICAgICAgICAgICBIQl9TQ1JJUFRfQVJBQklDLApAQCAtNDIsNiArNDgsMTggQEAKICAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIlx4RDVceEJEIFx4RDVceDhEIiApIC8qINW9INWNICovCiAKKyAgU0NSSVBUKCBhdnN0LCBBVlNULAorICAgICAgICAgICJBdmVzdGFuIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfQVZFU1RBTiwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RjBceDkwXHhBQ1x4OUEiICkgLyog8JCsmiAqLworCisgIFNDUklQVCggYmFtdSwgQkFNVSwKKyAgICAgICAgICAiQmFtdW0iLAorICAgICAgICAgIEhCX1NDUklQVF9CQU1VTSwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RUFceDlCXHg4MSBceEVBXHg5Qlx4QUYiICkgLyog6puBIOqbryAqLworCiAgIC8qIHRoZXJlIGFyZSBubyBzaW1wbGUgZm9ybXMgZm9yIGxldHRlcnM7IHdlIHRodXMgdXNlIHR3byBkaWdpdCBzaGFwZXMgKi8KICAgU0NSSVBUKCBiZW5nLCBCRU5HLAogICAgICAgICAgICJCZW5nYWxpIiwKQEAgLTQ5LDEyICs2Nyw0OCBAQAogICAgICAgICAgIEhJTlRJTkdfVE9QX1RPX0JPVFRPTSwKICAgICAgICAgICAiXHhFMFx4QTdceEE2IFx4RTBceEE3XHhBQSIgKSAvKiDgp6Yg4KeqICovCiAKKyAgU0NSSVBUKCBidWhkLCBCVUhELAorICAgICAgICAgICJCdWhpZCIsCisgICAgICAgICAgSEJfU0NSSVBUX0JVSElELAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMVx4OURceDhCIFx4RTFceDlEXHg4RiIgKSAvKiDhnYsg4Z2PICovCisKKyAgU0NSSVBUKCBjYWttLCBDQUtNLAorICAgICAgICAgICJDaGFrbWEiLAorICAgICAgICAgIEhCX1NDUklQVF9DSEFLTUEsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEYwXHg5MVx4ODRceEE0IFx4RjBceDkxXHg4NFx4ODkgXHhGMFx4OTFceDg0XHg5QiIgKSAvKiDwkYSkIPCRhIkg8JGEmyAqLworCisgIFNDUklQVCggY2FucywgQ0FOUywKKyAgICAgICAgICAiQ2FuYWRpYW4gU3lsbGFiaWNzIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfQ0FOQURJQU5fU1lMTEFCSUNTLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMVx4OTFceDhDIFx4RTFceDkzXHg5QSIgKSAvKiDhkYwg4ZOaICovCisKKyAgU0NSSVBUKCBjYXJpLCBDQVJJLAorICAgICAgICAgICJDYXJpYW4iLAorICAgICAgICAgIEhCX1NDUklQVF9DQVJJQU4sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEYwXHg5MFx4OEFceEFCIFx4RjBceDkwXHg4Qlx4ODkiICkgLyog8JCKqyDwkIuJICovCisKICAgU0NSSVBUKCBjaGVyLCBDSEVSLAogICAgICAgICAgICJDaGVyb2tlZSIsCiAgICAgICAgICAgSEJfU0NSSVBUX0NIRVJPS0VFLAogICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhFMVx4OEVceEE0IFx4RTFceDhGXHg4NSBceEVBXHhBRVx4OTUiICkgLyog4Y6kIOGPhSDqrpUgKi8KIAorICBTQ1JJUFQoIGNvcHQsIENPUFQsCisgICAgICAgICAgIkNvcHRpYyIsCisgICAgICAgICAgSEJfU0NSSVBUX0NPUFRJQywKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTJceEIyXHg5RSBceEUyXHhCMlx4OUYiICkgLyog4rKeIOKynyAqLworCisgIFNDUklQVCggY3BydCwgQ1BSVCwKKyAgICAgICAgICAiQ3lwcmlvdCIsCisgICAgICAgICAgSEJfU0NSSVBUX0NZUFJJT1QsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEYwXHg5MFx4QTBceDg1IFx4RjBceDkwXHhBMFx4QTMiICkgLyog8JCghSDwkKCjICovCisKICAgU0NSSVBUKCBjeXJsLCBDWVJMLAogICAgICAgICAgICJDeXJpbGxpYyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0NZUklMTElDLApAQCAtNjcsNiArMTIxLDEyIEBACiAgICAgICAgICAgSElOVElOR19UT1BfVE9fQk9UVE9NLAogICAgICAgICAgICJceEUwXHhBNFx4QTAgXHhFMFx4QTRceEI1IFx4RTBceEE0XHg5RiIgKSAvKiDgpKAg4KS1IOCknyAqLwogCisgIFNDUklQVCggZHNydCwgRFNSVCwKKyAgICAgICAgICAiRGVzZXJldCIsCisgICAgICAgICAgSEJfU0NSSVBUX0RFU0VSRVQsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEYwXHg5MFx4OTBceDg0IFx4RjBceDkwXHg5MFx4QUMiICkgLyog8JCQhCDwkJCsICovCisKICAgU0NSSVBUKCBldGhpLCBFVEhJLAogICAgICAgICAgICJFdGhpb3BpYyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0VUSElPUElDLApAQCAtODUsNiArMTQ1LDE4IEBACiAgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUxXHg4Mlx4QjYgXHhFMVx4ODJceEIxIFx4RTJceEI0XHg5OSIgKSAvKiDhgrYg4YKxIOK0mSAqLwogCisgIFNDUklQVCggZ2xhZywgR0xBRywKKyAgICAgICAgICAiR2xhZ29saXRpYyIsCisgICAgICAgICAgSEJfU0NSSVBUX0dMQUdPTElUSUMsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUyXHhCMFx4OTUgXHhFMlx4QjFceDg1IiApIC8qIOKwlSDisYUgKi8KKworICBTQ1JJUFQoIGdvdGgsIEdPVEgsCisgICAgICAgICAgIkdvdGhpYyIsCisgICAgICAgICAgSEJfU0NSSVBUX0dPVEhJQywKKyAgICAgICAgICBISU5USU5HX1RPUF9UT19CT1RUT00sCisgICAgICAgICAgIlx4RjBceDkwXHg4Q1x4QjQgXHhGMFx4OTBceDhDXHhCRSBceEYwXHg5MFx4OERceDgzIiApIC8qIPCQjLQg8JCMviDwkI2DICovCisKICAgU0NSSVBUKCBncmVrLCBHUkVLLAogICAgICAgICAgICJHcmVlayIsCiAgICAgICAgICAgSEJfU0NSSVBUX0dSRUVLLApAQCAtMTA5LDExICsxODEsMTEgQEAKICAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIlx4RDdceDlEIiApIC8qINedICovCiAKLSAgU0NSSVBUKCBrbmRhLCBLTkRBLAotICAgICAgICAgICJLYW5uYWRhIiwKLSAgICAgICAgICBIQl9TQ1JJUFRfS0FOTkFEQSwKKyAgU0NSSVBUKCBrYWxpLCBLQUxJLAorICAgICAgICAgICJLYXlhaCBMaSIsCisgICAgICAgICAgSEJfU0NSSVBUX0tBWUFIX0xJLAogICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKLSAgICAgICAgICAiXHhFMFx4QjNceEE2IFx4RTBceEIyXHhBQyIgKSAvKiDgs6Yg4LKsICovCisgICAgICAgICAgIlx4RUFceEE0XHg4RCBceEVBXHhBNFx4ODAiICkgLyog6qSNIOqkgCAqLwogCiAgIC8qIG9ubHkgZGlnaXQgemVybyBoYXMgYSBzaW1wbGUgc2hhcGUgaW4gdGhlIEtobWVyIHNjcmlwdCAqLwogICBTQ1JJUFQoIGtobXIsIEtITVIsCkBAIC0xMjgsNiArMjAwLDEyIEBACiAgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUxXHhBN1x4QTEgXHhFMVx4QTdceEFBIiApIC8qIOGnoSDhp6ogKi8KIAorICBTQ1JJUFQoIGtuZGEsIEtOREEsCisgICAgICAgICAgIkthbm5hZGEiLAorICAgICAgICAgIEhCX1NDUklQVF9LQU5OQURBLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMFx4QjNceEE2IFx4RTBceEIyXHhBQyIgKSAvKiDgs6Yg4LKsICovCisKICAgLyogb25seSBkaWdpdCB6ZXJvIGhhcyBhIHNpbXBsZSBzaGFwZSBpbiB0aGUgTGFvIHNjcmlwdCAqLwogICBTQ1JJUFQoIGxhbywgTEFPLAogICAgICAgICAgICJMYW8iLApAQCAtMTUzLDYgKzIzMSwxMiBAQAogICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhFMVx4QjVceDkyIFx4RTFceEI0XHhCQyBceEUyXHg4MVx4QjAiICkgLyog4bWSIOG0vCDigbAgKi8KIAorICBTQ1JJUFQoIGxpc3UsIExJU1UsCisgICAgICAgICAgIkxpc3UiLAorICAgICAgICAgIEhCX1NDUklQVF9MSVNVLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFQVx4OTNceEIzIiApIC8qIOqTsyAqLworCiAgIFNDUklQVCggbWx5bSwgTUxZTSwKICAgICAgICAgICAiTWFsYXlhbGFtIiwKICAgICAgICAgICBIQl9TQ1JJUFRfTUFMQVlBTEFNLApAQCAtMTY1LDE4ICsyNDksNjcgQEAKICAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIlx4RTFceDgwXHg5RCBceEUxXHg4MFx4ODQgXHhFMVx4ODBceDgyIiApIC8qIOGAnSDhgIQg4YCCICovCiAKKyAgU0NSSVBUKCBua29vLCBOS09PLAorICAgICAgICAgICJOJ0tvIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfTktPLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhERlx4OEIgXHhERlx4ODAiICkgLyog34sg34AgKi8KKwogICBTQ1JJUFQoIG5vbmUsIE5PTkUsCiAgICAgICAgICAgIm5vIHNjcmlwdCIsCiAgICAgICAgICAgSEJfU0NSSVBUX0lOVkFMSUQsCiAgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICIiICkKIAorICBTQ1JJUFQoIG9sY2ssIE9MQ0ssCisgICAgICAgICAgIk9sIENoaWtpIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfT0xfQ0hJS0ksCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUxXHhCMVx4OUIiICkgLyog4bGbICovCisKKyAgU0NSSVBUKCBvcmtoLCBPUktILAorICAgICAgICAgICJPbGQgVHVya2ljIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfT0xEX1RVUktJQywKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RjBceDkwXHhCMFx4OTciICkgLyog8JCwlyAqLworCisgIFNDUklQVCggb3NnZSwgT1NHRSwKKyAgICAgICAgICAiT3NhZ2UiLAorICAgICAgICAgIEhCX1NDUklQVF9PU0FHRSwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RjBceDkwXHg5M1x4ODIgXHhGMFx4OTBceDkzXHhBQSIgKSAvKiDwkJOCIPCQk6ogKi8KKworICBTQ1JJUFQoIG9zbWEsIE9TTUEsCisgICAgICAgICAgIk9zbWFueWEiLAorICAgICAgICAgIEhCX1NDUklQVF9PU01BTllBLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhGMFx4OTBceDkyXHg4NiBceEYwXHg5MFx4OTJceEEwIiApIC8qIPCQkoYg8JCSoCAqLworCisgIFNDUklQVCggc2F1ciwgU0FVUiwKKyAgICAgICAgICAiU2F1cmFzaHRyYSIsCisgICAgICAgICAgSEJfU0NSSVBUX1NBVVJBU0hUUkEsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEVBXHhBMlx4OUQgXHhFQVx4QTNceDkwIiApIC8qIOqinSDqo5AgKi8KKworICBTQ1JJUFQoIHNoYXcsIFNIQVcsCisgICAgICAgICAgIlNoYXZpYW4iLAorICAgICAgICAgIEhCX1NDUklQVF9TSEFWSUFOLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhGMFx4OTBceDkxXHhCNCIgKSAvKiDwkJG0ICovCisKICAgU0NSSVBUKCBzaW5oLCBTSU5ILAogICAgICAgICAgICJTaW5oYWxhIiwKICAgICAgICAgICBIQl9TQ1JJUFRfU0lOSEFMQSwKICAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIlx4RTBceEI2XHhBNyIgKSAvKiDgtqcgKi8KIAorICAvKiBvbmx5IGRpZ2l0IHplcm8gaGFzIGEgc2ltcGxlIChyb3VuZCkgc2hhcGUgaW4gdGhlIFN1bmRhbmVzZSBzY3JpcHQgKi8KKyAgU0NSSVBUKCBzdW5kLCBTVU5ELAorICAgICAgICAgICJTdW5kYW5lc2UiLAorICAgICAgICAgIEhCX1NDUklQVF9TVU5EQU5FU0UsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUxXHhBRVx4QjAiICkgLyog4a6wICovCisKICAgLyogb25seSBkaWdpdCB6ZXJvIGhhcyBhIHNpbXBsZSAocm91bmQpIHNoYXBlIGluIHRoZSBUYW1pbCBzY3JpcHQgKi8KICAgU0NSSVBUKCB0YW1sLCBUQU1MLAogICAgICAgICAgICJUYW1pbCIsCkBAIC0xODQsNiArMzE3LDEyIEBACiAgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUwXHhBRlx4QTYiICkgLyog4K+mICovCiAKKyAgU0NSSVBUKCB0YXZ0LCBUQVZULAorICAgICAgICAgICJUYWkgVmlldCIsCisgICAgICAgICAgSEJfU0NSSVBUX1RBSV9WSUVULAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFQVx4QUFceDkyIFx4RUFceEFBXHhBQiIgKSAvKiDqqpIg6qqrICovCisKICAgLyogdGhlcmUgYXJlIG5vIHNpbXBsZSBmb3JtcyBmb3IgbGV0dGVyczsgd2UgdGh1cyB1c2UgdHdvIGRpZ2l0IHNoYXBlcyAqLwogICBTQ1JJUFQoIHRlbHUsIFRFTFUsCiAgICAgICAgICAgIlRlbHVndSIsCkBAIC0xOTEsMTIgKzMzMCwyNCBAQAogICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhFMFx4QjFceEE2IFx4RTBceEIxXHhBNyIgKSAvKiDgsaYg4LGnICovCiAKKyAgU0NSSVBUKCB0Zm5nLCBURk5HLAorICAgICAgICAgICJUaWZpbmFnaCIsCisgICAgICAgICAgSEJfU0NSSVBUX1RJRklOQUdILAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMlx4QjVceDk0IiApIC8qIOK1lCAqLworCiAgIFNDUklQVCggdGhhaSwgVEhBSSwKICAgICAgICAgICAiVGhhaSIsCiAgICAgICAgICAgSEJfU0NSSVBUX1RIQUksCiAgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUwXHhCOFx4QjIgXHhFMFx4QjlceDg1IFx4RTBceEI5XHg5MCIgKSAvKiDguLIg4LmFIOC5kCAqLwogCisgIFNDUklQVCggdmFpaSwgVkFJSSwKKyAgICAgICAgICAiVmFpIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfVkFJLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFQVx4OThceDkzIFx4RUFceDk2XHg5QyBceEVBXHg5Nlx4QjQiICkgLyog6piTIOqWnCDqlrQgKi8KKwogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKIAogICBTQ1JJUFQoIGxpbWIsIExJTUIsCkBAIC0yMTEsMTIgKzM2Miw2IEBACiAgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJvIiApIC8qIFhYWCAqLwogCi0gIFNDUklQVCggc3VuZCwgU1VORCwKLSAgICAgICAgICAiU3VuZGFuZXNlIiwKLSAgICAgICAgICBIQl9TQ1JJUFRfU1VOREFORVNFLAotICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKLSAgICAgICAgICAibyIgKSAvKiBYWFggKi8KLQogICBTQ1JJUFQoIHN5bG8sIFNZTE8sCiAgICAgICAgICAgIlN5bG90aSBOYWdyaSIsCiAgICAgICAgICAgSEJfU0NSSVBUX1NZTE9USV9OQUdSSSwKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmMgYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5jCmluZGV4IGRhOTJmYWQuLmYzMDgyODEgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmMKKysrIGIvc3JjL2F1dG9maXQvYWZzaGFwZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoYm9keSkuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKKyNpbmNsdWRlIEZUX0FEVkFOQ0VTX0gKICNpbmNsdWRlICJhZmdsb2JhbC5oIgogI2luY2x1ZGUgImFmdHlwZXMuaCIKICNpbmNsdWRlICJhZnNoYXBlci5oIgpAQCAtMTAzLDEwICsxMDQsMTAgQEAKICAgewogICAgIGhiX2ZhY2VfdCogIGZhY2U7CiAKLSAgICBoYl9zZXRfdCogIGdzdWJfbG9va3VwczsgIC8qIEdTVUIgbG9va3VwcyBmb3IgYSBnaXZlbiBzY3JpcHQgKi8KLSAgICBoYl9zZXRfdCogIGdzdWJfZ2x5cGhzOyAgIC8qIGdseXBocyBjb3ZlcmVkIGJ5IEdTVUIgbG9va3VwcyAgKi8KLSAgICBoYl9zZXRfdCogIGdwb3NfbG9va3VwczsgIC8qIEdQT1MgbG9va3VwcyBmb3IgYSBnaXZlbiBzY3JpcHQgKi8KLSAgICBoYl9zZXRfdCogIGdwb3NfZ2x5cGhzOyAgIC8qIGdseXBocyBjb3ZlcmVkIGJ5IEdQT1MgbG9va3VwcyAgKi8KKyAgICBoYl9zZXRfdCogIGdzdWJfbG9va3VwcyA9IE5VTEw7IC8qIEdTVUIgbG9va3VwcyBmb3IgYSBnaXZlbiBzY3JpcHQgKi8KKyAgICBoYl9zZXRfdCogIGdzdWJfZ2x5cGhzICA9IE5VTEw7IC8qIGdseXBocyBjb3ZlcmVkIGJ5IEdTVUIgbG9va3VwcyAgKi8KKyAgICBoYl9zZXRfdCogIGdwb3NfbG9va3VwcyA9IE5VTEw7IC8qIEdQT1MgbG9va3VwcyBmb3IgYSBnaXZlbiBzY3JpcHQgKi8KKyAgICBoYl9zZXRfdCogIGdwb3NfZ2x5cGhzICA9IE5VTEw7IC8qIGdseXBocyBjb3ZlcmVkIGJ5IEdQT1MgbG9va3VwcyAgKi8KIAogICAgIGhiX3NjcmlwdF90ICAgICAgc2NyaXB0OwogICAgIGNvbnN0IGhiX3RhZ190KiAgY292ZXJhZ2VfdGFnczsKQEAgLTEyNiwxMSArMTI3LDYgQEAKIAogICAgIGZhY2UgPSBoYl9mb250X2dldF9mYWNlKCBnbG9iYWxzLT5oYl9mb250ICk7CiAKLSAgICBnc3ViX2xvb2t1cHMgPSBoYl9zZXRfY3JlYXRlKCk7Ci0gICAgZ3N1Yl9nbHlwaHMgID0gaGJfc2V0X2NyZWF0ZSgpOwotICAgIGdwb3NfbG9va3VwcyA9IGhiX3NldF9jcmVhdGUoKTsKLSAgICBncG9zX2dseXBocyAgPSBoYl9zZXRfY3JlYXRlKCk7Ci0KICAgICBjb3ZlcmFnZV90YWdzID0gY292ZXJhZ2VzW3N0eWxlX2NsYXNzLT5jb3ZlcmFnZV07CiAgICAgc2NyaXB0ICAgICAgICA9IHNjcmlwdHNbc3R5bGVfY2xhc3MtPnNjcmlwdF07CiAKQEAgLTE2Nyw2ICsxNjMsNyBAQAogICAgICAgICBzY3JpcHRfdGFnc1sxXSA9IEhCX1RBR19OT05FOwogICAgIH0KIAorICAgIGdzdWJfbG9va3VwcyA9IGhiX3NldF9jcmVhdGUoKTsKICAgICBoYl9vdF9sYXlvdXRfY29sbGVjdF9sb29rdXBzKCBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhCX09UX1RBR19HU1VCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF90YWdzLApAQCAtMTc3LDEzICsxNzQsNiBAQAogICAgIGlmICggaGJfc2V0X2lzX2VtcHR5KCBnc3ViX2xvb2t1cHMgKSApCiAgICAgICBnb3RvIEV4aXQ7IC8qIG5vdGhpbmcgdG8gZG8gKi8KIAotICAgIGhiX290X2xheW91dF9jb2xsZWN0X2xvb2t1cHMoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfT1RfVEFHX0dQT1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X3RhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3ZlcmFnZV90YWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb3NfbG9va3VwcyApOwotCiAgICAgRlRfVFJBQ0U0KCggIkdTVUIgbG9va3VwcyAoc3R5bGUgYCVzJyk6XG4iCiAgICAgICAgICAgICAgICAgIiAiLAogICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW3N0eWxlX2NsYXNzLT5zdHlsZV0gKSk7CkBAIC0xOTIsNiArMTgyLDcgQEAKICAgICBjb3VudCA9IDA7CiAjZW5kaWYKIAorICAgIGdzdWJfZ2x5cGhzID0gaGJfc2V0X2NyZWF0ZSgpOwogICAgIGZvciAoIGlkeCA9IEhCX1NFVF9WQUxVRV9JTlZBTElEOyBoYl9zZXRfbmV4dCggZ3N1Yl9sb29rdXBzLCAmaWR4ICk7ICkKICAgICB7CiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKQEAgLTIxOSwxMCArMjEwLDE5IEBACiAgICAgICAgICAgICAgICAgIiAiLAogICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW3N0eWxlX2NsYXNzLT5zdHlsZV0gKSk7CiAKKyAgICBncG9zX2xvb2t1cHMgPSBoYl9zZXRfY3JlYXRlKCk7CisgICAgaGJfb3RfbGF5b3V0X2NvbGxlY3RfbG9va3VwcyggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQl9PVF9UQUdfR1BPUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfdGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyYWdlX3RhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bvc19sb29rdXBzICk7CisKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogICAgIGNvdW50ID0gMDsKICNlbmRpZgogCisgICAgZ3Bvc19nbHlwaHMgPSBoYl9zZXRfY3JlYXRlKCk7CiAgICAgZm9yICggaWR4ID0gSEJfU0VUX1ZBTFVFX0lOVkFMSUQ7IGhiX3NldF9uZXh0KCBncG9zX2xvb2t1cHMsICZpZHggKTsgKQogICAgIHsKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZzaGFwZXIuaCBiL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmgKaW5kZXggOTE4NWQxOS4uN2VmZDlmNiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZzaGFwZXIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhhcmZCdXp6IGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIE9wZW5UeXBlIGZlYXR1cmVzIChzcGVjaWZpY2F0aW9uKS4gICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oIGIvc3JjL2F1dG9maXQvYWZzdHlsZXMuaAppbmRleCAzYWZhODM5Li5lMjY4OGIzIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oCisrKyBiL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgc3R5bGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTgzLDYgKzgzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFQgKQogCiAKKyAgU1RZTEUoIGFkbG1fZGZsdCwgQURMTV9ERkxULAorICAgICAgICAgIkFkbGFtIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfQURMTSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0FETE0sCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSggYXJhYl9kZmx0LCBBUkFCX0RGTFQsCiAgICAgICAgICAiQXJhYmljIGRlZmF1bHQgc3R5bGUiLAogICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCkBAIC05Nyw2ICsxMDQsMjAgQEAKICAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0FSTU4sCiAgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKIAorICBTVFlMRSggYXZzdF9kZmx0LCBBVlNUX0RGTFQsCisgICAgICAgICAiQXZlc3RhbiBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0FWU1QsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9BVlNULAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGJhbXVfZGZsdCwgQkFNVV9ERkxULAorICAgICAgICAgIkJhbXVtIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfQkFNVSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0JBTVUsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSggYmVuZ19kZmx0LCBCRU5HX0RGTFQsCiAgICAgICAgICAiQmVuZ2FsaSBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLApAQCAtMTA0LDYgKzEyNSwzNCBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfQkVORywKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCBidWhkX2RmbHQsIEJVSERfREZMVCwKKyAgICAgICAgICJCdWhpZCBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0JVSEQsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9CVUhELAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGNha21fZGZsdCwgQ0FLTV9ERkxULAorICAgICAgICAgIkNoYWttYSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0NBS00sCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9DQUtNLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGNhbnNfZGZsdCwgQ0FOU19ERkxULAorICAgICAgICAgIkNhbmFkaWFuIFN5bGxhYmljcyBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0NBTlMsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9DQU5TLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGNhcmlfZGZsdCwgQ0FSSV9ERkxULAorICAgICAgICAgIkNhcmlhbiBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0NBUkksCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9DQVJJLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIGNoZXJfZGZsdCwgQ0hFUl9ERkxULAogICAgICAgICAgIkNoZXJva2VlIGRlZmF1bHQgc3R5bGUiLAogICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCkBAIC0xMTEsNiArMTYwLDIwIEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9DSEVSLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKKyAgU1RZTEUoIGNvcHRfZGZsdCwgQ09QVF9ERkxULAorICAgICAgICAgIkNvcHRpYyBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0NPUFQsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9DT1BULAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGNwcnRfZGZsdCwgQ1BSVF9ERkxULAorICAgICAgICAgIkN5cHJpb3QgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9DUFJULAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfQ1BSVCwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCiAgIE1FVEFfU1RZTEVfTEFUSU4oIGN5cmwsIENZUkwsICJDeXJpbGxpYyIgKQogCiAgIFNUWUxFKCBkZXZhX2RmbHQsIERFVkFfREZMVCwKQEAgLTEyMCw2ICsxODMsMTMgQEAKICAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0RFVkEsCiAgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKIAorICBTVFlMRSggZHNydF9kZmx0LCBEU1JUX0RGTFQsCisgICAgICAgICAiRGVzZXJldCBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0RTUlQsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9EU1JULAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIGV0aGlfZGZsdCwgRVRISV9ERkxULAogICAgICAgICAgIkV0aGlvcGljIGRlZmF1bHQgc3R5bGUiLAogICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCkBAIC0xNDEsNiArMjExLDIwIEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9HRU9LLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKKyAgU1RZTEUoIGdsYWdfZGZsdCwgR0xBR19ERkxULAorICAgICAgICAgIkdsYWdvbGl0aWMgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9HTEFHLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfR0xBRywKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBnb3RoX2RmbHQsIEdPVEhfREZMVCwKKyAgICAgICAgICJHb3RoaWMgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9HT1RILAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfR09USCwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCiAgIE1FVEFfU1RZTEVfTEFUSU4oIGdyZWssIEdSRUssICJHcmVlayIgKQogCiAgIFNUWUxFKCBndWpyX2RmbHQsIEdVSlJfREZMVCwKQEAgLTE2NCwxMSArMjQ4LDExIEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9IRUJSLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKLSAgU1RZTEUoIGtuZGFfZGZsdCwgS05EQV9ERkxULAotICAgICAgICAgIkthbm5hZGEgZGVmYXVsdCBzdHlsZSIsCisgIFNUWUxFKCBrYWxpX2RmbHQsIEtBTElfREZMVCwKKyAgICAgICAgICJLYXlhaCBMaSBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAotICAgICAgICAgQUZfU0NSSVBUX0tOREEsCi0gICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9LTkRBLAorICAgICAgICAgQUZfU0NSSVBUX0tBTEksCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9LQUxJLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKICAgU1RZTEUoIGtobXJfZGZsdCwgS0hNUl9ERkxULApAQCAtMTg1LDYgKzI2OSwxMyBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUywKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCBrbmRhX2RmbHQsIEtOREFfREZMVCwKKyAgICAgICAgICJLYW5uYWRhIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfS05EQSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tOREEsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSggbGFvX2RmbHQsIExBT19ERkxULAogICAgICAgICAgIkxhbyBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLApAQCAtMjE3LDYgKzMwOCwxMyBAQAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAjZW5kaWYKIAorICBTVFlMRSggbGlzdV9kZmx0LCBMSVNVX0RGTFQsCisgICAgICAgICAiTGlzdSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0xJU1UsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9MSVNVLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIG1seW1fZGZsdCwgTUxZTV9ERkxULAogICAgICAgICAgIk1hbGF5YWxhbSBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLApAQCAtMjMxLDYgKzMyOSwxMyBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfTVlNUiwKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCBua29vX2RmbHQsIE5LT09fREZMVCwKKyAgICAgICAgICJOJ0tvIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfTktPTywKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX05LT08sCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSggbm9uZV9kZmx0LCBOT05FX0RGTFQsCiAgICAgICAgICAibm8gc3R5bGUiLAogICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fRFVNTVksCkBAIC0yMzgsNiArMzQzLDQ4IEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9OT05FLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKKyAgU1RZTEUoIG9sY2tfZGZsdCwgT0xDS19ERkxULAorICAgICAgICAgIk9sIENoaWtpIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfT0xDSywKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX09MQ0ssCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggb3JraF9kZmx0LCBPUktIX0RGTFQsCisgICAgICAgICAiT2xkIFR1cmtpYyBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX09SS0gsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9PUktILAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIG9zZ2VfZGZsdCwgT1NHRV9ERkxULAorICAgICAgICAgIk9zYWdlIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfT1NHRSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX09TR0UsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggb3NtYV9kZmx0LCBPU01BX0RGTFQsCisgICAgICAgICAiT3NtYW55YSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX09TTUEsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9PU01BLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIHNhdXJfZGZsdCwgU0FVUl9ERkxULAorICAgICAgICAgIlNhdXJhc2h0cmEgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9TQVVSLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfU0FVUiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBzaGF3X2RmbHQsIFNIQVdfREZMVCwKKyAgICAgICAgICJTaGF2aWFuIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfU0hBVywKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX1NIQVcsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSggc2luaF9kZmx0LCBTSU5IX0RGTFQsCiAgICAgICAgICAiU2luaGFsYSBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLApAQCAtMjQ1LDYgKzM5MiwxMyBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfU0lOSCwKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCBzdW5kX2RmbHQsIFNVTkRfREZMVCwKKyAgICAgICAgICJTdW5kYW5lc2UgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9TVU5ELAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfU1VORCwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCiAgIFNUWUxFKCB0YW1sX2RmbHQsIFRBTUxfREZMVCwKICAgICAgICAgICJUYW1pbCBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLApAQCAtMjUyLDYgKzQwNiwxMyBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEFNTCwKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCB0YXZ0X2RmbHQsIFRBVlRfREZMVCwKKyAgICAgICAgICJUYWkgVmlldCBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX1RBVlQsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9UQVZULAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIHRlbHVfZGZsdCwgVEVMVV9ERkxULAogICAgICAgICAgIlRlbHVndSBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLApAQCAtMjU5LDYgKzQyMCwxMyBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEVMVSwKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCB0Zm5nX2RmbHQsIFRGTkdfREZMVCwKKyAgICAgICAgICJUaWZpbmFnaCBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX1RGTkcsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9URk5HLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIHRoYWlfZGZsdCwgVEhBSV9ERkxULAogICAgICAgICAgIlRoYWkgZGVmYXVsdCBzdHlsZSIsCiAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKQEAgLTI2Niw2ICs0MzQsMTMgQEAKICAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RIQUksCiAgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKIAorICBTVFlMRSggdmFpaV9kZmx0LCBWQUlJX0RGTFQsCisgICAgICAgICAiVmFpIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfVkFJSSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX1ZBSUksCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKIAogICAvKiBubyBibHVlIHN0cmluZ3NldCBzdXBwb3J0IGZvciB0aGUgSW5kaWMgd3JpdGluZyBzeXN0ZW0geWV0ICovCkBAIC0yODAsNyArNDU1LDYgQEAKIAogICBTVFlMRV9ERUZBVUxUX0lORElDKCBsaW1iLCBMSU1CLCAiTGltYnUiICkKICAgU1RZTEVfREVGQVVMVF9JTkRJQyggb3J5YSwgT1JZQSwgIk9yaXlhIiApCi0gIFNUWUxFX0RFRkFVTFRfSU5ESUMoIHN1bmQsIFNVTkQsICJTdW5kYW5lc2UiICkKICAgU1RZTEVfREVGQVVMVF9JTkRJQyggc3lsbywgU1lMTywgIlN5bG90aSBOYWdyaSIgKQogICBTVFlMRV9ERUZBVUxUX0lORElDKCB0aWJ0LCBUSUJULCAiVGliZXRhbiIgKQogCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnR5cGVzLmggYi9zcmMvYXV0b2ZpdC9hZnR5cGVzLmgKaW5kZXggNzE4ZGFiNy4uYTUwMDEzNCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZ0eXBlcy5oCisrKyBiL3NyYy9hdXRvZml0L2FmdHlwZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciB0eXBlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZ3YXJwLmMgYi9zcmMvYXV0b2ZpdC9hZndhcnAuYwppbmRleCA0NGRkNDliLi4yYTc1ZWE3IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZndhcnAuYworKysgYi9zcmMvYXV0b2ZpdC9hZndhcnAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciB3YXJwaW5nIGFsZ29yaXRobSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtOTgsNyArOTgsNiBAQAogICAgICAgaWYgKCB4eDFtaW4gKyB3IDwgd2FycGVyLT54Mm1pbiApCiAgICAgICAgIHh4MW1pbiA9IHdhcnBlci0+eDJtaW4gLSB3OwogCi0gICAgICB4eDFtYXggPSB3YXJwZXItPngxbWF4OwogICAgICAgaWYgKCB4eDFtYXggKyB3ID4gd2FycGVyLT54Mm1heCApCiAgICAgICAgIHh4MW1heCA9IHdhcnBlci0+eDJtYXggLSB3OwogCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZndhcnAuaCBiL3NyYy9hdXRvZml0L2Fmd2FycC5oCmluZGV4IDJlODVjYmQuLjUyMGIxYmUgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmd2FycC5oCisrKyBiL3NyYy9hdXRvZml0L2Fmd2FycC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHdhcnBpbmcgYWxnb3JpdGhtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZndydHN5cy5oIGIvc3JjL2F1dG9maXQvYWZ3cnRzeXMuaAppbmRleCA4Njc0OWEyLi40Njc1ZjMyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZndydHN5cy5oCisrKyBiL3NyYy9hdXRvZml0L2Fmd3J0c3lzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgd3JpdGluZyBzeXN0ZW1zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2F1dG9maXQuYyBiL3NyYy9hdXRvZml0L2F1dG9maXQuYwppbmRleCA2MDA2MGM5Li5jMTYwNTE2IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hdXRvZml0LmMKKysrIGIvc3JjL2F1dG9maXQvYXV0b2ZpdC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIG1vZHVsZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOCwyOSArMTgsMjIgQEAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlICJhZnBpYy5jIgorCiAjaW5jbHVkZSAiYWZhbmdsZXMuYyIKICNpbmNsdWRlICJhZmJsdWUuYyIKKyNpbmNsdWRlICJhZmNqay5jIgorI2luY2x1ZGUgImFmZHVtbXkuYyIKICNpbmNsdWRlICJhZmdsb2JhbC5jIgogI2luY2x1ZGUgImFmaGludHMuYyIKLQotI2luY2x1ZGUgImFmcmFuZ2VzLmMiCi0KLSNpbmNsdWRlICJhZmR1bW15LmMiCi0jaW5jbHVkZSAiYWZsYXRpbi5jIgotI2lmZGVmIEZUX09QVElPTl9BVVRPRklUMgotI2luY2x1ZGUgImFmbGF0aW4yLmMiCi0jZW5kaWYKLSNpbmNsdWRlICJhZmNqay5jIgogI2luY2x1ZGUgImFmaW5kaWMuYyIKLQotI2luY2x1ZGUgImFmc2hhcGVyLmMiCi0KKyNpbmNsdWRlICJhZmxhdGluLmMiCisjaW5jbHVkZSAiYWZsYXRpbjIuYyIKICNpbmNsdWRlICJhZmxvYWRlci5jIgogI2luY2x1ZGUgImFmbW9kdWxlLmMiCi0KLSNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKKyNpbmNsdWRlICJhZnBpYy5jIgorI2luY2x1ZGUgImFmcmFuZ2VzLmMiCisjaW5jbHVkZSAiYWZzaGFwZXIuYyIKICNpbmNsdWRlICJhZndhcnAuYyIKLSNlbmRpZgorCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvbW9kdWxlLm1rIGIvc3JjL2F1dG9maXQvbW9kdWxlLm1rCmluZGV4IGM0ZTI0OWIuLmZmMDVmODMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L21vZHVsZS5taworKysgYi9zcmMvYXV0b2ZpdC9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAzLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvcnVsZXMubWsgYi9zcmMvYXV0b2ZpdC9ydWxlcy5tawppbmRleCBlYzRlMTMwLi43NTE3MWI0IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9ydWxlcy5taworKysgYi9zcmMvYXV0b2ZpdC9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDAzLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDMtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9KYW1maWxlIGIvc3JjL2Jhc2UvSmFtZmlsZQppbmRleCA5ZTlhOTFiLi4yYjQ3YjhhIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9KYW1maWxlCisrKyBiL3NyYy9iYXNlL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL2Jhc2UgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMjYsNiArMjYsNyBAQAogICAgICAgICAgICAgICAgZnRvYmpzCiAgICAgICAgICAgICAgICBmdG91dGxuCiAgICAgICAgICAgICAgICBmdHBpYworICAgICAgICAgICAgICAgZnRwc3Byb3AKICAgICAgICAgICAgICAgIGZ0cmZvcmsKICAgICAgICAgICAgICAgIGZ0c25hbWVzCiAgICAgICAgICAgICAgICBmdHN0cmVhbQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvYmFzZXBpYy5jIGIvc3JjL2Jhc2UvYmFzZXBpYy5jCmluZGV4IDU3ZmI4MTYuLmJjODA0MDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Jhc2VwaWMuYworKysgYi9zcmMvYmFzZS9iYXNlcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGJhc2UuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Jhc2VwaWMuaCBiL3NyYy9iYXNlL2Jhc2VwaWMuaAppbmRleCAyNThkNGNlLi40OTJkMWVkIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9iYXNlcGljLmgKKysrIGIvc3JjL2Jhc2UvYmFzZXBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBiYXNlLiAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGFkdmFuYy5jIGIvc3JjL2Jhc2UvZnRhZHZhbmMuYwppbmRleCAxNTU3NjA3Li4yMzBjODRkIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGFkdmFuYy5jCisrKyBiL3NyYy9iYXNlL2Z0YWR2YW5jLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUXVpY2sgY29tcHV0YXRpb24gb2YgYWR2YW5jZSB3aWR0aHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA4LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTExNiw5ICsxMTYsMTIgQEAKICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgIGZsYWdzLAogICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAqcGFkdmFuY2VzICkKICAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKwogICAgIEZUX0ZhY2VfR2V0QWR2YW5jZXNGdW5jICBmdW5jOwotICAgIEZUX1VJbnQgICAgICAgICAgICAgICAgICBudW0sIGVuZCwgbm47Ci0gICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisgICAgRlRfVUludCAgbnVtLCBlbmQsIG5uOworICAgIEZUX0ludCAgIGZhY3RvcjsKIAogCiAgICAgaWYgKCAhZmFjZSApCkBAIC0xNTIsMTYgKzE1NSwxNyBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKIAogICAgIGZsYWdzIHw9IChGVF9VSW50MzIpRlRfTE9BRF9BRFZBTkNFX09OTFk7CisgICAgZmFjdG9yID0gKCBmbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA/IDEgOiAxMDI0OwogICAgIGZvciAoIG5uID0gMDsgbm4gPCBjb3VudDsgbm4rKyApCiAgICAgewogICAgICAgZXJyb3IgPSBGVF9Mb2FkX0dseXBoKCBmYWNlLCBzdGFydCArIG5uLCBmbGFncyApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIGJyZWFrOwogCi0gICAgICAvKiBzY2FsZSBmcm9tIDI2LjYgdG8gMTYuMTYgKi8KKyAgICAgIC8qIHNjYWxlIGZyb20gMjYuNiB0byAxNi4xNiwgdW5sZXNzIE5PX1NDQUxFIHdhcyByZXF1ZXN0ZWQgKi8KICAgICAgIHBhZHZhbmNlc1tubl0gPSAoIGZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQotICAgICAgICAgICAgICAgICAgICAgID8gZmFjZS0+Z2x5cGgtPmFkdmFuY2UueSAqIDEwMjQKLSAgICAgICAgICAgICAgICAgICAgICA6IGZhY2UtPmdseXBoLT5hZHZhbmNlLnggKiAxMDI0OworICAgICAgICAgICAgICAgICAgICAgID8gZmFjZS0+Z2x5cGgtPmFkdmFuY2UueSAqIGZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgIDogZmFjZS0+Z2x5cGgtPmFkdmFuY2UueCAqIGZhY3RvcjsKICAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGFwaS5jIGIvc3JjL2Jhc2UvZnRhcGkuYwppbmRleCAxZTZjNzE4Li4zMmQ2ZTk1IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGFwaS5jCisrKyBiL3NyYy9iYXNlL2Z0YXBpLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM4LDcgKzM4LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gIC8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IEFQSSAqLworICAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IEFQSSAqLwogCiAgIEZUX0JBU0VfREVGKCB2b2lkICkKICAgRlRfTmV3X01lbW9yeV9TdHJlYW0oIEZUX0xpYnJhcnkgIGxpYnJhcnksCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGJhc2UuYyBiL3NyYy9iYXNlL2Z0YmFzZS5jCmluZGV4IDk5M2FjNzIuLmExYmRiYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YmFzZS5jCisrKyBiL3NyYy9iYXNlL2Z0YmFzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNpbmdsZSBvYmplY3QgbGlicmFyeSBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywyNiArMTcsMjQgQEAKIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLQogI2RlZmluZSAgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAogCi0jaW5jbHVkZSAiZnRwaWMuYyIKICNpbmNsdWRlICJiYXNlcGljLmMiCiAjaW5jbHVkZSAiZnRhZHZhbmMuYyIKICNpbmNsdWRlICJmdGNhbGMuYyIKICNpbmNsdWRlICJmdGRiZ21lbS5jIgogI2luY2x1ZGUgImZ0Z2xvYWRyLmMiCiAjaW5jbHVkZSAiZnRoYXNoLmMiCisjaW5jbHVkZSAiZnRtYWMuYyIKICNpbmNsdWRlICJmdG9ianMuYyIKICNpbmNsdWRlICJmdG91dGxuLmMiCisjaW5jbHVkZSAiZnRwaWMuYyIKKyNpbmNsdWRlICJmdHBzcHJvcC5jIgogI2luY2x1ZGUgImZ0cmZvcmsuYyIKICNpbmNsdWRlICJmdHNuYW1lcy5jIgogI2luY2x1ZGUgImZ0c3RyZWFtLmMiCiAjaW5jbHVkZSAiZnR0cmlnb24uYyIKICNpbmNsdWRlICJmdHV0aWwuYyIKIAotI2lmZGVmIEZUX01BQ0lOVE9TSAotI2luY2x1ZGUgImZ0bWFjLmMiCi0jZW5kaWYKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGJhc2UuaCBiL3NyYy9iYXNlL2Z0YmFzZS5oCmluZGV4IDIwNzIyODQuLjdlOGNmYWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YmFzZS5oCisrKyBiL3NyYy9iYXNlL2Z0YmFzZS5oCkBAIC0yLDkgKzIsOSBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBmdGJhc2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgZnVuY3Rpb25zIHVzZWQgaW4gYmFzZSBtb2R1bGUgKHNwZWNpZmljYXRpb24pLiAgKi8KKy8qICAgIFByaXZhdGUgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGBiYXNlJyBtb2R1bGUgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA4LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcsIGFuZCBzdXp1a2kgdG9zaGl5YS4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNyw2ICsyNyw4IEBACiBGVF9CRUdJTl9IRUFERVIKIAogCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFMKKwogICAvKiBNYWNPUyByZXNvdXJjZSBmb3JrIGNhbm5vdCBleGNlZWQgMTZNQiBhdCBsZWFzdCBmb3IgQ2FyYm9uIGNvZGU7ICovCiAgIC8qIHNlZSBodHRwczovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9lbi11cy9rYi8xMzA0MzcgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRlRfTUFDX1JGT1JLX01BWF9MRU4gIDB4MDBGRkZGRkZVTApAQCAtNjUsNiArNjcsOCBAQAogICBmdF9yYWNjZXNzX3J1bGVfYnlfZGFyd2luX3ZmcyggRlRfTGlicmFyeSBsaWJyYXJ5LCBGVF9VSW50ICBydWxlX2luZGV4ICk7CiAjZW5kaWYKIAorI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTICovCisKIAogRlRfRU5EX0hFQURFUgogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGJib3guYyBiL3NyYy9iYXNlL2Z0YmJveC5jCmluZGV4IDZlMTlkYTYuLjE1MWU4NWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YmJveC5jCisrKyBiL3NyYy9iYXNlL2Z0YmJveC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGJib3ggY29tcHV0YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGJkZi5jIGIvc3JjL2Jhc2UvZnRiZGYuYwppbmRleCA0MGYwY2EyLi5jNGVhNTAyIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGJkZi5jCisrKyBiL3NyYy9iYXNlL2Z0YmRmLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgQkRGLXNwZWNpZmljIHN0cmluZ3MgKGJvZHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Yml0bWFwLmMgYi9zcmMvYmFzZS9mdGJpdG1hcC5jCmluZGV4IDg4Yzg4YzQuLjkzZWZiMDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Yml0bWFwLmMKKysrIGIvc3JjL2Jhc2UvZnRiaXRtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgYml0bWFwcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTUzLDM4ICsxNTMsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHlwaXhlbHMgKQogICB7CiAgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOwotICAgIGludCAgICAgICAgICAgICBwaXRjaDsKLSAgICBpbnQgICAgICAgICAgICAgbmV3X3BpdGNoOworICAgIHVuc2lnbmVkIGludCAgICBwaXRjaDsKKyAgICB1bnNpZ25lZCBpbnQgICAgbmV3X3BpdGNoOwogICAgIEZUX1VJbnQgICAgICAgICBicHA7Ci0gICAgRlRfVUludCAgICAgICAgIGksIHdpZHRoLCBoZWlnaHQ7CisgICAgRlRfVUludCAgICAgICAgIHdpZHRoLCBoZWlnaHQ7CiAgICAgdW5zaWduZWQgY2hhciogIGJ1ZmZlciA9IE5VTEw7CiAKIAogICAgIHdpZHRoICA9IGJpdG1hcC0+d2lkdGg7CiAgICAgaGVpZ2h0ID0gYml0bWFwLT5yb3dzOwotICAgIHBpdGNoICA9IGJpdG1hcC0+cGl0Y2g7Ci0gICAgaWYgKCBwaXRjaCA8IDAgKQotICAgICAgcGl0Y2ggPSAtcGl0Y2g7CisgICAgcGl0Y2ggID0gKHVuc2lnbmVkIGludClGVF9BQlMoIGJpdG1hcC0+cGl0Y2ggKTsKIAogICAgIHN3aXRjaCAoIGJpdG1hcC0+cGl4ZWxfbW9kZSApCiAgICAgewogICAgIGNhc2UgRlRfUElYRUxfTU9ERV9NT05POgogICAgICAgYnBwICAgICAgID0gMTsKLSAgICAgIG5ld19waXRjaCA9IChpbnQpKCAoIHdpZHRoICsgeHBpeGVscyArIDcgKSA+PiAzICk7CisgICAgICBuZXdfcGl0Y2ggPSAoIHdpZHRoICsgeHBpeGVscyArIDcgKSA+PiAzOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVkyOgogICAgICAgYnBwICAgICAgID0gMjsKLSAgICAgIG5ld19waXRjaCA9IChpbnQpKCAoIHdpZHRoICsgeHBpeGVscyArIDMgKSA+PiAyICk7CisgICAgICBuZXdfcGl0Y2ggPSAoIHdpZHRoICsgeHBpeGVscyArIDMgKSA+PiAyOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVk0OgogICAgICAgYnBwICAgICAgID0gNDsKLSAgICAgIG5ld19waXRjaCA9IChpbnQpKCAoIHdpZHRoICsgeHBpeGVscyArIDEgKSA+PiAxICk7CisgICAgICBuZXdfcGl0Y2ggPSAoIHdpZHRoICsgeHBpeGVscyArIDEgKSA+PiAxOwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0dSQVk6CiAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0xDRDoKICAgICBjYXNlIEZUX1BJWEVMX01PREVfTENEX1Y6CiAgICAgICBicHAgICAgICAgPSA4OwotICAgICAgbmV3X3BpdGNoID0gKGludCkoIHdpZHRoICsgeHBpeGVscyApOworICAgICAgbmV3X3BpdGNoID0gd2lkdGggKyB4cGl4ZWxzOwogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKQEAgLTE5NCw3ICsxOTIsNyBAQAogICAgIGlmICggeXBpeGVscyA9PSAwICYmIG5ld19waXRjaCA8PSBwaXRjaCApCiAgICAgewogICAgICAgLyogemVybyB0aGUgcGFkZGluZyAqLwotICAgICAgRlRfVUludCAgYml0X3dpZHRoID0gKEZUX1VJbnQpcGl0Y2ggKiA4OworICAgICAgRlRfVUludCAgYml0X3dpZHRoID0gcGl0Y2ggKiA4OwogICAgICAgRlRfVUludCAgYml0X2xhc3QgID0gKCB3aWR0aCArIHhwaXhlbHMgKSAqIGJwcDsKIAogCkBAIC0yMjYsNyArMjI0LDcgQEAKICAgICB9CiAKICAgICAvKiBvdGhlcndpc2UgYWxsb2NhdGUgbmV3IGJ1ZmZlciAqLwotICAgIGlmICggRlRfUUFMTE9DX01VTFQoIGJ1ZmZlciwgbmV3X3BpdGNoLCBiaXRtYXAtPnJvd3MgKyB5cGl4ZWxzICkgKQorICAgIGlmICggRlRfUUFMTE9DX01VTFQoIGJ1ZmZlciwgYml0bWFwLT5yb3dzICsgeXBpeGVscywgbmV3X3BpdGNoICkgKQogICAgICAgcmV0dXJuIGVycm9yOwogCiAgICAgLyogbmV3IHJvd3MgZ2V0IGFkZGVkIGF0IHRoZSB0b3Agb2YgdGhlIGJpdG1hcCwgKi8KQEAgLTIzNSwzMSArMjMzLDU4IEBACiAgICAgewogICAgICAgRlRfVUludCAgbGVuID0gKCB3aWR0aCAqIGJwcCArIDcgKSA+PiAzOwogCisgICAgICB1bnNpZ25lZCBjaGFyKiAgaW4gID0gYml0bWFwLT5idWZmZXI7CisgICAgICB1bnNpZ25lZCBjaGFyKiAgb3V0ID0gYnVmZmVyOwogCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IGJpdG1hcC0+cm93czsgaSsrICkKLSAgICAgICAgRlRfTUVNX0NPUFkoIGJ1ZmZlciArIChGVF9VSW50KW5ld19waXRjaCAqICggeXBpeGVscyArIGkgKSwKLSAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC0+YnVmZmVyICsgKEZUX1VJbnQpcGl0Y2ggKiBpLAotICAgICAgICAgICAgICAgICAgICAgbGVuICk7CisgICAgICB1bnNpZ25lZCBjaGFyKiAgbGltaXQgPSBiaXRtYXAtPmJ1ZmZlciArIHBpdGNoICogYml0bWFwLT5yb3dzOworICAgICAgdW5zaWduZWQgaW50ICAgIGRlbHRhID0gbmV3X3BpdGNoIC0gcGl0Y2g7CisKKworICAgICAgRlRfTUVNX1pFUk8oIG91dCwgbmV3X3BpdGNoICogeXBpeGVscyApOworICAgICAgb3V0ICs9IG5ld19waXRjaCAqIHlwaXhlbHM7CisKKyAgICAgIHdoaWxlICggaW4gPCBsaW1pdCApCisgICAgICB7CisgICAgICAgIEZUX01FTV9DT1BZKCBvdXQsIGluLCBsZW4gKTsKKyAgICAgICAgaW4gICs9IHBpdGNoOworICAgICAgICBvdXQgKz0gcGl0Y2g7CisKKyAgICAgICAgRlRfTUVNX1pFUk8oIG91dCwgZGVsdGEgKTsKKyAgICAgICAgb3V0ICs9IGRlbHRhOworICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgRlRfVUludCAgbGVuID0gKCB3aWR0aCAqIGJwcCArIDcgKSA+PiAzOwogCisgICAgICB1bnNpZ25lZCBjaGFyKiAgaW4gID0gYml0bWFwLT5idWZmZXI7CisgICAgICB1bnNpZ25lZCBjaGFyKiAgb3V0ID0gYnVmZmVyOwogCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IGJpdG1hcC0+cm93czsgaSsrICkKLSAgICAgICAgRlRfTUVNX0NPUFkoIGJ1ZmZlciArIChGVF9VSW50KW5ld19waXRjaCAqIGksCi0gICAgICAgICAgICAgICAgICAgICBiaXRtYXAtPmJ1ZmZlciArIChGVF9VSW50KXBpdGNoICogaSwKLSAgICAgICAgICAgICAgICAgICAgIGxlbiApOworICAgICAgdW5zaWduZWQgY2hhciogIGxpbWl0ID0gYml0bWFwLT5idWZmZXIgKyBwaXRjaCAqIGJpdG1hcC0+cm93czsKKyAgICAgIHVuc2lnbmVkIGludCAgICBkZWx0YSA9IG5ld19waXRjaCAtIHBpdGNoOworCisKKyAgICAgIHdoaWxlICggaW4gPCBsaW1pdCApCisgICAgICB7CisgICAgICAgIEZUX01FTV9DT1BZKCBvdXQsIGluLCBsZW4gKTsKKyAgICAgICAgaW4gICs9IHBpdGNoOworICAgICAgICBvdXQgKz0gcGl0Y2g7CisKKyAgICAgICAgRlRfTUVNX1pFUk8oIG91dCwgZGVsdGEgKTsKKyAgICAgICAgb3V0ICs9IGRlbHRhOworICAgICAgfQorCisgICAgICBGVF9NRU1fWkVSTyggb3V0LCBuZXdfcGl0Y2ggKiB5cGl4ZWxzICk7CiAgICAgfQogCiAgICAgRlRfRlJFRSggYml0bWFwLT5idWZmZXIgKTsKICAgICBiaXRtYXAtPmJ1ZmZlciA9IGJ1ZmZlcjsKIAotICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQotICAgICAgbmV3X3BpdGNoID0gLW5ld19waXRjaDsKLQogICAgIC8qIHNldCBwaXRjaCBvbmx5LCB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBsZWZ0IHVudG91Y2hlZCAqLwotICAgIGJpdG1hcC0+cGl0Y2ggPSBuZXdfcGl0Y2g7CisgICAgaWYgKCBiaXRtYXAtPnBpdGNoIDwgMCApCisgICAgICBiaXRtYXAtPnBpdGNoID0gLShpbnQpbmV3X3BpdGNoOworICAgIGVsc2UKKyAgICAgIGJpdG1hcC0+cGl0Y2ggPSAoaW50KW5ld19waXRjaDsKIAogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KQEAgLTQ0NCw3ICs0NjksNyBAQAogICAgICAqIEEgZ2FtbWEgb2YgMi4yIGlzIGZhaXIgdG8gYXNzdW1lLiAgQW5kIHRoZW4sIHdlIG5lZWQgdG8KICAgICAgKiB1bmRvIHRoZSBwcmVtdWx0aXBsaWNhdGlvbiB0b28uCiAgICAgICoKLSAgICAgKiAgIGh0dHA6Ly9hY2Nlc3NpYmlsaXR5LmtkZS5vcmcvaHNsLWFkanVzdGVkLnBocAorICAgICAqICAgaHR0cHM6Ly9hY2Nlc3NpYmlsaXR5LmtkZS5vcmcvaHNsLWFkanVzdGVkLnBocAogICAgICAqCiAgICAgICogV2UgZG8gdGhlIGNvbXB1dGF0aW9uIHdpdGggaW50ZWdlcnMgb25seSwgYXBwbHlpbmcgYSBnYW1tYSBvZiAyLjAuCiAgICAgICogV2UgZ3VhcmFudGVlIDMyLWJpdCBhcml0aG1ldGljIHRvIGF2b2lkIG92ZXJmbG93IGJ1dCB0aGUgcmVzdWx0aW5nCkBAIC01MzQsOCArNTU5LDcgQEAKICAgICAgICAgICAgICAoRlRfVUxvbmcpdGFyZ2V0LT5yb3dzID4gRlRfVUxPTkdfTUFYIC8gKEZUX1VMb25nKXRhcmdldF9waXRjaCApCiAgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKLSAgICAgICAgaWYgKCB0YXJnZXQtPnJvd3MgKiAoRlRfVUxvbmcpdGFyZ2V0X3BpdGNoID4gb2xkX3NpemUgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgRlRfUVJFQUxMT0MoIHRhcmdldC0+YnVmZmVyLAorICAgICAgICBpZiAoIEZUX1FSRUFMTE9DKCB0YXJnZXQtPmJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3NpemUsIHRhcmdldC0+cm93cyAqIChGVF9VSW50KXRhcmdldF9waXRjaCApICkKICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Y2FsYy5jIGIvc3JjL2Jhc2UvZnRjYWxjLmMKaW5kZXggZjA1MjU1MC4uZjRmZjQ1ZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRjYWxjLmMKKysrIGIvc3JjL2Jhc2UvZnRjYWxjLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTY4LDE0ICs2OCwxNSBAQAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NhbGMKIAogCi0gIC8qIHRyYW5zZmVyIHNpZ24gbGVhdmluZyBhIHBvc2l0aXZlIG51bWJlciAqLwotI2RlZmluZSBGVF9NT1ZFX1NJR04oIHgsIHMgKSBcCi0gIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgIFwKLSAgICBpZiAoIHggPCAwICkgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB4ID0gLXg7ICAgICAgICAgICAgICAgIFwKLSAgICAgIHMgPSAtczsgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICBcCisgIC8qIHRyYW5zZmVyIHNpZ24sIGxlYXZpbmcgYSBwb3NpdGl2ZSBudW1iZXI7ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogd2UgbmVlZCBhbiB1bnNpZ25lZCB2YWx1ZSB0byBzYWZlbHkgbmVnYXRlIElOVF9NSU4gKG9yIExPTkdfTUlOKSAqLworI2RlZmluZSBGVF9NT1ZFX1NJR04oIHgsIHhfdW5zaWduZWQsIHMgKSBcCisgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIHggPCAwICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB4X3Vuc2lnbmVkID0gMFUgLSAoeF91bnNpZ25lZCk7ICAgIFwKKyAgICAgIHMgICAgICAgICAgPSAtczsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIEZUX0VORF9TVE1OVAogCiAgIC8qIFRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyICovCkBAIC04Niw3ICs4Nyw3IEBACiAgIEZUX0VYUE9SVF9ERUYoIEZUX0ZpeGVkICkKICAgRlRfUm91bmRGaXgoIEZUX0ZpeGVkICBhICkKICAgewotICAgIHJldHVybiAoIGEgKyAweDgwMDBMIC0gKCBhIDwgMCApICkgJiB+MHhGRkZGTDsKKyAgICByZXR1cm4gKCBBRERfTE9ORyggYSwgMHg4MDAwTCAtICggYSA8IDAgKSApICkgJiB+MHhGRkZGTDsKICAgfQogCiAKQEAgLTk1LDcgKzk2LDcgQEAKICAgRlRfRVhQT1JUX0RFRiggRlRfRml4ZWQgKQogICBGVF9DZWlsRml4KCBGVF9GaXhlZCAgYSApCiAgIHsKLSAgICByZXR1cm4gKCBhICsgMHhGRkZGTCApICYgfjB4RkZGRkw7CisgICAgcmV0dXJuICggQUREX0xPTkcoIGEsIDB4RkZGRkwgKSApICYgfjB4RkZGRkw7CiAgIH0KIAogCkBAIC0xNzksMjAgKzE4MCwyMCBAQAogICAgIEZUX0xvbmcgICAgZF87CiAKIAotICAgIEZUX01PVkVfU0lHTiggYV8sIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGJfLCBzICk7Ci0gICAgRlRfTU9WRV9TSUdOKCBjXywgcyApOwotCiAgICAgYSA9IChGVF9VSW50NjQpYV87CiAgICAgYiA9IChGVF9VSW50NjQpYl87CiAgICAgYyA9IChGVF9VSW50NjQpY187CiAKKyAgICBGVF9NT1ZFX1NJR04oIGFfLCBhLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBiXywgYiwgcyApOworICAgIEZUX01PVkVfU0lHTiggY18sIGMsIHMgKTsKKwogICAgIGQgPSBjID4gMCA/ICggYSAqIGIgKyAoIGMgPj4gMSApICkgLyBjCiAgICAgICAgICAgICAgIDogMHg3RkZGRkZGRlVMOwogCiAgICAgZF8gPSAoRlRfTG9uZylkOwogCi0gICAgcmV0dXJuIHMgPCAwID8gLWRfIDogZF87CisgICAgcmV0dXJuIHMgPCAwID8gTkVHX0xPTkcoIGRfICkgOiBkXzsKICAgfQogCiAKQEAgLTIwOCwyMCArMjA5LDIwIEBACiAgICAgRlRfTG9uZyAgICBkXzsKIAogCi0gICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOwotICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGNfLCBzICk7Ci0KICAgICBhID0gKEZUX1VJbnQ2NClhXzsKICAgICBiID0gKEZUX1VJbnQ2NCliXzsKICAgICBjID0gKEZUX1VJbnQ2NCljXzsKIAorICAgIEZUX01PVkVfU0lHTiggYV8sIGEsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGJfLCBiLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBjXywgYywgcyApOworCiAgICAgZCA9IGMgPiAwID8gYSAqIGIgLyBjCiAgICAgICAgICAgICAgIDogMHg3RkZGRkZGRlVMOwogCiAgICAgZF8gPSAoRlRfTG9uZylkOwogCi0gICAgcmV0dXJuIHMgPCAwID8gLWRfIDogZF87CisgICAgcmV0dXJuIHMgPCAwID8gTkVHX0xPTkcoIGRfICkgOiBkXzsKICAgfQogCiAKQEAgLTI1NywxOCArMjU4LDE4IEBACiAgICAgRlRfTG9uZyAgICBxXzsKIAogCi0gICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOwotICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKLQogICAgIGEgPSAoRlRfVUludDY0KWFfOwogICAgIGIgPSAoRlRfVUludDY0KWJfOwogCisgICAgRlRfTU9WRV9TSUdOKCBhXywgYSwgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIGIsIHMgKTsKKwogICAgIHEgPSBiID4gMCA/ICggKCBhIDw8IDE2ICkgKyAoIGIgPj4gMSApICkgLyBiCiAgICAgICAgICAgICAgIDogMHg3RkZGRkZGRlVMOwogCiAgICAgcV8gPSAoRlRfTG9uZylxOwogCi0gICAgcmV0dXJuIHMgPCAwID8gLXFfIDogcV87CisgICAgcmV0dXJuIHMgPCAwID8gTkVHX0xPTkcoIHFfICkgOiBxXzsKICAgfQogCiAKQEAgLTQyMiwxNCArNDIzLDE0IEBACiAKICAgICAvKiBYWFg6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWxsb3cgNjQtYml0IGFyZ3VtZW50cyAqLwogCi0gICAgRlRfTU9WRV9TSUdOKCBhXywgcyApOwotICAgIEZUX01PVkVfU0lHTiggYl8sIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGNfLCBzICk7Ci0KICAgICBhID0gKEZUX1VJbnQzMilhXzsKICAgICBiID0gKEZUX1VJbnQzMiliXzsKICAgICBjID0gKEZUX1VJbnQzMiljXzsKIAorICAgIEZUX01PVkVfU0lHTiggYV8sIGEsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGJfLCBiLCBzICk7CisgICAgRlRfTU9WRV9TSUdOKCBjXywgYywgcyApOworCiAgICAgaWYgKCBjID09IDAgKQogICAgICAgYSA9IDB4N0ZGRkZGRkZVTDsKIApAQCAtNDU1LDcgKzQ1Niw3IEBACiAKICAgICBhXyA9IChGVF9Mb25nKWE7CiAKLSAgICByZXR1cm4gcyA8IDAgPyAtYV8gOiBhXzsKKyAgICByZXR1cm4gcyA8IDAgPyBORUdfTE9ORyggYV8gKSA6IGFfOwogICB9CiAKIApAQCAtNDcwLDE0ICs0NzEsMTQgQEAKIAogICAgIC8qIFhYWDogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhbGxvdyA2NC1iaXQgYXJndW1lbnRzICovCiAKLSAgICBGVF9NT1ZFX1NJR04oIGFfLCBzICk7Ci0gICAgRlRfTU9WRV9TSUdOKCBiXywgcyApOwotICAgIEZUX01PVkVfU0lHTiggY18sIHMgKTsKLQogICAgIGEgPSAoRlRfVUludDMyKWFfOwogICAgIGIgPSAoRlRfVUludDMyKWJfOwogICAgIGMgPSAoRlRfVUludDMyKWNfOwogCisgICAgRlRfTU9WRV9TSUdOKCBhXywgYSwgcyApOworICAgIEZUX01PVkVfU0lHTiggYl8sIGIsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGNfLCBjLCBzICk7CisKICAgICBpZiAoIGMgPT0gMCApCiAgICAgICBhID0gMHg3RkZGRkZGRlVMOwogCkBAIC00OTgsNyArNDk5LDcgQEAKIAogICAgIGFfID0gKEZUX0xvbmcpYTsKIAotICAgIHJldHVybiBzIDwgMCA/IC1hXyA6IGFfOworICAgIHJldHVybiBzIDwgMCA/IE5FR19MT05HKCBhXyApIDogYV87CiAgIH0KIAogCkBAIC01NzUsMTIgKzU3NiwxMiBAQAogCiAgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KIAotICAgIEZUX01PVkVfU0lHTiggYV8sIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGJfLCBzICk7Ci0KICAgICBhID0gKEZUX1VJbnQzMilhXzsKICAgICBiID0gKEZUX1VJbnQzMiliXzsKIAorICAgIEZUX01PVkVfU0lHTiggYV8sIGEsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGJfLCBiLCBzICk7CisKICAgICBpZiAoIGEgKyAoIGIgPj4gOCApIDw9IDgxOTBVTCApCiAgICAgICBhID0gKCBhICogYiArIDB4ODAwMFVMICkgPj4gMTY7CiAgICAgZWxzZQpAQCAtNTk0LDcgKzU5NSw3IEBACiAKICAgICBhXyA9IChGVF9Mb25nKWE7CiAKLSAgICByZXR1cm4gcyA8IDAgPyAtYV8gOiBhXzsKKyAgICByZXR1cm4gcyA8IDAgPyBORUdfTE9ORyggYV8gKSA6IGFfOwogCiAjZW5kaWYgLyogMCAqLwogCkBAIC02MTQsMTIgKzYxNSwxMiBAQAogCiAgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFsbG93IDY0LWJpdCBhcmd1bWVudHMgKi8KIAotICAgIEZUX01PVkVfU0lHTiggYV8sIHMgKTsKLSAgICBGVF9NT1ZFX1NJR04oIGJfLCBzICk7Ci0KICAgICBhID0gKEZUX1VJbnQzMilhXzsKICAgICBiID0gKEZUX1VJbnQzMiliXzsKIAorICAgIEZUX01PVkVfU0lHTiggYV8sIGEsIHMgKTsKKyAgICBGVF9NT1ZFX1NJR04oIGJfLCBiLCBzICk7CisKICAgICBpZiAoIGIgPT0gMCApCiAgICAgewogICAgICAgLyogY2hlY2sgZm9yIGRpdmlzaW9uIGJ5IDAgKi8KQEAgLTY0Nyw3ICs2NDgsNyBAQAogCiAgICAgcV8gPSAoRlRfTG9uZylxOwogCi0gICAgcmV0dXJuIHMgPCAwID8gLXFfIDogcV87CisgICAgcmV0dXJuIHMgPCAwID8gTkVHX0xPTkcoIHFfICkgOiBxXzsKICAgfQogCiAKQEAgLTY2NiwxMyArNjY3LDE5IEBACiAgICAgaWYgKCAhYSB8fCAhYiApCiAgICAgICByZXR1cm47CiAKLSAgICB4eCA9IEZUX011bEZpeCggYS0+eHgsIGItPnh4ICkgKyBGVF9NdWxGaXgoIGEtPnh5LCBiLT55eCApOwotICAgIHh5ID0gRlRfTXVsRml4KCBhLT54eCwgYi0+eHkgKSArIEZUX011bEZpeCggYS0+eHksIGItPnl5ICk7Ci0gICAgeXggPSBGVF9NdWxGaXgoIGEtPnl4LCBiLT54eCApICsgRlRfTXVsRml4KCBhLT55eSwgYi0+eXggKTsKLSAgICB5eSA9IEZUX011bEZpeCggYS0+eXgsIGItPnh5ICkgKyBGVF9NdWxGaXgoIGEtPnl5LCBiLT55eSApOworICAgIHh4ID0gQUREX0xPTkcoIEZUX011bEZpeCggYS0+eHgsIGItPnh4ICksCisgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBhLT54eSwgYi0+eXggKSApOworICAgIHh5ID0gQUREX0xPTkcoIEZUX011bEZpeCggYS0+eHgsIGItPnh5ICksCisgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBhLT54eSwgYi0+eXkgKSApOworICAgIHl4ID0gQUREX0xPTkcoIEZUX011bEZpeCggYS0+eXgsIGItPnh4ICksCisgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBhLT55eSwgYi0+eXggKSApOworICAgIHl5ID0gQUREX0xPTkcoIEZUX011bEZpeCggYS0+eXgsIGItPnh5ICksCisgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBhLT55eSwgYi0+eXkgKSApOwogCi0gICAgYi0+eHggPSB4eDsgIGItPnh5ID0geHk7Ci0gICAgYi0+eXggPSB5eDsgIGItPnl5ID0geXk7CisgICAgYi0+eHggPSB4eDsKKyAgICBiLT54eSA9IHh5OworICAgIGItPnl4ID0geXg7CisgICAgYi0+eXkgPSB5eTsKICAgfQogCiAKQEAgLTcyMiwxMyArNzI5LDE5IEBACiAgICAgaWYgKCAhYSB8fCAhYiApCiAgICAgICByZXR1cm47CiAKLSAgICB4eCA9IEZUX011bERpdiggYS0+eHgsIGItPnh4LCB2YWwgKSArIEZUX011bERpdiggYS0+eHksIGItPnl4LCB2YWwgKTsKLSAgICB4eSA9IEZUX011bERpdiggYS0+eHgsIGItPnh5LCB2YWwgKSArIEZUX011bERpdiggYS0+eHksIGItPnl5LCB2YWwgKTsKLSAgICB5eCA9IEZUX011bERpdiggYS0+eXgsIGItPnh4LCB2YWwgKSArIEZUX011bERpdiggYS0+eXksIGItPnl4LCB2YWwgKTsKLSAgICB5eSA9IEZUX011bERpdiggYS0+eXgsIGItPnh5LCB2YWwgKSArIEZUX011bERpdiggYS0+eXksIGItPnl5LCB2YWwgKTsKKyAgICB4eCA9IEFERF9MT05HKCBGVF9NdWxEaXYoIGEtPnh4LCBiLT54eCwgdmFsICksCisgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBhLT54eSwgYi0+eXgsIHZhbCApICk7CisgICAgeHkgPSBBRERfTE9ORyggRlRfTXVsRGl2KCBhLT54eCwgYi0+eHksIHZhbCApLAorICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggYS0+eHksIGItPnl5LCB2YWwgKSApOworICAgIHl4ID0gQUREX0xPTkcoIEZUX011bERpdiggYS0+eXgsIGItPnh4LCB2YWwgKSwKKyAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIGEtPnl5LCBiLT55eCwgdmFsICkgKTsKKyAgICB5eSA9IEFERF9MT05HKCBGVF9NdWxEaXYoIGEtPnl4LCBiLT54eSwgdmFsICksCisgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBhLT55eSwgYi0+eXksIHZhbCApICk7CiAKLSAgICBiLT54eCA9IHh4OyAgYi0+eHkgPSB4eTsKLSAgICBiLT55eCA9IHl4OyAgYi0+eXkgPSB5eTsKKyAgICBiLT54eCA9IHh4OworICAgIGItPnh5ID0geHk7CisgICAgYi0+eXggPSB5eDsKKyAgICBiLT55eSA9IHl5OwogICB9CiAKIApAQCAtNzQ3LDExICs3NjAsMTAgQEAKICAgICBpZiAoICF2ZWN0b3IgfHwgIW1hdHJpeCApCiAgICAgICByZXR1cm47CiAKLSAgICB4eiA9IEZUX011bERpdiggdmVjdG9yLT54LCBtYXRyaXgtPnh4LCB2YWwgKSArCi0gICAgICAgICBGVF9NdWxEaXYoIHZlY3Rvci0+eSwgbWF0cml4LT54eSwgdmFsICk7Ci0KLSAgICB5eiA9IEZUX011bERpdiggdmVjdG9yLT54LCBtYXRyaXgtPnl4LCB2YWwgKSArCi0gICAgICAgICBGVF9NdWxEaXYoIHZlY3Rvci0+eSwgbWF0cml4LT55eSwgdmFsICk7CisgICAgeHogPSBBRERfTE9ORyggRlRfTXVsRGl2KCB2ZWN0b3ItPngsIG1hdHJpeC0+eHgsIHZhbCApLAorICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggdmVjdG9yLT55LCBtYXRyaXgtPnh5LCB2YWwgKSApOworICAgIHl6ID0gQUREX0xPTkcoIEZUX011bERpdiggdmVjdG9yLT54LCBtYXRyaXgtPnl4LCB2YWwgKSwKKyAgICAgICAgICAgICAgICAgICBGVF9NdWxEaXYoIHZlY3Rvci0+eSwgbWF0cml4LT55eSwgdmFsICkgKTsKIAogICAgIHZlY3Rvci0+eCA9IHh6OwogICAgIHZlY3Rvci0+eSA9IHl6OwpAQCAtNzcwLDEyICs3ODIsMTIgQEAKICAgICBGVF9JbnQgICAgIHN4ID0gMSwgc3kgPSAxLCBzaGlmdDsKIAogCi0gICAgRlRfTU9WRV9TSUdOKCB4Xywgc3ggKTsKLSAgICBGVF9NT1ZFX1NJR04oIHlfLCBzeSApOwotCiAgICAgeCA9IChGVF9VSW50MzIpeF87CiAgICAgeSA9IChGVF9VSW50MzIpeV87CiAKKyAgICBGVF9NT1ZFX1NJR04oIHhfLCB4LCBzeCApOworICAgIEZUX01PVkVfU0lHTiggeV8sIHksIHN5ICk7CisKICAgICAvKiB0cml2aWFsIGNhc2VzICovCiAgICAgaWYgKCB4ID09IDAgKQogICAgIHsKQEAgLTkxMywxMSArOTI1LDEzIEBACiAgICAgRlRfSW50ICByZXN1bHQ7CiAKIAotICAgIGlmICggKEZUX1VMb25nKUZUX0FCUyggaW5feCApICsgKEZUX1VMb25nKUZUX0FCUyggb3V0X3kgKSA8PSAxMzEwNzFVTCAmJgotICAgICAgICAgKEZUX1VMb25nKUZUX0FCUyggaW5feSApICsgKEZUX1VMb25nKUZUX0FCUyggb3V0X3ggKSA8PSAxMzEwNzFVTCApCisgICAgLyogd2Ugc2lsZW50bHkgaWdub3JlIG92ZXJmbG93IGVycm9ycywgc2luY2Ugc3VjaCBsYXJnZSB2YWx1ZXMgKi8KKyAgICAvKiBsZWFkIHRvIGV2ZW4gbW9yZSAoaGFybWxlc3MpIHJlbmRlcmluZyBlcnJvcnMgbGF0ZXIgb24gICAgICAqLworICAgIGlmICggQUREX0xPTkcoIEZUX0FCUyggaW5feCApLCBGVF9BQlMoIG91dF95ICkgKSA8PSAxMzEwNzFMICYmCisgICAgICAgICBBRERfTE9ORyggRlRfQUJTKCBpbl95ICksIEZUX0FCUyggb3V0X3ggKSApIDw9IDEzMTA3MUwgKQogICAgIHsKLSAgICAgIEZUX0xvbmcgIHoxID0gaW5feCAqIG91dF95OwotICAgICAgRlRfTG9uZyAgejIgPSBpbl95ICogb3V0X3g7CisgICAgICBGVF9Mb25nICB6MSA9IE1VTF9MT05HKCBpbl94LCBvdXRfeSApOworICAgICAgRlRfTG9uZyAgejIgPSBNVUxfTE9ORyggaW5feSwgb3V0X3ggKTsKIAogCiAgICAgICBpZiAoIHoxID4gejIgKQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRjaWQuYyBiL3NyYy9iYXNlL2Z0Y2lkLmMKaW5kZXggMzk4Mzk2Yi4uZjUxODQ2NCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRjaWQuYworKysgYi9zcmMvYmFzZS9mdGNpZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIENJRCBmb250IGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGVyZWsgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGRiZ21lbS5jIGIvc3JjL2Jhc2UvZnRkYmdtZW0uYwppbmRleCAyNDIyNDZiLi5jMzNkOGFjIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGRiZ21lbS5jCisrKyBiL3NyYy9iYXNlL2Z0ZGJnbWVtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTWVtb3J5IGRlYnVnZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTgyNiw3ICs4MjYsNyBAQAogICAgIEZUX0ludCAgICAgICByZXN1bHQgPSAwOwogCiAKLSAgICBpZiAoIGdldGVudiggIkZUMl9ERUJVR19NRU1PUlkiICkgKQorICAgIGlmICggZnRfZ2V0ZW52KCAiRlQyX0RFQlVHX01FTU9SWSIgKSApCiAgICAgewogICAgICAgdGFibGUgPSBmdF9tZW1fdGFibGVfbmV3KCBtZW1vcnkgKTsKICAgICAgIGlmICggdGFibGUgKQpAQCAtODM5LDcgKzgzOSw3IEBACiAgICAgICAgIG1lbW9yeS0+cmVhbGxvYyA9IGZ0X21lbV9kZWJ1Z19yZWFsbG9jOwogICAgICAgICBtZW1vcnktPmZyZWUgICAgPSBmdF9tZW1fZGVidWdfZnJlZTsKIAotICAgICAgICBwID0gZ2V0ZW52KCAiRlQyX0FMTE9DX1RPVEFMX01BWCIgKTsKKyAgICAgICAgcCA9IGZ0X2dldGVudiggIkZUMl9BTExPQ19UT1RBTF9NQVgiICk7CiAgICAgICAgIGlmICggcCApCiAgICAgICAgIHsKICAgICAgICAgICBGVF9Mb25nICB0b3RhbF9tYXggPSBmdF9zdHJ0b2woIHAsIE5VTEwsIDEwICk7CkBAIC04NTIsNyArODUyLDcgQEAKICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwID0gZ2V0ZW52KCAiRlQyX0FMTE9DX0NPVU5UX01BWCIgKTsKKyAgICAgICAgcCA9IGZ0X2dldGVudiggIkZUMl9BTExPQ19DT1VOVF9NQVgiICk7CiAgICAgICAgIGlmICggcCApCiAgICAgICAgIHsKICAgICAgICAgICBGVF9Mb25nICB0b3RhbF9jb3VudCA9IGZ0X3N0cnRvbCggcCwgTlVMTCwgMTAgKTsKQEAgLTg2NSw3ICs4NjUsNyBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHAgPSBnZXRlbnYoICJGVDJfS0VFUF9BTElWRSIgKTsKKyAgICAgICAgcCA9IGZ0X2dldGVudiggIkZUMl9LRUVQX0FMSVZFIiApOwogICAgICAgICBpZiAoIHAgKQogICAgICAgICB7CiAgICAgICAgICAgRlRfTG9uZyAga2VlcF9hbGl2ZSA9IGZ0X3N0cnRvbCggcCwgTlVMTCwgMTAgKTsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0ZGVidWcuYyBiL3NyYy9iYXNlL2Z0ZGVidWcuYwppbmRleCAyMGM2MTcwLi5mZTI2MzA5IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGRlYnVnLmMKKysrIGIvc3JjL2Jhc2UvZnRkZWJ1Zy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNjEsNyArMTYxLDcgQEAKICAgRlRfQkFTRV9ERUYoIHZvaWQgKQogICBmdF9kZWJ1Z19pbml0KCB2b2lkICkKICAgewotICAgIGNvbnN0IGNoYXIqICBmdDJfZGVidWcgPSBnZXRlbnYoICJGVDJfREVCVUciICk7CisgICAgY29uc3QgY2hhciogIGZ0Ml9kZWJ1ZyA9IGZ0X2dldGVudiggIkZUMl9ERUJVRyIgKTsKIAogCiAgICAgaWYgKCBmdDJfZGVidWcgKQpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRmbnRmbXQuYyBiL3NyYy9iYXNlL2Z0Zm50Zm10LmMKaW5kZXggZGNiZWJhMC4uYTI5MDBjZSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRmbnRmbXQuYworKysgYi9zcmMvYmFzZS9mdGZudGZtdC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSBmb3IgZm9udCBmb3JtYXRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGZzdHlwZS5jIGIvc3JjL2Jhc2UvZnRmc3R5cGUuYwppbmRleCBjZWM0ZmIzLi5lNmNkZjZlIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGZzdHlwZS5jCisrKyBiL3NyYy9iYXNlL2Z0ZnN0eXBlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIHRvIGFjY2VzcyBGU1R5cGUgZGF0YSAoYm9keSkuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA4LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2FzcC5jIGIvc3JjL2Jhc2UvZnRnYXNwLmMKaW5kZXggNDc3YjcyNS4uNGY4MGJiYSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRnYXNwLmMKKysrIGIvc3JjL2Jhc2UvZnRnYXNwLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWNjZXNzIG9mIFRydWVUeXBlJ3MgYGdhc3AnIHRhYmxlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2xvYWRyLmMgYi9zcmMvYmFzZS9mdGdsb2Fkci5jCmluZGV4IDgxMzQwMDMuLjQ3MjAyNDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z2xvYWRyLmMKKysrIGIvc3JjL2Jhc2UvZnRnbG9hZHIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRnbHlwaC5jIGIvc3JjL2Jhc2UvZnRnbHlwaC5jCmluZGV4IDliZmIzMzAuLjY3NTlhYTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z2x5cGguYworKysgYi9zcmMvYmFzZS9mdGdseXBoLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBnbHlwaHMgKGJvZHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTQwOCwxMiArNDA4LDI4IEBACiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAvKiBjb3B5IGFkdmFuY2Ugd2hpbGUgY29udmVydGluZyAyNi42IHRvIDE2LjE2IGZvcm1hdCAqLworICAgIGlmICggc2xvdC0+YWR2YW5jZS54ID49ICAweDgwMDBMICogNjQgfHwKKyAgICAgICAgIHNsb3QtPmFkdmFuY2UueCA8PSAtMHg4MDAwTCAqIDY0ICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJGVF9HZXRfR2x5cGg6IGFkdmFuY2Ugd2lkdGggdG9vIGxhcmdlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0MjsKKyAgICB9CisgICAgaWYgKCBzbG90LT5hZHZhbmNlLnkgPj0gIDB4ODAwMEwgKiA2NCB8fAorICAgICAgICAgc2xvdC0+YWR2YW5jZS55IDw9IC0weDgwMDBMICogNjQgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggIkZUX0dldF9HbHlwaDogYWR2YW5jZSBoZWlnaHQgdG9vIGxhcmdlXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgZ290byBFeGl0MjsKKyAgICB9CisKICAgICBnbHlwaC0+YWR2YW5jZS54ID0gc2xvdC0+YWR2YW5jZS54ICogMTAyNDsKICAgICBnbHlwaC0+YWR2YW5jZS55ID0gc2xvdC0+YWR2YW5jZS55ICogMTAyNDsKIAogICAgIC8qIG5vdyBpbXBvcnQgdGhlIGltYWdlIGZyb20gdGhlIGdseXBoIHNsb3QgKi8KICAgICBlcnJvciA9IGNsYXp6LT5nbHlwaF9pbml0KCBnbHlwaCwgc2xvdCApOwogCisgIEV4aXQyOgogICAgIC8qIGlmIGFuIGVycm9yIG9jY3VycmVkLCBkZXN0cm95IHRoZSBnbHlwaCAqLwogICAgIGlmICggZXJyb3IgKQogICAgICAgRlRfRG9uZV9HbHlwaCggZ2x5cGggKTsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z3h2YWwuYyBiL3NyYy9iYXNlL2Z0Z3h2YWwuYwppbmRleCBmZjI0ZDMzLi4xOWUyZDZhIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGd4dmFsLmMKKysrIGIvc3JjL2Jhc2UvZnRneHZhbC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKGJvZHkpLiAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGluaXQuYyBiL3NyYy9iYXNlL2Z0aW5pdC5jCmluZGV4IGIzYjA4ZmEuLjFmYTQ3MjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0aW5pdC5jCisrKyBiL3NyYy9iYXNlL2Z0aW5pdC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGluaXRpYWxpemF0aW9uIGxheWVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGxjZGZpbC5jIGIvc3JjL2Jhc2UvZnRsY2RmaWwuYwppbmRleCA2MTFiMzlmLi41YzM4OTExIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGxjZGZpbC5jCisrKyBiL3NyYy9iYXNlL2Z0bGNkZmlsLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwIGdseXBocyAoYm9keSkuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI5LDE0MSArMjksMTQwIEBACiAvKiBkZWZpbmUgVVNFX0xFR0FDWSB0byBpbXBsZW1lbnQgdGhlIGxlZ2FjeSBmaWx0ZXIgKi8KICNkZWZpbmUgIFVTRV9MRUdBQ1kKIAorI2RlZmluZSBGVF9TSElGVENMQU1QKCB4ICkgICggeCA+Pj0gOCwgKEZUX0J5dGUpKCB4ID4gMjU1ID8gMjU1IDogeCApICkKKworCisgIC8qIGFkZCBwYWRkaW5nIGFjY29yZGluZyB0byBmaWx0ZXIgd2VpZ2h0cyAqLworICBGVF9CQVNFX0RFRiAodm9pZCkKKyAgZnRfbGNkX3BhZGRpbmcoIEZUX1BvcyogICAgICAgTWluLAorICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICBNYXgsCisgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgKQorICB7CisgICAgRlRfQnl0ZSogICAgICAgICAgICAgICAgIGxjZF93ZWlnaHRzOworICAgIEZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jICBsY2RfZmlsdGVyX2Z1bmM7CisKKworICAgIC8qIFBlci1mYWNlIExDRCBmaWx0ZXJpbmcgdGFrZXMgcHJpb3JpdHkgaWYgc2V0IHVwLiAqLworICAgIGlmICggc2xvdC0+ZmFjZSAmJiBzbG90LT5mYWNlLT5pbnRlcm5hbC0+bGNkX2ZpbHRlcl9mdW5jICkKKyAgICB7CisgICAgICBsY2Rfd2VpZ2h0cyAgICAgPSBzbG90LT5mYWNlLT5pbnRlcm5hbC0+bGNkX3dlaWdodHM7CisgICAgICBsY2RfZmlsdGVyX2Z1bmMgPSBzbG90LT5mYWNlLT5pbnRlcm5hbC0+bGNkX2ZpbHRlcl9mdW5jOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgbGNkX3dlaWdodHMgICAgID0gc2xvdC0+bGlicmFyeS0+bGNkX3dlaWdodHM7CisgICAgICBsY2RfZmlsdGVyX2Z1bmMgPSBzbG90LT5saWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmM7CisgICAgfQorCisgICAgaWYgKCBsY2RfZmlsdGVyX2Z1bmMgPT0gZnRfbGNkX2ZpbHRlcl9maXIgKQorICAgIHsKKyAgICAgICpNaW4gLT0gbGNkX3dlaWdodHNbMF0gPyA0MyA6CisgICAgICAgICAgICAgIGxjZF93ZWlnaHRzWzFdID8gMjIgOiAwOworICAgICAgKk1heCArPSBsY2Rfd2VpZ2h0c1s0XSA/IDQzIDoKKyAgICAgICAgICAgICAgbGNkX3dlaWdodHNbM10gPyAyMiA6IDA7CisgICAgfQorICB9CisKKwogICAvKiBGSVIgZmlsdGVyIHVzZWQgYnkgdGhlIGRlZmF1bHQgYW5kIGxpZ2h0IGZpbHRlcnMgKi8KLSAgRlRfQkFTRSggdm9pZCApCisgIEZUX0JBU0VfREVGKCB2b2lkICkKICAgZnRfbGNkX2ZpbHRlcl9maXIoIEZUX0JpdG1hcCogICAgICAgICAgIGJpdG1hcCwKICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgICAgIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICBGVF9MY2RGaXZlVGFwRmlsdGVyICB3ZWlnaHRzICkKICAgewotICAgIEZUX1VJbnQgIHdpZHRoICAgPSAoRlRfVUludCliaXRtYXAtPndpZHRoOwotICAgIEZUX1VJbnQgIGhlaWdodCAgPSAoRlRfVUludCliaXRtYXAtPnJvd3M7CisgICAgRlRfVUludCAgIHdpZHRoICA9IChGVF9VSW50KWJpdG1hcC0+d2lkdGg7CisgICAgRlRfVUludCAgIGhlaWdodCA9IChGVF9VSW50KWJpdG1hcC0+cm93czsKKyAgICBGVF9JbnQgICAgcGl0Y2ggID0gYml0bWFwLT5waXRjaDsKKyAgICBGVF9CeXRlKiAgb3JpZ2luID0gYml0bWFwLT5idWZmZXI7CiAKIAorICAgIC8qIHRha2UgY2FyZSBvZiBiaXRtYXAgZmxvdyAqLworICAgIGlmICggcGl0Y2ggPiAwICkKKyAgICAgIG9yaWdpbiArPSBwaXRjaCAqIChGVF9JbnQpKCBoZWlnaHQgLSAxICk7CisKICAgICAvKiBob3Jpem9udGFsIGluLXBsYWNlIEZJUiBmaWx0ZXIgKi8KLSAgICBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEICYmIHdpZHRoID49IDQgKQorICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgJiYgd2lkdGggPj0gMiApCiAgICAgewotICAgICAgRlRfQnl0ZSogIGxpbmUgPSBiaXRtYXAtPmJ1ZmZlcjsKKyAgICAgIEZUX0J5dGUqICBsaW5lID0gb3JpZ2luOwogCiAKLSAgICAgIC8qIHRha2UgY2FyZSBvZiBiaXRtYXAgZmxvdyAqLwotICAgICAgaWYgKCBiaXRtYXAtPnBpdGNoIDwgMCApCi0gICAgICAgIGxpbmUgLT0gYml0bWFwLT5waXRjaCAqIChGVF9JbnQpKCBiaXRtYXAtPnJvd3MgLSAxICk7CisgICAgICAvKiBgZmlyJyBtdXN0IGJlIGF0IGxlYXN0IDMyIGJpdCB3aWRlLCBzaW5jZSB0aGUgc3VtIG9mICovCisgICAgICAvKiB0aGUgdmFsdWVzIGluIGB3ZWlnaHRzJyBjYW4gZXhjZWVkIDB4RkYgICAgICAgICAgICAgICovCiAKLSAgICAgIC8qIGBmaXInIGFuZCBgcGl4JyBtdXN0IGJlIGF0IGxlYXN0IDMyIGJpdCB3aWRlLCBzaW5jZSB0aGUgc3VtIG9mICovCi0gICAgICAvKiB0aGUgdmFsdWVzIGluIGB3ZWlnaHRzJyBjYW4gZXhjZWVkIDB4RkYgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICBmb3IgKCA7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBsaW5lICs9IGJpdG1hcC0+cGl0Y2ggKQorICAgICAgZm9yICggOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgbGluZSAtPSBwaXRjaCApCiAgICAgICB7Ci0gICAgICAgIEZUX1VJbnQgIGZpcls0XTsgICAgICAgIC8qIGJlbG93LCBgcGl4JyBpcyB1c2VkIGFzIHRoZSA1dGggZWxlbWVudCAqLwotICAgICAgICBGVF9VSW50ICB2YWwxLCB4eDsKKyAgICAgICAgRlRfVUludCAgZmlyWzVdOworICAgICAgICBGVF9VSW50ICB2YWwsIHh4OwogCiAKLSAgICAgICAgdmFsMSAgID0gbGluZVswXTsKLSAgICAgICAgZmlyWzBdID0gd2VpZ2h0c1syXSAqIHZhbDE7Ci0gICAgICAgIGZpclsxXSA9IHdlaWdodHNbM10gKiB2YWwxOwotICAgICAgICBmaXJbMl0gPSB3ZWlnaHRzWzRdICogdmFsMTsKLSAgICAgICAgZmlyWzNdID0gMDsKKyAgICAgICAgdmFsICAgID0gbGluZVswXTsKKyAgICAgICAgZmlyWzJdID0gd2VpZ2h0c1syXSAqIHZhbDsKKyAgICAgICAgZmlyWzNdID0gd2VpZ2h0c1szXSAqIHZhbDsKKyAgICAgICAgZmlyWzRdID0gd2VpZ2h0c1s0XSAqIHZhbDsKIAotICAgICAgICB2YWwxICAgID0gbGluZVsxXTsKLSAgICAgICAgZmlyWzBdICs9IHdlaWdodHNbMV0gKiB2YWwxOwotICAgICAgICBmaXJbMV0gKz0gd2VpZ2h0c1syXSAqIHZhbDE7Ci0gICAgICAgIGZpclsyXSArPSB3ZWlnaHRzWzNdICogdmFsMTsKLSAgICAgICAgZmlyWzNdICs9IHdlaWdodHNbNF0gKiB2YWwxOworICAgICAgICB2YWwgICAgPSBsaW5lWzFdOworICAgICAgICBmaXJbMV0gPSBmaXJbMl0gKyB3ZWlnaHRzWzFdICogdmFsOworICAgICAgICBmaXJbMl0gPSBmaXJbM10gKyB3ZWlnaHRzWzJdICogdmFsOworICAgICAgICBmaXJbM10gPSBmaXJbNF0gKyB3ZWlnaHRzWzNdICogdmFsOworICAgICAgICBmaXJbNF0gPSAgICAgICAgICB3ZWlnaHRzWzRdICogdmFsOwogCiAgICAgICAgIGZvciAoIHh4ID0gMjsgeHggPCB3aWR0aDsgeHgrKyApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9VSW50ICB2YWwsIHBpeDsKLQotCiAgICAgICAgICAgdmFsICAgID0gbGluZVt4eF07Ci0gICAgICAgICAgcGl4ICAgID0gZmlyWzBdICsgd2VpZ2h0c1swXSAqIHZhbDsKLSAgICAgICAgICBmaXJbMF0gPSBmaXJbMV0gKyB3ZWlnaHRzWzFdICogdmFsOwotICAgICAgICAgIGZpclsxXSA9IGZpclsyXSArIHdlaWdodHNbMl0gKiB2YWw7Ci0gICAgICAgICAgZmlyWzJdID0gZmlyWzNdICsgd2VpZ2h0c1szXSAqIHZhbDsKLSAgICAgICAgICBmaXJbM10gPSAgICAgICAgICB3ZWlnaHRzWzRdICogdmFsOworICAgICAgICAgIGZpclswXSA9IGZpclsxXSArIHdlaWdodHNbMF0gKiB2YWw7CisgICAgICAgICAgZmlyWzFdID0gZmlyWzJdICsgd2VpZ2h0c1sxXSAqIHZhbDsKKyAgICAgICAgICBmaXJbMl0gPSBmaXJbM10gKyB3ZWlnaHRzWzJdICogdmFsOworICAgICAgICAgIGZpclszXSA9IGZpcls0XSArIHdlaWdodHNbM10gKiB2YWw7CisgICAgICAgICAgZmlyWzRdID0gICAgICAgICAgd2VpZ2h0c1s0XSAqIHZhbDsKIAotICAgICAgICAgIHBpeCAgICAgICAgPj49IDg7Ci0gICAgICAgICAgcGl4ICAgICAgICAgfD0gKEZUX1VJbnQpLShGVF9JbnQpKCBwaXggPj4gOCApOwotICAgICAgICAgIGxpbmVbeHggLSAyXSA9IChGVF9CeXRlKXBpeDsKKyAgICAgICAgICBsaW5lW3h4IC0gMl0gPSBGVF9TSElGVENMQU1QKCBmaXJbMF0gKTsKICAgICAgICAgfQogCi0gICAgICAgIHsKLSAgICAgICAgICBGVF9VSW50ICBwaXg7Ci0KLQotICAgICAgICAgIHBpeCAgICAgICAgICA9IGZpclswXSA+PiA4OwotICAgICAgICAgIHBpeCAgICAgICAgIHw9IChGVF9VSW50KS0oRlRfSW50KSggcGl4ID4+IDggKTsKLSAgICAgICAgICBsaW5lW3h4IC0gMl0gPSAoRlRfQnl0ZSlwaXg7Ci0KLSAgICAgICAgICBwaXggICAgICAgICAgPSBmaXJbMV0gPj4gODsKLSAgICAgICAgICBwaXggICAgICAgICB8PSAoRlRfVUludCktKEZUX0ludCkoIHBpeCA+PiA4ICk7Ci0gICAgICAgICAgbGluZVt4eCAtIDFdID0gKEZUX0J5dGUpcGl4OwotICAgICAgICB9CisgICAgICAgIGxpbmVbeHggLSAyXSA9IEZUX1NISUZUQ0xBTVAoIGZpclsxXSApOworICAgICAgICBsaW5lW3h4IC0gMV0gPSBGVF9TSElGVENMQU1QKCBmaXJbMl0gKTsKICAgICAgIH0KICAgICB9CiAKICAgICAvKiB2ZXJ0aWNhbCBpbi1wbGFjZSBGSVIgZmlsdGVyICovCi0gICAgZWxzZSBpZiAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTENEX1YgJiYgaGVpZ2h0ID49IDQgKQorICAgIGVsc2UgaWYgKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xDRF9WICYmIGhlaWdodCA+PSAyICkKICAgICB7Ci0gICAgICBGVF9CeXRlKiAgY29sdW1uID0gYml0bWFwLT5idWZmZXI7Ci0gICAgICBGVF9JbnQgICAgcGl0Y2ggID0gYml0bWFwLT5waXRjaDsKKyAgICAgIEZUX0J5dGUqICBjb2x1bW4gPSBvcmlnaW47CiAKIAotICAgICAgLyogdGFrZSBjYXJlIG9mIGJpdG1hcCBmbG93ICovCi0gICAgICBpZiAoIGJpdG1hcC0+cGl0Y2ggPCAwICkKLSAgICAgICAgY29sdW1uIC09IGJpdG1hcC0+cGl0Y2ggKiAoRlRfSW50KSggYml0bWFwLT5yb3dzIC0gMSApOwotCiAgICAgICBmb3IgKCA7IHdpZHRoID4gMDsgd2lkdGgtLSwgY29sdW1uKysgKQogICAgICAgewogICAgICAgICBGVF9CeXRlKiAgY29sID0gY29sdW1uOwotICAgICAgICBGVF9VSW50ICAgZmlyWzRdOyAgICAgICAvKiBiZWxvdywgYHBpeCcgaXMgdXNlZCBhcyB0aGUgNXRoIGVsZW1lbnQgKi8KLSAgICAgICAgRlRfVUludCAgIHZhbDEsIHl5OworICAgICAgICBGVF9VSW50ICAgZmlyWzVdOworICAgICAgICBGVF9VSW50ICAgdmFsLCB5eTsKIAogCi0gICAgICAgIHZhbDEgICA9IGNvbFswXTsKLSAgICAgICAgZmlyWzBdID0gd2VpZ2h0c1syXSAqIHZhbDE7Ci0gICAgICAgIGZpclsxXSA9IHdlaWdodHNbM10gKiB2YWwxOwotICAgICAgICBmaXJbMl0gPSB3ZWlnaHRzWzRdICogdmFsMTsKLSAgICAgICAgZmlyWzNdID0gMDsKLSAgICAgICAgY29sICAgKz0gcGl0Y2g7CisgICAgICAgIHZhbCAgICA9IGNvbFswXTsKKyAgICAgICAgZmlyWzJdID0gd2VpZ2h0c1syXSAqIHZhbDsKKyAgICAgICAgZmlyWzNdID0gd2VpZ2h0c1szXSAqIHZhbDsKKyAgICAgICAgZmlyWzRdID0gd2VpZ2h0c1s0XSAqIHZhbDsKKyAgICAgICAgY29sICAgLT0gcGl0Y2g7CiAKLSAgICAgICAgdmFsMSAgICA9IGNvbFswXTsKLSAgICAgICAgZmlyWzBdICs9IHdlaWdodHNbMV0gKiB2YWwxOwotICAgICAgICBmaXJbMV0gKz0gd2VpZ2h0c1syXSAqIHZhbDE7Ci0gICAgICAgIGZpclsyXSArPSB3ZWlnaHRzWzNdICogdmFsMTsKLSAgICAgICAgZmlyWzNdICs9IHdlaWdodHNbNF0gKiB2YWwxOwotICAgICAgICBjb2wgICAgKz0gcGl0Y2g7CisgICAgICAgIHZhbCAgICA9IGNvbFswXTsKKyAgICAgICAgZmlyWzFdID0gZmlyWzJdICsgd2VpZ2h0c1sxXSAqIHZhbDsKKyAgICAgICAgZmlyWzJdID0gZmlyWzNdICsgd2VpZ2h0c1syXSAqIHZhbDsKKyAgICAgICAgZmlyWzNdID0gZmlyWzRdICsgd2VpZ2h0c1szXSAqIHZhbDsKKyAgICAgICAgZmlyWzRdID0gICAgICAgICAgd2VpZ2h0c1s0XSAqIHZhbDsKKyAgICAgICAgY29sICAgLT0gcGl0Y2g7CiAKLSAgICAgICAgZm9yICggeXkgPSAyOyB5eSA8IGhlaWdodDsgeXkrKyApCisgICAgICAgIGZvciAoIHl5ID0gMjsgeXkgPCBoZWlnaHQ7IHl5KyssIGNvbCAtPSBwaXRjaCApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9VSW50ICB2YWwsIHBpeDsKLQotCiAgICAgICAgICAgdmFsICAgID0gY29sWzBdOwotICAgICAgICAgIHBpeCAgICA9IGZpclswXSArIHdlaWdodHNbMF0gKiB2YWw7Ci0gICAgICAgICAgZmlyWzBdID0gZmlyWzFdICsgd2VpZ2h0c1sxXSAqIHZhbDsKLSAgICAgICAgICBmaXJbMV0gPSBmaXJbMl0gKyB3ZWlnaHRzWzJdICogdmFsOwotICAgICAgICAgIGZpclsyXSA9IGZpclszXSArIHdlaWdodHNbM10gKiB2YWw7Ci0gICAgICAgICAgZmlyWzNdID0gICAgICAgICAgd2VpZ2h0c1s0XSAqIHZhbDsKKyAgICAgICAgICBmaXJbMF0gPSBmaXJbMV0gKyB3ZWlnaHRzWzBdICogdmFsOworICAgICAgICAgIGZpclsxXSA9IGZpclsyXSArIHdlaWdodHNbMV0gKiB2YWw7CisgICAgICAgICAgZmlyWzJdID0gZmlyWzNdICsgd2VpZ2h0c1syXSAqIHZhbDsKKyAgICAgICAgICBmaXJbM10gPSBmaXJbNF0gKyB3ZWlnaHRzWzNdICogdmFsOworICAgICAgICAgIGZpcls0XSA9ICAgICAgICAgIHdlaWdodHNbNF0gKiB2YWw7CiAKLSAgICAgICAgICBwaXggICAgICAgICAgID4+PSA4OwotICAgICAgICAgIHBpeCAgICAgICAgICAgIHw9IChGVF9VSW50KS0oRlRfSW50KSggcGl4ID4+IDggKTsKLSAgICAgICAgICBjb2xbLTIgKiBwaXRjaF0gPSAoRlRfQnl0ZSlwaXg7Ci0gICAgICAgICAgY29sICAgICAgICAgICAgKz0gcGl0Y2g7CisgICAgICAgICAgY29sW3BpdGNoICogMl0gID0gRlRfU0hJRlRDTEFNUCggZmlyWzBdICk7CiAgICAgICAgIH0KIAotICAgICAgICB7Ci0gICAgICAgICAgRlRfVUludCAgcGl4OwotCi0KLSAgICAgICAgICBwaXggICAgICAgICAgICAgPSBmaXJbMF0gPj4gODsKLSAgICAgICAgICBwaXggICAgICAgICAgICB8PSAoRlRfVUludCktKEZUX0ludCkoIHBpeCA+PiA4ICk7Ci0gICAgICAgICAgY29sWy0yICogcGl0Y2hdID0gKEZUX0J5dGUpcGl4OwotCi0gICAgICAgICAgcGl4ICAgICAgICAgPSBmaXJbMV0gPj4gODsKLSAgICAgICAgICBwaXggICAgICAgIHw9IChGVF9VSW50KS0oRlRfSW50KSggcGl4ID4+IDggKTsKLSAgICAgICAgICBjb2xbLXBpdGNoXSA9IChGVF9CeXRlKXBpeDsKLSAgICAgICAgfQorICAgICAgICBjb2xbcGl0Y2ggKiAyXSAgPSBGVF9TSElGVENMQU1QKCBmaXJbMV0gKTsKKyAgICAgICAgY29sW3BpdGNoXSAgICAgID0gRlRfU0hJRlRDTEFNUCggZmlyWzJdICk7CiAgICAgICB9CiAgICAgfQogICB9CkBAIC0xNzcsOSArMTc2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIHdlaWdodHMgKQogICB7Ci0gICAgRlRfVUludCAgd2lkdGggID0gKEZUX1VJbnQpYml0bWFwLT53aWR0aDsKLSAgICBGVF9VSW50ICBoZWlnaHQgPSAoRlRfVUludCliaXRtYXAtPnJvd3M7Ci0gICAgRlRfSW50ICAgcGl0Y2ggID0gYml0bWFwLT5waXRjaDsKKyAgICBGVF9VSW50ICAgd2lkdGggID0gKEZUX1VJbnQpYml0bWFwLT53aWR0aDsKKyAgICBGVF9VSW50ICAgaGVpZ2h0ID0gKEZUX1VJbnQpYml0bWFwLT5yb3dzOworICAgIEZUX0ludCAgICBwaXRjaCAgPSBiaXRtYXAtPnBpdGNoOworICAgIEZUX0J5dGUqICBvcmlnaW4gPSBiaXRtYXAtPmJ1ZmZlcjsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgIGZpbHRlcnNbM11bM10gPQogICAgIHsKQEAgLTE5MSwzMyArMTkxLDMxIEBACiAgICAgRlRfVU5VU0VEKCB3ZWlnaHRzICk7CiAKIAorICAgIC8qIHRha2UgY2FyZSBvZiBiaXRtYXAgZmxvdyAqLworICAgIGlmICggcGl0Y2ggPiAwICkKKyAgICAgIG9yaWdpbiArPSBwaXRjaCAqIChGVF9JbnQpKCBoZWlnaHQgLSAxICk7CisKICAgICAvKiBob3Jpem9udGFsIGluLXBsYWNlIGludHJhLXBpeGVsIGZpbHRlciAqLwogICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgJiYgd2lkdGggPj0gMyApCiAgICAgewotICAgICAgRlRfQnl0ZSogIGxpbmUgPSBiaXRtYXAtPmJ1ZmZlcjsKKyAgICAgIEZUX0J5dGUqICBsaW5lID0gb3JpZ2luOwogCiAKLSAgICAgIC8qIHRha2UgY2FyZSBvZiBiaXRtYXAgZmxvdyAqLwotICAgICAgaWYgKCBiaXRtYXAtPnBpdGNoIDwgMCApCi0gICAgICAgIGxpbmUgLT0gYml0bWFwLT5waXRjaCAqIChGVF9JbnQpKCBiaXRtYXAtPnJvd3MgLSAxICk7Ci0KLSAgICAgIGZvciAoIDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGxpbmUgKz0gcGl0Y2ggKQorICAgICAgZm9yICggOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgbGluZSAtPSBwaXRjaCApCiAgICAgICB7CiAgICAgICAgIEZUX1VJbnQgIHh4OwogCiAKICAgICAgICAgZm9yICggeHggPSAwOyB4eCA8IHdpZHRoOyB4eCArPSAzICkKICAgICAgICAgewotICAgICAgICAgIEZUX1VJbnQgIHIgPSAwOwotICAgICAgICAgIEZUX1VJbnQgIGcgPSAwOwotICAgICAgICAgIEZUX1VJbnQgIGIgPSAwOworICAgICAgICAgIEZUX1VJbnQgIHIsIGcsIGI7CiAgICAgICAgICAgRlRfVUludCAgcDsKIAogCiAgICAgICAgICAgcCAgPSBsaW5lW3h4XTsKLSAgICAgICAgICByICs9IGZpbHRlcnNbMF1bMF0gKiBwOwotICAgICAgICAgIGcgKz0gZmlsdGVyc1swXVsxXSAqIHA7Ci0gICAgICAgICAgYiArPSBmaWx0ZXJzWzBdWzJdICogcDsKKyAgICAgICAgICByICA9IGZpbHRlcnNbMF1bMF0gKiBwOworICAgICAgICAgIGcgID0gZmlsdGVyc1swXVsxXSAqIHA7CisgICAgICAgICAgYiAgPSBmaWx0ZXJzWzBdWzJdICogcDsKIAogICAgICAgICAgIHAgID0gbGluZVt4eCArIDFdOwogICAgICAgICAgIHIgKz0gZmlsdGVyc1sxXVswXSAqIHA7CkBAIC0yMzcsMzEgKzIzNSwyNCBAQAogICAgIH0KICAgICBlbHNlIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViAmJiBoZWlnaHQgPj0gMyApCiAgICAgewotICAgICAgRlRfQnl0ZSogIGNvbHVtbiA9IGJpdG1hcC0+YnVmZmVyOworICAgICAgRlRfQnl0ZSogIGNvbHVtbiA9IG9yaWdpbjsKIAogCi0gICAgICAvKiB0YWtlIGNhcmUgb2YgYml0bWFwIGZsb3cgKi8KLSAgICAgIGlmICggYml0bWFwLT5waXRjaCA8IDAgKQotICAgICAgICBjb2x1bW4gLT0gYml0bWFwLT5waXRjaCAqIChGVF9JbnQpKCBiaXRtYXAtPnJvd3MgLSAxICk7Ci0KICAgICAgIGZvciAoIDsgd2lkdGggPiAwOyB3aWR0aC0tLCBjb2x1bW4rKyApCiAgICAgICB7Ci0gICAgICAgIEZUX0J5dGUqICBjb2wgICAgID0gY29sdW1uOwotICAgICAgICBGVF9CeXRlKiAgY29sX2VuZCA9IGNvbCArIChGVF9JbnQpaGVpZ2h0ICogcGl0Y2g7CisgICAgICAgIEZUX0J5dGUqICBjb2wgPSBjb2x1bW4gLSAyICogcGl0Y2g7CiAKIAotICAgICAgICBmb3IgKCA7IGNvbCA8IGNvbF9lbmQ7IGNvbCArPSAzICogcGl0Y2ggKQorICAgICAgICBmb3IgKCA7IGhlaWdodCA+IDA7IGhlaWdodCAtPSAzLCBjb2wgLT0gMyAqIHBpdGNoICkKICAgICAgICAgewotICAgICAgICAgIEZUX1VJbnQgIHIgPSAwOwotICAgICAgICAgIEZUX1VJbnQgIGcgPSAwOwotICAgICAgICAgIEZUX1VJbnQgIGIgPSAwOworICAgICAgICAgIEZUX1VJbnQgIHIsIGcsIGI7CiAgICAgICAgICAgRlRfVUludCAgcDsKIAogCiAgICAgICAgICAgcCAgPSBjb2xbMF07Ci0gICAgICAgICAgciArPSBmaWx0ZXJzWzBdWzBdICogcDsKLSAgICAgICAgICBnICs9IGZpbHRlcnNbMF1bMV0gKiBwOwotICAgICAgICAgIGIgKz0gZmlsdGVyc1swXVsyXSAqIHA7CisgICAgICAgICAgciAgPSBmaWx0ZXJzWzBdWzBdICogcDsKKyAgICAgICAgICBnICA9IGZpbHRlcnNbMF1bMV0gKiBwOworICAgICAgICAgIGIgID0gZmlsdGVyc1swXVsyXSAqIHA7CiAKICAgICAgICAgICBwICA9IGNvbFtwaXRjaF07CiAgICAgICAgICAgciArPSBmaWx0ZXJzWzFdWzBdICogcDsKQEAgLTI3NSw3ICsyNjYsNyBAQAogCiAgICAgICAgICAgY29sWzBdICAgICAgICAgPSAoRlRfQnl0ZSkoIHIgLyA2NTUzNiApOwogICAgICAgICAgIGNvbFtwaXRjaF0gICAgID0gKEZUX0J5dGUpKCBnIC8gNjU1MzYgKTsKLSAgICAgICAgICBjb2xbMiAqIHBpdGNoXSA9IChGVF9CeXRlKSggYiAvIDY1NTM2ICk7CisgICAgICAgICAgY29sW3BpdGNoICogMl0gPSAoRlRfQnl0ZSkoIGIgLyA2NTUzNiApOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQpAQCAtMjk2LDcgKzI4Nyw2IEBACiAKICAgICBmdF9tZW1jcHkoIGxpYnJhcnktPmxjZF93ZWlnaHRzLCB3ZWlnaHRzLCBGVF9MQ0RfRklMVEVSX0ZJVkVfVEFQUyApOwogICAgIGxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyA9IGZ0X2xjZF9maWx0ZXJfZmlyOwotICAgIGxpYnJhcnktPmxjZF9leHRyYSAgICAgICA9IDI7CiAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CkBAIC0zMTksNyArMzA5LDYgQEAKICAgICB7CiAgICAgY2FzZSBGVF9MQ0RfRklMVEVSX05PTkU6CiAgICAgICBsaWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmMgPSBOVUxMOwotICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMDsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBGVF9MQ0RfRklMVEVSX0RFRkFVTFQ6CkBAIC0zMjcsNyArMzE2LDYgQEAKICAgICAgICAgICAgICAgICAgZGVmYXVsdF93ZWlnaHRzLAogICAgICAgICAgICAgICAgICBGVF9MQ0RfRklMVEVSX0ZJVkVfVEFQUyApOwogICAgICAgbGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jID0gZnRfbGNkX2ZpbHRlcl9maXI7Ci0gICAgICBsaWJyYXJ5LT5sY2RfZXh0cmEgICAgICAgPSAyOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEZUX0xDRF9GSUxURVJfTElHSFQ6CkBAIC0zMzUsNyArMzIzLDYgQEAKICAgICAgICAgICAgICAgICAgbGlnaHRfd2VpZ2h0cywKICAgICAgICAgICAgICAgICAgRlRfTENEX0ZJTFRFUl9GSVZFX1RBUFMgKTsKICAgICAgIGxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyA9IGZ0X2xjZF9maWx0ZXJfZmlyOwotICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMjsKICAgICAgIGJyZWFrOwogCiAjaWZkZWYgVVNFX0xFR0FDWQpAQCAtMzQzLDcgKzMzMCw2IEBACiAgICAgY2FzZSBGVF9MQ0RfRklMVEVSX0xFR0FDWToKICAgICBjYXNlIEZUX0xDRF9GSUxURVJfTEVHQUNZMToKICAgICAgIGxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyA9IF9mdF9sY2RfZmlsdGVyX2xlZ2FjeTsKLSAgICAgIGxpYnJhcnktPmxjZF9leHRyYSAgICAgICA9IDA7CiAgICAgICBicmVhazsKIAogI2VuZGlmCkBAIC0zNTIsMjEgKzMzOCwyMSBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAgICAgfQogCi0gICAgbGlicmFyeS0+bGNkX2ZpbHRlciA9IGZpbHRlcjsKLQogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KIAogI2Vsc2UgLyogIUZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCiAKLSAgRlRfQkFTRSggdm9pZCApCi0gIGZ0X2xjZF9maWx0ZXJfZmlyKCBGVF9CaXRtYXAqICAgICAgICAgICBiaXRtYXAsCi0gICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICAgICBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgRlRfTGNkRml2ZVRhcEZpbHRlciAgd2VpZ2h0cyApCisgIC8qIGFkZCBwYWRkaW5nIGFjY29yZGluZyB0byBhY2NvbW1vZGF0ZSBvdXRsaW5lIHNoaWZ0cyAqLworICBGVF9CQVNFX0RFRiAodm9pZCkKKyAgZnRfbGNkX3BhZGRpbmcoIEZUX1BvcyogICAgICAgTWluLAorICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICBNYXgsCisgICAgICAgICAgICAgICAgICBGVF9HbHlwaFNsb3QgIHNsb3QgKQogICB7Ci0gICAgRlRfVU5VU0VEKCBiaXRtYXAgKTsKLSAgICBGVF9VTlVTRUQoIG1vZGUgKTsKLSAgICBGVF9VTlVTRUQoIHdlaWdodHMgKTsKKyAgICBGVF9VTlVTRUQoIHNsb3QgKTsKKworICAgICpNaW4gLT0gMjE7CisgICAgKk1heCArPSAyMTsKICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bWFjLmMgYi9zcmMvYmFzZS9mdG1hYy5jCmluZGV4IGZiNzA2MDYuLmZkNGMwY2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0bWFjLmMKKysrIGIvc3JjL2Jhc2UvZnRtYWMuYwpAQCAtOCw3ICs4LDcgQEAKIC8qICBUaGlzIGZpbGUgaXMgZm9yIE1hYyBPUyBYIG9ubHk7IHNlZSBidWlsZHMvbWFjL2Z0b2xkbWFjLmMgZm9yICAgICAgICAgICovCiAvKiAgY2xhc3NpYyBwbGF0Zm9ybXMgYnVpbHQgYnkgTVBXLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzEsNiArNzEsOSBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlICJmdGJhc2UuaCIKIAorCisjaWZkZWYgRlRfTUFDSU5UT1NICisKICAgLyogVGhpcyBpcyBmb3IgTWFjIE9TIFguICBXaXRob3V0IHJlZGVmaW5pdGlvbiwgT1NfSU5MSU5FICovCiAgIC8qIGV4cGFuZHMgdG8gYHN0YXRpYyBpbmxpbmUnIHdoaWNoIGRvZXNuJ3Qgc3Vydml2ZSB0aGUgICAqLwogICAvKiAtYW5zaSBjb21waWxhdGlvbiBmbGFnIG9mIEdDQy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExOCw4ICsxMjEsNiBAQAogI2VuZGlmCiAKIAotI2lmZGVmIEZUX01BQ0lOVE9TSAotCiAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBiZWNhdXNlIEZTU3BlYyBpcyBkZXByZWNhdGVkIGluIE1hYyBPUyBYICAqLwogICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCiAgIEZUX0dldEZpbGVfRnJvbV9NYWNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLApAQCAtMTAwNCw3ICsxMDA1LDcgQEAKICAgLyogICAgYWNjZXB0cyBhbiBGU1JlZiBpbnN0ZWFkIG9mIGEgcGF0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBDYXJib24gZGF0YSB0eXBlcyAoRlNSZWYpICAgICAgICAgKi8KLSAgLyogYXJlIG5vdCBjcm9zcy1wbGF0Zm9ybSwgYW5kIHRodXMgbm90IHN1aXRhYmxlIGZvciB0aGUgZnJlZXR5cGUgQVBJLiAgICovCisgIC8qIGFyZSBub3QgY3Jvc3MtcGxhdGZvcm0sIGFuZCB0aHVzIG5vdCBzdWl0YWJsZSBmb3IgdGhlIEZyZWVUeXBlIEFQSS4gICAqLwogICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCiAgIEZUX05ld19GYWNlX0Zyb21fRlNSZWYoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlNSZWYqICByZWYsCkBAIC0xMDc2LDcgKzEwNzcsMTIgQEAKICNlbmRpZgogICB9CiAKLSNlbmRpZiAvKiBGVF9NQUNJTlRPU0ggKi8KKyNlbHNlIC8qICFGVF9NQUNJTlRPU0ggKi8KKworICAvKiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5IHNvdXJjZSBmaWxlcyAqLworICB0eXBlZGVmIGludCAgX2Z0X21hY19kdW1teTsKKworI2VuZGlmIC8qICFGVF9NQUNJTlRPU0ggKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bW0uYyBiL3NyYy9iYXNlL2Z0bW0uYwppbmRleCA2YWFhNWY4Li44MDA0NDFiIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG1tLmMKKysrIGIvc3JjL2Jhc2UvZnRtbS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE11bHRpcGxlIE1hc3RlciBmb250IHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNDgsNiArMTQ4LDI1IEBACiAgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtbS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9Eb25lX01NX1ZhciggRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgIEZUX01NX1ZhciogIGFtYXN0ZXIgKQorICB7CisgICAgRlRfTWVtb3J5ICBtZW1vcnk7CisKKworICAgIGlmICggIWxpYnJhcnkgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0xpYnJhcnlfSGFuZGxlICk7CisKKyAgICBtZW1vcnkgPSBsaWJyYXJ5LT5tZW1vcnk7CisgICAgRlRfRlJFRSggYW1hc3RlciApOworCisgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgfQorCisKKyAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdG1tLmggKi8KKworICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCiAgIEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogIGNvb3JkcyApCkBAIC0xNTgsNyArMTc3LDcgQEAKIAogICAgIC8qIGNoZWNrIG9mIGBmYWNlJyBkZWxheWVkIHRvIGBmdF9mYWNlX2dldF9tbV9zZXJ2aWNlJyAqLwogCi0gICAgaWYgKCAhY29vcmRzICkKKyAgICBpZiAoIG51bV9jb29yZHMgJiYgIWNvb3JkcyApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIAogICAgIGVycm9yID0gZnRfZmFjZV9nZXRfbW1fc2VydmljZSggZmFjZSwgJnNlcnZpY2UgKTsKQEAgLTE5NCw3ICsyMTMsNyBAQAogCiAgICAgLyogY2hlY2sgb2YgYGZhY2UnIGRlbGF5ZWQgdG8gYGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UnICovCiAKLSAgICBpZiAoICFjb29yZHMgKQorICAgIGlmICggbnVtX2Nvb3JkcyAmJiAhY29vcmRzICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogCiAgICAgZXJyb3IgPSBmdF9mYWNlX2dldF9tbV9zZXJ2aWNlKCBmYWNlLCAmc2VydmljZV9tbSApOwpAQCAtMjAzLDE0ICsyMjIsMTcgQEAKICAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAgICAgICBpZiAoIHNlcnZpY2VfbW0tPnNldF92YXJfZGVzaWduICkKICAgICAgICAgZXJyb3IgPSBzZXJ2aWNlX21tLT5zZXRfdmFyX2Rlc2lnbiggZmFjZSwgbnVtX2Nvb3JkcywgY29vcmRzICk7CisKKyAgICAgIC8qIGludGVybmFsIGVycm9yIGNvZGUgLTEgbWVhbnMgYG5vIGNoYW5nZSc7IHdlIGNhbiBleGl0IGltbWVkaWF0ZWx5ICovCisgICAgICBpZiAoIGVycm9yID09IC0xICkKKyAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgICB9CiAKICAgICBpZiAoICFlcnJvciApCi0gICAgICBlcnJvciA9IGZ0X2ZhY2VfZ2V0X212YXJfc2VydmljZSggZmFjZSwgJnNlcnZpY2VfbXZhciApOwotCi0gICAgaWYgKCAhZXJyb3IgKQogICAgIHsKLSAgICAgIGlmICggc2VydmljZV9tdmFyLT5tZXRyaWNzX2FkanVzdCApCisgICAgICAodm9pZClmdF9mYWNlX2dldF9tdmFyX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlX212YXIgKTsKKworICAgICAgaWYgKCBzZXJ2aWNlX212YXIgJiYgc2VydmljZV9tdmFyLT5tZXRyaWNzX2FkanVzdCApCiAgICAgICAgIHNlcnZpY2VfbXZhci0+bWV0cmljc19hZGp1c3QoIGZhY2UgKTsKICAgICB9CiAKQEAgLTI2Nyw3ICsyODksNyBAQAogCiAgICAgLyogY2hlY2sgb2YgYGZhY2UnIGRlbGF5ZWQgdG8gYGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UnICovCiAKLSAgICBpZiAoICFjb29yZHMgKQorICAgIGlmICggbnVtX2Nvb3JkcyAmJiAhY29vcmRzICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwogCiAgICAgZXJyb3IgPSBmdF9mYWNlX2dldF9tbV9zZXJ2aWNlKCBmYWNlLCAmc2VydmljZV9tbSApOwpAQCAtMjc2LDE0ICsyOTgsMTcgQEAKICAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAgICAgICBpZiAoIHNlcnZpY2VfbW0tPnNldF9tbV9ibGVuZCApCiAgICAgICAgIGVycm9yID0gc2VydmljZV9tbS0+c2V0X21tX2JsZW5kKCBmYWNlLCBudW1fY29vcmRzLCBjb29yZHMgKTsKKworICAgICAgLyogaW50ZXJuYWwgZXJyb3IgY29kZSAtMSBtZWFucyBgbm8gY2hhbmdlJzsgd2UgY2FuIGV4aXQgaW1tZWRpYXRlbHkgKi8KKyAgICAgIGlmICggZXJyb3IgPT0gLTEgKQorICAgICAgICByZXR1cm4gRlRfRXJyX09rOwogICAgIH0KIAogICAgIGlmICggIWVycm9yICkKLSAgICAgIGVycm9yID0gZnRfZmFjZV9nZXRfbXZhcl9zZXJ2aWNlKCBmYWNlLCAmc2VydmljZV9tdmFyICk7Ci0KLSAgICBpZiAoICFlcnJvciApCiAgICAgewotICAgICAgaWYgKCBzZXJ2aWNlX212YXItPm1ldHJpY3NfYWRqdXN0ICkKKyAgICAgICh2b2lkKWZ0X2ZhY2VfZ2V0X212YXJfc2VydmljZSggZmFjZSwgJnNlcnZpY2VfbXZhciApOworCisgICAgICBpZiAoIHNlcnZpY2VfbXZhciAmJiBzZXJ2aWNlX212YXItPm1ldHJpY3NfYWRqdXN0ICkKICAgICAgICAgc2VydmljZV9tdmFyLT5tZXRyaWNzX2FkanVzdCggZmFjZSApOwogICAgIH0KIApAQCAtMzE1LDcgKzM0MCw3IEBACiAKICAgICAvKiBjaGVjayBvZiBgZmFjZScgZGVsYXllZCB0byBgZnRfZmFjZV9nZXRfbW1fc2VydmljZScgKi8KIAotICAgIGlmICggIWNvb3JkcyApCisgICAgaWYgKCBudW1fY29vcmRzICYmICFjb29yZHMgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKICAgICBlcnJvciA9IGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlX21tICk7CkBAIC0zMjQsMTQgKzM0OSwxNyBAQAogICAgICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKICAgICAgIGlmICggc2VydmljZV9tbS0+c2V0X21tX2JsZW5kICkKICAgICAgICAgZXJyb3IgPSBzZXJ2aWNlX21tLT5zZXRfbW1fYmxlbmQoIGZhY2UsIG51bV9jb29yZHMsIGNvb3JkcyApOworCisgICAgICAvKiBpbnRlcm5hbCBlcnJvciBjb2RlIC0xIG1lYW5zIGBubyBjaGFuZ2UnOyB3ZSBjYW4gZXhpdCBpbW1lZGlhdGVseSAqLworICAgICAgaWYgKCBlcnJvciA9PSAtMSApCisgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAgICAgfQogCiAgICAgaWYgKCAhZXJyb3IgKQotICAgICAgZXJyb3IgPSBmdF9mYWNlX2dldF9tdmFyX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlX212YXIgKTsKLQotICAgIGlmICggIWVycm9yICkKICAgICB7Ci0gICAgICBpZiAoIHNlcnZpY2VfbXZhci0+bWV0cmljc19hZGp1c3QgKQorICAgICAgKHZvaWQpZnRfZmFjZV9nZXRfbXZhcl9zZXJ2aWNlKCBmYWNlLCAmc2VydmljZV9tdmFyICk7CisKKyAgICAgIGlmICggc2VydmljZV9tdmFyICYmIHNlcnZpY2VfbXZhci0+bWV0cmljc19hZGp1c3QgKQogICAgICAgICBzZXJ2aWNlX212YXItPm1ldHJpY3NfYWRqdXN0KCBmYWNlICk7CiAgICAgfQogCkBAIC00MDUsNCArNDMzLDc2IEBACiAgIH0KIAogCisgIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRtbS5oICovCisKKyAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQorICBGVF9HZXRfVmFyX0F4aXNfRmxhZ3MoIEZUX01NX1ZhciogIG1hc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBheGlzX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQqICAgIGZsYWdzICkKKyAgeworICAgIEZUX1VTaG9ydCogIGF4aXNfZmxhZ3M7CisKKworICAgIGlmICggIW1hc3RlciB8fCAhZmxhZ3MgKQorICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICBpZiAoIGF4aXNfaW5kZXggPj0gbWFzdGVyLT5udW1fYXhpcyApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgIC8qIHRoZSBheGlzIGZsYWdzIGFycmF5IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGRhdGEgb2YgYG1hc3RlcicgKi8KKyAgICBheGlzX2ZsYWdzID0gKEZUX1VTaG9ydCopJiggbWFzdGVyWzFdICk7CisgICAgKmZsYWdzICAgICA9IGF4aXNfZmxhZ3NbYXhpc19pbmRleF07CisKKyAgICByZXR1cm4gRlRfRXJyX09rOworICB9CisKKworICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bW0uaCAqLworCisgIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKKyAgRlRfU2V0X05hbWVkX0luc3RhbmNlKCBGVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGluc3RhbmNlX2luZGV4ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzICAgICAgIHNlcnZpY2VfbW0gICA9IE5VTEw7CisgICAgRlRfU2VydmljZV9NZXRyaWNzVmFyaWF0aW9ucyAgc2VydmljZV9tdmFyID0gTlVMTDsKKworCisgICAgLyogY2hlY2sgb2YgYGZhY2UnIGRlbGF5ZWQgdG8gYGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UnICovCisKKyAgICBlcnJvciA9IGZ0X2ZhY2VfZ2V0X21tX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlX21tICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgICBpZiAoIHNlcnZpY2VfbW0tPnNldF9pbnN0YW5jZSApCisgICAgICAgIGVycm9yID0gc2VydmljZV9tbS0+c2V0X2luc3RhbmNlKCBmYWNlLCBpbnN0YW5jZV9pbmRleCApOworICAgIH0KKworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICAodm9pZClmdF9mYWNlX2dldF9tdmFyX3NlcnZpY2UoIGZhY2UsICZzZXJ2aWNlX212YXIgKTsKKworICAgICAgaWYgKCBzZXJ2aWNlX212YXIgJiYgc2VydmljZV9tdmFyLT5tZXRyaWNzX2FkanVzdCApCisgICAgICAgIHNlcnZpY2VfbXZhci0+bWV0cmljc19hZGp1c3QoIGZhY2UgKTsKKyAgICB9CisKKyAgICAvKiBlbmZvcmNlIHJlY29tcHV0YXRpb24gb2YgYXV0by1oaW50aW5nIGRhdGEgKi8KKyAgICBpZiAoICFlcnJvciAmJiBmYWNlLT5hdXRvaGludC5maW5hbGl6ZXIgKQorICAgIHsKKyAgICAgIGZhY2UtPmF1dG9oaW50LmZpbmFsaXplciggZmFjZS0+YXV0b2hpbnQuZGF0YSApOworICAgICAgZmFjZS0+YXV0b2hpbnQuZGF0YSA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGZhY2UtPmZhY2VfaW5kZXggID0gKCBpbnN0YW5jZV9pbmRleCA8PCAxNiApICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICggZmFjZS0+ZmFjZV9pbmRleCAmIDB4RkZGRkwgKTsKKyAgICAgIGZhY2UtPmZhY2VfZmxhZ3MgJj0gfkZUX0ZBQ0VfRkxBR19WQVJJQVRJT047CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKwogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdG9ianMuYyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCmluZGV4IGY4NjM2OWUuLjhkMDdlMzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0b2Jqcy5jCisrKyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwcml2YXRlIGJhc2UgY2xhc3NlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOSwxMiArMTksMTYgQEAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfTElTVF9ICiAjaW5jbHVkZSBGVF9PVVRMSU5FX0gKKyNpbmNsdWRlIEZUX0ZPTlRfRk9STUFUU19ICisKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUkZPUktfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSCAgICAvKiBmb3IgU0ZOVF9Mb2FkX1RhYmxlX0Z1bmMgKi8KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSCAgICAgICAgICAgIC8qIGZvciBTRk5UX0xvYWRfVGFibGVfRnVuYyAqLworI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSCAgLyogZm9yIFBTX0RyaXZlciAgICAgICAgICAgICovCisKICNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICkBAIC0zNyw4ICs0MSw3IEBACiAjaW5jbHVkZSBGVF9TRVJWSUNFX0tFUk5JTkdfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9UUlVFVFlQRV9FTkdJTkVfSAogCi0jaW5jbHVkZSBGVF9BVVRPSElOVEVSX0gKLSNpbmNsdWRlIEZUX0NGRl9EUklWRVJfSAorI2luY2x1ZGUgRlRfRFJJVkVSX0gKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCiAjaW5jbHVkZSAiZnRiYXNlLmgiCkBAIC0zMjgsNiArMzMxLDEzOCBAQAogCiAKICAgRlRfQkFTRV9ERUYoIHZvaWQgKQorICBmdF9nbHlwaHNsb3RfcHJlc2V0X2JpdG1hcCggRlRfR2x5cGhTbG90ICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBvcmlnaW4gKQorICB7CisgICAgRlRfT3V0bGluZSogIG91dGxpbmUgPSAmc2xvdC0+b3V0bGluZTsKKyAgICBGVF9CaXRtYXAqICAgYml0bWFwICA9ICZzbG90LT5iaXRtYXA7CisKKyAgICBGVF9QaXhlbF9Nb2RlICBwaXhlbF9tb2RlOworCisgICAgRlRfQkJveCAgY2JveDsKKyAgICBGVF9Qb3MgICB4X3NoaWZ0ID0gMDsKKyAgICBGVF9Qb3MgICB5X3NoaWZ0ID0gMDsKKyAgICBGVF9Qb3MgICB4X2xlZnQsIHlfdG9wOworICAgIEZUX1BvcyAgIHdpZHRoLCBoZWlnaHQsIHBpdGNoOworCisKKyAgICBpZiAoIHNsb3QtPmludGVybmFsICYmICggc2xvdC0+aW50ZXJuYWwtPmZsYWdzICYgRlRfR0xZUEhfT1dOX0JJVE1BUCApICkKKyAgICAgIHJldHVybjsKKworICAgIGlmICggb3JpZ2luICkKKyAgICB7CisgICAgICB4X3NoaWZ0ID0gb3JpZ2luLT54OworICAgICAgeV9zaGlmdCA9IG9yaWdpbi0+eTsKKyAgICB9CisKKyAgICAvKiBjb21wdXRlIHRoZSBjb250cm9sIGJveCwgYW5kIGdyaWQtZml0IGl0LCAqLworICAgIC8qIHRha2luZyBpbnRvIGFjY291bnQgdGhlIG9yaWdpbiBzaGlmdCAgICAgICovCisgICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmNib3ggKTsKKworICAgIGNib3gueE1pbiArPSB4X3NoaWZ0OworICAgIGNib3gueU1pbiArPSB5X3NoaWZ0OworICAgIGNib3gueE1heCArPSB4X3NoaWZ0OworICAgIGNib3gueU1heCArPSB5X3NoaWZ0OworCisgICAgc3dpdGNoICggbW9kZSApCisgICAgeworICAgIGNhc2UgRlRfUkVOREVSX01PREVfTU9OTzoKKyAgICAgIHBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX01PTk87CisjaWYgMQorICAgICAgLyogdW5kb2N1bWVudGVkIGJ1dCBjb25maXJtZWQ6IGJib3ggdmFsdWVzIGdldCByb3VuZGVkICAgICovCisgICAgICAvKiB1bmxlc3MgdGhlIHJvdW5kZWQgYm94IGNhbiBjb2xsYXBzZSBmb3IgYSBuYXJyb3cgZ2x5cGggKi8KKyAgICAgIGlmICggY2JveC54TWF4IC0gY2JveC54TWluIDwgNjQgKQorICAgICAgeworICAgICAgICBjYm94LnhNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gueE1pbiApOworICAgICAgICBjYm94LnhNYXggPSBGVF9QSVhfQ0VJTF9MT05HKCBjYm94LnhNYXggKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgY2JveC54TWluID0gRlRfUElYX1JPVU5EX0xPTkcoIGNib3gueE1pbiApOworICAgICAgICBjYm94LnhNYXggPSBGVF9QSVhfUk9VTkRfTE9ORyggY2JveC54TWF4ICk7CisgICAgICB9CisKKyAgICAgIGlmICggY2JveC55TWF4IC0gY2JveC55TWluIDwgNjQgKQorICAgICAgeworICAgICAgICBjYm94LnlNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gueU1pbiApOworICAgICAgICBjYm94LnlNYXggPSBGVF9QSVhfQ0VJTF9MT05HKCBjYm94LnlNYXggKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgY2JveC55TWluID0gRlRfUElYX1JPVU5EX0xPTkcoIGNib3gueU1pbiApOworICAgICAgICBjYm94LnlNYXggPSBGVF9QSVhfUk9VTkRfTE9ORyggY2JveC55TWF4ICk7CisgICAgICB9CisjZWxzZQorICAgICAgY2JveC54TWluID0gRlRfUElYX0ZMT09SKCBjYm94LnhNaW4gKTsKKyAgICAgIGNib3gueU1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC55TWluICk7CisgICAgICBjYm94LnhNYXggPSBGVF9QSVhfQ0VJTF9MT05HKCBjYm94LnhNYXggKTsKKyAgICAgIGNib3gueU1heCA9IEZUX1BJWF9DRUlMX0xPTkcoIGNib3gueU1heCApOworI2VuZGlmCisgICAgICBicmVhazsKKworICAgIGNhc2UgRlRfUkVOREVSX01PREVfTENEOgorICAgICAgcGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTENEOworICAgICAgZnRfbGNkX3BhZGRpbmcoICZjYm94LnhNaW4sICZjYm94LnhNYXgsIHNsb3QgKTsKKyAgICAgIGdvdG8gUm91bmQ7CisKKyAgICBjYXNlIEZUX1JFTkRFUl9NT0RFX0xDRF9WOgorICAgICAgcGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTENEX1Y7CisgICAgICBmdF9sY2RfcGFkZGluZyggJmNib3gueU1pbiwgJmNib3gueU1heCwgc2xvdCApOworICAgICAgZ290byBSb3VuZDsKKworICAgIGNhc2UgRlRfUkVOREVSX01PREVfTk9STUFMOgorICAgIGNhc2UgRlRfUkVOREVSX01PREVfTElHSFQ6CisgICAgZGVmYXVsdDoKKyAgICAgIHBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0dSQVk7CisgICAgUm91bmQ6CisgICAgICBjYm94LnhNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gueE1pbiApOworICAgICAgY2JveC55TWluID0gRlRfUElYX0ZMT09SKCBjYm94LnlNaW4gKTsKKyAgICAgIGNib3gueE1heCA9IEZUX1BJWF9DRUlMX0xPTkcoIGNib3gueE1heCApOworICAgICAgY2JveC55TWF4ID0gRlRfUElYX0NFSUxfTE9ORyggY2JveC55TWF4ICk7CisgICAgfQorCisgICAgeF9zaGlmdCA9IFNVQl9MT05HKCB4X3NoaWZ0LCBjYm94LnhNaW4gKTsKKyAgICB5X3NoaWZ0ID0gU1VCX0xPTkcoIHlfc2hpZnQsIGNib3gueU1pbiApOworCisgICAgeF9sZWZ0ID0gY2JveC54TWluID4+IDY7CisgICAgeV90b3AgID0gY2JveC55TWF4ID4+IDY7CisKKyAgICB3aWR0aCAgPSAoIChGVF9VTG9uZyljYm94LnhNYXggLSAoRlRfVUxvbmcpY2JveC54TWluICkgPj4gNjsKKyAgICBoZWlnaHQgPSAoIChGVF9VTG9uZyljYm94LnlNYXggLSAoRlRfVUxvbmcpY2JveC55TWluICkgPj4gNjsKKworICAgIHN3aXRjaCAoIHBpeGVsX21vZGUgKQorICAgIHsKKyAgICBjYXNlIEZUX1BJWEVMX01PREVfTU9OTzoKKyAgICAgIHBpdGNoID0gKCAoIHdpZHRoICsgMTUgKSA+PiA0ICkgPDwgMTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0xDRDoKKyAgICAgIHdpZHRoICo9IDM7CisgICAgICBwaXRjaCAgPSBGVF9QQURfQ0VJTCggd2lkdGgsIDQgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGVF9QSVhFTF9NT0RFX0xDRF9WOgorICAgICAgaGVpZ2h0ICo9IDM7CisgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKworICAgIGNhc2UgRlRfUElYRUxfTU9ERV9HUkFZOgorICAgIGRlZmF1bHQ6CisgICAgICBwaXRjaCA9IHdpZHRoOworICAgIH0KKworICAgIHNsb3QtPmJpdG1hcF9sZWZ0ID0gKEZUX0ludCl4X2xlZnQ7CisgICAgc2xvdC0+Yml0bWFwX3RvcCAgPSAoRlRfSW50KXlfdG9wOworCisgICAgYml0bWFwLT5waXhlbF9tb2RlID0gKHVuc2lnbmVkIGNoYXIpcGl4ZWxfbW9kZTsKKyAgICBiaXRtYXAtPm51bV9ncmF5cyAgPSAyNTY7CisgICAgYml0bWFwLT53aWR0aCAgICAgID0gKHVuc2lnbmVkIGludCl3aWR0aDsKKyAgICBiaXRtYXAtPnJvd3MgICAgICAgPSAodW5zaWduZWQgaW50KWhlaWdodDsKKyAgICBiaXRtYXAtPnBpdGNoICAgICAgPSBwaXRjaDsKKyAgfQorCisKKyAgRlRfQkFTRV9ERUYoIHZvaWQgKQogICBmdF9nbHlwaHNsb3Rfc2V0X2JpdG1hcCggRlRfR2x5cGhTbG90ICBzbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICBidWZmZXIgKQogICB7CkBAIC01NzksMzQgKzcxNCw0MiBAQAogICAgIGlmICggdmVydGljYWwgKQogICAgIHsKICAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWCA9IEZUX1BJWF9GTE9PUiggbWV0cmljcy0+aG9yaUJlYXJpbmdYICk7Ci0gICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSBGVF9QSVhfQ0VJTCAoIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSApOworICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdZID0gRlRfUElYX0NFSUxfTE9ORyggbWV0cmljcy0+aG9yaUJlYXJpbmdZICk7CiAKLSAgICAgIHJpZ2h0ICA9IEZUX1BJWF9DRUlMKCBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggKyBtZXRyaWNzLT53aWR0aCApOwotICAgICAgYm90dG9tID0gRlRfUElYX0NFSUwoIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSArIG1ldHJpY3MtPmhlaWdodCApOworICAgICAgcmlnaHQgID0gRlRfUElYX0NFSUxfTE9ORyggQUREX0xPTkcoIG1ldHJpY3MtPnZlcnRCZWFyaW5nWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT53aWR0aCApICk7CisgICAgICBib3R0b20gPSBGVF9QSVhfQ0VJTF9MT05HKCBBRERfTE9ORyggbWV0cmljcy0+dmVydEJlYXJpbmdZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPmhlaWdodCApICk7CiAKICAgICAgIG1ldHJpY3MtPnZlcnRCZWFyaW5nWCA9IEZUX1BJWF9GTE9PUiggbWV0cmljcy0+dmVydEJlYXJpbmdYICk7CiAgICAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1kgPSBGVF9QSVhfRkxPT1IoIG1ldHJpY3MtPnZlcnRCZWFyaW5nWSApOwogCi0gICAgICBtZXRyaWNzLT53aWR0aCAgPSByaWdodCAtIG1ldHJpY3MtPnZlcnRCZWFyaW5nWDsKLSAgICAgIG1ldHJpY3MtPmhlaWdodCA9IGJvdHRvbSAtIG1ldHJpY3MtPnZlcnRCZWFyaW5nWTsKKyAgICAgIG1ldHJpY3MtPndpZHRoICA9IFNVQl9MT05HKCByaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggKTsKKyAgICAgIG1ldHJpY3MtPmhlaWdodCA9IFNVQl9MT05HKCBib3R0b20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdZICk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICBtZXRyaWNzLT52ZXJ0QmVhcmluZ1ggPSBGVF9QSVhfRkxPT1IoIG1ldHJpY3MtPnZlcnRCZWFyaW5nWCApOwogICAgICAgbWV0cmljcy0+dmVydEJlYXJpbmdZID0gRlRfUElYX0ZMT09SKCBtZXRyaWNzLT52ZXJ0QmVhcmluZ1kgKTsKIAotICAgICAgcmlnaHQgID0gRlRfUElYX0NFSUwgKCBtZXRyaWNzLT5ob3JpQmVhcmluZ1ggKyBtZXRyaWNzLT53aWR0aCApOwotICAgICAgYm90dG9tID0gRlRfUElYX0ZMT09SKCBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgLSBtZXRyaWNzLT5oZWlnaHQgKTsKKyAgICAgIHJpZ2h0ICA9IEZUX1BJWF9DRUlMX0xPTkcoIEFERF9MT05HKCBtZXRyaWNzLT5ob3JpQmVhcmluZ1gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+d2lkdGggKSApOworICAgICAgYm90dG9tID0gRlRfUElYX0ZMT09SKCBTVUJfTE9ORyggbWV0cmljcy0+aG9yaUJlYXJpbmdZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+aGVpZ2h0ICkgKTsKIAogICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdYID0gRlRfUElYX0ZMT09SKCBtZXRyaWNzLT5ob3JpQmVhcmluZ1ggKTsKLSAgICAgIG1ldHJpY3MtPmhvcmlCZWFyaW5nWSA9IEZUX1BJWF9DRUlMICggbWV0cmljcy0+aG9yaUJlYXJpbmdZICk7CisgICAgICBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgPSBGVF9QSVhfQ0VJTF9MT05HKCBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgKTsKIAotICAgICAgbWV0cmljcy0+d2lkdGggID0gcmlnaHQgLSBtZXRyaWNzLT5ob3JpQmVhcmluZ1g7Ci0gICAgICBtZXRyaWNzLT5oZWlnaHQgPSBtZXRyaWNzLT5ob3JpQmVhcmluZ1kgLSBib3R0b207CisgICAgICBtZXRyaWNzLT53aWR0aCAgPSBTVUJfTE9ORyggcmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+aG9yaUJlYXJpbmdYICk7CisgICAgICBtZXRyaWNzLT5oZWlnaHQgPSBTVUJfTE9ORyggbWV0cmljcy0+aG9yaUJlYXJpbmdZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSApOwogICAgIH0KIAotICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gRlRfUElYX1JPVU5EKCBtZXRyaWNzLT5ob3JpQWR2YW5jZSApOwotICAgIG1ldHJpY3MtPnZlcnRBZHZhbmNlID0gRlRfUElYX1JPVU5EKCBtZXRyaWNzLT52ZXJ0QWR2YW5jZSApOworICAgIG1ldHJpY3MtPmhvcmlBZHZhbmNlID0gRlRfUElYX1JPVU5EX0xPTkcoIG1ldHJpY3MtPmhvcmlBZHZhbmNlICk7CisgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgPSBGVF9QSVhfUk9VTkRfTE9ORyggbWV0cmljcy0+dmVydEFkdmFuY2UgKTsKICAgfQogI2VuZGlmIC8qIEdSSURfRklUX01FVFJJQ1MgKi8KIApAQCAtNjYxLDkgKzgwNCwxMyBAQAogICAgICAqIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gYXV0by1oaW50IG9yIG5vdC4KICAgICAgKiBUaGUgZ2VuZXJhbCBydWxlcyBhcmU6CiAgICAgICoKLSAgICAgKiAtIERvIG9ubHkgYXV0by1oaW50aW5nIGlmIHdlIGhhdmUgYSBoaW50ZXIgbW9kdWxlLCBhIHNjYWxhYmxlIGZvbnQKLSAgICAgKiAgIGZvcm1hdCBkZWFsaW5nIHdpdGggb3V0bGluZXMsIGFuZCBubyB0cmFuc2Zvcm1zIGV4Y2VwdCBzaW1wbGUKLSAgICAgKiAgIHNsYW50cyBhbmQvb3Igcm90YXRpb25zIGJ5IGludGVnZXIgbXVsdGlwbGVzIG9mIDkwIGRlZ3JlZXMuCisgICAgICogLSBEbyBvbmx5IGF1dG8taGludGluZyBpZiB3ZSBoYXZlCisgICAgICoKKyAgICAgKiAgIC0gYSBoaW50ZXIgbW9kdWxlLAorICAgICAqICAgLSBhIHNjYWxhYmxlIGZvbnQgZm9ybWF0IGRlYWxpbmcgd2l0aCBvdXRsaW5lcywKKyAgICAgKiAgIC0gbm90IGEgdHJpY2t5IGZvbnQsIGFuZAorICAgICAqICAgLSBubyB0cmFuc2Zvcm1zIGV4Y2VwdCBzaW1wbGUgc2xhbnRzIGFuZC9vciByb3RhdGlvbnMgYnkKKyAgICAgKiAgICAgaW50ZWdlciBtdWx0aXBsZXMgb2YgOTAgZGVncmVlcy4KICAgICAgKgogICAgICAqIC0gVGhlbiwgYXV0by1oaW50IGlmIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgaXMgc2V0IG9yIGlmIHdlIGRvbid0CiAgICAgICogICBoYXZlIGEgbmF0aXZlIGZvbnQgaGludGVyLgpAQCAtNjkzLDggKzg0MCwxNSBAQAogICAgICAgZWxzZQogICAgICAgewogICAgICAgICBGVF9SZW5kZXJfTW9kZSAgbW9kZSA9IEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKTsKKyAgICAgICAgRlRfQm9vbCAgICAgICAgIGlzX2xpZ2h0X3R5cGUxOwogCiAKKyAgICAgICAgLyogb25seSB0aGUgbmV3IEFkb2JlIGVuZ2luZSAoZm9yIGJvdGggQ0ZGIGFuZCBUeXBlIDEpIGlzIGBsaWdodCc7ICovCisgICAgICAgIC8qIHdlIHVzZSBgc3Ryc3RyJyB0byBjYXRjaCBib3RoIGBUeXBlIDEnIGFuZCBgQ0lEIFR5cGUgMScgICAgICAgICAqLworICAgICAgICBpc19saWdodF90eXBlMSA9CisgICAgICAgICAgZnRfc3Ryc3RyKCBGVF9HZXRfRm9udF9Gb3JtYXQoIGZhY2UgKSwgIlR5cGUgMSIgKSAhPSBOVUxMICAgJiYKKyAgICAgICAgICAoKFBTX0RyaXZlcilkcml2ZXIpLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9ISU5USU5HX0FET0JFOworCiAgICAgICAgIC8qIHRoZSBjaGVjayBmb3IgYG51bV9sb2NhdGlvbnMnIGFzc3VyZXMgdGhhdCB3ZSBhY3R1YWxseSAgICAqLwogICAgICAgICAvKiB0ZXN0IGZvciBpbnN0cnVjdGlvbnMgaW4gYSBUVEYgYW5kIG5vdCBpbiBhIENGRi1iYXNlZCBPVEYgKi8KICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03MDIsOCArODU2LDkgQEAKICAgICAgICAgLyogY2hlY2sgdGhlIHNpemUgb2YgdGhlIGBmcGdtJyBhbmQgYHByZXAnIHRhYmxlcywgdG9vIC0tICAgICovCiAgICAgICAgIC8qIHRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlcmUgZG9uJ3QgZXhpc3QgcmVhbCBUVEZzIHdoZXJlICAqLwogICAgICAgICAvKiBib3RoIGBmcGdtJyBhbmQgYHByZXAnIHRhYmxlcyBhcmUgbWlzc2luZyAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgaWYgKCAoIG1vZGUgPT0gRlRfUkVOREVSX01PREVfTElHSFQgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgICFGVF9EUklWRVJfSElOVFNfTElHSFRMWSggZHJpdmVyICkgKSAgICAgICAgICAgICB8fAorICAgICAgICBpZiAoICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MSUdIVCAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICggIUZUX0RSSVZFUl9ISU5UU19MSUdIVExZKCBkcml2ZXIgKSAmJgorICAgICAgICAgICAgICAgICAhaXNfbGlnaHRfdHlwZTEgICAgICAgICAgICAgICAgICAgICkgKSAgICAgICAgIHx8CiAgICAgICAgICAgICAgKCBGVF9JU19TRk5UKCBmYWNlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICB0dGZhY2UtPm51bV9sb2NhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICB0dGZhY2UtPm1heF9wcm9maWxlLm1heFNpemVPZkluc3RydWN0aW9ucyA9PSAwICYmCkBAIC03MjMsOCArODc4LDggQEAKICAgICAgIC8qIFhYWDogVGhpcyBpcyByZWFsbHkgYSB0ZW1wb3JhcnkgaGFjayB0aGF0IHNob3VsZCBkaXNhcHBlYXIgKi8KICAgICAgIC8qICAgICAgcHJvbXB0bHkgd2l0aCBGcmVlVHlwZSAyLjEhICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIGlmICggRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkgICAgICAgICAgICAgJiYKLSAgICAgICAgICAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX0JJVE1BUCApID09IDAgKQorICAgICAgaWYgKCBGVF9IQVNfRklYRURfU0laRVMoIGZhY2UgKSAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19CSVRNQVAgKSA9PSAwICkKICAgICAgIHsKICAgICAgICAgZXJyb3IgPSBkcml2ZXItPmNsYXp6LT5sb2FkX2dseXBoKCBzbG90LCBmYWNlLT5zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LApAQCAtNzkyLDcgKzk0Nyw3IEBACiAKICAgICAvKiBjb21wdXRlIHRoZSBsaW5lYXIgYWR2YW5jZSBpbiAxNi4xNiBwaXhlbHMgKi8KICAgICBpZiAoICggbG9hZF9mbGFncyAmIEZUX0xPQURfTElORUFSX0RFU0lHTiApID09IDAgJiYKLSAgICAgICAgICggRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSApICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSAgICAgICAgICAgICAgICAgICAgICApCiAgICAgewogICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyA9ICZmYWNlLT5zaXplLT5tZXRyaWNzOwogCkBAIC04NDAsMjggKzk5NSwzNyBAQAogICAgICAgfQogICAgIH0KIAotICAgIEZUX1RSQUNFNSgoICIgIHggYWR2YW5jZTogJWRcbiIgLCBzbG90LT5hZHZhbmNlLnggKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgeSBhZHZhbmNlOiAlZFxuIiAsIHNsb3QtPmFkdmFuY2UueSApKTsKLQotICAgIEZUX1RSQUNFNSgoICIgIGxpbmVhciB4IGFkdmFuY2U6ICVkXG4iICwgc2xvdC0+bGluZWFySG9yaUFkdmFuY2UgKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgbGluZWFyIHkgYWR2YW5jZTogJWRcbiIgLCBzbG90LT5saW5lYXJWZXJ0QWR2YW5jZSApKTsKLQotICAgIC8qIGRvIHdlIG5lZWQgdG8gcmVuZGVyIHRoZSBpbWFnZSBub3c/ICovCisgICAgLyogZG8gd2UgbmVlZCB0byByZW5kZXIgdGhlIGltYWdlIG9yIHByZXNldCB0aGUgYml0bWFwIG5vdz8gKi8KICAgICBpZiAoICFlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCAgICAmJgogICAgICAgICAgc2xvdC0+Zm9ybWF0ICE9IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAgICAgJiYKLSAgICAgICAgIHNsb3QtPmZvcm1hdCAhPSBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFICYmCi0gICAgICAgICBsb2FkX2ZsYWdzICYgRlRfTE9BRF9SRU5ERVIgKQorICAgICAgICAgc2xvdC0+Zm9ybWF0ICE9IEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEUgKQogICAgIHsKICAgICAgIEZUX1JlbmRlcl9Nb2RlICBtb2RlID0gRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApOwogCiAKLSAgICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgICAgICAmJgotICAgICAgICAgICAobG9hZF9mbGFncyAmIEZUX0xPQURfTU9OT0NIUk9NRSApICkKKyAgICAgIGlmICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgICAmJgorICAgICAgICAgICBsb2FkX2ZsYWdzICYgRlRfTE9BRF9NT05PQ0hST01FICkKICAgICAgICAgbW9kZSA9IEZUX1JFTkRFUl9NT0RFX01PTk87CiAKLSAgICAgIGVycm9yID0gRlRfUmVuZGVyX0dseXBoKCBzbG90LCBtb2RlICk7CisgICAgICBpZiAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1JFTkRFUiApCisgICAgICAgIGVycm9yID0gRlRfUmVuZGVyX0dseXBoKCBzbG90LCBtb2RlICk7CisgICAgICBlbHNlCisgICAgICAgIGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwKCBzbG90LCBtb2RlLCBOVUxMICk7CiAgICAgfQogCisgICAgRlRfVFJBQ0U1KCggIkZUX0xvYWRfR2x5cGg6IGluZGV4ICVkLCBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgbG9hZF9mbGFncyAgICAgICAgICAgICAgICkpOworICAgIEZUX1RSQUNFNSgoICIgIHggYWR2YW5jZTogJWZcbiIsIHNsb3QtPmFkdmFuY2UueCAvIDY0LjAgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgeSBhZHZhbmNlOiAlZlxuIiwgc2xvdC0+YWR2YW5jZS55IC8gNjQuMCApKTsKKyAgICBGVF9UUkFDRTUoKCAiICBsaW5lYXIgeCBhZHZhbmNlOiAlZlxuIiwKKyAgICAgICAgICAgICAgICBzbG90LT5saW5lYXJIb3JpQWR2YW5jZSAvIDY1NTM2LjAgKSk7CisgICAgRlRfVFJBQ0U1KCggIiAgbGluZWFyIHkgYWR2YW5jZTogJWZcbiIsCisgICAgICAgICAgICAgICAgc2xvdC0+bGluZWFyVmVydEFkdmFuY2UgLyA2NTUzNi4wICkpOworICAgIEZUX1RSQUNFNSgoICIgIGJpdG1hcCAlZHglZCwgbW9kZSAlZFxuIiwKKyAgICAgICAgICAgICAgICBzbG90LT5iaXRtYXAud2lkdGgsIHNsb3QtPmJpdG1hcC5yb3dzLAorICAgICAgICAgICAgICAgIHNsb3QtPmJpdG1hcC5waXhlbF9tb2RlICAgICAgICAgICAgICAgKSk7CisKICAgRXhpdDoKICAgICByZXR1cm4gZXJyb3I7CiAgIH0KQEAgLTI0MDQsNyArMjU2OCw3IEBACiAgICAgICAgIGlmICggYnNpemUtPmhlaWdodCA8IDAgfHwgYnNpemUtPnhfcHBlbSA8IDAgfHwgYnNpemUtPnlfcHBlbSA8IDAgKQogICAgICAgICB7CiAgICAgICAgICAgRlRfVFJBQ0UwKCggIkZUX09wZW5fRmFjZToiCi0gICAgICAgICAgICAgICAgICAgICAgIiBJbnZhbGlkIGJpdG1hcCBkaW1lbnNpb25zIGZvciBzdHJva2UgJWQsIgorICAgICAgICAgICAgICAgICAgICAgICIgSW52YWxpZCBiaXRtYXAgZGltZW5zaW9ucyBmb3Igc3RyaWtlICVkLCIKICAgICAgICAgICAgICAgICAgICAgICAiIG5vdyBkaXNhYmxlZFxuIiwgaSApKTsKICAgICAgICAgICBic2l6ZS0+d2lkdGggID0gMDsKICAgICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gMDsKQEAgLTI0MzMsNyArMjU5Nyw4IEBACiAgICAgICBpbnRlcm5hbC0+bm9fc3RlbV9kYXJrZW5pbmcgPSAtMTsKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCi0gICAgICBmdF9tZW1zZXQoIGludGVybmFsLT5sY2Rfd2VpZ2h0cywgMCwgRlRfTENEX0ZJTFRFUl9GSVZFX1RBUFMgKTsKKyAgICAgIC8qIFBlci1mYWNlIGZpbHRlcmluZyBjYW4gb25seSBiZSBzZXQgdXAgYnkgRlRfRmFjZV9Qcm9wZXJ0aWVzICovCisgICAgICBpbnRlcm5hbC0+bGNkX2ZpbHRlcl9mdW5jID0gTlVMTDsKICNlbmRpZgogICAgIH0KIApAQCAtMjYwNSw2ICsyNzcwLDggQEAKICAgICBGVF9TaXplICAgICAgICAgIHNpemUgPSBOVUxMOwogICAgIEZUX0xpc3ROb2RlICAgICAgbm9kZSA9IE5VTEw7CiAKKyAgICBGVF9TaXplX0ludGVybmFsICBpbnRlcm5hbCA9IE5VTEw7CisKIAogICAgIGlmICggIWZhY2UgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7CkBAIC0yNjI3LDggKzI3OTQsMTAgQEAKIAogICAgIHNpemUtPmZhY2UgPSBmYWNlOwogCi0gICAgLyogZm9yIG5vdywgZG8gbm90IHVzZSBhbnkgaW50ZXJuYWwgZmllbGRzIGluIHNpemUgb2JqZWN0cyAqLwotICAgIHNpemUtPmludGVybmFsID0gTlVMTDsKKyAgICBpZiAoIEZUX05FVyggaW50ZXJuYWwgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBzaXplLT5pbnRlcm5hbCA9IGludGVybmFsOwogCiAgICAgaWYgKCBjbGF6ei0+aW5pdF9zaXplICkKICAgICAgIGVycm9yID0gY2xhenotPmluaXRfc2l6ZSggc2l6ZSApOwpAQCAtMjg1MiwxOCArMzAyMSw2IEBACiAgICAgICBtZXRyaWNzLT5oZWlnaHQgICAgICA9IGJzaXplLT5oZWlnaHQgPDwgNjsKICAgICAgIG1ldHJpY3MtPm1heF9hZHZhbmNlID0gYnNpemUtPnhfcHBlbTsKICAgICB9Ci0KLSAgICBGVF9UUkFDRTUoKCAiRlRfU2VsZWN0X01ldHJpY3M6XG4iICkpOwotICAgIEZUX1RSQUNFNSgoICIgIHggc2NhbGU6ICVkICglZilcbiIsCi0gICAgICAgICAgICAgICAgbWV0cmljcy0+eF9zY2FsZSwgbWV0cmljcy0+eF9zY2FsZSAvIDY1NTM2LjAgKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgeSBzY2FsZTogJWQgKCVmKVxuIiwKLSAgICAgICAgICAgICAgICBtZXRyaWNzLT55X3NjYWxlLCBtZXRyaWNzLT55X3NjYWxlIC8gNjU1MzYuMCApKTsKLSAgICBGVF9UUkFDRTUoKCAiICBhc2NlbmRlcjogJWZcbiIsICAgIG1ldHJpY3MtPmFzY2VuZGVyIC8gNjQuMCApKTsKLSAgICBGVF9UUkFDRTUoKCAiICBkZXNjZW5kZXI6ICVmXG4iLCAgIG1ldHJpY3MtPmRlc2NlbmRlciAvIDY0LjAgKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgaGVpZ2h0OiAlZlxuIiwgICAgICBtZXRyaWNzLT5oZWlnaHQgLyA2NC4wICkpOwotICAgIEZUX1RSQUNFNSgoICIgIG1heCBhZHZhbmNlOiAlZlxuIiwgbWV0cmljcy0+bWF4X2FkdmFuY2UgLyA2NC4wICkpOwotICAgIEZUX1RSQUNFNSgoICIgIHggcHBlbTogJWRcbiIsICAgICAgbWV0cmljcy0+eF9wcGVtICkpOwotICAgIEZUX1RSQUNFNSgoICIgIHkgcHBlbTogJWRcbiIsICAgICAgbWV0cmljcy0+eV9wcGVtICkpOwogICB9CiAKIApAQCAtMjk3MiwxOCArMzEyOSw2IEBACiAgICAgICBtZXRyaWNzLT54X3NjYWxlID0gMUwgPDwgMTY7CiAgICAgICBtZXRyaWNzLT55X3NjYWxlID0gMUwgPDwgMTY7CiAgICAgfQotCi0gICAgRlRfVFJBQ0U1KCggIkZUX1JlcXVlc3RfTWV0cmljczpcbiIgKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgeCBzY2FsZTogJWQgKCVmKVxuIiwKLSAgICAgICAgICAgICAgICBtZXRyaWNzLT54X3NjYWxlLCBtZXRyaWNzLT54X3NjYWxlIC8gNjU1MzYuMCApKTsKLSAgICBGVF9UUkFDRTUoKCAiICB5IHNjYWxlOiAlZCAoJWYpXG4iLAotICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUsIG1ldHJpY3MtPnlfc2NhbGUgLyA2NTUzNi4wICkpOwotICAgIEZUX1RSQUNFNSgoICIgIGFzY2VuZGVyOiAlZlxuIiwgICAgbWV0cmljcy0+YXNjZW5kZXIgLyA2NC4wICkpOwotICAgIEZUX1RSQUNFNSgoICIgIGRlc2NlbmRlcjogJWZcbiIsICAgbWV0cmljcy0+ZGVzY2VuZGVyIC8gNjQuMCApKTsKLSAgICBGVF9UUkFDRTUoKCAiICBoZWlnaHQ6ICVmXG4iLCAgICAgIG1ldHJpY3MtPmhlaWdodCAvIDY0LjAgKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgbWF4IGFkdmFuY2U6ICVmXG4iLCBtZXRyaWNzLT5tYXhfYWR2YW5jZSAvIDY0LjAgKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgeCBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT54X3BwZW0gKSk7Ci0gICAgRlRfVFJBQ0U1KCggIiAgeSBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT55X3BwZW0gKSk7CiAgIH0KIAogCkBAIC0yOTkzLDYgKzMxMzgsNyBAQAogICBGVF9TZWxlY3RfU2l6ZSggRlRfRmFjZSAgZmFjZSwKICAgICAgICAgICAgICAgICAgIEZUX0ludCAgIHN0cmlrZV9pbmRleCApCiAgIHsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEZUX0RyaXZlcl9DbGFzcyAgY2xheno7CiAKIApAQCAtMzAwNiwzNiArMzE1MiwzNyBAQAogCiAgICAgaWYgKCBjbGF6ei0+c2VsZWN0X3NpemUgKQogICAgIHsKLSAgICAgIEZUX0Vycm9yICBlcnJvcjsKLQotCiAgICAgICBlcnJvciA9IGNsYXp6LT5zZWxlY3Rfc2l6ZSggZmFjZS0+c2l6ZSwgKEZUX1VMb25nKXN0cmlrZV9pbmRleCApOwogCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgIHsKLSAgICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyA9ICZmYWNlLT5zaXplLT5tZXRyaWNzOworICAgICAgRlRfVFJBQ0U1KCggIkZUX1NlbGVjdF9TaXplICglcyBkcml2ZXIpOlxuIiwKKyAgICAgICAgICAgICAgICAgIGZhY2UtPmRyaXZlci0+cm9vdC5jbGF6ei0+bW9kdWxlX25hbWUgKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBGVF9TZWxlY3RfTWV0cmljcyggZmFjZSwgKEZUX1VMb25nKXN0cmlrZV9pbmRleCApOwogCi0KLSAgICAgICAgRlRfVFJBQ0U1KCggIkZUX1NlbGVjdF9TaXplIChmb250IGRyaXZlcidzIGBzZWxlY3Rfc2l6ZScpOlxuIiApKTsKLSAgICAgICAgRlRfVFJBQ0U1KCggIiAgeCBzY2FsZTogJWQgKCVmKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eF9zY2FsZSwgbWV0cmljcy0+eF9zY2FsZSAvIDY1NTM2LjAgKSk7Ci0gICAgICAgIEZUX1RSQUNFNSgoICIgIHkgc2NhbGU6ICVkICglZilcbiIsCi0gICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUsIG1ldHJpY3MtPnlfc2NhbGUgLyA2NTUzNi4wICkpOwotICAgICAgICBGVF9UUkFDRTUoKCAiICBhc2NlbmRlcjogJWZcbiIsICAgIG1ldHJpY3MtPmFzY2VuZGVyIC8gNjQuMCApKTsKLSAgICAgICAgRlRfVFJBQ0U1KCggIiAgZGVzY2VuZGVyOiAlZlxuIiwgICBtZXRyaWNzLT5kZXNjZW5kZXIgLyA2NC4wICkpOwotICAgICAgICBGVF9UUkFDRTUoKCAiICBoZWlnaHQ6ICVmXG4iLCAgICAgIG1ldHJpY3MtPmhlaWdodCAvIDY0LjAgKSk7Ci0gICAgICAgIEZUX1RSQUNFNSgoICIgIG1heCBhZHZhbmNlOiAlZlxuIiwgbWV0cmljcy0+bWF4X2FkdmFuY2UgLyA2NC4wICkpOwotICAgICAgICBGVF9UUkFDRTUoKCAiICB4IHBwZW06ICVkXG4iLCAgICAgIG1ldHJpY3MtPnhfcHBlbSApKTsKLSAgICAgICAgRlRfVFJBQ0U1KCggIiAgeSBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT55X3BwZW0gKSk7Ci0gICAgICB9Ci0jZW5kaWYKLQotICAgICAgcmV0dXJuIGVycm9yOworICAgICAgRlRfVFJBQ0U1KCggIkZUX1NlbGVjdF9TaXplOlxuIiApKTsKICAgICB9CiAKLSAgICBGVF9TZWxlY3RfTWV0cmljcyggZmFjZSwgKEZUX1VMb25nKXN0cmlrZV9pbmRleCApOworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgeworICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyA9ICZmYWNlLT5zaXplLT5tZXRyaWNzOwogCi0gICAgcmV0dXJuIEZUX0Vycl9PazsKKworICAgICAgRlRfVFJBQ0U1KCggIiAgeCBzY2FsZTogJWQgKCVmKVxuIiwKKyAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfc2NhbGUsIG1ldHJpY3MtPnhfc2NhbGUgLyA2NTUzNi4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgeSBzY2FsZTogJWQgKCVmKVxuIiwKKyAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUsIG1ldHJpY3MtPnlfc2NhbGUgLyA2NTUzNi4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgYXNjZW5kZXI6ICVmXG4iLCAgICBtZXRyaWNzLT5hc2NlbmRlciAvIDY0LjAgKSk7CisgICAgICBGVF9UUkFDRTUoKCAiICBkZXNjZW5kZXI6ICVmXG4iLCAgIG1ldHJpY3MtPmRlc2NlbmRlciAvIDY0LjAgKSk7CisgICAgICBGVF9UUkFDRTUoKCAiICBoZWlnaHQ6ICVmXG4iLCAgICAgIG1ldHJpY3MtPmhlaWdodCAvIDY0LjAgKSk7CisgICAgICBGVF9UUkFDRTUoKCAiICBtYXggYWR2YW5jZTogJWZcbiIsIG1ldHJpY3MtPm1heF9hZHZhbmNlIC8gNjQuMCApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgIHggcHBlbTogJWRcbiIsICAgICAgbWV0cmljcy0+eF9wcGVtICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgeSBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT55X3BwZW0gKSk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gZXJyb3I7CiAgIH0KIAogCkBAIC0zMDQ1LDYgKzMxOTIsNyBAQAogICBGVF9SZXF1ZXN0X1NpemUoIEZUX0ZhY2UgICAgICAgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICBGVF9TaXplX1JlcXVlc3QgIHJlcSApCiAgIHsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEZUX0RyaXZlcl9DbGFzcyAgY2xheno7CiAgICAgRlRfVUxvbmcgICAgICAgICBzdHJpa2VfaW5kZXg7CiAKQEAgLTMwNTYsNTkgKzMyMDQsNjAgQEAKICAgICAgICAgIHJlcS0+dHlwZSA+PSBGVF9TSVpFX1JFUVVFU1RfVFlQRV9NQVggKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKKyAgICAvKiBzaWduYWwgdGhlIGF1dG8taGludGVyIHRvIHJlY29tcHV0ZSBpdHMgc2l6ZSBtZXRyaWNzICovCisgICAgLyogKGlmIHJlcXVlc3RlZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGZhY2UtPnNpemUtPmludGVybmFsLT5hdXRvaGludF9tZXRyaWNzLnhfc2NhbGUgPSAwOworCiAgICAgY2xhenogPSBmYWNlLT5kcml2ZXItPmNsYXp6OwogCiAgICAgaWYgKCBjbGF6ei0+cmVxdWVzdF9zaXplICkKICAgICB7Ci0gICAgICBGVF9FcnJvciAgZXJyb3I7Ci0KLQogICAgICAgZXJyb3IgPSBjbGF6ei0+cmVxdWVzdF9zaXplKCBmYWNlLT5zaXplLCByZXEgKTsKIAotI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICB7Ci0gICAgICAgIEZUX1NpemVfTWV0cmljcyogIG1ldHJpY3MgPSAmZmFjZS0+c2l6ZS0+bWV0cmljczsKLQotCi0gICAgICAgIEZUX1RSQUNFNSgoICJGVF9SZXF1ZXN0X1NpemUgKGZvbnQgZHJpdmVyJ3MgYHJlcXVlc3Rfc2l6ZScpOlxuIiApKTsKLSAgICAgICAgRlRfVFJBQ0U1KCggIiAgeCBzY2FsZTogJWQgKCVmKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eF9zY2FsZSwgbWV0cmljcy0+eF9zY2FsZSAvIDY1NTM2LjAgKSk7Ci0gICAgICAgIEZUX1RSQUNFNSgoICIgIHkgc2NhbGU6ICVkICglZilcbiIsCi0gICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnlfc2NhbGUsIG1ldHJpY3MtPnlfc2NhbGUgLyA2NTUzNi4wICkpOwotICAgICAgICBGVF9UUkFDRTUoKCAiICBhc2NlbmRlcjogJWZcbiIsICAgIG1ldHJpY3MtPmFzY2VuZGVyIC8gNjQuMCApKTsKLSAgICAgICAgRlRfVFJBQ0U1KCggIiAgZGVzY2VuZGVyOiAlZlxuIiwgICBtZXRyaWNzLT5kZXNjZW5kZXIgLyA2NC4wICkpOwotICAgICAgICBGVF9UUkFDRTUoKCAiICBoZWlnaHQ6ICVmXG4iLCAgICAgIG1ldHJpY3MtPmhlaWdodCAvIDY0LjAgKSk7Ci0gICAgICAgIEZUX1RSQUNFNSgoICIgIG1heCBhZHZhbmNlOiAlZlxuIiwgbWV0cmljcy0+bWF4X2FkdmFuY2UgLyA2NC4wICkpOwotICAgICAgICBGVF9UUkFDRTUoKCAiICB4IHBwZW06ICVkXG4iLCAgICAgIG1ldHJpY3MtPnhfcHBlbSApKTsKLSAgICAgICAgRlRfVFJBQ0U1KCggIiAgeSBwcGVtOiAlZFxuIiwgICAgICBtZXRyaWNzLT55X3BwZW0gKSk7Ci0gICAgICB9Ci0jZW5kaWYKLQotICAgICAgcmV0dXJuIGVycm9yOworICAgICAgRlRfVFJBQ0U1KCggIkZUX1JlcXVlc3RfU2l6ZSAoJXMgZHJpdmVyKTpcbiIsCisgICAgICAgICAgICAgICAgICBmYWNlLT5kcml2ZXItPnJvb3QuY2xhenotPm1vZHVsZV9uYW1lICkpOwogICAgIH0KLQotICAgIC8qCi0gICAgICogVGhlIHJlYXNvbiB0aGF0IGEgZHJpdmVyIGRvZXNuJ3QgaGF2ZSBgcmVxdWVzdF9zaXplJyBkZWZpbmVkIGlzCi0gICAgICogZWl0aGVyIHRoYXQgdGhlIHNjYWxpbmcgaGVyZSBzdWZmaWNlcyBvciB0aGF0IHRoZSBzdXBwb3J0ZWQgZm9ybWF0cwotICAgICAqIGFyZSBiaXRtYXAtb25seSBhbmQgc2l6ZSBtYXRjaGluZyBpcyBub3QgaW1wbGVtZW50ZWQuCi0gICAgICoKLSAgICAgKiBJbiB0aGUgbGF0dGVyIGNhc2UsIGEgc2ltcGxlIHNpemUgbWF0Y2hpbmcgaXMgZG9uZS4KLSAgICAgKi8KLSAgICBpZiAoICFGVF9JU19TQ0FMQUJMRSggZmFjZSApICYmIEZUX0hBU19GSVhFRF9TSVpFUyggZmFjZSApICkKKyAgICBlbHNlIGlmICggIUZUX0lTX1NDQUxBQkxFKCBmYWNlICkgJiYgRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkgKQogICAgIHsKLSAgICAgIEZUX0Vycm9yICBlcnJvcjsKLQotCisgICAgICAvKgorICAgICAgICogVGhlIHJlYXNvbiB0aGF0IGEgZHJpdmVyIGRvZXNuJ3QgaGF2ZSBgcmVxdWVzdF9zaXplJyBkZWZpbmVkIGlzCisgICAgICAgKiBlaXRoZXIgdGhhdCB0aGUgc2NhbGluZyBoZXJlIHN1ZmZpY2VzIG9yIHRoYXQgdGhlIHN1cHBvcnRlZCBmb3JtYXRzCisgICAgICAgKiBhcmUgYml0bWFwLW9ubHkgYW5kIHNpemUgbWF0Y2hpbmcgaXMgbm90IGltcGxlbWVudGVkLgorICAgICAgICoKKyAgICAgICAqIEluIHRoZSBsYXR0ZXIgY2FzZSwgYSBzaW1wbGUgc2l6ZSBtYXRjaGluZyBpcyBkb25lLgorICAgICAgICovCiAgICAgICBlcnJvciA9IEZUX01hdGNoX1NpemUoIGZhY2UsIHJlcSwgMCwgJnN0cmlrZV9pbmRleCApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIHJldHVybiBlcnJvcjsKIAogICAgICAgcmV0dXJuIEZUX1NlbGVjdF9TaXplKCBmYWNlLCAoRlRfSW50KXN0cmlrZV9pbmRleCApOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRlRfUmVxdWVzdF9NZXRyaWNzKCBmYWNlLCByZXEgKTsKIAotICAgIEZUX1JlcXVlc3RfTWV0cmljcyggZmFjZSwgcmVxICk7CisgICAgICBGVF9UUkFDRTUoKCAiRlRfUmVxdWVzdF9TaXplOlxuIiApKTsKKyAgICB9CiAKLSAgICByZXR1cm4gRlRfRXJyX09rOworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgeworICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyA9ICZmYWNlLT5zaXplLT5tZXRyaWNzOworCisKKyAgICAgIEZUX1RSQUNFNSgoICIgIHggc2NhbGU6ICVkICglZilcbiIsCisgICAgICAgICAgICAgICAgICBtZXRyaWNzLT54X3NjYWxlLCBtZXRyaWNzLT54X3NjYWxlIC8gNjU1MzYuMCApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgIHkgc2NhbGU6ICVkICglZilcbiIsCisgICAgICAgICAgICAgICAgICBtZXRyaWNzLT55X3NjYWxlLCBtZXRyaWNzLT55X3NjYWxlIC8gNjU1MzYuMCApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgIGFzY2VuZGVyOiAlZlxuIiwgICAgbWV0cmljcy0+YXNjZW5kZXIgLyA2NC4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgZGVzY2VuZGVyOiAlZlxuIiwgICBtZXRyaWNzLT5kZXNjZW5kZXIgLyA2NC4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgaGVpZ2h0OiAlZlxuIiwgICAgICBtZXRyaWNzLT5oZWlnaHQgLyA2NC4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgbWF4IGFkdmFuY2U6ICVmXG4iLCBtZXRyaWNzLT5tYXhfYWR2YW5jZSAvIDY0LjAgKSk7CisgICAgICBGVF9UUkFDRTUoKCAiICB4IHBwZW06ICVkXG4iLCAgICAgIG1ldHJpY3MtPnhfcHBlbSApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgIHkgcHBlbTogJWRcbiIsICAgICAgbWV0cmljcy0+eV9wcGVtICkpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIGVycm9yOwogICB9CiAKIApAQCAtMzYzNywxNiArMzc4NiwxMSBAQAogICAgICAgewogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCiAgICAgICAgIGlmICggcHJvcGVydGllcy0+ZGF0YSApCisgICAgICAgIHsKICAgICAgICAgICBmdF9tZW1jcHkoIGZhY2UtPmludGVybmFsLT5sY2Rfd2VpZ2h0cywKICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMtPmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICBGVF9MQ0RfRklMVEVSX0ZJVkVfVEFQUyApOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAvKiBWYWx1ZSBOVUxMIGluZGljYXRlcyBgbm8gY3VzdG9tIHdlaWdodHMsIHVzZSBsaWJyYXJ5ICAgICAgICAqLwotICAgICAgICAgIC8qIGRlZmF1bHRzJywgc2lnbmFsZWQgYnkgZmlsbGluZyB0aGUgd2VpZ2h0IGZpZWxkIHdpdGggemVyb3MuICovCi0gICAgICAgICAgZnRfbWVtc2V0KCBmYWNlLT5pbnRlcm5hbC0+bGNkX3dlaWdodHMsCi0gICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgRlRfTENEX0ZJTFRFUl9GSVZFX1RBUFMgKTsKKyAgICAgICAgICBmYWNlLT5pbnRlcm5hbC0+bGNkX2ZpbHRlcl9mdW5jID0gZnRfbGNkX2ZpbHRlcl9maXI7CiAgICAgICAgIH0KICNlbHNlCiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwpAQCAtMzcwOSwxMiArMzg1MywxNCBAQAogCiAgICAgICAgIGlmICggY2hhcmNvZGUgPiAweEZGRkZGRkZGVUwgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0dldF9DaGFyX0luZGV4OiB0b28gbGFyZ2UgY2hhcmNvZGUiICkpOworICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXg6IgorICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIGNoYXJjb2RlIiApKTsKICAgICAgICAgICBGVF9UUkFDRTEoKCAiIDB4JXggaXMgdHJ1bmNhdGVkXG4iLCBjaGFyY29kZSApKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIHZhcmlhbnRTZWxlY3RvciA+IDB4RkZGRkZGRkZVTCApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9UUkFDRTEoKCAiRlRfR2V0X0NoYXJfSW5kZXg6IHRvbyBsYXJnZSB2YXJpYW50U2VsZWN0b3IiICkpOworICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXg6IgorICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIHZhcmlhbnRTZWxlY3RvciIgKSk7CiAgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgdmFyaWFudFNlbGVjdG9yICkpOwogICAgICAgICB9CiAKQEAgLTM3NTAsMTIgKzM4OTYsMTQgQEAKIAogICAgICAgICBpZiAoIGNoYXJjb2RlID4gMHhGRkZGRkZGRlVMICkKICAgICAgICAgewotICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9HZXRfQ2hhcl9JbmRleDogdG9vIGxhcmdlIGNoYXJjb2RlIiApKTsKKyAgICAgICAgICBGVF9UUkFDRTEoKCAiRlRfRmFjZV9HZXRDaGFyVmFyaWFudElzRGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAgICAgIiB0b28gbGFyZ2UgY2hhcmNvZGUiICkpOwogICAgICAgICAgIEZUX1RSQUNFMSgoICIgMHgleCBpcyB0cnVuY2F0ZWRcbiIsIGNoYXJjb2RlICkpOwogICAgICAgICB9CiAgICAgICAgIGlmICggdmFyaWFudFNlbGVjdG9yID4gMHhGRkZGRkZGRlVMICkKICAgICAgICAgewotICAgICAgICAgIEZUX1RSQUNFMSgoICJGVF9HZXRfQ2hhcl9JbmRleDogdG9vIGxhcmdlIHZhcmlhbnRTZWxlY3RvciIgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIHZhcmlhbnRTZWxlY3RvciIgKSk7CiAgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgdmFyaWFudFNlbGVjdG9yICkpOwogICAgICAgICB9CiAKQEAgLTM4MTgsNyArMzk2Niw3IEBACiAKICAgICAgICAgaWYgKCBjaGFyY29kZSA+IDB4RkZGRkZGRkZVTCApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9UUkFDRTEoKCAiRlRfR2V0X0NoYXJfSW5kZXg6IHRvbyBsYXJnZSBjaGFyY29kZSIgKSk7CisgICAgICAgICAgRlRfVFJBQ0UxKCggIkZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXI6IHRvbyBsYXJnZSBjaGFyY29kZSIgKSk7CiAgICAgICAgICAgRlRfVFJBQ0UxKCggIiAweCV4IGlzIHRydW5jYXRlZFxuIiwgY2hhcmNvZGUgKSk7CiAgICAgICAgIH0KIApAQCAtNDM5NCw0MyArNDU0Miw5NyBAQAogICAgICAqLwogCiAgICAgLyogd2UgdXNlIEZUX1RSQUNFMyBpbiB0aGlzIGJsb2NrICovCi0gICAgaWYgKCBmdF90cmFjZV9sZXZlbHNbdHJhY2VfYml0bWFwXSA+PSAzICkKKyAgICBpZiAoICFlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGZ0X3RyYWNlX2xldmVsc1t0cmFjZV9iaXRtYXBdID49IDMgJiYKKyAgICAgICAgIHNsb3QtPmJpdG1hcC5idWZmZXIgICAgICAgICAgICAgICAgKQogICAgIHsKKyAgICAgIEZUX0JpdG1hcCAgYml0bWFwOworICAgICAgRlRfRXJyb3IgICBlcnI7CisKKworICAgICAgRlRfQml0bWFwX0luaXQoICZiaXRtYXAgKTsKKwogICAgICAgLyogd2UgY29udmVydCB0byBhIHNpbmdsZSBiaXRtYXAgZm9ybWF0IGZvciBjb21wdXRpbmcgdGhlIGNoZWNrc3VtICovCi0gICAgICBpZiAoICFlcnJvciAmJiBzbG90LT5iaXRtYXAuYnVmZmVyICkKKyAgICAgIC8qIHRoaXMgYWxzbyBjb252ZXJ0cyB0aGUgYml0bWFwIGZsb3cgdG8gYGRvd24nIChpLmUuLCBwaXRjaCA+IDApICAqLworICAgICAgZXJyID0gRlRfQml0bWFwX0NvbnZlcnQoIGxpYnJhcnksICZzbG90LT5iaXRtYXAsICZiaXRtYXAsIDEgKTsKKyAgICAgIGlmICggIWVyciApCiAgICAgICB7Ci0gICAgICAgIEZUX0JpdG1hcCAgYml0bWFwOwotICAgICAgICBGVF9FcnJvciAgIGVycjsKKyAgICAgICAgTUQ1X0NUWCAgICAgICAgY3R4OworICAgICAgICB1bnNpZ25lZCBjaGFyICBtZDVbMTZdOworICAgICAgICB1bnNpZ25lZCBsb25nICBjb3ZlcmFnZSA9IDA7CisgICAgICAgIGludCAgICAgICAgICAgIGksIGo7CisgICAgICAgIGludCAgICAgICAgICAgIHJvd3MgID0gKGludCliaXRtYXAucm93czsKKyAgICAgICAgaW50ICAgICAgICAgICAgcGl0Y2ggPSBiaXRtYXAucGl0Y2g7CiAKIAotICAgICAgICBGVF9CaXRtYXBfSW5pdCggJmJpdG1hcCApOworICAgICAgICBGVF9UUkFDRTMoKCAiRlRfUmVuZGVyX0dseXBoOiBiaXRtYXAgJWR4JWQsIG1vZGUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHJvd3MsIHBpdGNoLCBzbG90LT5iaXRtYXAucGl4ZWxfbW9kZSApKTsKIAotICAgICAgICAvKiB0aGlzIGFsc28gY29udmVydHMgdGhlIGJpdG1hcCBmbG93IHRvIGBkb3duJyAoaS5lLiwgcGl0Y2ggPiAwKSAqLwotICAgICAgICBlcnIgPSBGVF9CaXRtYXBfQ29udmVydCggbGlicmFyeSwgJnNsb3QtPmJpdG1hcCwgJmJpdG1hcCwgMSApOwotICAgICAgICBpZiAoICFlcnIgKQotICAgICAgICB7Ci0gICAgICAgICAgTUQ1X0NUWCAgICAgICAgY3R4OwotICAgICAgICAgIHVuc2lnbmVkIGNoYXIgIG1kNVsxNl07Ci0gICAgICAgICAgaW50ICAgICAgICAgICAgaTsKLSAgICAgICAgICB1bnNpZ25lZCBpbnQgICByb3dzICA9IGJpdG1hcC5yb3dzOwotICAgICAgICAgIHVuc2lnbmVkIGludCAgIHBpdGNoID0gKHVuc2lnbmVkIGludCliaXRtYXAucGl0Y2g7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcm93czsgaSsrICkKKyAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHBpdGNoOyBqKysgKQorICAgICAgICAgICAgY292ZXJhZ2UgKz0gYml0bWFwLmJ1ZmZlcltpICogcGl0Y2ggKyBqXTsKIAorICAgICAgICBGVF9UUkFDRTMoKCAiICBUb3RhbCBjb3ZlcmFnZTogJWx1XG4iLCBjb3ZlcmFnZSApKTsKIAotICAgICAgICAgIE1ENV9Jbml0KCAmY3R4ICk7Ci0gICAgICAgICAgaWYgKCBiaXRtYXAuYnVmZmVyICkKLSAgICAgICAgICAgIE1ENV9VcGRhdGUoICZjdHgsIGJpdG1hcC5idWZmZXIsIHJvd3MgKiBwaXRjaCApOwotICAgICAgICAgIE1ENV9GaW5hbCggbWQ1LCAmY3R4ICk7CisgICAgICAgIE1ENV9Jbml0KCAmY3R4ICk7CisgICAgICAgIGlmICggYml0bWFwLmJ1ZmZlciApCisgICAgICAgICAgTUQ1X1VwZGF0ZSggJmN0eCwgYml0bWFwLmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylyb3dzICogKHVuc2lnbmVkIGxvbmcpcGl0Y2ggKTsKKyAgICAgICAgTUQ1X0ZpbmFsKCBtZDUsICZjdHggKTsKIAotICAgICAgICAgIEZUX1RSQUNFMygoICJNRDUgY2hlY2tzdW0gZm9yICVkeCVkIGJpdG1hcDpcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAiLAotICAgICAgICAgICAgICAgICAgICAgIHJvd3MsIHBpdGNoICkpOwotICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgMTY7IGkrKyApCi0gICAgICAgICAgICBGVF9UUkFDRTMoKCAiJTAyWCIsIG1kNVtpXSApKTsKLSAgICAgICAgICBGVF9UUkFDRTMoKCAiXG4iICkpOwotICAgICAgICB9Ci0KLSAgICAgICAgRlRfQml0bWFwX0RvbmUoIGxpYnJhcnksICZiaXRtYXAgKTsKKyAgICAgICAgRlRfVFJBQ0UzKCggIiAgTUQ1IGNoZWNrc3VtOiAiICkpOworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDE2OyBpKysgKQorICAgICAgICAgIEZUX1RSQUNFMygoICIlMDJYIiwgbWQ1W2ldICkpOworICAgICAgICBGVF9UUkFDRTMoKCAiXG4iICkpOwogICAgICAgfQorCisgICAgICBGVF9CaXRtYXBfRG9uZSggbGlicmFyeSwgJmJpdG1hcCApOworICAgIH0KKworICAgIC8qCisgICAgICogRHVtcCBiaXRtYXAgaW4gTmV0cGJtIGZvcm1hdCAoUEJNIG9yIFBHTSkuCisgICAgICovCisKKyAgICAvKiB3ZSB1c2UgRlRfVFJBQ0U3IGluIHRoaXMgYmxvY2sgKi8KKyAgICBpZiAoICFlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGZ0X3RyYWNlX2xldmVsc1t0cmFjZV9iaXRtYXBdID49IDcgJiYKKyAgICAgICAgIHNsb3QtPmJpdG1hcC5yb3dzICA8IDEyOFUgICAgICAgICAgJiYKKyAgICAgICAgIHNsb3QtPmJpdG1hcC53aWR0aCA8IDEyOFUgICAgICAgICAgJiYKKyAgICAgICAgIHNsb3QtPmJpdG1hcC5idWZmZXIgICAgICAgICAgICAgICAgKQorICAgIHsKKyAgICAgIGludCAgcm93cyAgPSAoaW50KXNsb3QtPmJpdG1hcC5yb3dzOworICAgICAgaW50ICB3aWR0aCA9IChpbnQpc2xvdC0+Yml0bWFwLndpZHRoOworICAgICAgaW50ICBwaXRjaCA9ICAgICAgc2xvdC0+Yml0bWFwLnBpdGNoOworICAgICAgaW50ICBpLCBqLCBtOworICAgICAgdW5zaWduZWQgY2hhciogIHRvcGxlZnQgPSBzbG90LT5iaXRtYXAuYnVmZmVyOworCisgICAgICBpZiAoIHBpdGNoIDwgMCApCisgICAgICAgIHRvcGxlZnQgLT0gcGl0Y2ggKiAoIHJvd3MgLSAxICk7CisKKyAgICAgIEZUX1RSQUNFNygoICJOZXRwYm0gaW1hZ2U6IHN0YXJ0XG4iICkpOworICAgICAgc3dpdGNoICggc2xvdC0+Yml0bWFwLnBpeGVsX21vZGUgKQorICAgICAgeworICAgICAgY2FzZSBGVF9QSVhFTF9NT0RFX01PTk86CisgICAgICAgIEZUX1RSQUNFNygoICJQMSAlZCAlZFxuIiwgd2lkdGgsIHJvd3MgKSk7CisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgcm93czsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgd2lkdGg7ICkKKyAgICAgICAgICAgIGZvciAoIG0gPSAxMjg7IG0gPiAwICYmIGogPCB3aWR0aDsgbSA+Pj0gMSwgaisrICkKKyAgICAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAlZCIsICggdG9wbGVmdFtpICogcGl0Y2ggKyBqIC8gOF0gJiBtICkgIT0gMCApKTsKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiXG4iICkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBGVF9UUkFDRTcoKCAiUDIgJWQgJWQgMjU1XG4iLCB3aWR0aCwgcm93cyApKTsKKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCByb3dzOyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgZm9yICggaiA9IDA7IGogPCB3aWR0aDsgaiArPSAxICkKKyAgICAgICAgICAgIEZUX1RSQUNFNygoICIgJTN1IiwgdG9wbGVmdFtpICogcGl0Y2ggKyBqXSApKTsKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiXG4iICkpOworICAgICAgICB9CisgICAgICB9CisgICAgICBGVF9UUkFDRTcoKCAiTmV0cGJtIGltYWdlOiBlbmRcbiIgKSk7CiAgICAgfQogCiAjdW5kZWYgIEZUX0NPTVBPTkVOVApAQCAtNDUzNyw3ICs0NzM5LDcgQEAKICAgICBpZiAoICFjbGF6eiApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIAotICAgIC8qIGNoZWNrIGZyZWV0eXBlIHZlcnNpb24gKi8KKyAgICAvKiBjaGVjayBGcmVlVHlwZSB2ZXJzaW9uICovCiAgICAgaWYgKCBjbGF6ei0+bW9kdWxlX3JlcXVpcmVzID4gRlJFRVRZUEVfVkVSX0ZJWEVEICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9WZXJzaW9uICk7CiAKQEAgLTQ5NjEsMTAgKzUxNjMsNiBAQAogICAgICAgZ290byBGYWlsOwogI2VuZGlmCiAKLSAgICAvKiB3ZSBkb24ndCB1c2UgcmFzdGVyX3Bvb2wgYW55bW9yZS4gKi8KLSAgICBsaWJyYXJ5LT5yYXN0ZXJfcG9vbF9zaXplID0gMDsKLSAgICBsaWJyYXJ5LT5yYXN0ZXJfcG9vbCAgICAgID0gTlVMTDsKLQogICAgIGxpYnJhcnktPnZlcnNpb25fbWFqb3IgPSBGUkVFVFlQRV9NQUpPUjsKICAgICBsaWJyYXJ5LT52ZXJzaW9uX21pbm9yID0gRlJFRVRZUEVfTUlOT1I7CiAgICAgbGlicmFyeS0+dmVyc2lvbl9wYXRjaCA9IEZSRUVUWVBFX1BBVENIOwpAQCAtNDk3OSw5ICs1MTc3LDkgQEAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwogICBGYWlsOgogICAgIGZ0X3BpY19jb250YWluZXJfZGVzdHJveSggbGlicmFyeSApOwotI2VuZGlmCiAgICAgRlRfRlJFRSggbGlicmFyeSApOwogICAgIHJldHVybiBlcnJvcjsKKyNlbmRpZgogICB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRvdHZhbC5jIGIvc3JjL2Jhc2UvZnRvdHZhbC5jCmluZGV4IDVmYTA5ODYuLmEyOTQ0YTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0b3R2YWwuYworKysgYi9zcmMvYmFzZS9mdG90dmFsLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIE9wZW5UeXBlIHRhYmxlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b3V0bG4uYyBiL3NyYy9iYXNlL2Z0b3V0bG4uYwppbmRleCA0NjRhMDY2Li45YzI5YWRlIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG91dGxuLmMKKysrIGIvc3JjL2Jhc2UvZnRvdXRsbi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIG91dGxpbmUgbWFuYWdlbWVudCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC01NDAsOCArNTQwLDggQEAKIAogICAgIGZvciAoIG4gPSAwOyBuIDwgb3V0bGluZS0+bl9wb2ludHM7IG4rKyApCiAgICAgewotICAgICAgdmVjLT54ICs9IHhPZmZzZXQ7Ci0gICAgICB2ZWMtPnkgKz0geU9mZnNldDsKKyAgICAgIHZlYy0+eCA9IEFERF9MT05HKCB2ZWMtPngsIHhPZmZzZXQgKTsKKyAgICAgIHZlYy0+eSA9IEFERF9MT05HKCB2ZWMtPnksIHlPZmZzZXQgKTsKICAgICAgIHZlYysrOwogICAgIH0KICAgfQpAQCAtMTA4OCw3ICsxMDg4LDggQEAKICAgICAgICAgdl9jdXIueCA9IHBvaW50c1tuXS54ID4+IHhzaGlmdDsKICAgICAgICAgdl9jdXIueSA9IHBvaW50c1tuXS55ID4+IHlzaGlmdDsKIAotICAgICAgICBhcmVhICs9ICggdl9jdXIueSAtIHZfcHJldi55ICkgKiAoIHZfY3VyLnggKyB2X3ByZXYueCApOworICAgICAgICBhcmVhID0gQUREX0xPTkcoIGFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgKCB2X2N1ci55IC0gdl9wcmV2LnkgKSAqICggdl9jdXIueCArIHZfcHJldi54ICkgKTsKIAogICAgICAgICB2X3ByZXYgPSB2X2N1cjsKICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0cGF0ZW50LmMgYi9zcmMvYmFzZS9mdHBhdGVudC5jCmluZGV4IDA5MjVhNjIuLmUyM2VlMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0cGF0ZW50LmMKKysrIGIvc3JjL2Jhc2UvZnRwYXRlbnQuYwpAQCAtMyw5ICszLDkgQEAKIC8qICBmdHBhdGVudC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjaGVja2luZyBwYXRlbnRlZCBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgICAgKi8KLS8qICAgIChib2R5KS4gIE9ic29sZXRlLCByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAgICAgICAgICAgICovCisvKiAgICAoYm9keSkuICBPYnNvbGV0ZSwgcmV0YWluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRwZnIuYyBiL3NyYy9iYXNlL2Z0cGZyLmMKaW5kZXggNWNjMGI3MC4uYmZlMTM1MiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRwZnIuYworKysgYi9zcmMvYmFzZS9mdHBmci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFBGUi1zcGVjaWZpYyBkYXRhIChib2R5KS4gICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHBpYy5jIGIvc3JjL2Jhc2UvZnRwaWMuYwppbmRleCAwZjg0ZmRkLi4xNDkyZTE4IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHBpYy5jCisrKyBiL3NyYy9iYXNlL2Z0cGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgKGJvZHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0cHNwcm9wLmMgYi9zcmMvYmFzZS9mdHBzcHJvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWI1ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFzZS9mdHBzcHJvcC5jCkBAIC0wLDAgKzEsMjg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdHBzcHJvcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgR2V0IGFuZCBzZXQgcHJvcGVydGllcyBvZiBQb3N0U2NyaXB0IGRyaXZlcnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFNlZSBgZnRkcml2ZXIuaCcgZm9yIGF2YWlsYWJsZSBwcm9wZXJ0aWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDE3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfUFJPUFNfSAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KKyAgLyogcGFyYW1ldGVyIG9mIHRoZSBGVF9UUkFDRSgpIGFuZCBGVF9FUlJPUigpIG1hY3JvcywgdXNlZCB0byBwcmludC9sb2cgICovCisgIC8qIG1lc3NhZ2VzIGR1cmluZyBleGVjdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcHNwcm9wcworCisKKyAgRlRfQkFTRV9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcHNfcHJvcGVydHlfc2V0KCBGVF9Nb2R1bGUgICAgbW9kdWxlLCAgICAgICAgIC8qIFBTX0RyaXZlciAqLworICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgdmFsdWVfaXNfc3RyaW5nICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIFBTX0RyaXZlciAgZHJpdmVyID0gKFBTX0RyaXZlciltb2R1bGU7CisKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgRlRfVU5VU0VEKCB2YWx1ZV9pc19zdHJpbmcgKTsKKyNlbmRpZgorCisKKyAgICBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJkYXJrZW5pbmctcGFyYW1ldGVycyIgKSApCisgICAgeworICAgICAgRlRfSW50KiAgZGFya2VuX3BhcmFtczsKKyAgICAgIEZUX0ludCAgIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NDsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgRlRfSW50ICAgZHBbOF07CisKKworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcyA9IChjb25zdCBjaGFyKil2YWx1ZTsKKyAgICAgICAgY2hhciogICAgICAgIGVwOworICAgICAgICBpbnQgICAgICAgICAgaTsKKworCisgICAgICAgIC8qIGVpZ2h0IGNvbW1hLXNlcGFyYXRlZCBudW1iZXJzICovCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgNzsgaSsrICkKKyAgICAgICAgeworICAgICAgICAgIGRwW2ldID0gKEZUX0ludClmdF9zdHJ0b2woIHMsICZlcCwgMTAgKTsKKyAgICAgICAgICBpZiAoICplcCAhPSAnLCcgfHwgcyA9PSBlcCApCisgICAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICAgICAgIHMgPSBlcCArIDE7CisgICAgICAgIH0KKworICAgICAgICBkcFs3XSA9IChGVF9JbnQpZnRfc3RydG9sKCBzLCAmZXAsIDEwICk7CisgICAgICAgIGlmICggISggKmVwID09ICdcMCcgfHwgKmVwID09ICcgJyApIHx8IHMgPT0gZXAgKQorICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgICAgIGRhcmtlbl9wYXJhbXMgPSBkcDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBkYXJrZW5fcGFyYW1zID0gKEZUX0ludCopdmFsdWU7CisKKyAgICAgIHgxID0gZGFya2VuX3BhcmFtc1swXTsKKyAgICAgIHkxID0gZGFya2VuX3BhcmFtc1sxXTsKKyAgICAgIHgyID0gZGFya2VuX3BhcmFtc1syXTsKKyAgICAgIHkyID0gZGFya2VuX3BhcmFtc1szXTsKKyAgICAgIHgzID0gZGFya2VuX3BhcmFtc1s0XTsKKyAgICAgIHkzID0gZGFya2VuX3BhcmFtc1s1XTsKKyAgICAgIHg0ID0gZGFya2VuX3BhcmFtc1s2XTsKKyAgICAgIHk0ID0gZGFya2VuX3BhcmFtc1s3XTsKKworICAgICAgaWYgKCB4MSA8IDAgICB8fCB4MiA8IDAgICB8fCB4MyA8IDAgICB8fCB4NCA8IDAgICB8fAorICAgICAgICAgICB5MSA8IDAgICB8fCB5MiA8IDAgICB8fCB5MyA8IDAgICB8fCB5NCA8IDAgICB8fAorICAgICAgICAgICB4MSA+IHgyICB8fCB4MiA+IHgzICB8fCB4MyA+IHg0ICAgICAgICAgICAgICB8fAorICAgICAgICAgICB5MSA+IDUwMCB8fCB5MiA+IDUwMCB8fCB5MyA+IDUwMCB8fCB5NCA+IDUwMCApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMF0gPSB4MTsKKyAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1sxXSA9IHkxOworICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzJdID0geDI7CisgICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbM10gPSB5MjsKKyAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s0XSA9IHgzOworICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzVdID0geTM7CisgICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNl0gPSB4NDsKKyAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s3XSA9IHk0OworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJoaW50aW5nLWVuZ2luZSIgKSApCisgICAgeworI2lmIGRlZmluZWQoIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgKSB8fCBcCisgICAgZGVmaW5lZCggVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICApCisgICAgICBjb25zdCBjaGFyKiAgbW9kdWxlX25hbWUgPSBtb2R1bGUtPmNsYXp6LT5tb2R1bGVfbmFtZTsKKyNlbmRpZgorCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogIHMgPSAoY29uc3QgY2hhciopdmFsdWU7CisKKworICAgICAgICBpZiAoICFmdF9zdHJjbXAoIHMsICJhZG9iZSIgKSApCisgICAgICAgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9IEZUX0hJTlRJTkdfQURPQkU7CisKKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBtb2R1bGVfbmFtZSwgImNmZiIgKSAmJgorICAgICAgICAgICAgICAgICAgIWZ0X3N0cmNtcCggcywgImZyZWV0eXBlIiApICAgICAgKQorICAgICAgICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPSBGVF9ISU5USU5HX0ZSRUVUWVBFOworI2VuZGlmCisKKyNpZmRlZiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICAgICAgZWxzZSBpZiAoICggIWZ0X3N0cmNtcCggbW9kdWxlX25hbWUsICJ0eXBlMSIgKSB8fAorICAgICAgICAgICAgICAgICAgICAhZnRfc3RyY21wKCBtb2R1bGVfbmFtZSwgInQxY2lkIiApICkgJiYKKyAgICAgICAgICAgICAgICAgICFmdF9zdHJjbXAoIHMsICJmcmVldHlwZSIgKSAgICAgICAgICAgICkKKyAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfSElOVElOR19GUkVFVFlQRTsKKyNlbmRpZgorCisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfVUludCogIGhpbnRpbmdfZW5naW5lID0gKEZUX1VJbnQqKXZhbHVlOworCisKKyAgICAgICAgaWYgKCAqaGludGluZ19lbmdpbmUgPT0gRlRfSElOVElOR19BRE9CRQorI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICAgICAgICAgICB8fCAoICpoaW50aW5nX2VuZ2luZSA9PSBGVF9ISU5USU5HX0ZSRUVUWVBFICYmCisgICAgICAgICAgICAgICAgICAhZnRfc3RyY21wKCBtb2R1bGVfbmFtZSwgImNmZiIgKSAgICAgICApCisjZW5kaWYKKyNpZmRlZiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICAgICAgICAgICB8fCAoICpoaW50aW5nX2VuZ2luZSA9PSBGVF9ISU5USU5HX0ZSRUVUWVBFICYmCisgICAgICAgICAgICAgICAgICAoICFmdF9zdHJjbXAoIG1vZHVsZV9uYW1lLCAidHlwZTEiICkgfHwKKyAgICAgICAgICAgICAgICAgICAgIWZ0X3N0cmNtcCggbW9kdWxlX25hbWUsICJ0MWNpZCIgKSApICkKKyNlbmRpZgorICAgICAgICAgICApCisgICAgICAgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9ICpoaW50aW5nX2VuZ2luZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVycm9yID0gRlRfRVJSKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICB9CisgICAgfQorCisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJuby1zdGVtLWRhcmtlbmluZyIgKSApCisgICAgeworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcyAgID0gKGNvbnN0IGNoYXIqKXZhbHVlOworICAgICAgICBsb25nICAgICAgICAgbnNkID0gZnRfc3RydG9sKCBzLCBOVUxMLCAxMCApOworCisKKyAgICAgICAgaWYgKCAhbnNkICkKKyAgICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gRkFMU0U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICBGVF9Cb29sKiAgbm9fc3RlbV9kYXJrZW5pbmcgPSAoRlRfQm9vbCopdmFsdWU7CisKKworICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gKm5vX3N0ZW1fZGFya2VuaW5nOworICAgICAgfQorCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJyYW5kb20tc2VlZCIgKSApCisgICAgeworICAgICAgRlRfSW50MzIgIHJhbmRvbV9zZWVkOworCisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogIHMgPSAoY29uc3QgY2hhciopdmFsdWU7CisKKworICAgICAgICByYW5kb21fc2VlZCA9IChGVF9JbnQzMilmdF9zdHJ0b2woIHMsIE5VTEwsIDEwICk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgcmFuZG9tX3NlZWQgPSAqKEZUX0ludDMyKil2YWx1ZTsKKworICAgICAgaWYgKCByYW5kb21fc2VlZCA8IDAgKQorICAgICAgICByYW5kb21fc2VlZCA9IDA7CisKKyAgICAgIGRyaXZlci0+cmFuZG9tX3NlZWQgPSByYW5kb21fc2VlZDsKKworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIEZUX1RSQUNFMCgoICJwc19wcm9wZXJ0eV9zZXQ6IG1pc3NpbmcgcHJvcGVydHkgYCVzJ1xuIiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eV9uYW1lICkpOworICAgIHJldHVybiBGVF9USFJPVyggTWlzc2luZ19Qcm9wZXJ0eSApOworICB9CisKKworICBGVF9CQVNFX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQorICBwc19wcm9wZXJ0eV9nZXQoIEZUX01vZHVsZSAgICBtb2R1bGUsICAgICAgICAgLyogUFNfRHJpdmVyICovCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIHZhbHVlICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIFBTX0RyaXZlciAgZHJpdmVyID0gKFBTX0RyaXZlciltb2R1bGU7CisKKworICAgIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImRhcmtlbmluZy1wYXJhbWV0ZXJzIiApICkKKyAgICB7CisgICAgICBGVF9JbnQqICBkYXJrZW5fcGFyYW1zID0gZHJpdmVyLT5kYXJrZW5fcGFyYW1zOworICAgICAgRlRfSW50KiAgdmFsICAgICAgICAgICA9IChGVF9JbnQqKXZhbHVlOworCisKKyAgICAgIHZhbFswXSA9IGRhcmtlbl9wYXJhbXNbMF07CisgICAgICB2YWxbMV0gPSBkYXJrZW5fcGFyYW1zWzFdOworICAgICAgdmFsWzJdID0gZGFya2VuX3BhcmFtc1syXTsKKyAgICAgIHZhbFszXSA9IGRhcmtlbl9wYXJhbXNbM107CisgICAgICB2YWxbNF0gPSBkYXJrZW5fcGFyYW1zWzRdOworICAgICAgdmFsWzVdID0gZGFya2VuX3BhcmFtc1s1XTsKKyAgICAgIHZhbFs2XSA9IGRhcmtlbl9wYXJhbXNbNl07CisgICAgICB2YWxbN10gPSBkYXJrZW5fcGFyYW1zWzddOworCisgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCisgICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJoaW50aW5nLWVuZ2luZSIgKSApCisgICAgeworICAgICAgRlRfVUludCAgIGhpbnRpbmdfZW5naW5lICAgID0gZHJpdmVyLT5oaW50aW5nX2VuZ2luZTsKKyAgICAgIEZUX1VJbnQqICB2YWwgICAgICAgICAgICAgICA9IChGVF9VSW50Kil2YWx1ZTsKKworCisgICAgICAqdmFsID0gaGludGluZ19lbmdpbmU7CisKKyAgICAgIHJldHVybiBlcnJvcjsKKyAgICB9CisKKyAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgIm5vLXN0ZW0tZGFya2VuaW5nIiApICkKKyAgICB7CisgICAgICBGVF9Cb29sICAgbm9fc3RlbV9kYXJrZW5pbmcgPSBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nOworICAgICAgRlRfQm9vbCogIHZhbCAgICAgICAgICAgICAgID0gKEZUX0Jvb2wqKXZhbHVlOworCisKKyAgICAgICp2YWwgPSBub19zdGVtX2RhcmtlbmluZzsKKworICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKworICAgIEZUX1RSQUNFMCgoICJwc19wcm9wZXJ0eV9nZXQ6IG1pc3NpbmcgcHJvcGVydHkgYCVzJ1xuIiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eV9uYW1lICkpOworICAgIHJldHVybiBGVF9USFJPVyggTWlzc2luZ19Qcm9wZXJ0eSApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHJmb3JrLmMgYi9zcmMvYmFzZS9mdHJmb3JrLmMKaW5kZXggZjdiODEzNy4uYzNhMmI5MSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRyZm9yay5jCisrKyBiL3NyYy9iYXNlL2Z0cmZvcmsuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBFbWJlZGRlZCByZXNvdXJjZSBmb3JrcyBhY2Nlc3NvciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkaGF0IEsuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbygpIGFuZCByYWNjZXNzX2d1ZXNzX2Rhcndpbl9oZnNwbHVzKCkgYXJlICAgICAqLwpAQCAtMjcxLDcgKzI3MSwxMyBAQAogICAgICAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIDQgKSApICAvKiBtYnogKi8KICAgICAgICAgICAgIGdvdG8gRXhpdDsKIAotICAgICAgICAgIGlmICggcmVmW2pdLnJlc19pZCA8IDAgfHwgdGVtcCA8IDAgKQorICAgICAgICAgIC8qCisgICAgICAgICAgICogQWNjb3JkaW5nIHRvIEluc2lkZSBNYWNpbnRvc2g6IE1vcmUgTWFjaW50b3NoIFRvb2xib3gsCisgICAgICAgICAgICogIlJlc291cmNlIElEcyIgKDEtNDYpLCB0aGVyZSBhcmUgc29tZSByZXNlcnZlZCBJRHMuCisgICAgICAgICAgICogSG93ZXZlciwgRnJlZVR5cGUyIGlzIG5vdCBhIGZvbnQgc3ludGhlc2l6ZXIsIG5vIG5lZWQKKyAgICAgICAgICAgKiB0byBjaGVjayB0aGUgYWNjZXB0YWJsZSByZXNvdXJjZSBJRC4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIHRlbXAgPCAwICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CiAgICAgICAgICAgICBnb3RvIEV4aXQ7CkBAIC0yODEsNyArMjg3LDcgQEAKIAogICAgICAgICAgIEZUX1RSQUNFMygoICIgICAgICAgICAgICAgWyVkXToiCiAgICAgICAgICAgICAgICAgICAgICAgIiByZXNvdXJjZV9pZD0weCUwNHgsIG9mZnNldD0weCUwOHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgaiwgcmVmW2pdLnJlc19pZCwgcmVmW2pdLm9mZnNldCApKTsKKyAgICAgICAgICAgICAgICAgICAgICBqLCAoRlRfVVNob3J0KXJlZltqXS5yZXNfaWQsIHJlZltqXS5vZmZzZXQgKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIHNvcnRfYnlfcmVzX2lkICkKQEAgLTQ3Miw3ICs0NzgsNyBAQAogICB9CiAKIAotI2lmbmRlZiBGVF9NQUNJTlRPU0gKKyNpZiBkZWZpbmVkKCBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUyApICYmICFkZWZpbmVkKCBGVF9NQUNJTlRPU0ggKQogICBzdGF0aWMgRlRfUkZvcmtfUnVsZQogICByYWNjZXNzX2dldF9ydWxlX3R5cGVfZnJvbV9ydWxlX2luZGV4KCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBydWxlX2luZGV4ICkKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c25hbWVzLmMgYi9zcmMvYmFzZS9mdHNuYW1lcy5jCmluZGV4IDg2OGI0MjkuLjkwZWExZTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c25hbWVzLmMKKysrIGIvc3JjL2Jhc2UvZnRzbmFtZXMuYwpAQCAtNyw3ICs3LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGlzIGlzIF9ub3RfIHVzZWQgdG8gcmV0cmlldmUgZ2x5cGggbmFtZXMhICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsNiArMjAsOCBAQAogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorCiAjaW5jbHVkZSBGVF9TRk5UX05BTUVTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1RSVUVUWVBFX1RZUEVTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NUUkVBTV9ICmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHN0cmVhbS5jIGIvc3JjL2Jhc2UvZnRzdHJlYW0uYwppbmRleCBhM2Y4YzhiLi4xOGRmN2RjIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHN0cmVhbS5jCisrKyBiL3NyYy9iYXNlL2Z0c3RyZWFtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSS9PIHN0cmVhbSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3Ryb2tlLmMgYi9zcmMvYmFzZS9mdHN0cm9rZS5jCmluZGV4IGQzMmRlMGQuLjZhZTE4MTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3Ryb2tlLmMKKysrIGIvc3JjL2Jhc2UvZnRzdHJva2UuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBwYXRoIHN0cm9rZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzeW50aC5jIGIvc3JjL2Jhc2UvZnRzeW50aC5jCmluZGV4IDY2ZGFlNjAuLmMyODM0NjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0c3ludGguYworKysgYi9zcmMvYmFzZS9mdHN5bnRoLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc3ludGhlc2l6aW5nIGNvZGUgZm9yIGVtYm9sZGVuaW5nIGFuZCBzbGFudGluZyAoYm9keSkuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAgICAgICAvKgogICAgICAgICogWFhYOiBvdmVyZmxvdyBjaGVjayBmb3IgMTYtYml0IHN5c3RlbSwgZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAqICAgICAgd2l0aCBGVF9HbHlwaFNsb3RfRW1ib2xkZW4oKSBzaW5jZSBmcmVldHlwZS0yLjEuMTAuCisgICAgICAgKiAgICAgIHdpdGggRlRfR2x5cGhTbG90X0VtYm9sZGVuKCkgc2luY2UgRnJlZVR5cGUgMi4xLjEwLgogICAgICAgICogICAgICB1bmZvcnR1bmF0ZWx5LCB0aGlzIGZ1bmN0aW9uIHJldHVybiBubyBpbmZvcm1hdGlvbnMKICAgICAgICAqICAgICAgYWJvdXQgdGhlIGNhdXNlIG9mIGVycm9yLgogICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHN5c3RlbS5jIGIvc3JjL2Jhc2UvZnRzeXN0ZW0uYwppbmRleCAzMjRmOTQ5Li42YWRlYmRiIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHN5c3RlbS5jCisrKyBiL3NyYy9iYXNlL2Z0c3lzdGVtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQU5TSS1zcGVjaWZpYyBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dHJpZ29uLmMgYi9zcmMvYmFzZS9mdHRyaWdvbi5jCmluZGV4IDdhNGQxN2MuLmQ2ZGQwOTggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0dHJpZ29uLmMKKysrIGIvc3JjL2Jhc2UvZnR0cmlnb24uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnR0eXBlMS5jIGIvc3JjL2Jhc2UvZnR0eXBlMS5jCmluZGV4IDRkMTZhNjMuLmFhOGY4Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0dHlwZTEuYworKysgYi9zcmMvYmFzZS9mdHR5cGUxLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBQUyBuYW1lcyBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dXRpbC5jIGIvc3JjL2Jhc2UvZnR1dGlsLmMKaW5kZXggZGNjYzIwOS4uNGRlNWYyYyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnR1dGlsLmMKKysrIGIvc3JjL2Jhc2UvZnR1dGlsLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIGZvciBtZW1vcnkgYW5kIGxpc3QgbWFuYWdlbWVudCAoYm9keSkuICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgZnRfbWVtX2ZyZWUoIG1lbW9yeSwgYmxvY2sgKTsKICAgICAgIGJsb2NrID0gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoIG5ld19jb3VudCA+IEZUX0lOVF9NQVgvaXRlbV9zaXplICkKKyAgICBlbHNlIGlmICggbmV3X2NvdW50ID4gRlRfSU5UX01BWCAvIGl0ZW1fc2l6ZSApCiAgICAgewogICAgICAgZXJyb3IgPSBGVF9USFJPVyggQXJyYXlfVG9vX0xhcmdlICk7CiAgICAgfQpAQCAtMTQzLDEzICsxNDMsMTUgQEAKICAgICB7CiAgICAgICBGVF9BU1NFUlQoICFibG9jayApOwogCi0gICAgICBibG9jayA9IGZ0X21lbV9hbGxvYyggbWVtb3J5LCBuZXdfY291bnQqaXRlbV9zaXplLCAmZXJyb3IgKTsKKyAgICAgIGJsb2NrID0gbWVtb3J5LT5hbGxvYyggbWVtb3J5LCBuZXdfY291bnQgKiBpdGVtX3NpemUgKTsKKyAgICAgIGlmICggYmxvY2sgPT0gTlVMTCApCisgICAgICAgIGVycm9yID0gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIEZUX1BvaW50ZXIgIGJsb2NrMjsKLSAgICAgIEZUX0xvbmcgICAgIGN1cl9zaXplID0gY3VyX2NvdW50Kml0ZW1fc2l6ZTsKLSAgICAgIEZUX0xvbmcgICAgIG5ld19zaXplID0gbmV3X2NvdW50Kml0ZW1fc2l6ZTsKKyAgICAgIEZUX0xvbmcgICAgIGN1cl9zaXplID0gY3VyX2NvdW50ICogaXRlbV9zaXplOworICAgICAgRlRfTG9uZyAgICAgbmV3X3NpemUgPSBuZXdfY291bnQgKiBpdGVtX3NpemU7CiAKIAogICAgICAgYmxvY2syID0gbWVtb3J5LT5yZWFsbG9jKCBtZW1vcnksIGN1cl9zaXplLCBuZXdfc2l6ZSwgYmxvY2sgKTsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dmVyLnJjIGIvc3JjL2Jhc2UvZnR2ZXIucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmZjk5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYXNlL2Z0dmVyLnJjCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZ0dmVyLnJjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBWRVJTSU9OSU5GTyByZXNvdXJjZSBmb3IgV2luZG93cyBETExzLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2luY2x1ZGU8d2luZG93cy5oPgorCisjZGVmaW5lIEZUX1ZFUlNJT04gICAgICAyLDksMCwwCisjZGVmaW5lIEZUX1ZFUlNJT05fU1RSICAiMi45LjAiCisKK1ZTX1ZFUlNJT05fSU5GTyAgICAgIFZFUlNJT05JTkZPCitGSUxFVkVSU0lPTiAgICAgICAgICBGVF9WRVJTSU9OCitQUk9EVUNUVkVSU0lPTiAgICAgICBGVF9WRVJTSU9OCitGSUxFRkxBR1NNQVNLICAgICAgICBWU19GRklfRklMRUZMQUdTTUFTSworI2lmZGVmIF9ERUJVRworRklMRUZMQUdTICAgICAgICAgICAgVlNfRkZfREVCVUcKKyNlbmRpZgorI2lmZGVmIF9ETEwKK0ZJTEVUWVBFICAgICAgICAgICAgIFZGVF9ETEwKKyNkZWZpbmUgRlRfRklMRU5BTUUgICJmcmVldHlwZS5kbGwiCisjZWxzZQorRklMRVRZUEUgICAgICAgICAgICAgVkZUX1NUQVRJQ19MSUIKKyNkZWZpbmUgRlRfRklMRU5BTUUgICJmcmVldHlwZS5saWIiCisjZW5kaWYKK0JFR0lOCisgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICBCTE9DSyAiMDQwOTA0RTQiCisgICAgQkVHSU4KKyAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICAgICAgIlRoZSBGcmVlVHlwZSBQcm9qZWN0IgorICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICAiRm9udCBSZW5kZXJpbmcgTGlicmFyeSIKKyAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICAgICAgRlRfVkVSU0lPTl9TVFIKKyAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICAgICAgIkZyZWVUeXBlIgorICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgICBGVF9WRVJTSU9OX1NUUgorICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgICAiXDI1MSAyMDE4IFRoZSBGcmVlVHlwZSBQcm9qZWN0IHd3dy5mcmVldHlwZS5vcmcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgorICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICAgICAiZnJlZXR5cGUiCisgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsIEZUX0ZJTEVOQU1FCisgICAgRU5ECisgIEVORAorCisgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICAvKiBUaGUgZm9sbG93aW5nIGxpbmUgc2hvdWxkIG9ubHkgYmUgbW9kaWZpZWQgZm9yIGxvY2FsaXplZCB2ZXJzaW9ucy4gICovCisgICAgLyogSXQgY29uc2lzdHMgb2YgYW55IG51bWJlciBvZiBXT1JELFdPUkQgcGFpcnMsIHdpdGggZWFjaCBwYWlyICAgICAgICAqLworICAgIC8qIGRlc2NyaWJpbmcgYSAibGFuZ3VhZ2UsY29kZXBhZ2UiIGNvbWJpbmF0aW9uIHN1cHBvcnRlZCBieSB0aGUgZmlsZS4gKi8KKyAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDQwOSwgMTI1MgorICBFTkQKK0VORApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnR3aW5mbnQuYyBiL3NyYy9iYXNlL2Z0d2luZm50LmMKaW5kZXggMDViYWEwMi4uMTFiZDI4YSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnR3aW5mbnQuYworKysgYi9zcmMvYmFzZS9mdHdpbmZudC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgRk5UIHNwZWNpZmljIGluZm8gKGJvZHkpLiAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9ydWxlcy5tayBiL3NyYy9iYXNlL3J1bGVzLm1rCmluZGV4IDJhMWU5M2MuLjY0OTFmNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL3J1bGVzLm1rCisrKyBiL3NyYy9iYXNlL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0b2Jqcy5jICAgXAogICAgICAgICAgICAgJChCQVNFX0RJUikvZnRvdXRsbi5jICBcCiAgICAgICAgICAgICAkKEJBU0VfRElSKS9mdHBpYy5jICAgIFwKKyAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0cHNwcm9wLmMgXAogICAgICAgICAgICAgJChCQVNFX0RJUikvZnRyZm9yay5jICBcCiAgICAgICAgICAgICAkKEJBU0VfRElSKS9mdHNuYW1lcy5jIFwKICAgICAgICAgICAgICQoQkFTRV9ESVIpL2Z0c3RyZWFtLmMgXApkaWZmIC0tZ2l0IGEvc3JjL2JkZi9KYW1maWxlIGIvc3JjL2JkZi9KYW1maWxlCmluZGV4IGYzODJiNTEuLmQ5ZTQ0MWMgMTAwNjQ0Ci0tLSBhL3NyYy9iZGYvSmFtZmlsZQorKysgYi9zcmMvYmRmL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL2JkZiBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDItMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvYmRmL1JFQURNRSBiL3NyYy9iZGYvUkVBRE1FCmluZGV4IGI3NjFhYmEuLjk5NmFjMmQgMTAwNjQ0Ci0tLSBhL3NyYy9iZGYvUkVBRE1FCisrKyBiL3NyYy9iZGYvUkVBRE1FCkBAIC0xMyw3ICsxMyw3IEBACiBBZG9iZSBTcGVjaWZpY2F0aW9uIFYgMi4yLiAgVGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIEJERiBmb250IGZvcm1hdCBpcwogYXZhaWxhYmxlIGZyb20gQWRvYmUncyB3ZWIgc2l0ZToKIAotICBodHRwOi8vcGFydG5lcnMuYWRvYmUuY29tL3B1YmxpYy9kZXZlbG9wZXIvZW4vZm9udC81MDA1LkJERl9TcGVjLnBkZgorICBodHRwczovL3d3dy5hZG9iZS5jb20vY29udGVudC9kYW0vYWNvbS9lbi9kZXZuZXQvZm9udC9wZGZzLzUwMDUuQkRGX1NwZWMucGRmCiAKIE1hbnkgZ29vZCBiaXRtYXAgZm9udHMgaW4gYmRmIGZvcm1hdCBjb21lIHdpdGggWEZyZWU4NiAod3d3LlhGcmVlODYub3JnKS4KIFRoZXkgZG8gbm90IGRlZmluZSB2ZXJ0aWNhbCBtZXRyaWNzLCBiZWNhdXNlIHRoZSBYIENvbnNvcnRpdW0gQkRGCmRpZmYgLS1naXQgYS9zcmMvYmRmL2JkZi5jIGIvc3JjL2JkZi9iZGYuYwppbmRleCBmOTVmYjc2Li5lNTRkZjY2IDEwMDY0NAotLS0gYS9zcmMvYmRmL2JkZi5jCisrKyBiL3NyYy9iZGYvYmRmLmMKQEAgLTI0LDkgKzI0LDEwIEBACiBUSEUgU09GVFdBUkUuCiAqLwogCi0jZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKIAorI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKwogI2luY2x1ZGUgImJkZmxpYi5jIgogI2luY2x1ZGUgImJkZmRyaXZyLmMiCiAKZGlmZiAtLWdpdCBhL3NyYy9iZGYvYmRmZHJpdnIuYyBiL3NyYy9iZGYvYmRmZHJpdnIuYwppbmRleCBhMjI0MmJlLi5jYTkzN2Y4IDEwMDY0NAotLS0gYS9zcmMvYmRmL2JkZmRyaXZyLmMKKysrIGIvc3JjL2JkZi9iZGZkcml2ci5jCkBAIC0zNzMsNyArMzczLDcgQEAKICAgICAvKiB3ZSBoYXZlIGEgYmRmIGZvbnQ6IGxldCdzIGNvbnN0cnVjdCB0aGUgZmFjZSBvYmplY3QgKi8KICAgICBmYWNlLT5iZGZmb250ID0gZm9udDsKIAotICAgIC8qIEJERiBjb3VsZCBub3QgaGF2ZSBtdWx0aXBsZSBmYWNlIGluIHNpbmdsZSBmb250IGZpbGUuCisgICAgLyogQkRGIGNhbm5vdCBoYXZlIG11bHRpcGxlIGZhY2VzIGluIGEgc2luZ2xlIGZvbnQgZmlsZS4KICAgICAgKiBYWFg6IG5vbi16ZXJvIGZhY2VfaW5kZXggaXMgYWxyZWFkeSBpbnZhbGlkIGFyZ3VtZW50LCBidXQKICAgICAgKiAgICAgIFR5cGUxLCBUeXBlNDIgZHJpdmVyIGhhcyBhIGNvbnZlbnRpb24gdG8gcmV0dXJuCiAgICAgICogICAgICBhbiBpbnZhbGlkIGFyZ3VtZW50IGVycm9yIHdoZW4gdGhlIGZvbnQgY291bGQgYmUKQEAgLTQzNyw0NiArNDM3LDE1NiBAQAogICAgICAgewogICAgICAgICBGVF9CaXRtYXBfU2l6ZSogIGJzaXplID0gYmRmZmFjZS0+YXZhaWxhYmxlX3NpemVzOwogICAgICAgICBGVF9TaG9ydCAgICAgICAgIHJlc29sdXRpb25feCA9IDAsIHJlc29sdXRpb25feSA9IDA7CisgICAgICAgIGxvbmcgICAgICAgICAgICAgdmFsdWU7CiAKIAogICAgICAgICBGVF9aRVJPKCBic2l6ZSApOwogCisgICAgICAgIC8qIHNhbml0eSBjaGVja3MgKi8KKyAgICAgICAgaWYgKCBmb250LT5mb250X2FzY2VudCA+IDB4N0ZGRiB8fCBmb250LT5mb250X2FzY2VudCA8IC0weDdGRkYgKQorICAgICAgICB7CisgICAgICAgICAgZm9udC0+Zm9udF9hc2NlbnQgPSBmb250LT5mb250X2FzY2VudCA8IDAgPyAtMHg3RkZGIDogMHg3RkZGOworICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBmb250IGFzY2VudCB0byB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBmb250LT5mb250X2FzY2VudCApKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGZvbnQtPmZvbnRfZGVzY2VudCA+IDB4N0ZGRiB8fCBmb250LT5mb250X2Rlc2NlbnQgPCAtMHg3RkZGICkKKyAgICAgICAgeworICAgICAgICAgIGZvbnQtPmZvbnRfZGVzY2VudCA9IGZvbnQtPmZvbnRfZGVzY2VudCA8IDAgPyAtMHg3RkZGIDogMHg3RkZGOworICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBmb250IGRlc2NlbnQgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgZm9udC0+Zm9udF9kZXNjZW50ICkpOworICAgICAgICB9CisKICAgICAgICAgYnNpemUtPmhlaWdodCA9IChGVF9TaG9ydCkoIGZvbnQtPmZvbnRfYXNjZW50ICsgZm9udC0+Zm9udF9kZXNjZW50ICk7CiAKICAgICAgICAgcHJvcCA9IGJkZl9nZXRfZm9udF9wcm9wZXJ0eSggZm9udCwgIkFWRVJBR0VfV0lEVEgiICk7CiAgICAgICAgIGlmICggcHJvcCApCi0gICAgICAgICAgYnNpemUtPndpZHRoID0gKEZUX1Nob3J0KSggKCBwcm9wLT52YWx1ZS5sICsgNSApIC8gMTAgKTsKKyAgICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgaWYgKCBwcm9wLT52YWx1ZS5sIDwgMCApCisgICAgICAgICAgICBGVF9UUkFDRTAoKCAiQkRGX0ZhY2VfSW5pdDogbmVnYXRpdmUgYXZlcmFnZSB3aWR0aFxuIiApKTsKKyNlbmRpZgorICAgICAgICAgIGlmICggcHJvcC0+dmFsdWUubCA+ICAgIDB4N0ZGRkwgKiAxMCAtIDUgICB8fAorICAgICAgICAgICAgICAgcHJvcC0+dmFsdWUubCA8IC0oIDB4N0ZGRkwgKiAxMCAtIDUgKSApCisgICAgICAgICAgeworICAgICAgICAgICAgYnNpemUtPndpZHRoID0gMHg3RkZGOworICAgICAgICAgICAgRlRfVFJBQ0UwKCggIkJERl9GYWNlX0luaXQ6IGNsYW1waW5nIGF2ZXJhZ2Ugd2lkdGggdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBic2l6ZS0+d2lkdGggKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJzaXplLT53aWR0aCA9IEZUX0FCUyggKEZUX1Nob3J0KSggKCBwcm9wLT52YWx1ZS5sICsgNSApIC8gMTAgKSApOworICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgICBic2l6ZS0+d2lkdGggPSAoRlRfU2hvcnQpKCBic2l6ZS0+aGVpZ2h0ICogMi8zICk7CisgICAgICAgIHsKKyAgICAgICAgICAvKiB0aGlzIGlzIGEgaGV1cmlzdGljYWwgdmFsdWUgKi8KKyAgICAgICAgICBic2l6ZS0+d2lkdGggPSAoRlRfU2hvcnQpRlRfTXVsRGl2KCBic2l6ZS0+aGVpZ2h0LCAyLCAzICk7CisgICAgICAgIH0KIAogICAgICAgICBwcm9wID0gYmRmX2dldF9mb250X3Byb3BlcnR5KCBmb250LCAiUE9JTlRfU0laRSIgKTsKICAgICAgICAgaWYgKCBwcm9wICkKKyAgICAgICAgeworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgICAgaWYgKCBwcm9wLT52YWx1ZS5sIDwgMCApCisgICAgICAgICAgICBGVF9UUkFDRTAoKCAiQkRGX0ZhY2VfSW5pdDogbmVnYXRpdmUgcG9pbnQgc2l6ZVxuIiApKTsKKyNlbmRpZgogICAgICAgICAgIC8qIGNvbnZlcnQgZnJvbSA3MjIuNyBkZWNpcG9pbnRzIHRvIDcyIHBvaW50cyBwZXIgaW5jaCAqLwotICAgICAgICAgIGJzaXplLT5zaXplID0KLSAgICAgICAgICAgIChGVF9Qb3MpKCAoIHByb3AtPnZhbHVlLmwgKiA2NCAqIDcyMDAgKyAzNjEzNUwgKSAvIDcyMjcwTCApOworICAgICAgICAgIGlmICggcHJvcC0+dmFsdWUubCA+ICAweDUwNEMyTCB8fCAvKiAweDdGRkYgKiA3MjI3MC83MjAwICovCisgICAgICAgICAgICAgICBwcm9wLT52YWx1ZS5sIDwgLTB4NTA0QzJMICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBic2l6ZS0+c2l6ZSA9IDB4N0ZGRjsKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBwb2ludCBzaXplIHRvIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYnNpemUtPnNpemUgKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJzaXplLT5zaXplID0gRlRfTXVsRGl2KCBGVF9BQlMoIHByb3AtPnZhbHVlLmwgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDcyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzIyNzBMICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIGZvbnQtPnBvaW50X3NpemUgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBmb250LT5wb2ludF9zaXplID4gMHg3RkZGICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBic2l6ZS0+c2l6ZSA9IDB4N0ZGRjsKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBwb2ludCBzaXplIHRvIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYnNpemUtPnNpemUgKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJzaXplLT5zaXplID0gKEZUX1Bvcylmb250LT5wb2ludF9zaXplIDw8IDY7CisgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICAgIGJzaXplLT5zaXplID0gYnNpemUtPndpZHRoIDw8IDY7CisgICAgICAgIHsKKyAgICAgICAgICAvKiB0aGlzIGlzIGEgaGV1cmlzdGljYWwgdmFsdWUgKi8KKyAgICAgICAgICBic2l6ZS0+c2l6ZSA9IGJzaXplLT53aWR0aCAqIDY0OworICAgICAgICB9CiAKICAgICAgICAgcHJvcCA9IGJkZl9nZXRfZm9udF9wcm9wZXJ0eSggZm9udCwgIlBJWEVMX1NJWkUiICk7CiAgICAgICAgIGlmICggcHJvcCApCi0gICAgICAgICAgYnNpemUtPnlfcHBlbSA9IChGVF9TaG9ydClwcm9wLT52YWx1ZS5sIDw8IDY7CisgICAgICAgIHsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIGlmICggcHJvcC0+dmFsdWUubCA8IDAgKQorICAgICAgICAgICAgRlRfVFJBQ0UwKCggIkJERl9GYWNlX0luaXQ6IG5lZ2F0aXZlIHBpeGVsIHNpemVcbiIgKSk7CisjZW5kaWYKKyAgICAgICAgICBpZiAoIHByb3AtPnZhbHVlLmwgPiAweDdGRkYgfHwgcHJvcC0+dmFsdWUubCA8IC0weDdGRkYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJzaXplLT55X3BwZW0gPSAweDdGRkYgPDwgNjsKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBwaXhlbCBzaXplIHRvIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYnNpemUtPnlfcHBlbSApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IEZUX0FCUyggKEZUX1Nob3J0KXByb3AtPnZhbHVlLmwgKSA8PCA2OworICAgICAgICB9CiAKICAgICAgICAgcHJvcCA9IGJkZl9nZXRfZm9udF9wcm9wZXJ0eSggZm9udCwgIlJFU09MVVRJT05fWCIgKTsKICAgICAgICAgaWYgKCBwcm9wICkKLSAgICAgICAgICByZXNvbHV0aW9uX3ggPSAoRlRfU2hvcnQpcHJvcC0+dmFsdWUubDsKKyAgICAgICAgICB2YWx1ZSA9IHByb3AtPnZhbHVlLmw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB2YWx1ZSA9IChsb25nKWZvbnQtPnJlc29sdXRpb25feDsKKyAgICAgICAgaWYgKCB2YWx1ZSApCisgICAgICAgIHsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIGlmICggdmFsdWUgPCAwICkKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBuZWdhdGl2ZSBYIHJlc29sdXRpb25cbiIgKSk7CisjZW5kaWYKKyAgICAgICAgICBpZiAoIHZhbHVlID4gMHg3RkZGIHx8IHZhbHVlIDwgLTB4N0ZGRiApCisgICAgICAgICAgeworICAgICAgICAgICAgcmVzb2x1dGlvbl94ID0gMHg3RkZGOworICAgICAgICAgICAgRlRfVFJBQ0UwKCggIkJERl9GYWNlX0luaXQ6IGNsYW1waW5nIFggcmVzb2x1dGlvbiB0byB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25feCApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzb2x1dGlvbl94ID0gRlRfQUJTKCAoRlRfU2hvcnQpdmFsdWUgKTsKKyAgICAgICAgfQogCiAgICAgICAgIHByb3AgPSBiZGZfZ2V0X2ZvbnRfcHJvcGVydHkoIGZvbnQsICJSRVNPTFVUSU9OX1kiICk7CiAgICAgICAgIGlmICggcHJvcCApCi0gICAgICAgICAgcmVzb2x1dGlvbl95ID0gKEZUX1Nob3J0KXByb3AtPnZhbHVlLmw7CisgICAgICAgICAgdmFsdWUgPSBwcm9wLT52YWx1ZS5sOworICAgICAgICBlbHNlCisgICAgICAgICAgdmFsdWUgPSAobG9uZylmb250LT5yZXNvbHV0aW9uX3k7CisgICAgICAgIGlmICggdmFsdWUgKQorICAgICAgICB7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBpZiAoIHZhbHVlIDwgMCApCisgICAgICAgICAgICBGVF9UUkFDRTAoKCAiQkRGX0ZhY2VfSW5pdDogbmVnYXRpdmUgWSByZXNvbHV0aW9uXG4iICkpOworI2VuZGlmCisgICAgICAgICAgaWYgKCB2YWx1ZSA+IDB4N0ZGRiB8fCB2YWx1ZSA8IC0weDdGRkYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc29sdXRpb25feSA9IDB4N0ZGRjsKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJCREZfRmFjZV9Jbml0OiBjbGFtcGluZyBZIHJlc29sdXRpb24gdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uX3kgKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc29sdXRpb25feSA9IEZUX0FCUyggKEZUX1Nob3J0KXZhbHVlICk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoIGJzaXplLT55X3BwZW0gPT0gMCApCiAgICAgICAgIHsKICAgICAgICAgICBic2l6ZS0+eV9wcGVtID0gYnNpemUtPnNpemU7CiAgICAgICAgICAgaWYgKCByZXNvbHV0aW9uX3kgKQotICAgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IGJzaXplLT55X3BwZW0gKiByZXNvbHV0aW9uX3kgLyA3MjsKKyAgICAgICAgICAgIGJzaXplLT55X3BwZW0gPSBGVF9NdWxEaXYoIGJzaXplLT55X3BwZW0sIHJlc29sdXRpb25feSwgNzIgKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIHJlc29sdXRpb25feCAmJiByZXNvbHV0aW9uX3kgKQotICAgICAgICAgIGJzaXplLT54X3BwZW0gPSBic2l6ZS0+eV9wcGVtICogcmVzb2x1dGlvbl94IC8gcmVzb2x1dGlvbl95OworICAgICAgICAgIGJzaXplLT54X3BwZW0gPSBGVF9NdWxEaXYoIGJzaXplLT55X3BwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbl94LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25feSApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgYnNpemUtPnhfcHBlbSA9IGJzaXplLT55X3BwZW07CiAgICAgICB9CkBAIC01NDUsNyArNjU1LDExIEBACiAgICAgICAgICAgICAgIGlmICggIWZ0X3N0cmNtcCggcywgIjEwNjQ2IiApICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAgICAgKCAhZnRfc3RyY21wKCBzLCAiODg1OSIgKSAmJgogICAgICAgICAgICAgICAgICAgICAgIWZ0X3N0cmNtcCggZmFjZS0+Y2hhcnNldF9lbmNvZGluZywgIjEiICkgKSApCi0gICAgICAgICAgICAgIHVuaWNvZGVfY2hhcm1hcCA9IDE7CisgICAgICAgICAgICAgICAgdW5pY29kZV9jaGFybWFwID0gMTsKKyAgICAgICAgICAgICAgLyogYW5vdGhlciBuYW1lIGZvciBBU0NJSSAqLworICAgICAgICAgICAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcywgIjY0Ni4xOTkxIiApICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIWZ0X3N0cmNtcCggZmFjZS0+Y2hhcnNldF9lbmNvZGluZywgIklSViIgKSApCisgICAgICAgICAgICAgICAgdW5pY29kZV9jaGFybWFwID0gMTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgewpAQCAtNTY2LDEyICs2ODAsNiBAQAogICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggJmJkZl9jbWFwX2NsYXNzLCBOVUxMLCAmY2hhcm1hcCwgTlVMTCApOwotCi0jaWYgMAotICAgICAgICAgICAgICAvKiBTZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCi0gICAgICAgICAgICAgIGlmICggYmRmZmFjZS0+bnVtX2NoYXJtYXBzICkKLSAgICAgICAgICAgICAgICBiZGZmYWNlLT5jaGFybWFwID0gYmRmZmFjZS0+Y2hhcm1hcHNbMF07Ci0jZW5kaWYKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZ290byBFeGl0OwpAQCAtNzA1LDcgKzgxMyw3IEBACiAKICAgICBiaXRtYXAtPnJvd3MgID0gZ2x5cGguYmJ4LmhlaWdodDsKICAgICBiaXRtYXAtPndpZHRoID0gZ2x5cGguYmJ4LndpZHRoOwotICAgIGlmICggZ2x5cGguYnByID4gSU5UX01BWCApCisgICAgaWYgKCBnbHlwaC5icHIgPiBGVF9JTlRfTUFYICkKICAgICAgIEZUX1RSQUNFMSgoICJCREZfR2x5cGhfTG9hZDogdG9vIGxhcmdlIHBpdGNoICVkIGlzIHRydW5jYXRlZFxuIiwKICAgICAgICAgICAgICAgICAgICBnbHlwaC5icHIgKSk7CiAgICAgYml0bWFwLT5waXRjaCA9IChpbnQpZ2x5cGguYnByOyAvKiBzYW1lIGFzIEZUX0JpdG1hcC5waXRjaCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JkZi9iZGZsaWIuYyBiL3NyYy9iZGYvYmRmbGliLmMKaW5kZXggN2ZkOTVhNy4uMmY1Yzk5ZCAxMDA2NDQKLS0tIGEvc3JjL2JkZi9iZGZsaWIuYworKysgYi9zcmMvYmRmL2JkZmxpYi5jCkBAIC03MDQsNyArNzA0LDE1IEBACiAgICAgICByZXR1cm4gMDsKIAogICAgIGZvciAoIHYgPSAwOyBzYml0c2V0KCBkZGlnaXRzLCAqcyApOyBzKysgKQotICAgICAgdiA9IHYgKiAxMCArIGEyaVsoaW50KSpzXTsKKyAgICB7CisgICAgICBpZiAoIHYgPCAoIEZUX1VMT05HX01BWCAtIDkgKSAvIDEwICkKKyAgICAgICAgdiA9IHYgKiAxMCArIGEyaVsoaW50KSpzXTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdiA9IEZUX1VMT05HX01BWDsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQogCiAgICAgcmV0dXJuIHY7CiAgIH0KQEAgLTcyOSw3ICs3MzcsMTUgQEAKICAgICB9CiAKICAgICBmb3IgKCB2ID0gMDsgc2JpdHNldCggZGRpZ2l0cywgKnMgKTsgcysrICkKLSAgICAgIHYgPSB2ICogMTAgKyBhMmlbKGludCkqc107CisgICAgeworICAgICAgaWYgKCB2IDwgKCBGVF9MT05HX01BWCAtIDkgKSAvIDEwICkKKyAgICAgICAgdiA9IHYgKiAxMCArIGEyaVsoaW50KSpzXTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdiA9IEZUX0xPTkdfTUFYOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CiAKICAgICByZXR1cm4gKCAhbmVnICkgPyB2IDogLXY7CiAgIH0KQEAgLTc0Niw3ICs3NjIsMTUgQEAKICAgICAgIHJldHVybiAwOwogCiAgICAgZm9yICggdiA9IDA7IHNiaXRzZXQoIGRkaWdpdHMsICpzICk7IHMrKyApCi0gICAgICB2ID0gKHVuc2lnbmVkIHNob3J0KSggdiAqIDEwICsgYTJpWyhpbnQpKnNdICk7CisgICAgeworICAgICAgaWYgKCB2IDwgKCBGVF9VU0hPUlRfTUFYIC0gOSApIC8gMTAgKQorICAgICAgICB2ID0gKHVuc2lnbmVkIHNob3J0KSggdiAqIDEwICsgYTJpWyhpbnQpKnNdICk7CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHYgPSBGVF9VU0hPUlRfTUFYOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CiAKICAgICByZXR1cm4gdjsKICAgfQpAQCAtNzcxLDcgKzc5NSwxNSBAQAogICAgIH0KIAogICAgIGZvciAoIHYgPSAwOyBzYml0c2V0KCBkZGlnaXRzLCAqcyApOyBzKysgKQotICAgICAgdiA9IChzaG9ydCkoIHYgKiAxMCArIGEyaVsoaW50KSpzXSApOworICAgIHsKKyAgICAgIGlmICggdiA8ICggU0hSVF9NQVggLSA5ICkgLyAxMCApCisgICAgICAgIHYgPSAoc2hvcnQpKCB2ICogMTAgKyBhMmlbKGludCkqc10gKTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdiA9IFNIUlRfTUFYOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CiAKICAgICByZXR1cm4gKHNob3J0KSggKCAhbmVnICkgPyB2IDogLXYgKTsKICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2J6aXAyL0phbWZpbGUgYi9zcmMvYnppcDIvSmFtZmlsZQppbmRleCBmMzY5ZDRhLi4zNTQ4ZWFiIDEwMDY0NAotLS0gYS9zcmMvYnppcDIvSmFtZmlsZQorKysgYi9zcmMvYnppcDIvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvYnppcDIgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAxMC0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDEwLTIwMTggYnkKICMgSm9lbCBLbGluZ2hlZAogIwogIyBiYXNlZCBvbiBgc3JjL2x6dy9KYW1maWxlJwpkaWZmIC0tZ2l0IGEvc3JjL2J6aXAyL2Z0YnppcDIuYyBiL3NyYy9iemlwMi9mdGJ6aXAyLmMKaW5kZXggN2ZjNzFlNy4uMTYwMTk0OCAxMDA2NDQKLS0tIGEvc3JjL2J6aXAyL2Z0YnppcDIuYworKysgYi9zcmMvYnppcDIvZnRiemlwMi5jCkBAIC04LDcgKzgsNyBAQAogLyogIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlciAgICAgICAgICAgICAgKi8KIC8qICBkaXN0cmlidXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEwLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgSm9lbCBLbGluZ2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBiYXNlZCBvbiBgc3JjL2d6aXAvZnRnemlwLmMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYnppcDIvcnVsZXMubWsgYi9zcmMvYnppcDIvcnVsZXMubWsKaW5kZXggZjYzZGRjNC4uOTU5NTRkNyAxMDA2NDQKLS0tIGEvc3JjL2J6aXAyL3J1bGVzLm1rCisrKyBiL3NyYy9iemlwMi9ydWxlcy5tawpAQCAtMiw3ICsyLDcgQEAKICMgRnJlZVR5cGUgMiBCWklQMiBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gcnVsZXMKICMKIAotIyBDb3B5cmlnaHQgMjAxMC0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDEwLTIwMTggYnkKICMgSm9lbCBLbGluZ2hlZC4KICMKICMgYmFzZWQgb24gYHNyYy9sencvcnVsZXMubWsnCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvSmFtZmlsZSBiL3NyYy9jYWNoZS9KYW1maWxlCmluZGV4IDA4ODBhZjguLjUzZjRjN2IgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9KYW1maWxlCisrKyBiL3NyYy9jYWNoZS9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9jYWNoZSBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjYWNoZS5jIGIvc3JjL2NhY2hlL2Z0Y2FjaGUuYwppbmRleCAwNTJmZjI1Li4xYjQyNWFmIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjYWNoZS5jCisrKyBiL3NyYy9jYWNoZS9mdGNhY2hlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIENhY2hpbmcgc3ViLXN5c3RlbSAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDE1ICsxNywxNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlICJmdGNtcnUuYyIKLSNpbmNsdWRlICJmdGNtYW5hZy5jIgorCisjaW5jbHVkZSAiZnRjYmFzaWMuYyIKICNpbmNsdWRlICJmdGNjYWNoZS5jIgogI2luY2x1ZGUgImZ0Y2NtYXAuYyIKICNpbmNsdWRlICJmdGNnbHlwaC5jIgogI2luY2x1ZGUgImZ0Y2ltYWdlLmMiCisjaW5jbHVkZSAiZnRjbWFuYWcuYyIKKyNpbmNsdWRlICJmdGNtcnUuYyIKICNpbmNsdWRlICJmdGNzYml0cy5jIgotI2luY2x1ZGUgImZ0Y2Jhc2ljLmMiCisKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjYmFzaWMuYyBiL3NyYy9jYWNoZS9mdGNiYXNpYy5jCmluZGV4IDI4OWJkNWMuLjk5NGFhMTIgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNiYXNpYy5jCisrKyBiL3NyYy9jYWNoZS9mdGNiYXNpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBiYXNpYyBjYWNoZSBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMDQsMTAgKzMwNCwxOCBAQAogICAgIGlmICggYW5vZGUgKQogICAgICAgKmFub2RlICA9IE5VTEw7CiAKLSAgICBpZiAoIChGVF9VTG9uZykoIHR5cGUtPmZsYWdzIC0gRlRfSU5UX01JTiApID4gRlRfVUlOVF9NQVggKQorICAgIC8qCisgICAgICogSW50ZXJuYWwgYEZUQ19CYXNpY0F0dHItPmxvYWRfZmxhZ3MnIGlzIG9mIHR5cGUgYEZUX1VJbnQnLAorICAgICAqIGJ1dCBwdWJsaWMgYEZUX0ltYWdlVHlwZS0+ZmxhZ3MnIGlzIG9mIHR5cGUgYEZUX0ludDMyJy4KKyAgICAgKgorICAgICAqIE9uIDE2Yml0IHN5c3RlbXMsIGhpZ2hlciBiaXRzIG9mIHR5cGUtPmZsYWdzIGNhbm5vdCBiZSBoYW5kbGVkLgorICAgICAqLworI2lmIDB4RkZGRkZGRkZVTCA+IEZUX1VJTlRfTUFYCisgICAgaWYgKCAodHlwZS0+ZmxhZ3MgJiAoRlRfVUxvbmcpRlRfVUlOVF9NQVgpICkKICAgICAgIEZUX1RSQUNFMSgoICJGVENfSW1hZ2VDYWNoZV9Mb29rdXA6IgogICAgICAgICAgICAgICAgICAgIiBoaWdoZXIgYml0cyBpbiBsb2FkX2ZsYWdzIDB4JXggYXJlIGRyb3BwZWRcbiIsCiAgICAgICAgICAgICAgICAgICAoRlRfVUxvbmcpdHlwZS0+ZmxhZ3MgJiB+KChGVF9VTG9uZylGVF9VSU5UX01BWCkgKSk7CisjZW5kaWYKIAogICAgIHF1ZXJ5LmF0dHJzLnNjYWxlci5mYWNlX2lkID0gdHlwZS0+ZmFjZV9pZDsKICAgICBxdWVyeS5hdHRycy5zY2FsZXIud2lkdGggICA9IHR5cGUtPndpZHRoOwpAQCAtMzc3LDExICszODUsMTggQEAKICAgICBpZiAoIGFub2RlICkKICAgICAgICphbm9kZSAgPSBOVUxMOwogCi0gICAgLyogYEZUX0xvYWRfR2x5cGgnIGFuZCBgRlRfTG9hZF9DaGFyJyB0YWtlIEZUX1VJbnQgZmxhZ3MgKi8KKyAgICAvKgorICAgICAqIEludGVybmFsIGBGVENfQmFzaWNBdHRyLT5sb2FkX2ZsYWdzJyBpcyBvZiB0eXBlIGBGVF9VSW50JywKKyAgICAgKiBidXQgcHVibGljIGBGVF9GYWNlLT5mYWNlX2ZsYWdzJyBpcyBvZiB0eXBlIGBGVF9Mb25nJy4KKyAgICAgKgorICAgICAqIE9uIGxvbmcgPiBpbnQgc3lzdGVtcywgaGlnaGVyIGJpdHMgb2YgbG9hZF9mbGFncyBjYW5ub3QgYmUgaGFuZGxlZC4KKyAgICAgKi8KKyNpZiBGVF9VTE9OR19NQVggPiBGVF9VSU5UX01BWAogICAgIGlmICggbG9hZF9mbGFncyA+IEZUX1VJTlRfTUFYICkKICAgICAgIEZUX1RSQUNFMSgoICJGVENfSW1hZ2VDYWNoZV9Mb29rdXBTY2FsZXI6IgogICAgICAgICAgICAgICAgICAgIiBoaWdoZXIgYml0cyBpbiBsb2FkX2ZsYWdzIDB4JXggYXJlIGRyb3BwZWRcbiIsCiAgICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzICYgfigoRlRfVUxvbmcpRlRfVUlOVF9NQVgpICkpOworI2VuZGlmCiAKICAgICBxdWVyeS5hdHRycy5zY2FsZXIgICAgID0gc2NhbGVyWzBdOwogICAgIHF1ZXJ5LmF0dHJzLmxvYWRfZmxhZ3MgPSAoRlRfVUludClsb2FkX2ZsYWdzOwpAQCAtNDg3LDEwICs1MDIsMTggQEAKIAogICAgICphbnNiaXQgPSBOVUxMOwogCi0gICAgaWYgKCAoRlRfVUxvbmcpKCB0eXBlLT5mbGFncyAtIEZUX0lOVF9NSU4gKSA+IEZUX1VJTlRfTUFYICkKKyAgICAvKgorICAgICAqIEludGVybmFsIGBGVENfQmFzaWNBdHRyLT5sb2FkX2ZsYWdzJyBpcyBvZiB0eXBlIGBGVF9VSW50JywKKyAgICAgKiBidXQgcHVibGljIGBGVF9JbWFnZVR5cGUtPmZsYWdzJyBpcyBvZiB0eXBlIGBGVF9JbnQzMicuCisgICAgICoKKyAgICAgKiBPbiAxNmJpdCBzeXN0ZW1zLCBoaWdoZXIgYml0cyBvZiB0eXBlLT5mbGFncyBjYW5ub3QgYmUgaGFuZGxlZC4KKyAgICAgKi8KKyNpZiAweEZGRkZGRkZGVUwgPiBGVF9VSU5UX01BWAorICAgIGlmICggKHR5cGUtPmZsYWdzICYgKEZUX1VMb25nKUZUX1VJTlRfTUFYKSApCiAgICAgICBGVF9UUkFDRTEoKCAiRlRDX0ltYWdlQ2FjaGVfTG9va3VwOiIKICAgICAgICAgICAgICAgICAgICIgaGlnaGVyIGJpdHMgaW4gbG9hZF9mbGFncyAweCV4IGFyZSBkcm9wcGVkXG4iLAogICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKXR5cGUtPmZsYWdzICYgfigoRlRfVUxvbmcpRlRfVUlOVF9NQVgpICkpOworI2VuZGlmCiAKICAgICBxdWVyeS5hdHRycy5zY2FsZXIuZmFjZV9pZCA9IHR5cGUtPmZhY2VfaWQ7CiAgICAgcXVlcnkuYXR0cnMuc2NhbGVyLndpZHRoICAgPSB0eXBlLT53aWR0aDsKQEAgLTU2MiwxMSArNTg1LDE4IEBACiAKICAgICAqYW5zYml0ID0gTlVMTDsKIAotICAgIC8qIGBGVF9Mb2FkX0dseXBoJyBhbmQgYEZUX0xvYWRfQ2hhcicgdGFrZSBGVF9VSW50IGZsYWdzICovCisgICAgLyoKKyAgICAgKiBJbnRlcm5hbCBgRlRDX0Jhc2ljQXR0ci0+bG9hZF9mbGFncycgaXMgb2YgdHlwZSBgRlRfVUludCcsCisgICAgICogYnV0IHB1YmxpYyBgRlRfRmFjZS0+ZmFjZV9mbGFncycgaXMgb2YgdHlwZSBgRlRfTG9uZycuCisgICAgICoKKyAgICAgKiBPbiBsb25nID4gaW50IHN5c3RlbXMsIGhpZ2hlciBiaXRzIG9mIGxvYWRfZmxhZ3MgY2Fubm90IGJlIGhhbmRsZWQuCisgICAgICovCisjaWYgRlRfVUxPTkdfTUFYID4gRlRfVUlOVF9NQVgKICAgICBpZiAoIGxvYWRfZmxhZ3MgPiBGVF9VSU5UX01BWCApCiAgICAgICBGVF9UUkFDRTEoKCAiRlRDX0ltYWdlQ2FjaGVfTG9va3VwU2NhbGVyOiIKICAgICAgICAgICAgICAgICAgICIgaGlnaGVyIGJpdHMgaW4gbG9hZF9mbGFncyAweCV4IGFyZSBkcm9wcGVkXG4iLAogICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyAmIH4oKEZUX1VMb25nKUZUX1VJTlRfTUFYKSApKTsKKyNlbmRpZgogCiAgICAgcXVlcnkuYXR0cnMuc2NhbGVyICAgICA9IHNjYWxlclswXTsKICAgICBxdWVyeS5hdHRycy5sb2FkX2ZsYWdzID0gKEZUX1VJbnQpbG9hZF9mbGFnczsKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYWNoZS5jIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKaW5kZXggMzdkYzNhYi4uMTJlYzU4NSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGludGVybmFsIGNhY2hlIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYWNoZS5oIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKaW5kZXggZDNjMTFjZS4uODU5YzU0NyAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKKysrIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgaW50ZXJuYWwgY2FjaGUgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYmFjay5oIGIvc3JjL2NhY2hlL2Z0Y2NiYWNrLmgKaW5kZXggMjY4MWU4Yy4uZTUxZDhkNiAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NiYWNrLmgKKysrIGIvc3JjL2NhY2hlL2Z0Y2NiYWNrLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ2FsbGJhY2sgZnVuY3Rpb25zIG9mIHRoZSBjYWNoaW5nIHN1Yi1zeXN0ZW0gKHNwZWNpZmljYXRpb24gb25seSkuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjbWFwLmMgYi9zcmMvY2FjaGUvZnRjY21hcC5jCmluZGV4IDJmYTg0OTcuLmQyMGIwZjQgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNjbWFwLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2NtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBDaGFyTWFwIGNhY2hlIChib2R5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2Vycm9yLmggYi9zcmMvY2FjaGUvZnRjZXJyb3IuaAppbmRleCA4NGZlNTJmLi5hMjZjZDU5IDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjZXJyb3IuaAorKysgYi9zcmMvY2FjaGUvZnRjZXJyb3IuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDYWNoaW5nIHN1Yi1zeXN0ZW0gZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2dseXBoLmMgYi9zcmMvY2FjaGUvZnRjZ2x5cGguYwppbmRleCBkMjQ2OGYyLi43ODJjYzBlIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjZ2x5cGguYworKysgYi9zcmMvY2FjaGUvZnRjZ2x5cGguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBHbHlwaCBJbWFnZSAoRlRfR2x5cGgpIGNhY2hlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2dseXBoLmggYi9zcmMvY2FjaGUvZnRjZ2x5cGguaAppbmRleCBjYWI1OGVkLi4yM2MyNGQyIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjZ2x5cGguaAorKysgYi9zcmMvY2FjaGUvZnRjZ2x5cGguaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBhYnN0cmFjdCBnbHlwaCBjYWNoZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2ltYWdlLmMgYi9zcmMvY2FjaGUvZnRjaW1hZ2UuYwppbmRleCAzNTlmODE4Li43N2ExMDAxIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjaW1hZ2UuYworKysgYi9zcmMvY2FjaGUvZnRjaW1hZ2UuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBJbWFnZSBjYWNoZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y2ltYWdlLmggYi9zcmMvY2FjaGUvZnRjaW1hZ2UuaAppbmRleCAxNDA0OWFmLi4yNGEyMjEwIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjaW1hZ2UuaAorKysgYi9zcmMvY2FjaGUvZnRjaW1hZ2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBHZW5lcmljIEltYWdlIGNhY2hlIChzcGVjaWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y21hbmFnLmMgYi9zcmMvY2FjaGUvZnRjbWFuYWcuYwppbmRleCBlZGVjMmI2Li4yYmNkOWRmIDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjbWFuYWcuYworKysgYi9zcmMvY2FjaGUvZnRjbWFuYWcuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBDYWNoZSBNYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y21hbmFnLmggYi9zcmMvY2FjaGUvZnRjbWFuYWcuaAppbmRleCA1NTY4NDJlLi5iNGI0NzU1IDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjbWFuYWcuaAorKysgYi9zcmMvY2FjaGUvZnRjbWFuYWcuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBDYWNoZSBNYW5hZ2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y21ydS5jIGIvc3JjL2NhY2hlL2Z0Y21ydS5jCmluZGV4IGUyOTMyNjkuLjEwODdiZTQgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNtcnUuYworKysgYi9zcmMvY2FjaGUvZnRjbXJ1LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgTVJVIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNtcnUuaCBiL3NyYy9jYWNoZS9mdGNtcnUuaAppbmRleCBjNGMzMzBkLi44MjM5NmI5IDEwMDY0NAotLS0gYS9zcmMvY2FjaGUvZnRjbXJ1LmgKKysrIGIvc3JjL2NhY2hlL2Z0Y21ydS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNpbXBsZSBNUlUgbGlzdC1jYWNoZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjc2JpdHMuYyBiL3NyYy9jYWNoZS9mdGNzYml0cy5jCmluZGV4IDJmOTMzNmQuLjAxOGYxZWMgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNzYml0cy5jCisrKyBiL3NyYy9jYWNoZS9mdGNzYml0cy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHNiaXRzIG1hbmFnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjc2JpdHMuaCBiL3NyYy9jYWNoZS9mdGNzYml0cy5oCmluZGV4IDFlMTVjZTkuLjIwNmExYmIgMTAwNjQ0Ci0tLSBhL3NyYy9jYWNoZS9mdGNzYml0cy5oCisrKyBiL3NyYy9jYWNoZS9mdGNzYml0cy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEEgc21hbGwtYml0bWFwIGNhY2hlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvcnVsZXMubWsgYi9zcmMvY2FjaGUvcnVsZXMubWsKaW5kZXggNjIwNDY4OS4uNTU4OTM1OSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL3J1bGVzLm1rCisrKyBiL3NyYy9jYWNoZS9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDAwLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDAtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvY2ZmL0phbWZpbGUgYi9zcmMvY2ZmL0phbWZpbGUKaW5kZXggZTZkZDA1Zi4uNTNjOTA0ZiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9KYW1maWxlCisrKyBiL3NyYy9jZmYvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvY2ZmIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTIzLDE1ICsyMyw2IEBACiAgICAgICAgICAgICAgICBjZmZvYmpzCiAgICAgICAgICAgICAgICBjZmZwYXJzZQogICAgICAgICAgICAgICAgY2ZmcGljCi0gICAgICAgICAgICAgICBjZjJhcnJzdAotICAgICAgICAgICAgICAgY2YyYmx1ZXMKLSAgICAgICAgICAgICAgIGNmMmVycm9yCi0gICAgICAgICAgICAgICBjZjJmb250Ci0gICAgICAgICAgICAgICBjZjJmdAotICAgICAgICAgICAgICAgY2YyaGludHMKLSAgICAgICAgICAgICAgIGNmMmludHJwCi0gICAgICAgICAgICAgICBjZjJyZWFkCi0gICAgICAgICAgICAgICBjZjJzdGFjawogICAgICAgICAgICAgICAgOwogICB9CiAgIGVsc2UKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZnQuaCBiL3NyYy9jZmYvY2YyZnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA1NGE2ZS4uMDAwMDAwMAotLS0gYS9zcmMvY2ZmL2NmMmZ0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2YyZnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEdsdWUgQ29tcG9uZW50IHRvIEFkb2JlJ3MgSW50ZXJwcmV0ZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpZm5kZWYgQ0YyRlRfSF8KLSNkZWZpbmUgQ0YyRlRfSF8KLQotCi0jaW5jbHVkZSAiY2YydHlwZXMuaCIKLQotCi0gIC8qIFRPRE86IGRpc2FibGUgYXNzZXJ0cyBmb3Igbm93ICovCi0jZGVmaW5lIENGMl9OREVCVUcKLQotCi0jaW5jbHVkZSBGVF9TWVNURU1fSAotCi0jaW5jbHVkZSAiY2YyZ2x1ZS5oIgotI2luY2x1ZGUgImNmZmdsb2FkLmgiICAgIC8qIGZvciBDRkZfRGVjb2RlciAqLwotCi0KLUZUX0JFR0lOX0hFQURFUgotCi0KLSAgRlRfTE9DQUwoIEZUX0Vycm9yICkKLSAgY2YyX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgY2hhcnN0cmluZ19iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiApOwotCi0gIEZUX0xPQ0FMKCBDRkZfU3ViRm9udCApCi0gIGNmMl9nZXRTdWJmb250KCBDRkZfRGVjb2RlciogIGRlY29kZXIgKTsKLQotICBGVF9MT0NBTCggQ0ZGX1ZTdG9yZSApCi0gIGNmMl9nZXRWU3RvcmUoIENGRl9EZWNvZGVyKiAgZGVjb2RlciApOwotCi0gIEZUX0xPQ0FMKCBGVF9VSW50ICkKLSAgY2YyX2dldE1heHN0YWNrKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKTsKLQotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLSAgRlRfTE9DQUwoIEZUX0Vycm9yICkKLSAgY2YyX2dldE5vcm1hbGl6ZWRWZWN0b3IoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9VSW50ICAgICAqbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICAgICp2ZWMgKTsKLSNlbmRpZgotCi0gIEZUX0xPQ0FMKCBDRjJfRml4ZWQgKQotICBjZjJfZ2V0UHBlbVkoIENGRl9EZWNvZGVyKiAgZGVjb2RlciApOwotICBGVF9MT0NBTCggQ0YyX0ZpeGVkICkKLSAgY2YyX2dldFN0ZFZXKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKTsKLSAgRlRfTE9DQUwoIENGMl9GaXhlZCApCi0gIGNmMl9nZXRTdGRIVyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICk7Ci0KLSAgRlRfTE9DQUwoIHZvaWQgKQotICBjZjJfZ2V0Qmx1ZU1ldHJpY3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIGJsdWVTY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIGJsdWVTaGlmdCwKLSAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgIGJsdWVGdXp6ICk7Ci0gIEZUX0xPQ0FMKCB2b2lkICkKLSAgY2YyX2dldEJsdWVWYWx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKTsKLSAgRlRfTE9DQUwoIHZvaWQgKQotICBjZjJfZ2V0T3RoZXJCbHVlcyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICAqZGF0YSApOwotICBGVF9MT0NBTCggdm9pZCApCi0gIGNmMl9nZXRGYW1pbHlCbHVlcyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgICpkYXRhICk7Ci0gIEZUX0xPQ0FMKCB2b2lkICkKLSAgY2YyX2dldEZhbWlseU90aGVyQmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKTsKLQotICBGVF9MT0NBTCggQ0YyX0ludCApCi0gIGNmMl9nZXRMYW5ndWFnZUdyb3VwKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKTsKLQotICBGVF9MT0NBTCggQ0YyX0ludCApCi0gIGNmMl9pbml0R2xvYmFsUmVnaW9uQnVmZmVyKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgIHN1YnJOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApOwotICBGVF9MT0NBTCggRlRfRXJyb3IgKQotICBjZjJfZ2V0U2VhY0NvbXBvbmVudCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKTsKLSAgRlRfTE9DQUwoIHZvaWQgKQotICBjZjJfZnJlZVNlYWNDb21wb25lbnQoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApOwotICBGVF9MT0NBTCggQ0YyX0ludCApCi0gIGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBzdWJyTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApOwotCi0gIEZUX0xPQ0FMKCBDRjJfRml4ZWQgKQotICBjZjJfZ2V0RGVmYXVsdFdpZHRoWCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICk7Ci0gIEZUX0xPQ0FMKCBDRjJfRml4ZWQgKQotICBjZjJfZ2V0Tm9taW5hbFdpZHRoWCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICk7Ci0KLQotICAvKgotICAgKiBGcmVlVHlwZSBjbGllbnQgb3V0bGluZQotICAgKgotICAgKiBwcm9jZXNzIG91dHB1dCBmcm9tIHRoZSBjaGFyc3RyaW5nIGludGVycHJldGVyCi0gICAqLwotICB0eXBlZGVmIHN0cnVjdCAgQ0YyX091dGxpbmVSZWNfCi0gIHsKLSAgICBDRjJfT3V0bGluZUNhbGxiYWNrc1JlYyAgcm9vdDsgICAgICAgIC8qIGJhc2UgY2xhc3MgbXVzdCBiZSBmaXJzdCAqLwotICAgIENGRl9EZWNvZGVyKiAgICAgICAgICAgICBkZWNvZGVyOwotCi0gIH0gQ0YyX091dGxpbmVSZWMsICpDRjJfT3V0bGluZTsKLQotCi0gIEZUX0xPQ0FMKCB2b2lkICkKLSAgY2YyX291dGxpbmVfcmVzZXQoIENGMl9PdXRsaW5lICBvdXRsaW5lICk7Ci0gIEZUX0xPQ0FMKCB2b2lkICkKLSAgY2YyX291dGxpbmVfY2xvc2UoIENGMl9PdXRsaW5lICBvdXRsaW5lICk7Ci0KLQotRlRfRU5EX0hFQURFUgotCi0KLSNlbmRpZiAvKiBDRjJGVF9IXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJpbnRycC5jIGIvc3JjL2NmZi9jZjJpbnRycC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmM2OTZkLi4wMDAwMDAwCi0tLSBhL3NyYy9jZmYvY2YyaW50cnAuYworKysgL2Rldi9udWxsCkBAIC0xLDE5MjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2YyaW50cnAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEFkb2JlJ3MgQ0ZGIEludGVycHJldGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBzb2Z0d2FyZSwgYW5kIGFsbCB3b3JrcyBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIHNvdXJjZSBvciAgICAgICAqLwotLyogIG9iamVjdCBjb2RlIGZvcm0gYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3B5cmlnaHQgbm90aWNlKHMpIGluY2x1ZGVkICAgICAgKi8KLS8qICBoZXJlaW4gKGNvbGxlY3RpdmVseSwgdGhlICJXb3JrIikgaXMgbWFkZSBhdmFpbGFibGUsIGFuZCBtYXkgb25seSBiZSAgICovCi0vKiAgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCAgICAqLwotLyogIExJQ0VOU0UuVFhULiAgQWRkaXRpb25hbGx5LCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgKi8KLS8qICBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UsIGVhY2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgaGVyZWJ5IGdyYW50cyAgICovCi0vKiAgdG8gYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSAgICAqLwotLyogIHRoZSBGcmVlVHlwZSBQcm9qZWN0IExpY2Vuc2UgYW5kIHRoaXMgc2VjdGlvbiAoaGVyZWFmdGVyLCAiWW91IiBvciAgICAgKi8KLS8qICAiWW91ciIpIGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgICAgICAgICAgICAgICovCi0vKiAgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCAgICAqLwotLyogIGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kICAgICAgKi8KLS8qICBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgICovCi0vKiAgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggY29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgICAgICAqLwotLyogIGluZnJpbmdlZCBieSB0aGVpciBjb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgICAgKi8KLS8qICBjb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIGNvbnRyaWJ1dGlvbihzKSB3YXMgICAgICAgICovCi0vKiAgc3VibWl0dGVkLiAgSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgICAgICAqLwotLyogIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0ICAgKi8KLS8qICB0aGUgV29yayBvciBhIGNvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzICAgICovCi0vKiAgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgICAqLwotLyogIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiAgKi8KLS8qICB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEJ5IHVzaW5nLCBtb2RpZnlpbmcsIG9yIGRpc3RyaWJ1dGluZyB0aGUgV29yayB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgICAgKi8KLS8qICBoYXZlIHJlYWQgYW5kIHVuZGVyc3Rvb2QgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAgICAgICAgICAgICAgICovCi0vKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFzIHdlbGwgYXMgdGhvc2UgcHJvdmlkZWQgaW4gdGhpcyBzZWN0aW9uLCAgICAqLwotLyogIGFuZCB5b3UgYWNjZXB0IHRoZW0gZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSNpbmNsdWRlICJjZjJmdC5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotCi0jaW5jbHVkZSAiY2YyZ2x1ZS5oIgotI2luY2x1ZGUgImNmMmZvbnQuaCIKLSNpbmNsdWRlICJjZjJzdGFjay5oIgotI2luY2x1ZGUgImNmMmhpbnRzLmgiCi0jaW5jbHVkZSAiY2YyaW50cnAuaCIKLQotI2luY2x1ZGUgImNmMmVycm9yLmgiCi0KLSNpbmNsdWRlICJjZmZsb2FkLmgiCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI3VuZGVmICBGVF9DT01QT05FTlQKLSNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9jZjJpbnRlcnAKLQotCi0gIEZUX0xPQ0FMX0RFRiggdm9pZCApCi0gIGNmMl9oaW50bWFza19pbml0KCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAotICAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IqICAgICBlcnJvciApCi0gIHsKLSAgICBGVF9aRVJPKCBoaW50bWFzayApOwotCi0gICAgaGludG1hc2stPmVycm9yID0gZXJyb3I7Ci0gIH0KLQotCi0gIEZUX0xPQ0FMX0RFRiggRlRfQm9vbCApCi0gIGNmMl9oaW50bWFza19pc1ZhbGlkKCBjb25zdCBDRjJfSGludE1hc2sgIGhpbnRtYXNrICkKLSAgewotICAgIHJldHVybiBoaW50bWFzay0+aXNWYWxpZDsKLSAgfQotCi0KLSAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKLSAgY2YyX2hpbnRtYXNrX2lzTmV3KCBjb25zdCBDRjJfSGludE1hc2sgIGhpbnRtYXNrICkKLSAgewotICAgIHJldHVybiBoaW50bWFzay0+aXNOZXc7Ci0gIH0KLQotCi0gIEZUX0xPQ0FMX0RFRiggdm9pZCApCi0gIGNmMl9oaW50bWFza19zZXROZXcoIENGMl9IaW50TWFzayAgaGludG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgdmFsICkKLSAgewotICAgIGhpbnRtYXNrLT5pc05ldyA9IHZhbDsKLSAgfQotCi0KLSAgLyogY2xpZW50cyBjYWxsIGBnZXRNYXNrUHRyJyBpbiBvcmRlciB0byBpdGVyYXRlICovCi0gIC8qIHRocm91Z2ggaGludCBtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIEZUX0xPQ0FMX0RFRiggRlRfQnl0ZSogKQotICBjZjJfaGludG1hc2tfZ2V0TWFza1B0ciggQ0YyX0hpbnRNYXNrICBoaW50bWFzayApCi0gIHsKLSAgICByZXR1cm4gaGludG1hc2stPm1hc2s7Ci0gIH0KLQotCi0gIHN0YXRpYyBzaXplX3QKLSAgY2YyX2hpbnRtYXNrX3NldENvdW50cyggQ0YyX0hpbnRNYXNrICBoaW50bWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICBiaXRDb3VudCApCi0gIHsKLSAgICBpZiAoIGJpdENvdW50ID4gQ0YyX01BWF9ISU5UUyApCi0gICAgewotICAgICAgLyogdG90YWwgb2YgaCBhbmQgdiBzdGVtcyBtdXN0IGJlIDw9IDk2ICovCi0gICAgICBDRjJfU0VUX0VSUk9SKCBoaW50bWFzay0+ZXJyb3IsIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBoaW50bWFzay0+Yml0Q291bnQgID0gYml0Q291bnQ7Ci0gICAgaGludG1hc2stPmJ5dGVDb3VudCA9ICggaGludG1hc2stPmJpdENvdW50ICsgNyApIC8gODsKLQotICAgIGhpbnRtYXNrLT5pc1ZhbGlkID0gVFJVRTsKLSAgICBoaW50bWFzay0+aXNOZXcgICA9IFRSVUU7Ci0KLSAgICByZXR1cm4gYml0Q291bnQ7Ci0gIH0KLQotCi0gIC8qIGNvbnN1bWUgdGhlIGhpbnRtYXNrIGJ5dGVzIGZyb20gdGhlIGNoYXJzdHJpbmcsIGFkdmFuY2luZyB0aGUgc3JjICovCi0gIC8qIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIGNmMl9oaW50bWFza19yZWFkKCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAotICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBjaGFyc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICBiaXRDb3VudCApCi0gIHsKLSAgICBzaXplX3QgIGk7Ci0KLSNpZm5kZWYgQ0YyX05ERUJVRwotICAgIC8qIHRoZXNlIGFyZSB0aGUgYml0cyBpbiB0aGUgZmluYWwgbWFzayBieXRlIHRoYXQgc2hvdWxkIGJlIHplcm8gICovCi0gICAgLyogTm90ZTogdGhpcyB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgaW4gYW4gYXNzZXJ0IGV4cHJlc3Npb24gYmVsb3cgKi8KLSAgICAvKiBhbmQgdGhlbiBvbmx5IGlmIENGMl9OREVCVUcgaXMgbm90IGRlZmluZWQgICAgICAgICAgICAgICAgICAgICAqLwotICAgIENGMl9VSW50ICBtYXNrID0gKCAxIDw8ICggLShDRjJfSW50KWJpdENvdW50ICYgNyApICkgLSAxOwotI2VuZGlmCi0KLQotICAgIC8qIGluaXRpYWxpemUgY291bnRzIGFuZCBpc1ZhbGlkICovCi0gICAgaWYgKCBjZjJfaGludG1hc2tfc2V0Q291bnRzKCBoaW50bWFzaywgYml0Q291bnQgKSA9PSAwICkKLSAgICAgIHJldHVybjsKLQotICAgIEZUX0FTU0VSVCggaGludG1hc2stPmJ5dGVDb3VudCA+IDAgKTsKLQotICAgIEZUX1RSQUNFNCgoICIgKG1hc2tieXRlczoiICkpOwotCi0gICAgLyogc2V0IG1hc2sgYW5kIGFkdmFuY2UgaW50ZXJwcmV0ZXIncyBjaGFyc3RyaW5nIHBvaW50ZXIgKi8KLSAgICBmb3IgKCBpID0gMDsgaSA8IGhpbnRtYXNrLT5ieXRlQ291bnQ7IGkrKyApCi0gICAgewotICAgICAgaGludG1hc2stPm1hc2tbaV0gPSAoRlRfQnl0ZSljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7Ci0gICAgICBGVF9UUkFDRTQoKCAiIDB4JTAyWCIsIGhpbnRtYXNrLT5tYXNrW2ldICkpOwotICAgIH0KLQotICAgIEZUX1RSQUNFNCgoICIpXG4iICkpOwotCi0gICAgLyogYXNzZXJ0IGFueSB1bnVzZWQgYml0cyBpbiBsYXN0IGJ5dGUgYXJlIHplcm8gdW5sZXNzIHRoZXJlJ3MgYSBwcmlvciAqLwotICAgIC8qIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAvKiBiaXRDb3VudCAtPiBtYXNrLCAwIC0+IDAsIDEgLT4gN2YsIDIgLT4gM2YsIC4uLiA2IC0+IDMsIDcgLT4gMSAgICAgICovCi0jaWZuZGVmIENGMl9OREVCVUcKLSAgICBGVF9BU1NFUlQoICggaGludG1hc2stPm1hc2tbaGludG1hc2stPmJ5dGVDb3VudCAtIDFdICYgbWFzayApID09IDAgfHwKLSAgICAgICAgICAgICAgICpoaW50bWFzay0+ZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSNlbmRpZgotICB9Ci0KLQotICBGVF9MT0NBTF9ERUYoIHZvaWQgKQotICBjZjJfaGludG1hc2tfc2V0QWxsKCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIGJpdENvdW50ICkKLSAgewotICAgIHNpemVfdCAgICBpOwotICAgIENGMl9VSW50ICBtYXNrID0gKCAxIDw8ICggLShDRjJfSW50KWJpdENvdW50ICYgNyApICkgLSAxOwotCi0KLSAgICAvKiBpbml0aWFsaXplIGNvdW50cyBhbmQgaXNWYWxpZCAqLwotICAgIGlmICggY2YyX2hpbnRtYXNrX3NldENvdW50cyggaGludG1hc2ssIGJpdENvdW50ICkgPT0gMCApCi0gICAgICByZXR1cm47Ci0KLSAgICBGVF9BU1NFUlQoIGhpbnRtYXNrLT5ieXRlQ291bnQgPiAwICk7Ci0gICAgRlRfQVNTRVJUKCBoaW50bWFzay0+Ynl0ZUNvdW50IDw9Ci0gICAgICAgICAgICAgICAgIHNpemVvZiAoIGhpbnRtYXNrLT5tYXNrICkgLyBzaXplb2YgKCBoaW50bWFzay0+bWFza1swXSApICk7Ci0KLSAgICAvKiBzZXQgbWFzayB0byBhbGwgb25lcyAqLwotICAgIGZvciAoIGkgPSAwOyBpIDwgaGludG1hc2stPmJ5dGVDb3VudDsgaSsrICkKLSAgICAgIGhpbnRtYXNrLT5tYXNrW2ldID0gMHhGRjsKLQotICAgIC8qIGNsZWFyIHVudXNlZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogYml0Q291bnQgLT4gbWFzaywgMCAtPiAwLCAxIC0+IDdmLCAyIC0+IDNmLCAuLi4gNiAtPiAzLCA3IC0+IDEgKi8KLSAgICBoaW50bWFzay0+bWFza1toaW50bWFzay0+Ynl0ZUNvdW50IC0gMV0gJj0gfm1hc2s7Ci0gIH0KLQotCi0gIC8qIFR5cGUyIGNoYXJzdHJpbmcgb3Bjb2RlcyAqLwotICBlbnVtCi0gIHsKLSAgICBjZjJfY21kUkVTRVJWRURfMCwgICAvKiAwICovCi0gICAgY2YyX2NtZEhTVEVNLCAgICAgICAgLyogMSAqLwotICAgIGNmMl9jbWRSRVNFUlZFRF8yLCAgIC8qIDIgKi8KLSAgICBjZjJfY21kVlNURU0sICAgICAgICAvKiAzICovCi0gICAgY2YyX2NtZFZNT1ZFVE8sICAgICAgLyogNCAqLwotICAgIGNmMl9jbWRSTElORVRPLCAgICAgIC8qIDUgKi8KLSAgICBjZjJfY21kSExJTkVUTywgICAgICAvKiA2ICovCi0gICAgY2YyX2NtZFZMSU5FVE8sICAgICAgLyogNyAqLwotICAgIGNmMl9jbWRSUkNVUlZFVE8sICAgIC8qIDggKi8KLSAgICBjZjJfY21kUkVTRVJWRURfOSwgICAvKiA5ICovCi0gICAgY2YyX2NtZENBTExTVUJSLCAgICAgLyogMTAgKi8KLSAgICBjZjJfY21kUkVUVVJOLCAgICAgICAvKiAxMSAqLwotICAgIGNmMl9jbWRFU0MsICAgICAgICAgIC8qIDEyICovCi0gICAgY2YyX2NtZFJFU0VSVkVEXzEzLCAgLyogMTMgKi8KLSAgICBjZjJfY21kRU5EQ0hBUiwgICAgICAvKiAxNCAqLwotICAgIGNmMl9jbWRWU0lOREVYLCAgICAgIC8qIDE1ICovCi0gICAgY2YyX2NtZEJMRU5ELCAgICAgICAgLyogMTYgKi8KLSAgICBjZjJfY21kUkVTRVJWRURfMTcsICAvKiAxNyAqLwotICAgIGNmMl9jbWRIU1RFTUhNLCAgICAgIC8qIDE4ICovCi0gICAgY2YyX2NtZEhJTlRNQVNLLCAgICAgLyogMTkgKi8KLSAgICBjZjJfY21kQ05UUk1BU0ssICAgICAvKiAyMCAqLwotICAgIGNmMl9jbWRSTU9WRVRPLCAgICAgIC8qIDIxICovCi0gICAgY2YyX2NtZEhNT1ZFVE8sICAgICAgLyogMjIgKi8KLSAgICBjZjJfY21kVlNURU1ITSwgICAgICAvKiAyMyAqLwotICAgIGNmMl9jbWRSQ1VSVkVMSU5FLCAgIC8qIDI0ICovCi0gICAgY2YyX2NtZFJMSU5FQ1VSVkUsICAgLyogMjUgKi8KLSAgICBjZjJfY21kVlZDVVJWRVRPLCAgICAvKiAyNiAqLwotICAgIGNmMl9jbWRISENVUlZFVE8sICAgIC8qIDI3ICovCi0gICAgY2YyX2NtZEVYVEVOREVETk1CUiwgLyogMjggKi8KLSAgICBjZjJfY21kQ0FMTEdTVUJSLCAgICAvKiAyOSAqLwotICAgIGNmMl9jbWRWSENVUlZFVE8sICAgIC8qIDMwICovCi0gICAgY2YyX2NtZEhWQ1VSVkVUTyAgICAgLyogMzEgKi8KLSAgfTsKLQotICBlbnVtCi0gIHsKLSAgICBjZjJfZXNjRE9UU0VDVElPTiwgICAvKiAwICovCi0gICAgY2YyX2VzY1JFU0VSVkVEXzEsICAgLyogMSAqLwotICAgIGNmMl9lc2NSRVNFUlZFRF8yLCAgIC8qIDIgKi8KLSAgICBjZjJfZXNjQU5ELCAgICAgICAgICAvKiAzICovCi0gICAgY2YyX2VzY09SLCAgICAgICAgICAgLyogNCAqLwotICAgIGNmMl9lc2NOT1QsICAgICAgICAgIC8qIDUgKi8KLSAgICBjZjJfZXNjUkVTRVJWRURfNiwgICAvKiA2ICovCi0gICAgY2YyX2VzY1JFU0VSVkVEXzcsICAgLyogNyAqLwotICAgIGNmMl9lc2NSRVNFUlZFRF84LCAgIC8qIDggKi8KLSAgICBjZjJfZXNjQUJTLCAgICAgICAgICAvKiA5ICovCi0gICAgY2YyX2VzY0FERCwgICAgICAgICAgLyogMTAgICAgIGxpa2Ugb3RoZXJBREQgKi8KLSAgICBjZjJfZXNjU1VCLCAgICAgICAgICAvKiAxMSAgICAgbGlrZSBvdGhlclNVQiAqLwotICAgIGNmMl9lc2NESVYsICAgICAgICAgIC8qIDEyICovCi0gICAgY2YyX2VzY1JFU0VSVkVEXzEzLCAgLyogMTMgKi8KLSAgICBjZjJfZXNjTkVHLCAgICAgICAgICAvKiAxNCAqLwotICAgIGNmMl9lc2NFUSwgICAgICAgICAgIC8qIDE1ICovCi0gICAgY2YyX2VzY1JFU0VSVkVEXzE2LCAgLyogMTYgKi8KLSAgICBjZjJfZXNjUkVTRVJWRURfMTcsICAvKiAxNyAqLwotICAgIGNmMl9lc2NEUk9QLCAgICAgICAgIC8qIDE4ICovCi0gICAgY2YyX2VzY1JFU0VSVkVEXzE5LCAgLyogMTkgKi8KLSAgICBjZjJfZXNjUFVULCAgICAgICAgICAvKiAyMCAgICAgbGlrZSBvdGhlclBVVCAgICAqLwotICAgIGNmMl9lc2NHRVQsICAgICAgICAgIC8qIDIxICAgICBsaWtlIG90aGVyR0VUICAgICovCi0gICAgY2YyX2VzY0lGRUxTRSwgICAgICAgLyogMjIgICAgIGxpa2Ugb3RoZXJJRkVMU0UgKi8KLSAgICBjZjJfZXNjUkFORE9NLCAgICAgICAvKiAyMyAgICAgbGlrZSBvdGhlclJBTkRPTSAqLwotICAgIGNmMl9lc2NNVUwsICAgICAgICAgIC8qIDI0ICAgICBsaWtlIG90aGVyTVVMICAgICovCi0gICAgY2YyX2VzY1JFU0VSVkVEXzI1LCAgLyogMjUgKi8KLSAgICBjZjJfZXNjU1FSVCwgICAgICAgICAvKiAyNiAqLwotICAgIGNmMl9lc2NEVVAsICAgICAgICAgIC8qIDI3ICAgICBsaWtlIG90aGVyRFVQICAgICovCi0gICAgY2YyX2VzY0VYQ0gsICAgICAgICAgLyogMjggICAgIGxpa2Ugb3RoZXJFWENIICAgKi8KLSAgICBjZjJfZXNjSU5ERVgsICAgICAgICAvKiAyOSAqLwotICAgIGNmMl9lc2NST0xMLCAgICAgICAgIC8qIDMwICovCi0gICAgY2YyX2VzY1JFU0VSVkVEXzMxLCAgLyogMzEgKi8KLSAgICBjZjJfZXNjUkVTRVJWRURfMzIsICAvKiAzMiAqLwotICAgIGNmMl9lc2NSRVNFUlZFRF8zMywgIC8qIDMzICovCi0gICAgY2YyX2VzY0hGTEVYLCAgICAgICAgLyogMzQgKi8KLSAgICBjZjJfZXNjRkxFWCwgICAgICAgICAvKiAzNSAqLwotICAgIGNmMl9lc2NIRkxFWDEsICAgICAgIC8qIDM2ICovCi0gICAgY2YyX2VzY0ZMRVgxLCAgICAgICAgLyogMzcgKi8KLSAgICBjZjJfZXNjUkVTRVJWRURfMzggICAvKiAzOCAgICAgJiBhbGwgaGlnaGVyICAgICAqLwotICB9OwotCi0KLSAgLyogYHN0ZW1IaW50QXJyYXknIGRvZXMgbm90IGNoYW5nZSBvbmNlIHdlIHN0YXJ0IGRyYXdpbmcgdGhlIG91dGxpbmUuICovCi0gIHN0YXRpYyB2b2lkCi0gIGNmMl9kb1N0ZW1zKCBjb25zdCBDRjJfRm9udCAgZm9udCwKLSAgICAgICAgICAgICAgIENGMl9TdGFjayAgICAgICBvcFN0YWNrLAotICAgICAgICAgICAgICAgQ0YyX0FyclN0YWNrICAgIHN0ZW1IaW50QXJyYXksCi0gICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICBGVF9Cb29sKiAgICAgICAgaGF2ZVdpZHRoLAotICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgIGhpbnRPZmZzZXQgKQotICB7Ci0gICAgQ0YyX1VJbnQgIGk7Ci0gICAgQ0YyX1VJbnQgIGNvdW50ICAgICAgID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7Ci0gICAgRlRfQm9vbCAgIGhhc1dpZHRoQXJnID0gKEZUX0Jvb2wpKCBjb3VudCAmIDEgKTsKLQotICAgIC8qIHZhcmlhYmxlIGFjY3VtdWxhdGVzIGRlbHRhIHZhbHVlcyBmcm9tIG9wZXJhbmQgc3RhY2sgKi8KLSAgICBDRjJfRml4ZWQgIHBvc2l0aW9uID0gaGludE9mZnNldDsKLQotCi0gICAgaWYgKCBoYXNXaWR0aEFyZyAmJiAhKmhhdmVXaWR0aCApCi0gICAgICAqd2lkdGggPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApICsKLSAgICAgICAgICAgICAgICAgY2YyX2dldE5vbWluYWxXaWR0aFgoIGZvbnQtPmRlY29kZXIgKTsKLQotICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCi0gICAgICBnb3RvIGV4aXQ7Ci0KLSAgICBmb3IgKCBpID0gaGFzV2lkdGhBcmcgPyAxIDogMDsgaSA8IGNvdW50OyBpICs9IDIgKQotICAgIHsKLSAgICAgIC8qIGNvbnN0cnVjdCBhIENGMl9TdGVtSGludCBhbmQgcHVzaCBpdCBvbnRvIHRoZSBsaXN0ICovCi0gICAgICBDRjJfU3RlbUhpbnRSZWMgIHN0ZW1oaW50OwotCi0KLSAgICAgIHN0ZW1oaW50Lm1pbiAgPQotICAgICAgICBwb3NpdGlvbiAgICs9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpICk7Ci0gICAgICBzdGVtaGludC5tYXggID0KLSAgICAgICAgcG9zaXRpb24gICArPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaSArIDEgKTsKLQotICAgICAgc3RlbWhpbnQudXNlZCAgPSBGQUxTRTsKLSAgICAgIHN0ZW1oaW50Lm1heERTID0KLSAgICAgIHN0ZW1oaW50Lm1pbkRTID0gMDsKLQotICAgICAgY2YyX2FycnN0YWNrX3B1c2goIHN0ZW1IaW50QXJyYXksICZzdGVtaGludCApOyAvKiBkZWZlciBlcnJvciBjaGVjayAqLwotICAgIH0KLQotICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOwotCi0gIGV4aXQ6Ci0gICAgLyogY2YyX2RvU3RlbXMgbXVzdCBkZWZpbmUgYSB3aWR0aCAobWF5IGJlIGRlZmF1bHQpICovCi0gICAgKmhhdmVXaWR0aCA9IFRSVUU7Ci0gIH0KLQotCi0gIHN0YXRpYyB2b2lkCi0gIGNmMl9kb0ZsZXgoIENGMl9TdGFjayAgICAgICBvcFN0YWNrLAotICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICAgY3VyWCwKLSAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgICAgIGN1clksCi0gICAgICAgICAgICAgIENGMl9HbHlwaFBhdGggICBnbHlwaFBhdGgsCi0gICAgICAgICAgICAgIGNvbnN0IEZUX0Jvb2wqICByZWFkRnJvbVN0YWNrLAotICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgZG9Db25kaXRpb25hbExhc3RSZWFkICkKLSAgewotICAgIENGMl9GaXhlZCAgdmFsc1sxNF07Ci0gICAgQ0YyX1VJbnQgICBpbmRleDsKLSAgICBGVF9Cb29sICAgIGlzSEZsZXg7Ci0gICAgQ0YyX0ludCAgICB0b3AsIGksIGo7Ci0KLQotICAgIHZhbHNbMF0gPSAqY3VyWDsKLSAgICB2YWxzWzFdID0gKmN1clk7Ci0gICAgaW5kZXggICA9IDA7Ci0gICAgaXNIRmxleCA9IEZUX0JPT0woIHJlYWRGcm9tU3RhY2tbOV0gPT0gRkFMU0UgKTsKLSAgICB0b3AgICAgID0gaXNIRmxleCA/IDkgOiAxMDsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgdG9wOyBpKysgKQotICAgIHsKLSAgICAgIHZhbHNbaSArIDJdID0gdmFsc1tpXTsKLSAgICAgIGlmICggcmVhZEZyb21TdGFja1tpXSApCi0gICAgICAgIHZhbHNbaSArIDJdICs9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCsrICk7Ci0gICAgfQotCi0gICAgaWYgKCBpc0hGbGV4ICkKLSAgICAgIHZhbHNbOSArIDJdID0gKmN1clk7Ci0KLSAgICBpZiAoIGRvQ29uZGl0aW9uYWxMYXN0UmVhZCApCi0gICAgewotICAgICAgRlRfQm9vbCAgICBsYXN0SXNYID0gKEZUX0Jvb2wpKCBjZjJfZml4ZWRBYnMoIHZhbHNbMTBdIC0gKmN1clggKSA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2ZpeGVkQWJzKCB2YWxzWzExXSAtICpjdXJZICkgKTsKLSAgICAgIENGMl9GaXhlZCAgbGFzdFZhbCA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCApOwotCi0KLSAgICAgIGlmICggbGFzdElzWCApCi0gICAgICB7Ci0gICAgICAgIHZhbHNbMTJdID0gdmFsc1sxMF0gKyBsYXN0VmFsOwotICAgICAgICB2YWxzWzEzXSA9ICpjdXJZOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICB2YWxzWzEyXSA9ICpjdXJYOwotICAgICAgICB2YWxzWzEzXSA9IHZhbHNbMTFdICsgbGFzdFZhbDsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGlmICggcmVhZEZyb21TdGFja1sxMF0gKQotICAgICAgICB2YWxzWzEyXSA9IHZhbHNbMTBdICsgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4KysgKTsKLSAgICAgIGVsc2UKLSAgICAgICAgdmFsc1sxMl0gPSAqY3VyWDsKLQotICAgICAgaWYgKCByZWFkRnJvbVN0YWNrWzExXSApCi0gICAgICAgIHZhbHNbMTNdID0gdmFsc1sxMV0gKyBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKTsKLSAgICAgIGVsc2UKLSAgICAgICAgdmFsc1sxM10gPSAqY3VyWTsKLSAgICB9Ci0KLSAgICBmb3IgKCBqID0gMDsgaiA8IDI7IGorKyApCi0gICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oIGdseXBoUGF0aCwgdmFsc1tqICogNiArIDJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaiAqIDYgKyAzXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzW2ogKiA2ICsgNF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsc1tqICogNiArIDVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaiAqIDYgKyA2XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzW2ogKiA2ICsgN10gKTsKLQotICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOwotCi0gICAgKmN1clggPSB2YWxzWzEyXTsKLSAgICAqY3VyWSA9IHZhbHNbMTNdOwotICB9Ci0KLQotICAvKiBCbGVuZCBudW1PcGVyYW5kcyBvbiB0aGUgc3RhY2ssICAgICAgICAgICAgICAgICovCi0gIC8qIHN0b3JlIHJlc3VsdHMgaW50byB0aGUgZmlyc3QgbnVtQmxlbmRzIHZhbHVlcywgKi8KLSAgLyogdGhlbiBwb3AgcmVtYWluaW5nIGFyZ3VtZW50cy4gICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBjZjJfZG9CbGVuZCggY29uc3QgQ0ZGX0JsZW5kICBibGVuZCwKLSAgICAgICAgICAgICAgIENGMl9TdGFjayAgICAgICAgb3BTdGFjaywKLSAgICAgICAgICAgICAgIENGMl9VSW50ICAgICAgICAgbnVtQmxlbmRzICkKLSAgewotICAgIENGMl9VSW50ICBkZWx0YTsKLSAgICBDRjJfVUludCAgYmFzZTsKLSAgICBDRjJfVUludCAgaSwgajsKLSAgICBDRjJfVUludCAgbnVtT3BlcmFuZHMgPSAoQ0YyX1VJbnQpKCBudW1CbGVuZHMgKiBibGVuZC0+bGVuQlYgKTsKLQotCi0gICAgYmFzZSAgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSAtIG51bU9wZXJhbmRzOwotICAgIGRlbHRhID0gYmFzZSArIG51bUJsZW5kczsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtQmxlbmRzOyBpKysgKQotICAgIHsKLSAgICAgIGNvbnN0IENGMl9GaXhlZCogIHdlaWdodCA9ICZibGVuZC0+QlZbMV07Ci0KLSAgICAgIC8qIHN0YXJ0IHdpdGggZmlyc3QgdGVybSAqLwotICAgICAgQ0YyX0ZpeGVkICBzdW0gPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaSArIGJhc2UgKTsKLQotCi0gICAgICBmb3IgKCBqID0gMTsgaiA8IGJsZW5kLT5sZW5CVjsgaisrICkKLSAgICAgICAgc3VtICs9IEZUX011bEZpeCggKndlaWdodCsrLCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgZGVsdGErKyApICk7Ci0KLSAgICAgIC8qIHN0b3JlIGJsZW5kZWQgcmVzdWx0ICAqLwotICAgICAgY2YyX3N0YWNrX3NldFJlYWwoIG9wU3RhY2ssIGkgKyBiYXNlLCBzdW0gKTsKLSAgICB9Ci0KLSAgICAvKiBsZWF2ZSBvbmx5IGBudW1CbGVuZHMnIHJlc3VsdHMgb24gc3RhY2sgKi8KLSAgICBjZjJfc3RhY2tfcG9wKCBvcFN0YWNrLCBudW1PcGVyYW5kcyAtIG51bUJsZW5kcyApOwotICB9Ci0KLQotICAvKgotICAgKiBgZXJyb3InIGlzIGEgc2hhcmVkIGVycm9yIGNvZGUgdXNlZCBieSBtYW55IG9iamVjdHMgaW4gdGhpcwotICAgKiByb3V0aW5lLiAgQmVmb3JlIHRoZSBjb2RlIGNvbnRpbnVlcyBmcm9tIGFuIGVycm9yLCBpdCBtdXN0IGNoZWNrIGFuZAotICAgKiByZWNvcmQgdGhlIGVycm9yIGluIGAqZXJyb3InLiAgVGhlIGlkZWEgaXMgdGhhdCB0aGlzIHNoYXJlZAotICAgKiBlcnJvciBjb2RlIHdpbGwgcmVjb3JkIHRoZSBmaXJzdCBlcnJvciBlbmNvdW50ZXJlZC4gIElmIHRlc3RpbmcKLSAgICogZm9yIGFuIGVycm9yIGFueXdheSwgdGhlIGNvc3Qgb2YgYGdvdG8gZXhpdCcgaXMgc21hbGwsIHNvIHdlIGRvIGl0LAotICAgKiBldmVuIGlmIGNvbnRpbnVpbmcgd291bGQgYmUgc2FmZS4gIEluIHRoaXMgY2FzZSwgYGxhc3RFcnJvcicgaXMKLSAgICogc2V0LCBzbyB0aGUgdGVzdGluZyBhbmQgc3RvcmluZyBjYW4gYmUgZG9uZSBpbiBvbmUgcGxhY2UsIGF0IGBleGl0Jy4KLSAgICoKLSAgICogQ29udGludWluZyBhZnRlciBhbiBlcnJvciBpcyBpbnRlbmRlZCBmb3Igb2JqZWN0cyB3aGljaCBkbyB0aGVpciBvd24KLSAgICogdGVzdGluZyBvZiBgKmVycm9yJywgZS5nLiwgYXJyYXkgc3RhY2sgZnVuY3Rpb25zLiAgVGhpcyBhbGxvd3MgdXMgdG8KLSAgICogYXZvaWQgYW4gZXh0cmEgdGVzdCBhZnRlciB0aGUgY2FsbC4KLSAgICoKLSAgICogVW5pbXBsZW1lbnRlZCBvcGNvZGVzIGFyZSBpZ25vcmVkLgotICAgKgotICAgKi8KLSAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgY2YyX2ludGVycFQyQ2hhclN0cmluZyggQ0YyX0ZvbnQgICAgICAgICAgICAgIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgICAgICAgICBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9PdXRsaW5lQ2FsbGJhY2tzICBjYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogICAgICB0cmFuc2xhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgICAgIGRvaW5nU2VhYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgICAgICAgIGN1clgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgICAgICAgICBjdXJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICAgICAgICAgd2lkdGggKQotICB7Ci0gICAgLyogbGFzdEVycm9yIGlzIHVzZWQgZm9yIGVycm9ycyB0aGF0IGFyZSBpbW1lZGlhdGVseSB0ZXN0ZWQgKi8KLSAgICBGVF9FcnJvciAgbGFzdEVycm9yID0gRlRfRXJyX09rOwotCi0gICAgLyogcG9pbnRlciB0byBwYXJzZWQgZm9udCBvYmplY3QgKi8KLSAgICBDRkZfRGVjb2RlciogIGRlY29kZXIgPSBmb250LT5kZWNvZGVyOwotCi0gICAgRlRfRXJyb3IqICBlcnJvciAgPSAmZm9udC0+ZXJyb3I7Ci0gICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmb250LT5tZW1vcnk7Ci0KLSAgICBDRjJfRml4ZWQgIHNjYWxlWSAgICAgICAgPSBmb250LT5pbm5lclRyYW5zZm9ybS5kOwotICAgIENGMl9GaXhlZCAgbm9taW5hbFdpZHRoWCA9IGNmMl9nZXROb21pbmFsV2lkdGhYKCBkZWNvZGVyICk7Ci0KLSAgICAvKiBzYXZlIHRoaXMgZm9yIGhpbnRpbmcgc2VhYyBhY2NlbnRzICovCi0gICAgQ0YyX0ZpeGVkICBoaW50T3JpZ2luWSA9IGN1clk7Ci0KLSAgICBDRjJfU3RhY2sgIG9wU3RhY2sgPSBOVUxMOwotICAgIEZUX1VJbnQgICAgc3RhY2tTaXplOwotICAgIEZUX0J5dGUgICAgb3AxOyAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3Qgb3Bjb2RlIGJ5dGUgKi8KLQotICAgIENGMl9GMTZEb3QxNiAgc3RvcmFnZVtDRjJfU1RPUkFHRV9TSVpFXTsgICAgLyogZm9yIGBwdXQnIGFuZCBgZ2V0JyAqLwotCi0gICAgLyogaW5zdHJ1Y3Rpb24gbGltaXQ7IDIwLDAwMCwwMDAgbWF0Y2hlcyBBdmFsb24gKi8KLSAgICBGVF9VSW50MzIgIGluc3RydWN0aW9uTGltaXQgPSAyMDAwMDAwMFVMOwotCi0gICAgQ0YyX0FyclN0YWNrUmVjICBzdWJyU3RhY2s7Ci0KLSAgICBGVF9Cb29sICAgICBoYXZlV2lkdGg7Ci0gICAgQ0YyX0J1ZmZlciAgY2hhcnN0cmluZyA9IE5VTEw7Ci0KLSAgICBDRjJfSW50ICBjaGFyc3RyaW5nSW5kZXggPSAtMTsgICAgICAgLyogaW5pdGlhbGl6ZSB0byBlbXB0eSAqLwotCi0gICAgLyogVE9ETzogcGxhY2Vob2xkZXJzIGZvciBoaW50IHN0cnVjdHVyZXMgKi8KLQotICAgIC8qIG9iamVjdHMgdXNlZCBmb3IgaGludGluZyAqLwotICAgIENGMl9BcnJTdGFja1JlYyAgaFN0ZW1IaW50QXJyYXk7Ci0gICAgQ0YyX0FyclN0YWNrUmVjICB2U3RlbUhpbnRBcnJheTsKLQotICAgIENGMl9IaW50TWFza1JlYyAgIGhpbnRNYXNrOwotICAgIENGMl9HbHlwaFBhdGhSZWMgIGdseXBoUGF0aDsKLQotCi0gICAgRlRfWkVSTyggJnN0b3JhZ2UgKTsKLQotICAgIC8qIGluaXRpYWxpemUgdGhlIHJlbWFpbmluZyBvYmplY3RzICovCi0gICAgY2YyX2FycnN0YWNrX2luaXQoICZzdWJyU3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIENGMl9CdWZmZXJSZWMgKSApOwotICAgIGNmMl9hcnJzdGFja19pbml0KCAmaFN0ZW1IaW50QXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIENGMl9TdGVtSGludFJlYyApICk7Ci0gICAgY2YyX2FycnN0YWNrX2luaXQoICZ2U3RlbUhpbnRBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggQ0YyX1N0ZW1IaW50UmVjICkgKTsKLQotICAgIC8qIGluaXRpYWxpemUgQ0YyX1N0ZW1IaW50IGFycmF5cyAqLwotICAgIGNmMl9oaW50bWFza19pbml0KCAmaGludE1hc2ssIGVycm9yICk7Ci0KLSAgICAvKiBpbml0aWFsaXplIHBhdGggbWFwIHRvIG1hbmFnZSBkcmF3aW5nIG9wZXJhdGlvbnMgKi8KLQotICAgIC8qIE5vdGU6IGxhc3QgNCBwYXJhbXMgYXJlIHVzZWQgdG8gaGFuZGxlIGBNb3ZlVG9QZXJtaXNzaXZlJywgd2hpY2ggKi8KLSAgICAvKiAgICAgICBtYXkgbmVlZCB0byBjYWxsIGBoaW50TWFwLkJ1aWxkJyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyogVE9ETzogTW92ZVRvUGVybWlzc2l2ZSBpcyBnb25lOyBhcmUgdGhlc2Ugc3RpbGwgbmVlZGVkPyAgICAgICAgICAqLwotICAgIGNmMl9nbHlwaHBhdGhfaW5pdCggJmdseXBoUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVksCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBoU2hpZnQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAmaFN0ZW1IaW50QXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAmdlN0ZW1IaW50QXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAmaGludE1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICBoaW50T3JpZ2luWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5ibHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uICk7Ci0KLSAgICAvKgotICAgICAqIEluaXRpYWxpemUgc3RhdGUgZm9yIHdpZHRoIHBhcnNpbmcuICBGcm9tIHRoZSBDRkYgU3BlYzoKLSAgICAgKgotICAgICAqICAgVGhlIGZpcnN0IHN0YWNrLWNsZWFyaW5nIG9wZXJhdG9yLCB3aGljaCBtdXN0IGJlIG9uZSBvZiBoc3RlbSwKLSAgICAgKiAgIGhzdGVtaG0sIHZzdGVtLCB2c3RlbWhtLCBjbnRybWFzaywgaGludG1hc2ssIGhtb3ZldG8sIHZtb3ZldG8sCi0gICAgICogICBybW92ZXRvLCBvciBlbmRjaGFyLCB0YWtlcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IC0gdGhlIHdpZHRoIChhcwotICAgICAqICAgZGVzY3JpYmVkIGVhcmxpZXIpLCB3aGljaCBtYXkgYmUgZXhwcmVzc2VkIGFzIHplcm8gb3Igb25lIG51bWVyaWMKLSAgICAgKiAgIGFyZ3VtZW50LgotICAgICAqCi0gICAgICogV2hhdCB3ZSBpbXBsZW1lbnQgaGVyZSB1c2VzIHRoZSBmaXJzdCB2YWxpZGx5IHNwZWNpZmllZCB3aWR0aCwgYnV0Ci0gICAgICogZG9lcyBub3QgZGV0ZWN0IGVycm9ycyBmb3Igc3BlY2lmeWluZyBtb3JlIHRoYW4gb25lIHdpZHRoLgotICAgICAqCi0gICAgICogSWYgb25lIG9mIHRoZSBhYm92ZSBvcGVyYXRvcnMgb2NjdXJzIHdpdGhvdXQgZXhwbGljaXRseSBzcGVjaWZ5aW5nCi0gICAgICogYSB3aWR0aCwgd2UgYXNzdW1lIHRoZSBkZWZhdWx0IHdpZHRoLgotICAgICAqCi0gICAgICogQ0ZGMiBjaGFyc3RyaW5ncyBhbHdheXMgcmV0dXJuIHRoZSBkZWZhdWx0IHdpZHRoICgwKS4KLSAgICAgKgotICAgICAqLwotICAgIGhhdmVXaWR0aCA9IGZvbnQtPmlzQ0ZGMiA/IFRSVUUgOiBGQUxTRTsKLSAgICAqd2lkdGggICAgPSBjZjJfZ2V0RGVmYXVsdFdpZHRoWCggZGVjb2RlciApOwotCi0gICAgLyoKLSAgICAgKiBOb3RlOiBBdCB0aGlzIHBvaW50LCBhbGwgcG9pbnRlcnMgdG8gcmVzb3VyY2VzIG11c3QgYmUgTlVMTAotICAgICAqICAgICAgIGFuZCBhbGwgbG9jYWwgb2JqZWN0cyBtdXN0IGJlIGluaXRpYWxpemVkLgotICAgICAqICAgICAgIFRoZXJlIG11c3QgYmUgbm8gYnJhbmNoZXMgdG8gYGV4aXQ6JyBhYm92ZSB0aGlzIHBvaW50LgotICAgICAqCi0gICAgICovCi0KLSAgICAvKiBhbGxvY2F0ZSBhbiBvcGVyYW5kIHN0YWNrICovCi0gICAgc3RhY2tTaXplID0gZm9udC0+aXNDRkYyID8gY2YyX2dldE1heHN0YWNrKCBkZWNvZGVyICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDRjJfT1BFUkFORF9TVEFDS19TSVpFOwotICAgIG9wU3RhY2sgICA9IGNmMl9zdGFja19pbml0KCBtZW1vcnksIGVycm9yLCBzdGFja1NpemUgKTsKLQotICAgIGlmICggIW9wU3RhY2sgKQotICAgIHsKLSAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBPdXRfT2ZfTWVtb3J5ICk7Ci0gICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgLyogaW5pdGlhbGl6ZSBzdWJyb3V0aW5lIHN0YWNrIGJ5IHBsYWNpbmcgdG9wIGxldmVsIGNoYXJzdHJpbmcgYXMgKi8KLSAgICAvKiBmaXJzdCBlbGVtZW50IChtYXggZGVwdGggcGx1cyBvbmUgZm9yIHRoZSBjaGFyc3RyaW5nKSAgICAgICAgICAqLwotICAgIC8qIE5vdGU6IENhbGxlciBvd25zIGFuZCBtdXN0IGZpbmFsaXplIHRoZSBmaXJzdCBjaGFyc3RyaW5nLiAgICAgICovCi0gICAgLyogICAgICAgT3VyIGNvcHkgb2YgaXQgZG9lcyBub3QgY2hhbmdlIHRoYXQgcmVxdWlyZW1lbnQuICAgICAgICAgKi8KLSAgICBjZjJfYXJyc3RhY2tfc2V0Q291bnQoICZzdWJyU3RhY2ssIENGMl9NQVhfU1VCUiArIDEgKTsKLQotICAgIGNoYXJzdHJpbmcgID0gKENGMl9CdWZmZXIpY2YyX2FycnN0YWNrX2dldEJ1ZmZlciggJnN1YnJTdGFjayApOwotICAgICpjaGFyc3RyaW5nID0gKmJ1ZjsgICAgLyogc3RydWN0dXJlIGNvcHkgKi8KLQotICAgIGNoYXJzdHJpbmdJbmRleCA9IDA7ICAgICAgIC8qIGVudHJ5IGlzIHZhbGlkIG5vdyAqLwotCi0gICAgLyogY2F0Y2ggZXJyb3JzIHNvIGZhciAqLwotICAgIGlmICggKmVycm9yICkKLSAgICAgIGdvdG8gZXhpdDsKLQotICAgIC8qIG1haW4gaW50ZXJwcmV0ZXIgbG9vcCAqLwotICAgIHdoaWxlICggMSApCi0gICAgewotICAgICAgaWYgKCBjZjJfYnVmX2lzRW5kKCBjaGFyc3RyaW5nICkgKQotICAgICAgewotICAgICAgICAvKiBJZiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNoYXJzdHJpbmcsIHNpbXVsYXRlIGEgKi8KLSAgICAgICAgLyogY2YyX2NtZFJFVFVSTiBvciBjZjJfY21kRU5EQ0hBUi4gICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIC8qIFdlIGRvIHRoaXMgZm9yIGJvdGggQ0ZGIGFuZCBDRkYyLiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAoIGNoYXJzdHJpbmdJbmRleCApCi0gICAgICAgICAgb3AxID0gY2YyX2NtZFJFVFVSTjsgIC8qIGVuZCBvZiBidWZmZXIgZm9yIHN1YnJvdXRpbmUgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgIG9wMSA9IGNmMl9jbWRFTkRDSEFSOyAvKiBlbmQgb2YgYnVmZmVyIGZvciB0b3AgbGV2ZWwgY2hhcnN0cmluZyAqLwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBvcDEgPSAoRlRfQnl0ZSljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7Ci0KLSAgICAgICAgLyogRXhwbGljaXQgUkVUVVJOIGFuZCBFTkRDSEFSIGluIENGRjIgc2hvdWxkIGJlIGlnbm9yZWQuICovCi0gICAgICAgIC8qIE5vdGU6IFRyYWNlIG1lc3NhZ2Ugd2lsbCByZXBvcnQgMCBpbnN0ZWFkIG9mIDExIG9yIDE0LiAqLwotICAgICAgICBpZiAoICggb3AxID09IGNmMl9jbWRSRVRVUk4gfHwgb3AxID09IGNmMl9jbWRFTkRDSEFSICkgJiYKLSAgICAgICAgICAgICBmb250LT5pc0NGRjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICBvcDEgPSBjZjJfY21kUkVTRVJWRURfMDsKLSAgICAgIH0KLQotICAgICAgLyogY2hlY2sgZm9yIGVycm9ycyBvbmNlIHBlciBsb29wICovCi0gICAgICBpZiAoICplcnJvciApCi0gICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgaW5zdHJ1Y3Rpb25MaW1pdC0tOwotICAgICAgaWYgKCBpbnN0cnVjdGlvbkxpbWl0ID09IDAgKQotICAgICAgewotICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKLSAgICAgICAgZ290byBleGl0OwotICAgICAgfQotCi0gICAgICBzd2l0Y2goIG9wMSApCi0gICAgICB7Ci0gICAgICBjYXNlIGNmMl9jbWRSRVNFUlZFRF8wOgotICAgICAgY2FzZSBjZjJfY21kUkVTRVJWRURfMjoKLSAgICAgIGNhc2UgY2YyX2NtZFJFU0VSVkVEXzk6Ci0gICAgICBjYXNlIGNmMl9jbWRSRVNFUlZFRF8xMzoKLSAgICAgIGNhc2UgY2YyX2NtZFJFU0VSVkVEXzE3OgotICAgICAgICAvKiB3ZSBtYXkgZ2V0IGhlcmUgaWYgd2UgaGF2ZSBhIHByaW9yIGVycm9yICovCi0gICAgICAgIEZUX1RSQUNFNCgoICIgdW5rbm93biBvcCAoJWQpXG4iLCBvcDEgKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIGNmMl9jbWRWU0lOREVYOgotICAgICAgICBGVF9UUkFDRTQoKCAiIHZzaW5kZXhcbiIgKSk7Ci0KLSAgICAgICAgaWYgKCAhZm9udC0+aXNDRkYyICkKLSAgICAgICAgICBicmVhazsgICAgLyogY2xlYXIgc3RhY2sgJiBpZ25vcmUgKi8KLQotICAgICAgICBpZiAoIGZvbnQtPmJsZW5kLnVzZWRCViApCi0gICAgICAgIHsKLSAgICAgICAgICAvKiB2c2luZGV4IG5vdCBhbGxvd2VkIGFmdGVyIGJsZW5kICovCi0gICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7Ci0gICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgIEZUX0ludCAgdGVtcCA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKLQotCi0gICAgICAgICAgaWYgKCB0ZW1wID49IDAgKQotICAgICAgICAgICAgZm9udC0+dnNpbmRleCA9IChGVF9VSW50KXRlbXA7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgY2YyX2NtZEJMRU5EOgotICAgICAgICB7Ci0gICAgICAgICAgRlRfVUludCAgbnVtQmxlbmRzOwotCi0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIGJsZW5kXG4iICkpOwotCi0gICAgICAgICAgaWYgKCAhZm9udC0+aXNDRkYyICkKLSAgICAgICAgICAgIGJyZWFrOyAgICAvKiBjbGVhciBzdGFjayAmIGlnbm9yZSAqLwotCi0gICAgICAgICAgLyogZG8gd2UgaGF2ZSBhIGBibGVuZCcgb3AgaW4gYSBub24tdmFyaWFudCBmb250PyAqLwotICAgICAgICAgIGlmICggIWZvbnQtPmJsZW5kLmZvbnQgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIGNoZWNrIGNhY2hlZCBibGVuZCB2ZWN0b3IgKi8KLSAgICAgICAgICBpZiAoIGNmZl9ibGVuZF9jaGVja192ZWN0b3IoICZmb250LT5ibGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPnZzaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5sZW5ORFYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5ORFYgKSApCi0gICAgICAgICAgewotICAgICAgICAgICAgbGFzdEVycm9yID0gY2ZmX2JsZW5kX2J1aWxkX3ZlY3RvciggJmZvbnQtPmJsZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+dnNpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmxlbk5EViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPk5EViApOwotICAgICAgICAgICAgaWYgKCBsYXN0RXJyb3IgKQotICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogZG8gdGhlIGJsZW5kICovCi0gICAgICAgICAgbnVtQmxlbmRzID0gKEZUX1VJbnQpY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOwotICAgICAgICAgIGlmICggbnVtQmxlbmRzID4gc3RhY2tTaXplICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBjZjJfZG9CbGVuZCggJmZvbnQtPmJsZW5kLCBvcFN0YWNrLCBudW1CbGVuZHMgKTsKLQotICAgICAgICAgIGZvbnQtPmJsZW5kLnVzZWRCViA9IFRSVUU7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7ICAgICAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCi0KLSAgICAgIGNhc2UgY2YyX2NtZEhTVEVNSE06Ci0gICAgICBjYXNlIGNmMl9jbWRIU1RFTToKLSAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRIU1RFTUhNID8gIiBoc3RlbWhtXG4iIDogIiBoc3RlbVxuIiApKTsKLQotICAgICAgICAvKiBuZXZlciBhZGQgaGludHMgYWZ0ZXIgdGhlIG1hc2sgaXMgY29tcHV0ZWQgKi8KLSAgICAgICAgaWYgKCBjZjJfaGludG1hc2tfaXNWYWxpZCggJmhpbnRNYXNrICkgKQotICAgICAgICB7Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmc6IgotICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBob3Jpem9udGFsIGhpbnQgbWFza1xuIiApKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNmMl9kb1N0ZW1zKCBmb250LAotICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICZoU3RlbUhpbnRBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgJmhhdmVXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgIDAgKTsKLQotICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBjZjJfY21kVlNURU1ITToKLSAgICAgIGNhc2UgY2YyX2NtZFZTVEVNOgotICAgICAgICBGVF9UUkFDRTQoKCBvcDEgPT0gY2YyX2NtZFZTVEVNSE0gPyAiIHZzdGVtaG1cbiIgOiAiIHZzdGVtXG4iICkpOwotCi0gICAgICAgIC8qIG5ldmVyIGFkZCBoaW50cyBhZnRlciB0aGUgbWFzayBpcyBjb21wdXRlZCAqLwotICAgICAgICBpZiAoIGNmMl9oaW50bWFza19pc1ZhbGlkKCAmaGludE1hc2sgKSApCi0gICAgICAgIHsKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZzoiCi0gICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHZlcnRpY2FsIGhpbnQgbWFza1xuIiApKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNmMl9kb1N0ZW1zKCBmb250LAotICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICZ2U3RlbUhpbnRBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgJmhhdmVXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgIDAgKTsKLQotICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBjZjJfY21kVk1PVkVUTzoKLSAgICAgICAgRlRfVFJBQ0U0KCggIiB2bW92ZXRvXG4iICkpOwotCi0gICAgICAgIGlmICggY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgPiAxICYmICFoYXZlV2lkdGggKQotICAgICAgICAgICp3aWR0aCA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCAwICkgKyBub21pbmFsV2lkdGhYOwotCi0gICAgICAgIC8qIHdpZHRoIGlzIGRlZmluZWQgb3IgZGVmYXVsdCBhZnRlciB0aGlzICovCi0gICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7Ci0KLSAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKLSAgICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLQotICAgICAgICBjZjJfZ2x5cGhwYXRoX21vdmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOwotCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIGNmMl9jbWRSTElORVRPOgotICAgICAgICB7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGluZGV4OwotICAgICAgICAgIENGMl9VSW50ICBjb3VudCA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOwotCi0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJsaW5ldG9cbiIgKSk7Ci0KLSAgICAgICAgICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4ICs9IDIgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGN1clggKz0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMCApOwotICAgICAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICk7Ci0KLSAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KLQotICAgICAgY2FzZSBjZjJfY21kSExJTkVUTzoKLSAgICAgIGNhc2UgY2YyX2NtZFZMSU5FVE86Ci0gICAgICAgIHsKLSAgICAgICAgICBDRjJfVUludCAgaW5kZXg7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7Ci0KLSAgICAgICAgICBGVF9Cb29sICBpc1ggPSBGVF9CT09MKCBvcDEgPT0gY2YyX2NtZEhMSU5FVE8gKTsKLQotCi0gICAgICAgICAgRlRfVFJBQ0U0KCggaXNYID8gIiBobGluZXRvXG4iIDogIiB2bGluZXRvXG4iICkpOwotCi0gICAgICAgICAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDRjJfRml4ZWQgIHYgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKTsKLQotCi0gICAgICAgICAgICBpZiAoIGlzWCApCi0gICAgICAgICAgICAgIGN1clggKz0gdjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgY3VyWSArPSB2OwotCi0gICAgICAgICAgICBpc1ggPSAhaXNYOwotCi0gICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2xpbmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBjYXNlIGNmMl9jbWRSQ1VSVkVMSU5FOgotICAgICAgY2FzZSBjZjJfY21kUlJDVVJWRVRPOgotICAgICAgICB7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGluZGV4ID0gMDsKLQotCi0gICAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRSQ1VSVkVMSU5FID8gIiByY3VydmVsaW5lXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiBycmN1cnZldG9cbiIgKSk7Ci0KLSAgICAgICAgICB3aGlsZSAoIGluZGV4ICsgNiA8PSBjb3VudCApCi0gICAgICAgICAgewotICAgICAgICAgICAgQ0YyX0ZpeGVkICB4MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clg7Ci0gICAgICAgICAgICBDRjJfRml4ZWQgIHkxID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMSApICsgY3VyWTsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeDIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAyICkgKyB4MTsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeTIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAzICkgKyB5MTsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeDMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyA0ICkgKyB4MjsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeTMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyA1ICkgKyB5MjsKLQotCi0gICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oICZnbHlwaFBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMgKTsKLQotICAgICAgICAgICAgY3VyWCAgID0geDM7Ci0gICAgICAgICAgICBjdXJZICAgPSB5MzsKLSAgICAgICAgICAgIGluZGV4ICs9IDY7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKCBvcDEgPT0gY2YyX2NtZFJDVVJWRUxJTkUgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGN1clggKz0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMCApOwotICAgICAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICk7Ci0KLSAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KLQotICAgICAgY2FzZSBjZjJfY21kQ0FMTEdTVUJSOgotICAgICAgY2FzZSBjZjJfY21kQ0FMTFNVQlI6Ci0gICAgICAgIHsKLSAgICAgICAgICBDRjJfSW50ICBzdWJyTnVtOwotCi0KLSAgICAgICAgICBGVF9UUkFDRTQoKCBvcDEgPT0gY2YyX2NtZENBTExHU1VCUiA/ICIgY2FsbGdzdWJyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiBjYWxsc3ViciIgKSk7Ci0KLSAgICAgICAgICBpZiAoIGNoYXJzdHJpbmdJbmRleCA+IENGMl9NQVhfU1VCUiApCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogbWF4IHN1YnIgcGx1cyBvbmUgZm9yIGNoYXJzdHJpbmcgKi8KLSAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOwotICAgICAgICAgICAgZ290byBleGl0OyAgICAgICAgICAgICAgICAgICAgICAvKiBvdmVyZmxvdyBvZiBzdGFjayAqLwotICAgICAgICAgIH0KLQotICAgICAgICAgIC8qIHB1c2ggb3VyIGN1cnJlbnQgQ0ZGIGNoYXJzdHJpbmcgcmVnaW9uIG9uIHN1YnJTdGFjayAqLwotICAgICAgICAgIGNoYXJzdHJpbmcgPSAoQ0YyX0J1ZmZlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfZ2V0UG9pbnRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJyU3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KWNoYXJzdHJpbmdJbmRleCArIDEgKTsKLQotICAgICAgICAgIC8qIHNldCB1cCB0aGUgbmV3IENGRiByZWdpb24gYW5kIHBvaW50ZXIgKi8KLSAgICAgICAgICBzdWJyTnVtID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOwotCi0gICAgICAgICAgc3dpdGNoICggb3AxICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBjZjJfY21kQ0FMTEdTVUJSOgotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtICsgZGVjb2Rlci0+Z2xvYmFsc19iaWFzLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICsgMSApKTsKLQotICAgICAgICAgICAgaWYgKCBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKLSAgICAgICAgICAgICAgZ290byBleGl0OyAgLyogc3Vicm91dGluZSBsb29rdXAgb3Igc3RyZWFtIGVycm9yICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvKiBjZjJfY21kQ0FMTFNVQlIgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgc3Vick51bSArIGRlY29kZXItPmxvY2Fsc19iaWFzLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICsgMSApKTsKLQotICAgICAgICAgICAgaWYgKCBjZjJfaW5pdExvY2FsUmVnaW9uQnVmZmVyKCBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKLSAgICAgICAgICAgICAgZ290byBleGl0OyAgLyogc3Vicm91dGluZSBsb29rdXAgb3Igc3RyZWFtIGVycm9yICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICs9IDE7ICAgICAgIC8qIGVudHJ5IGlzIHZhbGlkIG5vdyAqLwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCi0KLSAgICAgIGNhc2UgY2YyX2NtZFJFVFVSTjoKLSAgICAgICAgRlRfVFJBQ0U0KCggIiByZXR1cm4gKGxlYXZpbmcgbGV2ZWwgJWQpXG4iLCBjaGFyc3RyaW5nSW5kZXggKSk7Ci0KLSAgICAgICAgaWYgKCBjaGFyc3RyaW5nSW5kZXggPCAxICkKLSAgICAgICAgewotICAgICAgICAgIC8qIE5vdGU6IGNhbm5vdCByZXR1cm4gZnJvbSB0b3AgY2hhcnN0cmluZyAqLwotICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOwotICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgLyogdW5kZXJmbG93IG9mIHN0YWNrICovCi0gICAgICAgIH0KLQotICAgICAgICAvKiByZXN0b3JlIHBvc2l0aW9uIGluIHByZXZpb3VzIGNoYXJzdHJpbmcgKi8KLSAgICAgICAgY2hhcnN0cmluZyA9IChDRjJfQnVmZmVyKQotICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfZ2V0UG9pbnRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViclN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgIChDRjJfVUludCktLWNoYXJzdHJpbmdJbmRleCApOwotICAgICAgICBjb250aW51ZTsgICAgIC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgY2FzZSBjZjJfY21kRVNDOgotICAgICAgICB7Ci0gICAgICAgICAgRlRfQnl0ZSAgb3AyID0gKEZUX0J5dGUpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOwotCi0KLSAgICAgICAgICAvKiBmaXJzdCBzd2l0Y2ggZm9yIDItYnl0ZSBvcGVyYXRvcnMgaGFuZGxlcyBDRkYyICAgICAgKi8KLSAgICAgICAgICAvKiBhbmQgb3Bjb2RlcyB0aGF0IGFyZSByZXNlcnZlZCBmb3IgYm90aCBDRkYgYW5kIENGRjIgKi8KLSAgICAgICAgICBzd2l0Y2ggKCBvcDIgKQotICAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIGNmMl9lc2NIRkxFWDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRSVUUgLyogZHgxICovLCBGQUxTRSAvKiBkeTEgKi8sCi0gICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgIC8qIGR5MiAqLywKLSAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MyAqLywgRkFMU0UgLyogZHkzICovLAotICAgICAgICAgICAgICAgIFRSVUUgLyogZHg0ICovLCBGQUxTRSAvKiBkeTQgKi8sCi0gICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIEZBTFNFIC8qIGR5NSAqLywKLSAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCi0gICAgICAgICAgICAgIH07Ci0KLQotICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4XG4iICkpOwotCi0gICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgLyogZG9Db25kaXRpb25hbExhc3RSZWFkICovICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgIGNhc2UgY2YyX2VzY0ZMRVg6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBGVF9Cb29sICByZWFkRnJvbVN0YWNrWzEyXSA9Ci0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MSAqLywgVFJVRSAvKiBkeTEgKi8sCi0gICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgLyogZHkyICovLAotICAgICAgICAgICAgICAgIFRSVUUgLyogZHgzICovLCBUUlVFIC8qIGR5MyAqLywKLSAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NCAqLywgVFJVRSAvKiBkeTQgKi8sCi0gICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIFRSVUUgLyogZHk1ICovLAotICAgICAgICAgICAgICAgIFRSVUUgLyogZHg2ICovLCBUUlVFIC8qIGR5NiAqLwotICAgICAgICAgICAgICB9OwotCi0KLSAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBmbGV4XG4iICkpOwotCi0gICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgLyogZG9Db25kaXRpb25hbExhc3RSZWFkICovICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsgICAgICAvKiBUT0RPOiB3aHkgaXMgdGhpcyBub3QgYSBjb250aW51ZT8gKi8KLQotICAgICAgICAgIGNhc2UgY2YyX2VzY0hGTEVYMToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRSVUUgLyogZHgxICovLCBUUlVFICAvKiBkeTEgKi8sCi0gICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgIC8qIGR5MiAqLywKLSAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MyAqLywgRkFMU0UgLyogZHkzICovLAotICAgICAgICAgICAgICAgIFRSVUUgLyogZHg0ICovLCBGQUxTRSAvKiBkeTQgKi8sCi0gICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIFRSVUUgIC8qIGR5NSAqLywKLSAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCi0gICAgICAgICAgICAgIH07Ci0KLQotICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4MVxuIiApKTsKLQotICAgICAgICAgICAgICBjZjJfZG9GbGV4KCBvcFN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1clksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaFBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRGcm9tU3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIC8qIGRvQ29uZGl0aW9uYWxMYXN0UmVhZCAqLyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICBjYXNlIGNmMl9lc2NGTEVYMToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MSAqLywgVFJVRSAgLyogZHkxICovLAotICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MiAqLywgVFJVRSAgLyogZHkyICovLAotICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MyAqLywgVFJVRSAgLyogZHkzICovLAotICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4NCAqLywgVFJVRSAgLyogZHk0ICovLAotICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4NSAqLywgVFJVRSAgLyogZHk1ICovLAotICAgICAgICAgICAgICAgIEZBTFNFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCi0gICAgICAgICAgICAgIH07Ci0KLQotICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGZsZXgxXG4iICkpOwotCi0gICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSAvKiBkb0NvbmRpdGlvbmFsTGFzdFJlYWQgKi8gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgLyogdGhlc2Ugb3Bjb2RlcyBhcmUgcmVzZXJ2ZWQgaW4gYm90aCBDRkYgJiBDRkYyICovCi0gICAgICAgICAgY2FzZSBjZjJfZXNjUkVTRVJWRURfMToKLSAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF8yOgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzY6Ci0gICAgICAgICAgY2FzZSBjZjJfZXNjUkVTRVJWRURfNzoKLSAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF84OgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzEzOgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzE2OgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzE3OgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzE5OgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzI1OgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzMxOgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzMyOgotICAgICAgICAgIGNhc2UgY2YyX2VzY1JFU0VSVkVEXzMzOgotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICgxMiwgJWQpXG4iLCBvcDIgKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGlmICggZm9udC0+aXNDRkYyIHx8IG9wMiA+PSBjZjJfZXNjUkVTRVJWRURfMzggKQotICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgdW5rbm93biBvcCAoMTIsICVkKVxuIiwgb3AyICkpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBzZWNvbmQgc3dpdGNoIGZvciAyLWJ5dGUgb3BlcmF0b3JzIGhhbmRsZXMganVzdCBDRkYgKi8KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCBvcDIgKQotICAgICAgICAgICAgICAgIHsKLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0RPVFNFQ1RJT046Ci0gICAgICAgICAgICAgICAgICAvKiBzb21ldGhpbmcgYWJvdXQgYGZsaXAgdHlwZSBvZiBsb2NraW5nJyAtLSBpZ25vcmUgaXQgKi8KLSAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZG90c2VjdGlvblxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIGNmMl9lc2NBTkQ6Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOwotCi0KLSAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhbmRcbiIgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXJnMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotICAgICAgICAgICAgICAgICAgICBhcmcxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hJbnQoIG9wU3RhY2ssIGFyZzEgJiYgYXJnMiApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY09SOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzE7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMjsKLQotCi0gICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgb3JcbiIgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXJnMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotICAgICAgICAgICAgICAgICAgICBhcmcxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hJbnQoIG9wU3RhY2ssIGFyZzEgfHwgYXJnMiApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY05PVDoKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7Ci0KLQotICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG5vdFxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLQotICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgIWFyZyApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0FCUzoKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7Ci0KLQotICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFic1xuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLQotICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBGVF9BQlMoIGFyZyApICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjQUREOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHN1bW1hbmQxOwotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHN1bW1hbmQyOwotCi0KLSAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhZGRcbiIgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VtbWFuZDIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLSAgICAgICAgICAgICAgICAgICAgc3VtbWFuZDEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLQotICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBzdW1tYW5kMSArIHN1bW1hbmQyICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjU1VCOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIG1pbnVlbmQ7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgc3VidHJhaGVuZDsKLQotCi0gICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3ViXG4iICkpOwotCi0gICAgICAgICAgICAgICAgICAgIHN1YnRyYWhlbmQgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLSAgICAgICAgICAgICAgICAgICAgbWludWVuZCAgICA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotCi0gICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIG1pbnVlbmQgLSBzdWJ0cmFoZW5kICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjRElWOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGRpdmlkZW5kOwotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGRpdmlzb3I7Ci0KLQotICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRpdlxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICBkaXZpc29yICA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotICAgICAgICAgICAgICAgICAgICBkaXZpZGVuZCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotCi0gICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIEZUX0RpdkZpeCggZGl2aWRlbmQsIGRpdmlzb3IgKSApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY05FRzoKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7Ci0KLQotICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG5lZ1xuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLQotICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCAtYXJnICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjRVE6Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOwotCi0KLSAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICBhcmcyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZzEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLQotICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgYXJnMSA9PSBhcmcyICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjRFJPUDoKLSAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZHJvcFxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgKHZvaWQpY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjUFVUOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHZhbDsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBpZHg7Ci0KLQotICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHB1dFxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICBpZHggPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggaWR4ID49IDAgJiYgaWR4IDwgQ0YyX1NUT1JBR0VfU0laRSApCi0gICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVtpZHhdID0gdmFsOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0dFVDoKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgaWR4OwotCi0KLSAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBnZXRcbiIgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWR4ID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggaWR4ID49IDAgJiYgaWR4IDwgQ0YyX1NUT1JBR0VfU0laRSApCi0gICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgc3RvcmFnZVtpZHhdICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjSUZFTFNFOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzE7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMjsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBjb25kMTsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBjb25kMjsKLQotCi0gICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaWZlbHNlXG4iICkpOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbmQyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmQxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZzIgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZzEgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgY29uZDEgPD0gY29uZDIgPyBhcmcxIDogYXJnMiApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY1JBTkRPTTogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHI7Ci0KLQotICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJhbmRvbVxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IHVzZSB0aGUgbG93ZXIgMTYgYml0cyBvZiBgcmFuZG9tJyAgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogdG8gZ2VuZXJhdGUgYSBudW1iZXIgaW4gdGhlIHJhbmdlICgwOzFdICovCi0gICAgICAgICAgICAgICAgICAgIHIgPSAoQ0YyX0YxNkRvdDE2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAoICggZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gJiAweEZGRkYgKSArIDEgKTsKLQotICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnJhbmRvbSA9Ci0gICAgICAgICAgICAgICAgICAgICAgY2ZmX3JhbmRvbSggZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gKTsKLQotICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCByICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjTVVMOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGZhY3RvcjE7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgZmFjdG9yMjsKLQotCi0gICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbXVsXG4iICkpOwotCi0gICAgICAgICAgICAgICAgICAgIGZhY3RvcjIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLSAgICAgICAgICAgICAgICAgICAgZmFjdG9yMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotCi0gICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIEZUX011bEZpeCggZmFjdG9yMSwgZmFjdG9yMiApICk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjU1FSVDoKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7Ci0KLQotICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNxcnRcbiIgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXJnID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggYXJnID4gMCApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgcm9vdCA9IGFyZzsKLSAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgbmV3X3Jvb3Q7Ci0KLQotICAgICAgICAgICAgICAgICAgICAgIC8qIEJhYnlsb25pYW4gbWV0aG9kICovCi0gICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKLSAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdfcm9vdCA9ICggcm9vdCArIEZUX0RpdkZpeCggYXJnLCByb290ICkgKyAxICkgPj4gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmV3X3Jvb3QgPT0gcm9vdCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgcm9vdCA9IG5ld19yb290OwotICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBuZXdfcm9vdDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgYXJnID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBhcmcgKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCi0KLSAgICAgICAgICAgICAgICBjYXNlIGNmMl9lc2NEVVA6Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnOwotCi0KLSAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkdXBcbiIgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXJnID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgYXJnICk7Ci0gICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGFyZyApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0VYQ0g6Ci0gICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOwotCi0KLSAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBleGNoXG4iICkpOwotCi0gICAgICAgICAgICAgICAgICAgIGFyZzIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLSAgICAgICAgICAgICAgICAgICAgYXJnMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotCi0gICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGFyZzIgKTsKLSAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgYXJnMSApOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KLQotICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0lOREVYOgotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgaWR4OwotICAgICAgICAgICAgICAgICAgICBDRjJfVUludCAgc2l6ZTsKLQotCi0gICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaW5kZXhcbiIgKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWR4ICA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICggc2l6ZSA+IDAgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGBjZjJfc3RhY2tfZ2V0UmVhbCcsIGluZGV4IDAgaXMgYm90dG9tIG9mIHN0YWNrICovCi0gICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgIGdyX2lkeDsKLQotCi0gICAgICAgICAgICAgICAgICAgICAgaWYgKCBpZHggPCAwICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyX2lkeCA9IHNpemUgLSAxOwotICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoQ0YyX1VJbnQpaWR4ID49IHNpemUgKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JfaWR4ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBncl9pZHggPSBzaXplIC0gMSAtIChDRjJfVUludClpZHg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBncl9pZHggKSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwotCi0gICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjUk9MTDoKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgaWR4OwotICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICBjb3VudDsKLQotCi0gICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcm9sbFxuIiApKTsKLQotICAgICAgICAgICAgICAgICAgICBpZHggICA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKLSAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3JvbGwoIG9wU3RhY2ssIGNvdW50LCBpZHggKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCi0KLSAgICAgICAgICAgICAgICB9IC8qIGVuZCBvZiAybmQgc3dpdGNoIGNoZWNraW5nIG9wMiAqLwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSAvKiBlbmQgb2YgMXN0IHN3aXRjaCBjaGVja2luZyBvcDIgKi8KLSAgICAgICAgfSAvKiBjYXNlIGNmMl9jbWRFU0MgKi8KLQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBjZjJfY21kRU5EQ0hBUjoKLSAgICAgICAgRlRfVFJBQ0U0KCggIiBlbmRjaGFyXG4iICkpOwotCi0gICAgICAgIGlmICggY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgPT0gMSB8fAotICAgICAgICAgICAgIGNmMl9zdGFja19jb3VudCggb3BTdGFjayApID09IDUgKQotICAgICAgICB7Ci0gICAgICAgICAgaWYgKCAhaGF2ZVdpZHRoICkKLSAgICAgICAgICAgICp3aWR0aCA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCAwICkgKyBub21pbmFsV2lkdGhYOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogd2lkdGggaXMgZGVmaW5lZCBvciBkZWZhdWx0IGFmdGVyIHRoaXMgKi8KLSAgICAgICAgaGF2ZVdpZHRoID0gVFJVRTsKLQotICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICAvKiBjbG9zZSBwYXRoIGlmIHN0aWxsIG9wZW4gKi8KLSAgICAgICAgY2YyX2dseXBocGF0aF9jbG9zZU9wZW5QYXRoKCAmZ2x5cGhQYXRoICk7Ci0KLSAgICAgICAgLyogZGlzYWJsZSBzZWFjIGZvciBDRkYyIChjaGFyc3RyaW5nIGVuZGluZyB3aXRoIGFyZ3Mgb24gc3RhY2spICovCi0gICAgICAgIGlmICggIWZvbnQtPmlzQ0ZGMiAmJiBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA+IDEgKQotICAgICAgICB7Ci0gICAgICAgICAgLyogbXVzdCBiZSBlaXRoZXIgNCBvciA1IC0tICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIC8qIHRoaXMgaXMgYSAoZGVwcmVjYXRlZCkgaW1wbGllZCBgc2VhYycgb3BlcmF0b3IgKi8KLQotICAgICAgICAgIENGMl9JbnQgICAgICAgIGFjaGFyOwotICAgICAgICAgIENGMl9JbnQgICAgICAgIGJjaGFyOwotICAgICAgICAgIENGMl9CdWZmZXJSZWMgIGNvbXBvbmVudDsKLSAgICAgICAgICBDRjJfRml4ZWQgICAgICBkdW1teVdpZHRoOyAgIC8qIGlnbm9yZSBjb21wb25lbnQgd2lkdGggKi8KLSAgICAgICAgICBGVF9FcnJvciAgICAgICBlcnJvcjI7Ci0KLQotICAgICAgICAgIGlmICggZG9pbmdTZWFjICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAvKiBuZXN0ZWQgc2VhYyAqLwotICAgICAgICAgIH0KLQotICAgICAgICAgIGFjaGFyID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOwotICAgICAgICAgIGJjaGFyID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOwotCi0gICAgICAgICAgY3VyWSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotICAgICAgICAgIGN1clggPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKLQotICAgICAgICAgIGVycm9yMiA9IGNmMl9nZXRTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCBhY2hhciwgJmNvbXBvbmVudCApOwotICAgICAgICAgIGlmICggZXJyb3IyICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvcjI7ICAgICAgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCi0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcoIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJYLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15V2lkdGggKTsKLSAgICAgICAgICBjZjJfZnJlZVNlYWNDb21wb25lbnQoIGRlY29kZXIsICZjb21wb25lbnQgKTsKLQotICAgICAgICAgIGVycm9yMiA9IGNmMl9nZXRTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCBiY2hhciwgJmNvbXBvbmVudCApOwotICAgICAgICAgIGlmICggZXJyb3IyICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvcjI7ICAgICAgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCi0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcoIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15V2lkdGggKTsKLSAgICAgICAgICBjZjJfZnJlZVNlYWNDb21wb25lbnQoIGRlY29kZXIsICZjb21wb25lbnQgKTsKLSAgICAgICAgfQotICAgICAgICBnb3RvIGV4aXQ7Ci0KLSAgICAgIGNhc2UgY2YyX2NtZENOVFJNQVNLOgotICAgICAgY2FzZSBjZjJfY21kSElOVE1BU0s6Ci0gICAgICAgIC8qIHRoZSBmaW5hbCBcbiBpbiB0aGUgdHJhY2luZyBtZXNzYWdlIGdldHMgYWRkZWQgaW4gICAgICAqLwotICAgICAgICAvKiBgY2YyX2hpbnRtYXNrX3JlYWQnICh3aGljaCBhbHNvIHRyYWNlcyB0aGUgbWFzayBieXRlcykgKi8KLSAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRDTlRSTUFTSyA/ICIgY250cm1hc2siIDogIiBoaW50bWFzayIgKSk7Ci0KLSAgICAgICAgLyogbmV2ZXIgYWRkIGhpbnRzIGFmdGVyIHRoZSBtYXNrIGlzIGNvbXB1dGVkICovCi0gICAgICAgIGlmICggY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgPiAxICAgICYmCi0gICAgICAgICAgICAgY2YyX2hpbnRtYXNrX2lzVmFsaWQoICZoaW50TWFzayApICkKLSAgICAgICAgewotICAgICAgICAgIEZUX1RSQUNFNCgoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nOiBpbnZhbGlkIGhpbnQgbWFza1xuIiApKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGlmIHRoZXJlIGFyZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLCB0aGVyZSB0aGlzIGlzIGFuICovCi0gICAgICAgIC8qIGltcGxpZWQgY2YyX2NtZFZTVEVNSE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGNmMl9kb1N0ZW1zKCBmb250LAotICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywKLSAgICAgICAgICAgICAgICAgICAgICZ2U3RlbUhpbnRBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgJmhhdmVXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgIDAgKTsKLQotICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBpZiAoIG9wMSA9PSBjZjJfY21kSElOVE1BU0sgKQotICAgICAgICB7Ci0gICAgICAgICAgLyogY29uc3VtZSB0aGUgaGludCBtYXNrIGJ5dGVzIHdoaWNoIGZvbGxvdyB0aGUgb3BlcmF0b3IgKi8KLSAgICAgICAgICBjZjJfaGludG1hc2tfcmVhZCggJmhpbnRNYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfc2l6ZSggJmhTdGVtSGludEFycmF5ICkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19zaXplKCAmdlN0ZW1IaW50QXJyYXkgKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIC8qCi0gICAgICAgICAgICogQ29uc3VtZSB0aGUgY291bnRlciBtYXNrIGJ5dGVzIHdoaWNoIGZvbGxvdyB0aGUgb3BlcmF0b3I6Ci0gICAgICAgICAgICogQnVpbGQgYSB0ZW1wb3JhcnkgaGludCBtYXAsIGp1c3QgdG8gcGxhY2UgYW5kIGxvY2sgdGhvc2UKLSAgICAgICAgICAgKiBzdGVtcyBwYXJ0aWNpcGF0aW5nIGluIHRoZSBjb3VudGVyIG1hc2suICBUaGVzZSBhcmUgbW9zdAotICAgICAgICAgICAqIGxpa2VseSB0aGUgZG9taW5hbnQgaHN0ZW1zLCBhbmQgYXJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gYQotICAgICAgICAgICAqIGZldyBjb3VudGVyIGdyb3Vwcywgbm90IG5lY2Vzc2FyaWx5IGluIGNvcnJlc3BvbmRlbmNlCi0gICAgICAgICAgICogd2l0aCB0aGUgaGludCBncm91cHMuICBUaGlzIHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YKLSAgICAgICAgICAgKiBjb25mbGljdHMgYmV0d2VlbiBoc3RlbXMgdGhhdCBhcmUgaW5pdGlhbGx5IHBsYWNlZCBpbgotICAgICAgICAgICAqIHNlcGFyYXRlIGhpbnQgZ3JvdXBzIGFuZCB0aGVuIGJyb3VnaHQgdG9nZXRoZXIuICBUaGUKLSAgICAgICAgICAgKiBwb3NpdGlvbnMgYXJlIGNvcGllZCBiYWNrIHRvIGBoU3RlbUhpbnRBcnJheScsIHNvIHdlIGNhbgotICAgICAgICAgICAqIGRpc2NhcmQgYGNvdW50ZXJNYXNrJyBhbmQgYGNvdW50ZXJIaW50TWFwJy4KLSAgICAgICAgICAgKgotICAgICAgICAgICAqLwotICAgICAgICAgIENGMl9IaW50TWFwUmVjICAgY291bnRlckhpbnRNYXA7Ci0gICAgICAgICAgQ0YyX0hpbnRNYXNrUmVjICBjb3VudGVyTWFzazsKLQotCi0gICAgICAgICAgY2YyX2hpbnRtYXBfaW5pdCggJmNvdW50ZXJIaW50TWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aC5pbml0aWFsSGludE1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhQYXRoLmhpbnRNb3ZlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVkgKTsKLSAgICAgICAgICBjZjJfaGludG1hc2tfaW5pdCggJmNvdW50ZXJNYXNrLCBlcnJvciApOwotCi0gICAgICAgICAgY2YyX2hpbnRtYXNrX3JlYWQoICZjb3VudGVyTWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2FycnN0YWNrX3NpemUoICZoU3RlbUhpbnRBcnJheSApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfc2l6ZSggJnZTdGVtSGludEFycmF5ICkgKTsKLSAgICAgICAgICBjZjJfaGludG1hcF9idWlsZCggJmNvdW50ZXJIaW50TWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaFN0ZW1IaW50QXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2U3RlbUhpbnRBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50ZXJNYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSApOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIGNmMl9jbWRSTU9WRVRPOgotICAgICAgICBGVF9UUkFDRTQoKCAiIHJtb3ZldG9cbiIgKSk7Ci0KLSAgICAgICAgaWYgKCBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA+IDIgJiYgIWhhdmVXaWR0aCApCi0gICAgICAgICAgKndpZHRoID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIDAgKSArIG5vbWluYWxXaWR0aFg7Ci0KLSAgICAgICAgLyogd2lkdGggaXMgZGVmaW5lZCBvciBkZWZhdWx0IGFmdGVyIHRoaXMgKi8KLSAgICAgICAgaGF2ZVdpZHRoID0gVFJVRTsKLQotICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgIGdvdG8gZXhpdDsKLQotICAgICAgICBjdXJZICs9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotICAgICAgICBjdXJYICs9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwotCi0gICAgICAgIGNmMl9nbHlwaHBhdGhfbW92ZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7Ci0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgY2YyX2NtZEhNT1ZFVE86Ci0gICAgICAgIEZUX1RSQUNFNCgoICIgaG1vdmV0b1xuIiApKTsKLQotICAgICAgICBpZiAoIGNmMl9zdGFja19jb3VudCggb3BTdGFjayApID4gMSAmJiAhaGF2ZVdpZHRoICkKLSAgICAgICAgICAqd2lkdGggPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApICsgbm9taW5hbFdpZHRoWDsKLQotICAgICAgICAvKiB3aWR0aCBpcyBkZWZpbmVkIG9yIGRlZmF1bHQgYWZ0ZXIgdGhpcyAqLwotICAgICAgICBoYXZlV2lkdGggPSBUUlVFOwotCi0gICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCi0gICAgICAgICAgZ290byBleGl0OwotCi0gICAgICAgIGN1clggKz0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7Ci0KLSAgICAgICAgY2YyX2dseXBocGF0aF9tb3ZlVG8oICZnbHlwaFBhdGgsIGN1clgsIGN1clkgKTsKLQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBjZjJfY21kUkxJTkVDVVJWRToKLSAgICAgICAgewotICAgICAgICAgIENGMl9VSW50ICBjb3VudCA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOwotICAgICAgICAgIENGMl9VSW50ICBpbmRleCA9IDA7Ci0KLQotICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmxpbmVjdXJ2ZVxuIiApKTsKLQotICAgICAgICAgIHdoaWxlICggaW5kZXggKyA2IDwgY291bnQgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGN1clggKz0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMCApOwotICAgICAgICAgICAgY3VyWSArPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICk7Ci0KLSAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7Ci0gICAgICAgICAgICBpbmRleCArPSAyOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCi0gICAgICAgICAgewotICAgICAgICAgICAgQ0YyX0ZpeGVkICB4MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clg7Ci0gICAgICAgICAgICBDRjJfRml4ZWQgIHkxID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMSApICsgY3VyWTsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeDIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAyICkgKyB4MTsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeTIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAzICkgKyB5MTsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeDMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyA0ICkgKyB4MjsKLSAgICAgICAgICAgIENGMl9GaXhlZCAgeTMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyA1ICkgKyB5MjsKLQotCi0gICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oICZnbHlwaFBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMgKTsKLQotICAgICAgICAgICAgY3VyWCAgID0geDM7Ci0gICAgICAgICAgICBjdXJZICAgPSB5MzsKLSAgICAgICAgICAgIGluZGV4ICs9IDY7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KLQotICAgICAgY2FzZSBjZjJfY21kVlZDVVJWRVRPOgotICAgICAgICB7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGNvdW50LCBjb3VudDEgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKLSAgICAgICAgICBDRjJfVUludCAgaW5kZXggPSAwOwotCi0KLSAgICAgICAgICAvKiBpZiBgY2YyX3N0YWNrX2NvdW50JyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLwotICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICAgICAgICAgICovCi0gICAgICAgICAgLyogKGFuZCBzb3J0aW5nIHRoZSBzdGFjayBpbmRleGluZyB0byBzdWl0KSAgICAgICAgICAgKi8KLSAgICAgICAgICBjb3VudCAgPSBjb3VudDEgJiB+MlU7Ci0gICAgICAgICAgaW5kZXggKz0gY291bnQxIC0gY291bnQ7Ci0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHZ2Y3VydmV0b1xuIiApKTsKLQotICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCi0gICAgICAgICAgewotICAgICAgICAgICAgQ0YyX0ZpeGVkICB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzOwotCi0KLSAgICAgICAgICAgIGlmICggKCBjb3VudCAtIGluZGV4ICkgJiAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeDEgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKSArIGN1clg7Ci0KLSAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgeDEgPSBjdXJYOwotCi0gICAgICAgICAgICB5MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clk7Ci0gICAgICAgICAgICB4MiA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDEgKSArIHgxOwotICAgICAgICAgICAgeTIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAyICkgKyB5MTsKLSAgICAgICAgICAgIHgzID0geDI7Ci0gICAgICAgICAgICB5MyA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDMgKSArIHkyOwotCi0gICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oICZnbHlwaFBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMgKTsKLQotICAgICAgICAgICAgY3VyWCAgID0geDM7Ci0gICAgICAgICAgICBjdXJZICAgPSB5MzsKLSAgICAgICAgICAgIGluZGV4ICs9IDQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KLQotICAgICAgY2FzZSBjZjJfY21kSEhDVVJWRVRPOgotICAgICAgICB7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGNvdW50LCBjb3VudDEgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKLSAgICAgICAgICBDRjJfVUludCAgaW5kZXggPSAwOwotCi0KLSAgICAgICAgICAvKiBpZiBgY2YyX3N0YWNrX2NvdW50JyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLwotICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICAgICAgICAgICovCi0gICAgICAgICAgLyogKGFuZCBzb3J0aW5nIHRoZSBzdGFjayBpbmRleGluZyB0byBzdWl0KSAgICAgICAgICAgKi8KLSAgICAgICAgICBjb3VudCAgPSBjb3VudDEgJiB+MlU7Ci0gICAgICAgICAgaW5kZXggKz0gY291bnQxIC0gY291bnQ7Ci0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhoY3VydmV0b1xuIiApKTsKLQotICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCi0gICAgICAgICAgewotICAgICAgICAgICAgQ0YyX0ZpeGVkICB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzOwotCi0KLSAgICAgICAgICAgIGlmICggKCBjb3VudCAtIGluZGV4ICkgJiAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeTEgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKSArIGN1clk7Ci0KLSAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgeTEgPSBjdXJZOwotCi0gICAgICAgICAgICB4MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clg7Ci0gICAgICAgICAgICB4MiA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDEgKSArIHgxOwotICAgICAgICAgICAgeTIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAyICkgKyB5MTsKLSAgICAgICAgICAgIHgzID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMyApICsgeDI7Ci0gICAgICAgICAgICB5MyA9IHkyOwotCi0gICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oICZnbHlwaFBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMgKTsKLQotICAgICAgICAgICAgY3VyWCAgID0geDM7Ci0gICAgICAgICAgICBjdXJZICAgPSB5MzsKLSAgICAgICAgICAgIGluZGV4ICs9IDQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KLQotICAgICAgY2FzZSBjZjJfY21kVkhDVVJWRVRPOgotICAgICAgY2FzZSBjZjJfY21kSFZDVVJWRVRPOgotICAgICAgICB7Ci0gICAgICAgICAgQ0YyX1VJbnQgIGNvdW50LCBjb3VudDEgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKLSAgICAgICAgICBDRjJfVUludCAgaW5kZXggPSAwOwotCi0gICAgICAgICAgRlRfQm9vbCAgYWx0ZXJuYXRlID0gRlRfQk9PTCggb3AxID09IGNmMl9jbWRIVkNVUlZFVE8gKTsKLQotCi0gICAgICAgICAgLyogaWYgYGNmMl9zdGFja19jb3VudCcgaXNuJ3Qgb2YgdGhlIGZvcm0gOG4sIDhuKzEsICovCi0gICAgICAgICAgLyogOG4rNCwgb3IgOG4rNSwgd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgICAgICovCi0gICAgICAgICAgLyogc2Vjb25kIGJpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgLyogKGFuZCBzb3J0aW5nIHRoZSBzdGFjayBpbmRleGluZyB0byBzdWl0KSAgICAgICAgICovCi0gICAgICAgICAgY291bnQgID0gY291bnQxICYgfjJVOwotICAgICAgICAgIGluZGV4ICs9IGNvdW50MSAtIGNvdW50OwotCi0gICAgICAgICAgRlRfVFJBQ0U0KCggYWx0ZXJuYXRlID8gIiBodmN1cnZldG9cbiIgOiAiIHZoY3VydmV0b1xuIiApKTsKLQotICAgICAgICAgIHdoaWxlICggaW5kZXggPCBjb3VudCApCi0gICAgICAgICAgewotICAgICAgICAgICAgQ0YyX0ZpeGVkIHgxLCB4MiwgeDMsIHkxLCB5MiwgeTM7Ci0KLQotICAgICAgICAgICAgaWYgKCBhbHRlcm5hdGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clg7Ci0gICAgICAgICAgICAgIHkxID0gY3VyWTsKLSAgICAgICAgICAgICAgeDIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAxICkgKyB4MTsKLSAgICAgICAgICAgICAgeTIgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAyICkgKyB5MTsKLSAgICAgICAgICAgICAgeTMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyAzICkgKyB5MjsKLQotICAgICAgICAgICAgICBpZiAoIGNvdW50IC0gaW5kZXggPT0gNSApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4MyA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDQgKSArIHgyOwotCi0gICAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgeDMgPSB4MjsKLQotICAgICAgICAgICAgICBhbHRlcm5hdGUgPSBGQUxTRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeDEgPSBjdXJYOwotICAgICAgICAgICAgICB5MSA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpbmRleCArIDAgKSArIGN1clk7Ci0gICAgICAgICAgICAgIHgyID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMSApICsgeDE7Ci0gICAgICAgICAgICAgIHkyID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMiApICsgeTE7Ci0gICAgICAgICAgICAgIHgzID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGluZGV4ICsgMyApICsgeDI7Ci0KLSAgICAgICAgICAgICAgaWYgKCBjb3VudCAtIGluZGV4ID09IDUgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeTMgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaW5kZXggKyA0ICkgKyB5MjsKLQotICAgICAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHkzID0geTI7Ci0KLSAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gVFJVRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKCAmZ2x5cGhQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzICk7Ci0KLSAgICAgICAgICAgIGN1clggICA9IHgzOwotICAgICAgICAgICAgY3VyWSAgID0geTM7Ci0gICAgICAgICAgICBpbmRleCArPSA0OwotICAgICAgICAgIH0KLQotICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlOyAgICAgLyogbm8gbmVlZCB0byBjbGVhciBzdGFjayBhZ2FpbiAqLwotCi0gICAgICBjYXNlIGNmMl9jbWRFWFRFTkRFRE5NQlI6Ci0gICAgICAgIHsKLSAgICAgICAgICBDRjJfSW50ICB2OwotCi0gICAgICAgICAgQ0YyX0ludCAgYnl0ZTEgPSBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7Ci0gICAgICAgICAgQ0YyX0ludCAgYnl0ZTIgPSBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7Ci0KLQotICAgICAgICAgIHYgPSAoRlRfU2hvcnQpKCAoIGJ5dGUxIDw8IDggKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZTIgICAgICAgICk7Ci0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKLQotICAgICAgICAgIGNmMl9zdGFja19wdXNoSW50KCBvcFN0YWNrLCB2ICk7Ci0gICAgICAgIH0KLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIG51bWJlcnMgKi8KLSAgICAgICAgewotICAgICAgICAgIGlmICggLyogb3AxID49IDMyICYmICovIG9wMSA8PSAyNDYgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIENGMl9JbnQgIHY7Ci0KLQotICAgICAgICAgICAgdiA9IG9wMSAtIDEzOTsKLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIHYgKSk7Ci0KLSAgICAgICAgICAgIC8qIC0xMDcgLi4gMTA3ICovCi0gICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgdiApOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGVsc2UgaWYgKCAvKiBvcDEgPj0gMjQ3ICYmICovIG9wMSA8PSAyNTAgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIENGMl9JbnQgIHY7Ci0KLQotICAgICAgICAgICAgdiAgPSBvcDE7Ci0gICAgICAgICAgICB2IC09IDI0NzsKLSAgICAgICAgICAgIHYgKj0gMjU2OwotICAgICAgICAgICAgdiArPSBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7Ci0gICAgICAgICAgICB2ICs9IDEwODsKLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlZCIsIHYgKSk7Ci0KLSAgICAgICAgICAgIC8qIDEwOCAuLiAxMTMxICovCi0gICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgdiApOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGVsc2UgaWYgKCAvKiBvcDEgPj0gMjUxICYmICovIG9wMSA8PSAyNTQgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIENGMl9JbnQgIHY7Ci0KLQotICAgICAgICAgICAgdiAgPSBvcDE7Ci0gICAgICAgICAgICB2IC09IDI1MTsKLSAgICAgICAgICAgIHYgKj0gMjU2OwotICAgICAgICAgICAgdiArPSBjZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7Ci0gICAgICAgICAgICB2ICA9IC12IC0gMTA4OwotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKLQotICAgICAgICAgICAgLyogLTExMzEgLi4gLTEwOCAqLwotICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hJbnQoIG9wU3RhY2ssIHYgKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBlbHNlIC8qIG9wMSA9PSAyNTUgKi8KLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDRjJfRml4ZWQgIHY7Ci0KLSAgICAgICAgICAgIEZUX1VJbnQzMiAgYnl0ZTEgPSAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKLSAgICAgICAgICAgIEZUX1VJbnQzMiAgYnl0ZTIgPSAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKLSAgICAgICAgICAgIEZUX1VJbnQzMiAgYnl0ZTMgPSAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKLSAgICAgICAgICAgIEZUX1VJbnQzMiAgYnl0ZTQgPSAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKLQotCi0gICAgICAgICAgICB2ID0gKENGMl9GaXhlZCkoICggYnl0ZTEgPDwgMjQgKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICggYnl0ZTIgPDwgMTYgKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICggYnl0ZTMgPDwgIDggKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZTQgICAgICAgICApOwotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiICUuNWYiLCB2IC8gNjU1MzYuMCApKTsKLQotICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgdiApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjb250aW51ZTsgICAvKiBkb24ndCBjbGVhciBzdGFjayAqLwotCi0gICAgICB9IC8qIGVuZCBvZiBzd2l0Y2ggc3RhdGVtZW50IGNoZWNraW5nIGBvcDEnICovCi0KLSAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOwotCi0gICAgfSAvKiBlbmQgb2YgbWFpbiBpbnRlcnByZXRlciBsb29wICovCi0KLSAgICAvKiB3ZSBnZXQgaGVyZSBpZiB0aGUgY2hhcnN0cmluZyBlbmRzIHdpdGhvdXQgY2YyX2NtZEVORENIQVIgKi8KLSAgICBGVF9UUkFDRTQoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZzoiCi0gICAgICAgICAgICAgICAgIiAgY2hhcnN0cmluZyBlbmRzIHdpdGhvdXQgRU5EQ0hBUlxuIiApKTsKLQotICBleGl0OgotICAgIC8qIGNoZWNrIHdoZXRoZXIgbGFzdCBlcnJvciBzZWVuIGlzIGFsc28gdGhlIGZpcnN0IG9uZSAqLwotICAgIGNmMl9zZXRFcnJvciggZXJyb3IsIGxhc3RFcnJvciApOwotCi0gICAgaWYgKCAqZXJyb3IgKQotICAgICAgRlRfVFJBQ0U0KCggImNoYXJzdHJpbmcgZXJyb3IgJWRcbiIsICplcnJvciApKTsKLQotICAgIC8qIGZyZWUgcmVzb3VyY2VzIGZyb20gb2JqZWN0cyB3ZSd2ZSB1c2VkICovCi0gICAgY2YyX2dseXBocGF0aF9maW5hbGl6ZSggJmdseXBoUGF0aCApOwotICAgIGNmMl9hcnJzdGFja19maW5hbGl6ZSggJnZTdGVtSGludEFycmF5ICk7Ci0gICAgY2YyX2FycnN0YWNrX2ZpbmFsaXplKCAmaFN0ZW1IaW50QXJyYXkgKTsKLSAgICBjZjJfYXJyc3RhY2tfZmluYWxpemUoICZzdWJyU3RhY2sgKTsKLSAgICBjZjJfc3RhY2tfZnJlZSggb3BTdGFjayApOwotCi0gICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKLQotICAgIHJldHVybjsKLSAgfQotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmYuYyBiL3NyYy9jZmYvY2ZmLmMKaW5kZXggNTQ1ZmIyMC4uMWE3NTVkNSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmYuYworKysgYi9zcmMvY2ZmL2NmZi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIE9wZW5UeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywyNSArMTcsMTQgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKLSNpbmNsdWRlICJjZmZwaWMuYyIKKyNpbmNsdWRlICJjZmZjbWFwLmMiCiAjaW5jbHVkZSAiY2ZmZHJpdnIuYyIKKyNpbmNsdWRlICJjZmZnbG9hZC5jIgogI2luY2x1ZGUgImNmZnBhcnNlLmMiCisjaW5jbHVkZSAiY2ZmcGljLmMiCiAjaW5jbHVkZSAiY2ZmbG9hZC5jIgogI2luY2x1ZGUgImNmZm9ianMuYyIKLSNpbmNsdWRlICJjZmZnbG9hZC5jIgotI2luY2x1ZGUgImNmZmNtYXAuYyIKLQotI2luY2x1ZGUgImNmMmFycnN0LmMiCi0jaW5jbHVkZSAiY2YyYmx1ZXMuYyIKLSNpbmNsdWRlICJjZjJlcnJvci5jIgotI2luY2x1ZGUgImNmMmZvbnQuYyIKLSNpbmNsdWRlICJjZjJmdC5jIgotI2luY2x1ZGUgImNmMmhpbnRzLmMiCi0jaW5jbHVkZSAiY2YyaW50cnAuYyIKLSNpbmNsdWRlICJjZjJyZWFkLmMiCi0jaW5jbHVkZSAiY2Yyc3RhY2suYyIKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmNtYXAuYyBiL3NyYy9jZmYvY2ZmY21hcC5jCmluZGV4IDRhZGNlN2EuLmU0NWFlMTEgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmY21hcC5jCisrKyBiL3NyYy9jZmYvY2ZmY21hcC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmNtYXAuaCBiL3NyYy9jZmYvY2ZmY21hcC5oCmluZGV4IDc3OTJlMDQuLjg1NmE0M2QgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmY21hcC5oCisrKyBiL3NyYy9jZmYvY2ZmY21hcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOSw3ICsxOSw3IEBACiAjaWZuZGVmIENGRkNNQVBfSF8KICNkZWZpbmUgQ0ZGQ01BUF9IXwogCi0jaW5jbHVkZSAiY2Zmb2Jqcy5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX09CSkVDVFNfVFlQRVNfSAogCiBGVF9CRUdJTl9IRUFERVIKIApkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZkcml2ci5jIGIvc3JjL2NmZi9jZmZkcml2ci5jCmluZGV4IDM4YmZjMmMuLmRmODk2ODQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZHJpdnIuYworKysgYi9zcmMvY2ZmL2NmZmRyaXZyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgZm9udCBkcml2ZXIgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIxLDE2ICsyMSwyMCBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX0NJRF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfTkFNRV9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1RUX0NNQVBfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9DRkZfVEFCTEVfTE9BRF9ICiAKICNpbmNsdWRlICJjZmZkcml2ci5oIgogI2luY2x1ZGUgImNmZmdsb2FkLmgiCiAjaW5jbHVkZSAiY2ZmbG9hZC5oIgogI2luY2x1ZGUgImNmZmNtYXAuaCIKICNpbmNsdWRlICJjZmZwYXJzZS5oIgorI2luY2x1ZGUgImNmZm9ianMuaCIKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKICNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICkBAIC00Myw3ICs0Nyw3IEBACiAjaW5jbHVkZSBGVF9TRVJWSUNFX0ZPTlRfRk9STUFUX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfR0xZUEhfRElDVF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAotI2luY2x1ZGUgRlRfQ0ZGX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMTQsOCArMjE4LDggQEAKICAgICAgIHsKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAgICAgICAgIC8qIG5vIGZhc3QgcmV0cmlldmFsIGZvciBibGVuZGVkIE1NIGZvbnRzIHdpdGhvdXQgVlZBUiB0YWJsZSAqLwotICAgICAgICBpZiAoICF0dGZhY2UtPmlzX2RlZmF1bHRfaW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAhKCB0dGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICYgVFRfRkFDRV9GTEFHX1ZBUl9WQURWQU5DRSApICkKKyAgICAgICAgaWYgKCAoIEZUX0lTX05BTUVEX0lOU1RBTkNFKCBmYWNlICkgfHwgRlRfSVNfVkFSSUFUSU9OKCBmYWNlICkgKSAmJgorICAgICAgICAgICAgICEoIHR0ZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgJiBUVF9GQUNFX0ZMQUdfVkFSX1ZBRFZBTkNFICkgICkKICAgICAgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwogI2VuZGlmCiAKQEAgLTIzNyw4ICsyNDEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFoICk7CiAKLSAgICAgICAgICBGVF9UUkFDRTUoKCAiICBpZHggJWQ6IGFkdmFuY2UgaGVpZ2h0ICVkIGZvbnQgdW5pdHNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyBubiwgYWggKSk7CisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgaWR4ICVkOiBhZHZhbmNlIGhlaWdodCAlZCBmb250IHVuaXQlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdGFydCArIG5uLAorICAgICAgICAgICAgICAgICAgICAgIGFoLAorICAgICAgICAgICAgICAgICAgICAgIGFoID09IDEgPyAiIiA6ICJzIiApKTsKICAgICAgICAgICBhZHZhbmNlc1tubl0gPSBhaDsKICAgICAgICAgfQogICAgICAgfQpAQCAtMjQ2LDggKzI1Miw4IEBACiAgICAgICB7CiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogICAgICAgICAvKiBubyBmYXN0IHJldHJpZXZhbCBmb3IgYmxlbmRlZCBNTSBmb250cyB3aXRob3V0IEhWQVIgdGFibGUgKi8KLSAgICAgICAgaWYgKCAhdHRmYWNlLT5pc19kZWZhdWx0X2luc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgISggdHRmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmIFRUX0ZBQ0VfRkxBR19WQVJfSEFEVkFOQ0UgKSApCisgICAgICAgIGlmICggKCBGVF9JU19OQU1FRF9JTlNUQU5DRSggZmFjZSApIHx8IEZUX0lTX1ZBUklBVElPTiggZmFjZSApICkgJiYKKyAgICAgICAgICAgICAhKCB0dGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICYgVFRfRkFDRV9GTEFHX1ZBUl9IQURWQU5DRSApICApCiAgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKICNlbmRpZgogCkBAIC0yNjYsOCArMjcyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdyApOwogCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgaWR4ICVkOiBhZHZhbmNlIHdpZHRoICVkIGZvbnQgdW5pdHNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKyBubiwgYXcgKSk7CisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgaWR4ICVkOiBhZHZhbmNlIHdpZHRoICVkIGZvbnQgdW5pdCVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ICsgbm4sCisgICAgICAgICAgICAgICAgICAgICAgYXcsCisgICAgICAgICAgICAgICAgICAgICAgYXcgPT0gMSA/ICIiIDogInMiICkpOwogICAgICAgICAgIGFkdmFuY2VzW25uXSA9IGF3OwogICAgICAgICB9CiAgICAgICB9CkBAIC00OTMsMTEgKzUwMSw4OSBAQAogICB9CiAKIAorICBzdGF0aWMgRlRfRXJyb3IKKyAgY2ZmX3BzX2dldF9mb250X2V4dHJhKCBDRkZfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFBTX0ZvbnRFeHRyYVJlYyogIGFmb250X2V4dHJhICkKKyAgeworICAgIENGRl9Gb250ICBjZmYgICA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaWYgKCBjZmYgJiYgY2ZmLT5mb250X2V4dHJhID09IE5VTEwgKQorICAgIHsKKyAgICAgIENGRl9Gb250UmVjRGljdCAgIGRpY3QgICAgICAgPSAmY2ZmLT50b3BfZm9udC5mb250X2RpY3Q7CisgICAgICBQU19Gb250RXh0cmFSZWMqICBmb250X2V4dHJhID0gTlVMTDsKKyAgICAgIEZUX01lbW9yeSAgICAgICAgIG1lbW9yeSAgICAgPSBmYWNlLT5yb290Lm1lbW9yeTsKKyAgICAgIEZUX1N0cmluZyogICAgICAgIGVtYmVkZGVkX3Bvc3RzY3JpcHQ7CisKKworICAgICAgaWYgKCBGVF9BTExPQyggZm9udF9leHRyYSwgc2l6ZW9mICggKmZvbnRfZXh0cmEgKSApICkKKyAgICAgICAgZ290byBGYWlsOworCisgICAgICBmb250X2V4dHJhLT5mc190eXBlID0gMFU7CisKKyAgICAgIGVtYmVkZGVkX3Bvc3RzY3JpcHQgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LT5lbWJlZGRlZF9wb3N0c2NyaXB0ICk7CisgICAgICBpZiAoIGVtYmVkZGVkX3Bvc3RzY3JpcHQgKQorICAgICAgeworICAgICAgICBGVF9TdHJpbmcqICBzdGFydF9mc3R5cGU7CisgICAgICAgIEZUX1N0cmluZyogIHN0YXJ0X2RlZjsKKworCisgICAgICAgIC8qIElkZW50aWZ5IHRoZSBYWVogaW50ZWdlciBpbiBgL0ZTVHlwZSBYWVogZGVmJyBzdWJzdHJpbmcuICovCisgICAgICAgIGlmICggKCBzdGFydF9mc3R5cGUgPSBmdF9zdHJzdHIoIGVtYmVkZGVkX3Bvc3RzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvRlNUeXBlIiApICkgIT0gTlVMTCAgICAmJgorICAgICAgICAgICAgICggc3RhcnRfZGVmID0gZnRfc3Ryc3RyKCBzdGFydF9mc3R5cGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoICIvRlNUeXBlIiApIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZiIgKSApICE9IE5VTEwgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1N0cmluZyogIHM7CisKKworICAgICAgICAgIGZvciAoIHMgPSBzdGFydF9mc3R5cGUgKyBzaXplb2YgKCAiL0ZTVHlwZSIgKSAtIDE7CisgICAgICAgICAgICAgICAgcyAhPSBzdGFydF9kZWY7CisgICAgICAgICAgICAgICAgcysrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoICpzID49ICcwJyAmJiAqcyA8PSAnOScgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIGZvbnRfZXh0cmEtPmZzX3R5cGUgPj0gKCBGVF9VU0hPUlRfTUFYIC0gOSApIC8gMTAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogT3ZlcmZsb3cgLSBpZ25vcmUgdGhlIEZTVHlwZSB2YWx1ZS4gICovCisgICAgICAgICAgICAgICAgZm9udF9leHRyYS0+ZnNfdHlwZSA9IDBVOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgZm9udF9leHRyYS0+ZnNfdHlwZSAqPSAxMDsKKyAgICAgICAgICAgICAgZm9udF9leHRyYS0+ZnNfdHlwZSArPSAoRlRfVVNob3J0KSggKnMgLSAnMCcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCAqcyAhPSAnICcgJiYgKnMgIT0gJ1xuJyAmJiAqcyAhPSAnXHInICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogTm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGJldHdlZW4gYC9GU1R5cGUnIGFuZCBuZXh0IGBkZWYnICovCisgICAgICAgICAgICAgIC8qIC0gaWdub3JlIHRoZSBGU1R5cGUgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICBmb250X2V4dHJhLT5mc190eXBlID0gMFU7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjZmYtPmZvbnRfZXh0cmEgPSBmb250X2V4dHJhOworICAgIH0KKworICAgIGlmICggY2ZmICkKKyAgICAgICphZm9udF9leHRyYSA9ICpjZmYtPmZvbnRfZXh0cmE7CisKKyAgRmFpbDoKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCiAgIEZUX0RFRklORV9TRVJWSUNFX1BTSU5GT1JFQygKICAgICBjZmZfc2VydmljZV9wc19pbmZvLAogCiAgICAgKFBTX0dldEZvbnRJbmZvRnVuYykgICBjZmZfcHNfZ2V0X2ZvbnRfaW5mbywgICAgLyogcHNfZ2V0X2ZvbnRfaW5mbyAgICAqLwotICAgIChQU19HZXRGb250RXh0cmFGdW5jKSAgTlVMTCwgICAgICAgICAgICAgICAgICAgIC8qIHBzX2dldF9mb250X2V4dHJhICAgKi8KKyAgICAoUFNfR2V0Rm9udEV4dHJhRnVuYykgIGNmZl9wc19nZXRfZm9udF9leHRyYSwgICAvKiBwc19nZXRfZm9udF9leHRyYSAgICovCiAgICAgKFBTX0hhc0dseXBoTmFtZXNGdW5jKSBjZmZfcHNfaGFzX2dseXBoX25hbWVzLCAgLyogcHNfaGFzX2dseXBoX25hbWVzICAqLwogICAgIC8qIHVuc3VwcG9ydGVkIHdpdGggQ0ZGIGZvbnRzICovCiAgICAgKFBTX0dldEZvbnRQcml2YXRlRnVuYylOVUxMLCAgICAgICAgICAgICAgICAgICAgLyogcHNfZ2V0X2ZvbnRfcHJpdmF0ZSAqLwpAQCAtNzM1LDIzMSArODIxLDEyIEBACiAgICAqICBQUk9QRVJUWSBTRVJWSUNFCiAgICAqCiAgICAqLwotICBzdGF0aWMgRlRfRXJyb3IKLSAgY2ZmX3Byb3BlcnR5X3NldCggRlRfTW9kdWxlICAgIG1vZHVsZSwgICAgICAgICAvKiBDRkZfRHJpdmVyICovCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICB2YWx1ZV9pc19zdHJpbmcgKQotICB7Ci0gICAgRlRfRXJyb3IgICAgZXJyb3IgID0gRlRfRXJyX09rOwotICAgIENGRl9Ecml2ZXIgIGRyaXZlciA9IChDRkZfRHJpdmVyKW1vZHVsZTsKLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKLSAgICBGVF9VTlVTRUQoIHZhbHVlX2lzX3N0cmluZyApOwotI2VuZGlmCi0KLQotICAgIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImRhcmtlbmluZy1wYXJhbWV0ZXJzIiApICkKLSAgICB7Ci0gICAgICBGVF9JbnQqICBkYXJrZW5fcGFyYW1zOwotICAgICAgRlRfSW50ICAgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0OwotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCi0gICAgICBGVF9JbnQgICBkcFs4XTsKLQotCi0gICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCi0gICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKXZhbHVlOwotICAgICAgICBjaGFyKiAgICAgICAgZXA7Ci0gICAgICAgIGludCAgICAgICAgICBpOwotCi0KLSAgICAgICAgLyogZWlnaHQgY29tbWEtc2VwYXJhdGVkIG51bWJlcnMgKi8KLSAgICAgICAgZm9yICggaSA9IDA7IGkgPCA3OyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgZHBbaV0gPSAoRlRfSW50KWZ0X3N0cnRvbCggcywgJmVwLCAxMCApOwotICAgICAgICAgIGlmICggKmVwICE9ICcsJyB8fCBzID09IGVwICkKLSAgICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCi0gICAgICAgICAgcyA9IGVwICsgMTsKLSAgICAgICAgfQotCi0gICAgICAgIGRwWzddID0gKEZUX0ludClmdF9zdHJ0b2woIHMsICZlcCwgMTAgKTsKLSAgICAgICAgaWYgKCAhKCAqZXAgPT0gJ1wwJyB8fCAqZXAgPT0gJyAnICkgfHwgcyA9PSBlcCApCi0gICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICAgICAgZGFya2VuX3BhcmFtcyA9IGRwOwotICAgICAgfQotICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGRhcmtlbl9wYXJhbXMgPSAoRlRfSW50Kil2YWx1ZTsKLQotICAgICAgeDEgPSBkYXJrZW5fcGFyYW1zWzBdOwotICAgICAgeTEgPSBkYXJrZW5fcGFyYW1zWzFdOwotICAgICAgeDIgPSBkYXJrZW5fcGFyYW1zWzJdOwotICAgICAgeTIgPSBkYXJrZW5fcGFyYW1zWzNdOwotICAgICAgeDMgPSBkYXJrZW5fcGFyYW1zWzRdOwotICAgICAgeTMgPSBkYXJrZW5fcGFyYW1zWzVdOwotICAgICAgeDQgPSBkYXJrZW5fcGFyYW1zWzZdOwotICAgICAgeTQgPSBkYXJrZW5fcGFyYW1zWzddOwotCi0gICAgICBpZiAoIHgxIDwgMCAgIHx8IHgyIDwgMCAgIHx8IHgzIDwgMCAgIHx8IHg0IDwgMCAgIHx8Ci0gICAgICAgICAgIHkxIDwgMCAgIHx8IHkyIDwgMCAgIHx8IHkzIDwgMCAgIHx8IHk0IDwgMCAgIHx8Ci0gICAgICAgICAgIHgxID4geDIgIHx8IHgyID4geDMgIHx8IHgzID4geDQgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgIHkxID4gNTAwIHx8IHkyID4gNTAwIHx8IHkzID4gNTAwIHx8IHk0ID4gNTAwICkKLSAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1swXSA9IHgxOwotICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzFdID0geTE7Ci0gICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMl0gPSB4MjsKLSAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1szXSA9IHkyOwotICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzRdID0geDM7Ci0gICAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNV0gPSB5MzsKLSAgICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s2XSA9IHg0OwotICAgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzddID0geTQ7Ci0KLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJoaW50aW5nLWVuZ2luZSIgKSApCi0gICAgewotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUwotICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQotICAgICAgewotICAgICAgICBjb25zdCBjaGFyKiAgcyA9IChjb25zdCBjaGFyKil2YWx1ZTsKLQotCi0gICAgICAgIGlmICggIWZ0X3N0cmNtcCggcywgImFkb2JlIiApICkKLSAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfQURPQkU7Ci0jaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQotICAgICAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcywgImZyZWV0eXBlIiApICkKLSAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfRlJFRVRZUEU7Ci0jZW5kaWYKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotICAgICAgfQotICAgICAgZWxzZQotI2VuZGlmCi0gICAgICB7Ci0gICAgICAgIEZUX1VJbnQqICBoaW50aW5nX2VuZ2luZSA9IChGVF9VSW50Kil2YWx1ZTsKLQotCi0gICAgICAgIGlmICggKmhpbnRpbmdfZW5naW5lID09IEZUX0NGRl9ISU5USU5HX0FET0JFCi0jaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQotICAgICAgICAgICAgIHx8ICpoaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19GUkVFVFlQRQotI2VuZGlmCi0gICAgICAgICAgICkKLSAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gKmhpbnRpbmdfZW5naW5lOwotICAgICAgICBlbHNlCi0gICAgICAgICAgZXJyb3IgPSBGVF9FUlIoIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwotCi0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJuby1zdGVtLWRhcmtlbmluZyIgKSApCi0gICAgewotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUwotICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQotICAgICAgewotICAgICAgICBjb25zdCBjaGFyKiAgcyAgID0gKGNvbnN0IGNoYXIqKXZhbHVlOwotICAgICAgICBsb25nICAgICAgICAgbnNkID0gZnRfc3RydG9sKCBzLCBOVUxMLCAxMCApOwotCi0KLSAgICAgICAgaWYgKCAhbnNkICkKLSAgICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gRkFMU0U7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gVFJVRTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgewotICAgICAgICBGVF9Cb29sKiAgbm9fc3RlbV9kYXJrZW5pbmcgPSAoRlRfQm9vbCopdmFsdWU7Ci0KLQotICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gKm5vX3N0ZW1fZGFya2VuaW5nOwotICAgICAgfQotCi0gICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAicmFuZG9tLXNlZWQiICkgKQotICAgIHsKLSAgICAgIEZUX0ludDMyICByYW5kb21fc2VlZDsKLQotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCi0gICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCi0gICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKXZhbHVlOwotCi0KLSAgICAgICAgcmFuZG9tX3NlZWQgPSAoRlRfSW50MzIpZnRfc3RydG9sKCBzLCBOVUxMLCAxMCApOwotICAgICAgfQotICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgIHJhbmRvbV9zZWVkID0gKihGVF9JbnQzMiopdmFsdWU7Ci0KLSAgICAgIGlmICggcmFuZG9tX3NlZWQgPCAwICkKLSAgICAgICAgcmFuZG9tX3NlZWQgPSAwOwotCi0gICAgICBkcml2ZXItPnJhbmRvbV9zZWVkID0gcmFuZG9tX3NlZWQ7Ci0KLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSAgICBGVF9UUkFDRTAoKCAiY2ZmX3Byb3BlcnR5X3NldDogbWlzc2luZyBwcm9wZXJ0eSBgJXMnXG4iLAotICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUgKSk7Ci0gICAgcmV0dXJuIEZUX1RIUk9XKCBNaXNzaW5nX1Byb3BlcnR5ICk7Ci0gIH0KLQotCi0gIHN0YXRpYyBGVF9FcnJvcgotICBjZmZfcHJvcGVydHlfZ2V0KCBGVF9Nb2R1bGUgICAgbW9kdWxlLCAgICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSApCi0gIHsKLSAgICBGVF9FcnJvciAgICBlcnJvciAgPSBGVF9FcnJfT2s7Ci0gICAgQ0ZGX0RyaXZlciAgZHJpdmVyID0gKENGRl9Ecml2ZXIpbW9kdWxlOwotCi0KLSAgICBpZiAoICFmdF9zdHJjbXAoIHByb3BlcnR5X25hbWUsICJkYXJrZW5pbmctcGFyYW1ldGVycyIgKSApCi0gICAgewotICAgICAgRlRfSW50KiAgZGFya2VuX3BhcmFtcyA9IGRyaXZlci0+ZGFya2VuX3BhcmFtczsKLSAgICAgIEZUX0ludCogIHZhbCAgICAgICAgICAgPSAoRlRfSW50Kil2YWx1ZTsKLQotCi0gICAgICB2YWxbMF0gPSBkYXJrZW5fcGFyYW1zWzBdOwotICAgICAgdmFsWzFdID0gZGFya2VuX3BhcmFtc1sxXTsKLSAgICAgIHZhbFsyXSA9IGRhcmtlbl9wYXJhbXNbMl07Ci0gICAgICB2YWxbM10gPSBkYXJrZW5fcGFyYW1zWzNdOwotICAgICAgdmFsWzRdID0gZGFya2VuX3BhcmFtc1s0XTsKLSAgICAgIHZhbFs1XSA9IGRhcmtlbl9wYXJhbXNbNV07Ci0gICAgICB2YWxbNl0gPSBkYXJrZW5fcGFyYW1zWzZdOwotICAgICAgdmFsWzddID0gZGFya2VuX3BhcmFtc1s3XTsKLQotICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLSAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImhpbnRpbmctZW5naW5lIiApICkKLSAgICB7Ci0gICAgICBGVF9VSW50ICAgaGludGluZ19lbmdpbmUgICAgPSBkcml2ZXItPmhpbnRpbmdfZW5naW5lOwotICAgICAgRlRfVUludCogIHZhbCAgICAgICAgICAgICAgID0gKEZUX1VJbnQqKXZhbHVlOwotCi0KLSAgICAgICp2YWwgPSBoaW50aW5nX2VuZ2luZTsKLQotICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLSAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgIm5vLXN0ZW0tZGFya2VuaW5nIiApICkKLSAgICB7Ci0gICAgICBGVF9Cb29sICAgbm9fc3RlbV9kYXJrZW5pbmcgPSBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nOwotICAgICAgRlRfQm9vbCogIHZhbCAgICAgICAgICAgICAgID0gKEZUX0Jvb2wqKXZhbHVlOwotCi0KLSAgICAgICp2YWwgPSBub19zdGVtX2RhcmtlbmluZzsKLQotICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIEZUX1RSQUNFMCgoICJjZmZfcHJvcGVydHlfZ2V0OiBtaXNzaW5nIHByb3BlcnR5IGAlcydcbiIsCi0gICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSApKTsKLSAgICByZXR1cm4gRlRfVEhST1coIE1pc3NpbmdfUHJvcGVydHkgKTsKLSAgfQotCiAKICAgRlRfREVGSU5FX1NFUlZJQ0VfUFJPUEVSVElFU1JFQygKICAgICBjZmZfc2VydmljZV9wcm9wZXJ0aWVzLAogCi0gICAgKEZUX1Byb3BlcnRpZXNfU2V0RnVuYyljZmZfcHJvcGVydHlfc2V0LCAgICAgIC8qIHNldF9wcm9wZXJ0eSAqLwotICAgIChGVF9Qcm9wZXJ0aWVzX0dldEZ1bmMpY2ZmX3Byb3BlcnR5X2dldCApICAgICAvKiBnZXRfcHJvcGVydHkgKi8KKyAgICAoRlRfUHJvcGVydGllc19TZXRGdW5jKXBzX3Byb3BlcnR5X3NldCwgICAgICAvKiBzZXRfcHJvcGVydHkgKi8KKyAgICAoRlRfUHJvcGVydGllc19HZXRGdW5jKXBzX3Byb3BlcnR5X2dldCApICAgICAvKiBnZXRfcHJvcGVydHkgKi8KIAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVApAQCAtMTAyOCw2ICs4OTUsMTcgQEAKICAgfQogCiAKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9zZXRfaW5zdGFuY2UoIENGRl9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgaW5zdGFuY2VfaW5kZXggKQorICB7CisgICAgRlRfU2VydmljZV9NdWx0aU1hc3RlcnMgIG1tID0gKEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzKWZhY2UtPm1tOworCisKKyAgICByZXR1cm4gbW0tPnNldF9pbnN0YW5jZSggRlRfRkFDRSggZmFjZSApLCBpbnN0YW5jZV9pbmRleCApOworICB9CisKKwogICBGVF9ERUZJTkVfU0VSVklDRV9NVUxUSU1BU1RFUlNSRUMoCiAgICAgY2ZmX3NlcnZpY2VfbXVsdGlfbWFzdGVycywKIApAQCAtMTAzOCw2ICs5MTYsNyBAQAogICAgIChGVF9HZXRfTU1fVmFyX0Z1bmMpICAgIGNmZl9nZXRfbW1fdmFyLCAgICAgICAgIC8qIGdldF9tbV92YXIgICAgICovCiAgICAgKEZUX1NldF9WYXJfRGVzaWduX0Z1bmMpY2ZmX3NldF92YXJfZGVzaWduLCAgICAgLyogc2V0X3Zhcl9kZXNpZ24gKi8KICAgICAoRlRfR2V0X1Zhcl9EZXNpZ25fRnVuYyljZmZfZ2V0X3Zhcl9kZXNpZ24sICAgICAvKiBnZXRfdmFyX2Rlc2lnbiAqLworICAgIChGVF9TZXRfSW5zdGFuY2VfRnVuYykgIGNmZl9zZXRfaW5zdGFuY2UsICAgICAgIC8qIHNldF9pbnN0YW5jZSAgICovCiAKICAgICAoRlRfR2V0X1Zhcl9CbGVuZF9GdW5jKSBjZmZfZ2V0X3Zhcl9ibGVuZCwgICAgICAvKiBnZXRfdmFyX2JsZW5kICAqLwogICAgIChGVF9Eb25lX0JsZW5kX0Z1bmMpICAgIGNmZl9kb25lX2JsZW5kICAgICAgICAgIC8qIGRvbmVfYmxlbmQgICAgICovCkBAIC0xMDg4LDYgKzk2NywyMiBAQAogI2VuZGlmCiAKIAorICAvKgorICAgKiAgQ0ZGTE9BRCBTRVJWSUNFCisgICAqCisgICAqLworCisgIEZUX0RFRklORV9TRVJWSUNFX0NGRkxPQURSRUMoCisgICAgY2ZmX3NlcnZpY2VfY2ZmX2xvYWQsCisKKyAgICAoRlRfR2V0X1N0YW5kYXJkX0VuY29kaW5nX0Z1bmMpY2ZmX2dldF9zdGFuZGFyZF9lbmNvZGluZywKKyAgICAoRlRfTG9hZF9Qcml2YXRlX0RpY3RfRnVuYykgICAgY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0LAorICAgIChGVF9GRF9TZWxlY3RfR2V0X0Z1bmMpICAgICAgICBjZmZfZmRfc2VsZWN0X2dldCwKKyAgICAoRlRfQmxlbmRfQ2hlY2tfVmVjdG9yX0Z1bmMpICAgY2ZmX2JsZW5kX2NoZWNrX3ZlY3RvciwKKyAgICAoRlRfQmxlbmRfQnVpbGRfVmVjdG9yX0Z1bmMpICAgY2ZmX2JsZW5kX2J1aWxkX3ZlY3RvcgorICApCisKKwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTEwMiw2ICs5OTcsMzQgQEAKIAogI2lmICFkZWZpbmVkIEZUX0NPTkZJR19PUFRJT05fTk9fR0xZUEhfTkFNRVMgJiYgXAogICAgICBkZWZpbmVkIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDMTAoCisgICAgY2ZmX3NlcnZpY2VzLAorCisgICAgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfQ0ZGLAorICAgIEZUX1NFUlZJQ0VfSURfTVVMVElfTUFTVEVSUywgICAgICAgICZDRkZfU0VSVklDRV9NVUxUSV9NQVNURVJTX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX01FVFJJQ1NfVkFSSUFUSU9OUywgICAmQ0ZGX1NFUlZJQ0VfTUVUUklDU19WQVJfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZDRkZfU0VSVklDRV9QU19JTkZPX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmQ0ZGX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCisgICAgRlRfU0VSVklDRV9JRF9HTFlQSF9ESUNULCAgICAgICAgICAgJkNGRl9TRVJWSUNFX0dMWVBIX0RJQ1RfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfVFRfQ01BUCwgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9HRVRfQ01BUF9JTkZPX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX0NJRCwgICAgICAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfQ0lEX0lORk9fR0VULAorICAgIEZUX1NFUlZJQ0VfSURfUFJPUEVSVElFUywgICAgICAgICAgICZDRkZfU0VSVklDRV9QUk9QRVJUSUVTX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX0NGRl9MT0FELCAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfQ0ZGX0xPQURfR0VUCisgICkKKyNlbGlmICFkZWZpbmVkIEZUX0NPTkZJR19PUFRJT05fTk9fR0xZUEhfTkFNRVMKKyAgRlRfREVGSU5FX1NFUlZJQ0VERVNDUkVDOCgKKyAgICBjZmZfc2VydmljZXMsCisKKyAgICBGVF9TRVJWSUNFX0lEX0ZPTlRfRk9STUFULCAgICAgICAgICBGVF9GT05UX0ZPUk1BVF9DRkYsCisgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0lORk8sICAgICAgJkNGRl9TRVJWSUNFX1BTX0lORk9fR0VULAorICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9GT05UX05BTUUsICZDRkZfU0VSVklDRV9QU19OQU1FX0dFVCwKKyAgICBGVF9TRVJWSUNFX0lEX0dMWVBIX0RJQ1QsICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfR0xZUEhfRElDVF9HRVQsCisgICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0dFVF9DTUFQX0lORk9fR0VULAorICAgIEZUX1NFUlZJQ0VfSURfQ0lELCAgICAgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DSURfSU5GT19HRVQsCisgICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJkNGRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfQ0ZGX0xPQUQsICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DRkZfTE9BRF9HRVQKKyAgKQorI2VsaWYgZGVmaW5lZCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAgIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzkoCiAgICAgY2ZmX3NlcnZpY2VzLAogCkBAIC0xMTEwLDQ2ICsxMDMzLDIyIEBACiAgICAgRlRfU0VSVklDRV9JRF9NRVRSSUNTX1ZBUklBVElPTlMsICAgJkNGRl9TRVJWSUNFX01FVFJJQ1NfVkFSX0dFVCwKICAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQsCiAgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJkNGRl9TRVJWSUNFX1BTX05BTUVfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZDRkZfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKICAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfR0VUX0NNQVBfSU5GT19HRVQsCiAgICAgRlRfU0VSVklDRV9JRF9DSUQsICAgICAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NJRF9JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQKKyAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQsCisgICAgRlRfU0VSVklDRV9JRF9DRkZfTE9BRCwgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NGRl9MT0FEX0dFVAogICApCi0jZWxpZiAhZGVmaW5lZCBGVF9DT05GSUdfT1BUSU9OX05PX0dMWVBIX05BTUVTCisjZWxzZQogICBGVF9ERUZJTkVfU0VSVklDRURFU0NSRUM3KAogICAgIGNmZl9zZXJ2aWNlcywKIAogICAgIEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX0NGRiwKICAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfSU5GTywgICAgICAmQ0ZGX1NFUlZJQ0VfUFNfSU5GT19HRVQsCiAgICAgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0ZPTlRfTkFNRSwgJkNGRl9TRVJWSUNFX1BTX05BTUVfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZDRkZfU0VSVklDRV9HTFlQSF9ESUNUX0dFVCwKICAgICBGVF9TRVJWSUNFX0lEX1RUX0NNQVAsICAgICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfR0VUX0NNQVBfSU5GT19HRVQsCiAgICAgRlRfU0VSVklDRV9JRF9DSUQsICAgICAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0NJRF9JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BST1BFUlRJRVMsICAgICAgICAgICAmQ0ZGX1NFUlZJQ0VfUFJPUEVSVElFU19HRVQKLSAgKQotI2VsaWYgZGVmaW5lZCBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCi0gIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzgoCi0gICAgY2ZmX3NlcnZpY2VzLAotCi0gICAgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfQ0ZGLAotICAgIEZUX1NFUlZJQ0VfSURfTVVMVElfTUFTVEVSUywgICAgICAgICZDRkZfU0VSVklDRV9NVUxUSV9NQVNURVJTX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX01FVFJJQ1NfVkFSSUFUSU9OUywgICAmQ0ZGX1NFUlZJQ0VfTUVUUklDU19WQVJfR0VULAotICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZDRkZfU0VSVklDRV9QU19JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmQ0ZGX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0dFVF9DTUFQX0lORk9fR0VULAotICAgIEZUX1NFUlZJQ0VfSURfQ0lELCAgICAgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DSURfSU5GT19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJkNGRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VUCi0gICkKLSNlbHNlCi0gIEZUX0RFRklORV9TRVJWSUNFREVTQ1JFQzYoCi0gICAgY2ZmX3NlcnZpY2VzLAotCi0gICAgRlRfU0VSVklDRV9JRF9GT05UX0ZPUk1BVCwgICAgICAgICAgRlRfRk9OVF9GT1JNQVRfQ0ZGLAotICAgIEZUX1NFUlZJQ0VfSURfUE9TVFNDUklQVF9JTkZPLCAgICAgICZDRkZfU0VSVklDRV9QU19JTkZPX0dFVCwKLSAgICBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmQ0ZGX1NFUlZJQ0VfUFNfTkFNRV9HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9UVF9DTUFQLCAgICAgICAgICAgICAgJkNGRl9TRVJWSUNFX0dFVF9DTUFQX0lORk9fR0VULAotICAgIEZUX1NFUlZJQ0VfSURfQ0lELCAgICAgICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DSURfSU5GT19HRVQsCi0gICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJkNGRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VUCisgICAgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJkNGRl9TRVJWSUNFX1BST1BFUlRJRVNfR0VULAorICAgIEZUX1NFUlZJQ0VfSURfQ0ZGX0xPQUQsICAgICAgICAgICAgICZDRkZfU0VSVklDRV9DRkZfTE9BRF9HRVQKICAgKQogI2VuZGlmCiAKQEAgLTEyMDgsNyArMTEwNyw3IEBACiAgICAgICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIgICAgfAogICAgICAgRlRfTU9EVUxFX0RSSVZFUl9ISU5UU19MSUdIVExZLAogCi0gICAgICBzaXplb2YgKCBDRkZfRHJpdmVyUmVjICksCisgICAgICBzaXplb2YgKCBQU19Ecml2ZXJSZWMgKSwKICAgICAgICJjZmYiLAogICAgICAgMHgxMDAwMEwsCiAgICAgICAweDIwMDAwTCwKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmZHJpdnIuaCBiL3NyYy9jZmYvY2ZmZHJpdnIuaAppbmRleCAwNTM4MWU2Li5hZDdjM2FkIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmRyaXZyLmgKKysrIGIvc3JjL2NmZi9jZmZkcml2ci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgT3BlblR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmVycnMuaCBiL3NyYy9jZmYvY2ZmZXJycy5oCmluZGV4IDQwODA4YzEuLmIyZTFiZmEgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZXJycy5oCisrKyBiL3NyYy9jZmYvY2ZmZXJycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmdsb2FkLmMgYi9zcmMvY2ZmL2NmZmdsb2FkLmMKaW5kZXggNDgwM2I0Yi4uYzU4NDcxYyAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZnbG9hZC5jCisrKyBiL3NyYy9jZmYvY2ZmZ2xvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsMTMgKzIwLDEzIEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DQUxDX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKICNpbmNsdWRlIEZUX09VVExJTkVfSAotI2luY2x1ZGUgRlRfQ0ZGX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogCi0jaW5jbHVkZSAiY2Zmb2Jqcy5oIgogI2luY2x1ZGUgImNmZmxvYWQuaCIKICNpbmNsdWRlICJjZmZnbG9hZC5oIgotI2luY2x1ZGUgImNmMmZ0LmgiICAgICAgLyogZm9yIGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzICovCiAKICNpbmNsdWRlICJjZmZlcnJzLmgiCiAKQEAgLTQxLDYxOCArNDEsNiBAQAogI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmZmdsb2FkCiAKIAotI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKLQotICB0eXBlZGVmIGVudW0gIENGRl9PcGVyYXRvcl8KLSAgewotICAgIGNmZl9vcF91bmtub3duID0gMCwKLQotICAgIGNmZl9vcF9ybW92ZXRvLAotICAgIGNmZl9vcF9obW92ZXRvLAotICAgIGNmZl9vcF92bW92ZXRvLAotCi0gICAgY2ZmX29wX3JsaW5ldG8sCi0gICAgY2ZmX29wX2hsaW5ldG8sCi0gICAgY2ZmX29wX3ZsaW5ldG8sCi0KLSAgICBjZmZfb3BfcnJjdXJ2ZXRvLAotICAgIGNmZl9vcF9oaGN1cnZldG8sCi0gICAgY2ZmX29wX2h2Y3VydmV0bywKLSAgICBjZmZfb3BfcmN1cnZlbGluZSwKLSAgICBjZmZfb3BfcmxpbmVjdXJ2ZSwKLSAgICBjZmZfb3BfdmhjdXJ2ZXRvLAotICAgIGNmZl9vcF92dmN1cnZldG8sCi0KLSAgICBjZmZfb3BfZmxleCwKLSAgICBjZmZfb3BfaGZsZXgsCi0gICAgY2ZmX29wX2hmbGV4MSwKLSAgICBjZmZfb3BfZmxleDEsCi0KLSAgICBjZmZfb3BfZW5kY2hhciwKLQotICAgIGNmZl9vcF9oc3RlbSwKLSAgICBjZmZfb3BfdnN0ZW0sCi0gICAgY2ZmX29wX2hzdGVtaG0sCi0gICAgY2ZmX29wX3ZzdGVtaG0sCi0KLSAgICBjZmZfb3BfaGludG1hc2ssCi0gICAgY2ZmX29wX2NudHJtYXNrLAotICAgIGNmZl9vcF9kb3RzZWN0aW9uLCAgLyogZGVwcmVjYXRlZCwgYWN0cyBhcyBuby1vcCAqLwotCi0gICAgY2ZmX29wX2FicywKLSAgICBjZmZfb3BfYWRkLAotICAgIGNmZl9vcF9zdWIsCi0gICAgY2ZmX29wX2RpdiwKLSAgICBjZmZfb3BfbmVnLAotICAgIGNmZl9vcF9yYW5kb20sCi0gICAgY2ZmX29wX211bCwKLSAgICBjZmZfb3Bfc3FydCwKLQotICAgIGNmZl9vcF9ibGVuZCwKLQotICAgIGNmZl9vcF9kcm9wLAotICAgIGNmZl9vcF9leGNoLAotICAgIGNmZl9vcF9pbmRleCwKLSAgICBjZmZfb3Bfcm9sbCwKLSAgICBjZmZfb3BfZHVwLAotCi0gICAgY2ZmX29wX3B1dCwKLSAgICBjZmZfb3BfZ2V0LAotICAgIGNmZl9vcF9zdG9yZSwKLSAgICBjZmZfb3BfbG9hZCwKLQotICAgIGNmZl9vcF9hbmQsCi0gICAgY2ZmX29wX29yLAotICAgIGNmZl9vcF9ub3QsCi0gICAgY2ZmX29wX2VxLAotICAgIGNmZl9vcF9pZmVsc2UsCi0KLSAgICBjZmZfb3BfY2FsbHN1YnIsCi0gICAgY2ZmX29wX2NhbGxnc3ViciwKLSAgICBjZmZfb3BfcmV0dXJuLAotCi0gICAgLyogVHlwZSAxIG9wY29kZXM6IGludmFsaWQgYnV0IHNlZW4gaW4gcmVhbCBsaWZlICovCi0gICAgY2ZmX29wX2hzYncsCi0gICAgY2ZmX29wX2Nsb3NlcGF0aCwKLSAgICBjZmZfb3BfY2FsbG90aGVyc3ViciwKLSAgICBjZmZfb3BfcG9wLAotICAgIGNmZl9vcF9zZWFjLAotICAgIGNmZl9vcF9zYncsCi0gICAgY2ZmX29wX3NldGN1cnJlbnRwb2ludCwKLQotICAgIC8qIGRvIG5vdCByZW1vdmUgKi8KLSAgICBjZmZfb3BfbWF4Ci0KLSAgfSBDRkZfT3BlcmF0b3I7Ci0KLQotI2RlZmluZSBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEggIDB4ODAKLSNkZWZpbmUgQ0ZGX0NPVU5UX0VYQUNUICAgICAgICAweDQwCi0jZGVmaW5lIENGRl9DT1VOVF9DTEVBUl9TVEFDSyAgMHgyMAotCi0gIC8qIGNvdW50IHZhbHVlcyB3aGljaCBoYXZlIHRoZSBgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRIJyBmbGFnIHNldCBhcmUgICovCi0gIC8qIHVzZWQgZm9yIGNoZWNraW5nIHRoZSB3aWR0aCBhbmQgcmVxdWVzdGVkIG51bWJlcnMgb2YgYXJndW1lbnRzICAgICovCi0gIC8qIG9ubHk7IHRoZXkgYXJlIHNldCB0byB6ZXJvIGFmdGVyd2FyZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogdGhlIG90aGVyIHR3byBmbGFncyBhcmUgaW5mb3JtYXRpdmUgb25seSBhbmQgdW51c2VkIGN1cnJlbnRseSAgICAgKi8KLQotICBzdGF0aWMgY29uc3QgRlRfQnl0ZSAgY2ZmX2FyZ3VtZW50X2NvdW50c1tdID0KLSAgewotICAgIDAsICAvKiB1bmtub3duICovCi0KLSAgICAyIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRIIHwgQ0ZGX0NPVU5UX0VYQUNULCAvKiBybW92ZXRvICovCi0gICAgMSB8IENGRl9DT1VOVF9DSEVDS19XSURUSCB8IENGRl9DT1VOVF9FWEFDVCwKLSAgICAxIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRIIHwgQ0ZGX0NPVU5UX0VYQUNULAotCi0gICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywgLyogcmxpbmV0byAqLwotICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCi0gICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywKLQotICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssIC8qIHJyY3VydmV0byAqLwotICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCi0gICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywKLSAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAotICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCi0gICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywKLSAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAotCi0gICAgMTMsIC8qIGZsZXggKi8KLSAgICA3LAotICAgIDksCi0gICAgMTEsCi0KLSAgICAwIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRILCAvKiBlbmRjaGFyICovCi0KLSAgICAyIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRILCAvKiBoc3RlbSAqLwotICAgIDIgfCBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEgsCi0gICAgMiB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwKLSAgICAyIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRILAotCi0gICAgMCB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwgLyogaGludG1hc2sgKi8KLSAgICAwIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRILCAvKiBjbnRybWFzayAqLwotICAgIDAsIC8qIGRvdHNlY3Rpb24gKi8KLQotICAgIDEsIC8qIGFicyAqLwotICAgIDIsCi0gICAgMiwKLSAgICAyLAotICAgIDEsCi0gICAgMCwKLSAgICAyLAotICAgIDEsCi0KLSAgICAxLCAvKiBibGVuZCAqLwotCi0gICAgMSwgLyogZHJvcCAqLwotICAgIDIsCi0gICAgMSwKLSAgICAyLAotICAgIDEsCi0KLSAgICAyLCAvKiBwdXQgKi8KLSAgICAxLAotICAgIDQsCi0gICAgMywKLQotICAgIDIsIC8qIGFuZCAqLwotICAgIDIsCi0gICAgMSwKLSAgICAyLAotICAgIDQsCi0KLSAgICAxLCAvKiBjYWxsc3ViciAqLwotICAgIDEsCi0gICAgMCwKLQotICAgIDIsIC8qIGhzYncgKi8KLSAgICAwLAotICAgIDAsCi0gICAgMCwKLSAgICA1LCAvKiBzZWFjICovCi0gICAgNCwgLyogc2J3ICovCi0gICAgMiAgLyogc2V0Y3VycmVudHBvaW50ICovCi0gIH07Ci0KLSNlbmRpZiAvKiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KLSAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCi0gIC8qKioqKioqKioqICAgICAgICAgICAgIEdFTkVSSUMgQ0hBUlNUUklORyBQQVJTSU5HICAgICAgICAgICAgICAgKioqKioqKioqLwotICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KLSAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjZmZfYnVpbGRlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbml0aWFsaXplcyBhIGdpdmVuIGdseXBoIGJ1aWxkZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBidWlsZGVyIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBpbml0aWFsaXplLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgIDo6IFRoZSBjdXJyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgOjogVGhlIGN1cnJlbnQgc2l6ZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGggICA6OiBUaGUgY3VycmVudCBnbHlwaCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoaW50aW5nIDo6IFdoZXRoZXIgaGludGluZyBpcyBhY3RpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIGNmZl9idWlsZGVyX2luaXQoIENGRl9CdWlsZGVyKiAgIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgIENGRl9TaXplICAgICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgIENGRl9HbHlwaFNsb3QgIGdseXBoLAotICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICBoaW50aW5nICkKLSAgewotICAgIGJ1aWxkZXItPnBhdGhfYmVndW4gID0gMDsKLSAgICBidWlsZGVyLT5sb2FkX3BvaW50cyA9IDE7Ci0KLSAgICBidWlsZGVyLT5mYWNlICAgPSBmYWNlOwotICAgIGJ1aWxkZXItPmdseXBoICA9IGdseXBoOwotICAgIGJ1aWxkZXItPm1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OwotCi0gICAgaWYgKCBnbHlwaCApCi0gICAgewotICAgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlciA9IGdseXBoLT5yb290LmludGVybmFsLT5sb2FkZXI7Ci0KLQotICAgICAgYnVpbGRlci0+bG9hZGVyICA9IGxvYWRlcjsKLSAgICAgIGJ1aWxkZXItPmJhc2UgICAgPSAmbG9hZGVyLT5iYXNlLm91dGxpbmU7Ci0gICAgICBidWlsZGVyLT5jdXJyZW50ID0gJmxvYWRlci0+Y3VycmVudC5vdXRsaW5lOwotICAgICAgRlRfR2x5cGhMb2FkZXJfUmV3aW5kKCBsb2FkZXIgKTsKLQotICAgICAgYnVpbGRlci0+aGludHNfZ2xvYmFscyA9IE5VTEw7Ci0gICAgICBidWlsZGVyLT5oaW50c19mdW5jcyAgID0gTlVMTDsKLQotICAgICAgaWYgKCBoaW50aW5nICYmIHNpemUgKQotICAgICAgewotICAgICAgICBDRkZfSW50ZXJuYWwgIGludGVybmFsID0gKENGRl9JbnRlcm5hbClzaXplLT5yb290LmludGVybmFsOwotCi0KLSAgICAgICAgYnVpbGRlci0+aGludHNfZ2xvYmFscyA9ICh2b2lkICopaW50ZXJuYWwtPnRvcGZvbnQ7Ci0gICAgICAgIGJ1aWxkZXItPmhpbnRzX2Z1bmNzICAgPSBnbHlwaC0+cm9vdC5pbnRlcm5hbC0+Z2x5cGhfaGludHM7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgYnVpbGRlci0+cG9zX3ggPSAwOwotICAgIGJ1aWxkZXItPnBvc195ID0gMDsKLQotICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gMDsKLSAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSA9IDA7Ci0gICAgYnVpbGRlci0+YWR2YW5jZS54ICAgICAgPSAwOwotICAgIGJ1aWxkZXItPmFkdmFuY2UueSAgICAgID0gMDsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2ZmX2J1aWxkZXJfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRmluYWxpemVzIGEgZ2l2ZW4gZ2x5cGggYnVpbGRlci4gIEl0cyBjb250ZW50cyBjYW4gc3RpbGwgYmUgdXNlZCAgICovCi0gIC8qICAgIGFmdGVyIHRoZSBjYWxsLCBidXQgdGhlIGZ1bmN0aW9uIHNhdmVzIGltcG9ydGFudCBpbmZvcm1hdGlvbiAgICAgICAqLwotICAvKiAgICB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgZ2x5cGggc2xvdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBidWlsZGVyIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBmaW5hbGl6ZS4gICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIGNmZl9idWlsZGVyX2RvbmUoIENGRl9CdWlsZGVyKiAgYnVpbGRlciApCi0gIHsKLSAgICBDRkZfR2x5cGhTbG90ICBnbHlwaCA9IGJ1aWxkZXItPmdseXBoOwotCi0KLSAgICBpZiAoIGdseXBoICkKLSAgICAgIGdseXBoLT5yb290Lm91dGxpbmUgPSAqYnVpbGRlci0+YmFzZTsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2ZmX2NvbXB1dGVfYmlhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ29tcHV0ZXMgdGhlIGJpYXMgdmFsdWUgaW4gZGVwZW5kZW5jZSBvZiB0aGUgbnVtYmVyIG9mIGdseXBoICAgICAgICovCi0gIC8qICAgIHN1YnJvdXRpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGluX2NoYXJzdHJpbmdfdHlwZSA6OiBUaGUgYENoYXJzdHJpbmdUeXBlJyB2YWx1ZSBvZiB0aGUgdG9wIERJQ1QgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9zdWJycyAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGdseXBoIHN1YnJvdXRpbmVzLiAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFRoZSBiaWFzIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgRlRfSW50Ci0gIGNmZl9jb21wdXRlX2JpYXMoIEZUX0ludCAgIGluX2NoYXJzdHJpbmdfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgbnVtX3N1YnJzICkKLSAgewotICAgIEZUX0ludCAgcmVzdWx0OwotCi0KLSAgICBpZiAoIGluX2NoYXJzdHJpbmdfdHlwZSA9PSAxICkKLSAgICAgIHJlc3VsdCA9IDA7Ci0gICAgZWxzZSBpZiAoIG51bV9zdWJycyA8IDEyNDAgKQotICAgICAgcmVzdWx0ID0gMTA3OwotICAgIGVsc2UgaWYgKCBudW1fc3VicnMgPCAzMzkwMFUgKQotICAgICAgcmVzdWx0ID0gMTEzMTsKLSAgICBlbHNlCi0gICAgICByZXN1bHQgPSAzMjc2OFU7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjZmZfZGVjb2Rlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBJbml0aWFsaXplcyBhIGdpdmVuIGdseXBoIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBkZWNvZGVyIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBpbml0aWFsaXplLiAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBmYWNlICAgICAgOjogVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHNpemUgICAgICA6OiBUaGUgY3VycmVudCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgc2xvdCAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBoaW50aW5nICAgOjogV2hldGhlciBoaW50aW5nIGlzIGFjdGl2ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhpbnRfbW9kZSA6OiBUaGUgaGludGluZyBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgY2ZmX2RlY29kZXJfaW5pdCggQ0ZGX0RlY29kZXIqICAgIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgQ0ZGX0dseXBoU2xvdCAgIHNsb3QsCi0gICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICBoaW50aW5nLAotICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgaGludF9tb2RlICkKLSAgewotICAgIENGRl9Gb250ICBjZmYgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKLQotCi0gICAgLyogY2xlYXIgZXZlcnl0aGluZyAqLwotICAgIEZUX1pFUk8oIGRlY29kZXIgKTsKLQotICAgIC8qIGluaXRpYWxpemUgYnVpbGRlciAqLwotICAgIGNmZl9idWlsZGVyX2luaXQoICZkZWNvZGVyLT5idWlsZGVyLCBmYWNlLCBzaXplLCBzbG90LCBoaW50aW5nICk7Ci0KLSAgICAvKiBpbml0aWFsaXplIFR5cGUyIGRlY29kZXIgKi8KLSAgICBkZWNvZGVyLT5jZmYgICAgICAgICAgPSBjZmY7Ci0gICAgZGVjb2Rlci0+bnVtX2dsb2JhbHMgID0gY2ZmLT5nbG9iYWxfc3VicnNfaW5kZXguY291bnQ7Ci0gICAgZGVjb2Rlci0+Z2xvYmFscyAgICAgID0gY2ZmLT5nbG9iYWxfc3VicnM7Ci0gICAgZGVjb2Rlci0+Z2xvYmFsc19iaWFzID0gY2ZmX2NvbXB1dGVfYmlhcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0LmNoYXJzdHJpbmdfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPm51bV9nbG9iYWxzICk7Ci0KLSAgICBkZWNvZGVyLT5oaW50X21vZGUgICAgPSBoaW50X21vZGU7Ci0gIH0KLQotCi0gIC8qIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZWxlY3QgdGhlIHN1YmZvbnQgKi8KLSAgLyogYW5kIHRoZSBsb2NhbHMgc3VicnMgYXJyYXkgICAgICAgICAgICAgICAgICAqLwotICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKLSAgY2ZmX2RlY29kZXJfcHJlcGFyZSggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXggKQotICB7Ci0gICAgQ0ZGX0J1aWxkZXIgICpidWlsZGVyID0gJmRlY29kZXItPmJ1aWxkZXI7Ci0gICAgQ0ZGX0ZvbnQgICAgICBjZmYgICAgID0gKENGRl9Gb250KWJ1aWxkZXItPmZhY2UtPmV4dHJhLmRhdGE7Ci0gICAgQ0ZGX1N1YkZvbnQgICBzdWIgICAgID0gJmNmZi0+dG9wX2ZvbnQ7Ci0gICAgRlRfRXJyb3IgICAgICBlcnJvciAgID0gRlRfRXJyX09rOwotCi0KLSAgICAvKiBtYW5hZ2UgQ0lEIGZvbnRzICovCi0gICAgaWYgKCBjZmYtPm51bV9zdWJmb250cyApCi0gICAgewotICAgICAgRlRfQnl0ZSAgZmRfaW5kZXggPSBjZmZfZmRfc2VsZWN0X2dldCggJmNmZi0+ZmRfc2VsZWN0LCBnbHlwaF9pbmRleCApOwotCi0KLSAgICAgIGlmICggZmRfaW5kZXggPj0gY2ZmLT5udW1fc3ViZm9udHMgKQotICAgICAgewotICAgICAgICBGVF9UUkFDRTQoKCAiY2ZmX2RlY29kZXJfcHJlcGFyZTogaW52YWxpZCBDSUQgc3ViZm9udCBpbmRleFxuIiApKTsKLSAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOwotICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICB9Ci0KLSAgICAgIEZUX1RSQUNFMygoICIgIGluIHN1YmZvbnQgJWQ6XG4iLCBmZF9pbmRleCApKTsKLQotICAgICAgc3ViID0gY2ZmLT5zdWJmb250c1tmZF9pbmRleF07Ci0KLSAgICAgIGlmICggYnVpbGRlci0+aGludHNfZnVuY3MgJiYgc2l6ZSApCi0gICAgICB7Ci0gICAgICAgIENGRl9JbnRlcm5hbCAgaW50ZXJuYWwgPSAoQ0ZGX0ludGVybmFsKXNpemUtPnJvb3QuaW50ZXJuYWw7Ci0KLQotICAgICAgICAvKiBmb3IgQ0ZGcyB3aXRob3V0IHN1YmZvbnRzLCB0aGlzIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gc2V0ICovCi0gICAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSAodm9pZCAqKWludGVybmFsLT5zdWJmb250c1tmZF9pbmRleF07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZGVjb2Rlci0+bnVtX2xvY2FscyAgICA9IHN1Yi0+bG9jYWxfc3VicnNfaW5kZXguY291bnQ7Ci0gICAgZGVjb2Rlci0+bG9jYWxzICAgICAgICA9IHN1Yi0+bG9jYWxfc3VicnM7Ci0gICAgZGVjb2Rlci0+bG9jYWxzX2JpYXMgICA9IGNmZl9jb21wdXRlX2JpYXMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QuY2hhcnN0cmluZ190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPm51bV9sb2NhbHMgKTsKLQotICAgIGRlY29kZXItPmdseXBoX3dpZHRoICAgPSBzdWItPnByaXZhdGVfZGljdC5kZWZhdWx0X3dpZHRoOwotICAgIGRlY29kZXItPm5vbWluYWxfd2lkdGggPSBzdWItPnByaXZhdGVfZGljdC5ub21pbmFsX3dpZHRoOwotCi0gICAgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ID0gc3ViOwotCi0gIEV4aXQ6Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgYGNvdW50JyBtb3JlIHBvaW50cyAqLwotICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKLSAgY2ZmX2NoZWNrX3BvaW50cyggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAotICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGNvdW50ICkKLSAgewotICAgIHJldHVybiBGVF9HTFlQSExPQURFUl9DSEVDS19QT0lOVFMoIGJ1aWxkZXItPmxvYWRlciwgY291bnQsIDAgKTsKLSAgfQotCi0KLSAgLyogYWRkIGEgbmV3IHBvaW50LCBkbyBub3QgY2hlY2sgc3BhY2UgKi8KLSAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAotICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICAgIGZsYWcgKQotICB7Ci0gICAgRlRfT3V0bGluZSogIG91dGxpbmUgPSBidWlsZGVyLT5jdXJyZW50OwotCi0KLSAgICBpZiAoIGJ1aWxkZXItPmxvYWRfcG9pbnRzICkKLSAgICB7Ci0gICAgICBGVF9WZWN0b3IqICBwb2ludCAgID0gb3V0bGluZS0+cG9pbnRzICsgb3V0bGluZS0+bl9wb2ludHM7Ci0gICAgICBGVF9CeXRlKiAgICBjb250cm9sID0gKEZUX0J5dGUqKW91dGxpbmUtPnRhZ3MgKyBvdXRsaW5lLT5uX3BvaW50czsKLQotI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKLSAgICAgIENGRl9Ecml2ZXIgIGRyaXZlciAgPSAoQ0ZGX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggYnVpbGRlci0+ZmFjZSApOwotCi0KLSAgICAgIGlmICggZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19GUkVFVFlQRSApCi0gICAgICB7Ci0gICAgICAgIHBvaW50LT54ID0geCA+PiAxNjsKLSAgICAgICAgcG9pbnQtPnkgPSB5ID4+IDE2OwotICAgICAgfQotICAgICAgZWxzZQotI2VuZGlmCi0gICAgICB7Ci0gICAgICAgIC8qIGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzIHVzZXMgMTYuMTYgY29vcmRpbmF0ZXMgKi8KLSAgICAgICAgcG9pbnQtPnggPSB4ID4+IDEwOwotICAgICAgICBwb2ludC0+eSA9IHkgPj4gMTA7Ci0gICAgICB9Ci0gICAgICAqY29udHJvbCA9IChGVF9CeXRlKSggZmxhZyA/IEZUX0NVUlZFX1RBR19PTiA6IEZUX0NVUlZFX1RBR19DVUJJQyApOwotICAgIH0KLQotICAgIG91dGxpbmUtPm5fcG9pbnRzKys7Ci0gIH0KLQotCi0gIC8qIGNoZWNrIHNwYWNlIGZvciBhIG5ldyBvbi1jdXJ2ZSBwb2ludCwgdGhlbiBhZGQgaXQgKi8KLSAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIGNmZl9idWlsZGVyX2FkZF9wb2ludDEoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKQotICB7Ci0gICAgRlRfRXJyb3IgIGVycm9yOwotCi0KLSAgICBlcnJvciA9IGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDEgKTsKLSAgICBpZiAoICFlcnJvciApCi0gICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLQotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgLyogY2hlY2sgc3BhY2UgZm9yIGEgbmV3IGNvbnRvdXIsIHRoZW4gYWRkIGl0ICovCi0gIHN0YXRpYyBGVF9FcnJvcgotICBjZmZfYnVpbGRlcl9hZGRfY29udG91ciggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICkKLSAgewotICAgIEZUX091dGxpbmUqICBvdXRsaW5lID0gYnVpbGRlci0+Y3VycmVudDsKLSAgICBGVF9FcnJvciAgICAgZXJyb3I7Ci0KLQotICAgIGlmICggIWJ1aWxkZXItPmxvYWRfcG9pbnRzICkKLSAgICB7Ci0gICAgICBvdXRsaW5lLT5uX2NvbnRvdXJzKys7Ci0gICAgICByZXR1cm4gRlRfRXJyX09rOwotICAgIH0KLQotICAgIGVycm9yID0gRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBidWlsZGVyLT5sb2FkZXIsIDAsIDEgKTsKLSAgICBpZiAoICFlcnJvciApCi0gICAgewotICAgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCi0gICAgICAgIG91dGxpbmUtPmNvbnRvdXJzW291dGxpbmUtPm5fY29udG91cnMgLSAxXSA9Ci0gICAgICAgICAgKHNob3J0KSggb3V0bGluZS0+bl9wb2ludHMgLSAxICk7Ci0KLSAgICAgIG91dGxpbmUtPm5fY29udG91cnMrKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0gIC8qIGlmIGEgcGF0aCB3YXMgYmVndW4sIGFkZCBpdHMgZmlyc3Qgb24tY3VydmUgcG9pbnQgKi8KLSAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKQotICB7Ci0gICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwotCi0KLSAgICAvKiB0ZXN0IHdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIGEgbmV3IGNvbnRvdXIgKi8KLSAgICBpZiAoICFidWlsZGVyLT5wYXRoX2JlZ3VuICkKLSAgICB7Ci0gICAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMTsKLSAgICAgIGVycm9yID0gY2ZmX2J1aWxkZXJfYWRkX2NvbnRvdXIoIGJ1aWxkZXIgKTsKLSAgICAgIGlmICggIWVycm9yICkKLSAgICAgICAgZXJyb3IgPSBjZmZfYnVpbGRlcl9hZGRfcG9pbnQxKCBidWlsZGVyLCB4LCB5ICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICAvKiBjbG9zZSB0aGUgY3VycmVudCBjb250b3VyICovCi0gIEZUX0xPQ0FMX0RFRiggdm9pZCApCi0gIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIENGRl9CdWlsZGVyKiAgYnVpbGRlciApCi0gIHsKLSAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9IGJ1aWxkZXItPmN1cnJlbnQ7Ci0gICAgRlRfSW50ICAgICAgIGZpcnN0OwotCi0KLSAgICBpZiAoICFvdXRsaW5lICkKLSAgICAgIHJldHVybjsKLQotICAgIGZpcnN0ID0gb3V0bGluZS0+bl9jb250b3VycyA8PSAxCi0gICAgICAgICAgICA/IDAgOiBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMl0gKyAxOwotCi0gICAgLyogV2UgbXVzdCBub3QgaW5jbHVkZSB0aGUgbGFzdCBwb2ludCBpbiB0aGUgcGF0aCBpZiBpdCAqLwotICAgIC8qIGlzIGxvY2F0ZWQgb24gdGhlIGZpcnN0IHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID4gMSApCi0gICAgewotICAgICAgRlRfVmVjdG9yKiAgcDEgICAgICA9IG91dGxpbmUtPnBvaW50cyArIGZpcnN0OwotICAgICAgRlRfVmVjdG9yKiAgcDIgICAgICA9IG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKLSAgICAgIEZUX0J5dGUqICAgIGNvbnRyb2wgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFncyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKLQotCi0gICAgICAvKiBgZGVsZXRlJyBsYXN0IHBvaW50IG9ubHkgaWYgaXQgY29pbmNpZGVzIHdpdGggdGhlIGZpcnN0ICAgICovCi0gICAgICAvKiBwb2ludCBhbmQgaWYgaXQgaXMgbm90IGEgY29udHJvbCBwb2ludCAod2hpY2ggY2FuIGhhcHBlbikuICovCi0gICAgICBpZiAoIHAxLT54ID09IHAyLT54ICYmIHAxLT55ID09IHAyLT55ICkKLSAgICAgICAgaWYgKCAqY29udHJvbCA9PSBGVF9DVVJWRV9UQUdfT04gKQotICAgICAgICAgIG91dGxpbmUtPm5fcG9pbnRzLS07Ci0gICAgfQotCi0gICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCi0gICAgewotICAgICAgLyogRG9uJ3QgYWRkIGNvbnRvdXJzIG9ubHkgY29uc2lzdGluZyBvZiBvbmUgcG9pbnQsIGkuZS4sICovCi0gICAgICAvKiBjaGVjayB3aGV0aGVyIGJlZ2luIHBvaW50IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZS4gKi8KLSAgICAgIGlmICggZmlyc3QgPT0gb3V0bGluZS0+bl9wb2ludHMgLSAxICkKLSAgICAgIHsKLSAgICAgICAgb3V0bGluZS0+bl9jb250b3Vycy0tOwotICAgICAgICBvdXRsaW5lLT5uX3BvaW50cy0tOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMV0gPQotICAgICAgICAgIChzaG9ydCkoIG91dGxpbmUtPm5fcG9pbnRzIC0gMSApOwotICAgIH0KLSAgfQotCi0KLSAgRlRfTE9DQUxfREVGKCBGVF9JbnQgKQotICBjZmZfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBDRkZfRm9udCAgY2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgY2hhcmNvZGUgKQotICB7Ci0gICAgRlRfVUludCAgICBuOwotICAgIEZUX1VTaG9ydCAgZ2x5cGhfc2lkOwotCi0KLSAgICAvKiBDSUQta2V5ZWQgZm9udHMgZG9uJ3QgaGF2ZSBnbHlwaCBuYW1lcyAqLwotICAgIGlmICggIWNmZi0+Y2hhcnNldC5zaWRzICkKLSAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIGNoZWNrIHJhbmdlIG9mIHN0YW5kYXJkIGNoYXIgY29kZSAqLwotICAgIGlmICggY2hhcmNvZGUgPCAwIHx8IGNoYXJjb2RlID4gMjU1ICkKLSAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIEdldCBjb2RlIHRvIFNJRCBtYXBwaW5nIGZyb20gYGNmZl9zdGFuZGFyZF9lbmNvZGluZycuICovCi0gICAgZ2x5cGhfc2lkID0gY2ZmX2dldF9zdGFuZGFyZF9lbmNvZGluZyggKEZUX1VJbnQpY2hhcmNvZGUgKTsKLQotICAgIGZvciAoIG4gPSAwOyBuIDwgY2ZmLT5udW1fZ2x5cGhzOyBuKysgKQotICAgIHsKLSAgICAgIGlmICggY2ZmLT5jaGFyc2V0LnNpZHNbbl0gPT0gZ2x5cGhfc2lkICkKLSAgICAgICAgcmV0dXJuIChGVF9JbnQpbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBjZmZfZ2V0X2dseXBoX2RhdGEoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGdseXBoX2luZGV4LApAQCAtNzI0LDE5MjAgKzExMiw2IEBACiAgIH0KIAogCi0jaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQotCi0gIHN0YXRpYyBGVF9FcnJvcgotICBjZmZfb3BlcmF0b3Jfc2VhYyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICBhc2IsCi0gICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIGFkeCwKLSAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgYWR5LAotICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBiY2hhciwKLSAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgYWNoYXIgKQotICB7Ci0gICAgRlRfRXJyb3IgICAgICBlcnJvcjsKLSAgICBDRkZfQnVpbGRlciogIGJ1aWxkZXIgPSAmZGVjb2Rlci0+YnVpbGRlcjsKLSAgICBGVF9JbnQgICAgICAgIGJjaGFyX2luZGV4LCBhY2hhcl9pbmRleDsKLSAgICBUVF9GYWNlICAgICAgIGZhY2UgPSBkZWNvZGVyLT5idWlsZGVyLmZhY2U7Ci0gICAgRlRfVmVjdG9yICAgICBsZWZ0X2JlYXJpbmcsIGFkdmFuY2U7Ci0gICAgRlRfQnl0ZSogICAgICBjaGFyc3RyaW5nOwotICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW47Ci0gICAgRlRfUG9zICAgICAgICBnbHlwaF93aWR0aDsKLQotCi0gICAgaWYgKCBkZWNvZGVyLT5zZWFjICkKLSAgICB7Ci0gICAgICBGVF9FUlJPUigoICJjZmZfb3BlcmF0b3Jfc2VhYzogaW52YWxpZCBuZXN0ZWQgc2VhY1xuIiApKTsKLSAgICAgIHJldHVybiBGVF9USFJPVyggU3ludGF4X0Vycm9yICk7Ci0gICAgfQotCi0gICAgYWR4ICs9IGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLng7Ci0gICAgYWR5ICs9IGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLnk7Ci0KLSNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCi0gICAgLyogSW5jcmVtZW50YWwgZm9udHMgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSB2YWxpZCBjaGFyc2V0cy4gICAgICAgICovCi0gICAgLyogVGhleSB1c2UgdGhlIGNoYXJhY3RlciBjb2RlLCBub3QgdGhlIGdseXBoIGluZGV4LCBpbiB0aGlzIGNhc2UuICovCi0gICAgaWYgKCBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgKQotICAgIHsKLSAgICAgIGJjaGFyX2luZGV4ID0gYmNoYXI7Ci0gICAgICBhY2hhcl9pbmRleCA9IGFjaGFyOwotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTCAqLwotICAgIHsKLSAgICAgIENGRl9Gb250IGNmZiA9IChDRkZfRm9udCkoZmFjZS0+ZXh0cmEuZGF0YSk7Ci0KLQotICAgICAgYmNoYXJfaW5kZXggPSBjZmZfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBjZmYsIGJjaGFyICk7Ci0gICAgICBhY2hhcl9pbmRleCA9IGNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUoIGNmZiwgYWNoYXIgKTsKLSAgICB9Ci0KLSAgICBpZiAoIGJjaGFyX2luZGV4IDwgMCB8fCBhY2hhcl9pbmRleCA8IDAgKQotICAgIHsKLSAgICAgIEZUX0VSUk9SKCggImNmZl9vcGVyYXRvcl9zZWFjOiIKLSAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHNlYWMgY2hhcmFjdGVyIGNvZGUgYXJndW1lbnRzXG4iICkpOwotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKLSAgICB9Ci0KLSAgICAvKiBJZiB3ZSBhcmUgdHJ5aW5nIHRvIGxvYWQgYSBjb21wb3NpdGUgZ2x5cGgsIGRvIG5vdCBsb2FkIHRoZSAqLwotICAgIC8qIGFjY2VudCBjaGFyYWN0ZXIgYW5kIHJldHVybiB0aGUgYXJyYXkgb2Ygc3ViZ2x5cGhzLiAgICAgICAgICovCi0gICAgaWYgKCBidWlsZGVyLT5ub19yZWN1cnNlICkKLSAgICB7Ci0gICAgICBGVF9HbHlwaFNsb3QgICAgZ2x5cGggID0gKEZUX0dseXBoU2xvdClidWlsZGVyLT5nbHlwaDsKLSAgICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgPSBnbHlwaC0+aW50ZXJuYWwtPmxvYWRlcjsKLSAgICAgIEZUX1N1YkdseXBoICAgICBzdWJnOwotCi0KLSAgICAgIC8qIHJlYWxsb2NhdGUgc3ViZ2x5cGggYXJyYXkgaWYgbmVjZXNzYXJ5ICovCi0gICAgICBlcnJvciA9IEZUX0dseXBoTG9hZGVyX0NoZWNrU3ViR2x5cGhzKCBsb2FkZXIsIDIgKTsKLSAgICAgIGlmICggZXJyb3IgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIHN1YmcgPSBsb2FkZXItPmN1cnJlbnQuc3ViZ2x5cGhzOwotCi0gICAgICAvKiBzdWJnbHlwaCAwID0gYmFzZSBjaGFyYWN0ZXIgKi8KLSAgICAgIHN1YmctPmluZGV4ID0gYmNoYXJfaW5kZXg7Ci0gICAgICBzdWJnLT5mbGFncyA9IEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfWFlfVkFMVUVTIHwKLSAgICAgICAgICAgICAgICAgICAgRlRfU1VCR0xZUEhfRkxBR19VU0VfTVlfTUVUUklDUzsKLSAgICAgIHN1YmctPmFyZzEgID0gMDsKLSAgICAgIHN1YmctPmFyZzIgID0gMDsKLSAgICAgIHN1YmcrKzsKLQotICAgICAgLyogc3ViZ2x5cGggMSA9IGFjY2VudCBjaGFyYWN0ZXIgKi8KLSAgICAgIHN1YmctPmluZGV4ID0gYWNoYXJfaW5kZXg7Ci0gICAgICBzdWJnLT5mbGFncyA9IEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfWFlfVkFMVUVTOwotICAgICAgc3ViZy0+YXJnMSAgPSAoRlRfSW50KSggYWR4ID4+IDE2ICk7Ci0gICAgICBzdWJnLT5hcmcyICA9IChGVF9JbnQpKCBhZHkgPj4gMTYgKTsKLQotICAgICAgLyogc2V0IHVwIHJlbWFpbmluZyBnbHlwaCBmaWVsZHMgKi8KLSAgICAgIGdseXBoLT5udW1fc3ViZ2x5cGhzID0gMjsKLSAgICAgIGdseXBoLT5zdWJnbHlwaHMgICAgID0gbG9hZGVyLT5iYXNlLnN1YmdseXBoczsKLSAgICAgIGdseXBoLT5mb3JtYXQgICAgICAgID0gRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURTsKLQotICAgICAgbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHMgPSAyOwotICAgIH0KLQotICAgIEZUX0dseXBoTG9hZGVyX1ByZXBhcmUoIGJ1aWxkZXItPmxvYWRlciApOwotCi0gICAgLyogRmlyc3QgbG9hZCBgYmNoYXInIGluIGJ1aWxkZXIgKi8KLSAgICBlcnJvciA9IGNmZl9nZXRfZ2x5cGhfZGF0YSggZmFjZSwgKEZUX1VJbnQpYmNoYXJfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc3RyaW5nLCAmY2hhcnN0cmluZ19sZW4gKTsKLSAgICBpZiAoICFlcnJvciApCi0gICAgewotICAgICAgLyogdGhlIHNlYWMgb3BlcmF0b3IgbXVzdCBub3QgYmUgbmVzdGVkICovCi0gICAgICBkZWNvZGVyLT5zZWFjID0gVFJVRTsKLSAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIGRlY29kZXIsIGNoYXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiwgMCApOwotICAgICAgZGVjb2Rlci0+c2VhYyA9IEZBTFNFOwotCi0gICAgICBjZmZfZnJlZV9nbHlwaF9kYXRhKCBmYWNlLCAmY2hhcnN0cmluZywgY2hhcnN0cmluZ19sZW4gKTsKLQotICAgICAgaWYgKCBlcnJvciApCi0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICAvKiBTYXZlIHRoZSBsZWZ0IGJlYXJpbmcsIGFkdmFuY2UgYW5kIGdseXBoIHdpZHRoIG9mIHRoZSBiYXNlICovCi0gICAgLyogY2hhcmFjdGVyIGFzIHRoZXkgd2lsbCBiZSBlcmFzZWQgYnkgdGhlIG5leHQgbG9hZC4gICAgICAgICAqLwotCi0gICAgbGVmdF9iZWFyaW5nID0gYnVpbGRlci0+bGVmdF9iZWFyaW5nOwotICAgIGFkdmFuY2UgICAgICA9IGJ1aWxkZXItPmFkdmFuY2U7Ci0gICAgZ2x5cGhfd2lkdGggID0gZGVjb2Rlci0+Z2x5cGhfd2lkdGg7Ci0KLSAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueCA9IDA7Ci0gICAgYnVpbGRlci0+bGVmdF9iZWFyaW5nLnkgPSAwOwotCi0gICAgYnVpbGRlci0+cG9zX3ggPSBhZHggLSBhc2I7Ci0gICAgYnVpbGRlci0+cG9zX3kgPSBhZHk7Ci0KLSAgICAvKiBOb3cgbG9hZCBgYWNoYXInIG9uIHRvcCBvZiB0aGUgYmFzZSBvdXRsaW5lLiAqLwotICAgIGVycm9yID0gY2ZmX2dldF9nbHlwaF9kYXRhKCBmYWNlLCAoRlRfVUludClhY2hhcl9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzdHJpbmcsICZjaGFyc3RyaW5nX2xlbiApOwotICAgIGlmICggIWVycm9yICkKLSAgICB7Ci0gICAgICAvKiB0aGUgc2VhYyBvcGVyYXRvciBtdXN0IG5vdCBiZSBuZXN0ZWQgKi8KLSAgICAgIGRlY29kZXItPnNlYWMgPSBUUlVFOwotICAgICAgZXJyb3IgPSBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggZGVjb2RlciwgY2hhcnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuLCAwICk7Ci0gICAgICBkZWNvZGVyLT5zZWFjID0gRkFMU0U7Ci0KLSAgICAgIGNmZl9mcmVlX2dseXBoX2RhdGEoIGZhY2UsICZjaGFyc3RyaW5nLCBjaGFyc3RyaW5nX2xlbiApOwotCi0gICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgZ290byBFeGl0OwotICAgIH0KLQotICAgIC8qIFJlc3RvcmUgdGhlIGxlZnQgc2lkZSBiZWFyaW5nLCBhZHZhbmNlIGFuZCBnbHlwaCB3aWR0aCAqLwotICAgIC8qIG9mIHRoZSBiYXNlIGNoYXJhY3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZyA9IGxlZnRfYmVhcmluZzsKLSAgICBidWlsZGVyLT5hZHZhbmNlICAgICAgPSBhZHZhbmNlOwotICAgIGRlY29kZXItPmdseXBoX3dpZHRoICA9IGdseXBoX3dpZHRoOwotCi0gICAgYnVpbGRlci0+cG9zX3ggPSAwOwotICAgIGJ1aWxkZXItPnBvc195ID0gMDsKLQotICBFeGl0OgotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgUGFyc2VzIGEgZ2l2ZW4gVHlwZSAyIGNoYXJzdHJpbmdzIHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZGVjb2RlciAgICAgICAgIDo6IFRoZSBjdXJyZW50IFR5cGUgMSBkZWNvZGVyLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY2hhcnN0cmluZ19iYXNlIDo6IFRoZSBiYXNlIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBjaGFyc3RyaW5nX2xlbiAgOjogVGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGluX2RpY3QgICAgICAgICA6OiBTZXQgdG8gMSBpZiBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0b3Agb3IgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBESUNUIChuZWVkZWQgZm9yIE11bHRpcGxlIE1hc3RlciBDRkZzKS4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQotICBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICBjaGFyc3RyaW5nX2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIGNoYXJzdHJpbmdfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICBpbl9kaWN0ICkKLSAgewotICAgIEZUX0Vycm9yICAgICAgICAgICBlcnJvcjsKLSAgICBDRkZfRGVjb2Rlcl9ab25lKiAgem9uZTsKLSAgICBGVF9CeXRlKiAgICAgICAgICAgaXA7Ci0gICAgRlRfQnl0ZSogICAgICAgICAgIGxpbWl0OwotICAgIENGRl9CdWlsZGVyKiAgICAgICBidWlsZGVyID0gJmRlY29kZXItPmJ1aWxkZXI7Ci0gICAgRlRfUG9zICAgICAgICAgICAgIHgsIHk7Ci0gICAgRlRfRml4ZWQqICAgICAgICAgIHN0YWNrOwotICAgIEZUX0ludCAgICAgICAgICAgICBjaGFyc3RyaW5nX3R5cGUgPQotICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0LmNoYXJzdHJpbmdfdHlwZTsKLSAgICBGVF9VU2hvcnQgICAgICAgICAgbnVtX2Rlc2lnbnMgPQotICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0Lm51bV9kZXNpZ25zOwotICAgIEZUX1VTaG9ydCAgICAgICAgICBudW1fYXhlcyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QubnVtX2F4ZXM7Ci0KLSAgICBUMl9IaW50c19GdW5jcyAgICAgaGludGVyOwotCi0KLSAgICAvKiBzZXQgZGVmYXVsdCB3aWR0aCAqLwotICAgIGRlY29kZXItPm51bV9oaW50cyAgPSAwOwotICAgIGRlY29kZXItPnJlYWRfd2lkdGggPSAxOwotCi0gICAgLyogaW5pdGlhbGl6ZSB0aGUgZGVjb2RlciAqLwotICAgIGRlY29kZXItPnRvcCAgPSBkZWNvZGVyLT5zdGFjazsKLSAgICBkZWNvZGVyLT56b25lID0gZGVjb2Rlci0+em9uZXM7Ci0gICAgem9uZSAgICAgICAgICA9IGRlY29kZXItPnpvbmVzOwotICAgIHN0YWNrICAgICAgICAgPSBkZWNvZGVyLT50b3A7Ci0KLSAgICBoaW50ZXIgPSAoVDJfSGludHNfRnVuY3MpYnVpbGRlci0+aGludHNfZnVuY3M7Ci0KLSAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMDsKLQotICAgIHpvbmUtPmJhc2UgICAgICAgICAgID0gY2hhcnN0cmluZ19iYXNlOwotICAgIGxpbWl0ID0gem9uZS0+bGltaXQgID0gY2hhcnN0cmluZ19iYXNlICsgY2hhcnN0cmluZ19sZW47Ci0gICAgaXAgICAgPSB6b25lLT5jdXJzb3IgPSB6b25lLT5iYXNlOwotCi0gICAgZXJyb3IgPSBGVF9FcnJfT2s7Ci0KLSAgICB4ID0gYnVpbGRlci0+cG9zX3g7Ci0gICAgeSA9IGJ1aWxkZXItPnBvc195OwotCi0gICAgLyogYmVnaW4gaGludHMgcmVjb3JkaW5nIHNlc3Npb24sIGlmIGFueSAqLwotICAgIGlmICggaGludGVyICkKLSAgICAgIGhpbnRlci0+b3BlbiggaGludGVyLT5oaW50cyApOwotCi0gICAgLyogbm93IGV4ZWN1dGUgbG9vcCAqLwotICAgIHdoaWxlICggaXAgPCBsaW1pdCApCi0gICAgewotICAgICAgQ0ZGX09wZXJhdG9yICBvcDsKLSAgICAgIEZUX0J5dGUgICAgICAgdjsKLQotCi0gICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiBEZWNvZGUgb3BlcmF0b3Igb3Igb3BlcmFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICB2ID0gKmlwKys7Ci0gICAgICBpZiAoIHYgPj0gMzIgfHwgdiA9PSAyOCApCi0gICAgICB7Ci0gICAgICAgIEZUX0ludCAgICBzaGlmdCA9IDE2OwotICAgICAgICBGVF9JbnQzMiAgdmFsOwotCi0KLSAgICAgICAgLyogdGhpcyBpcyBhbiBvcGVyYW5kLCBwdXNoIGl0IG9uIHRoZSBzdGFjayAqLwotCi0gICAgICAgIC8qIGlmIHdlIHVzZSBzaGlmdHMsIGFsbCBjb21wdXRhdGlvbnMgYXJlIGRvbmUgd2l0aCB1bnNpZ25lZCAqLwotICAgICAgICAvKiB2YWx1ZXM7IHRoZSBjb252ZXJzaW9uIHRvIGEgc2lnbmVkIHZhbHVlIGlzIHRoZSBsYXN0IHN0ZXAgKi8KLSAgICAgICAgaWYgKCB2ID09IDI4ICkKLSAgICAgICAgewotICAgICAgICAgIGlmICggaXAgKyAxID49IGxpbWl0ICkKLSAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOwotICAgICAgICAgIHZhbCA9IChGVF9TaG9ydCkoICggKEZUX1VTaG9ydClpcFswXSA8PCA4ICkgfCBpcFsxXSApOwotICAgICAgICAgIGlwICs9IDI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHYgPCAyNDcgKQotICAgICAgICAgIHZhbCA9IChGVF9JbnQzMil2IC0gMTM5OwotICAgICAgICBlbHNlIGlmICggdiA8IDI1MSApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIGlwID49IGxpbWl0ICkKLSAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOwotICAgICAgICAgIHZhbCA9ICggKEZUX0ludDMyKXYgLSAyNDcgKSAqIDI1NiArICppcCsrICsgMTA4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCB2IDwgMjU1ICkKLSAgICAgICAgewotICAgICAgICAgIGlmICggaXAgPj0gbGltaXQgKQotICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7Ci0gICAgICAgICAgdmFsID0gLSggKEZUX0ludDMyKXYgLSAyNTEgKSAqIDI1NiAtICppcCsrIC0gMTA4OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGlmICggaXAgKyAzID49IGxpbWl0ICkKLSAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOwotICAgICAgICAgIHZhbCA9IChGVF9JbnQzMikoICggKEZUX1VJbnQzMilpcFswXSA8PCAyNCApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIChGVF9VSW50MzIpaXBbMV0gPDwgMTYgKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKWlwWzJdIDw8ICA4ICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQzMilpcFszXSAgICAgICAgICk7Ci0gICAgICAgICAgaXAgICAgKz0gNDsKLSAgICAgICAgICBpZiAoIGNoYXJzdHJpbmdfdHlwZSA9PSAyICkKLSAgICAgICAgICAgIHNoaWZ0ID0gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIGRlY29kZXItPnRvcCAtIHN0YWNrID49IENGRl9NQVhfT1BFUkFORFMgKQotICAgICAgICAgIGdvdG8gU3RhY2tfT3ZlcmZsb3c7Ci0KLSAgICAgICAgdmFsICAgICAgICAgICAgID0gKEZUX0ludDMyKSggKEZUX1VJbnQzMil2YWwgPDwgc2hpZnQgKTsKLSAgICAgICAgKmRlY29kZXItPnRvcCsrID0gdmFsOwotCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgICAgaWYgKCAhKCB2YWwgJiAweEZGRkZMICkgKQotICAgICAgICAgIEZUX1RSQUNFNCgoICIgJWhkIiwgKEZUX1Nob3J0KSggKEZUX1VJbnQzMil2YWwgPj4gMTYgKSApKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIEZUX1RSQUNFNCgoICIgJS41ZiIsIHZhbCAvIDY1NTM2LjAgKSk7Ci0jZW5kaWYKLQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICAvKiBUaGUgc3BlY2lmaWNhdGlvbiBzYXlzIHRoYXQgbm9ybWFsbHkgYXJndW1lbnRzIGFyZSB0byBiZSB0YWtlbiAqLwotICAgICAgICAvKiBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLiAgSG93ZXZlciwgdGhpcyBzZWVtcyBub3QgdG8gYmUgICAqLwotICAgICAgICAvKiBjb3JyZWN0LCBhdCBsZWFzdCBmb3IgQWNyb3JlYWQgNy4wLjggb24gR05VL0xpbnV4OiBJdCBwb3BzIHRoZSAqLwotICAgICAgICAvKiBhcmd1bWVudHMgc2ltaWxhciB0byBhIFBTIGludGVycHJldGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgIEZUX0ZpeGVkKiAgYXJncyAgICAgPSBkZWNvZGVyLT50b3A7Ci0gICAgICAgIEZUX0ludCAgICAgbnVtX2FyZ3MgPSAoRlRfSW50KSggYXJncyAtIGRlY29kZXItPnN0YWNrICk7Ci0gICAgICAgIEZUX0ludCAgICAgcmVxX2FyZ3M7Ci0KLQotICAgICAgICAvKiBmaW5kIG9wZXJhdG9yICovCi0gICAgICAgIG9wID0gY2ZmX29wX3Vua25vd247Ci0KLSAgICAgICAgc3dpdGNoICggdiApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgIG9wID0gY2ZmX29wX2hzdGVtOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfdnN0ZW07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICBvcCA9IGNmZl9vcF92bW92ZXRvOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDU6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfcmxpbmV0bzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA2OgotICAgICAgICAgIG9wID0gY2ZmX29wX2hsaW5ldG87Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNzoKLSAgICAgICAgICBvcCA9IGNmZl9vcF92bGluZXRvOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfcnJjdXJ2ZXRvOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDk6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfY2xvc2VwYXRoOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDEwOgotICAgICAgICAgIG9wID0gY2ZmX29wX2NhbGxzdWJyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDExOgotICAgICAgICAgIG9wID0gY2ZmX29wX3JldHVybjsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxMjoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIGlwID49IGxpbWl0ICkKLSAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7Ci0gICAgICAgICAgICB2ID0gKmlwKys7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHYgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9kb3RzZWN0aW9uOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTogLyogdGhpcyBpcyBhY3R1YWxseSB0aGUgVHlwZTEgdnN0ZW0zIG9wZXJhdG9yICovCi0gICAgICAgICAgICAgIG9wID0gY2ZmX29wX3ZzdGVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjogLyogdGhpcyBpcyBhY3R1YWxseSB0aGUgVHlwZTEgaHN0ZW0zIG9wZXJhdG9yICovCi0gICAgICAgICAgICAgIG9wID0gY2ZmX29wX2hzdGVtOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfYW5kOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3Bfb3I7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9ub3Q7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9zZWFjOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3Bfc2J3OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgODoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3Bfc3RvcmU7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9hYnM7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfYWRkOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMTE6Ci0gICAgICAgICAgICAgIG9wID0gY2ZmX29wX3N1YjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEyOgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9kaXY7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMzoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfbG9hZDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE0OgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9uZWc7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNToKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZXE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfY2FsbG90aGVyc3VicjsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE3OgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9wb3A7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxODoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZHJvcDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDIwOgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9wdXQ7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyMToKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZ2V0OwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjI6Ci0gICAgICAgICAgICAgIG9wID0gY2ZmX29wX2lmZWxzZTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDIzOgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9yYW5kb207Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyNDoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfbXVsOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjY6Ci0gICAgICAgICAgICAgIG9wID0gY2ZmX29wX3NxcnQ7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyNzoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZHVwOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMjg6Ci0gICAgICAgICAgICAgIG9wID0gY2ZmX29wX2V4Y2g7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOToKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfaW5kZXg7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzMDoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3Bfcm9sbDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDMzOgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9zZXRjdXJyZW50cG9pbnQ7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzNDoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfaGZsZXg7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzNToKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZmxleDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDM2OgotICAgICAgICAgICAgICBvcCA9IGNmZl9vcF9oZmxleDE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzNzoKLSAgICAgICAgICAgICAgb3AgPSBjZmZfb3BfZmxleDE7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICgxMiwgJWQpXG4iLCB2ICkpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMTM6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfaHNidzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxNDoKLSAgICAgICAgICBvcCA9IGNmZl9vcF9lbmRjaGFyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE2OgotICAgICAgICAgIG9wID0gY2ZmX29wX2JsZW5kOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE4OgotICAgICAgICAgIG9wID0gY2ZmX29wX2hzdGVtaG07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMTk6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfaGludG1hc2s7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjA6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfY250cm1hc2s7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjE6Ci0gICAgICAgICAgb3AgPSBjZmZfb3Bfcm1vdmV0bzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyMjoKLSAgICAgICAgICBvcCA9IGNmZl9vcF9obW92ZXRvOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDIzOgotICAgICAgICAgIG9wID0gY2ZmX29wX3ZzdGVtaG07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfcmN1cnZlbGluZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyNToKLSAgICAgICAgICBvcCA9IGNmZl9vcF9ybGluZWN1cnZlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI2OgotICAgICAgICAgIG9wID0gY2ZmX29wX3Z2Y3VydmV0bzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyNzoKLSAgICAgICAgICBvcCA9IGNmZl9vcF9oaGN1cnZldG87Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjk6Ci0gICAgICAgICAgb3AgPSBjZmZfb3BfY2FsbGdzdWJyOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDMwOgotICAgICAgICAgIG9wID0gY2ZmX29wX3ZoY3VydmV0bzsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzMToKLSAgICAgICAgICBvcCA9IGNmZl9vcF9odmN1cnZldG87Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICglZClcbiIsIHYgKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIG9wID09IGNmZl9vcF91bmtub3duICkKLSAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvKiBpbiBNdWx0aXBsZSBNYXN0ZXIgQ0ZGcywgVDIgY2hhcnN0cmluZ3MgY2FuIGFwcGVhciBpbiAqLwotICAgICAgICAvKiBkaWN0aW9uYXJpZXMsIGJ1dCBzb21lIG9wZXJhdG9ycyBhcmUgcHJvaGliaXRlZCAgICAgICAqLwotICAgICAgICBpZiAoIGluX2RpY3QgKQotICAgICAgICB7Ci0gICAgICAgICAgc3dpdGNoICggb3AgKQotICAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbToKLSAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbToKLSAgICAgICAgICBjYXNlIGNmZl9vcF92bW92ZXRvOgotICAgICAgICAgIGNhc2UgY2ZmX29wX3JsaW5ldG86Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfaGxpbmV0bzoKLSAgICAgICAgICBjYXNlIGNmZl9vcF92bGluZXRvOgotICAgICAgICAgIGNhc2UgY2ZmX29wX3JyY3VydmV0bzoKLSAgICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbWhtOgotICAgICAgICAgIGNhc2UgY2ZmX29wX2hpbnRtYXNrOgotICAgICAgICAgIGNhc2UgY2ZmX29wX2NudHJtYXNrOgotICAgICAgICAgIGNhc2UgY2ZmX29wX3Jtb3ZldG86Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfaG1vdmV0bzoKLSAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbWhtOgotICAgICAgICAgIGNhc2UgY2ZmX29wX3JjdXJ2ZWxpbmU6Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfcmxpbmVjdXJ2ZToKLSAgICAgICAgICBjYXNlIGNmZl9vcF92dmN1cnZldG86Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfaGhjdXJ2ZXRvOgotICAgICAgICAgIGNhc2UgY2ZmX29wX3ZoY3VydmV0bzoKLSAgICAgICAgICBjYXNlIGNmZl9vcF9odmN1cnZldG86Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfaGZsZXg6Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfZmxleDoKLSAgICAgICAgICBjYXNlIGNmZl9vcF9oZmxleDE6Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfZmxleDE6Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfY2FsbHN1YnI6Ci0gICAgICAgICAgY2FzZSBjZmZfb3BfY2FsbGdzdWJyOgotICAgICAgICAgICAgZ290byBNTV9FcnJvcjsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjaGVjayBhcmd1bWVudHMgKi8KLSAgICAgICAgcmVxX2FyZ3MgPSBjZmZfYXJndW1lbnRfY291bnRzW29wXTsKLSAgICAgICAgaWYgKCByZXFfYXJncyAmIENGRl9DT1VOVF9DSEVDS19XSURUSCApCi0gICAgICAgIHsKLSAgICAgICAgICBpZiAoIG51bV9hcmdzID4gMCAmJiBkZWNvZGVyLT5yZWFkX3dpZHRoICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBJZiBgbm9taW5hbF93aWR0aCcgaXMgbm9uLXplcm8sIHRoZSBudW1iZXIgaXMgcmVhbGx5IGEgICAgICAqLwotICAgICAgICAgICAgLyogZGlmZmVyZW5jZSBhZ2FpbnN0IGBub21pbmFsX3dpZHRoJy4gIEVsc2UsIHRoZSBudW1iZXIgaGVyZSAgKi8KLSAgICAgICAgICAgIC8qIGlzIHRydWx5IGEgd2lkdGgsIG5vdCBhIGRpZmZlcmVuY2UgYWdhaW5zdCBgbm9taW5hbF93aWR0aCcuICovCi0gICAgICAgICAgICAvKiBJZiB0aGUgZm9udCBkb2VzIG5vdCBzZXQgYG5vbWluYWxfd2lkdGgnLCB0aGVuICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgLyogYG5vbWluYWxfd2lkdGgnIGRlZmF1bHRzIHRvIHplcm8sIGFuZCBzbyB3ZSBjYW4gc2V0ICAgICAgICAgKi8KLSAgICAgICAgICAgIC8qIGBnbHlwaF93aWR0aCcgdG8gYG5vbWluYWxfd2lkdGgnIHBsdXMgbnVtYmVyIG9uIHRoZSBzdGFjayAgICovCi0gICAgICAgICAgICAvKiAtLSBmb3IgZWl0aGVyIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBGVF9JbnQgIHNldF93aWR0aF9vazsKLQotCi0gICAgICAgICAgICBzd2l0Y2ggKCBvcCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIGNmZl9vcF9obW92ZXRvOgotICAgICAgICAgICAgY2FzZSBjZmZfb3Bfdm1vdmV0bzoKLSAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gbnVtX2FyZ3MgJiAyOwotICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBjZmZfb3BfaHN0ZW06Ci0gICAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbToKLSAgICAgICAgICAgIGNhc2UgY2ZmX29wX2hzdGVtaG06Ci0gICAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbWhtOgotICAgICAgICAgICAgY2FzZSBjZmZfb3Bfcm1vdmV0bzoKLSAgICAgICAgICAgIGNhc2UgY2ZmX29wX2hpbnRtYXNrOgotICAgICAgICAgICAgY2FzZSBjZmZfb3BfY250cm1hc2s6Ci0gICAgICAgICAgICAgIHNldF93aWR0aF9vayA9IG51bV9hcmdzICYgMTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgY2ZmX29wX2VuZGNoYXI6Ci0gICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgd2lkdGggc3BlY2lmaWVkIGZvciBlbmRjaGFyLCB3ZSBlaXRoZXIgaGF2ZSAqLwotICAgICAgICAgICAgICAvKiAxIGFyZ3VtZW50IG9yIDUgYXJndW1lbnRzLiAgV2UgbGlrZSB0byBhcmd1ZS4gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gaW5fZGljdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCAoIG51bV9hcmdzID09IDUgKSB8fCAoIG51bV9hcmdzID09IDEgKSApOwotICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gMDsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggc2V0X3dpZHRoX29rICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggPSBkZWNvZGVyLT5ub21pbmFsX3dpZHRoICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RhY2tbMF0gPj4gMTYgKTsKLQotICAgICAgICAgICAgICBpZiAoIGRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogd2Ugb25seSB3YW50IHRoZSBhZHZhbmNlIHdpZHRoOyBzdG9wIGhlcmUgKi8KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8qIENvbnN1bWVkIGFuIGFyZ3VtZW50LiAqLwotICAgICAgICAgICAgICBudW1fYXJncy0tOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIGRlY29kZXItPnJlYWRfd2lkdGggPSAwOwotICAgICAgICAgIHJlcV9hcmdzICAgICAgICAgICAgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVxX2FyZ3MgJj0gMHgwMDBGOwotICAgICAgICBpZiAoIG51bV9hcmdzIDwgcmVxX2FyZ3MgKQotICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OwotICAgICAgICBhcmdzICAgICAtPSByZXFfYXJnczsKLSAgICAgICAgbnVtX2FyZ3MgLT0gcmVxX2FyZ3M7Ci0KLSAgICAgICAgLyogQXQgdGhpcyBwb2ludCwgYGFyZ3MnIHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlICAqLwotICAgICAgICAvKiBvcGVyYW5kIGluIGNhc2UgYHJlcV9hcmdzJyBpc24ndCB6ZXJvLiAgT3RoZXJ3aXNlLCB3ZSBoYXZlICovCi0gICAgICAgIC8qIHRvIGFkanVzdCBgYXJncycgbWFudWFsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAvKiBOb3RlIHRoYXQgd2Ugb25seSBwb3AgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrIHdoaWNoIHdlICAgICovCi0gICAgICAgIC8qIHJlYWxseSBuZWVkIGFuZCBjYW4gZGlnZXN0IHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGluIGNhc2UgKi8KLSAgICAgICAgLyogb2Ygc3VwZXJmbHVvdXMgc3RhY2sgZWxlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgIHN3aXRjaCAoIG9wICkKLSAgICAgICAgewotICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbToKLSAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW06Ci0gICAgICAgIGNhc2UgY2ZmX29wX2hzdGVtaG06Ci0gICAgICAgIGNhc2UgY2ZmX29wX3ZzdGVtaG06Ci0gICAgICAgICAgLyogdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgYWx3YXlzIGV2ZW4gaGVyZSAqLwotICAgICAgICAgIEZUX1RSQUNFNCgoCi0gICAgICAgICAgICAgIG9wID09IGNmZl9vcF9oc3RlbSAgID8gIiBoc3RlbVxuIiAgIDoKLSAgICAgICAgICAgICggb3AgPT0gY2ZmX29wX3ZzdGVtICAgPyAiIHZzdGVtXG4iICAgOgotICAgICAgICAgICAgKCBvcCA9PSBjZmZfb3BfaHN0ZW1obSA/ICIgaHN0ZW1obVxuIiA6ICIgdnN0ZW1obVxuIiApICkgKSk7Ci0KLSAgICAgICAgICBpZiAoIGhpbnRlciApCi0gICAgICAgICAgICBoaW50ZXItPnN0ZW1zKCBoaW50ZXItPmhpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBvcCA9PSBjZmZfb3BfaHN0ZW0gfHwgb3AgPT0gY2ZmX29wX2hzdGVtaG0gKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9hcmdzIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgLSAoIG51bV9hcmdzICYgfjEgKSApOwotCi0gICAgICAgICAgZGVjb2Rlci0+bnVtX2hpbnRzICs9IG51bV9hcmdzIC8gMjsKLSAgICAgICAgICBhcmdzID0gc3RhY2s7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfaGludG1hc2s6Ci0gICAgICAgIGNhc2UgY2ZmX29wX2NudHJtYXNrOgotICAgICAgICAgIEZUX1RSQUNFNCgoIG9wID09IGNmZl9vcF9oaW50bWFzayA/ICIgaGludG1hc2siIDogIiBjbnRybWFzayIgKSk7Ci0KLSAgICAgICAgICAvKiBpbXBsZW1lbnQgdnN0ZW0gd2hlbiBuZWVkZWQgLS0gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIC8qIHRoZSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3Qgc2F5IGl0LCBidXQgdGhpcyBhbHNvIHdvcmtzICovCi0gICAgICAgICAgLyogd2l0aCB0aGUgJ2NudHJtYXNrJyBvcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIGlmICggbnVtX2FyZ3MgPiAwICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIGhpbnRlciApCi0gICAgICAgICAgICAgIGhpbnRlci0+c3RlbXMoIGhpbnRlci0+aGludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9hcmdzIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyAtICggbnVtX2FyZ3MgJiB+MSApICk7Ci0KLSAgICAgICAgICAgIGRlY29kZXItPm51bV9oaW50cyArPSBudW1fYXJncyAvIDI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogSW4gYSB2YWxpZCBjaGFyc3RyaW5nIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGJ5dGUgKi8KLSAgICAgICAgICAvKiBhZnRlciBgaGludG1hc2snIG9yIGBjbnRybWFzaycgKGUuZy4sIGZvciBhIGByZXR1cm4nICAqLwotICAgICAgICAgIC8qIGluc3RydWN0aW9uKS4gIEFkZGl0aW9uYWxseSwgdGhlcmUgbXVzdCBiZSBzcGFjZSBmb3IgICovCi0gICAgICAgICAgLyogYG51bV9oaW50cycgYml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgIGlmICggKCBpcCArICggKCBkZWNvZGVyLT5udW1faGludHMgKyA3ICkgPj4gMyApICkgPj0gbGltaXQgKQotICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7Ci0KLSAgICAgICAgICBpZiAoIGhpbnRlciApCi0gICAgICAgICAgewotICAgICAgICAgICAgaWYgKCBvcCA9PSBjZmZfb3BfaGludG1hc2sgKQotICAgICAgICAgICAgICBoaW50ZXItPmhpbnRtYXNrKCBoaW50ZXItPmhpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVjb2Rlci0+bnVtX2hpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICBoaW50ZXItPmNvdW50ZXIoIGhpbnRlci0+aGludHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVjb2Rlci0+bnVtX2hpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwICk7Ci0gICAgICAgICAgfQotCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9VSW50IG1hc2tieXRlOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgKG1hc2tieXRlczoiICkpOwotCi0gICAgICAgICAgICBmb3IgKCBtYXNrYnl0ZSA9IDA7Ci0gICAgICAgICAgICAgICAgICBtYXNrYnl0ZSA8IChGVF9VSW50KSggKCBkZWNvZGVyLT5udW1faGludHMgKyA3ICkgPj4gMyApOwotICAgICAgICAgICAgICAgICAgbWFza2J5dGUrKywgaXArKyApCi0gICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgMHglMDJYIiwgKmlwICkpOwotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiKVxuIiApKTsKLSAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgIGlwICs9ICggZGVjb2Rlci0+bnVtX2hpbnRzICsgNyApID4+IDM7Ci0jZW5kaWYKLSAgICAgICAgICBhcmdzID0gc3RhY2s7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3Bfcm1vdmV0bzoKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJtb3ZldG9cbiIgKSk7Ci0KLSAgICAgICAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7Ci0gICAgICAgICAgYnVpbGRlci0+cGF0aF9iZWd1biA9IDA7Ci0gICAgICAgICAgeCAgICs9IGFyZ3NbLTJdOwotICAgICAgICAgIHkgICArPSBhcmdzWy0xXTsKLSAgICAgICAgICBhcmdzID0gc3RhY2s7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3Bfdm1vdmV0bzoKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHZtb3ZldG9cbiIgKSk7Ci0KLSAgICAgICAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7Ci0gICAgICAgICAgYnVpbGRlci0+cGF0aF9iZWd1biA9IDA7Ci0gICAgICAgICAgeSAgICs9IGFyZ3NbLTFdOwotICAgICAgICAgIGFyZ3MgPSBzdGFjazsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9obW92ZXRvOgotICAgICAgICAgIEZUX1RSQUNFNCgoICIgaG1vdmV0b1xuIiApKTsKLQotICAgICAgICAgIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIGJ1aWxkZXIgKTsKLSAgICAgICAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMDsKLSAgICAgICAgICB4ICAgKz0gYXJnc1stMV07Ci0gICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3JsaW5ldG86Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBybGluZXRvXG4iICkpOwotCi0gICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICB8fAotICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgbnVtX2FyZ3MgLyAyICkgKQotICAgICAgICAgICAgZ290byBGYWlsOwotCi0gICAgICAgICAgaWYgKCBudW1fYXJncyA8IDIgKQotICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7Ci0KLSAgICAgICAgICBhcmdzIC09IG51bV9hcmdzICYgfjE7Ci0gICAgICAgICAgd2hpbGUgKCBhcmdzIDwgZGVjb2Rlci0+dG9wICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB4ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICB5ICs9IGFyZ3NbMV07Ci0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLSAgICAgICAgICAgIGFyZ3MgKz0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2hsaW5ldG86Ci0gICAgICAgIGNhc2UgY2ZmX29wX3ZsaW5ldG86Ci0gICAgICAgICAgewotICAgICAgICAgICAgRlRfSW50ICBwaGFzZSA9ICggb3AgPT0gY2ZmX29wX2hsaW5ldG8gKTsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCBvcCA9PSBjZmZfb3BfaGxpbmV0byA/ICIgaGxpbmV0b1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiIHZsaW5ldG9cbiIgKSk7Ci0KLSAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCAwICkKLSAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7Ci0KLSAgICAgICAgICAgIC8qIHRoZXJlIGV4aXN0IHN1YnNldHRlZCBmb250cyAoZm91bmQgaW4gUERGcykgKi8KLSAgICAgICAgICAgIC8qIHdoaWNoIGNhbGwgYGhsaW5ldG8nIHdpdGhvdXQgYXJndW1lbnRzICAgICAgKi8KLSAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPT0gMCApCi0gICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgfHwKLSAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgbnVtX2FyZ3MgKSAgICApCi0gICAgICAgICAgICAgIGdvdG8gRmFpbDsKLQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgICAgd2hpbGUgKCBhcmdzIDwgZGVjb2Rlci0+dG9wICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCBwaGFzZSApCi0gICAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgeSArPSBhcmdzWzBdOwotCi0gICAgICAgICAgICAgIGlmICggY2ZmX2J1aWxkZXJfYWRkX3BvaW50MSggYnVpbGRlciwgeCwgeSApICkKLSAgICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgICAgYXJncysrOwotICAgICAgICAgICAgICBwaGFzZSBePSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9ycmN1cnZldG86Ci0gICAgICAgICAgewotICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJyY3VydmV0b1xuIiApKTsKLQotICAgICAgICAgICAgaWYgKCBudW1fYXJncyA8IDYgKQotICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKLQotICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAtIG51bV9hcmdzICUgNjsKLQotICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8Ci0gICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIG5hcmdzIC8gMiApICAgKQotICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7Ci0gICAgICAgICAgICB3aGlsZSAoIGFyZ3MgPCBkZWNvZGVyLT50b3AgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICAgIHkgKz0gYXJnc1sxXTsKLSAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0gICAgICAgICAgICAgIHggKz0gYXJnc1syXTsKLSAgICAgICAgICAgICAgeSArPSBhcmdzWzNdOwotICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzRdOwotICAgICAgICAgICAgICB5ICs9IGFyZ3NbNV07Ci0gICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOwotICAgICAgICAgICAgICBhcmdzICs9IDY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcmdzID0gc3RhY2s7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3Z2Y3VydmV0bzoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9JbnQgIG5hcmdzOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgdnZjdXJ2ZXRvXG4iICkpOwotCi0gICAgICAgICAgICBpZiAoIG51bV9hcmdzIDwgNCApCi0gICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OwotCi0gICAgICAgICAgICAvKiBpZiBudW1fYXJncyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLwotICAgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgKi8KLQotICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAmIH4yOwotCi0gICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQotICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7Ci0KLSAgICAgICAgICAgIGlmICggbmFyZ3MgJiAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOwotICAgICAgICAgICAgICBhcmdzKys7Ci0gICAgICAgICAgICAgIG5hcmdzLS07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgMyAqICggbmFyZ3MgLyA0ICkgKSApCi0gICAgICAgICAgICAgIGdvdG8gRmFpbDsKLQotICAgICAgICAgICAgd2hpbGUgKCBhcmdzIDwgZGVjb2Rlci0+dG9wICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeSArPSBhcmdzWzBdOwotICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzFdOwotICAgICAgICAgICAgICB5ICs9IGFyZ3NbMl07Ci0gICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwotICAgICAgICAgICAgICB5ICs9IGFyZ3NbM107Ci0gICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOwotICAgICAgICAgICAgICBhcmdzICs9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcmdzID0gc3RhY2s7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2hoY3VydmV0bzoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9JbnQgIG5hcmdzOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaGhjdXJ2ZXRvXG4iICkpOwotCi0gICAgICAgICAgICBpZiAoIG51bV9hcmdzIDwgNCApCi0gICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OwotCi0gICAgICAgICAgICAvKiBpZiBudW1fYXJncyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLwotICAgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgKi8KLQotICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAmIH4yOwotCi0gICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQotICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7Ci0gICAgICAgICAgICBpZiAoIG5hcmdzICYgMSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHkgKz0gYXJnc1swXTsKLSAgICAgICAgICAgICAgYXJncysrOwotICAgICAgICAgICAgICBuYXJncy0tOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDMgKiAoIG5hcmdzIC8gNCApICkgKQotICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgIHdoaWxlICggYXJncyA8IGRlY29kZXItPnRvcCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHggKz0gYXJnc1swXTsKLSAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0gICAgICAgICAgICAgIHggKz0gYXJnc1sxXTsKLSAgICAgICAgICAgICAgeSArPSBhcmdzWzJdOwotICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzNdOwotICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLSAgICAgICAgICAgICAgYXJncyArPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF92aGN1cnZldG86Ci0gICAgICAgIGNhc2UgY2ZmX29wX2h2Y3VydmV0bzoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9JbnQgIHBoYXNlOwotICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCBvcCA9PSBjZmZfb3BfdmhjdXJ2ZXRvID8gIiB2aGN1cnZldG9cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiIGh2Y3VydmV0b1xuIiApKTsKLQotICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICkKLSAgICAgICAgICAgICAgZ290byBGYWlsOwotCi0gICAgICAgICAgICBpZiAoIG51bV9hcmdzIDwgNCApCi0gICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OwotCi0gICAgICAgICAgICAvKiBpZiBudW1fYXJncyBpc24ndCBvZiB0aGUgZm9ybSA4biwgOG4rMSwgOG4rNCwgb3IgOG4rNSwgKi8KLSAgICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBuYXJncyA9IG51bV9hcmdzICYgfjI7Ci0KLSAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7Ci0gICAgICAgICAgICBpZiAoIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsICggbmFyZ3MgLyA0ICkgKiAzICkgKQotICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKLQotICAgICAgICAgICAgcGhhc2UgPSAoIG9wID09IGNmZl9vcF9odmN1cnZldG8gKTsKLQotICAgICAgICAgICAgd2hpbGUgKCBuYXJncyA+PSA0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgbmFyZ3MgLT0gNDsKLSAgICAgICAgICAgICAgaWYgKCBwaGFzZSApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0gICAgICAgICAgICAgICAgeCArPSBhcmdzWzFdOwotICAgICAgICAgICAgICAgIHkgKz0gYXJnc1syXTsKLSAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLSAgICAgICAgICAgICAgICB5ICs9IGFyZ3NbM107Ci0gICAgICAgICAgICAgICAgaWYgKCBuYXJncyA9PSAxICkKLSAgICAgICAgICAgICAgICAgIHggKz0gYXJnc1s0XTsKLSAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0gICAgICAgICAgICAgICAgeCArPSBhcmdzWzFdOwotICAgICAgICAgICAgICAgIHkgKz0gYXJnc1syXTsKLSAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLSAgICAgICAgICAgICAgICB4ICs9IGFyZ3NbM107Ci0gICAgICAgICAgICAgICAgaWYgKCBuYXJncyA9PSAxICkKLSAgICAgICAgICAgICAgICAgIHkgKz0gYXJnc1s0XTsKLSAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBhcmdzICArPSA0OwotICAgICAgICAgICAgICBwaGFzZSBePSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9ybGluZWN1cnZlOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0ludCAgbnVtX2xpbmVzOwotICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJsaW5lY3VydmVcbiIgKSk7Ci0KLSAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCA4ICkKLSAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7Ci0KLSAgICAgICAgICAgIG5hcmdzICAgICA9IG51bV9hcmdzICYgfjE7Ci0gICAgICAgICAgICBudW1fbGluZXMgPSAoIG5hcmdzIC0gNiApIC8gMjsKLQotICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICAgfHwKLSAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgbnVtX2xpbmVzICsgMyApICkKLSAgICAgICAgICAgICAgZ290byBGYWlsOwotCi0gICAgICAgICAgICBhcmdzIC09IG5hcmdzOwotCi0gICAgICAgICAgICAvKiBmaXJzdCwgYWRkIHRoZSBsaW5lIHNlZ21lbnRzICovCi0gICAgICAgICAgICB3aGlsZSAoIG51bV9saW5lcyA+IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICAgIHkgKz0gYXJnc1sxXTsKLSAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7Ci0gICAgICAgICAgICAgIGFyZ3MgKz0gMjsKLSAgICAgICAgICAgICAgbnVtX2xpbmVzLS07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIHRoZW4gdGhlIGN1cnZlICovCi0gICAgICAgICAgICB4ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICB5ICs9IGFyZ3NbMV07Ci0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLSAgICAgICAgICAgIHggKz0gYXJnc1syXTsKLSAgICAgICAgICAgIHkgKz0gYXJnc1szXTsKLSAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwotICAgICAgICAgICAgeCArPSBhcmdzWzRdOwotICAgICAgICAgICAgeSArPSBhcmdzWzVdOwotICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7Ci0gICAgICAgICAgICBhcmdzID0gc3RhY2s7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3JjdXJ2ZWxpbmU6Ci0gICAgICAgICAgewotICAgICAgICAgICAgRlRfSW50ICBudW1fY3VydmVzOwotICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJjdXJ2ZWxpbmVcbiIgKSk7Ci0KLSAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCA4ICkKLSAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7Ci0KLSAgICAgICAgICAgIG5hcmdzICAgICAgPSBudW1fYXJncyAtIDI7Ci0gICAgICAgICAgICBuYXJncyAgICAgID0gbmFyZ3MgLSBuYXJncyAlIDYgKyAyOwotICAgICAgICAgICAgbnVtX2N1cnZlcyA9ICggbmFyZ3MgLSAyICkgLyA2OwotCi0gICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgICAgICAgIHx8Ci0gICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIG51bV9jdXJ2ZXMgKiAzICsgMiApICkKLSAgICAgICAgICAgICAgZ290byBGYWlsOwotCi0gICAgICAgICAgICBhcmdzIC09IG5hcmdzOwotCi0gICAgICAgICAgICAvKiBmaXJzdCwgYWRkIHRoZSBjdXJ2ZXMgKi8KLSAgICAgICAgICAgIHdoaWxlICggbnVtX2N1cnZlcyA+IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB4ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICAgIHkgKz0gYXJnc1sxXTsKLSAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0gICAgICAgICAgICAgIHggKz0gYXJnc1syXTsKLSAgICAgICAgICAgICAgeSArPSBhcmdzWzNdOwotICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzRdOwotICAgICAgICAgICAgICB5ICs9IGFyZ3NbNV07Ci0gICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOwotICAgICAgICAgICAgICBhcmdzICs9IDY7Ci0gICAgICAgICAgICAgIG51bV9jdXJ2ZXMtLTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogdGhlbiB0aGUgZmluYWwgbGluZSAqLwotICAgICAgICAgICAgeCArPSBhcmdzWzBdOwotICAgICAgICAgICAgeSArPSBhcmdzWzFdOwotICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7Ci0gICAgICAgICAgICBhcmdzID0gc3RhY2s7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4MToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9Qb3Mgc3RhcnRfeTsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4MVxuIiApKTsKLQotICAgICAgICAgICAgLyogYWRkaW5nIGZpdmUgbW9yZSBwb2ludHM6IDQgY29udHJvbCBwb2ludHMsIDEgb24tY3VydmUgcG9pbnQgKi8KLSAgICAgICAgICAgIC8qIC0tIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhlIHN0YXJ0IHBvaW50IGlmIGl0ICovCi0gICAgICAgICAgICAvKiBuZWVkcyB0byBiZSBhZGRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8Ci0gICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDYgKSAgICAgICAgICAgKQotICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgIC8qIHJlY29yZCB0aGUgc3RhcnRpbmcgcG9pbnQncyB5IHBvc2l0aW9uIGZvciBsYXRlciB1c2UgKi8KLSAgICAgICAgICAgIHN0YXJ0X3kgPSB5OwotCi0gICAgICAgICAgICAvKiBmaXJzdCBjb250cm9sIHBvaW50ICovCi0gICAgICAgICAgICB4ICs9IGFyZ3NbMF07Ci0gICAgICAgICAgICB5ICs9IGFyZ3NbMV07Ci0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLQotICAgICAgICAgICAgLyogc2Vjb25kIGNvbnRyb2wgcG9pbnQgKi8KLSAgICAgICAgICAgIHggKz0gYXJnc1syXTsKLSAgICAgICAgICAgIHkgKz0gYXJnc1szXTsKLSAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwotCi0gICAgICAgICAgICAvKiBqb2luIHBvaW50OyBvbiBjdXJ2ZSwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBsYXN0ICovCi0gICAgICAgICAgICAvKiBjb250cm9sIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB4ICs9IGFyZ3NbNF07Ci0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLQotICAgICAgICAgICAgLyogdGhpcmQgY29udHJvbCBwb2ludCwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBqb2luICovCi0gICAgICAgICAgICAvKiBwb2ludCdzIHktdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHggKz0gYXJnc1s1XTsKLSAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwotCi0gICAgICAgICAgICAvKiBmb3VydGggY29udHJvbCBwb2ludCAqLwotICAgICAgICAgICAgeCArPSBhcmdzWzZdOwotICAgICAgICAgICAgeSArPSBhcmdzWzddOwotICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0KLSAgICAgICAgICAgIC8qIGVuZGluZyBwb2ludCwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBzdGFydCAgICovCi0gICAgICAgICAgICB4ICs9IGFyZ3NbOF07Ci0gICAgICAgICAgICB5ICA9IHN0YXJ0X3k7Ci0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4OgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX1BvcyBzdGFydF95OwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaGZsZXhcbiIgKSk7Ci0KLSAgICAgICAgICAgIC8qIGFkZGluZyBzaXggbW9yZSBwb2ludHM7IDQgY29udHJvbCBwb2ludHMsIDIgb24tY3VydmUgcG9pbnRzICovCi0gICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgfHwKLSAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgNiApICAgICAgICAgICApCi0gICAgICAgICAgICAgIGdvdG8gRmFpbDsKLQotICAgICAgICAgICAgLyogcmVjb3JkIHRoZSBzdGFydGluZyBwb2ludCdzIHktcG9zaXRpb24gZm9yIGxhdGVyIHVzZSAqLwotICAgICAgICAgICAgc3RhcnRfeSA9IHk7Ci0KLSAgICAgICAgICAgIC8qIGZpcnN0IGNvbnRyb2wgcG9pbnQgKi8KLSAgICAgICAgICAgIHggKz0gYXJnc1swXTsKLSAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwotCi0gICAgICAgICAgICAvKiBzZWNvbmQgY29udHJvbCBwb2ludCAqLwotICAgICAgICAgICAgeCArPSBhcmdzWzFdOwotICAgICAgICAgICAgeSArPSBhcmdzWzJdOwotICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0KLSAgICAgICAgICAgIC8qIGpvaW4gcG9pbnQ7IG9uIGN1cnZlLCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIGxhc3QgKi8KLSAgICAgICAgICAgIC8qIGNvbnRyb2wgcG9pbnQncyB5LXZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHggKz0gYXJnc1szXTsKLSAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOwotCi0gICAgICAgICAgICAvKiB0aGlyZCBjb250cm9sIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIGpvaW4gKi8KLSAgICAgICAgICAgIC8qIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgeCArPSBhcmdzWzRdOwotICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0KLSAgICAgICAgICAgIC8qIGZvdXJ0aCBjb250cm9sIHBvaW50ICovCi0gICAgICAgICAgICB4ICs9IGFyZ3NbNV07Ci0gICAgICAgICAgICB5ICA9IHN0YXJ0X3k7Ci0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKLQotICAgICAgICAgICAgLyogZW5kaW5nIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0IHBvaW50J3MgKi8KLSAgICAgICAgICAgIC8qIHktdmFsdWUgLS0gd2UgZG9uJ3QgYWRkIHRoaXMgcG9pbnQsIHRob3VnaCAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICB4ICs9IGFyZ3NbNl07Ci0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgIGNhc2UgY2ZmX29wX2ZsZXgxOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX1BvcyAgICAgc3RhcnRfeCwgc3RhcnRfeTsgLyogcmVjb3JkIHN0YXJ0IHgsIHkgdmFsdWVzIGZvciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbHRlciB1c2UgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBGVF9GaXhlZCAgIGR4ID0gMCwgZHkgPSAwOyAgIC8qIHVzZWQgaW4gaG9yaXpvbnRhbC92ZXJ0aWNhbCAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWxnb3JpdGhtIGJlbG93ICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgRlRfSW50ICAgICBob3Jpem9udGFsLCBjb3VudDsKLSAgICAgICAgICAgIEZUX0ZpeGVkKiAgdGVtcDsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGZsZXgxXG4iICkpOwotCi0gICAgICAgICAgICAvKiBhZGRpbmcgc2l4IG1vcmUgcG9pbnRzOyA0IGNvbnRyb2wgcG9pbnRzLCAyIG9uLWN1cnZlIHBvaW50cyAqLwotICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8Ci0gICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDYgKSAgICAgICAgICAgKQotICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgIC8qIHJlY29yZCB0aGUgc3RhcnRpbmcgcG9pbnQncyB4LCB5IHBvc2l0aW9uIGZvciBsYXRlciB1c2UgKi8KLSAgICAgICAgICAgIHN0YXJ0X3ggPSB4OwotICAgICAgICAgICAgc3RhcnRfeSA9IHk7Ci0KLSAgICAgICAgICAgIC8qIFhYWDogZmlndXJlIG91dCB3aGV0aGVyIHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgYSBob3Jpem9udGFsICovCi0gICAgICAgICAgICAvKiAgICAgIG9yIHZlcnRpY2FsIGZsZXg7IHRoZSBUeXBlIDIgc3BlY2lmaWNhdGlvbiBpcyB2YWd1ZS4uLiAqLwotCi0gICAgICAgICAgICB0ZW1wID0gYXJnczsKLQotICAgICAgICAgICAgLyogZ3JhYiB1cCB0byB0aGUgbGFzdCBhcmd1bWVudCAqLwotICAgICAgICAgICAgZm9yICggY291bnQgPSA1OyBjb3VudCA+IDA7IGNvdW50LS0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBkeCArPSB0ZW1wWzBdOwotICAgICAgICAgICAgICBkeSArPSB0ZW1wWzFdOwotICAgICAgICAgICAgICB0ZW1wICs9IDI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggZHggPCAwICkKLSAgICAgICAgICAgICAgZHggPSAtZHg7Ci0gICAgICAgICAgICBpZiAoIGR5IDwgMCApCi0gICAgICAgICAgICAgIGR5ID0gLWR5OwotCi0gICAgICAgICAgICAvKiBzdHJhbmdlIHRlc3QsIGJ1dCBoZXJlIGl0IGlzLi4uICovCi0gICAgICAgICAgICBob3Jpem9udGFsID0gKCBkeCA+IGR5ICk7Ci0KLSAgICAgICAgICAgIGZvciAoIGNvdW50ID0gNTsgY291bnQgPiAwOyBjb3VudC0tICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOwotICAgICAgICAgICAgICB5ICs9IGFyZ3NbMV07Ci0gICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQm9vbCkoIGNvdW50ID09IDMgKSApOwotICAgICAgICAgICAgICBhcmdzICs9IDI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGlzIGxhc3Qgb3BlcmFuZCBhbiB4LSBvciB5LWRlbHRhPyAqLwotICAgICAgICAgICAgaWYgKCBob3Jpem9udGFsICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOwotICAgICAgICAgICAgICB5ICA9IHN0YXJ0X3k7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHggID0gc3RhcnRfeDsKLSAgICAgICAgICAgICAgeSArPSBhcmdzWzBdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKLQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgIH0KLQotICAgICAgICBjYXNlIGNmZl9vcF9mbGV4OgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX1VJbnQgIGNvdW50OwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZmxleFxuIiApKTsKLQotICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8Ci0gICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDYgKSAgICAgICAgICAgKQotICAgICAgICAgICAgICBnb3RvIEZhaWw7Ci0KLSAgICAgICAgICAgIGZvciAoIGNvdW50ID0gNjsgY291bnQgPiAwOyBjb3VudC0tICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeCArPSBhcmdzWzBdOwotICAgICAgICAgICAgICB5ICs9IGFyZ3NbMV07Ci0gICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQm9vbCkoIGNvdW50ID09IDQgfHwgY291bnQgPT0gMSApICk7Ci0gICAgICAgICAgICAgIGFyZ3MgKz0gMjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9zZWFjOgotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzZWFjXG4iICkpOwotCi0gICAgICAgICAgICBlcnJvciA9IGNmZl9vcGVyYXRvcl9zZWFjKCBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpKCBhcmdzWzNdID4+IDE2ICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KSggYXJnc1s0XSA+PiAxNiApICk7Ci0KLSAgICAgICAgICAgIC8qIGFkZCBjdXJyZW50IG91dGxpbmUgdG8gdGhlIGdseXBoIHNsb3QgKi8KLSAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyX0FkZCggYnVpbGRlci0+bG9hZGVyICk7Ci0KLSAgICAgICAgICAgIC8qIHJldHVybiBub3chICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwotICAgICAgICAgICAgcmV0dXJuIGVycm9yOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2VuZGNoYXI6Ci0gICAgICAgICAgLyogaW4gZGljdGlvbmFyaWVzLCBgZW5kY2hhcicgc2ltcGx5IGluZGljYXRlcyBlbmQgb2YgZGF0YSAqLwotICAgICAgICAgIGlmICggaW5fZGljdCApCi0gICAgICAgICAgICByZXR1cm4gZXJyb3I7Ci0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIGVuZGNoYXJcbiIgKSk7Ci0KLSAgICAgICAgICAvKiBXZSBhcmUgZ29pbmcgdG8gZW11bGF0ZSB0aGUgc2VhYyBvcGVyYXRvci4gKi8KLSAgICAgICAgICBpZiAoIG51bV9hcmdzID49IDQgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFNhdmUgZ2x5cGggd2lkdGggc28gdGhhdCB0aGUgc3ViZ2x5cGhzIGRvbid0IG92ZXJ3cml0ZSBpdC4gKi8KLSAgICAgICAgICAgIEZUX1BvcyAgZ2x5cGhfd2lkdGggPSBkZWNvZGVyLT5nbHlwaF93aWR0aDsKLQotCi0gICAgICAgICAgICBlcnJvciA9IGNmZl9vcGVyYXRvcl9zZWFjKCBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEwsIGFyZ3NbLTRdLCBhcmdzWy0zXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpKCBhcmdzWy0yXSA+PiAxNiApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0ludCkoIGFyZ3NbLTFdID4+IDE2ICkgKTsKLQotICAgICAgICAgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggPSBnbHlwaF93aWR0aDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIGJ1aWxkZXIgKTsKLQotICAgICAgICAgICAgLyogY2xvc2UgaGludHMgcmVjb3JkaW5nIHNlc3Npb24gKi8KLSAgICAgICAgICAgIGlmICggaGludGVyICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgaWYgKCBoaW50ZXItPmNsb3NlKCBoaW50ZXItPmhpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWJ1aWxkZXItPmN1cnJlbnQtPm5fcG9pbnRzICkgKQotICAgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOwotCi0gICAgICAgICAgICAgIC8qIGFwcGx5IGhpbnRzIHRvIHRoZSBsb2FkZWQgZ2x5cGggb3V0bGluZSBub3cgKi8KLSAgICAgICAgICAgICAgZXJyb3IgPSBoaW50ZXItPmFwcGx5KCBoaW50ZXItPmhpbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmN1cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBTSF9HbG9iYWxzKWJ1aWxkZXItPmhpbnRzX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+aGludF9tb2RlICk7Ci0gICAgICAgICAgICAgIGlmICggZXJyb3IgKQotICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogYWRkIGN1cnJlbnQgb3V0bGluZSB0byB0aGUgZ2x5cGggc2xvdCAqLwotICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXJfQWRkKCBidWlsZGVyLT5sb2FkZXIgKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiByZXR1cm4gbm93ISAqLwotICAgICAgICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7Ci0gICAgICAgICAgcmV0dXJuIGVycm9yOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2FiczoKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFic1xuIiApKTsKLQotICAgICAgICAgIGlmICggYXJnc1swXSA8IDAgKQotICAgICAgICAgICAgYXJnc1swXSA9IC1hcmdzWzBdOwotICAgICAgICAgIGFyZ3MrKzsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9hZGQ6Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBhZGRcbiIgKSk7Ci0KLSAgICAgICAgICBhcmdzWzBdICs9IGFyZ3NbMV07Ci0gICAgICAgICAgYXJncysrOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3N1YjoKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHN1YlxuIiApKTsKLQotICAgICAgICAgIGFyZ3NbMF0gLT0gYXJnc1sxXTsKLSAgICAgICAgICBhcmdzKys7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfZGl2OgotICAgICAgICAgIEZUX1RSQUNFNCgoICIgZGl2XG4iICkpOwotCi0gICAgICAgICAgYXJnc1swXSA9IEZUX0RpdkZpeCggYXJnc1swXSwgYXJnc1sxXSApOwotICAgICAgICAgIGFyZ3MrKzsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9uZWc6Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBuZWdcbiIgKSk7Ci0KLSAgICAgICAgICBhcmdzWzBdID0gLWFyZ3NbMF07Ci0gICAgICAgICAgYXJncysrOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3JhbmRvbToKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJhbmRvbVxuIiApKTsKLQotICAgICAgICAgIC8qIG9ubHkgdXNlIHRoZSBsb3dlciAxNiBiaXRzIG9mIGByYW5kb20nICAqLwotICAgICAgICAgIC8qIHRvIGdlbmVyYXRlIGEgbnVtYmVyIGluIHRoZSByYW5nZSAoMDsxXSAqLwotICAgICAgICAgIGFyZ3NbMF0gPSAoRlRfRml4ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgKCAoIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cmFuZG9tICYgMHhGRkZGICkgKyAxICk7Ci0gICAgICAgICAgYXJncysrOwotCi0gICAgICAgICAgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gPQotICAgICAgICAgICAgY2ZmX3JhbmRvbSggZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gKTsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9tdWw6Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBtdWxcbiIgKSk7Ci0KLSAgICAgICAgICBhcmdzWzBdID0gRlRfTXVsRml4KCBhcmdzWzBdLCBhcmdzWzFdICk7Ci0gICAgICAgICAgYXJncysrOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3NxcnQ6Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBzcXJ0XG4iICkpOwotCi0gICAgICAgICAgaWYgKCBhcmdzWzBdID4gMCApCi0gICAgICAgICAgewotICAgICAgICAgICAgRlRfRml4ZWQgIHJvb3QgPSBhcmdzWzBdOwotICAgICAgICAgICAgRlRfRml4ZWQgIG5ld19yb290OwotCi0KLSAgICAgICAgICAgIGZvciAoOzspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIG5ld19yb290ID0gKCByb290ICsgRlRfRGl2Rml4KCBhcmdzWzBdLCByb290ICkgKyAxICkgPj4gMTsKLSAgICAgICAgICAgICAgaWYgKCBuZXdfcm9vdCA9PSByb290ICkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgcm9vdCA9IG5ld19yb290OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJnc1swXSA9IG5ld19yb290OwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcmdzWzBdID0gMDsKLSAgICAgICAgICBhcmdzKys7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfZHJvcDoKLSAgICAgICAgICAvKiBub3RoaW5nICovCi0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBkcm9wXG4iICkpOwotCi0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfZXhjaDoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9GaXhlZCAgdG1wOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZXhjaFxuIiApKTsKLQotICAgICAgICAgICAgdG1wICAgICA9IGFyZ3NbMF07Ci0gICAgICAgICAgICBhcmdzWzBdID0gYXJnc1sxXTsKLSAgICAgICAgICAgIGFyZ3NbMV0gPSB0bXA7Ci0gICAgICAgICAgICBhcmdzICAgKz0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfaW5kZXg6Ci0gICAgICAgICAgewotICAgICAgICAgICAgRlRfSW50ICBpZHggPSAoRlRfSW50KSggYXJnc1swXSA+PiAxNiApOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaW5kZXhcbiIgKSk7Ci0KLSAgICAgICAgICAgIGlmICggaWR4IDwgMCApCi0gICAgICAgICAgICAgIGlkeCA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmICggaWR4ID4gbnVtX2FyZ3MgLSAyICkKLSAgICAgICAgICAgICAgaWR4ID0gbnVtX2FyZ3MgLSAyOwotICAgICAgICAgICAgYXJnc1swXSA9IGFyZ3NbLSggaWR4ICsgMSApXTsKLSAgICAgICAgICAgIGFyZ3MrKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3Bfcm9sbDoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9JbnQgIGNvdW50ID0gKEZUX0ludCkoIGFyZ3NbMF0gPj4gMTYgKTsKLSAgICAgICAgICAgIEZUX0ludCAgaWR4ICAgPSAoRlRfSW50KSggYXJnc1sxXSA+PiAxNiApOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcm9sbFxuIiApKTsKLQotICAgICAgICAgICAgaWYgKCBjb3VudCA8PSAwICkKLSAgICAgICAgICAgICAgY291bnQgPSAxOwotCi0gICAgICAgICAgICBhcmdzIC09IGNvdW50OwotICAgICAgICAgICAgaWYgKCBhcmdzIDwgc3RhY2sgKQotICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKLQotICAgICAgICAgICAgaWYgKCBpZHggPj0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHdoaWxlICggaWR4ID4gMCApCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGVF9GaXhlZCAgdG1wID0gYXJnc1tjb3VudCAtIDFdOwotICAgICAgICAgICAgICAgIEZUX0ludCAgICBpOwotCi0KLSAgICAgICAgICAgICAgICBmb3IgKCBpID0gY291bnQgLSAyOyBpID49IDA7IGktLSApCi0gICAgICAgICAgICAgICAgICBhcmdzW2kgKyAxXSA9IGFyZ3NbaV07Ci0gICAgICAgICAgICAgICAgYXJnc1swXSA9IHRtcDsKLSAgICAgICAgICAgICAgICBpZHgtLTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICB3aGlsZSAoIGlkeCA8IDAgKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRlRfRml4ZWQgIHRtcCA9IGFyZ3NbMF07Ci0gICAgICAgICAgICAgICAgRlRfSW50ICAgIGk7Ci0KLQotICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQgLSAxOyBpKysgKQotICAgICAgICAgICAgICAgICAgYXJnc1tpXSA9IGFyZ3NbaSArIDFdOwotICAgICAgICAgICAgICAgIGFyZ3NbY291bnQgLSAxXSA9IHRtcDsKLSAgICAgICAgICAgICAgICBpZHgrKzsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJncyArPSBjb3VudDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfZHVwOgotICAgICAgICAgIEZUX1RSQUNFNCgoICIgZHVwXG4iICkpOwotCi0gICAgICAgICAgYXJnc1sxXSA9IGFyZ3NbMF07Ci0gICAgICAgICAgYXJncyArPSAyOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3B1dDoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9GaXhlZCAgdmFsID0gYXJnc1swXTsKLSAgICAgICAgICAgIEZUX0ludCAgICBpZHggPSAoRlRfSW50KSggYXJnc1sxXSA+PiAxNiApOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcHV0XG4iICkpOwotCi0gICAgICAgICAgICAvKiB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiBiZWZvcmUgdmVyc2lvbiAxNi1NYXJjaC0yMDAwICovCi0gICAgICAgICAgICAvKiBkaWRuJ3QgZ2l2ZSBhIGhhcmQtY29kZWQgc2l6ZSBsaW1pdCBvZiB0aGUgdGVtcG9yYXJ5ICovCi0gICAgICAgICAgICAvKiBzdG9yYWdlIGFycmF5OyBpbnN0ZWFkLCBhbiBhcmd1bWVudCBvZiB0aGUgICAgICAgICAgICovCi0gICAgICAgICAgICAvKiBgTXVsdGlwbGVNYXN0ZXInIG9wZXJhdG9yIHNldCB0aGUgc2l6ZSAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIGlkeCA+PSAwICYmIGlkeCA8IENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgKQotICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGNoYXJbaWR4XSA9IHZhbDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfZ2V0OgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0ludCAgICBpZHggPSAoRlRfSW50KSggYXJnc1swXSA+PiAxNiApOwotICAgICAgICAgICAgRlRfRml4ZWQgIHZhbCA9IDA7Ci0KLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBnZXRcbiIgKSk7Ci0KLSAgICAgICAgICAgIGlmICggaWR4ID49IDAgJiYgaWR4IDwgQ0ZGX01BWF9UUkFOU19FTEVNRU5UUyApCi0gICAgICAgICAgICAgIHZhbCA9IGRlY29kZXItPmJ1aWxkY2hhcltpZHhdOwotCi0gICAgICAgICAgICBhcmdzWzBdID0gdmFsOwotICAgICAgICAgICAgYXJncysrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9zdG9yZToKLSAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIHdhcyByZW1vdmVkIGZyb20gdGhlIFR5cGUyIHNwZWNpZmljYXRpb24gKi8KLSAgICAgICAgICAvKiBpbiB2ZXJzaW9uIDE2LU1hcmNoLTIwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgIC8qIHNpbmNlIHdlIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgaW50ZXJwb2xhdGlvbiBvZiBtdWx0aXBsZSAqLwotICAgICAgICAgIC8qIG1hc3RlciBmb250cywgdGhpcyBpcyBhIG5vLW9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3RvcmVcbiIpKTsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9sb2FkOgotICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igd2FzIHJlbW92ZWQgZnJvbSB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiAqLwotICAgICAgICAgIC8qIGluIHZlcnNpb24gMTYtTWFyY2gtMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0ludCAgcmVnX2lkeCA9IChGVF9JbnQpYXJnc1swXTsKLSAgICAgICAgICAgIEZUX0ludCAgaWR4ICAgICA9IChGVF9JbnQpYXJnc1sxXTsKLSAgICAgICAgICAgIEZUX0ludCAgY291bnQgICA9IChGVF9JbnQpYXJnc1syXTsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGxvYWRcbiIgKSk7Ci0KLSAgICAgICAgICAgIC8qIHNpbmNlIHdlIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgaW50ZXJwb2xhdGlvbiBvZiBtdWx0aXBsZSAqLwotICAgICAgICAgICAgLyogbWFzdGVyIGZvbnRzLCB3ZSBzdG9yZSBhIHZlY3RvciBbMSAwIDAgLi4uXSBpbiB0aGUgICAgICAgICovCi0gICAgICAgICAgICAvKiB0ZW1wb3Jhcnkgc3RvcmFnZSBhcnJheSByZWdhcmRsZXNzIG9mIHRoZSBSZWdpc3RyeSBpbmRleCAgKi8KLSAgICAgICAgICAgIGlmICggcmVnX2lkeCA+PSAwICYmIHJlZ19pZHggPD0gMiAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICBpZHggPj0gMCAmJiBpZHggPCBDRkZfTUFYX1RSQU5TX0VMRU1FTlRTICYmCi0gICAgICAgICAgICAgICAgIGNvdW50ID49IDAgJiYgY291bnQgPD0gbnVtX2F4ZXMgICAgICAgICAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGVF9JbnQgIGVuZCwgaTsKLQotCi0gICAgICAgICAgICAgIGVuZCA9IEZUX01JTiggaWR4ICsgY291bnQsIENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgKTsKLQotICAgICAgICAgICAgICBpZiAoIGlkeCA8IGVuZCApCi0gICAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRjaGFyW2lkeF0gPSAxIDw8IDE2OwotCi0gICAgICAgICAgICAgIGZvciAoIGkgPSBpZHggKyAxOyBpIDwgZW5kOyBpKysgKQotICAgICAgICAgICAgICAgIGRlY29kZXItPmJ1aWxkY2hhcltpXSA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2JsZW5kOgotICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igd2FzIHJlbW92ZWQgZnJvbSB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiAqLwotICAgICAgICAgIC8qIGluIHZlcnNpb24gMTYtTWFyY2gtMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0ludCAgbnVtX3Jlc3VsdHMgPSAoRlRfSW50KSggYXJnc1swXSA+PiAxNiApOwotCi0KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYmxlbmRcbiIgKSk7Ci0KLSAgICAgICAgICAgIGlmICggbnVtX3Jlc3VsdHMgPCAwICkKLSAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7Ci0KLSAgICAgICAgICAgIGlmICggbnVtX3Jlc3VsdHMgKiAoRlRfSW50KW51bV9kZXNpZ25zID4gbnVtX2FyZ3MgKQotICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKLQotICAgICAgICAgICAgLyogc2luY2Ugd2UgY3VycmVudGx5IGRvbid0IGhhbmRsZSBpbnRlcnBvbGF0aW9uIG9mIG11bHRpcGxlICovCi0gICAgICAgICAgICAvKiBtYXN0ZXIgZm9udHMsIHJldHVybiB0aGUgYG51bV9yZXN1bHRzJyB2YWx1ZXMgb2YgdGhlICAgICAgKi8KLSAgICAgICAgICAgIC8qIGZpcnN0IG1hc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYXJncyAgICAgLT0gbnVtX3Jlc3VsdHMgKiAoIG51bV9kZXNpZ25zIC0gMSApOwotICAgICAgICAgICAgbnVtX2FyZ3MgLT0gbnVtX3Jlc3VsdHMgKiAoIG51bV9kZXNpZ25zIC0gMSApOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9kb3RzZWN0aW9uOgotICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3IgaXMgZGVwcmVjYXRlZCBhbmQgaWdub3JlZCBieSB0aGUgcGFyc2VyICovCi0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBkb3RzZWN0aW9uXG4iICkpOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2Nsb3NlcGF0aDoKLSAgICAgICAgICAvKiB0aGlzIGlzIGFuIGludmFsaWQgVHlwZSAyIG9wZXJhdG9yOyBob3dldmVyLCB0aGVyZSAgICAgICAgKi8KLSAgICAgICAgICAvKiBleGlzdCBmb250cyB3aGljaCBhcmUgaW5jb3JyZWN0bHkgY29udmVydGVkIGZyb20gcHJvYmFibHkgKi8KLSAgICAgICAgICAvKiBUeXBlIDEgdG8gQ0ZGLCBhbmQgc29tZSBwYXJzZXJzIHNlZW0gdG8gYWNjZXB0IGl0ICAgICAgICAgKi8KLQotICAgICAgICAgIEZUX1RSQUNFNCgoICIgY2xvc2VwYXRoIChpbnZhbGlkIG9wKVxuIiApKTsKLQotICAgICAgICAgIGFyZ3MgPSBzdGFjazsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9oc2J3OgotICAgICAgICAgIC8qIHRoaXMgaXMgYW4gaW52YWxpZCBUeXBlIDIgb3BlcmF0b3I7IGhvd2V2ZXIsIHRoZXJlICAgICAgICAqLwotICAgICAgICAgIC8qIGV4aXN0IGZvbnRzIHdoaWNoIGFyZSBpbmNvcnJlY3RseSBjb252ZXJ0ZWQgZnJvbSBwcm9iYWJseSAqLwotICAgICAgICAgIC8qIFR5cGUgMSB0byBDRkYsIGFuZCBzb21lIHBhcnNlcnMgc2VlbSB0byBhY2NlcHQgaXQgICAgICAgICAqLwotCi0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBoc2J3IChpbnZhbGlkIG9wKVxuIiApKTsKLQotICAgICAgICAgIGRlY29kZXItPmdseXBoX3dpZHRoID0gZGVjb2Rlci0+bm9taW5hbF93aWR0aCArICggYXJnc1sxXSA+PiAxNiApOwotCi0gICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueCA9IGFyZ3NbMF07Ci0gICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueSA9IDA7Ci0KLSAgICAgICAgICB4ICAgID0gZGVjb2Rlci0+YnVpbGRlci5wb3NfeCArIGFyZ3NbMF07Ci0gICAgICAgICAgeSAgICA9IGRlY29kZXItPmJ1aWxkZXIucG9zX3k7Ci0gICAgICAgICAgYXJncyA9IHN0YWNrOwotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX3NidzoKLSAgICAgICAgICAvKiB0aGlzIGlzIGFuIGludmFsaWQgVHlwZSAyIG9wZXJhdG9yOyBob3dldmVyLCB0aGVyZSAgICAgICAgKi8KLSAgICAgICAgICAvKiBleGlzdCBmb250cyB3aGljaCBhcmUgaW5jb3JyZWN0bHkgY29udmVydGVkIGZyb20gcHJvYmFibHkgKi8KLSAgICAgICAgICAvKiBUeXBlIDEgdG8gQ0ZGLCBhbmQgc29tZSBwYXJzZXJzIHNlZW0gdG8gYWNjZXB0IGl0ICAgICAgICAgKi8KLQotICAgICAgICAgIEZUX1RSQUNFNCgoICIgc2J3IChpbnZhbGlkIG9wKVxuIiApKTsKLQotICAgICAgICAgIGRlY29kZXItPmdseXBoX3dpZHRoID0gZGVjb2Rlci0+bm9taW5hbF93aWR0aCArICggYXJnc1syXSA+PiAxNiApOwotCi0gICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueCA9IGFyZ3NbMF07Ci0gICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueSA9IGFyZ3NbMV07Ci0KLSAgICAgICAgICB4ICAgID0gZGVjb2Rlci0+YnVpbGRlci5wb3NfeCArIGFyZ3NbMF07Ci0gICAgICAgICAgeSAgICA9IGRlY29kZXItPmJ1aWxkZXIucG9zX3kgKyBhcmdzWzFdOwotICAgICAgICAgIGFyZ3MgPSBzdGFjazsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9zZXRjdXJyZW50cG9pbnQ6Ci0gICAgICAgICAgLyogdGhpcyBpcyBhbiBpbnZhbGlkIFR5cGUgMiBvcGVyYXRvcjsgaG93ZXZlciwgdGhlcmUgICAgICAgICovCi0gICAgICAgICAgLyogZXhpc3QgZm9udHMgd2hpY2ggYXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCBmcm9tIHByb2JhYmx5ICovCi0gICAgICAgICAgLyogVHlwZSAxIHRvIENGRiwgYW5kIHNvbWUgcGFyc2VycyBzZWVtIHRvIGFjY2VwdCBpdCAgICAgICAgICovCi0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNldGN1cnJlbnRwb2ludCAoaW52YWxpZCBvcClcbiIgKSk7Ci0KLSAgICAgICAgICB4ICAgID0gZGVjb2Rlci0+YnVpbGRlci5wb3NfeCArIGFyZ3NbMF07Ci0gICAgICAgICAgeSAgICA9IGRlY29kZXItPmJ1aWxkZXIucG9zX3kgKyBhcmdzWzFdOwotICAgICAgICAgIGFyZ3MgPSBzdGFjazsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9jYWxsb3RoZXJzdWJyOgotICAgICAgICAgIC8qIHRoaXMgaXMgYW4gaW52YWxpZCBUeXBlIDIgb3BlcmF0b3I7IGhvd2V2ZXIsIHRoZXJlICAgICAgICAqLwotICAgICAgICAgIC8qIGV4aXN0IGZvbnRzIHdoaWNoIGFyZSBpbmNvcnJlY3RseSBjb252ZXJ0ZWQgZnJvbSBwcm9iYWJseSAqLwotICAgICAgICAgIC8qIFR5cGUgMSB0byBDRkYsIGFuZCBzb21lIHBhcnNlcnMgc2VlbSB0byBhY2NlcHQgaXQgICAgICAgICAqLwotCi0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsb3RoZXJzdWJyIChpbnZhbGlkIG9wKVxuIiApKTsKLQotICAgICAgICAgIC8qIHN1YnNlcXVlbnQgYHBvcCcgb3BlcmFuZHMgc2hvdWxkIGFkZCB0aGUgYXJndW1lbnRzLCAgICAgICAqLwotICAgICAgICAgIC8qIHRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIGRlc2NyaWJlZCBmb3IgYHVua25vd24nIG90aGVyICAqLwotICAgICAgICAgIC8qIHN1YnJvdXRpbmVzIGluIHRoZSBUeXBlMSBzcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIC8qIFhYWCBGaXggcmV0dXJuIGFyZ3VtZW50cyAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLiAgICAgICAgICAqLwotICAgICAgICAgIGFyZ3MgLT0gMiArICggYXJnc1stMl0gPj4gMTYgKTsKLSAgICAgICAgICBpZiAoIGFyZ3MgPCBzdGFjayApCi0gICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9wb3A6Ci0gICAgICAgICAgLyogdGhpcyBpcyBhbiBpbnZhbGlkIFR5cGUgMiBvcGVyYXRvcjsgaG93ZXZlciwgdGhlcmUgICAgICAgICovCi0gICAgICAgICAgLyogZXhpc3QgZm9udHMgd2hpY2ggYXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCBmcm9tIHByb2JhYmx5ICovCi0gICAgICAgICAgLyogVHlwZSAxIHRvIENGRiwgYW5kIHNvbWUgcGFyc2VycyBzZWVtIHRvIGFjY2VwdCBpdCAgICAgICAgICovCi0KLSAgICAgICAgICBGVF9UUkFDRTQoKCAiIHBvcCAoaW52YWxpZCBvcClcbiIgKSk7Ci0KLSAgICAgICAgICAvKiBYWFggSW5jcmVhc2luZyBgYXJncycgaXMgd3Jvbmc6IEFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgKi8KLSAgICAgICAgICAvKiBgcG9wJ3Mgd2UgZ2V0IGEgc3RhY2sgb3ZlcmZsb3cuICBSZWFzb24gZm9yIGRvaW5nIGl0IGlzICAgKi8KLSAgICAgICAgICAvKiBjb2RlIGxpa2UgdGhpcyAoYWN0dWFsbHkgZm91bmQgaW4gYSBDRkYgZm9udCk6ICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgIDE3IDEgMyBjYWxsb3RoZXJzdWJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgIHBvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgIGNhbGxzdWJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiBTaW5jZSB3ZSBoYW5kbGUgYGNhbGxvdGhlcnN1YnInIGFzIGEgbm8tb3AsIGFuZCAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiBgY2FsbHN1YnInIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgYHBvcCcgY2FuJ3QgYmUgYSAgKi8KLSAgICAgICAgICAvKiBuby1vcCB0b28gYXMgaXQgYmFzaWNhbGx5IHNob3VsZCBiZS4gICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAvKiBUaGUgcmlnaHQgc29sdXRpb24gd291bGQgYmUgdG8gcHJvdmlkZSByZWFsIHN1cHBvcnQgZm9yICAgKi8KLSAgICAgICAgICAvKiBgY2FsbG90aGVyc3VicicgYXMgZG9uZSBpbiBgdDFkZWNvZGUuYycsIGhvd2V2ZXIsIGdpdmVuICAgKi8KLSAgICAgICAgICAvKiB0aGUgZmFjdCB0aGF0IENGRiBmb250cyB3aXRoIGBwb3AnIGFyZSBpbnZhbGlkLCBpdCBpcyAgICAgKi8KLSAgICAgICAgICAvKiBxdWVzdGlvbmFibGUgd2hldGhlciBpdCBpcyB3b3J0aCB0aGUgdGltZS4gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICBhcmdzKys7Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfYW5kOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gKCBhcmdzWzBdICYmIGFyZ3NbMV0gKTsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFuZFxuIiApKTsKLQotICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7Ci0gICAgICAgICAgICBhcmdzKys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX29yOgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gKCBhcmdzWzBdIHx8IGFyZ3NbMV0gKTsKLQotCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG9yXG4iICkpOwotCi0gICAgICAgICAgICBhcmdzWzBdID0gY29uZCA/IDB4MTAwMDBMIDogMDsKLSAgICAgICAgICAgIGFyZ3MrKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3Bfbm90OgotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gIWFyZ3NbMF07Ci0KLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBub3RcbiIgKSk7Ci0KLSAgICAgICAgICAgIGFyZ3NbMF0gPSBjb25kID8gMHgxMDAwMEwgOiAwOwotICAgICAgICAgICAgYXJncysrOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGNmZl9vcF9lcToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9GaXhlZCAgY29uZCA9ICggYXJnc1swXSA9PSBhcmdzWzFdICk7Ci0KLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKLQotICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7Ci0gICAgICAgICAgICBhcmdzKys7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2lmZWxzZToKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9GaXhlZCAgY29uZCA9ICggYXJnc1syXSA8PSBhcmdzWzNdICk7Ci0KLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpZmVsc2VcbiIgKSk7Ci0KLSAgICAgICAgICAgIGlmICggIWNvbmQgKQotICAgICAgICAgICAgICBhcmdzWzBdID0gYXJnc1sxXTsKLSAgICAgICAgICAgIGFyZ3MrKzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfY2FsbHN1YnI6Ci0gICAgICAgICAgewotICAgICAgICAgICAgRlRfVUludCAgaWR4ID0gKEZUX1VJbnQpKCAoIGFyZ3NbMF0gPj4gMTYgKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmxvY2Fsc19iaWFzICk7Ci0KLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsc3ViciAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICB6b25lIC0gZGVjb2Rlci0+em9uZXMgKyAxICkpOwotCi0gICAgICAgICAgICBpZiAoIGlkeCA+PSBkZWNvZGVyLT5udW1fbG9jYWxzICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBsb2NhbCBzdWJyIGluZGV4XG4iICkpOwotICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gQ0ZGX01BWF9TVUJSU19DQUxMUyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IG5lc3RlZCBzdWJyc1xuIiApKTsKLSAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IGlwOyAgLyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgKi8KLQotICAgICAgICAgICAgem9uZSsrOwotICAgICAgICAgICAgem9uZS0+YmFzZSAgID0gZGVjb2Rlci0+bG9jYWxzW2lkeF07Ci0gICAgICAgICAgICB6b25lLT5saW1pdCAgPSBkZWNvZGVyLT5sb2NhbHNbaWR4ICsgMV07Ci0gICAgICAgICAgICB6b25lLT5jdXJzb3IgPSB6b25lLT5iYXNlOwotCi0gICAgICAgICAgICBpZiAoICF6b25lLT5iYXNlIHx8IHpvbmUtPmxpbWl0ID09IHpvbmUtPmJhc2UgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGVF9FUlJPUigoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2luZyBlbXB0eSBzdWJyc1xuIiApKTsKLSAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlY29kZXItPnpvbmUgPSB6b25lOwotICAgICAgICAgICAgaXAgICAgICAgICAgICA9IHpvbmUtPmJhc2U7Ci0gICAgICAgICAgICBsaW1pdCAgICAgICAgID0gem9uZS0+bGltaXQ7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgY2ZmX29wX2NhbGxnc3VicjoKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9VSW50ICBpZHggPSAoRlRfVUludCkoICggYXJnc1swXSA+PiAxNiApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Z2xvYmFsc19iaWFzICk7Ci0KLQotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsZ3N1YnIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgem9uZSAtIGRlY29kZXItPnpvbmVzICsgMSApKTsKLQotICAgICAgICAgICAgaWYgKCBpZHggPj0gZGVjb2Rlci0+bnVtX2dsb2JhbHMgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBGVF9FUlJPUigoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGdsb2JhbCBzdWJyIGluZGV4XG4iICkpOwotICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gQ0ZGX01BWF9TVUJSU19DQUxMUyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IG5lc3RlZCBzdWJyc1xuIiApKTsKLSAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IGlwOyAgLyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgKi8KLQotICAgICAgICAgICAgem9uZSsrOwotICAgICAgICAgICAgem9uZS0+YmFzZSAgID0gZGVjb2Rlci0+Z2xvYmFsc1tpZHhdOwotICAgICAgICAgICAgem9uZS0+bGltaXQgID0gZGVjb2Rlci0+Z2xvYmFsc1tpZHggKyAxXTsKLSAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7Ci0KLSAgICAgICAgICAgIGlmICggIXpvbmUtPmJhc2UgfHwgem9uZS0+bGltaXQgPT0gem9uZS0+YmFzZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiIGludm9raW5nIGVtcHR5IHN1YnJzXG4iICkpOwotICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVjb2Rlci0+em9uZSA9IHpvbmU7Ci0gICAgICAgICAgICBpcCAgICAgICAgICAgID0gem9uZS0+YmFzZTsKLSAgICAgICAgICAgIGxpbWl0ICAgICAgICAgPSB6b25lLT5saW1pdDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBjZmZfb3BfcmV0dXJuOgotICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmV0dXJuIChsZWF2aW5nIGxldmVsICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT56b25lIC0gZGVjb2Rlci0+em9uZXMgKSk7Ci0KLSAgICAgICAgICBpZiAoIGRlY29kZXItPnpvbmUgPD0gZGVjb2Rlci0+em9uZXMgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIHJldHVyblxuIiApKTsKLSAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOwotICAgICAgICAgIH0KLQotICAgICAgICAgIGRlY29kZXItPnpvbmUtLTsKLSAgICAgICAgICB6b25lICA9IGRlY29kZXItPnpvbmU7Ci0gICAgICAgICAgaXAgICAgPSB6b25lLT5jdXJzb3I7Ci0gICAgICAgICAgbGltaXQgPSB6b25lLT5saW1pdDsKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIEZUX0VSUk9SKCggIlVuaW1wbGVtZW50ZWQgb3Bjb2RlOiAlZCIsIGlwWy0xXSApKTsKLQotICAgICAgICAgIGlmICggaXBbLTFdID09IDEyICkKLSAgICAgICAgICAgIEZUX0VSUk9SKCggIiAlZCIsIGlwWzBdICkpOwotICAgICAgICAgIEZUX0VSUk9SKCggIlxuIiApKTsKLQotICAgICAgICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWNvZGVyLT50b3AgPSBhcmdzOwotCi0gICAgICAgIGlmICggZGVjb2Rlci0+dG9wIC0gc3RhY2sgPj0gQ0ZGX01BWF9PUEVSQU5EUyApCi0gICAgICAgICAgZ290byBTdGFja19PdmVyZmxvdzsKLQotICAgICAgfSAvKiBnZW5lcmFsIG9wZXJhdG9yIHByb2Nlc3NpbmcgKi8KLQotICAgIH0gLyogd2hpbGUgaXAgPCBsaW1pdCAqLwotCi0gICAgRlRfVFJBQ0U0KCggIi4uZW5kLi5cblxuIiApKTsKLQotICBGYWlsOgotICAgIHJldHVybiBlcnJvcjsKLQotICBNTV9FcnJvcjoKLSAgICBGVF9UUkFDRTQoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgotICAgICAgICAgICAgICAgICIgaW52YWxpZCBvcGNvZGUgZm91bmQgaW4gdG9wIERJQ1QgY2hhcnN0cmluZ1xuIikpOwotICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOwotCi0gIFN5bnRheF9FcnJvcjoKLSAgICBGVF9UUkFDRTQoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IHN5bnRheCBlcnJvclxuIiApKTsKLSAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKLQotICBTdGFja19VbmRlcmZsb3c6Ci0gICAgRlRfVFJBQ0U0KCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiBzdGFjayB1bmRlcmZsb3dcbiIgKSk7Ci0gICAgcmV0dXJuIEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOwotCi0gIFN0YWNrX092ZXJmbG93OgotICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczogc3RhY2sgb3ZlcmZsb3dcbiIgKSk7Ci0gICAgcmV0dXJuIEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOwotICB9Ci0KLSNlbmRpZiAvKiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCi0KLQogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjY2OCwxMSArMTQyLDE0IEBACiAgICAgRlRfSW50ICAgICAgIGdseXBoX2luZGV4OwogICAgIENGRl9Gb250ICAgICBjZmYgPSAoQ0ZGX0ZvbnQpZmFjZS0+b3RoZXI7CiAKKyAgICBQU0F1eF9TZXJ2aWNlICAgICAgICAgICAgcHNhdXggICAgICAgICA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworICAgIGNvbnN0IENGRl9EZWNvZGVyX0Z1bmNzICBkZWNvZGVyX2Z1bmNzID0gcHNhdXgtPmNmZl9kZWNvZGVyX2Z1bmNzOworCiAKICAgICAqbWF4X2FkdmFuY2UgPSAwOwogCiAgICAgLyogSW5pdGlhbGl6ZSBsb2FkIGRlY29kZXIgKi8KLSAgICBjZmZfZGVjb2Rlcl9pbml0KCAmZGVjb2RlciwgZmFjZSwgMCwgMCwgMCwgMCApOworICAgIGRlY29kZXJfZnVuY3MtPmluaXQoICZkZWNvZGVyLCBmYWNlLCAwLCAwLCAwLCAwLCAwLCAwICk7CiAKICAgICBkZWNvZGVyLmJ1aWxkZXIubWV0cmljc19vbmx5ID0gMTsKICAgICBkZWNvZGVyLmJ1aWxkZXIubG9hZF9wb2ludHMgID0gMDsKQEAgLTI2OTEsMTIgKzE2OCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc3RyaW5nLCAmY2hhcnN0cmluZ19sZW4gKTsKICAgICAgIGlmICggIWVycm9yICkKICAgICAgIHsKLSAgICAgICAgZXJyb3IgPSBjZmZfZGVjb2Rlcl9wcmVwYXJlKCAmZGVjb2Rlciwgc2l6ZSwgZ2x5cGhfaW5kZXggKTsKKyAgICAgICAgZXJyb3IgPSBkZWNvZGVyX2Z1bmNzLT5wcmVwYXJlKCAmZGVjb2Rlciwgc2l6ZSwgZ2x5cGhfaW5kZXggKTsKICAgICAgICAgaWYgKCAhZXJyb3IgKQotICAgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOworICAgICAgICAgIGVycm9yID0gZGVjb2Rlcl9mdW5jcy0+cGFyc2VfY2hhcnN0cmluZ3Nfb2xkKCAmZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKTsKIAogICAgICAgICBjZmZfZnJlZV9nbHlwaF9kYXRhKCBmYWNlLCAmY2hhcnN0cmluZywgJmNoYXJzdHJpbmdfbGVuICk7CiAgICAgICB9CkBAIC0yNzIyLDEwICsxOTksMTQgQEAKICAgewogICAgIEZUX0Vycm9yICAgICBlcnJvcjsKICAgICBDRkZfRGVjb2RlciAgZGVjb2RlcjsKKyAgICBQU19EZWNvZGVyICAgcHNkZWNvZGVyOwogICAgIFRUX0ZhY2UgICAgICBmYWNlID0gKFRUX0ZhY2UpZ2x5cGgtPnJvb3QuZmFjZTsKICAgICBGVF9Cb29sICAgICAgaGludGluZywgc2NhbGVkLCBmb3JjZV9zY2FsaW5nOwogICAgIENGRl9Gb250ICAgICBjZmYgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7CiAKKyAgICBQU0F1eF9TZXJ2aWNlICAgICAgICAgICAgcHNhdXggICAgICAgICA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworICAgIGNvbnN0IENGRl9EZWNvZGVyX0Z1bmNzICBkZWNvZGVyX2Z1bmNzID0gcHNhdXgtPmNmZl9kZWNvZGVyX2Z1bmNzOworCiAgICAgRlRfTWF0cml4ICAgIGZvbnRfbWF0cml4OwogICAgIEZUX1ZlY3RvciAgICBmb250X29mZnNldDsKIApAQCAtMjkxNSw3ICszOTYsNyBAQAogCiAgICAgewogI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKLSAgICAgIENGRl9Ecml2ZXIgIGRyaXZlciA9IChDRkZfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CisgICAgICBQU19Ecml2ZXIgIGRyaXZlciA9IChQU19Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKICNlbmRpZgogCiAKQEAgLTI5MjMsOCArNDA0LDEwIEBACiAgICAgICBGVF9VTG9uZyAgY2hhcnN0cmluZ19sZW47CiAKIAotICAgICAgY2ZmX2RlY29kZXJfaW5pdCggJmRlY29kZXIsIGZhY2UsIHNpemUsIGdseXBoLCBoaW50aW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICk7CisgICAgICBkZWNvZGVyX2Z1bmNzLT5pbml0KCAmZGVjb2RlciwgZmFjZSwgc2l6ZSwgZ2x5cGgsIGhpbnRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX1RBUkdFVF9NT0RFKCBsb2FkX2ZsYWdzICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmZfZ2V0X2dseXBoX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmZfZnJlZV9nbHlwaF9kYXRhICk7CiAKICAgICAgIC8qIHRoaXMgaXMgZm9yIHB1cmUgQ0ZGcyAqLwogICAgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9BRFZBTkNFX09OTFkgKQpAQCAtMjkzOSwyMyArNDIyLDI1IEBACiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBHbHlwaF9CdWlsZF9GaW5pc2hlZDsKIAotICAgICAgZXJyb3IgPSBjZmZfZGVjb2Rlcl9wcmVwYXJlKCAmZGVjb2Rlciwgc2l6ZSwgZ2x5cGhfaW5kZXggKTsKKyAgICAgIGVycm9yID0gZGVjb2Rlcl9mdW5jcy0+cHJlcGFyZSggJmRlY29kZXIsIHNpemUsIGdseXBoX2luZGV4ICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBHbHlwaF9CdWlsZF9GaW5pc2hlZDsKIAogI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKICAgICAgIC8qIGNob29zZSB3aGljaCBDRkYgcmVuZGVyZXIgdG8gdXNlICovCi0gICAgICBpZiAoIGRyaXZlci0+aGludGluZ19lbmdpbmUgPT0gRlRfQ0ZGX0hJTlRJTkdfRlJFRVRZUEUgKQotICAgICAgICBlcnJvciA9IGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCAmZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgKTsKKyAgICAgIGlmICggZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9ISU5USU5HX0ZSRUVUWVBFICkKKyAgICAgICAgZXJyb3IgPSBkZWNvZGVyX2Z1bmNzLT5wYXJzZV9jaGFyc3RyaW5nc19vbGQoICZkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOwogICAgICAgZWxzZQogI2VuZGlmCiAgICAgICB7Ci0gICAgICAgIGVycm9yID0gY2YyX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICBwc2F1eC0+cHNfZGVjb2Rlcl9pbml0KCAmcHNkZWNvZGVyLCAmZGVjb2RlciwgRkFMU0UgKTsKKworICAgICAgICBlcnJvciA9IGRlY29kZXJfZnVuY3MtPnBhcnNlX2NoYXJzdHJpbmdzKCAmcHNkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOwogCiAgICAgICAgIC8qIEFkb2JlJ3MgZW5naW5lIHVzZXMgMTYuMTYgbnVtYmVycyBldmVyeXdoZXJlOyAgICAgICAgICAgICAgKi8KICAgICAgICAgLyogYXMgYSBjb25zZXF1ZW5jZSwgZ2x5cGhzIGxhcmdlciB0aGFuIDIwMDBwcGVtIGdldCByZWplY3RlZCAqLwpAQCAtMjk2OCw5ICs0NTMsOSBAQAogICAgICAgICAgIGZvcmNlX3NjYWxpbmcgPSBUUlVFOwogICAgICAgICAgIGdseXBoLT5oaW50ICAgPSBoaW50aW5nOwogCi0gICAgICAgICAgZXJyb3IgPSBjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggJmRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICAgIGVycm9yID0gZGVjb2Rlcl9mdW5jcy0+cGFyc2VfY2hhcnN0cmluZ3MoICZwc2RlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOwogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTMwMDgsNyArNDkzLDcgQEAKICAgR2x5cGhfQnVpbGRfRmluaXNoZWQ6CiAgICAgICAvKiBzYXZlIG5ldyBnbHlwaCB0YWJsZXMsIGlmIG5vIGVycm9yICovCiAgICAgICBpZiAoICFlcnJvciApCi0gICAgICAgIGNmZl9idWlsZGVyX2RvbmUoICZkZWNvZGVyLmJ1aWxkZXIgKTsKKyAgICAgICAgZGVjb2Rlci5idWlsZGVyLmZ1bmNzLmRvbmUoICZkZWNvZGVyLmJ1aWxkZXIgKTsKICAgICAgIC8qIFhYWDogYW55dGhpbmcgdG8gZG8gZm9yIGJyb2tlbiBnbHlwaCBlbnRyeT8gKi8KICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmZ2xvYWQuaCBiL3NyYy9jZmYvY2ZmZ2xvYWQuaAppbmRleCAwZmE5M2I0Li44MDNmMzk3IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmdsb2FkLmgKKysrIGIvc3JjL2NmZi9jZmZnbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMiwxMTkgKzIyLDExIEBACiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgImNmZm9ianMuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9PQkpFQ1RTX1RZUEVTX0gKIAogCiBGVF9CRUdJTl9IRUFERVIKIAotCi0jZGVmaW5lIENGRl9NQVhfT1BFUkFORFMgICAgICAgIDQ4Ci0jZGVmaW5lIENGRl9NQVhfU1VCUlNfQ0FMTFMgICAgIDE2ICAvKiBtYXhpbXVtIHN1YnJvdXRpbmUgbmVzdGluZzsgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb25seSAxMCBhcmUgYWxsb3dlZCBidXQgdGhlcmUgZXhpc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvbnRzIGxpa2UgYEhpcmFLYWt1UHJvTi1XMy50dGYnICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvTiBXMzsgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogOC4yZDZlMTsgMjAxNC0xMi0xOSkgdGhhdCBleGNlZWQgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgIDMyCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxTdHJ1Y3R1cmU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDRkZfQnVpbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgQSBzdHJ1Y3R1cmUgdXNlZCBkdXJpbmcgZ2x5cGggbG9hZGluZyB0byBzdG9yZSBpdHMgb3V0bGluZS4gICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBtZW1vcnkgICAgICAgIDo6IFRoZSBjdXJyZW50IG1lbW9yeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGZhY2UgICAgICAgICAgOjogVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgZ2x5cGggICAgICAgICA6OiBUaGUgY3VycmVudCBnbHlwaCBzbG90LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkZXIgICAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIGxvYWRlci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJhc2UgICAgICAgICAgOjogVGhlIGJhc2UgZ2x5cGggb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgY3VycmVudCAgICAgICA6OiBUaGUgY3VycmVudCBnbHlwaCBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBwb3NfeCAgICAgICAgIDo6IFRoZSBob3Jpem9udGFsIHRyYW5zbGF0aW9uIChpZiBjb21wb3NpdGUgZ2x5cGgpLiAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIHBvc195ICAgICAgICAgOjogVGhlIHZlcnRpY2FsIHRyYW5zbGF0aW9uIChpZiBjb21wb3NpdGUgZ2x5cGgpLiAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbGVmdF9iZWFyaW5nICA6OiBUaGUgbGVmdCBzaWRlIGJlYXJpbmcgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhZHZhbmNlICAgICAgIDo6IFRoZSBob3Jpem9udGFsIGFkdmFuY2UgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGJib3ggICAgICAgICAgOjogVW51c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgcGF0aF9iZWd1biAgICA6OiBBIGZsYWcgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYSBuZXcgcGF0aCBoYXMgYmVndW4uICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBsb2FkX3BvaW50cyAgIDo6IElmIHRoaXMgZmxhZyBpcyBub3Qgc2V0LCBubyBwb2ludHMgYXJlIGxvYWRlZC4gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG5vX3JlY3Vyc2UgICAgOjogU2V0IGJ1dCBub3QgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgbWV0cmljc19vbmx5ICA6OiBBIGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IHdlIG9ubHkgd2FudCB0byBjb21wdXRlICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgdGhlIG1ldHJpY3Mgb2YgYSBnaXZlbiBnbHlwaCwgbm90IGxvYWQgYWxsIG9mIGl0cyAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgIHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhpbnRzX2Z1bmNzICAgOjogQXV4aWxpYXJ5IHBvaW50ZXIgZm9yIGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaGludHNfZ2xvYmFscyA6OiBBdXhpbGlhcnkgcG9pbnRlciBmb3IgaGludGluZy4gICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0J1aWxkZXJfCi0gIHsKLSAgICBGVF9NZW1vcnkgICAgICAgbWVtb3J5OwotICAgIFRUX0ZhY2UgICAgICAgICBmYWNlOwotICAgIENGRl9HbHlwaFNsb3QgICBnbHlwaDsKLSAgICBGVF9HbHlwaExvYWRlciAgbG9hZGVyOwotICAgIEZUX091dGxpbmUqICAgICBiYXNlOwotICAgIEZUX091dGxpbmUqICAgICBjdXJyZW50OwotCi0gICAgRlRfUG9zICAgICAgICAgIHBvc194OwotICAgIEZUX1BvcyAgICAgICAgICBwb3NfeTsKLQotICAgIEZUX1ZlY3RvciAgICAgICBsZWZ0X2JlYXJpbmc7Ci0gICAgRlRfVmVjdG9yICAgICAgIGFkdmFuY2U7Ci0KLSAgICBGVF9CQm94ICAgICAgICAgYmJveDsgICAgICAgICAgLyogYm91bmRpbmcgYm94ICovCi0gICAgRlRfQm9vbCAgICAgICAgIHBhdGhfYmVndW47Ci0gICAgRlRfQm9vbCAgICAgICAgIGxvYWRfcG9pbnRzOwotICAgIEZUX0Jvb2wgICAgICAgICBub19yZWN1cnNlOwotCi0gICAgRlRfQm9vbCAgICAgICAgIG1ldHJpY3Nfb25seTsKLQotICAgIHZvaWQqICAgICAgICAgICBoaW50c19mdW5jczsgICAgLyogaGludGVyLXNwZWNpZmljICovCi0gICAgdm9pZCogICAgICAgICAgIGhpbnRzX2dsb2JhbHM7ICAvKiBoaW50ZXItc3BlY2lmaWMgKi8KLQotICB9IENGRl9CdWlsZGVyOwotCi0KLSAgRlRfTE9DQUwoIEZUX0Vycm9yICkKLSAgY2ZmX2NoZWNrX3BvaW50cyggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAotICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGNvdW50ICk7Ci0KLSAgRlRfTE9DQUwoIHZvaWQgKQotICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB5LAotICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUgICAgICAgZmxhZyApOwotICBGVF9MT0NBTCggRlRfRXJyb3IgKQotICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQxKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB5ICk7Ci0gIEZUX0xPQ0FMKCBGVF9FcnJvciApCi0gIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKTsKLSAgRlRfTE9DQUwoIHZvaWQgKQotICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIgKTsKLQotCi0gIEZUX0xPQ0FMKCBGVF9JbnQgKQotICBjZmZfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBDRkZfRm9udCAgY2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgY2hhcmNvZGUgKTsKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2ZmX2dldF9nbHlwaF9kYXRhKCBUVF9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCwKQEAgLTE0Niw3NCArMzgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGxlbmd0aCApOwogCiAKLSAgLyogZXhlY3V0aW9uIGNvbnRleHQgY2hhcnN0cmluZyB6b25lICovCi0KLSAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9EZWNvZGVyX1pvbmVfCi0gIHsKLSAgICBGVF9CeXRlKiAgYmFzZTsKLSAgICBGVF9CeXRlKiAgbGltaXQ7Ci0gICAgRlRfQnl0ZSogIGN1cnNvcjsKLQotICB9IENGRl9EZWNvZGVyX1pvbmU7Ci0KLQotICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX0RlY29kZXJfCi0gIHsKLSAgICBDRkZfQnVpbGRlciAgICAgICAgYnVpbGRlcjsKLSAgICBDRkZfRm9udCAgICAgICAgICAgY2ZmOwotCi0gICAgRlRfRml4ZWQgICAgICAgICAgIHN0YWNrW0NGRl9NQVhfT1BFUkFORFMgKyAxXTsKLSAgICBGVF9GaXhlZCogICAgICAgICAgdG9wOwotCi0gICAgQ0ZGX0RlY29kZXJfWm9uZSAgIHpvbmVzW0NGRl9NQVhfU1VCUlNfQ0FMTFMgKyAxXTsKLSAgICBDRkZfRGVjb2Rlcl9ab25lKiAgem9uZTsKLQotICAgIEZUX0ludCAgICAgICAgICAgICBmbGV4X3N0YXRlOwotICAgIEZUX0ludCAgICAgICAgICAgICBudW1fZmxleF92ZWN0b3JzOwotICAgIEZUX1ZlY3RvciAgICAgICAgICBmbGV4X3ZlY3RvcnNbN107Ci0KLSAgICBGVF9Qb3MgICAgICAgICAgICAgZ2x5cGhfd2lkdGg7Ci0gICAgRlRfUG9zICAgICAgICAgICAgIG5vbWluYWxfd2lkdGg7Ci0KLSAgICBGVF9Cb29sICAgICAgICAgICAgcmVhZF93aWR0aDsKLSAgICBGVF9Cb29sICAgICAgICAgICAgd2lkdGhfb25seTsKLSAgICBGVF9JbnQgICAgICAgICAgICAgbnVtX2hpbnRzOwotICAgIEZUX0ZpeGVkICAgICAgICAgICBidWlsZGNoYXJbQ0ZGX01BWF9UUkFOU19FTEVNRU5UU107Ci0KLSAgICBGVF9VSW50ICAgICAgICAgICAgbnVtX2xvY2FsczsKLSAgICBGVF9VSW50ICAgICAgICAgICAgbnVtX2dsb2JhbHM7Ci0KLSAgICBGVF9JbnQgICAgICAgICAgICAgbG9jYWxzX2JpYXM7Ci0gICAgRlRfSW50ICAgICAgICAgICAgIGdsb2JhbHNfYmlhczsKLQotICAgIEZUX0J5dGUqKiAgICAgICAgICBsb2NhbHM7Ci0gICAgRlRfQnl0ZSoqICAgICAgICAgIGdsb2JhbHM7Ci0KLSAgICBGVF9CeXRlKiogICAgICAgICAgZ2x5cGhfbmFtZXM7ICAgLyogZm9yIHB1cmUgQ0ZGIGZvbnRzIG9ubHkgICovCi0gICAgRlRfVUludCAgICAgICAgICAgIG51bV9nbHlwaHM7ICAgIC8qIG51bWJlciBvZiBnbHlwaHMgaW4gZm9udCAqLwotCi0gICAgRlRfUmVuZGVyX01vZGUgICAgIGhpbnRfbW9kZTsKLQotICAgIEZUX0Jvb2wgICAgICAgICAgICBzZWFjOwotCi0gICAgQ0ZGX1N1YkZvbnQgICAgICAgIGN1cnJlbnRfc3ViZm9udDsgLyogZm9yIGN1cnJlbnQgZ2x5cGhfaW5kZXggKi8KLQotICB9IENGRl9EZWNvZGVyOwotCi0KLSAgRlRfTE9DQUwoIHZvaWQgKQotICBjZmZfZGVjb2Rlcl9pbml0KCBDRkZfRGVjb2RlciogICAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgIENGRl9TaXplICAgICAgICBzaXplLAotICAgICAgICAgICAgICAgICAgICBDRkZfR2x5cGhTbG90ICAgc2xvdCwKLSAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgIGhpbnRpbmcsCi0gICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICBoaW50X21vZGUgKTsKLQotICBGVF9MT0NBTCggRlRfRXJyb3IgKQotICBjZmZfZGVjb2Rlcl9wcmVwYXJlKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIENGRl9TaXplICAgICAgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBnbHlwaF9pbmRleCApOwotCiAjaWYgMCAgLyogdW51c2VkIHVudGlsIHdlIHN1cHBvcnQgcHVyZSBDRkYgZm9udHMgKi8KIAogICAvKiBDb21wdXRlIHRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggb2YgYSBmb250IHRocm91Z2ggcXVpY2sgcGFyc2luZyAqLwpAQCAtMjIzLDEzICs0Nyw2IEBACiAKICNlbmRpZiAvKiAwICovCiAKLSNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCi0gIEZUX0xPQ0FMKCBGVF9FcnJvciApCi0gIGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIGluX2RpY3QgKTsKLSNlbmRpZgogCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIGNmZl9zbG90X2xvYWQoIENGRl9HbHlwaFNsb3QgIGdseXBoLApkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZsb2FkLmMgYi9zcmMvY2ZmL2NmZmxvYWQuYwppbmRleCBkMzU2YWIzLi5iYTQ5NzkzIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmxvYWQuYworKysgYi9zcmMvY2ZmL2NmZmxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBhbmQgQ0ZGIGRhdGEvcHJvZ3JhbSB0YWJsZXMgbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBR1NfSAogI2luY2x1ZGUgRlRfVFlQRTFfVEFCTEVTX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKICNpbmNsdWRlIEZUX01VTFRJUExFX01BU1RFUlNfSApAQCAtMTI5Nyw3ICsxMjk4LDkgQEAKIAogICAgIGlmICggbnVtT3BlcmFuZHMgPiBjb3VudCApCiAgICAgewotICAgICAgRlRfVFJBQ0U0KCggIiBjZmZfYmxlbmRfZG9CbGVuZDogU3RhY2sgdW5kZXJmbG93ICVkIGFyZ3NcbiIsIGNvdW50ICkpOworICAgICAgRlRfVFJBQ0U0KCggIiBjZmZfYmxlbmRfZG9CbGVuZDogU3RhY2sgdW5kZXJmbG93ICVkIGFyZ3VtZW50JXNcbiIsCisgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgIGNvdW50ID09IDEgPyAiIiA6ICJzIiApKTsKIAogICAgICAgZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfVW5kZXJmbG93ICk7CiAgICAgICBnb3RvIEV4aXQ7CkBAIC0xMzQ1LDE2ICsxMzQ4LDE0IEBACiAgICAgZm9yICggaSA9IDA7IGkgPCBudW1CbGVuZHM7IGkrKyApCiAgICAgewogICAgICAgY29uc3QgRlRfSW50MzIqICB3ZWlnaHQgPSAmYmxlbmQtPkJWWzFdOwotICAgICAgRlRfSW50MzIgICAgICAgICBzdW07CisgICAgICBGVF9VSW50MzIgICAgICAgIHN1bTsKIAogCiAgICAgICAvKiBjb252ZXJ0IGlucHV0cyB0byAxNi4xNiBmaXhlZCBwb2ludCAqLwotICAgICAgc3VtID0gY2ZmX3BhcnNlX251bSggcGFyc2VyLCAmcGFyc2VyLT5zdGFja1tpICsgYmFzZV0gKSAqIDY1NTM2OworICAgICAgc3VtID0gY2ZmX3BhcnNlX251bSggcGFyc2VyLCAmcGFyc2VyLT5zdGFja1tpICsgYmFzZV0gKSAqIDB4MTAwMDA7CiAKICAgICAgIGZvciAoIGogPSAxOyBqIDwgYmxlbmQtPmxlbkJWOyBqKysgKQotICAgICAgICBzdW0gKz0gRlRfTXVsRml4KCAqd2VpZ2h0KyssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNmZl9wYXJzZV9udW0oIHBhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlci0+c3RhY2tbZGVsdGErK10gKSAqIDY1NTM2ICk7CisgICAgICAgIHN1bSArPSBjZmZfcGFyc2VfbnVtKCBwYXJzZXIsICZwYXJzZXItPnN0YWNrW2RlbHRhKytdICkgKiAqd2VpZ2h0Kys7CiAKICAgICAgIC8qIHBvaW50IHBhcnNlciBzdGFjayB0byBuZXcgdmFsdWUgb24gYmxlbmRfc3RhY2sgKi8KICAgICAgIHBhcnNlci0+c3RhY2tbaSArIGJhc2VdID0gc3ViRm9udC0+YmxlbmRfdG9wOwpAQCAtMTM2NCwxMCArMTM2NSwxMCBAQAogICAgICAgLyogb3Bjb2RlIGluIGJvdGggQ0ZGIGFuZCBDRkYyIERJQ1RzLiAgU2VlIGBjZmZfcGFyc2VfbnVtJyBmb3IgICAgKi8KICAgICAgIC8qIGRlY29kZSBvZiB0aGlzLCB3aGljaCByb3VuZHMgdG8gYW4gaW50ZWdlci4gICAgICAgICAgICAgICAgICAgICovCiAgICAgICAqc3ViRm9udC0+YmxlbmRfdG9wKysgPSAyNTU7Ci0gICAgICAqc3ViRm9udC0+YmxlbmRfdG9wKysgPSAoIChGVF9VSW50MzIpc3VtICYgMHhGRjAwMDAwMFUgKSA+PiAyNDsKLSAgICAgICpzdWJGb250LT5ibGVuZF90b3ArKyA9ICggKEZUX1VJbnQzMilzdW0gJiAweDAwRkYwMDAwVSApID4+IDE2OwotICAgICAgKnN1YkZvbnQtPmJsZW5kX3RvcCsrID0gKCAoRlRfVUludDMyKXN1bSAmIDB4MDAwMEZGMDBVICkgPj4gIDg7Ci0gICAgICAqc3ViRm9udC0+YmxlbmRfdG9wKysgPSAgIChGVF9VSW50MzIpc3VtICYgMHgwMDAwMDBGRlU7CisgICAgICAqc3ViRm9udC0+YmxlbmRfdG9wKysgPSAoRlRfQnl0ZSkoIHN1bSA+PiAyNCApOworICAgICAgKnN1YkZvbnQtPmJsZW5kX3RvcCsrID0gKEZUX0J5dGUpKCBzdW0gPj4gMTYgKTsKKyAgICAgICpzdWJGb250LT5ibGVuZF90b3ArKyA9IChGVF9CeXRlKSggc3VtID4+ICA4ICk7CisgICAgICAqc3ViRm9udC0+YmxlbmRfdG9wKysgPSAoRlRfQnl0ZSlzdW07CiAgICAgfQogCiAgICAgLyogbGVhdmUgb25seSBudW1CbGVuZHMgcmVzdWx0cyBvbiBwYXJzZXIgc3RhY2sgKi8KQEAgLTE0NjMsMTAgKzE0NjQsMTUgQEAKIAogICAgICAgLyogTm90ZTogYGxlbk5EVicgY291bGQgYmUgemVyby4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgLyogICAgICAgSW4gdGhhdCBjYXNlLCBidWlsZCBkZWZhdWx0IGJsZW5kIHZlY3RvciAoMSwwLDAuLi4pLiAqLwotICAgICAgLyogICAgICAgSW4gdGhlIG5vcm1hbCBjYXNlLCBpbml0aWFsaXplIGVhY2ggY29tcG9uZW50IHRvIDEgICAqLwotICAgICAgLyogICAgICAgYmVmb3JlIGlubmVyIGxvb3AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgaWYgKCBsZW5ORFYgIT0gMCApCi0gICAgICAgIGJsZW5kLT5CVlttYXN0ZXJdID0gRlRfRklYRURfT05FOyAvKiBkZWZhdWx0ICovCisgICAgICBpZiAoICFsZW5ORFYgKQorICAgICAgeworICAgICAgICBibGVuZC0+QlZbbWFzdGVyXSA9IDA7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAvKiBJbiB0aGUgbm9ybWFsIGNhc2UsIGluaXRpYWxpemUgZWFjaCBjb21wb25lbnQgdG8gMSAqLworICAgICAgLyogYmVmb3JlIGlubmVyIGxvb3AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGJsZW5kLT5CVlttYXN0ZXJdID0gRlRfRklYRURfT05FOyAvKiBkZWZhdWx0ICovCiAKICAgICAgIC8qIGlubmVyIGxvb3Agc3RlcHMgdGhyb3VnaCBheGVzIGluIHRoaXMgcmVnaW9uICovCiAgICAgICBmb3IgKCBqID0gMDsgaiA8IGxlbk5EVjsgaisrICkKQEAgLTE1MjksMTIgKzE1MzUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgbGVuTkRWICogc2l6ZW9mICggKk5EViApICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGJsZW5kLT5sZW5ORFYgPSBsZW5ORFY7CiAgICAgICBGVF9NRU1fQ09QWSggYmxlbmQtPmxhc3RORFYsCiAgICAgICAgICAgICAgICAgICAgTkRWLAogICAgICAgICAgICAgICAgICAgIGxlbk5EViAqIHNpemVvZiAoICpORFYgKSApOwogICAgIH0KIAorICAgIGJsZW5kLT5sZW5ORFYgID0gbGVuTkRWOwogICAgIGJsZW5kLT5idWlsdEJWID0gVFJVRTsKIAogICBFeGl0OgpAQCAtMTU1MCwxMyArMTU1NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIGxlbk5EViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBORFYgKQogICB7Ci0gICAgaWYgKCAhYmxlbmQtPmJ1aWx0QlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICBibGVuZC0+bGFzdFZzaW5kZXggIT0gdnNpbmRleCAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICBibGVuZC0+bGVuTkRWICE9IGxlbk5EViAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAoIGxlbk5EViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICBtZW1jbXAoIE5EViwKLSAgICAgICAgICAgICAgICAgICBibGVuZC0+bGFzdE5EViwKLSAgICAgICAgICAgICAgICAgICBsZW5ORFYgKiBzaXplb2YgKCAqTkRWICkgKSAhPSAwICkgKQorICAgIGlmICggIWJsZW5kLT5idWlsdEJWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgYmxlbmQtPmxhc3RWc2luZGV4ICE9IHZzaW5kZXggICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgYmxlbmQtPmxlbk5EViAhPSBsZW5ORFYgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgKCBsZW5ORFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgZnRfbWVtY21wKCBORFYsCisgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPmxhc3RORFYsCisgICAgICAgICAgICAgICAgICAgICAgbGVuTkRWICogc2l6ZW9mICggKk5EViApICkgIT0gMCApICkKICAgICB7CiAgICAgICAvKiBuZWVkIHRvIGJ1aWxkIGJsZW5kIHZlY3RvciAqLwogICAgICAgcmV0dXJuIFRSVUU7CkBAIC0xNTkyLDcgKzE1OTgsOCBAQAogICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzICBtbSA9IChGVF9TZXJ2aWNlX011bHRpTWFzdGVycylmYWNlLT5tbTsKIAogCi0gICAgbW0tPmRvbmVfYmxlbmQoIEZUX0ZBQ0UoIGZhY2UgKSApOworICAgIGlmIChtbSkKKyAgICAgIG1tLT5kb25lX2JsZW5kKCBGVF9GQUNFKCBmYWNlICkgKTsKICAgfQogCiAjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCAqLwpAQCAtMTg5MCw3ICsxODk3LDggQEAKICAgICBzdWJmb250LT5sZW5ORFYgPSBsZW5ORFY7CiAgICAgc3ViZm9udC0+TkRWICAgID0gTkRWOwogCi0gICAgc3RhY2tTaXplID0gZm9udC0+Y2ZmMiA/IGZvbnQtPnRvcF9mb250LmZvbnRfZGljdC5tYXhzdGFjaworICAgIC8qIGFkZCAxIGZvciB0aGUgb3BlcmF0b3IgKi8KKyAgICBzdGFja1NpemUgPSBmb250LT5jZmYyID8gZm9udC0+dG9wX2ZvbnQuZm9udF9kaWN0Lm1heHN0YWNrICsgMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDRkZfTUFYX1NUQUNLX0RFUFRIICsgMTsKIAogICAgIGlmICggY2ZmX3BhcnNlcl9pbml0KCAmcGFyc2VyLApAQCAtMTkzNiwxOCArMTk0NCw2IEBACiAgIH0KIAogCi0gIEZUX0xPQ0FMX0RFRiggRlRfVUludDMyICkKLSAgY2ZmX3JhbmRvbSggRlRfVUludDMyICByICkKLSAgewotICAgIC8qIGEgMzJiaXQgdmVyc2lvbiBvZiB0aGUgYHhvcnNoaWZ0JyBhbGdvcml0aG0gKi8KLSAgICByIF49IHIgPDwgMTM7Ci0gICAgciBePSByID4+IDE3OwotICAgIHIgXj0gciA8PCA1OwotCi0gICAgcmV0dXJuIHI7Ci0gIH0KLQotCiAgIC8qIFRoZXJlIGFyZSAzIHdheXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLCBkaXN0aW5ndWlzaGVkIGJ5IGNvZGUuICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogLiBDRkZfQ09ERV9UT1BESUNUIGZvciBlaXRoZXIgYSBDRkYgVG9wIERJQ1Qgb3IgYSBDRkYgRm9udCBESUNUICovCkBAIC0xOTcxLDYgKzE5NjcsOCBAQAogICAgIENGRl9Gb250UmVjRGljdCAgdG9wICA9ICZzdWJmb250LT5mb250X2RpY3Q7CiAgICAgQ0ZGX1ByaXZhdGUgICAgICBwcml2ID0gJnN1YmZvbnQtPnByaXZhdGVfZGljdDsKIAorICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CisKICAgICBGVF9Cb29sICBjZmYyICAgICAgPSBGVF9CT09MKCBjb2RlID09IENGRjJfQ09ERV9UT1BESUNUICB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPT0gQ0ZGMl9DT0RFX0ZPTlRESUNUICk7CiAgICAgRlRfVUludCAgc3RhY2tTaXplID0gY2ZmMiA/IENGRjJfREVGQVVMVF9TVEFDSwpAQCAtMjA3Niw3ICsyMDc0LDcgQEAKICAgICAgICAqLwogICAgICAgaWYgKCBmYWNlLT5yb290LmludGVybmFsLT5yYW5kb21fc2VlZCA9PSAtMSApCiAgICAgICB7Ci0gICAgICAgIENGRl9Ecml2ZXIgIGRyaXZlciA9IChDRkZfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CisgICAgICAgIFBTX0RyaXZlciAgZHJpdmVyID0gKFBTX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApOwogCiAKICAgICAgICAgc3ViZm9udC0+cmFuZG9tID0gKEZUX1VJbnQzMilkcml2ZXItPnJhbmRvbV9zZWVkOwpAQCAtMjA4NCw3ICsyMDgyLDggQEAKICAgICAgICAgewogICAgICAgICAgIGRvCiAgICAgICAgICAgewotICAgICAgICAgICAgZHJpdmVyLT5yYW5kb21fc2VlZCA9IChGVF9JbnQzMiljZmZfcmFuZG9tKCBkcml2ZXItPnJhbmRvbV9zZWVkICk7CisgICAgICAgICAgICBkcml2ZXItPnJhbmRvbV9zZWVkID0KKyAgICAgICAgICAgICAgKEZUX0ludDMyKXBzYXV4LT5jZmZfcmFuZG9tKCAoRlRfVUludDMyKWRyaXZlci0+cmFuZG9tX3NlZWQgKTsKIAogICAgICAgICAgIH0gd2hpbGUgKCBkcml2ZXItPnJhbmRvbV9zZWVkIDwgMCApOwogICAgICAgICB9CkBAIC0yMDk3LDcgKzIwOTYsOCBAQAogICAgICAgICAgIGRvCiAgICAgICAgICAgewogICAgICAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+cmFuZG9tX3NlZWQgPQotICAgICAgICAgICAgICAoRlRfSW50MzIpY2ZmX3JhbmRvbSggZmFjZS0+cm9vdC5pbnRlcm5hbC0+cmFuZG9tX3NlZWQgKTsKKyAgICAgICAgICAgICAgKEZUX0ludDMyKXBzYXV4LT5jZmZfcmFuZG9tKAorICAgICAgICAgICAgICAgIChGVF9VSW50MzIpZmFjZS0+cm9vdC5pbnRlcm5hbC0+cmFuZG9tX3NlZWQgKTsKIAogICAgICAgICAgIH0gd2hpbGUgKCBmYWNlLT5yb290LmludGVybmFsLT5yYW5kb21fc2VlZCA8IDAgKTsKICAgICAgICAgfQpAQCAtMjI3Myw4ICsyMjczLDEwIEBACiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KIAotICAgICAgLyogZm9udCBuYW1lcyBtdXN0IG5vdCBiZSBlbXB0eSAqLwotICAgICAgaWYgKCBmb250LT5uYW1lX2luZGV4LmRhdGFfc2l6ZSA8IGZvbnQtPm5hbWVfaW5kZXguY291bnQgKQorICAgICAgLyogaWYgd2UgaGF2ZSBhbiBlbXB0eSBmb250IG5hbWUsICAgICAgKi8KKyAgICAgIC8qIGl0IG11c3QgYmUgdGhlIG9ubHkgZm9udCBpbiB0aGUgQ0ZGICovCisgICAgICBpZiAoIGZvbnQtPm5hbWVfaW5kZXguY291bnQgPiAxICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBmb250LT5uYW1lX2luZGV4LmRhdGFfc2l6ZSA8IGZvbnQtPm5hbWVfaW5kZXguY291bnQgKQogICAgICAgewogICAgICAgICAvKiBmb3IgcHVyZSBDRkZzLCB3ZSBzdGlsbCBoYXZlbid0IGNoZWNrZWQgZW5vdWdoIGJ5dGVzICovCiAgICAgICAgIC8qIHRvIGJlIHN1cmUgdGhhdCBpdCBpcyBhIENGRiBhdCBhbGwgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI1MzYsNiArMjUzOCw4IEBACiAgICAgICBmb250LT5jZjJfaW5zdGFuY2UuZmluYWxpemVyKCBmb250LT5jZjJfaW5zdGFuY2UuZGF0YSApOwogICAgICAgRlRfRlJFRSggZm9udC0+Y2YyX2luc3RhbmNlLmRhdGEgKTsKICAgICB9CisKKyAgICBGVF9GUkVFKCBmb250LT5mb250X2V4dHJhICk7CiAgIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmxvYWQuaCBiL3NyYy9jZmYvY2ZmbG9hZC5oCmluZGV4IGM3NDVlODEuLjE0ZDE0ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmbG9hZC5oCisrKyBiL3NyYy9jZmYvY2ZmbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlICYgQ0ZGIGRhdGEvcHJvZ3JhbSB0YWJsZXMgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMSw5ICsyMSw5IEBACiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSAiY2ZmdHlwZXMuaCIKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ICiAjaW5jbHVkZSAiY2ZmcGFyc2UuaCIKLSNpbmNsdWRlICJjZmZvYmpzLmgiICAvKiBmb3IgQ0ZGX0ZhY2UgKi8KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9PQkpFQ1RTX1RZUEVTX0ggIC8qIGZvciBDRkZfRmFjZSAqLwogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtNjEsOSArNjEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgY2lkICk7CiAKIAotICBGVF9MT0NBTCggRlRfVUludDMyICkKLSAgY2ZmX3JhbmRvbSggRlRfVUludDMyICByICk7Ci0KICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2ZmX2ZvbnRfbG9hZCggRlRfTGlicmFyeSAgbGlicmFyeSwKICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtLApkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZvYmpzLmMgYi9zcmMvY2ZmL2NmZm9ianMuYwppbmRleCA4MzIyNzYxLi5hMmQ3YWVjIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZm9ianMuYworKysgYi9zcmMvY2ZmL2NmZm9ianMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBvYmplY3RzIG1hbmFnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUsOCArMjUsMTUgQEAKICNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAotI2luY2x1ZGUgRlRfQ0ZGX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9NRVRSSUNTX1ZBUklBVElPTlNfSAorI2VuZGlmCisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9PQkpFQ1RTX1RZUEVTX0gKICNpbmNsdWRlICJjZmZvYmpzLmgiCiAjaW5jbHVkZSAiY2ZmbG9hZC5oIgogI2luY2x1ZGUgImNmZmNtYXAuaCIKQEAgLTM0LDYgKzQxLDkgQEAKIAogI2luY2x1ZGUgImNmZmVycnMuaCIKIAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9DRkZfVEFCTEVfTE9BRF9ICisKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00OSw5ICs1OSw2IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBOb3RlIHRoYXQgd2Ugc3RvcmUgdGhlIGdsb2JhbCBoaW50cyBpbiB0aGUgc2l6ZSdzIGBpbnRlcm5hbCcgcm9vdCAgICAqLwotICAvKiAgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKQEAgLTc1LDEwICs4MiwxMSBAQAogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICBjZmZfc2l6ZV9kb25lKCBGVF9TaXplICBjZmZzaXplICkgICAgICAgIC8qIENGRl9TaXplICovCiAgIHsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSAgID0gY2Zmc2l6ZS0+ZmFjZS0+bWVtb3J5OwogICAgIENGRl9TaXplICAgICAgc2l6ZSAgICAgPSAoQ0ZGX1NpemUpY2Zmc2l6ZTsKICAgICBDRkZfRmFjZSAgICAgIGZhY2UgICAgID0gKENGRl9GYWNlKXNpemUtPnJvb3QuZmFjZTsKICAgICBDRkZfRm9udCAgICAgIGZvbnQgICAgID0gKENGRl9Gb250KWZhY2UtPmV4dHJhLmRhdGE7Ci0gICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpY2Zmc2l6ZS0+aW50ZXJuYWw7CisgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpY2Zmc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhOwogCiAKICAgICBpZiAoIGludGVybmFsICkKQEAgLTk4LDcgKzEwNiw3IEBACiAgICAgICAgICAgZnVuY3MtPmRlc3Ryb3koIGludGVybmFsLT5zdWJmb250c1tpIC0gMV0gKTsKICAgICAgIH0KIAotICAgICAgLyogYGludGVybmFsJyBpcyBmcmVlZCBieSBkZXN0cm95X3NpemUgKGluIGZ0b2Jqcy5jKSAqLworICAgICAgRlRfRlJFRSggaW50ZXJuYWwgKTsKICAgICB9CiAgIH0KIApAQCAtMTk0LDcgKzIwMiw3IEBACiAgICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQogCi0gICAgICBjZmZzaXplLT5pbnRlcm5hbCA9IChGVF9TaXplX0ludGVybmFsKSh2b2lkKilpbnRlcm5hbDsKKyAgICAgIGNmZnNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YSA9IGludGVybmFsOwogICAgIH0KIAogICAgIHNpemUtPnN0cmlrZV9pbmRleCA9IDB4RkZGRkZGRkZVTDsKQEAgLTIyNCw3ICsyMzIsNyBAQAogICAgIHsKICAgICAgIENGRl9GYWNlICAgICAgZmFjZSAgICAgPSAoQ0ZGX0ZhY2Upc2l6ZS0+ZmFjZTsKICAgICAgIENGRl9Gb250ICAgICAgZm9udCAgICAgPSAoQ0ZGX0ZvbnQpZmFjZS0+ZXh0cmEuZGF0YTsKLSAgICAgIENGRl9JbnRlcm5hbCAgaW50ZXJuYWwgPSAoQ0ZGX0ludGVybmFsKXNpemUtPmludGVybmFsOworICAgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhOwogCiAgICAgICBGVF9Mb25nICB0b3BfdXBtICA9IChGVF9Mb25nKWZvbnQtPnRvcF9mb250LmZvbnRfZGljdC51bml0c19wZXJfZW07CiAgICAgICBGVF9VSW50ICBpOwpAQCAtMjk2LDcgKzMwNCw3IEBACiAgICAgewogICAgICAgQ0ZGX0ZhY2UgICAgICBjZmZmYWNlICA9IChDRkZfRmFjZSlzaXplLT5mYWNlOwogICAgICAgQ0ZGX0ZvbnQgICAgICBmb250ICAgICA9IChDRkZfRm9udCljZmZmYWNlLT5leHRyYS5kYXRhOwotICAgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpc2l6ZS0+aW50ZXJuYWw7CisgICAgICBDRkZfSW50ZXJuYWwgIGludGVybmFsID0gKENGRl9JbnRlcm5hbClzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGE7CiAKICAgICAgIEZUX0xvbmcgIHRvcF91cG0gID0gKEZUX0xvbmcpZm9udC0+dG9wX2ZvbnQuZm9udF9kaWN0LnVuaXRzX3Blcl9lbTsKICAgICAgIEZUX1VJbnQgIGk7CkBAIC00MDUsNyArNDEzLDcgQEAKICAgcmVtb3ZlX3N1YnNldF9wcmVmaXgoIEZUX1N0cmluZyogIG5hbWUgKQogICB7CiAgICAgRlRfSW50MzIgIGlkeCAgICAgICAgICAgICA9IDA7Ci0gICAgRlRfSW50MzIgIGxlbmd0aCAgICAgICAgICA9IChGVF9JbnQzMilzdHJsZW4oIG5hbWUgKSArIDE7CisgICAgRlRfSW50MzIgIGxlbmd0aCAgICAgICAgICA9IChGVF9JbnQzMilmdF9zdHJsZW4oIG5hbWUgKSArIDE7CiAgICAgRlRfQm9vbCAgIGNvbnRpbnVlX3NlYXJjaCA9IDE7CiAKIApAQCAtNDQyLDggKzQ1MCw4IEBACiAgICAgRlRfSW50MzIgIGZhbWlseV9uYW1lX2xlbmd0aCwgc3R5bGVfbmFtZV9sZW5ndGg7CiAKIAotICAgIGZhbWlseV9uYW1lX2xlbmd0aCA9IChGVF9JbnQzMilzdHJsZW4oIGZhbWlseV9uYW1lICk7Ci0gICAgc3R5bGVfbmFtZV9sZW5ndGggID0gKEZUX0ludDMyKXN0cmxlbiggc3R5bGVfbmFtZSApOworICAgIGZhbWlseV9uYW1lX2xlbmd0aCA9IChGVF9JbnQzMilmdF9zdHJsZW4oIGZhbWlseV9uYW1lICk7CisgICAgc3R5bGVfbmFtZV9sZW5ndGggID0gKEZUX0ludDMyKWZ0X3N0cmxlbiggc3R5bGVfbmFtZSApOwogCiAgICAgaWYgKCBmYW1pbHlfbmFtZV9sZW5ndGggPiBzdHlsZV9uYW1lX2xlbmd0aCApCiAgICAgewpAQCAtNDkwLDE0ICs0OTgsMTYgQEAKICAgICBTRk5UX1NlcnZpY2UgICAgICAgIHNmbnQ7CiAgICAgRlRfU2VydmljZV9Qc0NNYXBzICBwc25hbWVzOwogICAgIFBTSGludGVyX1NlcnZpY2UgICAgcHNoaW50ZXI7CisgICAgUFNBdXhfU2VydmljZSAgICAgICBwc2F1eDsKKyAgICBGVF9TZXJ2aWNlX0NGRkxvYWQgIGNmZmxvYWQ7CiAgICAgRlRfQm9vbCAgICAgICAgICAgICBwdXJlX2NmZiAgICA9IDE7CiAgICAgRlRfQm9vbCAgICAgICAgICAgICBjZmYyICAgICAgICA9IDA7CiAgICAgRlRfQm9vbCAgICAgICAgICAgICBzZm50X2Zvcm1hdCA9IDA7CiAgICAgRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5ICAgICA9IGNmZmZhY2UtPmRyaXZlci0+cm9vdC5saWJyYXJ5OwogCiAKLSAgICBzZm50ID0gKFNGTlRfU2VydmljZSlGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSgKLSAgICAgICAgICAgICBsaWJyYXJ5LCAic2ZudCIgKTsKKyAgICBzZm50ID0gKFNGTlRfU2VydmljZSlGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNmbnQiICk7CiAgICAgaWYgKCAhc2ZudCApCiAgICAgewogICAgICAgRlRfRVJST1IoKCAiY2ZmX2ZhY2VfaW5pdDogY2Fubm90IGFjY2VzcyBgc2ZudCcgbW9kdWxlXG4iICkpOwpAQCAtNTA3LDggKzUxNywyMCBAQAogCiAgICAgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKCBmYWNlLCBwc25hbWVzLCBQT1NUU0NSSVBUX0NNQVBTICk7CiAKLSAgICBwc2hpbnRlciA9IChQU0hpbnRlcl9TZXJ2aWNlKUZUX0dldF9Nb2R1bGVfSW50ZXJmYWNlKAotICAgICAgICAgICAgICAgICBsaWJyYXJ5LCAicHNoaW50ZXIiICk7CisgICAgcHNoaW50ZXIgPSAoUFNIaW50ZXJfU2VydmljZSlGVF9HZXRfTW9kdWxlX0ludGVyZmFjZSggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHNoaW50ZXIiICk7CisKKyAgICBwc2F1eCA9IChQU0F1eF9TZXJ2aWNlKUZUX0dldF9Nb2R1bGVfSW50ZXJmYWNlKCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwc2F1eCIgKTsKKyAgICBpZiAoICFwc2F1eCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiY2ZmX2ZhY2VfaW5pdDogY2Fubm90IGFjY2VzcyBgcHNhdXgnIG1vZHVsZVxuIiApKTsKKyAgICAgIGVycm9yID0gRlRfVEhST1coIE1pc3NpbmdfTW9kdWxlICk7CisgICAgICBnb3RvIEV4aXQ7CisgICAgfQorICAgIGZhY2UtPnBzYXV4ID0gcHNhdXg7CisKKyAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIGNmZmxvYWQsIENGRl9MT0FEICk7CiAKICAgICBGVF9UUkFDRTIoKCAiQ0ZGIGRyaXZlclxuIiApKTsKIApAQCAtNjExLDYgKzYzMyw3IEBACiAKICAgICAgIGNmZi0+cHNoaW50ZXIgPSBwc2hpbnRlcjsKICAgICAgIGNmZi0+cHNuYW1lcyAgPSBwc25hbWVzOworICAgICAgY2ZmLT5jZmZsb2FkICA9IGNmZmxvYWQ7CiAKICAgICAgIGNmZmZhY2UtPmZhY2VfaW5kZXggPSBmYWNlX2luZGV4ICYgMHhGRkZGOwogCkBAIC02ODcsNTAgKzcxMCwyMiBAQAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogICAgICAgewotICAgICAgICBGVF9TZXJ2aWNlX011bHRpTWFzdGVycyAgbW0gPSAoRlRfU2VydmljZV9NdWx0aU1hc3RlcnMpZmFjZS0+bW07CisgICAgICAgIEZUX1NlcnZpY2VfTXVsdGlNYXN0ZXJzICAgICAgIG1tICA9IChGVF9TZXJ2aWNlX011bHRpTWFzdGVycylmYWNlLT5tbTsKKyAgICAgICAgRlRfU2VydmljZV9NZXRyaWNzVmFyaWF0aW9ucyAgdmFyID0gKEZUX1NlcnZpY2VfTWV0cmljc1ZhcmlhdGlvbnMpZmFjZS0+dmFyOwogCi0gICAgICAgIEZUX0ludCAgaW5zdGFuY2VfaW5kZXggPSBmYWNlX2luZGV4ID4+IDE2OworICAgICAgICBGVF9VSW50ICBpbnN0YW5jZV9pbmRleCA9IChGVF9VSW50KWZhY2VfaW5kZXggPj4gMTY7CiAKIAogICAgICAgICBpZiAoIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTKCBjZmZmYWNlICkgJiYKICAgICAgICAgICAgICBtbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgaW5zdGFuY2VfaW5kZXggPiAwICAgICAgICAgICAgICAgICApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9NTV9WYXIqICBtbV92YXI7Ci0KLQotICAgICAgICAgIGVycm9yID0gbW0tPmdldF9tbV92YXIoIGNmZmZhY2UsIE5VTEwgKTsKKyAgICAgICAgICBlcnJvciA9IG1tLT5zZXRfaW5zdGFuY2UoIGNmZmZhY2UsIGluc3RhbmNlX2luZGV4ICk7CiAgICAgICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgICAgICBtbS0+Z2V0X3Zhcl9ibGVuZCggY2ZmZmFjZSwgTlVMTCwgTlVMTCwgTlVMTCwgJm1tX3ZhciApOwotCi0gICAgICAgICAgaWYgKCBtbV92YXItPm5hbWVkc3R5bGUgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEZUX1Zhcl9OYW1lZF9TdHlsZSogIG5hbWVkX3N0eWxlOwotICAgICAgICAgICAgRlRfU3RyaW5nKiAgICAgICAgICAgc3R5bGVfbmFtZTsKLQotCi0gICAgICAgICAgICAvKiBpbiBgZmFjZV9pbmRleCcsIHRoZSBpbnN0YW5jZSBpbmRleCBzdGFydHMgd2l0aCB2YWx1ZSAxICovCi0gICAgICAgICAgICBuYW1lZF9zdHlsZSA9IG1tX3Zhci0+bmFtZWRzdHlsZSArIGluc3RhbmNlX2luZGV4IC0gMTsKLSAgICAgICAgICAgIGVycm9yID0gc2ZudC0+Z2V0X25hbWUoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KW5hbWVkX3N0eWxlLT5zdHJpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZV9uYW1lICk7Ci0gICAgICAgICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgICAgICAgZ290byBFeGl0OwotCi0gICAgICAgICAgICAvKiBzZXQgc3R5bGUgbmFtZTsgaWYgYWxyZWFkeSBzZXQsIHJlcGxhY2UgaXQgKi8KLSAgICAgICAgICAgIGlmICggZmFjZS0+cm9vdC5zdHlsZV9uYW1lICkKLSAgICAgICAgICAgICAgRlRfRlJFRSggZmFjZS0+cm9vdC5zdHlsZV9uYW1lICk7Ci0gICAgICAgICAgICBmYWNlLT5yb290LnN0eWxlX25hbWUgPSBzdHlsZV9uYW1lOwotCi0gICAgICAgICAgICAvKiBmaW5hbGx5LCBzZWxlY3QgdGhlIG5hbWVkIGluc3RhbmNlICovCi0gICAgICAgICAgICBlcnJvciA9IG1tLT5zZXRfdmFyX2Rlc2lnbiggY2ZmZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbV92YXItPm51bV9heGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkX3N0eWxlLT5jb29yZHMgKTsKLSAgICAgICAgICAgIGlmICggZXJyb3IgKQotICAgICAgICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICAgICAgfQorICAgICAgICAgIGlmICggdmFyICkKKyAgICAgICAgICAgIHZhci0+bWV0cmljc19hZGp1c3QoIGNmZmZhY2UgKTsKICAgICAgICAgfQogICAgICAgfQogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKi8KQEAgLTg3Myw3ICs4NjgsOCBAQAogCiAgICAgICAgIGNmZmZhY2UtPmhlaWdodCA9IChGVF9TaG9ydCkoICggY2ZmZmFjZS0+dW5pdHNfcGVyX0VNICogMTIgKSAvIDEwICk7CiAgICAgICAgIGlmICggY2ZmZmFjZS0+aGVpZ2h0IDwgY2ZmZmFjZS0+YXNjZW5kZXIgLSBjZmZmYWNlLT5kZXNjZW5kZXIgKQotICAgICAgICAgIGNmZmZhY2UtPmhlaWdodCA9IChGVF9TaG9ydCkoIGNmZmZhY2UtPmFzY2VuZGVyIC0gY2ZmZmFjZS0+ZGVzY2VuZGVyICk7CisgICAgICAgICAgY2ZmZmFjZS0+aGVpZ2h0ID0gKEZUX1Nob3J0KSggY2ZmZmFjZS0+YXNjZW5kZXIgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZmZhY2UtPmRlc2NlbmRlciApOwogCiAgICAgICAgIGNmZmZhY2UtPnVuZGVybGluZV9wb3NpdGlvbiAgPQogICAgICAgICAgIChGVF9TaG9ydCkoIGRpY3QtPnVuZGVybGluZV9wb3NpdGlvbiA+PiAxNiApOwpAQCAtODgxLDI4ICs4NzcsMzMgQEAKICAgICAgICAgICAoRlRfU2hvcnQpKCBkaWN0LT51bmRlcmxpbmVfdGhpY2tuZXNzID4+IDE2ICk7CiAKICAgICAgICAgLyogcmV0cmlldmUgZm9udCBmYW1pbHkgJiBzdHlsZSBuYW1lICovCi0gICAgICAgIGNmZmZhY2UtPmZhbWlseV9uYW1lID0gY2ZmX2luZGV4X2dldF9uYW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpKCBmYWNlX2luZGV4ICYgMHhGRkZGICkgKTsKKyAgICAgICAgaWYgKCBkaWN0LT5mYW1pbHlfbmFtZSApCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyKiAgZmFtaWx5X25hbWU7CisKKworICAgICAgICAgIGZhbWlseV9uYW1lID0gY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBjZmYsIGRpY3QtPmZhbWlseV9uYW1lICk7CisgICAgICAgICAgaWYgKCBmYW1pbHlfbmFtZSApCisgICAgICAgICAgICBjZmZmYWNlLT5mYW1pbHlfbmFtZSA9IGNmZl9zdHJjcHkoIG1lbW9yeSwgZmFtaWx5X25hbWUgKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWNmZmZhY2UtPmZhbWlseV9uYW1lICkKKyAgICAgICAgeworICAgICAgICAgIGNmZmZhY2UtPmZhbWlseV9uYW1lID0gY2ZmX2luZGV4X2dldF9uYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KSggZmFjZV9pbmRleCAmIDB4RkZGRiApICk7CisgICAgICAgICAgaWYgKCBjZmZmYWNlLT5mYW1pbHlfbmFtZSApCisgICAgICAgICAgICByZW1vdmVfc3Vic2V0X3ByZWZpeCggY2ZmZmFjZS0+ZmFtaWx5X25hbWUgKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICggY2ZmZmFjZS0+ZmFtaWx5X25hbWUgKQogICAgICAgICB7CiAgICAgICAgICAgY2hhciogIGZ1bGwgICA9IGNmZl9pbmRleF9nZXRfc2lkX3N0cmluZyggY2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QtPmZ1bGxfbmFtZSApOwogICAgICAgICAgIGNoYXIqICBmdWxscCAgPSBmdWxsOwogICAgICAgICAgIGNoYXIqICBmYW1pbHkgPSBjZmZmYWNlLT5mYW1pbHlfbmFtZTsKLSAgICAgICAgICBjaGFyKiAgZmFtaWx5X25hbWUgPSBOVUxMOwogCiAKLSAgICAgICAgICByZW1vdmVfc3Vic2V0X3ByZWZpeCggY2ZmZmFjZS0+ZmFtaWx5X25hbWUgKTsKLQotICAgICAgICAgIGlmICggZGljdC0+ZmFtaWx5X25hbWUgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZhbWlseV9uYW1lID0gY2ZmX2luZGV4X2dldF9zaWRfc3RyaW5nKCBjZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC0+ZmFtaWx5X25hbWUgKTsKLSAgICAgICAgICAgIGlmICggZmFtaWx5X25hbWUgKQotICAgICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHlfbmFtZTsKLSAgICAgICAgICB9Ci0KICAgICAgICAgICAvKiBXZSB0cnkgdG8gZXh0cmFjdCB0aGUgc3R5bGUgbmFtZSBmcm9tIHRoZSBmdWxsIG5hbWUuICAgKi8KICAgICAgICAgICAvKiBXZSBuZWVkIHRvIGlnbm9yZSBzcGFjZXMgYW5kIGRhc2hlcyBkdXJpbmcgdGhlIHNlYXJjaC4gKi8KICAgICAgICAgICBpZiAoIGZ1bGwgJiYgZmFtaWx5ICkKQEAgLTExNTYsMTYgKzExNTcsMTYgQEAKICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIGNmZl9kcml2ZXJfaW5pdCggRlRfTW9kdWxlICBtb2R1bGUgKSAgICAgICAgLyogQ0ZGX0RyaXZlciAqLwogICB7Ci0gICAgQ0ZGX0RyaXZlciAgZHJpdmVyID0gKENGRl9Ecml2ZXIpbW9kdWxlOworICAgIFBTX0RyaXZlciAgZHJpdmVyID0gKFBTX0RyaXZlciltb2R1bGU7CiAKICAgICBGVF9VSW50MzIgIHNlZWQ7CiAKIAogICAgIC8qIHNldCBkZWZhdWx0IHByb3BlcnR5IHZhbHVlcywgY2YuIGBmdGNmZmRydi5oJyAqLwogI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKLSAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfRlJFRVRZUEU7CisgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9IEZUX0hJTlRJTkdfRlJFRVRZUEU7CiAjZWxzZQotICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPSBGVF9DRkZfSElOVElOR19BRE9CRTsKKyAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfSElOVElOR19BRE9CRTsKICNlbmRpZgogCiAgICAgZHJpdmVyLT5ub19zdGVtX2RhcmtlbmluZyA9IFRSVUU7CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZm9ianMuaCBiL3NyYy9jZmYvY2Zmb2Jqcy5oCmluZGV4IDFkYmE2OTQuLjYxNmEyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2Zmb2Jqcy5oCisrKyBiL3NyYy9jZmYvY2Zmb2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMSwxMTEgKzIxLDExIEBACiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKLSNpbmNsdWRlICJjZmZ0eXBlcy5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfVFJVRVRZUEVfVFlQRVNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAogCiAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQ0ZGX0RyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQSBoYW5kbGUgdG8gYW4gT3BlblR5cGUgZHJpdmVyIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHN0cnVjdCBDRkZfRHJpdmVyUmVjXyogIENGRl9Ecml2ZXI7Ci0KLSAgdHlwZWRlZiBUVF9GYWNlICBDRkZfRmFjZTsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENGRl9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGFuIE9wZW5UeXBlIHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9TaXplUmVjXwotICB7Ci0gICAgRlRfU2l6ZVJlYyAgcm9vdDsKLSAgICBGVF9VTG9uZyAgICBzdHJpa2VfaW5kZXg7ICAgIC8qIDB4RkZGRkZGRkYgdG8gaW5kaWNhdGUgaW52YWxpZCAqLwotCi0gIH0gQ0ZGX1NpemVSZWMsICpDRkZfU2l6ZTsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIENGRl9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEEgaGFuZGxlIHRvIGFuIE9wZW5UeXBlIGdseXBoIHNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9HbHlwaFNsb3RSZWNfCi0gIHsKLSAgICBGVF9HbHlwaFNsb3RSZWMgIHJvb3Q7Ci0KLSAgICBGVF9Cb29sICAgICAgICAgIGhpbnQ7Ci0gICAgRlRfQm9vbCAgICAgICAgICBzY2FsZWQ7Ci0KLSAgICBGVF9GaXhlZCAgICAgICAgIHhfc2NhbGU7Ci0gICAgRlRfRml4ZWQgICAgICAgICB5X3NjYWxlOwotCi0gIH0gQ0ZGX0dseXBoU2xvdFJlYywgKkNGRl9HbHlwaFNsb3Q7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBDRkZfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBUaGUgaW50ZXJmYWNlIHRvIHRoZSBgaW50ZXJuYWwnIGZpZWxkIG9mIGBGVF9TaXplJy4gICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHR5cGVkZWYgc3RydWN0ICBDRkZfSW50ZXJuYWxSZWNfCi0gIHsKLSAgICBQU0hfR2xvYmFscyAgdG9wZm9udDsKLSAgICBQU0hfR2xvYmFscyAgc3ViZm9udHNbQ0ZGX01BWF9DSURfRk9OVFNdOwotCi0gIH0gQ0ZGX0ludGVybmFsUmVjLCAqQ0ZGX0ludGVybmFsOwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdWJnbHlwaCB0cmFuc2Zvcm1hdGlvbiByZWNvcmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHR5cGVkZWYgc3RydWN0ICBDRkZfVHJhbnNmb3JtXwotICB7Ci0gICAgRlRfRml4ZWQgICAgeHgsIHh5OyAgICAgLyogdHJhbnNmb3JtYXRpb24gbWF0cml4IGNvZWZmaWNpZW50cyAqLwotICAgIEZUX0ZpeGVkICAgIHl4LCB5eTsKLSAgICBGVF9GMjZEb3Q2ICBveCwgb3k7ICAgICAvKiBvZmZzZXRzICAgICAgICAqLwotCi0gIH0gQ0ZGX1RyYW5zZm9ybTsKLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBDRkYgZHJpdmVyIGNsYXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgdHlwZWRlZiBzdHJ1Y3QgIENGRl9Ecml2ZXJSZWNfCi0gIHsKLSAgICBGVF9Ecml2ZXJSZWMgIHJvb3Q7Ci0KLSAgICBGVF9VSW50ICAgaGludGluZ19lbmdpbmU7Ci0gICAgRlRfQm9vbCAgIG5vX3N0ZW1fZGFya2VuaW5nOwotICAgIEZUX0ludCAgICBkYXJrZW5fcGFyYW1zWzhdOwotICAgIEZUX0ludDMyICByYW5kb21fc2VlZDsKLQotICB9IENGRl9Ecml2ZXJSZWM7Ci0KLQogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICBjZmZfc2l6ZV9pbml0KCBGVF9TaXplICBzaXplICk7ICAgICAgICAgICAvKiBDRkZfU2l6ZSAqLwogCkBAIC0xNzEsMTAgKzcxLDEwIEBACiAgIC8qIERyaXZlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKLSAgY2ZmX2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIG1vZHVsZSApOyAgICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KKyAgY2ZmX2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIG1vZHVsZSApOyAgICAgICAgIC8qIFBTX0RyaXZlciAqLwogCiAgIEZUX0xPQ0FMKCB2b2lkICkKLSAgY2ZmX2RyaXZlcl9kb25lKCBGVF9Nb2R1bGUgIG1vZHVsZSApOyAgICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KKyAgY2ZmX2RyaXZlcl9kb25lKCBGVF9Nb2R1bGUgIG1vZHVsZSApOyAgICAgICAgIC8qIFBTX0RyaXZlciAqLwogCiAKIEZUX0VORF9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmcGFyc2UuYyBiL3NyYy9jZmYvY2ZmcGFyc2UuYwppbmRleCA1OWZhMjkwLi5iOTYxMWNmIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnBhcnNlLmMKKysrIGIvc3JjL2NmZi9jZmZwYXJzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiB0b2tlbiBzdHJlYW0gcGFyc2VyIChib2R5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMCwxMCArMjAsMTEgQEAKICNpbmNsdWRlICJjZmZwYXJzZS5oIgogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAogCiAjaW5jbHVkZSAiY2ZmZXJycy5oIgogI2luY2x1ZGUgImNmZnBpYy5oIgotI2luY2x1ZGUgImNmZmdsb2FkLmgiCiAjaW5jbHVkZSAiY2ZmbG9hZC5oIgogCiAKQEAgLTE1Niw2ICsxNTcsMjIgQEAKICAgICAxMDAwMDAwMDAwTAogICB9OwogCisgIC8qIG1heGltdW0gdmFsdWVzIGFsbG93ZWQgZm9yIG11bHRpcGx5aW5nICAgICAgKi8KKyAgLyogd2l0aCB0aGUgY29ycmVzcG9uZGluZyBgcG93ZXJfdGVucycgZWxlbWVudCAqLworICBzdGF0aWMgY29uc3QgRlRfTG9uZyBwb3dlcl90ZW5fbGltaXRzW10gPQorICB7CisgICAgRlRfTE9OR19NQVggLyAxTCwKKyAgICBGVF9MT05HX01BWCAvIDEwTCwKKyAgICBGVF9MT05HX01BWCAvIDEwMEwsCisgICAgRlRfTE9OR19NQVggLyAxMDAwTCwKKyAgICBGVF9MT05HX01BWCAvIDEwMDAwTCwKKyAgICBGVF9MT05HX01BWCAvIDEwMDAwMEwsCisgICAgRlRfTE9OR19NQVggLyAxMDAwMDAwTCwKKyAgICBGVF9MT05HX01BWCAvIDEwMDAwMDAwTCwKKyAgICBGVF9MT05HX01BWCAvIDEwMDAwMDAwMEwsCisgICAgRlRfTE9OR19NQVggLyAxMDAwMDAwMDAwTCwKKyAgfTsKKwogCiAgIC8qIHJlYWQgYSByZWFsICovCiAgIHN0YXRpYyBGVF9GaXhlZApAQCAtNDg0LDcgKzUwMSwxNSBAQAogCiAKICAgICAgIGlmICggc2NhbGluZyApCisgICAgICB7CisgICAgICAgIGlmICggRlRfQUJTKCB2YWwgKSA+IHBvd2VyX3Rlbl9saW1pdHNbc2NhbGluZ10gKQorICAgICAgICB7CisgICAgICAgICAgdmFsID0gdmFsID4gMCA/IDB4N0ZGRkZGRkZMIDogLTB4N0ZGRkZGRkZMOworICAgICAgICAgIGdvdG8gT3ZlcmZsb3c7CisgICAgICAgIH0KKwogICAgICAgICB2YWwgKj0gcG93ZXJfdGVuc1tzY2FsaW5nXTsKKyAgICAgIH0KIAogICAgICAgaWYgKCB2YWwgPiAweDdGRkYgKQogICAgICAgewpAQCAtODk0LDggKzkxOSw2IEBACiAgICAgRlRfRXJyb3IgICAgIGVycm9yOwogCiAKLSAgICBlcnJvciA9IEZUX0VSUiggU3RhY2tfVW5kZXJmbG93ICk7Ci0KICAgICBpZiAoICFwcml2IHx8ICFwcml2LT5zdWJmb250ICkKICAgICB7CiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CkBAIC05MjYsNyArOTQ5LDkgQEAKICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKLSAgICBGVF9UUkFDRTQoKCAiICAgJWQgdmFsdWVzIGJsZW5kZWRcbiIsIG51bUJsZW5kcyApKTsKKyAgICBGVF9UUkFDRTQoKCAiICAgJWQgdmFsdWUlcyBibGVuZGVkXG4iLAorICAgICAgICAgICAgICAgIG51bUJsZW5kcywKKyAgICAgICAgICAgICAgICBudW1CbGVuZHMgPT0gMSA/ICIiIDogInMiICkpOwogCiAgICAgZXJyb3IgPSBjZmZfYmxlbmRfZG9CbGVuZCggc3ViRm9udCwgcGFyc2VyLCBudW1CbGVuZHMgKTsKIApAQCAtMTI3Niw5ICsxMzAxLDE0IEBACiAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICBzdGFydCwKICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGxpbWl0ICkKICAgeworI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eDsKKyNlbmRpZgorCiAgICAgRlRfQnl0ZSogICAgcCAgICAgICA9IHN0YXJ0OwogICAgIEZUX0Vycm9yICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CiAgICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IHBhcnNlci0+bGlicmFyeTsKKwogICAgIEZUX1VOVVNFRCggbGlicmFyeSApOwogCiAKQEAgLTEzNjUsMTAgKzEzOTUsMTYgQEAKICAgICAgICAgY2ZmX3JlYy50b3BfZm9udC5mb250X2RpY3QubnVtX2F4ZXMgICAgPSBwYXJzZXItPm51bV9heGVzOwogICAgICAgICBkZWNvZGVyLmNmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZjZmZfcmVjOwogCi0gICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICk7CisgICAgICAgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UoIGxpYnJhcnksICJwc2F1eCIgKTsKKyAgICAgICAgaWYgKCAhcHNhdXggKQorICAgICAgICB7CisgICAgICAgICAgRlRfRVJST1IoKCAiY2ZmX3BhcnNlcl9ydW46IGNhbm5vdCBhY2Nlc3MgYHBzYXV4JyBtb2R1bGVcbiIgKSk7CisgICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggTWlzc2luZ19Nb2R1bGUgKTsKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBlcnJvciA9IHBzYXV4LT5jZmZfZGVjb2Rlcl9mdW5jcy0+cGFyc2VfY2hhcnN0cmluZ3Nfb2xkKAorICAgICAgICAgICAgICAgICAgJmRlY29kZXIsIGNoYXJzdHJpbmdfYmFzZSwgY2hhcnN0cmluZ19sZW4sIDEgKTsKIAogICAgICAgICAvKiBOb3cgY29weSB0aGUgc3RhY2sgZGF0YSBpbiB0aGUgdGVtcG9yYXJ5IGRlY29kZXIgb2JqZWN0LCAgICAqLwogICAgICAgICAvKiBjb252ZXJ0aW5nIGl0IGJhY2sgdG8gY2hhcnN0cmluZyBudW1iZXIgcmVwcmVzZW50YXRpb25zICAgICAqLwpAQCAtMTU4Nyw3ICsxNjIzLDcgQEAKICAgICAgICAgICAgICAgICB2YWwgPSAwOwogICAgICAgICAgICAgICAgIHdoaWxlICggbnVtX2FyZ3MgPiAwICkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICB2YWwgKz0gY2ZmX3BhcnNlX251bSggcGFyc2VyLCBkYXRhKysgKTsKKyAgICAgICAgICAgICAgICAgIHZhbCA9IEFERF9MT05HKCB2YWwsIGNmZl9wYXJzZV9udW0oIHBhcnNlciwgZGF0YSsrICkgKTsKICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoIGZpZWxkLT5zaXplICkKICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIGNhc2UgKDggLyBGVF9DSEFSX0JJVCk6CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBhcnNlLmggYi9zcmMvY2ZmL2NmZnBhcnNlLmgKaW5kZXggOTk3NmQ0Mi4uOGE4Y2FlYyAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZwYXJzZS5oCisrKyBiL3NyYy9jZmYvY2ZmcGFyc2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgdG9rZW4gc3RyZWFtIHBhcnNlciAoc3BlY2lmaWNhdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjEsNyArMjEsNyBAQAogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgImNmZnR5cGVzLmgiCisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DRkZfVFlQRVNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICiAKIApAQCAtMzEsOCArMzEsMTYgQEAKICAgLyogQ0ZGIHVzZXMgY29uc3RhbnQgcGFyc2VyIHN0YWNrIHNpemU7ICovCiAgIC8qIENGRjIgY2FuIGluY3JlYXNlIGZyb20gZGVmYXVsdCAxOTMgICAqLwogI2RlZmluZSBDRkZfTUFYX1NUQUNLX0RFUFRIICA5NgorCisgIC8qCisgICAqICBUaGVyZSBhcmUgcGxhbnMgdG8gcmVtb3ZlIHRoZSBgbWF4c3RhY2snIG9wZXJhdG9yIGluIGEgZm9ydGhjb21pbmcKKyAgICogIHJldmlzaW9uIG9mIHRoZSBDRkYyIHNwZWNpZmljYXRpb24sIGluY3JlYXNpbmcgdGhlICh0aGVuIHN0YXRpYykgc3RhY2sKKyAgICogIHNpemUgdG8gNTEzLiAgQnkgbWFraW5nIHRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZXF1YWwgdG8gdGhlIG1heGltdW0KKyAgICogIHN0YWNrIHNpemUsIHRoZSBvcGVyYXRvciBpcyBlc3NlbnRpYWxseSBkaXNhYmxlZCwgd2hpY2ggaGFzIHRoZQorICAgKiAgZGVzaXJlZCBlZmZlY3QgaW4gRnJlZVR5cGUuCisgICAqLwogI2RlZmluZSBDRkYyX01BWF9TVEFDSyAgICAgIDUxMwotI2RlZmluZSBDRkYyX0RFRkFVTFRfU1RBQ0sgIDE5MworI2RlZmluZSBDRkYyX0RFRkFVTFRfU1RBQ0sgIDUxMwogCiAjZGVmaW5lIENGRl9DT0RFX1RPUERJQ1QgICAgMHgxMDAwCiAjZGVmaW5lIENGRl9DT0RFX1BSSVZBVEUgICAgMHgyMDAwCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBpYy5jIGIvc3JjL2NmZi9jZmZwaWMuYwppbmRleCA0ZTliYTEyLi4wOGI3NGM3IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnBpYy5jCisrKyBiL3NyYy9jZmYvY2ZmcGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGNmZiBtb2R1bGUuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmcGljLmggYi9zcmMvY2ZmL2NmZnBpYy5oCmluZGV4IDVkYjM5Y2QuLjhiYTQyMDMgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmcGljLmgKKysrIGIvc3JjL2NmZi9jZmZwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgY2ZmIG1vZHVsZS4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjIsNyArMjIsNiBAQAogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSAogCi0KICNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9QSUMKIAogI2RlZmluZSBDRkZfU0VSVklDRV9QU19JTkZPX0dFVCAgICAgICAgICBjZmZfc2VydmljZV9wc19pbmZvCkBAIC0zNCw2ICszMyw3IEBACiAjZGVmaW5lIENGRl9TRVJWSUNFU19HRVQgICAgICAgICAgICAgICAgIGNmZl9zZXJ2aWNlcwogI2RlZmluZSBDRkZfU0VSVklDRV9NVUxUSV9NQVNURVJTX0dFVCAgICBjZmZfc2VydmljZV9tdWx0aV9tYXN0ZXJzCiAjZGVmaW5lIENGRl9TRVJWSUNFX01FVFJJQ1NfVkFSX0dFVCAgICAgIGNmZl9zZXJ2aWNlX21ldHJpY3NfdmFyaWF0aW9ucworI2RlZmluZSBDRkZfU0VSVklDRV9DRkZfTE9BRF9HRVQgICAgICAgICBjZmZfc2VydmljZV9jZmZfbG9hZAogI2RlZmluZSBDRkZfQ01BUF9FTkNPRElOR19DTEFTU19SRUNfR0VUICBjZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWMKICNkZWZpbmUgQ0ZGX0NNQVBfVU5JQ09ERV9DTEFTU19SRUNfR0VUICAgY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMKICNkZWZpbmUgQ0ZGX0ZJRUxEX0hBTkRMRVJTX0dFVCAgICAgICAgICAgY2ZmX2ZpZWxkX2hhbmRsZXJzCkBAIC02NSw2ICs2NSw3IEBACiAgICAgRlRfU2VydmljZV9Qcm9wZXJ0aWVzUmVjICAgICAgICAgY2ZmX3NlcnZpY2VfcHJvcGVydGllczsKICAgICBGVF9TZXJ2aWNlX011bHRpTWFzdGVyc1JlYyAgICAgICBjZmZfc2VydmljZV9tdWx0aV9tYXN0ZXJzOwogICAgIEZUX1NlcnZpY2VfTWV0cmljc1ZhcmlhdGlvbnNSZWMgIGNmZl9zZXJ2aWNlX21ldHJpY3NfdmFyaWF0aW9uczsKKyAgICBGVF9TZXJ2aWNlX0NGRkxvYWRSZWMgICAgICAgICAgICBjZmZfc2VydmljZV9jZmZfbG9hZDsKICAgICBGVF9DTWFwX0NsYXNzUmVjICAgICAgICAgICAgICAgICBjZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWM7CiAgICAgRlRfQ01hcF9DbGFzc1JlYyAgICAgICAgICAgICAgICAgY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWM7CiAKQEAgLTkyLDYgKzkzLDggQEAKICAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX3NlcnZpY2VfbXVsdGlfbWFzdGVycyApCiAjZGVmaW5lIENGRl9TRVJWSUNFX01FVFJJQ1NfVkFSX0dFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoIEdFVF9QSUMoIGxpYnJhcnkgKS0+Y2ZmX3NlcnZpY2VfbWV0cmljc192YXJpYXRpb25zICkKKyNkZWZpbmUgQ0ZGX1NFUlZJQ0VfQ0ZGX0xPQURfR0VUICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCBHRVRfUElDKCBsaWJyYXJ5ICktPmNmZl9zZXJ2aWNlX2NmZl9sb2FkICkKICNkZWZpbmUgQ0ZGX0NNQVBfRU5DT0RJTkdfQ0xBU1NfUkVDX0dFVCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggR0VUX1BJQyggbGlicmFyeSApLT5jZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWMgKQogI2RlZmluZSBDRkZfQ01BUF9VTklDT0RFX0NMQVNTX1JFQ19HRVQgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmdG9rZW4uaCBiL3NyYy9jZmYvY2ZmdG9rZW4uaAppbmRleCAzMjIyZTkzLi5mZWMxY2EyIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnRva2VuLmgKKysrIGIvc3JjL2NmZi9jZmZ0b2tlbi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENGRiB0b2tlbiBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL21vZHVsZS5tayBiL3NyYy9jZmYvbW9kdWxlLm1rCmluZGV4IDI5NzVhZWUuLjgwMTNkNWQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvbW9kdWxlLm1rCisrKyBiL3NyYy9jZmYvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9jZmYvcnVsZXMubWsgYi9zcmMvY2ZmL3J1bGVzLm1rCmluZGV4IDg2ODQwYmYuLmJjZTY3MjkgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvcnVsZXMubWsKKysrIGIvc3JjL2NmZi9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0zMiwyNyArMzIsMTQgQEAKICAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2ZmbG9hZC5jICBcCiAgICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmZm9ianMuYyAgXAogICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZwYXJzZS5jIFwKLSAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2ZmcGljLmMgICBcCi0gICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmMmFycnN0LmMgXAotICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJibHVlcy5jIFwKLSAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2YyZXJyb3IuYyBcCi0gICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmMmZvbnQuYyAgXAotICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJmdC5jICAgIFwKLSAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2YyaGludHMuYyBcCi0gICAgICAgICAgICAgICAkKENGRl9ESVIpL2NmMmludHJwLmMgXAotICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZjJyZWFkLmMgIFwKLSAgICAgICAgICAgICAgICQoQ0ZGX0RJUikvY2Yyc3RhY2suYworICAgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZwaWMuYwogCiAKICMgQ0ZGIGRyaXZlciBoZWFkZXJzCiAjCiBDRkZfRFJWX0ggOj0gJChDRkZfRFJWX1NSQzolLmM9JS5oKSBcCiAgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZlcnJzLmggICBcCi0gICAgICAgICAgICAgJChDRkZfRElSKS9jZmZ0b2tlbi5oICBcCi0gICAgICAgICAgICAgJChDRkZfRElSKS9jZmZ0eXBlcy5oICBcCi0gICAgICAgICAgICAgJChDRkZfRElSKS9jZjJmaXhlZC5oICBcCi0gICAgICAgICAgICAgJChDRkZfRElSKS9jZjJnbHVlLmggICBcCi0gICAgICAgICAgICAgJChDRkZfRElSKS9jZjJ0eXBlcy5oCisgICAgICAgICAgICAgJChDRkZfRElSKS9jZmZ0b2tlbi5oCiAKIAogIyBDRkYgZHJpdmVyIG9iamVjdChzKQpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9KYW1maWxlIGIvc3JjL2NpZC9KYW1maWxlCmluZGV4IDhkM2JhNmEuLjFjMjMyZmQgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvSmFtZmlsZQorKysgYi9zcmMvY2lkL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL2NpZCBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZGVycnMuaCBiL3NyYy9jaWQvY2lkZXJycy5oCmluZGV4IDcwOWRjOGMuLmE1YTg2ZTMgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkZXJycy5oCisrKyBiL3NyYy9jaWQvY2lkZXJycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENJRCBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZGdsb2FkLmMgYi9zcmMvY2lkL2NpZGdsb2FkLmMKaW5kZXggYjk2YzMzMy4uZDE0ZjlhMiAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRnbG9hZC5jCisrKyBiL3NyYy9jaWQvY2lkZ2xvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQta2V5ZWQgVHlwZTEgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjQsNiArMjQsMTAgQEAKICNpbmNsdWRlIEZUX09VVExJTkVfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICiAKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NGRl9UWVBFU19ICisjaW5jbHVkZSBGVF9EUklWRVJfSAorCiAjaW5jbHVkZSAiY2lkZXJycy5oIgogCiAKQEAgLTUyLDkgKzU2LDExIEBACiAgICAgRlRfVUxvbmcgICAgICAgZ2x5cGhfbGVuZ3RoID0gMDsKICAgICBQU0F1eF9TZXJ2aWNlICBwc2F1eCAgICAgICAgPSAoUFNBdXhfU2VydmljZSlmYWNlLT5wc2F1eDsKIAorICAgIEZUX0Jvb2wgIGZvcmNlX3NjYWxpbmcgPSBGQUxTRTsKKwogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKLSAgICBGVF9JbmNyZW1lbnRhbF9JbnRlcmZhY2VSZWMgKmluYyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlOworICAgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyAgKmluYyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZTsKICNlbmRpZgogCiAKQEAgLTE2OSw5ICsxNzUsNTcgQEAKICAgICAgIGlmICggZGVjb2Rlci0+bGVuSVYgPj0gMCApCiAgICAgICAgIHBzYXV4LT50MV9kZWNyeXB0KCBjaGFyc3RyaW5nLCBnbHlwaF9sZW5ndGgsIDQzMzAgKTsKIAotICAgICAgZXJyb3IgPSBkZWNvZGVyLT5mdW5jcy5wYXJzZV9jaGFyc3RyaW5ncygKLSAgICAgICAgICAgICAgICBkZWNvZGVyLCBjaGFyc3RyaW5nICsgY3Nfb2Zmc2V0LAotICAgICAgICAgICAgICAgIGdseXBoX2xlbmd0aCAtIGNzX29mZnNldCApOworICAgICAgLyogY2hvb3NlIHdoaWNoIHJlbmRlcmVyIHRvIHVzZSAqLworI2lmZGVmIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgICAgaWYgKCAoIChQU19Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKSApLT5oaW50aW5nX2VuZ2luZSA9PQorICAgICAgICAgICAgICAgRlRfSElOVElOR19GUkVFVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICBkZWNvZGVyLT5idWlsZGVyLm1ldHJpY3Nfb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGVycm9yID0gcHNhdXgtPnQxX2RlY29kZXJfZnVuY3MtPnBhcnNlX2NoYXJzdHJpbmdzX29sZCgKKyAgICAgICAgICAgICAgICAgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICsgY3Nfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgZ2x5cGhfbGVuZ3RoIC0gY3Nfb2Zmc2V0ICk7CisjZWxzZQorICAgICAgaWYgKCBkZWNvZGVyLT5idWlsZGVyLm1ldHJpY3Nfb25seSApCisgICAgICAgIGVycm9yID0gcHNhdXgtPnQxX2RlY29kZXJfZnVuY3MtPnBhcnNlX21ldHJpY3MoCisgICAgICAgICAgICAgICAgICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZyArIGNzX29mZnNldCwKKyAgICAgICAgICAgICAgICAgIGdseXBoX2xlbmd0aCAtIGNzX29mZnNldCApOworI2VuZGlmCisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIFBTX0RlY29kZXIgICAgICBwc2RlY29kZXI7CisgICAgICAgIENGRl9TdWJGb250UmVjICBzdWJmb250OworCisKKyAgICAgICAgcHNhdXgtPnBzX2RlY29kZXJfaW5pdCggJnBzZGVjb2RlciwgZGVjb2RlciwgVFJVRSApOworCisgICAgICAgIHBzYXV4LT50MV9tYWtlX3N1YmZvbnQoIEZUX0ZBQ0UoIGZhY2UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRpY3QtPnByaXZhdGVfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YmZvbnQgKTsKKyAgICAgICAgcHNkZWNvZGVyLmN1cnJlbnRfc3ViZm9udCA9ICZzdWJmb250OworCisgICAgICAgIGVycm9yID0gcHNhdXgtPnQxX2RlY29kZXJfZnVuY3MtPnBhcnNlX2NoYXJzdHJpbmdzKAorICAgICAgICAgICAgICAgICAgJnBzZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmcgKyBjc19vZmZzZXQsCisgICAgICAgICAgICAgICAgICBnbHlwaF9sZW5ndGggLSBjc19vZmZzZXQgKTsKKworICAgICAgICAvKiBBZG9iZSdzIGVuZ2luZSB1c2VzIDE2LjE2IG51bWJlcnMgZXZlcnl3aGVyZTsgICAgICAgICAgICAgICovCisgICAgICAgIC8qIGFzIGEgY29uc2VxdWVuY2UsIGdseXBocyBsYXJnZXIgdGhhbiAyMDAwcHBlbSBnZXQgcmVqZWN0ZWQgKi8KKyAgICAgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yLCBHbHlwaF9Ub29fQmlnICkgKQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyB0aW1lLCB3ZSByZXRyeSB1bmhpbnRlZCBhbmQgc2NhbGUgdXAgdGhlIGdseXBoIGxhdGVyIG9uICovCisgICAgICAgICAgLyogKHRoZSBlbmdpbmUgdXNlcyBhbmQgc2V0cyB0aGUgaGFyZGNvZGVkIHZhbHVlIDB4MTAwMDAgLyA2NCA9ICovCisgICAgICAgICAgLyogMHg0MDAgZm9yIGJvdGggYHhfc2NhbGUnIGFuZCBgeV9zY2FsZScgaW4gdGhpcyBjYXNlKSAgICAgICAgICovCisgICAgICAgICAgKChDSURfR2x5cGhTbG90KWRlY29kZXItPmJ1aWxkZXIuZ2x5cGgpLT5oaW50ID0gRkFMU0U7CisKKyAgICAgICAgICBmb3JjZV9zY2FsaW5nID0gVFJVRTsKKworICAgICAgICAgIGVycm9yID0gcHNhdXgtPnQxX2RlY29kZXJfZnVuY3MtPnBhcnNlX2NoYXJzdHJpbmdzKAorICAgICAgICAgICAgICAgICAgICAmcHNkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICsgY3Nfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBnbHlwaF9sZW5ndGggLSBjc19vZmZzZXQgKTsKKyAgICAgICAgfQorICAgICAgfQogICAgIH0KIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKQEAgLTIwMCw2ICsyNTQsOCBAQAogICBFeGl0OgogICAgIEZUX0ZSRUUoIGNoYXJzdHJpbmcgKTsKIAorICAgICgoQ0lEX0dseXBoU2xvdClkZWNvZGVyLT5idWlsZGVyLmdseXBoKS0+c2NhbGVkID0gZm9yY2Vfc2NhbGluZzsKKwogICAgIHJldHVybiBlcnJvcjsKICAgfQogCkBAIC0yODgsMTAgKzM0NCwxMiBAQAogICAgIFQxX0RlY29kZXJSZWMgIGRlY29kZXI7CiAgICAgQ0lEX0ZhY2UgICAgICAgZmFjZSA9IChDSURfRmFjZSljaWRnbHlwaC0+ZmFjZTsKICAgICBGVF9Cb29sICAgICAgICBoaW50aW5nOworICAgIEZUX0Jvb2wgICAgICAgIHNjYWxlZDsKIAogICAgIFBTQXV4X1NlcnZpY2UgIHBzYXV4ID0gKFBTQXV4X1NlcnZpY2UpZmFjZS0+cHNhdXg7CiAgICAgRlRfTWF0cml4ICAgICAgZm9udF9tYXRyaXg7CiAgICAgRlRfVmVjdG9yICAgICAgZm9udF9vZmZzZXQ7CisgICAgRlRfQm9vbCAgICAgICAgbXVzdF9maW5pc2hfZGVjb2RlciA9IEZBTFNFOwogCiAKICAgICBpZiAoIGdseXBoX2luZGV4ID49IChGVF9VSW50KWZhY2UtPnJvb3QubnVtX2dseXBocyApCkBAIC0zMTEsNyArMzY5LDEwIEBACiAKICAgICBoaW50aW5nID0gRlRfQk9PTCggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSAgICkgPT0gMCAmJgogICAgICAgICAgICAgICAgICAgICAgICAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX0hJTlRJTkcgKSA9PSAwICk7CisgICAgc2NhbGVkICA9IEZUX0JPT0woICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgICApID09IDAgKTsKIAorICAgIGdseXBoLT5oaW50ICAgICAgPSBoaW50aW5nOworICAgIGdseXBoLT5zY2FsZWQgICAgPSBzY2FsZWQ7CiAgICAgY2lkZ2x5cGgtPmZvcm1hdCA9IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FOwogCiAgICAgZXJyb3IgPSBwc2F1eC0+dDFfZGVjb2Rlcl9mdW5jcy0+aW5pdCggJmRlY29kZXIsCkBAIC0zMjksNiArMzkwLDggQEAKICAgICAvKiBUT0RPOiBpbml0aWFsaXplIGRlY29kZXIubGVuX2J1aWxkY2hhciBhbmQgZGVjb2Rlci5idWlsZGNoYXIgKi8KICAgICAvKiAgICAgICBpZiB3ZSBldmVyIHN1cHBvcnQgQ0lELWtleWVkIG11bHRpcGxlIG1hc3RlciBmb250cyAgICAgKi8KIAorICAgIG11c3RfZmluaXNoX2RlY29kZXIgPSBUUlVFOworCiAgICAgLyogc2V0IHVwIHRoZSBkZWNvZGVyICovCiAgICAgZGVjb2Rlci5idWlsZGVyLm5vX3JlY3Vyc2UgPSBGVF9CT09MKAogICAgICAgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1JFQ1VSU0UgKSAhPSAwICkgKTsKQEAgLTMzNywxMiArNDAwLDE4IEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CiAKKyAgICAvKiBjb3B5IGZsYWdzIGJhY2sgZm9yIGZvcmNlZCBzY2FsaW5nICovCisgICAgaGludGluZyA9IGdseXBoLT5oaW50OworICAgIHNjYWxlZCAgPSBnbHlwaC0+c2NhbGVkOworCiAgICAgZm9udF9tYXRyaXggPSBkZWNvZGVyLmZvbnRfbWF0cml4OwogICAgIGZvbnRfb2Zmc2V0ID0gZGVjb2Rlci5mb250X29mZnNldDsKIAogICAgIC8qIHNhdmUgbmV3IGdseXBoIHRhYmxlcyAqLwogICAgIHBzYXV4LT50MV9kZWNvZGVyX2Z1bmNzLT5kb25lKCAmZGVjb2RlciApOwogCisgICAgbXVzdF9maW5pc2hfZGVjb2RlciA9IEZBTFNFOworCiAgICAgLyogbm93IHNldCB0aGUgbWV0cmljcyAtLSB0aGlzIGlzIHJhdGhlciBzaW1wbGUsIGFzICAgICovCiAgICAgLyogdGhlIGxlZnQgc2lkZSBiZWFyaW5nIGlzIHRoZSB4TWluLCBhbmQgdGhlIHRvcCBzaWRlICovCiAgICAgLyogYmVhcmluZyB0aGUgeU1heCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MTAsNyArNDc5LDcgQEAKICAgICAgICAgbWV0cmljcy0+dmVydEFkdmFuY2UgKz0gZm9udF9vZmZzZXQueTsKICAgICAgIH0KIAotICAgICAgaWYgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCApCisgICAgICBpZiAoICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwIHx8IHNjYWxlZCApCiAgICAgICB7CiAgICAgICAgIC8qIHNjYWxlIHRoZSBvdXRsaW5lIGFuZCB0aGUgbWV0cmljcyAqLwogICAgICAgICBGVF9JbnQgICAgICAgbjsKQEAgLTQ1MSw2ICs1MjAsMTAgQEAKICAgICB9CiAKICAgRXhpdDoKKworICAgIGlmICggbXVzdF9maW5pc2hfZGVjb2RlciApCisgICAgICBwc2F1eC0+dDFfZGVjb2Rlcl9mdW5jcy0+ZG9uZSggJmRlY29kZXIgKTsKKwogICAgIHJldHVybiBlcnJvcjsKICAgfQogCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZGdsb2FkLmggYi9zcmMvY2lkL2NpZGdsb2FkLmgKaW5kZXggN2Y4MTZiNS4uNDgxMTg1MiAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRnbG9hZC5oCisrKyBiL3NyYy9jaWQvY2lkZ2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRsb2FkLmMgYi9zcmMvY2lkL2NpZGxvYWQuYwppbmRleCBmZjA3MjIxLi4yN2NkMDliIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGxvYWQuYworKysgYi9zcmMvY2lkL2NpZGxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQta2V5ZWQgVHlwZTEgZm9udCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRsb2FkLmggYi9zcmMvY2lkL2NpZGxvYWQuaAppbmRleCA0NWEwZTZkLi4zZjhiZDA4IDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZGxvYWQuaAorKysgYi9zcmMvY2lkL2NpZGxvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQta2V5ZWQgVHlwZTEgZm9udCBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRvYmpzLmMgYi9zcmMvY2lkL2NpZG9ianMuYwppbmRleCA3ODMwZTFmLi43N2FmZTFjIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZG9ianMuYworKysgYi9zcmMvY2lkL2NpZG9ianMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSAorI2luY2x1ZGUgRlRfRFJJVkVSX0gKIAogI2luY2x1ZGUgImNpZGVycnMuaCIKIApAQCAtMTEzLDE2ICsxMTQsMTYgQEAKICAgICBDSURfU2l6ZSAgc2l6ZSA9IChDSURfU2l6ZSljaWRzaXplOwogCiAKLSAgICBpZiAoIGNpZHNpemUtPmludGVybmFsICkKKyAgICBpZiAoIGNpZHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YSApCiAgICAgewogICAgICAgUFNIX0dsb2JhbHNfRnVuY3MgIGZ1bmNzOwogCiAKICAgICAgIGZ1bmNzID0gY2lkX3NpemVfZ2V0X2dsb2JhbHNfZnVuY3MoIHNpemUgKTsKICAgICAgIGlmICggZnVuY3MgKQotICAgICAgICBmdW5jcy0+ZGVzdHJveSggKFBTSF9HbG9iYWxzKWNpZHNpemUtPmludGVybmFsICk7CisgICAgICAgIGZ1bmNzLT5kZXN0cm95KCAoUFNIX0dsb2JhbHMpY2lkc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhICk7CiAKLSAgICAgIGNpZHNpemUtPmludGVybmFsID0gTlVMTDsKKyAgICAgIGNpZHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YSA9IE5VTEw7CiAgICAgfQogICB9CiAKQEAgLTE0NSw3ICsxNDYsNyBAQAogCiAgICAgICBlcnJvciA9IGZ1bmNzLT5jcmVhdGUoIGNpZHNpemUtPmZhY2UtPm1lbW9yeSwgcHJpdiwgJmdsb2JhbHMgKTsKICAgICAgIGlmICggIWVycm9yICkKLSAgICAgICAgY2lkc2l6ZS0+aW50ZXJuYWwgPSAoRlRfU2l6ZV9JbnRlcm5hbCkodm9pZCopZ2xvYmFsczsKKyAgICAgICAgY2lkc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhID0gZ2xvYmFsczsKICAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CkBAIC0xNjQsNyArMTY1LDcgQEAKICAgICBmdW5jcyA9IGNpZF9zaXplX2dldF9nbG9iYWxzX2Z1bmNzKCAoQ0lEX1NpemUpc2l6ZSApOwogCiAgICAgaWYgKCBmdW5jcyApCi0gICAgICBmdW5jcy0+c2V0X3NjYWxlKCAoUFNIX0dsb2JhbHMpc2l6ZS0+aW50ZXJuYWwsCisgICAgICBmdW5jcy0+c2V0X3NjYWxlKCAoUFNIX0dsb2JhbHMpc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy54X3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+bWV0cmljcy55X3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCApOwpAQCAtNDYzLDkgKzQ2NCw0MiBAQAogICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMCBtZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQotICBjaWRfZHJpdmVyX2luaXQoIEZUX01vZHVsZSAgZHJpdmVyICkKKyAgY2lkX2RyaXZlcl9pbml0KCBGVF9Nb2R1bGUgIG1vZHVsZSApCiAgIHsKLSAgICBGVF9VTlVTRUQoIGRyaXZlciApOworICAgIFBTX0RyaXZlciAgZHJpdmVyID0gKFBTX0RyaXZlciltb2R1bGU7CisKKyAgICBGVF9VSW50MzIgIHNlZWQ7CisKKworICAgIC8qIHNldCBkZWZhdWx0IHByb3BlcnR5IHZhbHVlcywgY2YuIGBmdHQxZHJ2LmgnICovCisjaWZkZWYgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9IEZUX0hJTlRJTkdfRlJFRVRZUEU7CisjZWxzZQorICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPSBGVF9ISU5USU5HX0FET0JFOworI2VuZGlmCisKKyAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gVFJVRTsKKworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1swXSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDE7CisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzFdID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9ZMTsKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMl0gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gyOworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1szXSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTI7CisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzRdID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMzsKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNV0gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kzOworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s2XSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDQ7CisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzddID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9ZNDsKKworICAgIC8qIGNvbXB1dGUgcmFuZG9tIHNlZWQgZnJvbSBzb21lIG1lbW9yeSBhZGRyZXNzZXMgKi8KKyAgICBzZWVkID0gKEZUX1VJbnQzMikoIChGVF9PZmZzZXQpKGNoYXIqKSZzZWVkICAgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgIChGVF9PZmZzZXQpKGNoYXIqKSZtb2R1bGUgICAgICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICAgIChGVF9PZmZzZXQpKGNoYXIqKW1vZHVsZS0+bWVtb3J5ICk7CisgICAgc2VlZCA9IHNlZWQgXiAoIHNlZWQgPj4gMTAgKSBeICggc2VlZCA+PiAyMCApOworCisgICAgZHJpdmVyLT5yYW5kb21fc2VlZCA9IChGVF9JbnQzMilzZWVkOworICAgIGlmICggZHJpdmVyLT5yYW5kb21fc2VlZCA8IDAgKQorICAgICAgZHJpdmVyLT5yYW5kb21fc2VlZCA9IC1kcml2ZXItPnJhbmRvbV9zZWVkOworICAgIGVsc2UgaWYgKCBkcml2ZXItPnJhbmRvbV9zZWVkID09IDAgKQorICAgICAgZHJpdmVyLT5yYW5kb21fc2VlZCA9IDEyMzQ1Njc4OTsKIAogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkb2Jqcy5oIGIvc3JjL2NpZC9jaWRvYmpzLmgKaW5kZXggOGJjZjg4Ni4uMDIyMWYwMSAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRvYmpzLmgKKysrIGIvc3JjL2NpZC9jaWRvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0lEIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaWQvY2lkcGFyc2UuYyBiL3NyYy9jaWQvY2lkcGFyc2UuYwppbmRleCAwMDc2MDliLi5iMWM3ZjNjIDEwMDY0NAotLS0gYS9zcmMvY2lkL2NpZHBhcnNlLmMKKysrIGIvc3JjL2NpZC9jaWRwYXJzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIENJRC1rZXllZCBUeXBlMSBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZHBhcnNlLmggYi9zcmMvY2lkL2NpZHBhcnNlLmgKaW5kZXggMjBiZWJiOS4uNjE2MDJmNyAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRwYXJzZS5oCisrKyBiL3NyYy9jaWQvY2lkcGFyc2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDSUQta2V5ZWQgVHlwZTEgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWRyaXZlci5jIGIvc3JjL2NpZC9jaWRyaXZlci5jCmluZGV4IGJiNjExYTkuLmQ5ZmFmMzUgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkcml2ZXIuYworKysgYi9zcmMvY2lkL2NpZHJpdmVyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0lEIGRyaXZlciBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjaWRyaXZlci5oIgogI2luY2x1ZGUgImNpZGdsb2FkLmgiCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX1BST1BTX0gKIAogI2luY2x1ZGUgImNpZGVycnMuaCIKIApAQCAtMjcsNiArMjgsMTAgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0lORk9fSAogI2luY2x1ZGUgRlRfU0VSVklDRV9DSURfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKKyNpbmNsdWRlIEZUX0RSSVZFUl9ICisKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTY4LDYgKzE3MywxOCBAQAogCiAKICAgLyoKKyAgICogIFBST1BFUlRZIFNFUlZJQ0UKKyAgICoKKyAgICovCisKKyAgRlRfREVGSU5FX1NFUlZJQ0VfUFJPUEVSVElFU1JFQygKKyAgICBjaWRfc2VydmljZV9wcm9wZXJ0aWVzLAorCisgICAgKEZUX1Byb3BlcnRpZXNfU2V0RnVuYylwc19wcm9wZXJ0eV9zZXQsICAgICAgLyogc2V0X3Byb3BlcnR5ICovCisgICAgKEZUX1Byb3BlcnRpZXNfR2V0RnVuYylwc19wcm9wZXJ0eV9nZXQgKSAgICAgLyogZ2V0X3Byb3BlcnR5ICovCisKKworICAvKgogICAgKiAgU0VSVklDRSBMSVNUCiAgICAqCiAgICAqLwpAQCAtMTc4LDYgKzE5NSw3IEBACiAgICAgeyBGVF9TRVJWSUNFX0lEX1BPU1RTQ1JJUFRfRk9OVF9OQU1FLCAmY2lkX3NlcnZpY2VfcHNfbmFtZSB9LAogICAgIHsgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0lORk8sICAgICAgJmNpZF9zZXJ2aWNlX3BzX2luZm8gfSwKICAgICB7IEZUX1NFUlZJQ0VfSURfQ0lELCAgICAgICAgICAgICAgICAgICZjaWRfc2VydmljZV9jaWRfaW5mbyB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJmNpZF9zZXJ2aWNlX3Byb3BlcnRpZXMgfSwKICAgICB7IE5VTEwsIE5VTEwgfQogICB9OwogCkBAIC0yMDAsNyArMjE4LDcgQEAKICAgICAgIEZUX01PRFVMRV9GT05UX0RSSVZFUiAgICAgICB8CiAgICAgICBGVF9NT0RVTEVfRFJJVkVSX1NDQUxBQkxFICAgfAogICAgICAgRlRfTU9EVUxFX0RSSVZFUl9IQVNfSElOVEVSLAotICAgICAgc2l6ZW9mICggRlRfRHJpdmVyUmVjICksCisgICAgICBzaXplb2YgKCBQU19Ecml2ZXJSZWMgKSwKIAogICAgICAgInQxY2lkIiwgICAvKiBtb2R1bGUgbmFtZSAgICAgICAgICAgKi8KICAgICAgIDB4MTAwMDBMLCAgLyogdmVyc2lvbiAxLjAgb2YgZHJpdmVyICovCmRpZmYgLS1naXQgYS9zcmMvY2lkL2NpZHJpdmVyLmggYi9zcmMvY2lkL2NpZHJpdmVyLmgKaW5kZXggNzY2NDBjNS4uNTlkOWRlZCAxMDA2NDQKLS0tIGEvc3JjL2NpZC9jaWRyaXZlci5oCisrKyBiL3NyYy9jaWQvY2lkcml2ZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIaWdoLWxldmVsIENJRCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NpZC9jaWR0b2tlbi5oIGIvc3JjL2NpZC9jaWR0b2tlbi5oCmluZGV4IDY1M2NjNTUuLmIwZTJkYWMgMTAwNjQ0Ci0tLSBhL3NyYy9jaWQvY2lkdG9rZW4uaAorKysgYi9zcmMvY2lkL2NpZHRva2VuLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0lEIHRva2VuIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jaWQvbW9kdWxlLm1rIGIvc3JjL2NpZC9tb2R1bGUubWsKaW5kZXggYjMwYjg2Ny4uOTAxMGUzMyAxMDA2NDQKLS0tIGEvc3JjL2NpZC9tb2R1bGUubWsKKysrIGIvc3JjL2NpZC9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2NpZC9ydWxlcy5tayBiL3NyYy9jaWQvcnVsZXMubWsKaW5kZXggZmNkZGQ5Mi4uOTQzMzNiZCAxMDA2NDQKLS0tIGEvc3JjL2NpZC9ydWxlcy5taworKysgYi9zcmMvY2lkL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9jaWQvdHlwZTFjaWQuYyBiL3NyYy9jaWQvdHlwZTFjaWQuYwppbmRleCBhZWI5YzNlLi42MTc3MGUzIDEwMDY0NAotLS0gYS9zcmMvY2lkL3R5cGUxY2lkLmMKKysrIGIvc3JjL2NpZC90eXBlMWNpZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIE9wZW5UeXBlIGRyaXZlciBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywxMyArMTcsMTMgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSAiY2lkcGFyc2UuYyIKKworI2luY2x1ZGUgImNpZGdsb2FkLmMiCiAjaW5jbHVkZSAiY2lkbG9hZC5jIgogI2luY2x1ZGUgImNpZG9ianMuYyIKKyNpbmNsdWRlICJjaWRwYXJzZS5jIgogI2luY2x1ZGUgImNpZHJpdmVyLmMiCi0jaW5jbHVkZSAiY2lkZ2xvYWQuYyIKIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL0phbWZpbGUgYi9zcmMvZ3h2YWxpZC9KYW1maWxlCmluZGV4IGExMjAxMjguLjc0ZjNjNTEgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL0phbWZpbGUKKysrIGIvc3JjL2d4dmFsaWQvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvZ3h2YWxpZCBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDA1LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDUtMjAxOCBieQogIyBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPIGFuZCBSZWQgSGF0IEsuSy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL1JFQURNRSBiL3NyYy9neHZhbGlkL1JFQURNRQppbmRleCA3MjAxNDU5Li5hZjgxMjhlIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9SRUFETUUKKysrIGIvc3JjL2d4dmFsaWQvUkVBRE1FCkBAIC05LDcgKzksNyBAQAogICBhZGRpdGlvbmFsIHRhYmxlcyAgaW4gVHJ1ZVR5cGUgIGZvbnQgd2hpY2ggYXJlICB1c2VkIGJ5ICBgUXVpY2tEcmF3IEdYCiAgIFRleHQnLCAgQXBwbGUgQWR2YW5jZWQgIFR5cG9ncmFwaHkgIChBQVQpLiAgSW4gIGFkZGl0aW9uLCBneHZhbGlkICBjYW4KICAgdmFsaWRhdGVzIGBrZXJuJyAgdGFibGVzIHdoaWNoIGhhdmUgIGJlZW4gZXh0ZW5kZWQgZm9yIEFBVC4gICBMaWtlIHRoZQotICBvdHZhbGlkICBtb2R1bGUsICAgZ3h2YWxpZCAgdXNlcyAgRnJlZXR5cGUgICAyJ3MgIHZhbGlkYXRvciAgZnJhbWV3b3JrCisgIG90dmFsaWQgIG1vZHVsZSwgICBneHZhbGlkICB1c2VzICAgRnJlZVR5cGUgIDIncyAgdmFsaWRhdG9yICBmcmFtZXdvcmsKICAgKGZ0dmFsaWQpLgogCiAgIFlvdSBjYW4gbGluayBneHZhbGlkIHdpdGggeW91ciBwcm9ncmFtOyBiZWZvcmUgcnVubmluZyB5b3VyIG93biBsYXlvdXQKQEAgLTI4NywxMSArMjg3LDExIEBACiAgIDQtNS4gaW52YWxpZCBmZWF0dXJlIG51bWJlciAoMTE3LzE4MykKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgVGhlIEdYL0FBVCBleHRlbnNpb24gY2FuICBpbmNsdWRlIDI1NSBkaWZmZXJlbnQgbGF5b3V0IGZlYXR1cmVzLCBidXQKLSAgICBwb3B1bGFyICAgICAgbGF5b3V0ICAgICAgZmVhdHVyZXMgICAgICBhcmUgICAgICBwcmVkZWZpbmVkICAgICAgKHNlZQotICAgIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ZvbnRzL1JlZ2lzdHJ5L2luZGV4Lmh0bWwpLiAgIFNvbWUgIGZvbnRzCi0gICAgaW5jbHVkZSBmZWF0dXJlICBudW1iZXJzIHdoaWNoIGFyZSBpbmNvbXBhdGlibGUgIHdpdGggdGhlIHByZWRlZmluZWQKLSAgICBmZWF0dXJlIHJlZ2lzdHJ5LgorICAgIFRoZSBHWC9BQVQgIGV4dGVuc2lvbiBjYW4gIGluY2x1ZGUgMjU1IGRpZmZlcmVudCAgbGF5b3V0IGZlYXR1cmVzLAorICAgIGJ1dCAgICBwb3B1bGFyICAgIGxheW91dCAgICAgZmVhdHVyZXMgICAgYXJlICAgIHByZWRlZmluZWQgICAgKHNlZQorICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDkvQXBwZW5kaXhGLmh0bWwpLgorICAgIFNvbWUgZm9udHMgaW5jbHVkZSBmZWF0dXJlIG51bWJlcnMgd2hpY2ggYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgIHByZWRlZmluZWQgZmVhdHVyZSByZWdpc3RyeS4KIAogICAgIEluIG91ciBzdXJ2ZXksIHRoZXJlIGFyZSAxNDAgZm9udHMgaW5jbHVkaW5nIGBmZWF0JyB0YWJsZS4KIApAQCAtNTE4LDcgKzUxOCw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgMjAwNC0yMDE3IGJ5CitDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CiBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgaGF0IEsuSy4sCiBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAKZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmFsaWQuYyBiL3NyYy9neHZhbGlkL2d4dmFsaWQuYwppbmRleCBmMDY0OGVhLi5kMDU3N2EyIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZhbGlkLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2YWxpZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHZhbGlkYXRvciBmb3IgVHJ1ZVR5cGVHWC9BQVQgdGFibGVzIChib2R5IG9ubHkpLiAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNiwxNSArMTYsMTcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKIAorI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAotI2luY2x1ZGUgImd4dmZlYXQuYyIKLSNpbmNsdWRlICJneHZjb21tbi5jIgogI2luY2x1ZGUgImd4dmJzbG4uYyIKLSNpbmNsdWRlICJneHZ0cmFrLmMiCisjaW5jbHVkZSAiZ3h2Y29tbW4uYyIKKyNpbmNsdWRlICJneHZmZWF0LmMiCiAjaW5jbHVkZSAiZ3h2anVzdC5jIgorI2luY2x1ZGUgImd4dmtlcm4uYyIKKyNpbmNsdWRlICJneHZsY2FyLmMiCisjaW5jbHVkZSAiZ3h2bW9kLmMiCiAjaW5jbHVkZSAiZ3h2bW9ydC5jIgogI2luY2x1ZGUgImd4dm1vcnQwLmMiCiAjaW5jbHVkZSAiZ3h2bW9ydDEuYyIKQEAgLTM3LDExICszOSw5IEBACiAjaW5jbHVkZSAiZ3h2bW9yeDIuYyIKICNpbmNsdWRlICJneHZtb3J4NC5jIgogI2luY2x1ZGUgImd4dm1vcng1LmMiCi0jaW5jbHVkZSAiZ3h2a2Vybi5jIgogI2luY2x1ZGUgImd4dm9wYmQuYyIKICNpbmNsdWRlICJneHZwcm9wLmMiCi0jaW5jbHVkZSAiZ3h2bGNhci5jIgotI2luY2x1ZGUgImd4dm1vZC5jIgorI2luY2x1ZGUgImd4dnRyYWsuYyIKIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmFsaWQuaCBiL3NyYy9neHZhbGlkL2d4dmFsaWQuaAppbmRleCA3ODExNmVmLi4xOWYwMzc5IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZhbGlkLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2YWxpZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlR1gvQUFUIHRhYmxlIHZhbGlkYXRpb24gKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZic2xuLmMgYi9zcmMvZ3h2YWxpZC9neHZic2xuLmMKaW5kZXggODFkZmY3My4uYzM2N2QzOCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2YnNsbi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmJzbG4uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZUdYL0FBVCBic2xuIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYyBiL3NyYy9neHZhbGlkL2d4dmNvbW1uLmMKaW5kZXggZGIwYTkxZS4uYjk2NjAxMSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uYworKysgYi9zcmMvZ3h2YWxpZC9neHZjb21tbi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlR1gvQUFUIGNvbW1vbiB0YWJsZXMgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZjb21tbi5oIGIvc3JjL2d4dmFsaWQvZ3h2Y29tbW4uaAppbmRleCAxMGIxYzgwLi44ZTRmZjljIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZjb21tbi5oCisrKyBiL3NyYy9neHZhbGlkL2d4dmNvbW1uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGVHWC9BQVQgY29tbW9uIHRhYmxlcyB2YWxpZGF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmVycm9yLmggYi9zcmMvZ3h2YWxpZC9neHZlcnJvci5oCmluZGV4IDgwYTJiOGEuLmQxMTUxMjUgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmVycm9yLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2ZXJyb3IuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZUdYL0FBVCB2YWxpZGF0aW9uIG1vZHVsZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jIGIvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5jCmluZGV4IDJlM2VjNmYuLjJjODA1ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmZlYXQuYworKysgYi9zcmMvZ3h2YWxpZC9neHZmZWF0LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGVHWC9BQVQgZmVhdCB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmZlYXQuaCBiL3NyYy9neHZhbGlkL2d4dmZlYXQuaAppbmRleCA4YzBlODQ3Li4yZDk0MzgwIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZmZWF0LmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2ZmVhdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlR1gvQUFUIGZlYXQgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZmZ2VuLmMgYi9zcmMvZ3h2YWxpZC9neHZmZ2VuLmMKaW5kZXggOGNjMDhjZC4uODQwYzBmMyAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2Zmdlbi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmZnZW4uYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEdlbmVyYXRlIGZlYXR1cmUgcmVnaXN0cnkgZGF0YSBmb3IgZ3h2IGBmZWF0JyB2YWxpZGF0b3IuICAgICAgICAgICAgICovCiAvKiAgICBUaGlzIHByb2dyYW0gaXMgZGVyaXZlZCBmcm9tIGd4ZmVhdHJlZy5jIGluIGd4bGF5b3V0LiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTyBhbmQgUmVkaGF0IEsuSy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjEsNyArMjEsNyBAQAogLyogIGd4ZmVhdHJlZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBEYXRhYmFzZSBvZiBmb250IGZlYXR1cmVzIHByZS1kZWZpbmVkIGJ5IEFwcGxlIENvbXB1dGVyLCBJbmMuICAgICAgICAqLwotLyogICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZm9udHMvUmVnaXN0cnkvICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2UtTWFudWFsL1JNMDkvQXBwZW5kaXhGLmh0bWwgKi8KIC8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIENvcHlyaWdodCAyMDAzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dmp1c3QuYyBiL3NyYy9neHZhbGlkL2d4dmp1c3QuYwppbmRleCBjOGNmZDgzLi4wMGM0MjkzIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZqdXN0LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2anVzdC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlR1gvQUFUIGp1c3QgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZrZXJuLmMgYi9zcmMvZ3h2YWxpZC9neHZrZXJuLmMKaW5kZXggOWY5MDM3My4uOWMwZWZkNyAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2a2Vybi5jCisrKyBiL3NyYy9neHZhbGlkL2d4dmtlcm4uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZUdYL0FBVCBrZXJuIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bGNhci5jIGIvc3JjL2d4dmFsaWQvZ3h2bGNhci5jCmluZGV4IDc3NWQ1MjIuLjBmMjYxYTkgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dmxjYXIuYworKysgYi9zcmMvZ3h2YWxpZC9neHZsY2FyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGVHWC9BQVQgbGNhciB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vZC5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmMKaW5kZXggODRlOTI3NS4uMWEzYzg2MiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9kLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUncyBUcnVlVHlwZUdYL0FBVCB2YWxpZGF0aW9uIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vZC5oIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKaW5kZXggZGYyNWU2MC4uNzQ1YzYyZSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9kLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBGcmVlVHlwZSdzIFRydWVUeXBlR1gvQUFUIHZhbGlkYXRpb24gbW9kdWxlIGltcGxlbWVudGF0aW9uICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnQuYyBiL3NyYy9neHZhbGlkL2d4dm1vcnQuYwppbmRleCAxODRhNjMxLi5iMzYxY2IyIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0LmggYi9zcmMvZ3h2YWxpZC9neHZtb3J0LmgKaW5kZXggZDA1NDNhZC4uZDgwMzA2NCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9ydC5oCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZUdYL0FBVCBjb21tb24gZGVmaW5pdGlvbiBmb3IgbW9ydCB0YWJsZSAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDAuYyBiL3NyYy9neHZhbGlkL2d4dm1vcnQwLmMKaW5kZXggYTc1ZmFkNy4uOTVjZjUzZCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDAuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J0MC5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIGJvZHkgZm9yIHR5cGUwIChJbmRpYyBTY3JpcHQgUmVhcnJhbmdlbWVudCkgc3VidGFibGUuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0MS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDEuYwppbmRleCAzNjFlZjIyLi5hNzY4M2ExIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0MS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQxLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgYm9keSBmb3IgdHlwZTEgKENvbnRleHR1YWwgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnQyLmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J0Mi5jCmluZGV4IGMxN2U1MWUuLmMyM2MyNzcgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcnQyLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDIuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnQgdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBib2R5IGZvciB0eXBlMiAoTGlnYXR1cmUgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDQuYyBiL3NyYy9neHZhbGlkL2d4dm1vcnQ0LmMKaW5kZXggMDQxYmFiMy4uOWQyMWE1ZiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9ydDQuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J0NC5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9ydCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIGJvZHkgZm9yIHR5cGU0IChOb24tQ29udGV4dHVhbCBHbHlwaCBTdWJzdGl0dXRpb24pIHN1YnRhYmxlLiAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J0NS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9ydDUuYwppbmRleCA0NzUxZWNlLi40MmNiNDI4IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J0NS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnQ1LmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J0IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgYm9keSBmb3IgdHlwZTUgKENvbnRleHR1YWwgR2x5cGggSW5zZXJ0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcnguYyBiL3NyYy9neHZhbGlkL2d4dm1vcnguYwppbmRleCAyYmI0ZjNiLi45ZmQ2ZTZiIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4LmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4LmggYi9zcmMvZ3h2YWxpZC9neHZtb3J4LmgKaW5kZXggMjBjZWM1OC4uNmQ5OTI1ZSAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeC5oCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcnguaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZUdYL0FBVCBjb21tb24gZGVmaW5pdGlvbiBmb3IgbW9yeCB0YWJsZSAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYyBiL3NyYy9neHZhbGlkL2d4dm1vcngwLmMKaW5kZXggZTBhMGE5Mi4uMzAyMjYxYiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDAuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J4MC5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIGJvZHkgZm9yIHR5cGUwIChJbmRpYyBTY3JpcHQgUmVhcnJhbmdlbWVudCkgc3VidGFibGUuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4MS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDEuYwppbmRleCA5YWZlYmRiLi44OTBjYTc0IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4MS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcngxLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgYm9keSBmb3IgdHlwZTEgKENvbnRleHR1YWwgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm1vcngyLmMgYi9zcmMvZ3h2YWxpZC9neHZtb3J4Mi5jCmluZGV4IDNhNjBjZjYuLjMxMzUwMzEgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dm1vcngyLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDIuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIFRydWVUeXBlR1gvQUFUIG1vcnggdGFibGUgdmFsaWRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBib2R5IGZvciB0eXBlMiAoTGlnYXR1cmUgU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDQuYyBiL3NyYy9neHZhbGlkL2d4dm1vcng0LmMKaW5kZXggMjk1NTU2OC4uMWUyMzk3YiAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2bW9yeDQuYworKysgYi9zcmMvZ3h2YWxpZC9neHZtb3J4NC5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgVHJ1ZVR5cGVHWC9BQVQgbW9yeCB0YWJsZSB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIGJvZHkgZm9yICJtb3J4IiB0eXBlNCAoTm9uLUNvbnRleHR1YWwgR2x5cGggU3Vic3RpdHV0aW9uKSBzdWJ0YWJsZS4gICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZtb3J4NS5jIGIvc3JjL2d4dmFsaWQvZ3h2bW9yeDUuYwppbmRleCAwNWMxMTQxLi5kYjRmOTI5IDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZtb3J4NS5jCisrKyBiL3NyYy9neHZhbGlkL2d4dm1vcng1LmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBUcnVlVHlwZUdYL0FBVCBtb3J4IHRhYmxlIHZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgYm9keSBmb3IgdHlwZTUgKENvbnRleHR1YWwgR2x5cGggSW5zZXJ0aW9uKSBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL2d4dm9wYmQuYyBiL3NyYy9neHZhbGlkL2d4dm9wYmQuYwppbmRleCAxMTU4MGQ4Li5lMmMxNjdlIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9neHZvcGJkLmMKKysrIGIvc3JjL2d4dmFsaWQvZ3h2b3BiZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlR1gvQUFUIG9wYmQgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLCAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9neHZwcm9wLmMgYi9zcmMvZ3h2YWxpZC9neHZwcm9wLmMKaW5kZXggN2QzOThiNy4uYTY3YjZiZCAxMDA2NDQKLS0tIGEvc3JjL2d4dmFsaWQvZ3h2cHJvcC5jCisrKyBiL3NyYy9neHZhbGlkL2d4dnByb3AuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZUdYL0FBVCBwcm9wIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d4dmFsaWQvZ3h2dHJhay5jIGIvc3JjL2d4dmFsaWQvZ3h2dHJhay5jCmluZGV4IGRkNDk4MjUuLmQ1MDFiNTAgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL2d4dnRyYWsuYworKysgYi9zcmMvZ3h2YWxpZC9neHZ0cmFrLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGVHWC9BQVQgdHJhayB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBzdXp1a2kgdG9zaGl5YSwgTWFzYXRha2UgWUFNQVRPLCBSZWQgSGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9neHZhbGlkL21vZHVsZS5tayBiL3NyYy9neHZhbGlkL21vZHVsZS5tawppbmRleCA3Zjg3ZTEwLi5iNjQ4NzlkIDEwMDY0NAotLS0gYS9zcmMvZ3h2YWxpZC9tb2R1bGUubWsKKysrIGIvc3JjL2d4dmFsaWQvbW9kdWxlLm1rCkBAIC0yLDcgKzIsNyBAQAogIyBGcmVlVHlwZSAyIGd4dmFsaWQgbW9kdWxlIGRlZmluaXRpb24KICMKIAotIyBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDA0LTIwMTggYnkKICMgc3V6dWtpIHRvc2hpeWEsIE1hc2F0YWtlIFlBTUFUTywgUmVkIEhhdCBLLksuLAogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCmRpZmYgLS1naXQgYS9zcmMvZ3h2YWxpZC9ydWxlcy5tayBiL3NyYy9neHZhbGlkL3J1bGVzLm1rCmluZGV4IDEwZWMwOGMuLjNhMTdjMDMgMTAwNjQ0Ci0tLSBhL3NyYy9neHZhbGlkL3J1bGVzLm1rCisrKyBiL3NyYy9neHZhbGlkL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDIwMDQtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CiAjIHN1enVraSB0b3NoaXlhLCBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwpkaWZmIC0tZ2l0IGEvc3JjL2d6aXAvSmFtZmlsZSBiL3NyYy9nemlwL0phbWZpbGUKaW5kZXggMTcwYzEzYS4uYTdiNGM4YyAxMDA2NDQKLS0tIGEvc3JjL2d6aXAvSmFtZmlsZQorKysgYi9zcmMvZ3ppcC9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9nemlwIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9nemlwL2Z0Z3ppcC5jIGIvc3JjL2d6aXAvZnRnemlwLmMKaW5kZXggYzQ4Nzc4Ni4uZjgwMTFjMiAxMDA2NDQKLS0tIGEvc3JjL2d6aXAvZnRnemlwLmMKKysrIGIvc3JjL2d6aXAvZnRnemlwLmMKQEAgLTgsNyArOCw3IEBACiAvKiAgcGFyc2UgY29tcHJlc3NlZCBQQ0YgZm9udHMsIGFzIGZvdW5kIHdpdGggbWFueSBYMTEgc2VydmVyICAgICAgICAgICAgICAqLwogLyogIGRpc3RyaWJ1dGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9nemlwL3J1bGVzLm1rIGIvc3JjL2d6aXAvcnVsZXMubWsKaW5kZXggYmM3ZDVmYS4uMWEyZTQ4YiAxMDA2NDQKLS0tIGEvc3JjL2d6aXAvcnVsZXMubWsKKysrIGIvc3JjL2d6aXAvcnVsZXMubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAyLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL2x6dy9KYW1maWxlIGIvc3JjL2x6dy9KYW1maWxlCmluZGV4IDhlNjFmMDguLmNiODNhYTQgMTAwNjQ0Ci0tLSBhL3NyYy9sencvSmFtZmlsZQorKysgYi9zcmMvbHp3L0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL2x6dyBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDA0LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDQtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvbHp3L2Z0bHp3LmMgYi9zcmMvbHp3L2Z0bHp3LmMKaW5kZXggOTQxZjZjZS4uY2I0NmY5MyAxMDA2NDQKLS0tIGEvc3JjL2x6dy9mdGx6dy5jCisrKyBiL3NyYy9sencvZnRsencuYwpAQCAtOCw3ICs4LDcgQEAKIC8qICBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlciAgICovCiAvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEFsYmVydCBDaGluLUEtWW91bmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgYmFzZWQgb24gY29kZSBpbiBgc3JjL2d6aXAvZnRnemlwLmMnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2x6dy9mdHpvcGVuLmMgYi9zcmMvbHp3L2Z0em9wZW4uYwppbmRleCA0ODZjNTQ2Li4yYjg2OGJhIDEwMDY0NAotLS0gYS9zcmMvbHp3L2Z0em9wZW4uYworKysgYi9zcmMvbHp3L2Z0em9wZW4uYwpAQCAtOCw3ICs4LDcgQEAKIC8qICBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlciAgICovCiAvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2x6dy9mdHpvcGVuLmggYi9zcmMvbHp3L2Z0em9wZW4uaAppbmRleCBhMTA4ODYyLi40ZmQyNjdlIDEwMDY0NAotLS0gYS9zcmMvbHp3L2Z0em9wZW4uaAorKysgYi9zcmMvbHp3L2Z0em9wZW4uaApAQCAtOCw3ICs4LDcgQEAKIC8qICBiZSB1c2VkIHRvIHBhcnNlIGNvbXByZXNzZWQgUENGIGZvbnRzLCBhcyBmb3VuZCB3aXRoIG1hbnkgWDExIHNlcnZlciAgICovCiAvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2x6dy9ydWxlcy5tayBiL3NyYy9sencvcnVsZXMubWsKaW5kZXggZTdiZjY4YS4uMTg5MzNjNCAxMDA2NDQKLS0tIGEvc3JjL2x6dy9ydWxlcy5taworKysgYi9zcmMvbHp3L3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDIwMDQtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CiAjIEFsYmVydCBDaGluLUEtWW91bmcuCiAjCiAjIGJhc2VkIG9uIGBzcmMvbHp3L3J1bGVzLm1rJwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvSmFtZmlsZSBiL3NyYy9vdHZhbGlkL0phbWZpbGUKaW5kZXggYTc1NWYyYi4uMjFiOGUwYyAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvSmFtZmlsZQorKysgYi9zcmMvb3R2YWxpZC9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9vdHZhbGlkIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDQtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL21vZHVsZS5tayBiL3NyYy9vdHZhbGlkL21vZHVsZS5tawppbmRleCA1ZWUxMjY1Li4zNGYzZGFiIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9tb2R1bGUubWsKKysrIGIvc3JjL290dmFsaWQvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDIwMDQtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmFsaWQuYyBiL3NyYy9vdHZhbGlkL290dmFsaWQuYwppbmRleCAzOTAxYzU0Li40NDIzY2ExIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZhbGlkLmMKKysrIGIvc3JjL290dmFsaWQvb3R2YWxpZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHZhbGlkYXRvciBmb3IgT3BlblR5cGUgdGFibGVzIChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNSw4ICsxNSw4IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAKKyNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAKICNpbmNsdWRlICJvdHZiYXNlLmMiCkBAIC0yOCw0ICsyOCw1IEBACiAjaW5jbHVkZSAib3R2bWF0aC5jIgogI2luY2x1ZGUgIm90dm1vZC5jIgogCisKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2YWxpZC5oIGIvc3JjL290dmFsaWQvb3R2YWxpZC5oCmluZGV4IGYyOTY5Y2MuLmQ3ODAxYWIgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmFsaWQuaAorKysgYi9zcmMvb3R2YWxpZC9vdHZhbGlkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgdGFibGUgdmFsaWRhdGlvbiAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmJhc2UuYyBiL3NyYy9vdHZhbGlkL290dmJhc2UuYwppbmRleCAzYWRhZDg0Li5hMDFkNDVjIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZiYXNlLmMKKysrIGIvc3JjL290dmFsaWQvb3R2YmFzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIEJBU0UgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yODQsMjIgKzI4NCw0MSBAQAogICAgIE9UVl9WYWxpZGF0b3IgICAgIG90dmFsaWQgPSAmb3R2YWxpZHJlYzsKICAgICBGVF9CeXRlcyAgICAgICAgICBwICAgICAgID0gdGFibGU7CiAgICAgRlRfVUludCAgICAgICAgICAgdGFibGVfc2l6ZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICB2ZXJzaW9uOwogCiAgICAgT1RWX09QVElPTkFMX1RBQkxFKCBIb3JpekF4aXMgKTsKICAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIFZlcnRBeGlzICApOwogCisgICAgT1RWX09QVElPTkFMX1RBQkxFMzIoIGl0ZW1WYXJTdG9yZSApOworCiAKICAgICBvdHZhbGlkLT5yb290ID0gZnR2YWxpZDsKIAogICAgIEZUX1RSQUNFMygoICJ2YWxpZGF0aW5nIEJBU0UgdGFibGVcbiIgKSk7CiAgICAgT1RWX0lOSVQ7CiAKLSAgICBPVFZfTElNSVRfQ0hFQ0soIDYgKTsKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKIAotICAgIGlmICggRlRfTkVYVF9VTE9ORyggcCApICE9IDB4MTAwMDBVTCApICAgICAgLyogVmVyc2lvbiAqLworICAgIGlmICggRlRfTkVYVF9VU0hPUlQoIHAgKSAhPSAxICkgIC8qIG1ham9yVmVyc2lvbiAqLwogICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CiAKLSAgICB0YWJsZV9zaXplID0gNjsKKyAgICB2ZXJzaW9uID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsgICAvKiBtaW5vclZlcnNpb24gKi8KKworICAgIHRhYmxlX3NpemUgPSA4OworICAgIHN3aXRjaCAoIHZlcnNpb24gKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAxOgorICAgICAgT1RWX0xJTUlUX0NIRUNLKCA4ICk7CisgICAgICB0YWJsZV9zaXplICs9IDQ7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICB9CiAKICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUKCBIb3JpekF4aXMgKTsKICAgICBPVFZfU0laRV9DSEVDSyggSG9yaXpBeGlzICk7CkBAIC0zMTEsNiArMzMwLDE0IEBACiAgICAgaWYgKCBWZXJ0QXhpcyApCiAgICAgICBvdHZfQXhpc192YWxpZGF0ZSggdGFibGUgKyBWZXJ0QXhpcywgb3R2YWxpZCApOwogCisgICAgaWYgKCB2ZXJzaW9uID4gMCApCisgICAgeworICAgICAgT1RWX09QVElPTkFMX09GRlNFVDMyKCBpdGVtVmFyU3RvcmUgKTsKKyAgICAgIE9UVl9TSVpFX0NIRUNLMzIoIGl0ZW1WYXJTdG9yZSApOworICAgICAgaWYgKCBpdGVtVmFyU3RvcmUgKQorICAgICAgICBPVFZfVFJBQ0UoKCAiICBbb21pdHRpbmcgaXRlbVZhclN0b3JlIHZhbGlkYXRpb25dXG4iICkpOyAvKiBYWFggKi8KKyAgICB9CisKICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwogICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmNvbW1uLmMgYi9zcmMvb3R2YWxpZC9vdHZjb21tbi5jCmluZGV4IDM0MDdkMmEuLjBjY2ZiMDMgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmNvbW1uLmMKKysrIGIvc3JjL290dmFsaWQvb3R2Y29tbW4uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBjb21tb24gdGFibGVzIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzEzLDE5ICszMTMsMjYgQEAKIAogICAgIE9UVl9OQU1FX0VOVEVSKCAiRGV2aWNlIiApOwogCi0gICAgT1RWX0xJTUlUX0NIRUNLKCA4ICk7CisgICAgT1RWX0xJTUlUX0NIRUNLKCA2ICk7CiAgICAgU3RhcnRTaXplICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOwogICAgIEVuZFNpemUgICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKICAgICBEZWx0YUZvcm1hdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CiAKLSAgICBpZiAoIERlbHRhRm9ybWF0IDwgMSB8fCBEZWx0YUZvcm1hdCA+IDMgKQotICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgaWYgKCBEZWx0YUZvcm1hdCA9PSAweDgwMDBVICkKKyAgICB7CisgICAgICAvKiBWYXJpYXRpb25JbmRleCwgbm90aGluZyB0byBkbyAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgaWYgKCBEZWx0YUZvcm1hdCA8IDEgfHwgRGVsdGFGb3JtYXQgPiAzICkKKyAgICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CiAKLSAgICBpZiAoIEVuZFNpemUgPCBTdGFydFNpemUgKQotICAgICAgRlRfSU5WQUxJRF9EQVRBOworICAgICAgaWYgKCBFbmRTaXplIDwgU3RhcnRTaXplICkKKyAgICAgICAgRlRfSU5WQUxJRF9EQVRBOwogCi0gICAgY291bnQgPSBFbmRTaXplIC0gU3RhcnRTaXplICsgMTsKLSAgICBPVFZfTElNSVRfQ0hFQ0soICggMSA8PCBEZWx0YUZvcm1hdCApICogY291bnQgLyA4ICk7ICAvKiBEZWx0YVZhbHVlICovCisgICAgICBjb3VudCA9IEVuZFNpemUgLSBTdGFydFNpemUgKyAxOworICAgICAgT1RWX0xJTUlUX0NIRUNLKCAoIDEgPDwgRGVsdGFGb3JtYXQgKSAqIGNvdW50IC8gOCApOyAgLyogRGVsdGFWYWx1ZSAqLworICAgIH0KIAogICAgIE9UVl9FWElUOwogICB9CkBAIC0zNDcsNyArMzU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCiAgIHsKICAgICBGVF9CeXRlcyAgICAgICAgICAgcCA9IHRhYmxlOwotICAgIEZUX1VJbnQgICAgICAgICAgICBMb29rdXBUeXBlLCBTdWJUYWJsZUNvdW50OworICAgIEZUX1VJbnQgICAgICAgICAgICBMb29rdXBUeXBlLCBMb29rdXBGbGFnLCBTdWJUYWJsZUNvdW50OwogICAgIE9UVl9WYWxpZGF0ZV9GdW5jICB2YWxpZGF0ZTsKIAogCkBAIC0zNTUsNyArMzYyLDcgQEAKIAogICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOwogICAgIExvb2t1cFR5cGUgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOwotICAgIHAgICAgICAgICAgICArPSAyOyAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIExvb2t1cEZsYWcgKi8KKyAgICBMb29rdXBGbGFnICAgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKICAgICBTdWJUYWJsZUNvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKIAogICAgIE9UVl9UUkFDRSgoICIgKHR5cGUgJWQpXG4iLCBMb29rdXBUeXBlICkpOwpAQCAtMzczLDYgKzM4MCw5IEBACiAgICAgZm9yICggOyBTdWJUYWJsZUNvdW50ID4gMDsgU3ViVGFibGVDb3VudC0tICkKICAgICAgIHZhbGlkYXRlKCB0YWJsZSArIEZUX05FWFRfVVNIT1JUKCBwICksIG90dmFsaWQgKTsKIAorICAgIGlmICggTG9va3VwRmxhZyAmIDB4MTAgKQorICAgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7ICAvKiBNYXJrRmlsdGVyaW5nU2V0ICovCisKICAgICBPVFZfRVhJVDsKICAgfQogCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZjb21tbi5oIGIvc3JjL290dmFsaWQvb3R2Y29tbW4uaAppbmRleCAxMGE2MDNlLi5hMzkyNzg0IDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZjb21tbi5oCisrKyBiL3NyYy9vdHZhbGlkL290dmNvbW1uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgY29tbW9uIHRhYmxlcyB2YWxpZGF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTY3LDI5ICs2NywzOCBAQAogCiAKICN1bmRlZiAgRlRfSU5WQUxJRF8KLSNkZWZpbmUgRlRfSU5WQUxJRF8oIF9lcnJvciApIFwKKyNkZWZpbmUgRlRfSU5WQUxJRF8oIF9lcnJvciApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBmdF92YWxpZGF0b3JfZXJyb3IoIG90dmFsaWQtPnJvb3QsIEZUX1RIUk9XKCBfZXJyb3IgKSApCiAKICNkZWZpbmUgT1RWX09QVElPTkFMX1RBQkxFKCBfdGFibGUgKSAgRlRfVVNob3J0ICBfdGFibGU7ICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgIF90YWJsZSAjIyBfcAogCisjZGVmaW5lIE9UVl9PUFRJT05BTF9UQUJMRTMyKCBfdGFibGUgKSAgRlRfVUxvbmcgIF90YWJsZTsgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICAgX3RhYmxlICMjIF9wCisKICNkZWZpbmUgT1RWX09QVElPTkFMX09GRlNFVCggX29mZnNldCApICAgICAgICAgICBcCiAgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgX29mZnNldCAjIyBfcCA9IHA7ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIF9vZmZzZXQgICAgICAgPSBGVF9ORVhUX1VTSE9SVCggcCApOyBcCiAgICAgICAgICAgRlRfRU5EX1NUTU5UCiAKLSNkZWZpbmUgT1RWX0xJTUlUX0NIRUNLKCBfY291bnQgKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIE9UVl9PUFRJT05BTF9PRkZTRVQzMiggX29mZnNldCApICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfb2Zmc2V0ICMjIF9wID0gcDsgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfb2Zmc2V0ICAgICAgID0gRlRfTkVYVF9VTE9ORyggcCApOyBcCisgICAgICAgICAgRlRfRU5EX1NUTU5UCisKKyNkZWZpbmUgT1RWX0xJTUlUX0NIRUNLKCBfY291bnQgKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgaWYgKCBwICsgKF9jb3VudCkgPiBvdHZhbGlkLT5yb290LT5saW1pdCApIFwKLSAgICAgICAgICAgICAgRlRfSU5WQUxJRF9UT09fU0hPUlQ7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBGVF9JTlZBTElEX1RPT19TSE9SVDsgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBGVF9FTkRfU1RNTlQKIAogI2RlZmluZSBPVFZfU0laRV9DSEVDSyggX3NpemUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGlmICggX3NpemUgPiAwICYmIF9zaXplIDwgdGFibGVfc2l6ZSApICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIGlmICggb3R2YWxpZC0+cm9vdC0+bGV2ZWwgPT0gRlRfVkFMSURBVEVfUEFSQU5PSUQgKSAgICAgXAorICAgICAgICAgICAgICBpZiAoIG90dmFsaWQtPnJvb3QtPmxldmVsID09IEZUX1ZBTElEQVRFX1BBUkFOT0lEICkgICBcCiAgICAgICAgICAgICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMDIsMTIgKzExMSwzMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgc2V0IHRvIHplcm8uXG4iICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiwgI19zaXplICkpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIC8qIGFsd2F5cyBhc3N1bWUgMTZiaXQgZW50aXRpZXMgKi8gICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgX3NpemUgPSBwcFswXSA9IHBwWzFdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgRlRfRU5EX1NUTU5UCiAKKyNkZWZpbmUgT1RWX1NJWkVfQ0hFQ0szMiggX3NpemUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoIF9zaXplID4gMCAmJiBfc2l6ZSA8IHRhYmxlX3NpemUgKSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBpZiAoIG90dmFsaWQtPnJvb3QtPmxldmVsID09IEZUX1ZBTElEQVRFX1BBUkFOT0lEICkgICBcCisgICAgICAgICAgICAgICAgRlRfSU5WQUxJRF9PRkZTRVQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgLyogc3RyaXAgb2ZmIGBjb25zdCcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBGVF9CeXRlKiAgcHAgPSAoRlRfQnl0ZSopX3NpemUgIyMgX3A7ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTMoKCAiXG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIG9mZnNldCB0byBvcHRpb25hbCB0YWJsZSBgJXMnIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZXQgdG8gemVyby5cbiIgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG4iLCAjX3NpemUgKSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgX3NpemUgPSBwcFswXSA9IHBwWzFdID0gcHBbMl0gPSBwcFszXSA9IDA7ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfRU5EX1NUTU5UCisKIAogI2RlZmluZSAgT1RWX05BTUVfKHgpICAjeAogI2RlZmluZSAgT1RWX05BTUUoeCkgICBPVFZfTkFNRV8oeCkKQEAgLTE0NiwxMSArMTc2LDExIEBACiAKICNkZWZpbmUgT1RWX0lOSVQgIG90dmFsaWQtPmRlYnVnX2luZGVudCA9IDAKIAotI2RlZmluZSBPVFZfRU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBvdHZhbGlkLT5kZWJ1Z19pbmRlbnQgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiUqLnMiLCBvdHZhbGlkLT5kZWJ1Z19pbmRlbnQsIDAgKSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIlcyB0YWJsZVxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIE9UVl9FTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBvdHZhbGlkLT5kZWJ1Z19pbmRlbnQgKz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiJSoucyIsIG90dmFsaWQtPmRlYnVnX2luZGVudCwgMCApKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiJXMgdGFibGVcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICBvdHZhbGlkLT5kZWJ1Z19mdW5jdGlvbl9uYW1lW290dmFsaWQtPm5lc3RpbmdfbGV2ZWxdICkpOyBcCiAgICAgICAgICAgRlRfRU5EX1NUTU5UCiAKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmVycm9yLmggYi9zcmMvb3R2YWxpZC9vdHZlcnJvci5oCmluZGV4IDY5OTkwMzkuLjJmY2Y0MmUgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmVycm9yLmgKKysrIGIvc3JjL290dmFsaWQvb3R2ZXJyb3IuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSB2YWxpZGF0aW9uIG1vZHVsZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2Z2RlZi5jIGIvc3JjL290dmFsaWQvb3R2Z2RlZi5jCmluZGV4IDI3YjlhNjkuLjA4ZjMxNzEgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmdkZWYuYworKysgYi9zcmMvb3R2YWxpZC9vdHZnZGVmLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgR0RFRiB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTY4LDcgKzY4LDcgQEAKICAgICBPVFZfTElNSVRfQ0hFQ0soIEdseXBoQ291bnQgKiAyICk7CiAKICAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsKys7Ci0gICAgZnVuYyAgICAgICAgICA9IG90dmFsaWQtPmZ1bmNbb3R2YWxpZC0+bmVzdGluZ19sZXZlbF07CisgICAgZnVuYyAgICAgICAgICAgID0gb3R2YWxpZC0+ZnVuY1tvdHZhbGlkLT5uZXN0aW5nX2xldmVsXTsKICAgICBvdHZhbGlkLT5leHRyYTEgPSAwOwogCiAgICAgZm9yICggOyBHbHlwaENvdW50ID4gMDsgR2x5cGhDb3VudC0tICkKQEAgLTEzNiw2ICsxMzYsNDAgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICBNQVJLIEdMWVBIIFNFVFMgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgc3RhdGljIHZvaWQKKyAgb3R2X01hcmtHbHlwaFNldHNfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RWX1ZhbGlkYXRvciAgb3R2YWxpZCApCisgIHsKKyAgICBGVF9CeXRlcyAgcCA9IHRhYmxlOworICAgIEZUX1VJbnQgICBNYXJrR2x5cGhTZXRDb3VudDsKKworCisgICAgT1RWX05BTUVfRU5URVIoICJNYXJrR2x5cGhTZXRzIiApOworCisgICAgcCArPSAyOyAgICAgLyogc2tpcCBGb3JtYXQgKi8KKworICAgIE9UVl9MSU1JVF9DSEVDSyggMiApOworICAgIE1hcmtHbHlwaFNldENvdW50ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgIE9UVl9UUkFDRSgoICIgKE1hcmtHbHlwaFNldENvdW50ID0gJWQpXG4iLCBNYXJrR2x5cGhTZXRDb3VudCApKTsKKworICAgIE9UVl9MSU1JVF9DSEVDSyggTWFya0dseXBoU2V0Q291bnQgKiA0ICk7ICAgICAgLyogQ292ZXJhZ2VPZmZzZXRzICovCisKKyAgICBmb3IgKCA7IE1hcmtHbHlwaFNldENvdW50ID4gMDsgTWFya0dseXBoU2V0Q291bnQtLSApCisgICAgICBvdHZfQ292ZXJhZ2VfdmFsaWRhdGUoIHRhYmxlICsgRlRfTkVYVF9VTE9ORyggcCApLCBvdHZhbGlkLCAtMSApOworCisgICAgT1RWX0VYSVQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICBHREVGIFRBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNTIsMTQgKzE4NiwxOCBAQAogICB7CiAgICAgT1RWX1ZhbGlkYXRvclJlYyAgb3R2YWxpZHJlYzsKICAgICBPVFZfVmFsaWRhdG9yICAgICBvdHZhbGlkID0gJm90dmFsaWRyZWM7Ci0gICAgRlRfQnl0ZXMgICAgICAgICAgcCAgICAgPSB0YWJsZTsKKyAgICBGVF9CeXRlcyAgICAgICAgICBwICAgICAgID0gdGFibGU7CiAgICAgRlRfVUludCAgICAgICAgICAgdGFibGVfc2l6ZTsKLSAgICBGVF9Cb29sICAgICAgICAgICBuZWVkX01hcmtBdHRhY2hDbGFzc0RlZjsKKyAgICBGVF9VU2hvcnQgICAgICAgICB2ZXJzaW9uOworICAgIEZUX0Jvb2wgICAgICAgICAgIG5lZWRfTWFya0F0dGFjaENsYXNzRGVmID0gMTsKIAogICAgIE9UVl9PUFRJT05BTF9UQUJMRSggR2x5cGhDbGFzc0RlZiApOwogICAgIE9UVl9PUFRJT05BTF9UQUJMRSggQXR0YWNoTGlzdE9mZnNldCApOwogICAgIE9UVl9PUFRJT05BTF9UQUJMRSggTGlnQ2FyZXRMaXN0T2Zmc2V0ICk7CiAgICAgT1RWX09QVElPTkFMX1RBQkxFKCBNYXJrQXR0YWNoQ2xhc3NEZWYgKTsKKyAgICBPVFZfT1BUSU9OQUxfVEFCTEUoIE1hcmtHbHlwaFNldHNEZWYgKTsKKworICAgIE9UVl9PUFRJT05BTF9UQUJMRTMyKCBpdGVtVmFyU3RvcmUgKTsKIAogCiAgICAgb3R2YWxpZC0+cm9vdCA9IGZ0dmFsaWQ7CkBAIC0xNjcsMjQgKzIwNSw0OSBAQAogICAgIEZUX1RSQUNFMygoICJ2YWxpZGF0aW5nIEdERUYgdGFibGVcbiIgKSk7CiAgICAgT1RWX0lOSVQ7CiAKLSAgICBPVFZfTElNSVRfQ0hFQ0soIDEyICk7CisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CiAKLSAgICBpZiAoIEZUX05FWFRfVUxPTkcoIHAgKSAhPSAweDEwMDAwVUwgKSAgICAgICAgICAvKiBWZXJzaW9uICovCisgICAgaWYgKCBGVF9ORVhUX1VTSE9SVCggcCApICE9IDEgKSAgLyogbWFqb3JWZXJzaW9uICovCiAgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKIAotICAgIC8qIE1hcmtBdHRhY2hDbGFzc0RlZiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgT3BlblR5cGUgKi8KLSAgICAvKiBzcGVjaWZpY2F0aW9uIHdpdGhvdXQgaW5jcmVhc2luZyBHREVGJ3MgdmVyc2lvbiwgICovCi0gICAgLyogc28gd2UgdXNlIHRoaXMgdWdseSBoYWNrIHRvIGZpbmQgb3V0IHdoZXRoZXIgdGhlICAqLwotICAgIC8qIHRhYmxlIGlzIG5lZWRlZCBhY3R1YWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICB2ZXJzaW9uID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsgICAvKiBtaW5vclZlcnNpb24gKi8KIAotICAgIG5lZWRfTWFya0F0dGFjaENsYXNzRGVmID0gRlRfQk9PTCgKLSAgICAgIG90dl9HU1VCR1BPU19oYXZlX01hcmtBdHRhY2htZW50VHlwZV9mbGFnKCBnc3ViICkgfHwKLSAgICAgIG90dl9HU1VCR1BPU19oYXZlX01hcmtBdHRhY2htZW50VHlwZV9mbGFnKCBncG9zICkgKTsKKyAgICB0YWJsZV9zaXplID0gMTA7CisgICAgc3dpdGNoICggdmVyc2lvbiApCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIC8qIE1hcmtBdHRhY2hDbGFzc0RlZiBoYXMgYmVlbiBhZGRlZCB0byB0aGUgT3BlblR5cGUgKi8KKyAgICAgIC8qIHNwZWNpZmljYXRpb24gd2l0aG91dCBpbmNyZWFzaW5nIEdERUYncyB2ZXJzaW9uLCAgKi8KKyAgICAgIC8qIHNvIHdlIHVzZSB0aGlzIHVnbHkgaGFjayB0byBmaW5kIG91dCB3aGV0aGVyIHRoZSAgKi8KKyAgICAgIC8qIHRhYmxlIGlzIG5lZWRlZCBhY3R1YWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgIGlmICggbmVlZF9NYXJrQXR0YWNoQ2xhc3NEZWYgKQotICAgICAgdGFibGVfc2l6ZSA9IDEyOyAgICAgICAgICAgICAgLyogT3BlblR5cGUgPj0gMS4yICovCi0gICAgZWxzZQotICAgICAgdGFibGVfc2l6ZSA9IDEwOyAgICAgICAgICAgICAgLyogT3BlblR5cGUgPCAxLjIgICovCisgICAgICBuZWVkX01hcmtBdHRhY2hDbGFzc0RlZiA9IEZUX0JPT0woCisgICAgICAgIG90dl9HU1VCR1BPU19oYXZlX01hcmtBdHRhY2htZW50VHlwZV9mbGFnKCBnc3ViICkgfHwKKyAgICAgICAgb3R2X0dTVUJHUE9TX2hhdmVfTWFya0F0dGFjaG1lbnRUeXBlX2ZsYWcoIGdwb3MgKSApOworCisgICAgICBpZiAoIG5lZWRfTWFya0F0dGFjaENsYXNzRGVmICkKKyAgICAgIHsKKyAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCA4ICk7CisgICAgICAgIHRhYmxlX3NpemUgKz0gMjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCA2ICk7ICAvKiBPcGVuVHlwZSA8IDEuMiAqLworCisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIE9UVl9MSU1JVF9DSEVDSyggMTAgKTsKKyAgICAgIHRhYmxlX3NpemUgKz0gNDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzOgorICAgICAgT1RWX0xJTUlUX0NIRUNLKCAxNCApOworICAgICAgdGFibGVfc2l6ZSArPSA4OworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CisgICAgfQogCiAgICAgb3R2YWxpZC0+Z2x5cGhfY291bnQgPSBnbHlwaF9jb3VudDsKIApAQCAtMjE3LDYgKzI4MCwyMiBAQAogICAgICAgICBvdHZfQ2xhc3NEZWZfdmFsaWRhdGUoIHRhYmxlICsgTWFya0F0dGFjaENsYXNzRGVmLCBvdHZhbGlkICk7CiAgICAgfQogCisgICAgaWYgKCB2ZXJzaW9uID4gMCApCisgICAgeworICAgICAgT1RWX09QVElPTkFMX09GRlNFVCggTWFya0dseXBoU2V0c0RlZiApOworICAgICAgT1RWX1NJWkVfQ0hFQ0soIE1hcmtHbHlwaFNldHNEZWYgKTsKKyAgICAgIGlmICggTWFya0dseXBoU2V0c0RlZiApCisgICAgICAgIG90dl9NYXJrR2x5cGhTZXRzX3ZhbGlkYXRlKCB0YWJsZSArIE1hcmtHbHlwaFNldHNEZWYsIG90dmFsaWQgKTsKKyAgICB9CisKKyAgICBpZiAoIHZlcnNpb24gPiAyICkKKyAgICB7CisgICAgICBPVFZfT1BUSU9OQUxfT0ZGU0VUMzIoIGl0ZW1WYXJTdG9yZSApOworICAgICAgT1RWX1NJWkVfQ0hFQ0szMiggaXRlbVZhclN0b3JlICk7CisgICAgICBpZiAoIGl0ZW1WYXJTdG9yZSApCisgICAgICAgIE9UVl9UUkFDRSgoICIgIFtvbWl0dGluZyBpdGVtVmFyU3RvcmUgdmFsaWRhdGlvbl1cbiIgKSk7IC8qIFhYWCAqLworICAgIH0KKwogICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2Z3Bvcy5jIGIvc3JjL290dmFsaWQvb3R2Z3Bvcy5jCmluZGV4IDBmYmNjMjAuLjY5NmIzNWMgMTAwNjQ0Ci0tLSBhL3NyYy9vdHZhbGlkL290dmdwb3MuYworKysgYi9zcmMvb3R2YWxpZC9vdHZncG9zLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgR1BPUyB0YWJsZSB2YWxpZGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgIG90dl9NYXJrQXJyYXlfdmFsaWRhdGUoIHRhYmxlICsgQXJyYXkxLCBvdHZhbGlkICk7CiAKICAgICBvdHZhbGlkLT5uZXN0aW5nX2xldmVsKys7Ci0gICAgZnVuYyAgICAgICAgICA9IG90dmFsaWQtPmZ1bmNbb3R2YWxpZC0+bmVzdGluZ19sZXZlbF07CisgICAgZnVuYyAgICAgICAgICAgID0gb3R2YWxpZC0+ZnVuY1tvdHZhbGlkLT5uZXN0aW5nX2xldmVsXTsKICAgICBvdHZhbGlkLT5leHRyYTEgPSBDbGFzc0NvdW50OwogCiAgICAgZnVuYyggdGFibGUgKyBBcnJheTIsIG90dmFsaWQgKTsKQEAgLTIxOCwxMCArMjE4LDYgQEAKICAgICAgICAgT1RWX0xJTUlUX0NIRUNLKCAyICk7CiAgICAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQoIGRldmljZSApOwogCi0gICAgICAgIC8qIFhYWDogdGhpcyB2YWx1ZSBpcyB1c3VhbGx5IHRvbyBzbWFsbCwgZXNwZWNpYWxseSBpZiB0aGUgY3VycmVudCAqLwotICAgICAgICAvKiBWYWx1ZVJlY29yZCBpcyBwYXJ0IG9mIGFuIGFycmF5IC0tIGdldHRpbmcgdGhlIGNvcnJlY3QgdGFibGUgICAgKi8KLSAgICAgICAgLyogc2l6ZSBpcyBwcm9iYWJseSBub3Qgd29ydGggdGhlIHRyb3VibGUgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KICAgICAgICAgdGFibGVfc2l6ZSA9IHAgLSBvdHZhbGlkLT5leHRyYTM7CiAKICAgICAgICAgT1RWX1NJWkVfQ0hFQ0soIGRldmljZSApOwpAQCAtMjcxLDcgKzI2Nyw3IEBACiAKICAgICBjYXNlIDM6CiAgICAgICB7Ci0gICAgICAgIEZUX1VJbnQgICB0YWJsZV9zaXplOworICAgICAgICBGVF9VSW50ICB0YWJsZV9zaXplOwogCiAgICAgICAgIE9UVl9PUFRJT05BTF9UQUJMRSggWERldmljZVRhYmxlICk7CiAgICAgICAgIE9UVl9PUFRJT05BTF9UQUJMRSggWURldmljZVRhYmxlICk7CkBAIC00MjYsNiArNDIyLDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisgIC8qIHNldHMgb3R2YWxpZC0+ZXh0cmEzIChwb2ludGVyIHRvIGJhc2UgdGFibGUpICovCisKICAgc3RhdGljIHZvaWQKICAgb3R2X1BhaXJTZXRfdmFsaWRhdGUoIEZUX0J5dGVzICAgICAgIHRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgZm9ybWF0MSwKQEAgLTQzOCw2ICs0MzYsOCBAQAogCiAgICAgT1RWX05BTUVfRU5URVIoICJQYWlyU2V0IiApOwogCisgICAgb3R2YWxpZC0+ZXh0cmEzID0gdGFibGU7CisKICAgICBPVFZfTElNSVRfQ0hFQ0soIDIgKTsKICAgICBQYWlyVmFsdWVDb3VudCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CiAKQEAgLTQ4Myw4ICs0ODMsNiBAQAogCiAgICAgT1RWX1RSQUNFKCggIiAoZm9ybWF0ICVkKVxuIiwgUG9zRm9ybWF0ICkpOwogCi0gICAgb3R2YWxpZC0+ZXh0cmEzID0gdGFibGU7Ci0KICAgICBzd2l0Y2ggKCBQb3NGb3JtYXQgKQogICAgIHsKICAgICBjYXNlIDE6ICAgICAvKiBQYWlyUG9zRm9ybWF0MSAqLwpAQCAtNTM3LDcgKzUzNSw5IEBACiAgICAgICAgIG90dl9DbGFzc0RlZl92YWxpZGF0ZSggdGFibGUgKyBDbGFzc0RlZjIsIG90dmFsaWQgKTsKIAogICAgICAgICBPVFZfTElNSVRfQ0hFQ0soIENsYXNzQ291bnQxICogQ2xhc3NDb3VudDIgKgotICAgICAgICAgICAgICAgICAgICAgKCBsZW5fdmFsdWUxICsgbGVuX3ZhbHVlMiApICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgKCBsZW5fdmFsdWUxICsgbGVuX3ZhbHVlMiApICk7CisKKyAgICAgICAgb3R2YWxpZC0+ZXh0cmEzID0gdGFibGU7CiAKICAgICAgICAgLyogQ2xhc3MxUmVjb3JkICovCiAgICAgICAgIGZvciAoIDsgQ2xhc3NDb3VudDEgPiAwOyBDbGFzc0NvdW50MS0tICkKQEAgLTk4NSwyMCArOTg1LDQyIEBACiAgIHsKICAgICBPVFZfVmFsaWRhdG9yUmVjICB2YWxpZHJlYzsKICAgICBPVFZfVmFsaWRhdG9yICAgICBvdHZhbGlkID0gJnZhbGlkcmVjOwotICAgIEZUX0J5dGVzICAgICAgICAgIHAgICAgID0gdGFibGU7CisgICAgRlRfQnl0ZXMgICAgICAgICAgcCAgICAgICA9IHRhYmxlOworICAgIEZUX1VJbnQgICAgICAgICAgIHRhYmxlX3NpemU7CisgICAgRlRfVVNob3J0ICAgICAgICAgdmVyc2lvbjsKICAgICBGVF9VSW50ICAgICAgICAgICBTY3JpcHRMaXN0LCBGZWF0dXJlTGlzdCwgTG9va3VwTGlzdDsKIAorICAgIE9UVl9PUFRJT05BTF9UQUJMRTMyKCBmZWF0dXJlVmFyaWF0aW9ucyApOworCiAKICAgICBvdHZhbGlkLT5yb290ID0gZnR2YWxpZDsKIAogICAgIEZUX1RSQUNFMygoICJ2YWxpZGF0aW5nIEdQT1MgdGFibGVcbiIgKSk7CiAgICAgT1RWX0lOSVQ7CiAKLSAgICBPVFZfTElNSVRfQ0hFQ0soIDEwICk7CisgICAgT1RWX0xJTUlUX0NIRUNLKCA0ICk7CiAKLSAgICBpZiAoIEZUX05FWFRfVUxPTkcoIHAgKSAhPSAweDEwMDAwVUwgKSAgICAgIC8qIFZlcnNpb24gKi8KKyAgICBpZiAoIEZUX05FWFRfVVNIT1JUKCBwICkgIT0gMSApICAvKiBtYWpvclZlcnNpb24gKi8KICAgICAgIEZUX0lOVkFMSURfRk9STUFUOwogCisgICAgdmVyc2lvbiA9IEZUX05FWFRfVVNIT1JUKCBwICk7ICAgLyogbWlub3JWZXJzaW9uICovCisKKyAgICB0YWJsZV9zaXplID0gMTA7CisgICAgc3dpdGNoICggdmVyc2lvbiApCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgIE9UVl9MSU1JVF9DSEVDSyggNiApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICBPVFZfTElNSVRfQ0hFQ0soIDEwICk7CisgICAgICB0YWJsZV9zaXplICs9IDQ7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGVF9JTlZBTElEX0ZPUk1BVDsKKyAgICB9CisKICAgICBTY3JpcHRMaXN0ICA9IEZUX05FWFRfVVNIT1JUKCBwICk7CiAgICAgRmVhdHVyZUxpc3QgPSBGVF9ORVhUX1VTSE9SVCggcCApOwogICAgIExvb2t1cExpc3QgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKQEAgLTEwMTQsNiArMTAzNiwxNCBAQAogICAgIG90dl9TY3JpcHRMaXN0X3ZhbGlkYXRlKCB0YWJsZSArIFNjcmlwdExpc3QsIHRhYmxlICsgRmVhdHVyZUxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQgKTsKIAorICAgIGlmICggdmVyc2lvbiA+IDAgKQorICAgIHsKKyAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQzMiggZmVhdHVyZVZhcmlhdGlvbnMgKTsKKyAgICAgIE9UVl9TSVpFX0NIRUNLMzIoIGZlYXR1cmVWYXJpYXRpb25zICk7CisgICAgICBpZiAoIGZlYXR1cmVWYXJpYXRpb25zICkKKyAgICAgICAgT1RWX1RSQUNFKCggIiAgW29taXR0aW5nIGZlYXR1cmVWYXJpYXRpb25zIHZhbGlkYXRpb25dXG4iICkpOyAvKiBYWFggKi8KKyAgICB9CisKICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwogICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmdwb3MuaCBiL3NyYy9vdHZhbGlkL290dmdwb3MuaAppbmRleCA5OWIwYWQzLi45NWY5YWMzIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZncG9zLmgKKysrIGIvc3JjL290dmFsaWQvb3R2Z3Bvcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIEdQT1MgdGFibGUgdmFsaWRhdG9yIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZnc3ViLmMgYi9zcmMvb3R2YWxpZC9vdHZnc3ViLmMKaW5kZXggZjliZDhkYy4uZDM1ZWE2NyAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2Z3N1Yi5jCisrKyBiL3NyYy9vdHZhbGlkL290dmdzdWIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHU1VCIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTUyLDE5ICs1NTIsNDEgQEAKICAgICBPVFZfVmFsaWRhdG9yUmVjICBvdHZhbGlkcmVjOwogICAgIE9UVl9WYWxpZGF0b3IgICAgIG90dmFsaWQgPSAmb3R2YWxpZHJlYzsKICAgICBGVF9CeXRlcyAgICAgICAgICBwICAgICAgID0gdGFibGU7CisgICAgRlRfVUludCAgICAgICAgICAgdGFibGVfc2l6ZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICB2ZXJzaW9uOwogICAgIEZUX1VJbnQgICAgICAgICAgIFNjcmlwdExpc3QsIEZlYXR1cmVMaXN0LCBMb29rdXBMaXN0OwogCisgICAgT1RWX09QVElPTkFMX1RBQkxFMzIoIGZlYXR1cmVWYXJpYXRpb25zICk7CisKIAogICAgIG90dmFsaWQtPnJvb3QgPSBmdHZhbGlkOwogCiAgICAgRlRfVFJBQ0UzKCggInZhbGlkYXRpbmcgR1NVQiB0YWJsZVxuIiApKTsKICAgICBPVFZfSU5JVDsKIAotICAgIE9UVl9MSU1JVF9DSEVDSyggMTAgKTsKKyAgICBPVFZfTElNSVRfQ0hFQ0soIDQgKTsKIAotICAgIGlmICggRlRfTkVYVF9VTE9ORyggcCApICE9IDB4MTAwMDBVTCApICAgICAgLyogVmVyc2lvbiAqLworICAgIGlmICggRlRfTkVYVF9VU0hPUlQoIHAgKSAhPSAxICkgIC8qIG1ham9yVmVyc2lvbiAqLwogICAgICAgRlRfSU5WQUxJRF9GT1JNQVQ7CiAKKyAgICB2ZXJzaW9uID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsgICAvKiBtaW5vclZlcnNpb24gKi8KKworICAgIHRhYmxlX3NpemUgPSAxMDsKKyAgICBzd2l0Y2ggKCB2ZXJzaW9uICkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgT1RWX0xJTUlUX0NIRUNLKCA2ICk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgMToKKyAgICAgIE9UVl9MSU1JVF9DSEVDSyggMTAgKTsKKyAgICAgIHRhYmxlX3NpemUgKz0gNDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZUX0lOVkFMSURfRk9STUFUOworICAgIH0KKwogICAgIFNjcmlwdExpc3QgID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKICAgICBGZWF0dXJlTGlzdCA9IEZUX05FWFRfVVNIT1JUKCBwICk7CiAgICAgTG9va3VwTGlzdCAgPSBGVF9ORVhUX1VTSE9SVCggcCApOwpAQCAtNTgwLDYgKzYwMiwxNCBAQAogICAgIG90dl9TY3JpcHRMaXN0X3ZhbGlkYXRlKCB0YWJsZSArIFNjcmlwdExpc3QsIHRhYmxlICsgRmVhdHVyZUxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90dmFsaWQgKTsKIAorICAgIGlmICggdmVyc2lvbiA+IDAgKQorICAgIHsKKyAgICAgIE9UVl9PUFRJT05BTF9PRkZTRVQzMiggZmVhdHVyZVZhcmlhdGlvbnMgKTsKKyAgICAgIE9UVl9TSVpFX0NIRUNLMzIoIGZlYXR1cmVWYXJpYXRpb25zICk7CisgICAgICBpZiAoIGZlYXR1cmVWYXJpYXRpb25zICkKKyAgICAgICAgT1RWX1RSQUNFKCggIiAgW29taXR0aW5nIGZlYXR1cmVWYXJpYXRpb25zIHZhbGlkYXRpb25dXG4iICkpOyAvKiBYWFggKi8KKyAgICB9CisKICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOwogICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vdHZhbGlkL290dmpzdGYuYyBiL3NyYy9vdHZhbGlkL290dmpzdGYuYwppbmRleCA1N2EzOGY5Li45NGQ0YWY5IDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZqc3RmLmMKKysrIGIvc3JjL290dmFsaWQvb3R2anN0Zi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIEpTVEYgdGFibGUgdmFsaWRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvb3R2YWxpZC9vdHZtYXRoLmMgYi9zcmMvb3R2YWxpZC9vdHZtYXRoLmMKaW5kZXggYTE0ZDM2OS4uYjk4MDBmNiAxMDA2NDQKLS0tIGEvc3JjL290dmFsaWQvb3R2bWF0aC5jCisrKyBiL3NyYy9vdHZhbGlkL290dm1hdGguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBNQVRIIHRhYmxlIHZhbGlkYXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgV3JpdHRlbiBieSBHZW9yZ2UgV2lsbGlhbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2bW9kLmMgYi9zcmMvb3R2YWxpZC9vdHZtb2QuYwppbmRleCAzNWZmYzQzLi44OWVlNDQ5IDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZtb2QuYworKysgYi9zcmMvb3R2YWxpZC9vdHZtb2QuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSdzIE9wZW5UeXBlIHZhbGlkYXRpb24gbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvb3R2bW9kLmggYi9zcmMvb3R2YWxpZC9vdHZtb2QuaAppbmRleCAzMGQ0MDFkLi42OTE3YmNjIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9vdHZtb2QuaAorKysgYi9zcmMvb3R2YWxpZC9vdHZtb2QuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEZyZWVUeXBlJ3MgT3BlblR5cGUgdmFsaWRhdGlvbiBtb2R1bGUgaW1wbGVtZW50YXRpb24gICAgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL290dmFsaWQvcnVsZXMubWsgYi9zcmMvb3R2YWxpZC9ydWxlcy5tawppbmRleCAxMDMyOWE5Li5kNGZjNzIzIDEwMDY0NAotLS0gYS9zcmMvb3R2YWxpZC9ydWxlcy5taworKysgYi9zcmMvb3R2YWxpZC9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDA0LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDQtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcGNmL0phbWZpbGUgYi9zcmMvcGNmL0phbWZpbGUKaW5kZXggNzk0ZjI3ZC4uN2I5MmIxMiAxMDA2NDQKLS0tIGEvc3JjL3BjZi9KYW1maWxlCisrKyBiL3NyYy9wY2YvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvcGNmIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9wY2YvUkVBRE1FIGIvc3JjL3BjZi9SRUFETUUKaW5kZXggMTBlZmYxNS4uMDllYTk3MCAxMDA2NDQKLS0tIGEvc3JjL3BjZi9SRUFETUUKKysrIGIvc3JjL3BjZi9SRUFETUUKQEAgLTQxLDggKzQxLDggQEAKIEtub3duIHByb2JsZW1zCiAqKioqKioqKioqKioqKgogCi0tIGRlYWxpbmcgZXhwbGljaXRseSB3aXRoIGVuY29kaW5ncyBicmVha3MgdGhlIHVuaWZvcm1pdHkgb2YgZnJlZXR5cGUyCi0gIGFwaS4KKy0gZGVhbGluZyBleHBsaWNpdGx5IHdpdGggZW5jb2RpbmdzIGJyZWFrcyB0aGUgdW5pZm9ybWl0eSBvZiBGcmVlVHlwZSAyCisgIEFQSS4KIAogLSBleGNlcHQgZm9yIGVuY29kaW5ncyBwcm9wZXJ0aWVzLCBjbGllbnQgYXBwbGljYXRpb25zIGhhdmUgbm8KICAgdmlzaWJpbGl0eSBvZiB0aGUgUENGX0ZhY2Ugb2JqZWN0LiAgVGhpcyBtZWFucyB0aGF0IGFwcGxpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvc3JjL3BjZi9wY2YuYyBiL3NyYy9wY2YvcGNmLmMKaW5kZXggMTFkNWI3Yi4uOGZmZDZlMiAxMDA2NDQKLS0tIGEvc3JjL3BjZi9wY2YuYworKysgYi9zcmMvcGNmL3BjZi5jCkBAIC0yNiwxMSArMjYsMTEgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLQotCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlICJwY2Z1dGlsLmMiCi0jaW5jbHVkZSAicGNmcmVhZC5jIgorCiAjaW5jbHVkZSAicGNmZHJpdnIuYyIKKyNpbmNsdWRlICJwY2ZyZWFkLmMiCisjaW5jbHVkZSAicGNmdXRpbC5jIgorCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BjZi9wY2Zkcml2ci5jIGIvc3JjL3BjZi9wY2Zkcml2ci5jCmluZGV4IGJjNjU0MjMuLjAxMTlkOTQgMTAwNjQ0Ci0tLSBhL3NyYy9wY2YvcGNmZHJpdnIuYworKysgYi9zcmMvcGNmL3BjZmRyaXZyLmMKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfQkRGX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfRk9OVF9GT1JNQVRfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9QUk9QRVJUSUVTX0gKLSNpbmNsdWRlIEZUX1BDRl9EUklWRVJfSAorI2luY2x1ZGUgRlRfRFJJVkVSX0gKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzg3LDcgKzM4NywxMSBAQAogICAgICAgICAgIGlmICggIWZ0X3N0cmNtcCggcywgIjEwNjQ2IiApICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgICAoICFmdF9zdHJjbXAoIHMsICI4ODU5IiApICYmCiAgICAgICAgICAgICAgICAgICFmdF9zdHJjbXAoIGZhY2UtPmNoYXJzZXRfZW5jb2RpbmcsICIxIiApICkgKQotICAgICAgICAgIHVuaWNvZGVfY2hhcm1hcCA9IDE7CisgICAgICAgICAgICB1bmljb2RlX2NoYXJtYXAgPSAxOworICAgICAgICAgIC8qIGFub3RoZXIgbmFtZSBmb3IgQVNDSUkgKi8KKyAgICAgICAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcywgIjY0Ni4xOTkxIiApICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgICAgICAhZnRfc3RyY21wKCBmYWNlLT5jaGFyc2V0X2VuY29kaW5nLCAiSVJWIiApICkKKyAgICAgICAgICAgIHVuaWNvZGVfY2hhcm1hcCA9IDE7CiAgICAgICAgIH0KICAgICAgIH0KIApAQCAtNDA5LDEyICs0MTMsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggJnBjZl9jbWFwX2NsYXNzLCBOVUxMLCAmY2hhcm1hcCwgTlVMTCApOwotCi0jaWYgMAotICAgICAgICAvKiBTZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCi0gICAgICAgIGlmICggcGNmZmFjZS0+bnVtX2NoYXJtYXBzICkKLSAgICAgICAgICBwY2ZmYWNlLT5jaGFybWFwID0gcGNmZmFjZS0+Y2hhcm1hcHNbMF07Ci0jZW5kaWYKICAgICAgIH0KICAgICB9CiAKQEAgLTcyMiw2ICs3MjAsOSBAQAogICAgIEZUX1VOVVNFRCggbW9kdWxlICk7CiAgICAgRlRfVU5VU0VEKCB2YWx1ZSApOwogICAgIEZUX1VOVVNFRCggdmFsdWVfaXNfc3RyaW5nICk7CisjaWZuZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgRlRfVU5VU0VEKCBwcm9wZXJ0eV9uYW1lICk7CisjZW5kaWYKIAogI2VuZGlmIC8qICFQQ0ZfQ09ORklHX09QVElPTl9MT05HX0ZBTUlMWV9OQU1FUyAqLwogCkBAIC03NTcsNiArNzU4LDkgQEAKIAogICAgIEZUX1VOVVNFRCggbW9kdWxlICk7CiAgICAgRlRfVU5VU0VEKCB2YWx1ZSApOworI2lmbmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIEZUX1VOVVNFRCggcHJvcGVydHlfbmFtZSApOworI2VuZGlmCiAKICNlbmRpZiAvKiAhUENGX0NPTkZJR19PUFRJT05fTE9OR19GQU1JTFlfTkFNRVMgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL3BjZi9wY2ZyZWFkLmMgYi9zcmMvcGNmL3BjZnJlYWQuYwppbmRleCAzZWFjZjJiLi41MzdkYTBkIDEwMDY0NAotLS0gYS9zcmMvcGNmL3BjZnJlYWQuYworKysgYi9zcmMvcGNmL3BjZnJlYWQuYwpAQCAtODQwLDcgKzg0MCw3IEBACiAgICAgRlRfVFJBQ0U0KCggInBjZl9nZXRfYml0bWFwczpcbiIKICAgICAgICAgICAgICAgICAiICBmb3JtYXQ6IDB4JWxYXG4iCiAgICAgICAgICAgICAgICAgIiAgICAgICAgICAoJXMsICVzLFxuIgotICAgICAgICAgICAgICAgICIgICAgICAgICAgIHBhZGRpbmc9JWQgYml0cywgc2Nhbm5pbmc9JWQgYml0cylcbiIsCisgICAgICAgICAgICAgICAgIiAgICAgICAgICAgcGFkZGluZz0lZCBiaXQlcywgc2Nhbm5pbmc9JWQgYml0JXMpXG4iLAogICAgICAgICAgICAgICAgIGZvcm1hdCwKICAgICAgICAgICAgICAgICBQQ0ZfQllURV9PUkRFUiggZm9ybWF0ICkgPT0gTVNCRmlyc3QKICAgICAgICAgICAgICAgICAgID8gIm1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCIKQEAgLTg0OSw3ICs4NDksOSBAQAogICAgICAgICAgICAgICAgICAgPyAibW9zdCBzaWduaWZpY2FudCBiaXQgZmlyc3QiCiAgICAgICAgICAgICAgICAgICA6ICJsZWFzdCBzaWduaWZpY2FudCBiaXQgZmlyc3QiLAogICAgICAgICAgICAgICAgIDggPDwgUENGX0dMWVBIX1BBRF9JTkRFWCggZm9ybWF0ICksCi0gICAgICAgICAgICAgICAgOCA8PCBQQ0ZfU0NBTl9VTklUX0lOREVYKCBmb3JtYXQgKSApKTsKKyAgICAgICAgICAgICAgICAoIDggPDwgUENGX0dMWVBIX1BBRF9JTkRFWCggZm9ybWF0ICkgKSA9PSAxID8gIiIgOiAicyIsCisgICAgICAgICAgICAgICAgOCA8PCBQQ0ZfU0NBTl9VTklUX0lOREVYKCBmb3JtYXQgKSwKKyAgICAgICAgICAgICAgICAoIDggPDwgUENGX1NDQU5fVU5JVF9JTkRFWCggZm9ybWF0ICkgKSA9PSAxID8gIiIgOiAicyIgKSk7CiAKICAgICBpZiAoICFQQ0ZfRk9STUFUX01BVENIKCBmb3JtYXQsIFBDRl9ERUZBVUxUX0ZPUk1BVCApICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOwpAQCAtMTE2Miw2ICsxMTY0LDIwIEBACiAgICAgICAgICAgICAgICAgYWNjZWwtPmZvbnREZXNjZW50LAogICAgICAgICAgICAgICAgIGFjY2VsLT5tYXhPdmVybGFwICkpOwogCisgICAgLyogc2FuaXR5IGNoZWNrcyAqLworICAgIGlmICggRlRfQUJTKCBhY2NlbC0+Zm9udEFzY2VudCApID4gMHg3RkZGICkKKyAgICB7CisgICAgICBhY2NlbC0+Zm9udEFzY2VudCA9IGFjY2VsLT5mb250QXNjZW50IDwgMCA/IC0weDdGRkYgOiAweDdGRkY7CisgICAgICBGVF9UUkFDRTAoKCAicGZjX2dldF9hY2NlbDogY2xhbXBpbmcgZm9udCBhc2NlbnQgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICBhY2NlbC0+Zm9udEFzY2VudCApKTsKKyAgICB9CisgICAgaWYgKCBGVF9BQlMoIGFjY2VsLT5mb250RGVzY2VudCApID4gMHg3RkZGICkKKyAgICB7CisgICAgICBhY2NlbC0+Zm9udERlc2NlbnQgPSBhY2NlbC0+Zm9udERlc2NlbnQgPCAwID8gLTB4N0ZGRiA6IDB4N0ZGRjsKKyAgICAgIEZUX1RSQUNFMCgoICJwZmNfZ2V0X2FjY2VsOiBjbGFtcGluZyBmb250IGRlc2NlbnQgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICBhY2NlbC0+Zm9udERlc2NlbnQgKSk7CisgICAgfQorCiAgICAgRlRfVFJBQ0U1KCggIiAgbWluYm91bmRzOiIgKSk7CiAgICAgZXJyb3IgPSBwY2ZfZ2V0X21ldHJpYyggc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCAmICggflBDRl9GT1JNQVRfTUFTSyApLApAQCAtMTQ5Niw4ICsxNTEyLDE2IEBACiAgICAgICAgIGlmICggZmFjZS0+YWNjZWwuZm9udEFzY2VudCArIGZhY2UtPmFjY2VsLmZvbnREZXNjZW50IDwgMCApCiAgICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9sb2FkX2ZvbnQ6IG5lZ2F0aXZlIGhlaWdodFxuIiApKTsKICNlbmRpZgotICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gRlRfQUJTKCAoRlRfU2hvcnQpKCBmYWNlLT5hY2NlbC5mb250QXNjZW50ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+YWNjZWwuZm9udERlc2NlbnQgKSApOworICAgICAgICBpZiAoIEZUX0FCUyggZmFjZS0+YWNjZWwuZm9udEFzY2VudCArCisgICAgICAgICAgICAgICAgICAgICBmYWNlLT5hY2NlbC5mb250RGVzY2VudCApID4gMHg3RkZGICkKKyAgICAgICAgeworICAgICAgICAgIGJzaXplLT5oZWlnaHQgPSAweDdGRkY7CisgICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9sb2FkX2ZvbnQ6IGNsYW1waW5nIGhlaWdodCB0byB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBic2l6ZS0+aGVpZ2h0ICkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gRlRfQUJTKCAoRlRfU2hvcnQpKCBmYWNlLT5hY2NlbC5mb250QXNjZW50ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5hY2NlbC5mb250RGVzY2VudCApICk7CiAKICAgICAgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiQVZFUkFHRV9XSURUSCIgKTsKICAgICAgICAgaWYgKCBwcm9wICkKQEAgLTE1MDYsMTAgKzE1MzAsMjAgQEAKICAgICAgICAgICBpZiAoIHByb3AtPnZhbHVlLmwgPCAwICkKICAgICAgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfbG9hZF9mb250OiBuZWdhdGl2ZSBhdmVyYWdlIHdpZHRoXG4iICkpOwogI2VuZGlmCi0gICAgICAgICAgYnNpemUtPndpZHRoID0gRlRfQUJTKCAoRlRfU2hvcnQpKCAoIHByb3AtPnZhbHVlLmwgKSArIDUgKSAvIDEwICk7CisgICAgICAgICAgaWYgKCAoIEZUX0FCUyggcHJvcC0+dmFsdWUubCApID4gMHg3RkZGTCAqIDEwIC0gNSApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBic2l6ZS0+d2lkdGggPSAweDdGRkY7CisgICAgICAgICAgICBGVF9UUkFDRTAoKCAicGNmX2xvYWRfZm9udDogY2xhbXBpbmcgYXZlcmFnZSB3aWR0aCB0byB2YWx1ZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJzaXplLT53aWR0aCApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnNpemUtPndpZHRoID0gRlRfQUJTKCAoRlRfU2hvcnQpKCAoIHByb3AtPnZhbHVlLmwgKyA1ICkgLyAxMCApICk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyBpcyBhIGhldXJpc3RpY2FsIHZhbHVlICovCiAgICAgICAgICAgYnNpemUtPndpZHRoID0gKEZUX1Nob3J0KUZUX011bERpdiggYnNpemUtPmhlaWdodCwgMiwgMyApOworICAgICAgICB9CiAKICAgICAgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiUE9JTlRfU0laRSIgKTsKICAgICAgICAgaWYgKCBwcm9wICkKQEAgLTE1MTksOSArMTU1MywxNiBAQAogICAgICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9sb2FkX2ZvbnQ6IG5lZ2F0aXZlIHBvaW50IHNpemVcbiIgKSk7CiAjZW5kaWYKICAgICAgICAgICAvKiBjb252ZXJ0IGZyb20gNzIyLjcgZGVjaXBvaW50cyB0byA3MiBwb2ludHMgcGVyIGluY2ggKi8KLSAgICAgICAgICBic2l6ZS0+c2l6ZSA9IEZUX011bERpdiggRlRfQUJTKCBwcm9wLT52YWx1ZS5sICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0ICogNzIwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzIyNzBMICk7CisgICAgICAgICAgaWYgKCBGVF9BQlMoIHByb3AtPnZhbHVlLmwgKSA+IDB4NTA0QzJMICkgLyogMHg3RkZGICogNzIyNzAvNzIwMCAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIGJzaXplLT5zaXplID0gMHg3RkZGOworICAgICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9sb2FkX2ZvbnQ6IGNsYW1waW5nIHBvaW50IHNpemUgdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBic2l6ZS0+c2l6ZSApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnNpemUtPnNpemUgPSBGVF9NdWxEaXYoIEZUX0FCUyggcHJvcC0+dmFsdWUubCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0ICogNzIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3MjI3MEwgKTsKICAgICAgICAgfQogCiAgICAgICAgIHByb3AgPSBwY2ZfZmluZF9wcm9wZXJ0eSggZmFjZSwgIlBJWEVMX1NJWkUiICk7CkBAIC0xNTMxLDcgKzE1NzIsMTQgQEAKICAgICAgICAgICBpZiAoIHByb3AtPnZhbHVlLmwgPCAwICkKICAgICAgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfbG9hZF9mb250OiBuZWdhdGl2ZSBwaXhlbCBzaXplXG4iICkpOwogI2VuZGlmCi0gICAgICAgICAgYnNpemUtPnlfcHBlbSA9IEZUX0FCUyggKEZUX1Nob3J0KXByb3AtPnZhbHVlLmwgKSA8PCA2OworICAgICAgICAgIGlmICggRlRfQUJTKCBwcm9wLT52YWx1ZS5sICkgPiAweDdGRkYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGJzaXplLT55X3BwZW0gPSAweDdGRkYgPDwgNjsKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfbG9hZF9mb250OiBjbGFtcGluZyBwaXhlbCBzaXplIHRvIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYnNpemUtPnlfcHBlbSApKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYnNpemUtPnlfcHBlbSA9IEZUX0FCUyggKEZUX1Nob3J0KXByb3AtPnZhbHVlLmwgKSA8PCA2OwogICAgICAgICB9CiAKICAgICAgICAgcHJvcCA9IHBjZl9maW5kX3Byb3BlcnR5KCBmYWNlLCAiUkVTT0xVVElPTl9YIiApOwpAQCAtMTU0MSw3ICsxNTg5LDE0IEBACiAgICAgICAgICAgaWYgKCBwcm9wLT52YWx1ZS5sIDwgMCApCiAgICAgICAgICAgICBGVF9UUkFDRTAoKCAicGNmX2xvYWRfZm9udDogbmVnYXRpdmUgWCByZXNvbHV0aW9uXG4iICkpOwogI2VuZGlmCi0gICAgICAgICAgcmVzb2x1dGlvbl94ID0gRlRfQUJTKCAoRlRfU2hvcnQpcHJvcC0+dmFsdWUubCApOworICAgICAgICAgIGlmICggRlRfQUJTKCBwcm9wLT52YWx1ZS5sICkgPiAweDdGRkYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlc29sdXRpb25feCA9IDB4N0ZGRjsKKyAgICAgICAgICAgIEZUX1RSQUNFMCgoICJwY2ZfbG9hZF9mb250OiBjbGFtcGluZyBYIHJlc29sdXRpb24gdG8gdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uX3ggKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc29sdXRpb25feCA9IEZUX0FCUyggKEZUX1Nob3J0KXByb3AtPnZhbHVlLmwgKTsKICAgICAgICAgfQogCiAgICAgICAgIHByb3AgPSBwY2ZfZmluZF9wcm9wZXJ0eSggZmFjZSwgIlJFU09MVVRJT05fWSIgKTsKQEAgLTE1NTEsNyArMTYwNiwxNCBAQAogICAgICAgICAgIGlmICggcHJvcC0+dmFsdWUubCA8IDAgKQogICAgICAgICAgICAgRlRfVFJBQ0UwKCggInBjZl9sb2FkX2ZvbnQ6IG5lZ2F0aXZlIFkgcmVzb2x1dGlvblxuIiApKTsKICNlbmRpZgotICAgICAgICAgIHJlc29sdXRpb25feSA9IEZUX0FCUyggKEZUX1Nob3J0KXByb3AtPnZhbHVlLmwgKTsKKyAgICAgICAgICBpZiAoIEZUX0FCUyggcHJvcC0+dmFsdWUubCApID4gMHg3RkZGICkKKyAgICAgICAgICB7CisgICAgICAgICAgICByZXNvbHV0aW9uX3kgPSAweDdGRkY7CisgICAgICAgICAgICBGVF9UUkFDRTAoKCAicGNmX2xvYWRfZm9udDogY2xhbXBpbmcgWSByZXNvbHV0aW9uIHRvIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbl95ICkpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXNvbHV0aW9uX3kgPSBGVF9BQlMoIChGVF9TaG9ydClwcm9wLT52YWx1ZS5sICk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIGJzaXplLT55X3BwZW0gPT0gMCApCmRpZmYgLS1naXQgYS9zcmMvcGZyL0phbWZpbGUgYi9zcmMvcGZyL0phbWZpbGUKaW5kZXggMTc4MzE3MS4uY2I1NWE3ZSAxMDA2NDQKLS0tIGEvc3JjL3Bmci9KYW1maWxlCisrKyBiL3NyYy9wZnIvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvcGZyIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDItMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9wZnIvbW9kdWxlLm1rIGIvc3JjL3Bmci9tb2R1bGUubWsKaW5kZXggN2I4NGRhOS4uMjdmZWM4ZSAxMDA2NDQKLS0tIGEvc3JjL3Bmci9tb2R1bGUubWsKKysrIGIvc3JjL3Bmci9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAyLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnIuYyBiL3NyYy9wZnIvcGZyLmMKaW5kZXggMmQwZTcyYy4uMTc2MDg4MiAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnIuYworKysgYi9zcmMvcGZyL3Bmci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBGUiBkcml2ZXIgY29tcG9uZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNSwxNSArMTUsMTYgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKIAorI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KIAotI2luY2x1ZGUgInBmcmxvYWQuYyIKLSNpbmNsdWRlICJwZnJnbG9hZC5jIgogI2luY2x1ZGUgInBmcmNtYXAuYyIKLSNpbmNsdWRlICJwZnJvYmpzLmMiCiAjaW5jbHVkZSAicGZyZHJpdnIuYyIKKyNpbmNsdWRlICJwZnJnbG9hZC5jIgorI2luY2x1ZGUgInBmcmxvYWQuYyIKKyNpbmNsdWRlICJwZnJvYmpzLmMiCiAjaW5jbHVkZSAicGZyc2JpdC5jIgogCisKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJjbWFwLmMgYi9zcmMvcGZyL3BmcmNtYXAuYwppbmRleCAxZDZiMTViLi42MDY0Mzc4IDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmNtYXAuYworKysgYi9zcmMvcGZyL3BmcmNtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgY21hcCBoYW5kbGluZyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJjbWFwLmggYi9zcmMvcGZyL3BmcmNtYXAuaAppbmRleCA5NTdiZjY1Li5jNzBhMGM4IDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmNtYXAuaAorKysgYi9zcmMvcGZyL3BmcmNtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgY21hcCBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJkcml2ci5jIGIvc3JjL3Bmci9wZnJkcml2ci5jCmluZGV4IDE5NWNkYjcuLjZjN2U1MDEgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyZHJpdnIuYworKysgYi9zcmMvcGZyL3BmcmRyaXZyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgUEZSIGRyaXZlciBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wZnIvcGZyZHJpdnIuaCBiL3NyYy9wZnIvcGZyZHJpdnIuaAppbmRleCBiODFkNTYwLi5jYWI4NTI3IDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmRyaXZyLmgKKysrIGIvc3JjL3Bmci9wZnJkcml2ci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgVHlwZSBQRlIgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmVycm9yLmggYi9zcmMvcGZyL3BmcmVycm9yLmgKaW5kZXggZWYwNDRlMy4uNzAyN2M4MSAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJlcnJvci5oCisrKyBiL3NyYy9wZnIvcGZyZXJyb3IuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQRlIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJnbG9hZC5jIGIvc3JjL3Bmci9wZnJnbG9hZC5jCmluZGV4IDkzZjVmYzcuLmI3OTkwMTkgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZyZ2xvYWQuYworKysgYi9zcmMvcGZyL3Bmcmdsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgUEZSIGdseXBoIGxvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTc1Niw4ICs3NTYsMTAgQEAKIAogICAgICAgY291bnQgPSBnbHlwaC0+bnVtX3N1YnMgLSBvbGRfY291bnQ7CiAKLSAgICAgIEZUX1RSQUNFNCgoICJjb21wb3VuZCBnbHlwaCB3aXRoICVkIGVsZW1lbnRzIChvZmZzZXQgJWx1KTpcbiIsCi0gICAgICAgICAgICAgICAgICBjb3VudCwgb2Zmc2V0ICkpOworICAgICAgRlRfVFJBQ0U0KCggImNvbXBvdW5kIGdseXBoIHdpdGggJWQgZWxlbWVudCVzIChvZmZzZXQgJWx1KTpcbiIsCisgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgIGNvdW50ID09IDEgPyAiIiA6ICJzIiwKKyAgICAgICAgICAgICAgICAgIG9mZnNldCApKTsKIAogICAgICAgLyogbm93LCBsb2FkIGVhY2ggaW5kaXZpZHVhbCBnbHlwaCAqLwogICAgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKQEAgLTgxMCw3ICs4MTIsOSBAQAogICAgICAgICAvKiBwcm9jZWVkIHRvIG5leHQgc3ViLWdseXBoICovCiAgICAgICB9CiAKLSAgICAgIEZUX1RSQUNFNCgoICJlbmQgY29tcG91bmQgZ2x5cGggd2l0aCAlZCBlbGVtZW50c1xuIiwgY291bnQgKSk7CisgICAgICBGVF9UUkFDRTQoKCAiZW5kIGNvbXBvdW5kIGdseXBoIHdpdGggJWQgZWxlbWVudCVzXG4iLAorICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICBjb3VudCA9PSAxID8gIiIgOiAicyIgKSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvcGZyL3Bmcmdsb2FkLmggYi9zcmMvcGZyL3Bmcmdsb2FkLmgKaW5kZXggNjYxMjMyMy4uMDFmNDhkNyAxMDA2NDQKLS0tIGEvc3JjL3Bmci9wZnJnbG9hZC5oCisrKyBiL3NyYy9wZnIvcGZyZ2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgZ2x5cGggbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJsb2FkLmMgYi9zcmMvcGZyL3BmcmxvYWQuYwppbmRleCA0Zjg0MTY1Li4yNzc2ZGE0IDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmxvYWQuYworKysgYi9zcmMvcGZyL3BmcmxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJsb2FkLmggYi9zcmMvcGZyL3BmcmxvYWQuaAppbmRleCBmOTQ3NWFlLi4zNmU4MDlhIDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcmxvYWQuaAorKysgYi9zcmMvcGZyL3BmcmxvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJvYmpzLmMgYi9zcmMvcGZyL3Bmcm9ianMuYwppbmRleCA0YjE3MDNmLi43MzdiOTdiIDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmcm9ianMuYworKysgYi9zcmMvcGZyL3Bmcm9ianMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgb2JqZWN0IG1ldGhvZHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjY0LDEyICsyNjQsNiBAQAogICAgICAgICBjaGFybWFwLmVuY29kaW5nICAgID0gRlRfRU5DT0RJTkdfVU5JQ09ERTsKIAogICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCAmcGZyX2NtYXBfY2xhc3NfcmVjLCBOVUxMLCAmY2hhcm1hcCwgTlVMTCApOwotCi0jaWYgMAotICAgICAgICAvKiBzZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCi0gICAgICAgIGlmICggcGZyZmFjZS0+bnVtX2NoYXJtYXBzICkKLSAgICAgICAgICBwZnJmYWNlLT5jaGFybWFwID0gcGZyZmFjZS0+Y2hhcm1hcHNbMF07Ci0jZW5kaWYKICAgICAgIH0KIAogICAgICAgLyogY2hlY2sgd2hldGhlciB3ZSBoYXZlIGxvYWRlZCBhbnkga2VybmluZyBwYWlycyAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJvYmpzLmggYi9zcmMvcGZyL3Bmcm9ianMuaAppbmRleCBkNmFkNjU2Li41OWM3MDlmIDEwMDY0NAotLS0gYS9zcmMvcGZyL3Bmcm9ianMuaAorKysgYi9zcmMvcGZyL3Bmcm9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgb2JqZWN0IG1ldGhvZHMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJzYml0LmMgYi9zcmMvcGZyL3BmcnNiaXQuYwppbmRleCA1NGU3ZDBlLi5iYTkwOWRkIDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcnNiaXQuYworKysgYi9zcmMvcGZyL3BmcnNiaXQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgYml0bWFwIGxvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJzYml0LmggYi9zcmMvcGZyL3BmcnNiaXQuaAppbmRleCBmYzI3MGY1Li4wN2IyN2JjIDEwMDY0NAotLS0gYS9zcmMvcGZyL3BmcnNiaXQuaAorKysgYi9zcmMvcGZyL3BmcnNiaXQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQRlIgYml0bWFwIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Bmci9wZnJ0eXBlcy5oIGIvc3JjL3Bmci9wZnJ0eXBlcy5oCmluZGV4IGMzZDU0MmMuLjA1OGQ2YWEgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcGZydHlwZXMuaAorKysgYi9zcmMvcGZyL3BmcnR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgUEZSIGRhdGEgc3RydWN0dXJlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wZnIvcnVsZXMubWsgYi9zcmMvcGZyL3J1bGVzLm1rCmluZGV4IDk5NDBmNjIuLjNhY2I3OTUgMTAwNjQ0Ci0tLSBhL3NyYy9wZnIvcnVsZXMubWsKKysrIGIvc3JjL3Bmci9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDItMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvSmFtZmlsZSBiL3NyYy9wc2F1eC9KYW1maWxlCmluZGV4IDc5OGI3M2QuLmEyMzFkNTkgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9KYW1maWxlCisrKyBiL3NyYy9wc2F1eC9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9wc2F1eCBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCkBAIC0yMiw2ICsyMiwxNiBAQAogICAgICAgICAgICAgICAgcHNvYmpzCiAgICAgICAgICAgICAgICB0MWNtYXAKICAgICAgICAgICAgICAgIHQxZGVjb2RlCisgICAgICAgICAgICAgICBjZmZkZWNvZGUKKyAgICAgICAgICAgICAgIHBzYXJyc3QKKyAgICAgICAgICAgICAgIHBzYmx1ZXMKKyAgICAgICAgICAgICAgIHBzZXJyb3IKKyAgICAgICAgICAgICAgIHBzZm9udAorICAgICAgICAgICAgICAgcHNmdAorICAgICAgICAgICAgICAgcHNoaW50cworICAgICAgICAgICAgICAgcHNpbnRycAorICAgICAgICAgICAgICAgcHNyZWFkCisgICAgICAgICAgICAgICBwc3N0YWNrCiAgICAgICAgICAgICAgICA7CiAgIH0KICAgZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L2FmbXBhcnNlLmMgYi9zcmMvcHNhdXgvYWZtcGFyc2UuYwppbmRleCBkYmU3ZGRkLi4wYzMzZDU5IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvYWZtcGFyc2UuYworKysgYi9zcmMvcHNhdXgvYWZtcGFyc2UuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBRk0gcGFyc2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAogCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCisKICNpbmNsdWRlICJhZm1wYXJzZS5oIgogI2luY2x1ZGUgInBzY29udi5oIgogCkBAIC05NzMsNSArOTc1LDEyIEBACiAgICAgcmV0dXJuIGVycm9yOwogICB9CiAKKyNlbHNlIC8qIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNICovCisKKyAgLyogQU5TSSBDIGRvZXNuJ3QgbGlrZSBlbXB0eSBzb3VyY2UgZmlsZXMgKi8KKyAgdHlwZWRlZiBpbnQgIF9hZm1fcGFyc2VfZHVtbXk7CisKKyNlbmRpZiAvKiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTSAqLworCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L2FmbXBhcnNlLmggYi9zcmMvcHNhdXgvYWZtcGFyc2UuaAppbmRleCBjZDJiZWI3Li44NmY4NTJhIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvYWZtcGFyc2UuaAorKysgYi9zcmMvcHNhdXgvYWZtcGFyc2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBRk0gcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L2NmZmRlY29kZS5jIGIvc3JjL3BzYXV4L2NmZmRlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDYyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHNhdXgvY2ZmZGVjb2RlLmMKQEAgLTAsMCArMSwyMzcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBjZmZkZWNvZGUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgUG9zdFNjcmlwdCBDRkYgKFR5cGUgMikgZGVjb2Rpbmcgcm91dGluZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTctMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLworLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KKy8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCisvKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLworLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICisjaW5jbHVkZSBGVF9TRVJWSUNFX0NGRl9UQUJMRV9MT0FEX0gKKworI2luY2x1ZGUgImNmZmRlY29kZS5oIgorI2luY2x1ZGUgInBzb2Jqcy5oIgorCisjaW5jbHVkZSAicHNhdXhlcnIuaCIKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmZmRlY29kZQorCisKKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisKKyAgdHlwZWRlZiBlbnVtICBDRkZfT3BlcmF0b3JfCisgIHsKKyAgICBjZmZfb3BfdW5rbm93biA9IDAsCisKKyAgICBjZmZfb3Bfcm1vdmV0bywKKyAgICBjZmZfb3BfaG1vdmV0bywKKyAgICBjZmZfb3Bfdm1vdmV0bywKKworICAgIGNmZl9vcF9ybGluZXRvLAorICAgIGNmZl9vcF9obGluZXRvLAorICAgIGNmZl9vcF92bGluZXRvLAorCisgICAgY2ZmX29wX3JyY3VydmV0bywKKyAgICBjZmZfb3BfaGhjdXJ2ZXRvLAorICAgIGNmZl9vcF9odmN1cnZldG8sCisgICAgY2ZmX29wX3JjdXJ2ZWxpbmUsCisgICAgY2ZmX29wX3JsaW5lY3VydmUsCisgICAgY2ZmX29wX3ZoY3VydmV0bywKKyAgICBjZmZfb3BfdnZjdXJ2ZXRvLAorCisgICAgY2ZmX29wX2ZsZXgsCisgICAgY2ZmX29wX2hmbGV4LAorICAgIGNmZl9vcF9oZmxleDEsCisgICAgY2ZmX29wX2ZsZXgxLAorCisgICAgY2ZmX29wX2VuZGNoYXIsCisKKyAgICBjZmZfb3BfaHN0ZW0sCisgICAgY2ZmX29wX3ZzdGVtLAorICAgIGNmZl9vcF9oc3RlbWhtLAorICAgIGNmZl9vcF92c3RlbWhtLAorCisgICAgY2ZmX29wX2hpbnRtYXNrLAorICAgIGNmZl9vcF9jbnRybWFzaywKKyAgICBjZmZfb3BfZG90c2VjdGlvbiwgIC8qIGRlcHJlY2F0ZWQsIGFjdHMgYXMgbm8tb3AgKi8KKworICAgIGNmZl9vcF9hYnMsCisgICAgY2ZmX29wX2FkZCwKKyAgICBjZmZfb3Bfc3ViLAorICAgIGNmZl9vcF9kaXYsCisgICAgY2ZmX29wX25lZywKKyAgICBjZmZfb3BfcmFuZG9tLAorICAgIGNmZl9vcF9tdWwsCisgICAgY2ZmX29wX3NxcnQsCisKKyAgICBjZmZfb3BfYmxlbmQsCisKKyAgICBjZmZfb3BfZHJvcCwKKyAgICBjZmZfb3BfZXhjaCwKKyAgICBjZmZfb3BfaW5kZXgsCisgICAgY2ZmX29wX3JvbGwsCisgICAgY2ZmX29wX2R1cCwKKworICAgIGNmZl9vcF9wdXQsCisgICAgY2ZmX29wX2dldCwKKyAgICBjZmZfb3Bfc3RvcmUsCisgICAgY2ZmX29wX2xvYWQsCisKKyAgICBjZmZfb3BfYW5kLAorICAgIGNmZl9vcF9vciwKKyAgICBjZmZfb3Bfbm90LAorICAgIGNmZl9vcF9lcSwKKyAgICBjZmZfb3BfaWZlbHNlLAorCisgICAgY2ZmX29wX2NhbGxzdWJyLAorICAgIGNmZl9vcF9jYWxsZ3N1YnIsCisgICAgY2ZmX29wX3JldHVybiwKKworICAgIC8qIFR5cGUgMSBvcGNvZGVzOiBpbnZhbGlkIGJ1dCBzZWVuIGluIHJlYWwgbGlmZSAqLworICAgIGNmZl9vcF9oc2J3LAorICAgIGNmZl9vcF9jbG9zZXBhdGgsCisgICAgY2ZmX29wX2NhbGxvdGhlcnN1YnIsCisgICAgY2ZmX29wX3BvcCwKKyAgICBjZmZfb3Bfc2VhYywKKyAgICBjZmZfb3Bfc2J3LAorICAgIGNmZl9vcF9zZXRjdXJyZW50cG9pbnQsCisKKyAgICAvKiBkbyBub3QgcmVtb3ZlICovCisgICAgY2ZmX29wX21heAorCisgIH0gQ0ZGX09wZXJhdG9yOworCisKKyNkZWZpbmUgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRIICAweDgwCisjZGVmaW5lIENGRl9DT1VOVF9FWEFDVCAgICAgICAgMHg0MAorI2RlZmluZSBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0sgIDB4MjAKKworICAvKiBjb3VudCB2YWx1ZXMgd2hpY2ggaGF2ZSB0aGUgYENGRl9DT1VOVF9DSEVDS19XSURUSCcgZmxhZyBzZXQgYXJlICAqLworICAvKiB1c2VkIGZvciBjaGVja2luZyB0aGUgd2lkdGggYW5kIHJlcXVlc3RlZCBudW1iZXJzIG9mIGFyZ3VtZW50cyAgICAqLworICAvKiBvbmx5OyB0aGV5IGFyZSBzZXQgdG8gemVybyBhZnRlcndhcmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIC8qIHRoZSBvdGhlciB0d28gZmxhZ3MgYXJlIGluZm9ybWF0aXZlIG9ubHkgYW5kIHVudXNlZCBjdXJyZW50bHkgICAgICovCisKKyAgc3RhdGljIGNvbnN0IEZUX0J5dGUgIGNmZl9hcmd1bWVudF9jb3VudHNbXSA9CisgIHsKKyAgICAwLCAgLyogdW5rbm93biAqLworCisgICAgMiB8IENGRl9DT1VOVF9DSEVDS19XSURUSCB8IENGRl9DT1VOVF9FWEFDVCwgLyogcm1vdmV0byAqLworICAgIDEgfCBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEggfCBDRkZfQ09VTlRfRVhBQ1QsCisgICAgMSB8IENGRl9DT1VOVF9DSEVDS19XSURUSCB8IENGRl9DT1VOVF9FWEFDVCwKKworICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssIC8qIHJsaW5ldG8gKi8KKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAorICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCisKKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLCAvKiBycmN1cnZldG8gKi8KKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAorICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCisgICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywKKyAgICAwIHwgQ0ZGX0NPVU5UX0NMRUFSX1NUQUNLLAorICAgIDAgfCBDRkZfQ09VTlRfQ0xFQVJfU1RBQ0ssCisgICAgMCB8IENGRl9DT1VOVF9DTEVBUl9TVEFDSywKKworICAgIDEzLCAvKiBmbGV4ICovCisgICAgNywKKyAgICA5LAorICAgIDExLAorCisgICAgMCB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwgLyogZW5kY2hhciAqLworCisgICAgMiB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwgLyogaHN0ZW0gKi8KKyAgICAyIHwgQ0ZGX0NPVU5UX0NIRUNLX1dJRFRILAorICAgIDIgfCBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEgsCisgICAgMiB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwKKworICAgIDAgfCBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEgsIC8qIGhpbnRtYXNrICovCisgICAgMCB8IENGRl9DT1VOVF9DSEVDS19XSURUSCwgLyogY250cm1hc2sgKi8KKyAgICAwLCAvKiBkb3RzZWN0aW9uICovCisKKyAgICAxLCAvKiBhYnMgKi8KKyAgICAyLAorICAgIDIsCisgICAgMiwKKyAgICAxLAorICAgIDAsCisgICAgMiwKKyAgICAxLAorCisgICAgMSwgLyogYmxlbmQgKi8KKworICAgIDEsIC8qIGRyb3AgKi8KKyAgICAyLAorICAgIDEsCisgICAgMiwKKyAgICAxLAorCisgICAgMiwgLyogcHV0ICovCisgICAgMSwKKyAgICA0LAorICAgIDMsCisKKyAgICAyLCAvKiBhbmQgKi8KKyAgICAyLAorICAgIDEsCisgICAgMiwKKyAgICA0LAorCisgICAgMSwgLyogY2FsbHN1YnIgKi8KKyAgICAxLAorICAgIDAsCisKKyAgICAyLCAvKiBoc2J3ICovCisgICAgMCwKKyAgICAwLAorICAgIDAsCisgICAgNSwgLyogc2VhYyAqLworICAgIDQsIC8qIHNidyAqLworICAgIDIgIC8qIHNldGN1cnJlbnRwb2ludCAqLworICB9OworCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGNmZl9vcGVyYXRvcl9zZWFjKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIGFzYiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgYWR4LAorICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICBhZHksCisgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGJjaGFyLAorICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBhY2hhciApCisgIHsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yOworICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlciA9ICZkZWNvZGVyLT5idWlsZGVyOworICAgIEZUX0ludCAgICAgICAgYmNoYXJfaW5kZXgsIGFjaGFyX2luZGV4OworICAgIFRUX0ZhY2UgICAgICAgZmFjZSAgICA9IGRlY29kZXItPmJ1aWxkZXIuZmFjZTsKKyAgICBGVF9WZWN0b3IgICAgIGxlZnRfYmVhcmluZywgYWR2YW5jZTsKKyAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmc7CisgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbjsKKyAgICBGVF9Qb3MgICAgICAgIGdseXBoX3dpZHRoOworCisKKyAgICBpZiAoIGRlY29kZXItPnNlYWMgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggImNmZl9vcGVyYXRvcl9zZWFjOiBpbnZhbGlkIG5lc3RlZCBzZWFjXG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKyAgICB9CisKKyAgICBhZHggKz0gZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueDsKKyAgICBhZHkgKz0gZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcueTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICAvKiBJbmNyZW1lbnRhbCBmb250cyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHZhbGlkIGNoYXJzZXRzLiAgICAgICAgKi8KKyAgICAvKiBUaGV5IHVzZSB0aGUgY2hhcmFjdGVyIGNvZGUsIG5vdCB0aGUgZ2x5cGggaW5kZXgsIGluIHRoaXMgY2FzZS4gKi8KKyAgICBpZiAoIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSApCisgICAgeworICAgICAgYmNoYXJfaW5kZXggPSBiY2hhcjsKKyAgICAgIGFjaGFyX2luZGV4ID0gYWNoYXI7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCisgICAgeworICAgICAgQ0ZGX0ZvbnQgY2ZmID0gKENGRl9Gb250KShmYWNlLT5leHRyYS5kYXRhKTsKKworCisgICAgICBiY2hhcl9pbmRleCA9IGNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUoIGNmZiwgYmNoYXIgKTsKKyAgICAgIGFjaGFyX2luZGV4ID0gY2ZmX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZSggY2ZmLCBhY2hhciApOworICAgIH0KKworICAgIGlmICggYmNoYXJfaW5kZXggPCAwIHx8IGFjaGFyX2luZGV4IDwgMCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiY2ZmX29wZXJhdG9yX3NlYWM6IgorICAgICAgICAgICAgICAgICAiIGludmFsaWQgc2VhYyBjaGFyYWN0ZXIgY29kZSBhcmd1bWVudHNcbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIFN5bnRheF9FcnJvciApOworICAgIH0KKworICAgIC8qIElmIHdlIGFyZSB0cnlpbmcgdG8gbG9hZCBhIGNvbXBvc2l0ZSBnbHlwaCwgZG8gbm90IGxvYWQgdGhlICovCisgICAgLyogYWNjZW50IGNoYXJhY3RlciBhbmQgcmV0dXJuIHRoZSBhcnJheSBvZiBzdWJnbHlwaHMuICAgICAgICAgKi8KKyAgICBpZiAoIGJ1aWxkZXItPm5vX3JlY3Vyc2UgKQorICAgIHsKKyAgICAgIEZUX0dseXBoU2xvdCAgICBnbHlwaCAgPSAoRlRfR2x5cGhTbG90KWJ1aWxkZXItPmdseXBoOworICAgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlciA9IGdseXBoLT5pbnRlcm5hbC0+bG9hZGVyOworICAgICAgRlRfU3ViR2x5cGggICAgIHN1Ymc7CisKKworICAgICAgLyogcmVhbGxvY2F0ZSBzdWJnbHlwaCBhcnJheSBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGVycm9yID0gRlRfR2x5cGhMb2FkZXJfQ2hlY2tTdWJHbHlwaHMoIGxvYWRlciwgMiApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgc3ViZyA9IGxvYWRlci0+Y3VycmVudC5zdWJnbHlwaHM7CisKKyAgICAgIC8qIHN1YmdseXBoIDAgPSBiYXNlIGNoYXJhY3RlciAqLworICAgICAgc3ViZy0+aW5kZXggPSBiY2hhcl9pbmRleDsKKyAgICAgIHN1YmctPmZsYWdzID0gRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVMgfAorICAgICAgICAgICAgICAgICAgICBGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTOworICAgICAgc3ViZy0+YXJnMSAgPSAwOworICAgICAgc3ViZy0+YXJnMiAgPSAwOworICAgICAgc3ViZysrOworCisgICAgICAvKiBzdWJnbHlwaCAxID0gYWNjZW50IGNoYXJhY3RlciAqLworICAgICAgc3ViZy0+aW5kZXggPSBhY2hhcl9pbmRleDsKKyAgICAgIHN1YmctPmZsYWdzID0gRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVM7CisgICAgICBzdWJnLT5hcmcxICA9IChGVF9JbnQpKCBhZHggPj4gMTYgKTsKKyAgICAgIHN1YmctPmFyZzIgID0gKEZUX0ludCkoIGFkeSA+PiAxNiApOworCisgICAgICAvKiBzZXQgdXAgcmVtYWluaW5nIGdseXBoIGZpZWxkcyAqLworICAgICAgZ2x5cGgtPm51bV9zdWJnbHlwaHMgPSAyOworICAgICAgZ2x5cGgtPnN1YmdseXBocyAgICAgPSBsb2FkZXItPmJhc2Uuc3ViZ2x5cGhzOworICAgICAgZ2x5cGgtPmZvcm1hdCAgICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFOworCisgICAgICBsb2FkZXItPmN1cnJlbnQubnVtX3N1YmdseXBocyA9IDI7CisgICAgfQorCisgICAgRlRfR2x5cGhMb2FkZXJfUHJlcGFyZSggYnVpbGRlci0+bG9hZGVyICk7CisKKyAgICAvKiBGaXJzdCBsb2FkIGBiY2hhcicgaW4gYnVpbGRlciAqLworICAgIGVycm9yID0gZGVjb2Rlci0+Z2V0X2dseXBoX2NhbGxiYWNrKCBmYWNlLCAoRlRfVUludCliY2hhcl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzdHJpbmcsICZjaGFyc3RyaW5nX2xlbiApOworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICAvKiB0aGUgc2VhYyBvcGVyYXRvciBtdXN0IG5vdCBiZSBuZXN0ZWQgKi8KKyAgICAgIGRlY29kZXItPnNlYWMgPSBUUlVFOworICAgICAgZXJyb3IgPSBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggZGVjb2RlciwgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuLCAwICk7CisgICAgICBkZWNvZGVyLT5zZWFjID0gRkFMU0U7CisKKyAgICAgIGRlY29kZXItPmZyZWVfZ2x5cGhfY2FsbGJhY2soIGZhY2UsICZjaGFyc3RyaW5nLCBjaGFyc3RyaW5nX2xlbiApOworCisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFNhdmUgdGhlIGxlZnQgYmVhcmluZywgYWR2YW5jZSBhbmQgZ2x5cGggd2lkdGggb2YgdGhlIGJhc2UgKi8KKyAgICAvKiBjaGFyYWN0ZXIgYXMgdGhleSB3aWxsIGJlIGVyYXNlZCBieSB0aGUgbmV4dCBsb2FkLiAgICAgICAgICovCisKKyAgICBsZWZ0X2JlYXJpbmcgPSBidWlsZGVyLT5sZWZ0X2JlYXJpbmc7CisgICAgYWR2YW5jZSAgICAgID0gYnVpbGRlci0+YWR2YW5jZTsKKyAgICBnbHlwaF93aWR0aCAgPSBkZWNvZGVyLT5nbHlwaF93aWR0aDsKKworICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gMDsKKyAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSA9IDA7CisKKyAgICBidWlsZGVyLT5wb3NfeCA9IGFkeCAtIGFzYjsKKyAgICBidWlsZGVyLT5wb3NfeSA9IGFkeTsKKworICAgIC8qIE5vdyBsb2FkIGBhY2hhcicgb24gdG9wIG9mIHRoZSBiYXNlIG91dGxpbmUuICovCisgICAgZXJyb3IgPSBkZWNvZGVyLT5nZXRfZ2x5cGhfY2FsbGJhY2soIGZhY2UsIChGVF9VSW50KWFjaGFyX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnN0cmluZywgJmNoYXJzdHJpbmdfbGVuICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLworICAgICAgZGVjb2Rlci0+c2VhYyA9IFRSVUU7CisgICAgICBlcnJvciA9IGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBkZWNvZGVyLCBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4sIDAgKTsKKyAgICAgIGRlY29kZXItPnNlYWMgPSBGQUxTRTsKKworICAgICAgZGVjb2Rlci0+ZnJlZV9nbHlwaF9jYWxsYmFjayggZmFjZSwgJmNoYXJzdHJpbmcsIGNoYXJzdHJpbmdfbGVuICk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgbGVmdCBzaWRlIGJlYXJpbmcsIGFkdmFuY2UgYW5kIGdseXBoIHdpZHRoICovCisgICAgLyogb2YgdGhlIGJhc2UgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgYnVpbGRlci0+bGVmdF9iZWFyaW5nID0gbGVmdF9iZWFyaW5nOworICAgIGJ1aWxkZXItPmFkdmFuY2UgICAgICA9IGFkdmFuY2U7CisgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggID0gZ2x5cGhfd2lkdGg7CisKKyAgICBidWlsZGVyLT5wb3NfeCA9IDA7CisgICAgYnVpbGRlci0+cG9zX3kgPSAwOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKyNlbmRpZiAvKiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgIEdFTkVSSUMgQ0hBUlNUUklORyBQQVJTSU5HICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2ZmX2NvbXB1dGVfYmlhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0ZXMgdGhlIGJpYXMgdmFsdWUgaW4gZGVwZW5kZW5jZSBvZiB0aGUgbnVtYmVyIG9mIGdseXBoICAgICAgICovCisgIC8qICAgIHN1YnJvdXRpbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGluX2NoYXJzdHJpbmdfdHlwZSA6OiBUaGUgYENoYXJzdHJpbmdUeXBlJyB2YWx1ZSBvZiB0aGUgdG9wIERJQ1QgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9zdWJycyAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGdseXBoIHN1YnJvdXRpbmVzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBiaWFzIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgRlRfSW50CisgIGNmZl9jb21wdXRlX2JpYXMoIEZUX0ludCAgIGluX2NoYXJzdHJpbmdfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgbnVtX3N1YnJzICkKKyAgeworICAgIEZUX0ludCAgcmVzdWx0OworCisKKyAgICBpZiAoIGluX2NoYXJzdHJpbmdfdHlwZSA9PSAxICkKKyAgICAgIHJlc3VsdCA9IDA7CisgICAgZWxzZSBpZiAoIG51bV9zdWJycyA8IDEyNDAgKQorICAgICAgcmVzdWx0ID0gMTA3OworICAgIGVsc2UgaWYgKCBudW1fc3VicnMgPCAzMzkwMFUgKQorICAgICAgcmVzdWx0ID0gMTEzMTsKKyAgICBlbHNlCisgICAgICByZXN1bHQgPSAzMjc2OFU7CisKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0ludCApCisgIGNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGUoIENGRl9Gb250ICBjZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICBjaGFyY29kZSApCisgIHsKKyAgICBGVF9VSW50ICAgIG47CisgICAgRlRfVVNob3J0ICBnbHlwaF9zaWQ7CisKKyAgICBGVF9TZXJ2aWNlX0NGRkxvYWQgIGNmZmxvYWQ7CisKKworICAgIC8qIENJRC1rZXllZCBmb250cyBkb24ndCBoYXZlIGdseXBoIG5hbWVzICovCisgICAgaWYgKCAhY2ZmLT5jaGFyc2V0LnNpZHMgKQorICAgICAgcmV0dXJuIC0xOworCisgICAgLyogY2hlY2sgcmFuZ2Ugb2Ygc3RhbmRhcmQgY2hhciBjb2RlICovCisgICAgaWYgKCBjaGFyY29kZSA8IDAgfHwgY2hhcmNvZGUgPiAyNTUgKQorICAgICAgcmV0dXJuIC0xOworCisjaWYgMAorICAgIC8qIHJldHJpZXZlIGNmZmxvYWQgZnJvbSBsaXN0IG9mIGN1cnJlbnQgbW9kdWxlcyAqLworICAgIEZUX1NlcnZpY2VfQ0ZGTG9hZCAgY2ZmbG9hZDsKKworCisgICAgRlRfRkFDRV9GSU5EX0dMT0JBTF9TRVJWSUNFKCBmYWNlLCBjZmZsb2FkLCBDRkZfTE9BRCApOworICAgIGlmICggIWNmZmxvYWQgKQorICAgIHsKKyAgICAgIEZUX0VSUk9SKCggImNmZl9sb29rdXBfZ2x5cGhfYnlfc3RkY2hhcmNvZGU6IgorICAgICAgICAgICAgICAgICAiIHRoZSBgY2ZmbG9hZCcgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGVcbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworICAgIH0KKyNlbmRpZgorCisgICAgY2ZmbG9hZCA9IChGVF9TZXJ2aWNlX0NGRkxvYWQpY2ZmLT5jZmZsb2FkOworCisgICAgLyogR2V0IGNvZGUgdG8gU0lEIG1hcHBpbmcgZnJvbSBgY2ZmX3N0YW5kYXJkX2VuY29kaW5nJy4gKi8KKyAgICBnbHlwaF9zaWQgPSBjZmZsb2FkLT5nZXRfc3RhbmRhcmRfZW5jb2RpbmcoIChGVF9VSW50KWNoYXJjb2RlICk7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IGNmZi0+bnVtX2dseXBoczsgbisrICkKKyAgICB7CisgICAgICBpZiAoIGNmZi0+Y2hhcnNldC5zaWRzW25dID09IGdseXBoX3NpZCApCisgICAgICAgIHJldHVybiAoRlRfSW50KW47CisgICAgfQorCisgICAgcmV0dXJuIC0xOworICB9CisKKworI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBQYXJzZXMgYSBnaXZlbiBUeXBlIDIgY2hhcnN0cmluZ3MgcHJvZ3JhbS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWNvZGVyICAgICAgICAgOjogVGhlIGN1cnJlbnQgVHlwZSAxIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyc3RyaW5nX2Jhc2UgOjogVGhlIGJhc2Ugb2YgdGhlIGNoYXJzdHJpbmcgc3RyZWFtLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJzdHJpbmdfbGVuICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaW5fZGljdCAgICAgICAgIDo6IFNldCB0byAxIGlmIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRvcCBvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIERJQ1QgKG5lZWRlZCBmb3IgTXVsdGlwbGUgTWFzdGVyIENGRnMpLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIGluX2RpY3QgKQorICB7CisgICAgRlRfRXJyb3IgICAgICAgICAgIGVycm9yOworICAgIENGRl9EZWNvZGVyX1pvbmUqICB6b25lOworICAgIEZUX0J5dGUqICAgICAgICAgICBpcDsKKyAgICBGVF9CeXRlKiAgICAgICAgICAgbGltaXQ7CisgICAgQ0ZGX0J1aWxkZXIqICAgICAgIGJ1aWxkZXIgPSAmZGVjb2Rlci0+YnVpbGRlcjsKKyAgICBGVF9Qb3MgICAgICAgICAgICAgeCwgeTsKKyAgICBGVF9GaXhlZCogICAgICAgICAgc3RhY2s7CisgICAgRlRfSW50ICAgICAgICAgICAgIGNoYXJzdHJpbmdfdHlwZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QuY2hhcnN0cmluZ190eXBlOworICAgIEZUX1VTaG9ydCAgICAgICAgICBudW1fZGVzaWducyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QubnVtX2Rlc2lnbnM7CisgICAgRlRfVVNob3J0ICAgICAgICAgIG51bV9heGVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5jZmYtPnRvcF9mb250LmZvbnRfZGljdC5udW1fYXhlczsKKworICAgIFQyX0hpbnRzX0Z1bmNzICBoaW50ZXI7CisKKworICAgIC8qIHNldCBkZWZhdWx0IHdpZHRoICovCisgICAgZGVjb2Rlci0+bnVtX2hpbnRzICA9IDA7CisgICAgZGVjb2Rlci0+cmVhZF93aWR0aCA9IDE7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSBkZWNvZGVyICovCisgICAgZGVjb2Rlci0+dG9wICA9IGRlY29kZXItPnN0YWNrOworICAgIGRlY29kZXItPnpvbmUgPSBkZWNvZGVyLT56b25lczsKKyAgICB6b25lICAgICAgICAgID0gZGVjb2Rlci0+em9uZXM7CisgICAgc3RhY2sgICAgICAgICA9IGRlY29kZXItPnRvcDsKKworICAgIGhpbnRlciA9IChUMl9IaW50c19GdW5jcylidWlsZGVyLT5oaW50c19mdW5jczsKKworICAgIGJ1aWxkZXItPnBhdGhfYmVndW4gPSAwOworCisgICAgem9uZS0+YmFzZSAgICAgICAgICAgPSBjaGFyc3RyaW5nX2Jhc2U7CisgICAgbGltaXQgPSB6b25lLT5saW1pdCAgPSBjaGFyc3RyaW5nX2Jhc2UgKyBjaGFyc3RyaW5nX2xlbjsKKyAgICBpcCAgICA9IHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CisKKyAgICBlcnJvciA9IEZUX0Vycl9PazsKKworICAgIHggPSBidWlsZGVyLT5wb3NfeDsKKyAgICB5ID0gYnVpbGRlci0+cG9zX3k7CisKKyAgICAvKiBiZWdpbiBoaW50cyByZWNvcmRpbmcgc2Vzc2lvbiwgaWYgYW55ICovCisgICAgaWYgKCBoaW50ZXIgKQorICAgICAgaGludGVyLT5vcGVuKCBoaW50ZXItPmhpbnRzICk7CisKKyAgICAvKiBub3cgZXhlY3V0ZSBsb29wICovCisgICAgd2hpbGUgKCBpcCA8IGxpbWl0ICkKKyAgICB7CisgICAgICBDRkZfT3BlcmF0b3IgIG9wOworICAgICAgRlRfQnl0ZSAgICAgICB2OworCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIERlY29kZSBvcGVyYXRvciBvciBvcGVyYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIHYgPSAqaXArKzsKKyAgICAgIGlmICggdiA+PSAzMiB8fCB2ID09IDI4ICkKKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICAgIHNoaWZ0ID0gMTY7CisgICAgICAgIEZUX0ludDMyICB2YWw7CisKKworICAgICAgICAvKiB0aGlzIGlzIGFuIG9wZXJhbmQsIHB1c2ggaXQgb24gdGhlIHN0YWNrICovCisKKyAgICAgICAgLyogaWYgd2UgdXNlIHNoaWZ0cywgYWxsIGNvbXB1dGF0aW9ucyBhcmUgZG9uZSB3aXRoIHVuc2lnbmVkICovCisgICAgICAgIC8qIHZhbHVlczsgdGhlIGNvbnZlcnNpb24gdG8gYSBzaWduZWQgdmFsdWUgaXMgdGhlIGxhc3Qgc3RlcCAqLworICAgICAgICBpZiAoIHYgPT0gMjggKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBpcCArIDEgPj0gbGltaXQgKQorICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgdmFsID0gKEZUX1Nob3J0KSggKCAoRlRfVVNob3J0KWlwWzBdIDw8IDggKSB8IGlwWzFdICk7CisgICAgICAgICAgaXAgKz0gMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggdiA8IDI0NyApCisgICAgICAgICAgdmFsID0gKEZUX0ludDMyKXYgLSAxMzk7CisgICAgICAgIGVsc2UgaWYgKCB2IDwgMjUxICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggaXAgPj0gbGltaXQgKQorICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgdmFsID0gKCAoRlRfSW50MzIpdiAtIDI0NyApICogMjU2ICsgKmlwKysgKyAxMDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHYgPCAyNTUgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBpcCA+PSBsaW1pdCApCisgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICB2YWwgPSAtKCAoRlRfSW50MzIpdiAtIDI1MSApICogMjU2IC0gKmlwKysgLSAxMDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBpcCArIDMgPj0gbGltaXQgKQorICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgdmFsID0gKEZUX0ludDMyKSggKCAoRlRfVUludDMyKWlwWzBdIDw8IDI0ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMilpcFsxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIChGVF9VSW50MzIpaXBbMl0gPDwgIDggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludDMyKWlwWzNdICAgICAgICAgKTsKKyAgICAgICAgICBpcCArPSA0OworICAgICAgICAgIGlmICggY2hhcnN0cmluZ190eXBlID09IDIgKQorICAgICAgICAgICAgc2hpZnQgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICggZGVjb2Rlci0+dG9wIC0gc3RhY2sgPj0gQ0ZGX01BWF9PUEVSQU5EUyApCisgICAgICAgICAgZ290byBTdGFja19PdmVyZmxvdzsKKworICAgICAgICB2YWwgICAgICAgICAgICAgPSAoRlRfSW50MzIpKCAoRlRfVUludDMyKXZhbCA8PCBzaGlmdCApOworICAgICAgICAqZGVjb2Rlci0+dG9wKysgPSB2YWw7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICBpZiAoICEoIHZhbCAmIDB4RkZGRkwgKSApCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlaGQiLCAoRlRfU2hvcnQpKCAoRlRfVUludDMyKXZhbCA+PiAxNiApICkpOworICAgICAgICBlbHNlCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlLjVmIiwgdmFsIC8gNjU1MzYuMCApKTsKKyNlbmRpZgorCisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIFRoZSBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBub3JtYWxseSBhcmd1bWVudHMgYXJlIHRvIGJlIHRha2VuICovCisgICAgICAgIC8qIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suICBIb3dldmVyLCB0aGlzIHNlZW1zIG5vdCB0byBiZSAgICovCisgICAgICAgIC8qIGNvcnJlY3QsIGF0IGxlYXN0IGZvciBBY3JvcmVhZCA3LjAuOCBvbiBHTlUvTGludXg6IEl0IHBvcHMgdGhlICovCisgICAgICAgIC8qIGFyZ3VtZW50cyBzaW1pbGFyIHRvIGEgUFMgaW50ZXJwcmV0ZXIuICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgRlRfRml4ZWQqICBhcmdzICAgICA9IGRlY29kZXItPnRvcDsKKyAgICAgICAgRlRfSW50ICAgICBudW1fYXJncyA9IChGVF9JbnQpKCBhcmdzIC0gZGVjb2Rlci0+c3RhY2sgKTsKKyAgICAgICAgRlRfSW50ICAgICByZXFfYXJnczsKKworCisgICAgICAgIC8qIGZpbmQgb3BlcmF0b3IgKi8KKyAgICAgICAgb3AgPSBjZmZfb3BfdW5rbm93bjsKKworICAgICAgICBzd2l0Y2ggKCB2ICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgb3AgPSBjZmZfb3BfaHN0ZW07CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICBvcCA9IGNmZl9vcF92c3RlbTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgIG9wID0gY2ZmX29wX3Ztb3ZldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICBvcCA9IGNmZl9vcF9ybGluZXRvOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDY6CisgICAgICAgICAgb3AgPSBjZmZfb3BfaGxpbmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgIG9wID0gY2ZmX29wX3ZsaW5ldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9ycmN1cnZldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgOToKKyAgICAgICAgICBvcCA9IGNmZl9vcF9jbG9zZXBhdGg7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgb3AgPSBjZmZfb3BfY2FsbHN1YnI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTE6CisgICAgICAgICAgb3AgPSBjZmZfb3BfcmV0dXJuOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyOgorICAgICAgICAgIGlmICggaXAgPj0gbGltaXQgKQorICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgdiA9ICppcCsrOworCisgICAgICAgICAgc3dpdGNoICggdiApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX2RvdHNlY3Rpb247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDE6IC8qIHRoaXMgaXMgYWN0dWFsbHkgdGhlIFR5cGUxIHZzdGVtMyBvcGVyYXRvciAqLworICAgICAgICAgICAgb3AgPSBjZmZfb3BfdnN0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6IC8qIHRoaXMgaXMgYWN0dWFsbHkgdGhlIFR5cGUxIGhzdGVtMyBvcGVyYXRvciAqLworICAgICAgICAgICAgb3AgPSBjZmZfb3BfaHN0ZW07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9hbmQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9vcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX25vdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX3NlYWM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9zYnc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9zdG9yZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX2FiczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9hZGQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgb3AgPSBjZmZfb3Bfc3ViOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX2RpdjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9sb2FkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX25lZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9lcTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9jYWxsb3RoZXJzdWJyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAxNzoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX3BvcDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMTg6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9kcm9wOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX3B1dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjE6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9nZXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDIyOgorICAgICAgICAgICAgb3AgPSBjZmZfb3BfaWZlbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX3JhbmRvbTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9tdWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDI2OgorICAgICAgICAgICAgb3AgPSBjZmZfb3Bfc3FydDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjc6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9kdXA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIDI4OgorICAgICAgICAgICAgb3AgPSBjZmZfb3BfZXhjaDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9pbmRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzA6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9yb2xsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAzMzoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX3NldGN1cnJlbnRwb2ludDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzQ6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9oZmxleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzU6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9mbGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSAzNjoKKyAgICAgICAgICAgIG9wID0gY2ZmX29wX2hmbGV4MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzc6CisgICAgICAgICAgICBvcCA9IGNmZl9vcF9mbGV4MTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHVua25vd24gb3AgKDEyLCAlZClcbiIsIHYgKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgb3AgPSBjZmZfb3BfaHNidzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9lbmRjaGFyOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE2OgorICAgICAgICAgIG9wID0gY2ZmX29wX2JsZW5kOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE4OgorICAgICAgICAgIG9wID0gY2ZmX29wX2hzdGVtaG07CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTk6CisgICAgICAgICAgb3AgPSBjZmZfb3BfaGludG1hc2s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjA6CisgICAgICAgICAgb3AgPSBjZmZfb3BfY250cm1hc2s7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjE6CisgICAgICAgICAgb3AgPSBjZmZfb3Bfcm1vdmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyMjoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9obW92ZXRvOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDIzOgorICAgICAgICAgIG9wID0gY2ZmX29wX3ZzdGVtaG07CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgb3AgPSBjZmZfb3BfcmN1cnZlbGluZTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNToKKyAgICAgICAgICBvcCA9IGNmZl9vcF9ybGluZWN1cnZlOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI2OgorICAgICAgICAgIG9wID0gY2ZmX29wX3Z2Y3VydmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNzoKKyAgICAgICAgICBvcCA9IGNmZl9vcF9oaGN1cnZldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjk6CisgICAgICAgICAgb3AgPSBjZmZfb3BfY2FsbGdzdWJyOworICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDMwOgorICAgICAgICAgIG9wID0gY2ZmX29wX3ZoY3VydmV0bzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzMToKKyAgICAgICAgICBvcCA9IGNmZl9vcF9odmN1cnZldG87CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICglZClcbiIsIHYgKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIG9wID09IGNmZl9vcF91bmtub3duICkKKyAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBpbiBNdWx0aXBsZSBNYXN0ZXIgQ0ZGcywgVDIgY2hhcnN0cmluZ3MgY2FuIGFwcGVhciBpbiAqLworICAgICAgICAvKiBkaWN0aW9uYXJpZXMsIGJ1dCBzb21lIG9wZXJhdG9ycyBhcmUgcHJvaGliaXRlZCAgICAgICAqLworICAgICAgICBpZiAoIGluX2RpY3QgKQorICAgICAgICB7CisgICAgICAgICAgc3dpdGNoICggb3AgKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbToKKyAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbToKKyAgICAgICAgICBjYXNlIGNmZl9vcF92bW92ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX3JsaW5ldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaGxpbmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF92bGluZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX3JyY3VydmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbWhtOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2hpbnRtYXNrOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2NudHJtYXNrOgorICAgICAgICAgIGNhc2UgY2ZmX29wX3Jtb3ZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaG1vdmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbWhtOgorICAgICAgICAgIGNhc2UgY2ZmX29wX3JjdXJ2ZWxpbmU6CisgICAgICAgICAgY2FzZSBjZmZfb3BfcmxpbmVjdXJ2ZToKKyAgICAgICAgICBjYXNlIGNmZl9vcF92dmN1cnZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaGhjdXJ2ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX3ZoY3VydmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9odmN1cnZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaGZsZXg6CisgICAgICAgICAgY2FzZSBjZmZfb3BfZmxleDoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9oZmxleDE6CisgICAgICAgICAgY2FzZSBjZmZfb3BfZmxleDE6CisgICAgICAgICAgY2FzZSBjZmZfb3BfY2FsbHN1YnI6CisgICAgICAgICAgY2FzZSBjZmZfb3BfY2FsbGdzdWJyOgorICAgICAgICAgICAgZ290byBNTV9FcnJvcjsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayBhcmd1bWVudHMgKi8KKyAgICAgICAgcmVxX2FyZ3MgPSBjZmZfYXJndW1lbnRfY291bnRzW29wXTsKKyAgICAgICAgaWYgKCByZXFfYXJncyAmIENGRl9DT1VOVF9DSEVDS19XSURUSCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIG51bV9hcmdzID4gMCAmJiBkZWNvZGVyLT5yZWFkX3dpZHRoICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBJZiBgbm9taW5hbF93aWR0aCcgaXMgbm9uLXplcm8sIHRoZSBudW1iZXIgaXMgcmVhbGx5IGEgICAgICAqLworICAgICAgICAgICAgLyogZGlmZmVyZW5jZSBhZ2FpbnN0IGBub21pbmFsX3dpZHRoJy4gIEVsc2UsIHRoZSBudW1iZXIgaGVyZSAgKi8KKyAgICAgICAgICAgIC8qIGlzIHRydWx5IGEgd2lkdGgsIG5vdCBhIGRpZmZlcmVuY2UgYWdhaW5zdCBgbm9taW5hbF93aWR0aCcuICovCisgICAgICAgICAgICAvKiBJZiB0aGUgZm9udCBkb2VzIG5vdCBzZXQgYG5vbWluYWxfd2lkdGgnLCB0aGVuICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogYG5vbWluYWxfd2lkdGgnIGRlZmF1bHRzIHRvIHplcm8sIGFuZCBzbyB3ZSBjYW4gc2V0ICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIGBnbHlwaF93aWR0aCcgdG8gYG5vbWluYWxfd2lkdGgnIHBsdXMgbnVtYmVyIG9uIHRoZSBzdGFjayAgICovCisgICAgICAgICAgICAvKiAtLSBmb3IgZWl0aGVyIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICBGVF9JbnQgIHNldF93aWR0aF9vazsKKworCisgICAgICAgICAgICBzd2l0Y2ggKCBvcCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIGNmZl9vcF9obW92ZXRvOgorICAgICAgICAgICAgY2FzZSBjZmZfb3Bfdm1vdmV0bzoKKyAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gbnVtX2FyZ3MgJiAyOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBjZmZfb3BfaHN0ZW06CisgICAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbToKKyAgICAgICAgICAgIGNhc2UgY2ZmX29wX2hzdGVtaG06CisgICAgICAgICAgICBjYXNlIGNmZl9vcF92c3RlbWhtOgorICAgICAgICAgICAgY2FzZSBjZmZfb3Bfcm1vdmV0bzoKKyAgICAgICAgICAgIGNhc2UgY2ZmX29wX2hpbnRtYXNrOgorICAgICAgICAgICAgY2FzZSBjZmZfb3BfY250cm1hc2s6CisgICAgICAgICAgICAgIHNldF93aWR0aF9vayA9IG51bV9hcmdzICYgMTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgY2ZmX29wX2VuZGNoYXI6CisgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgd2lkdGggc3BlY2lmaWVkIGZvciBlbmRjaGFyLCB3ZSBlaXRoZXIgaGF2ZSAqLworICAgICAgICAgICAgICAvKiAxIGFyZ3VtZW50IG9yIDUgYXJndW1lbnRzLiAgV2UgbGlrZSB0byBhcmd1ZS4gICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gaW5fZGljdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCAoIG51bV9hcmdzID09IDUgKSB8fCAoIG51bV9hcmdzID09IDEgKSApOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gMDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggc2V0X3dpZHRoX29rICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggPSBkZWNvZGVyLT5ub21pbmFsX3dpZHRoICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc3RhY2tbMF0gPj4gMTYgKTsKKworICAgICAgICAgICAgICBpZiAoIGRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogd2Ugb25seSB3YW50IHRoZSBhZHZhbmNlIHdpZHRoOyBzdG9wIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIC8qIENvbnN1bWVkIGFuIGFyZ3VtZW50LiAqLworICAgICAgICAgICAgICBudW1fYXJncy0tOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGRlY29kZXItPnJlYWRfd2lkdGggPSAwOworICAgICAgICAgIHJlcV9hcmdzICAgICAgICAgICAgPSAwOworICAgICAgICB9CisKKyAgICAgICAgcmVxX2FyZ3MgJj0gMHgwMDBGOworICAgICAgICBpZiAoIG51bV9hcmdzIDwgcmVxX2FyZ3MgKQorICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworICAgICAgICBhcmdzICAgICAtPSByZXFfYXJnczsKKyAgICAgICAgbnVtX2FyZ3MgLT0gcmVxX2FyZ3M7CisKKyAgICAgICAgLyogQXQgdGhpcyBwb2ludCwgYGFyZ3MnIHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlICAqLworICAgICAgICAvKiBvcGVyYW5kIGluIGNhc2UgYHJlcV9hcmdzJyBpc24ndCB6ZXJvLiAgT3RoZXJ3aXNlLCB3ZSBoYXZlICovCisgICAgICAgIC8qIHRvIGFkanVzdCBgYXJncycgbWFudWFsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAvKiBOb3RlIHRoYXQgd2Ugb25seSBwb3AgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrIHdoaWNoIHdlICAgICovCisgICAgICAgIC8qIHJlYWxseSBuZWVkIGFuZCBjYW4gZGlnZXN0IHNvIHRoYXQgd2UgY2FuIGNvbnRpbnVlIGluIGNhc2UgKi8KKyAgICAgICAgLyogb2Ygc3VwZXJmbHVvdXMgc3RhY2sgZWxlbWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgeworICAgICAgICBjYXNlIGNmZl9vcF9oc3RlbToKKyAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW06CisgICAgICAgIGNhc2UgY2ZmX29wX2hzdGVtaG06CisgICAgICAgIGNhc2UgY2ZmX29wX3ZzdGVtaG06CisgICAgICAgICAgLyogdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaXMgYWx3YXlzIGV2ZW4gaGVyZSAqLworICAgICAgICAgIEZUX1RSQUNFNCgoCisgICAgICAgICAgICAgIG9wID09IGNmZl9vcF9oc3RlbSAgID8gIiBoc3RlbVxuIiAgIDoKKyAgICAgICAgICAgICggb3AgPT0gY2ZmX29wX3ZzdGVtICAgPyAiIHZzdGVtXG4iICAgOgorICAgICAgICAgICAgKCBvcCA9PSBjZmZfb3BfaHN0ZW1obSA/ICIgaHN0ZW1obVxuIiA6ICIgdnN0ZW1obVxuIiApICkgKSk7CisKKyAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgICBoaW50ZXItPnN0ZW1zKCBoaW50ZXItPmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBvcCA9PSBjZmZfb3BfaHN0ZW0gfHwgb3AgPT0gY2ZmX29wX2hzdGVtaG0gKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9hcmdzIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgLSAoIG51bV9hcmdzICYgfjEgKSApOworCisgICAgICAgICAgZGVjb2Rlci0+bnVtX2hpbnRzICs9IG51bV9hcmdzIC8gMjsKKyAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfaGludG1hc2s6CisgICAgICAgIGNhc2UgY2ZmX29wX2NudHJtYXNrOgorICAgICAgICAgIEZUX1RSQUNFNCgoIG9wID09IGNmZl9vcF9oaW50bWFzayA/ICIgaGludG1hc2siIDogIiBjbnRybWFzayIgKSk7CisKKyAgICAgICAgICAvKiBpbXBsZW1lbnQgdnN0ZW0gd2hlbiBuZWVkZWQgLS0gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIHRoZSBzcGVjaWZpY2F0aW9uIGRvZXNuJ3Qgc2F5IGl0LCBidXQgdGhpcyBhbHNvIHdvcmtzICovCisgICAgICAgICAgLyogd2l0aCB0aGUgJ2NudHJtYXNrJyBvcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggbnVtX2FyZ3MgPiAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgICAgIGhpbnRlci0+c3RlbXMoIGhpbnRlci0+aGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9hcmdzIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyAtICggbnVtX2FyZ3MgJiB+MSApICk7CisKKyAgICAgICAgICAgIGRlY29kZXItPm51bV9oaW50cyArPSBudW1fYXJncyAvIDI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogSW4gYSB2YWxpZCBjaGFyc3RyaW5nIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGJ5dGUgKi8KKyAgICAgICAgICAvKiBhZnRlciBgaGludG1hc2snIG9yIGBjbnRybWFzaycgKGUuZy4sIGZvciBhIGByZXR1cm4nICAqLworICAgICAgICAgIC8qIGluc3RydWN0aW9uKS4gIEFkZGl0aW9uYWxseSwgdGhlcmUgbXVzdCBiZSBzcGFjZSBmb3IgICovCisgICAgICAgICAgLyogYG51bV9oaW50cycgYml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgIGlmICggKCBpcCArICggKCBkZWNvZGVyLT5udW1faGludHMgKyA3ICkgPj4gMyApICkgPj0gbGltaXQgKQorICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisKKyAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBvcCA9PSBjZmZfb3BfaGludG1hc2sgKQorICAgICAgICAgICAgICBoaW50ZXItPmhpbnRtYXNrKCBoaW50ZXItPmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVjb2Rlci0+bnVtX2hpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBoaW50ZXItPmNvdW50ZXIoIGhpbnRlci0+aGludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpZGVjb2Rlci0+bnVtX2hpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwICk7CisgICAgICAgICAgfQorCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50ICBtYXNrYnl0ZTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIChtYXNrYnl0ZXM6IiApKTsKKworICAgICAgICAgICAgZm9yICggbWFza2J5dGUgPSAwOworICAgICAgICAgICAgICAgICAgbWFza2J5dGUgPCAoRlRfVUludCkoICggZGVjb2Rlci0+bnVtX2hpbnRzICsgNyApID4+IDMgKTsKKyAgICAgICAgICAgICAgICAgIG1hc2tieXRlKyssIGlwKysgKQorICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIDB4JTAyWCIsICppcCApKTsKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIilcbiIgKSk7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICBpcCArPSAoIGRlY29kZXItPm51bV9oaW50cyArIDcgKSA+PiAzOworI2VuZGlmCisgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3Jtb3ZldG86CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBybW92ZXRvXG4iICkpOworCisgICAgICAgICAgY2ZmX2J1aWxkZXJfY2xvc2VfY29udG91ciggYnVpbGRlciApOworICAgICAgICAgIGJ1aWxkZXItPnBhdGhfYmVndW4gPSAwOworICAgICAgICAgIHggICAgPSBBRERfTE9ORyggeCwgYXJnc1stMl0gKTsKKyAgICAgICAgICB5ICAgID0gQUREX0xPTkcoIHksIGFyZ3NbLTFdICk7CisgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3Ztb3ZldG86CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB2bW92ZXRvXG4iICkpOworCisgICAgICAgICAgY2ZmX2J1aWxkZXJfY2xvc2VfY29udG91ciggYnVpbGRlciApOworICAgICAgICAgIGJ1aWxkZXItPnBhdGhfYmVndW4gPSAwOworICAgICAgICAgIHkgICAgPSBBRERfTE9ORyggeSwgYXJnc1stMV0gKTsKKyAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfaG1vdmV0bzoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhtb3ZldG9cbiIgKSk7CisKKyAgICAgICAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7CisgICAgICAgICAgYnVpbGRlci0+cGF0aF9iZWd1biA9IDA7CisgICAgICAgICAgeCAgICA9IEFERF9MT05HKCB4LCBhcmdzWy0xXSApOworICAgICAgICAgIGFyZ3MgPSBzdGFjazsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9ybGluZXRvOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmxpbmV0b1xuIiApKTsKKworICAgICAgICAgIGlmICggY2ZmX2J1aWxkZXJfc3RhcnRfcG9pbnQoIGJ1aWxkZXIsIHgsIHkgKSAgfHwKKyAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIG51bV9hcmdzIC8gMiApICkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCAyICkKKyAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgYXJncyAtPSBudW1fYXJncyAmIH4xOworICAgICAgICAgIHdoaWxlICggYXJncyA8IGRlY29kZXItPnRvcCApCisgICAgICAgICAgeworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzBdICk7CisgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbMV0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworICAgICAgICAgICAgYXJncyArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfaGxpbmV0bzoKKyAgICAgICAgY2FzZSBjZmZfb3BfdmxpbmV0bzoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHBoYXNlID0gKCBvcCA9PSBjZmZfb3BfaGxpbmV0byApOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoIG9wID09IGNmZl9vcF9obGluZXRvID8gIiBobGluZXRvXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgdmxpbmV0b1xuIiApKTsKKworICAgICAgICAgICAgaWYgKCBudW1fYXJncyA8IDAgKQorICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworICAgICAgICAgICAgLyogdGhlcmUgZXhpc3Qgc3Vic2V0dGVkIGZvbnRzIChmb3VuZCBpbiBQREZzKSAqLworICAgICAgICAgICAgLyogd2hpY2ggY2FsbCBgaGxpbmV0bycgd2l0aG91dCBhcmd1bWVudHMgICAgICAqLworICAgICAgICAgICAgaWYgKCBudW1fYXJncyA9PSAwICkKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICggY2ZmX2J1aWxkZXJfc3RhcnRfcG9pbnQoIGJ1aWxkZXIsIHgsIHkgKSB8fAorICAgICAgICAgICAgICAgICBjZmZfY2hlY2tfcG9pbnRzKCBidWlsZGVyLCBudW1fYXJncyApICAgICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgICB3aGlsZSAoIGFyZ3MgPCBkZWNvZGVyLT50b3AgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIHBoYXNlICkKKyAgICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHkgPSBBRERfTE9ORyggeSwgYXJnc1swXSApOworCisgICAgICAgICAgICAgIGlmICggY2ZmX2J1aWxkZXJfYWRkX3BvaW50MSggYnVpbGRlciwgeCwgeSApICkKKyAgICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgICAgYXJncysrOworICAgICAgICAgICAgICBwaGFzZSBePSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9ycmN1cnZldG86CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJyY3VydmV0b1xuIiApKTsKKworICAgICAgICAgICAgaWYgKCBudW1fYXJncyA8IDYgKQorICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAtIG51bV9hcmdzICUgNjsKKworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIG5hcmdzIC8gMiApICAgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7CisgICAgICAgICAgICB3aGlsZSAoIGFyZ3MgPCBkZWNvZGVyLT50b3AgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzFdICk7CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1syXSApOworICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbM10gKTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzRdICk7CisgICAgICAgICAgICAgIHkgPSBBRERfTE9ORyggeSwgYXJnc1s1XSApOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgICBhcmdzICs9IDY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3Z2Y3VydmV0bzoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIG5hcmdzOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgdnZjdXJ2ZXRvXG4iICkpOworCisgICAgICAgICAgICBpZiAoIG51bV9hcmdzIDwgNCApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICAvKiBpZiBudW1fYXJncyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLworICAgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgKi8KKworICAgICAgICAgICAgbmFyZ3MgPSBudW1fYXJncyAmIH4yOworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gbmFyZ3M7CisKKyAgICAgICAgICAgIGlmICggbmFyZ3MgJiAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzBdICk7CisgICAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICAgICAgbmFyZ3MtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBjZmZfY2hlY2tfcG9pbnRzKCBidWlsZGVyLCAzICogKCBuYXJncyAvIDQgKSApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICB3aGlsZSAoIGFyZ3MgPCBkZWNvZGVyLT50b3AgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzFdICk7CisgICAgICAgICAgICAgIHkgPSBBRERfTE9ORyggeSwgYXJnc1syXSApOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbM10gKTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CisKKyAgICAgICAgICAgICAgYXJncyArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9oaGN1cnZldG86CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhoY3VydmV0b1xuIiApKTsKKworICAgICAgICAgICAgaWYgKCBudW1fYXJncyA8IDQgKQorICAgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworICAgICAgICAgICAgLyogaWYgbnVtX2FyZ3MgaXNuJ3Qgb2YgdGhlIGZvcm0gNG4gb3IgNG4rMSwgKi8KKyAgICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICovCisKKyAgICAgICAgICAgIG5hcmdzID0gbnVtX2FyZ3MgJiB+MjsKKworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICBhcmdzIC09IG5hcmdzOworICAgICAgICAgICAgaWYgKCBuYXJncyAmIDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgYXJncysrOworICAgICAgICAgICAgICBuYXJncy0tOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDMgKiAoIG5hcmdzIC8gNCApICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIHdoaWxlICggYXJncyA8IGRlY29kZXItPnRvcCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1swXSApOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMV0gKTsKKyAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzJdICk7CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1szXSApOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgICBhcmdzICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3ZoY3VydmV0bzoKKyAgICAgICAgY2FzZSBjZmZfb3BfaHZjdXJ2ZXRvOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgcGhhc2U7CisgICAgICAgICAgICBGVF9JbnQgIG5hcmdzOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoIG9wID09IGNmZl9vcF92aGN1cnZldG8gPyAiIHZoY3VydmV0b1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgaHZjdXJ2ZXRvXG4iICkpOworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCA0ICkKKyAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7CisKKyAgICAgICAgICAgIC8qIGlmIG51bV9hcmdzIGlzbid0IG9mIHRoZSBmb3JtIDhuLCA4bisxLCA4bis0LCBvciA4bis1LCAqLworICAgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIG5hcmdzID0gbnVtX2FyZ3MgJiB+MjsKKworICAgICAgICAgICAgYXJncyAtPSBuYXJnczsKKyAgICAgICAgICAgIGlmICggY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgKCBuYXJncyAvIDQgKSAqIDMgKSApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICBwaGFzZSA9ICggb3AgPT0gY2ZmX29wX2h2Y3VydmV0byApOworCisgICAgICAgICAgICB3aGlsZSAoIG5hcmdzID49IDQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuYXJncyAtPSA0OworICAgICAgICAgICAgICBpZiAoIHBoYXNlICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1swXSApOworICAgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzFdICk7CisgICAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzJdICk7CisgICAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbM10gKTsKKyAgICAgICAgICAgICAgICBpZiAoIG5hcmdzID09IDEgKQorICAgICAgICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzRdICk7CisgICAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzBdICk7CisgICAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMV0gKTsKKyAgICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbMl0gKTsKKyAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1szXSApOworICAgICAgICAgICAgICAgIGlmICggbmFyZ3MgPT0gMSApCisgICAgICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbNF0gKTsKKyAgICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBhcmdzICArPSA0OworICAgICAgICAgICAgICBwaGFzZSBePSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9ybGluZWN1cnZlOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgbnVtX2xpbmVzOworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJsaW5lY3VydmVcbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCA4ICkKKyAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7CisKKyAgICAgICAgICAgIG5hcmdzICAgICA9IG51bV9hcmdzICYgfjE7CisgICAgICAgICAgICBudW1fbGluZXMgPSAoIG5hcmdzIC0gNiApIC8gMjsKKworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICAgfHwKKyAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgbnVtX2xpbmVzICsgMyApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICBhcmdzIC09IG5hcmdzOworCisgICAgICAgICAgICAvKiBmaXJzdCwgYWRkIHRoZSBsaW5lIHNlZ21lbnRzICovCisgICAgICAgICAgICB3aGlsZSAoIG51bV9saW5lcyA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzFdICk7CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICAgIGFyZ3MgKz0gMjsKKyAgICAgICAgICAgICAgbnVtX2xpbmVzLS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHRoZW4gdGhlIGN1cnZlICovCisgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgIHkgPSBBRERfTE9ORyggeSwgYXJnc1sxXSApOworICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1syXSApOworICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzNdICk7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzRdICk7CisgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbNV0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3JjdXJ2ZWxpbmU6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBudW1fY3VydmVzOworICAgICAgICAgICAgRlRfSW50ICBuYXJnczsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJjdXJ2ZWxpbmVcbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggbnVtX2FyZ3MgPCA4ICkKKyAgICAgICAgICAgICAgZ290byBTdGFja19VbmRlcmZsb3c7CisKKyAgICAgICAgICAgIG5hcmdzICAgICAgPSBudW1fYXJncyAtIDI7CisgICAgICAgICAgICBuYXJncyAgICAgID0gbmFyZ3MgLSBuYXJncyAlIDYgKyAyOworICAgICAgICAgICAgbnVtX2N1cnZlcyA9ICggbmFyZ3MgLSAyICkgLyA2OworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgICAgICAgIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIG51bV9jdXJ2ZXMgKiAzICsgMiApICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICBhcmdzIC09IG5hcmdzOworCisgICAgICAgICAgICAvKiBmaXJzdCwgYWRkIHRoZSBjdXJ2ZXMgKi8KKyAgICAgICAgICAgIHdoaWxlICggbnVtX2N1cnZlcyA+IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzFdICk7CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1syXSApOworICAgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbM10gKTsKKyAgICAgICAgICAgICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7CisKKyAgICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzRdICk7CisgICAgICAgICAgICAgIHkgPSBBRERfTE9ORyggeSwgYXJnc1s1XSApOworICAgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgICBhcmdzICs9IDY7CisgICAgICAgICAgICAgIG51bV9jdXJ2ZXMtLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogdGhlbiB0aGUgZmluYWwgbGluZSAqLworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzBdICk7CisgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbMV0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4MToKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9Qb3MgIHN0YXJ0X3k7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBoZmxleDFcbiIgKSk7CisKKyAgICAgICAgICAgIC8qIGFkZGluZyBmaXZlIG1vcmUgcG9pbnRzOiA0IGNvbnRyb2wgcG9pbnRzLCAxIG9uLWN1cnZlIHBvaW50ICovCisgICAgICAgICAgICAvKiAtLSBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBzdGFydCBwb2ludCBpZiBpdCAqLworICAgICAgICAgICAgLyogbmVlZHMgdG8gYmUgYWRkZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggY2ZmX2J1aWxkZXJfc3RhcnRfcG9pbnQoIGJ1aWxkZXIsIHgsIHkgKSB8fAorICAgICAgICAgICAgICAgICBjZmZfY2hlY2tfcG9pbnRzKCBidWlsZGVyLCA2ICkgICAgICAgICAgICkKKyAgICAgICAgICAgICAgZ290byBGYWlsOworCisgICAgICAgICAgICAvKiByZWNvcmQgdGhlIHN0YXJ0aW5nIHBvaW50J3MgeSBwb3NpdGlvbiBmb3IgbGF0ZXIgdXNlICovCisgICAgICAgICAgICBzdGFydF95ID0geTsKKworICAgICAgICAgICAgLyogZmlyc3QgY29udHJvbCBwb2ludCAqLworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzBdICk7CisgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbMV0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAvKiBzZWNvbmQgY29udHJvbCBwb2ludCAqLworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzJdICk7CisgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbM10gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAvKiBqb2luIHBvaW50OyBvbiBjdXJ2ZSwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBsYXN0ICovCisgICAgICAgICAgICAvKiBjb250cm9sIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbNF0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICAvKiB0aGlyZCBjb250cm9sIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIGpvaW4gKi8KKyAgICAgICAgICAgIC8qIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzVdICk7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgLyogZm91cnRoIGNvbnRyb2wgcG9pbnQgKi8KKyAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1s2XSApOworICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzddICk7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgLyogZW5kaW5nIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0ICAgKi8KKyAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1s4XSApOworICAgICAgICAgICAgeSA9IHN0YXJ0X3k7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4OgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1BvcyAgc3RhcnRfeTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4XG4iICkpOworCisgICAgICAgICAgICAvKiBhZGRpbmcgc2l4IG1vcmUgcG9pbnRzOyA0IGNvbnRyb2wgcG9pbnRzLCAyIG9uLWN1cnZlIHBvaW50cyAqLworICAgICAgICAgICAgaWYgKCBjZmZfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApIHx8CisgICAgICAgICAgICAgICAgIGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDYgKSAgICAgICAgICAgKQorICAgICAgICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgICAgICAgIC8qIHJlY29yZCB0aGUgc3RhcnRpbmcgcG9pbnQncyB5LXBvc2l0aW9uIGZvciBsYXRlciB1c2UgKi8KKyAgICAgICAgICAgIHN0YXJ0X3kgPSB5OworCisgICAgICAgICAgICAvKiBmaXJzdCBjb250cm9sIHBvaW50ICovCisgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAvKiBzZWNvbmQgY29udHJvbCBwb2ludCAqLworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzFdICk7CisgICAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIGFyZ3NbMl0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOworCisgICAgICAgICAgICAvKiBqb2luIHBvaW50OyBvbiBjdXJ2ZSwgd2l0aCB5LXZhbHVlIHRoZSBzYW1lIGFzIHRoZSBsYXN0ICovCisgICAgICAgICAgICAvKiBjb250cm9sIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbM10gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICAvKiB0aGlyZCBjb250cm9sIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIGpvaW4gKi8KKyAgICAgICAgICAgIC8qIHBvaW50J3MgeS12YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzRdICk7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgLyogZm91cnRoIGNvbnRyb2wgcG9pbnQgKi8KKyAgICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgYXJnc1s1XSApOworICAgICAgICAgICAgeSA9IHN0YXJ0X3k7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKKworICAgICAgICAgICAgLyogZW5kaW5nIHBvaW50LCB3aXRoIHktdmFsdWUgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0IHBvaW50J3MgKi8KKyAgICAgICAgICAgIC8qIHktdmFsdWUgLS0gd2UgZG9uJ3QgYWRkIHRoaXMgcG9pbnQsIHRob3VnaCAgICAgICAgICAgICAgICovCisgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbNl0gKTsKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgY2FzZSBjZmZfb3BfZmxleDE6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfUG9zICAgICBzdGFydF94LCBzdGFydF95OyAvKiByZWNvcmQgc3RhcnQgeCwgeSB2YWx1ZXMgZm9yICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsdGVyIHVzZSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIEZUX0ZpeGVkICAgZHggPSAwLCBkeSA9IDA7ICAgLyogdXNlZCBpbiBob3Jpem9udGFsL3ZlcnRpY2FsICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbGdvcml0aG0gYmVsb3cgICAgICAgICAgICAgICovCisgICAgICAgICAgICBGVF9JbnQgICAgIGhvcml6b250YWwsIGNvdW50OworICAgICAgICAgICAgRlRfRml4ZWQqICB0ZW1wOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZmxleDFcbiIgKSk7CisKKyAgICAgICAgICAgIC8qIGFkZGluZyBzaXggbW9yZSBwb2ludHM7IDQgY29udHJvbCBwb2ludHMsIDIgb24tY3VydmUgcG9pbnRzICovCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgfHwKKyAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgNiApICAgICAgICAgICApCisgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgICAgLyogcmVjb3JkIHRoZSBzdGFydGluZyBwb2ludCdzIHgsIHkgcG9zaXRpb24gZm9yIGxhdGVyIHVzZSAqLworICAgICAgICAgICAgc3RhcnRfeCA9IHg7CisgICAgICAgICAgICBzdGFydF95ID0geTsKKworICAgICAgICAgICAgLyogWFhYOiBmaWd1cmUgb3V0IHdoZXRoZXIgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBhIGhvcml6b250YWwgKi8KKyAgICAgICAgICAgIC8qICAgICAgb3IgdmVydGljYWwgZmxleDsgdGhlIFR5cGUgMiBzcGVjaWZpY2F0aW9uIGlzIHZhZ3VlLi4uICovCisKKyAgICAgICAgICAgIHRlbXAgPSBhcmdzOworCisgICAgICAgICAgICAvKiBncmFiIHVwIHRvIHRoZSBsYXN0IGFyZ3VtZW50ICovCisgICAgICAgICAgICBmb3IgKCBjb3VudCA9IDU7IGNvdW50ID4gMDsgY291bnQtLSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGR4ICAgID0gQUREX0xPTkcoIGR4LCB0ZW1wWzBdICk7CisgICAgICAgICAgICAgIGR5ICAgID0gQUREX0xPTkcoIGR5LCB0ZW1wWzFdICk7CisgICAgICAgICAgICAgIHRlbXAgKz0gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBkeCA8IDAgKQorICAgICAgICAgICAgICBkeCA9IC1keDsKKyAgICAgICAgICAgIGlmICggZHkgPCAwICkKKyAgICAgICAgICAgICAgZHkgPSAtZHk7CisKKyAgICAgICAgICAgIC8qIHN0cmFuZ2UgdGVzdCwgYnV0IGhlcmUgaXQgaXMuLi4gKi8KKyAgICAgICAgICAgIGhvcml6b250YWwgPSAoIGR4ID4gZHkgKTsKKworICAgICAgICAgICAgZm9yICggY291bnQgPSA1OyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzFdICk7CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQm9vbCkoIGNvdW50ID09IDMgKSApOworICAgICAgICAgICAgICBhcmdzICs9IDI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGlzIGxhc3Qgb3BlcmFuZCBhbiB4LSBvciB5LWRlbHRhPyAqLworICAgICAgICAgICAgaWYgKCBob3Jpem9udGFsICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBhcmdzWzBdICk7CisgICAgICAgICAgICAgIHkgPSBzdGFydF95OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ID0gc3RhcnRfeDsKKyAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzBdICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgICAgICAgICBhcmdzID0gc3RhY2s7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorCisgICAgICAgIGNhc2UgY2ZmX29wX2ZsZXg6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVUludCAgY291bnQ7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBmbGV4XG4iICkpOworCisgICAgICAgICAgICBpZiAoIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLCB4LCB5ICkgfHwKKyAgICAgICAgICAgICAgICAgY2ZmX2NoZWNrX3BvaW50cyggYnVpbGRlciwgNiApICAgICAgICAgICApCisgICAgICAgICAgICAgIGdvdG8gRmFpbDsKKworICAgICAgICAgICAgZm9yICggY291bnQgPSA2OyBjb3VudCA+IDA7IGNvdW50LS0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGFyZ3NbMF0gKTsKKyAgICAgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCBhcmdzWzFdICk7CisgICAgICAgICAgICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQm9vbCkoIGNvdW50ID09IDQgfHwgY291bnQgPT0gMSApICk7CisgICAgICAgICAgICAgIGFyZ3MgKz0gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9zZWFjOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgc2VhY1xuIiApKTsKKworICAgICAgICAgIGVycm9yID0gY2ZmX29wZXJhdG9yX3NlYWMoIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KSggYXJnc1szXSA+PiAxNiApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpKCBhcmdzWzRdID4+IDE2ICkgKTsKKworICAgICAgICAgIC8qIGFkZCBjdXJyZW50IG91dGxpbmUgdG8gdGhlIGdseXBoIHNsb3QgKi8KKyAgICAgICAgICBGVF9HbHlwaExvYWRlcl9BZGQoIGJ1aWxkZXItPmxvYWRlciApOworCisgICAgICAgICAgLyogcmV0dXJuIG5vdyEgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICBjYXNlIGNmZl9vcF9lbmRjaGFyOgorICAgICAgICAgIC8qIGluIGRpY3Rpb25hcmllcywgYGVuZGNoYXInIHNpbXBseSBpbmRpY2F0ZXMgZW5kIG9mIGRhdGEgKi8KKyAgICAgICAgICBpZiAoIGluX2RpY3QgKQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlbmRjaGFyXG4iICkpOworCisgICAgICAgICAgLyogV2UgYXJlIGdvaW5nIHRvIGVtdWxhdGUgdGhlIHNlYWMgb3BlcmF0b3IuICovCisgICAgICAgICAgaWYgKCBudW1fYXJncyA+PSA0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBTYXZlIGdseXBoIHdpZHRoIHNvIHRoYXQgdGhlIHN1YmdseXBocyBkb24ndCBvdmVyd3JpdGUgaXQuICovCisgICAgICAgICAgICBGVF9Qb3MgIGdseXBoX3dpZHRoID0gZGVjb2Rlci0+Z2x5cGhfd2lkdGg7CisKKworICAgICAgICAgICAgZXJyb3IgPSBjZmZfb3BlcmF0b3Jfc2VhYyggZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBMLCBhcmdzWy00XSwgYXJnc1stM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfSW50KSggYXJnc1stMl0gPj4gMTYgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpKCBhcmdzWy0xXSA+PiAxNiApICk7CisKKyAgICAgICAgICAgIGRlY29kZXItPmdseXBoX3dpZHRoID0gZ2x5cGhfd2lkdGg7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBidWlsZGVyICk7CisKKyAgICAgICAgICAgIC8qIGNsb3NlIGhpbnRzIHJlY29yZGluZyBzZXNzaW9uICovCisgICAgICAgICAgICBpZiAoIGhpbnRlciApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICggaGludGVyLT5jbG9zZSggaGludGVyLT5oaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClidWlsZGVyLT5jdXJyZW50LT5uX3BvaW50cyApICkKKyAgICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKworICAgICAgICAgICAgICAvKiBhcHBseSBoaW50cyB0byB0aGUgbG9hZGVkIGdseXBoIG91dGxpbmUgbm93ICovCisgICAgICAgICAgICAgIGVycm9yID0gaGludGVyLT5hcHBseSggaGludGVyLT5oaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5jdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU0hfR2xvYmFscylidWlsZGVyLT5oaW50c19nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmhpbnRfbW9kZSApOworICAgICAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgICAgICBnb3RvIEZhaWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGFkZCBjdXJyZW50IG91dGxpbmUgdG8gdGhlIGdseXBoIHNsb3QgKi8KKyAgICAgICAgICAgIEZUX0dseXBoTG9hZGVyX0FkZCggYnVpbGRlci0+bG9hZGVyICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogcmV0dXJuIG5vdyEgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiXG4iICkpOworICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICBjYXNlIGNmZl9vcF9hYnM6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhYnNcbiIgKSk7CisKKyAgICAgICAgICBpZiAoIGFyZ3NbMF0gPCAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIGFyZ3NbMF0gPT0gRlRfTE9OR19NSU4gKQorICAgICAgICAgICAgICBhcmdzWzBdID0gRlRfTE9OR19NQVg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGFyZ3NbMF0gPSAtYXJnc1swXTsKKyAgICAgICAgICB9CisgICAgICAgICAgYXJncysrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2FkZDoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFkZFxuIiApKTsKKworICAgICAgICAgIGFyZ3NbMF0gPSBBRERfTE9ORyggYXJnc1swXSwgYXJnc1sxXSApOworICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9zdWI6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzdWJcbiIgKSk7CisKKyAgICAgICAgICBhcmdzWzBdID0gU1VCX0xPTkcoIGFyZ3NbMF0sIGFyZ3NbMV0gKTsKKyAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfZGl2OgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgZGl2XG4iICkpOworCisgICAgICAgICAgYXJnc1swXSA9IEZUX0RpdkZpeCggYXJnc1swXSwgYXJnc1sxXSApOworICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9uZWc6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBuZWdcbiIgKSk7CisKKyAgICAgICAgICBpZiAoIGFyZ3NbMF0gPT0gRlRfTE9OR19NSU4gKQorICAgICAgICAgICAgYXJnc1swXSA9IEZUX0xPTkdfTUFYOworICAgICAgICAgIGFyZ3NbMF0gPSAtYXJnc1swXTsKKyAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfcmFuZG9tOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmFuZG9tXG4iICkpOworCisgICAgICAgICAgLyogb25seSB1c2UgdGhlIGxvd2VyIDE2IGJpdHMgb2YgYHJhbmRvbScgICovCisgICAgICAgICAgLyogdG8gZ2VuZXJhdGUgYSBudW1iZXIgaW4gdGhlIHJhbmdlICgwOzFdICovCisgICAgICAgICAgYXJnc1swXSA9IChGVF9GaXhlZCkKKyAgICAgICAgICAgICAgICAgICAgICAoICggZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gJiAweEZGRkYgKSArIDEgKTsKKyAgICAgICAgICBhcmdzKys7CisKKyAgICAgICAgICBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnJhbmRvbSA9CisgICAgICAgICAgICBjZmZfcmFuZG9tKCBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnJhbmRvbSApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX211bDoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIG11bFxuIiApKTsKKworICAgICAgICAgIGFyZ3NbMF0gPSBGVF9NdWxGaXgoIGFyZ3NbMF0sIGFyZ3NbMV0gKTsKKyAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3Bfc3FydDoKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNxcnRcbiIgKSk7CisKKyAgICAgICAgICBpZiAoIGFyZ3NbMF0gPiAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9GaXhlZCAgcm9vdCA9IGFyZ3NbMF07CisgICAgICAgICAgICBGVF9GaXhlZCAgbmV3X3Jvb3Q7CisKKworICAgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbmV3X3Jvb3QgPSAoIHJvb3QgKyBGVF9EaXZGaXgoIGFyZ3NbMF0sIHJvb3QgKSArIDEgKSA+PiAxOworICAgICAgICAgICAgICBpZiAoIG5ld19yb290ID09IHJvb3QgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICByb290ID0gbmV3X3Jvb3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzWzBdID0gbmV3X3Jvb3Q7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3NbMF0gPSAwOworICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9kcm9wOgorICAgICAgICAgIC8qIG5vdGhpbmcgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRyb3BcbiIgKSk7CisKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9leGNoOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICB0bXA7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBleGNoXG4iICkpOworCisgICAgICAgICAgICB0bXAgICAgID0gYXJnc1swXTsKKyAgICAgICAgICAgIGFyZ3NbMF0gPSBhcmdzWzFdOworICAgICAgICAgICAgYXJnc1sxXSA9IHRtcDsKKyAgICAgICAgICAgIGFyZ3MgICArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9pbmRleDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIGlkeCA9IChGVF9JbnQpKCBhcmdzWzBdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpbmRleFxuIiApKTsKKworICAgICAgICAgICAgaWYgKCBpZHggPCAwICkKKyAgICAgICAgICAgICAgaWR4ID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBpZHggPiBudW1fYXJncyAtIDIgKQorICAgICAgICAgICAgICBpZHggPSBudW1fYXJncyAtIDI7CisgICAgICAgICAgICBhcmdzWzBdID0gYXJnc1stKCBpZHggKyAxICldOworICAgICAgICAgICAgYXJncysrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9yb2xsOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ludCAgY291bnQgPSAoRlRfSW50KSggYXJnc1swXSA+PiAxNiApOworICAgICAgICAgICAgRlRfSW50ICBpZHggICA9IChGVF9JbnQpKCBhcmdzWzFdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiByb2xsXG4iICkpOworCisgICAgICAgICAgICBpZiAoIGNvdW50IDw9IDAgKQorICAgICAgICAgICAgICBjb3VudCA9IDE7CisKKyAgICAgICAgICAgIGFyZ3MgLT0gY291bnQ7CisgICAgICAgICAgICBpZiAoIGFyZ3MgPCBzdGFjayApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICBpZiAoIGlkeCA+PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgd2hpbGUgKCBpZHggPiAwICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZUX0ZpeGVkICB0bXAgPSBhcmdzW2NvdW50IC0gMV07CisgICAgICAgICAgICAgICAgRlRfSW50ICAgIGk7CisKKworICAgICAgICAgICAgICAgIGZvciAoIGkgPSBjb3VudCAtIDI7IGkgPj0gMDsgaS0tICkKKyAgICAgICAgICAgICAgICAgIGFyZ3NbaSArIDFdID0gYXJnc1tpXTsKKyAgICAgICAgICAgICAgICBhcmdzWzBdID0gdG1wOworICAgICAgICAgICAgICAgIGlkeC0tOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHdoaWxlICggaWR4IDwgMCApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBGVF9GaXhlZCAgdG1wID0gYXJnc1swXTsKKyAgICAgICAgICAgICAgICBGVF9JbnQgICAgaTsKKworCisgICAgICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudCAtIDE7IGkrKyApCisgICAgICAgICAgICAgICAgICBhcmdzW2ldID0gYXJnc1tpICsgMV07CisgICAgICAgICAgICAgICAgYXJnc1tjb3VudCAtIDFdID0gdG1wOworICAgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmdzICs9IGNvdW50OworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9kdXA6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkdXBcbiIgKSk7CisKKyAgICAgICAgICBhcmdzWzFdID0gYXJnc1swXTsKKyAgICAgICAgICBhcmdzICAgKz0gMjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9wdXQ6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRml4ZWQgIHZhbCA9IGFyZ3NbMF07CisgICAgICAgICAgICBGVF9JbnQgICAgaWR4ID0gKEZUX0ludCkoIGFyZ3NbMV0gPj4gMTYgKTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHB1dFxuIiApKTsKKworICAgICAgICAgICAgLyogdGhlIFR5cGUyIHNwZWNpZmljYXRpb24gYmVmb3JlIHZlcnNpb24gMTYtTWFyY2gtMjAwMCAqLworICAgICAgICAgICAgLyogZGlkbid0IGdpdmUgYSBoYXJkLWNvZGVkIHNpemUgbGltaXQgb2YgdGhlIHRlbXBvcmFyeSAqLworICAgICAgICAgICAgLyogc3RvcmFnZSBhcnJheTsgaW5zdGVhZCwgYW4gYXJndW1lbnQgb2YgdGhlICAgICAgICAgICAqLworICAgICAgICAgICAgLyogYE11bHRpcGxlTWFzdGVyJyBvcGVyYXRvciBzZXQgdGhlIHNpemUgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBpZHggPj0gMCAmJiBpZHggPCBDRkZfTUFYX1RSQU5TX0VMRU1FTlRTICkKKyAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRjaGFyW2lkeF0gPSB2YWw7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2dldDoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgICAgaWR4ID0gKEZUX0ludCkoIGFyZ3NbMF0gPj4gMTYgKTsKKyAgICAgICAgICAgIEZUX0ZpeGVkICB2YWwgPSAwOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZ2V0XG4iICkpOworCisgICAgICAgICAgICBpZiAoIGlkeCA+PSAwICYmIGlkeCA8IENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgKQorICAgICAgICAgICAgICB2YWwgPSBkZWNvZGVyLT5idWlsZGNoYXJbaWR4XTsKKworICAgICAgICAgICAgYXJnc1swXSA9IHZhbDsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3Bfc3RvcmU6CisgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBUeXBlMiBzcGVjaWZpY2F0aW9uICovCisgICAgICAgICAgLyogaW4gdmVyc2lvbiAxNi1NYXJjaC0yMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAvKiBzaW5jZSB3ZSBjdXJyZW50bHkgZG9uJ3QgaGFuZGxlIGludGVycG9sYXRpb24gb2YgbXVsdGlwbGUgKi8KKyAgICAgICAgICAvKiBtYXN0ZXIgZm9udHMsIHRoaXMgaXMgYSBuby1vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHN0b3JlXG4iICkpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2xvYWQ6CisgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBUeXBlMiBzcGVjaWZpY2F0aW9uICovCisgICAgICAgICAgLyogaW4gdmVyc2lvbiAxNi1NYXJjaC0yMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICByZWdfaWR4ID0gKEZUX0ludClhcmdzWzBdOworICAgICAgICAgICAgRlRfSW50ICBpZHggICAgID0gKEZUX0ludClhcmdzWzFdOworICAgICAgICAgICAgRlRfSW50ICBjb3VudCAgID0gKEZUX0ludClhcmdzWzJdOworCisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbG9hZFxuIiApKTsKKworICAgICAgICAgICAgLyogc2luY2Ugd2UgY3VycmVudGx5IGRvbid0IGhhbmRsZSBpbnRlcnBvbGF0aW9uIG9mIG11bHRpcGxlICovCisgICAgICAgICAgICAvKiBtYXN0ZXIgZm9udHMsIHdlIHN0b3JlIGEgdmVjdG9yIFsxIDAgMCAuLi5dIGluIHRoZSAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBzdG9yYWdlIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdGhlIFJlZ2lzdHJ5IGluZGV4ICAqLworICAgICAgICAgICAgaWYgKCByZWdfaWR4ID49IDAgJiYgcmVnX2lkeCA8PSAyICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgIGlkeCA+PSAwICYmIGlkeCA8IENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgJiYKKyAgICAgICAgICAgICAgICAgY291bnQgPj0gMCAmJiBjb3VudCA8PSBudW1fYXhlcyAgICAgICAgICApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0ludCAgZW5kLCBpOworCisKKyAgICAgICAgICAgICAgZW5kID0gRlRfTUlOKCBpZHggKyBjb3VudCwgQ0ZGX01BWF9UUkFOU19FTEVNRU5UUyApOworCisgICAgICAgICAgICAgIGlmICggaWR4IDwgZW5kICkKKyAgICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGNoYXJbaWR4XSA9IDEgPDwgMTY7CisKKyAgICAgICAgICAgICAgZm9yICggaSA9IGlkeCArIDE7IGkgPCBlbmQ7IGkrKyApCisgICAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRjaGFyW2ldID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfYmxlbmQ6CisgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBUeXBlMiBzcGVjaWZpY2F0aW9uICovCisgICAgICAgICAgLyogaW4gdmVyc2lvbiAxNi1NYXJjaC0yMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBudW1fcmVzdWx0cyA9IChGVF9JbnQpKCBhcmdzWzBdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBibGVuZFxuIiApKTsKKworICAgICAgICAgICAgaWYgKCBudW1fcmVzdWx0cyA8IDAgKQorICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKworICAgICAgICAgICAgaWYgKCBudW1fcmVzdWx0cyAqIChGVF9JbnQpbnVtX2Rlc2lnbnMgPiBudW1fYXJncyApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICAvKiBzaW5jZSB3ZSBjdXJyZW50bHkgZG9uJ3QgaGFuZGxlIGludGVycG9sYXRpb24gb2YgbXVsdGlwbGUgKi8KKyAgICAgICAgICAgIC8qIG1hc3RlciBmb250cywgcmV0dXJuIHRoZSBgbnVtX3Jlc3VsdHMnIHZhbHVlcyBvZiB0aGUgICAgICAqLworICAgICAgICAgICAgLyogZmlyc3QgbWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBhcmdzICAgICAtPSBudW1fcmVzdWx0cyAqICggbnVtX2Rlc2lnbnMgLSAxICk7CisgICAgICAgICAgICBudW1fYXJncyAtPSBudW1fcmVzdWx0cyAqICggbnVtX2Rlc2lnbnMgLSAxICk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2RvdHNlY3Rpb246CisgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBpcyBkZXByZWNhdGVkIGFuZCBpZ25vcmVkIGJ5IHRoZSBwYXJzZXIgKi8KKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRvdHNlY3Rpb25cbiIgKSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfY2xvc2VwYXRoOgorICAgICAgICAgIC8qIHRoaXMgaXMgYW4gaW52YWxpZCBUeXBlIDIgb3BlcmF0b3I7IGhvd2V2ZXIsIHRoZXJlICAgICAgICAqLworICAgICAgICAgIC8qIGV4aXN0IGZvbnRzIHdoaWNoIGFyZSBpbmNvcnJlY3RseSBjb252ZXJ0ZWQgZnJvbSBwcm9iYWJseSAqLworICAgICAgICAgIC8qIFR5cGUgMSB0byBDRkYsIGFuZCBzb21lIHBhcnNlcnMgc2VlbSB0byBhY2NlcHQgaXQgICAgICAgICAqLworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjbG9zZXBhdGggKGludmFsaWQgb3ApXG4iICkpOworCisgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2hzYnc6CisgICAgICAgICAgLyogdGhpcyBpcyBhbiBpbnZhbGlkIFR5cGUgMiBvcGVyYXRvcjsgaG93ZXZlciwgdGhlcmUgICAgICAgICovCisgICAgICAgICAgLyogZXhpc3QgZm9udHMgd2hpY2ggYXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCBmcm9tIHByb2JhYmx5ICovCisgICAgICAgICAgLyogVHlwZSAxIHRvIENGRiwgYW5kIHNvbWUgcGFyc2VycyBzZWVtIHRvIGFjY2VwdCBpdCAgICAgICAgICovCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhzYncgKGludmFsaWQgb3ApXG4iICkpOworCisgICAgICAgICAgZGVjb2Rlci0+Z2x5cGhfd2lkdGggPQorICAgICAgICAgICAgQUREX0xPTkcoIGRlY29kZXItPm5vbWluYWxfd2lkdGgsICggYXJnc1sxXSA+PiAxNiApICk7CisKKyAgICAgICAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy54ID0gYXJnc1swXTsKKyAgICAgICAgICBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy55ID0gMDsKKworICAgICAgICAgIHggICAgPSBBRERfTE9ORyggZGVjb2Rlci0+YnVpbGRlci5wb3NfeCwgYXJnc1swXSApOworICAgICAgICAgIHkgICAgPSBkZWNvZGVyLT5idWlsZGVyLnBvc195OworICAgICAgICAgIGFyZ3MgPSBzdGFjazsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9zYnc6CisgICAgICAgICAgLyogdGhpcyBpcyBhbiBpbnZhbGlkIFR5cGUgMiBvcGVyYXRvcjsgaG93ZXZlciwgdGhlcmUgICAgICAgICovCisgICAgICAgICAgLyogZXhpc3QgZm9udHMgd2hpY2ggYXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCBmcm9tIHByb2JhYmx5ICovCisgICAgICAgICAgLyogVHlwZSAxIHRvIENGRiwgYW5kIHNvbWUgcGFyc2VycyBzZWVtIHRvIGFjY2VwdCBpdCAgICAgICAgICovCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNidyAoaW52YWxpZCBvcClcbiIgKSk7CisKKyAgICAgICAgICBkZWNvZGVyLT5nbHlwaF93aWR0aCA9CisgICAgICAgICAgICBBRERfTE9ORyggZGVjb2Rlci0+bm9taW5hbF93aWR0aCwgKCBhcmdzWzJdID4+IDE2ICkgKTsKKworICAgICAgICAgIGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLnggPSBhcmdzWzBdOworICAgICAgICAgIGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLnkgPSBhcmdzWzFdOworCisgICAgICAgICAgeCAgICA9IEFERF9MT05HKCBkZWNvZGVyLT5idWlsZGVyLnBvc194LCBhcmdzWzBdICk7CisgICAgICAgICAgeSAgICA9IEFERF9MT05HKCBkZWNvZGVyLT5idWlsZGVyLnBvc195LCBhcmdzWzFdICk7CisgICAgICAgICAgYXJncyA9IHN0YWNrOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX3NldGN1cnJlbnRwb2ludDoKKyAgICAgICAgICAvKiB0aGlzIGlzIGFuIGludmFsaWQgVHlwZSAyIG9wZXJhdG9yOyBob3dldmVyLCB0aGVyZSAgICAgICAgKi8KKyAgICAgICAgICAvKiBleGlzdCBmb250cyB3aGljaCBhcmUgaW5jb3JyZWN0bHkgY29udmVydGVkIGZyb20gcHJvYmFibHkgKi8KKyAgICAgICAgICAvKiBUeXBlIDEgdG8gQ0ZGLCBhbmQgc29tZSBwYXJzZXJzIHNlZW0gdG8gYWNjZXB0IGl0ICAgICAgICAgKi8KKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgc2V0Y3VycmVudHBvaW50IChpbnZhbGlkIG9wKVxuIiApKTsKKworICAgICAgICAgIHggICAgPSBBRERfTE9ORyggZGVjb2Rlci0+YnVpbGRlci5wb3NfeCwgYXJnc1swXSApOworICAgICAgICAgIHkgICAgPSBBRERfTE9ORyggZGVjb2Rlci0+YnVpbGRlci5wb3NfeSwgYXJnc1sxXSApOworICAgICAgICAgIGFyZ3MgPSBzdGFjazsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9jYWxsb3RoZXJzdWJyOgorICAgICAgICAgIC8qIHRoaXMgaXMgYW4gaW52YWxpZCBUeXBlIDIgb3BlcmF0b3I7IGhvd2V2ZXIsIHRoZXJlICAgICAgICAqLworICAgICAgICAgIC8qIGV4aXN0IGZvbnRzIHdoaWNoIGFyZSBpbmNvcnJlY3RseSBjb252ZXJ0ZWQgZnJvbSBwcm9iYWJseSAqLworICAgICAgICAgIC8qIFR5cGUgMSB0byBDRkYsIGFuZCBzb21lIHBhcnNlcnMgc2VlbSB0byBhY2NlcHQgaXQgICAgICAgICAqLworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsb3RoZXJzdWJyIChpbnZhbGlkIG9wKVxuIiApKTsKKworICAgICAgICAgIC8qIHN1YnNlcXVlbnQgYHBvcCcgb3BlcmFuZHMgc2hvdWxkIGFkZCB0aGUgYXJndW1lbnRzLCAgICAgICAqLworICAgICAgICAgIC8qIHRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIGRlc2NyaWJlZCBmb3IgYHVua25vd24nIG90aGVyICAqLworICAgICAgICAgIC8qIHN1YnJvdXRpbmVzIGluIHRoZSBUeXBlMSBzcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIFhYWCBGaXggcmV0dXJuIGFyZ3VtZW50cyAoc2VlIGRpc2N1c3Npb24gYmVsb3cpLiAgICAgICAgICAqLworICAgICAgICAgIGFyZ3MgLT0gMiArICggYXJnc1stMl0gPj4gMTYgKTsKKyAgICAgICAgICBpZiAoIGFyZ3MgPCBzdGFjayApCisgICAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9wb3A6CisgICAgICAgICAgLyogdGhpcyBpcyBhbiBpbnZhbGlkIFR5cGUgMiBvcGVyYXRvcjsgaG93ZXZlciwgdGhlcmUgICAgICAgICovCisgICAgICAgICAgLyogZXhpc3QgZm9udHMgd2hpY2ggYXJlIGluY29ycmVjdGx5IGNvbnZlcnRlZCBmcm9tIHByb2JhYmx5ICovCisgICAgICAgICAgLyogVHlwZSAxIHRvIENGRiwgYW5kIHNvbWUgcGFyc2VycyBzZWVtIHRvIGFjY2VwdCBpdCAgICAgICAgICovCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHBvcCAoaW52YWxpZCBvcClcbiIgKSk7CisKKyAgICAgICAgICAvKiBYWFggSW5jcmVhc2luZyBgYXJncycgaXMgd3Jvbmc6IEFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgKi8KKyAgICAgICAgICAvKiBgcG9wJ3Mgd2UgZ2V0IGEgc3RhY2sgb3ZlcmZsb3cuICBSZWFzb24gZm9yIGRvaW5nIGl0IGlzICAgKi8KKyAgICAgICAgICAvKiBjb2RlIGxpa2UgdGhpcyAoYWN0dWFsbHkgZm91bmQgaW4gYSBDRkYgZm9udCk6ICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIDE3IDEgMyBjYWxsb3RoZXJzdWJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIHBvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgIGNhbGxzdWJyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBTaW5jZSB3ZSBoYW5kbGUgYGNhbGxvdGhlcnN1YnInIGFzIGEgbm8tb3AsIGFuZCAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBgY2FsbHN1YnInIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgYHBvcCcgY2FuJ3QgYmUgYSAgKi8KKyAgICAgICAgICAvKiBuby1vcCB0b28gYXMgaXQgYmFzaWNhbGx5IHNob3VsZCBiZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiBUaGUgcmlnaHQgc29sdXRpb24gd291bGQgYmUgdG8gcHJvdmlkZSByZWFsIHN1cHBvcnQgZm9yICAgKi8KKyAgICAgICAgICAvKiBgY2FsbG90aGVyc3VicicgYXMgZG9uZSBpbiBgdDFkZWNvZGUuYycsIGhvd2V2ZXIsIGdpdmVuICAgKi8KKyAgICAgICAgICAvKiB0aGUgZmFjdCB0aGF0IENGRiBmb250cyB3aXRoIGBwb3AnIGFyZSBpbnZhbGlkLCBpdCBpcyAgICAgKi8KKyAgICAgICAgICAvKiBxdWVzdGlvbmFibGUgd2hldGhlciBpdCBpcyB3b3J0aCB0aGUgdGltZS4gICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfYW5kOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gKCBhcmdzWzBdICYmIGFyZ3NbMV0gKTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFuZFxuIiApKTsKKworICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7CisgICAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX29yOgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gKCBhcmdzWzBdIHx8IGFyZ3NbMV0gKTsKKworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG9yXG4iICkpOworCisgICAgICAgICAgICBhcmdzWzBdID0gY29uZCA/IDB4MTAwMDBMIDogMDsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3Bfbm90OgorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0ZpeGVkICBjb25kID0gIWFyZ3NbMF07CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBub3RcbiIgKSk7CisKKyAgICAgICAgICAgIGFyZ3NbMF0gPSBjb25kID8gMHgxMDAwMEwgOiAwOworICAgICAgICAgICAgYXJncysrOworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIGNmZl9vcF9lcToKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9GaXhlZCAgY29uZCA9ICggYXJnc1swXSA9PSBhcmdzWzFdICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKKworICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7CisgICAgICAgICAgICBhcmdzKys7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2lmZWxzZToKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9GaXhlZCAgY29uZCA9ICggYXJnc1syXSA8PSBhcmdzWzNdICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpZmVsc2VcbiIgKSk7CisKKyAgICAgICAgICAgIGlmICggIWNvbmQgKQorICAgICAgICAgICAgICBhcmdzWzBdID0gYXJnc1sxXTsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfY2FsbHN1YnI6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVUludCAgaWR4ID0gKEZUX1VJbnQpKCAoIGFyZ3NbMF0gPj4gMTYgKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmxvY2Fsc19iaWFzICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsc3ViciAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICB6b25lIC0gZGVjb2Rlci0+em9uZXMgKyAxICkpOworCisgICAgICAgICAgICBpZiAoIGlkeCA+PSBkZWNvZGVyLT5udW1fbG9jYWxzICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBsb2NhbCBzdWJyIGluZGV4XG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gQ0ZGX01BWF9TVUJSU19DQUxMUyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IG5lc3RlZCBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IGlwOyAgLyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKworICAgICAgICAgICAgem9uZSsrOworICAgICAgICAgICAgem9uZS0+YmFzZSAgID0gZGVjb2Rlci0+bG9jYWxzW2lkeF07CisgICAgICAgICAgICB6b25lLT5saW1pdCAgPSBkZWNvZGVyLT5sb2NhbHNbaWR4ICsgMV07CisgICAgICAgICAgICB6b25lLT5jdXJzb3IgPSB6b25lLT5iYXNlOworCisgICAgICAgICAgICBpZiAoICF6b25lLT5iYXNlIHx8IHpvbmUtPmxpbWl0ID09IHpvbmUtPmJhc2UgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZva2luZyBlbXB0eSBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlY29kZXItPnpvbmUgPSB6b25lOworICAgICAgICAgICAgaXAgICAgICAgICAgICA9IHpvbmUtPmJhc2U7CisgICAgICAgICAgICBsaW1pdCAgICAgICAgID0gem9uZS0+bGltaXQ7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgY2ZmX29wX2NhbGxnc3VicjoKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50ICBpZHggPSAoRlRfVUludCkoICggYXJnc1swXSA+PiAxNiApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Z2xvYmFsc19iaWFzICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjYWxsZ3N1YnIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgem9uZSAtIGRlY29kZXItPnpvbmVzICsgMSApKTsKKworICAgICAgICAgICAgaWYgKCBpZHggPj0gZGVjb2Rlci0+bnVtX2dsb2JhbHMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGdsb2JhbCBzdWJyIGluZGV4XG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB6b25lIC0gZGVjb2Rlci0+em9uZXMgPj0gQ0ZGX01BWF9TVUJSU19DQUxMUyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHRvbyBtYW55IG5lc3RlZCBzdWJyc1xuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IGlwOyAgLyogc2F2ZSBjdXJyZW50IGluc3RydWN0aW9uIHBvaW50ZXIgKi8KKworICAgICAgICAgICAgem9uZSsrOworICAgICAgICAgICAgem9uZS0+YmFzZSAgID0gZGVjb2Rlci0+Z2xvYmFsc1tpZHhdOworICAgICAgICAgICAgem9uZS0+bGltaXQgID0gZGVjb2Rlci0+Z2xvYmFsc1tpZHggKyAxXTsKKyAgICAgICAgICAgIHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CisKKyAgICAgICAgICAgIGlmICggIXpvbmUtPmJhc2UgfHwgem9uZS0+bGltaXQgPT0gem9uZS0+YmFzZSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGludm9raW5nIGVtcHR5IHN1YnJzXG4iICkpOworICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVjb2Rlci0+em9uZSA9IHpvbmU7CisgICAgICAgICAgICBpcCAgICAgICAgICAgID0gem9uZS0+YmFzZTsKKyAgICAgICAgICAgIGxpbWl0ICAgICAgICAgPSB6b25lLT5saW1pdDsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfcmV0dXJuOgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmV0dXJuIChsZWF2aW5nIGxldmVsICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT56b25lIC0gZGVjb2Rlci0+em9uZXMgKSk7CisKKyAgICAgICAgICBpZiAoIGRlY29kZXItPnpvbmUgPD0gZGVjb2Rlci0+em9uZXMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX0VSUk9SKCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIHJldHVyblxuIiApKTsKKyAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgIH0KKworICAgICAgICAgIGRlY29kZXItPnpvbmUtLTsKKyAgICAgICAgICB6b25lICA9IGRlY29kZXItPnpvbmU7CisgICAgICAgICAgaXAgICAgPSB6b25lLT5jdXJzb3I7CisgICAgICAgICAgbGltaXQgPSB6b25lLT5saW1pdDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIEZUX0VSUk9SKCggIlVuaW1wbGVtZW50ZWQgb3Bjb2RlOiAlZCIsIGlwWy0xXSApKTsKKworICAgICAgICAgIGlmICggaXBbLTFdID09IDEyICkKKyAgICAgICAgICAgIEZUX0VSUk9SKCggIiAlZCIsIGlwWzBdICkpOworICAgICAgICAgIEZUX0VSUk9SKCggIlxuIiApKTsKKworICAgICAgICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgICAgIH0KKworICAgICAgICBkZWNvZGVyLT50b3AgPSBhcmdzOworCisgICAgICAgIGlmICggZGVjb2Rlci0+dG9wIC0gc3RhY2sgPj0gQ0ZGX01BWF9PUEVSQU5EUyApCisgICAgICAgICAgZ290byBTdGFja19PdmVyZmxvdzsKKworICAgICAgfSAvKiBnZW5lcmFsIG9wZXJhdG9yIHByb2Nlc3NpbmcgKi8KKworICAgIH0gLyogd2hpbGUgaXAgPCBsaW1pdCAqLworCisgICAgRlRfVFJBQ0U0KCggIi4uZW5kLi5cblxuIiApKTsKKworICBGYWlsOgorICAgIHJldHVybiBlcnJvcjsKKworICBNTV9FcnJvcjoKKyAgICBGVF9UUkFDRTQoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IgorICAgICAgICAgICAgICAgICIgaW52YWxpZCBvcGNvZGUgZm91bmQgaW4gdG9wIERJQ1QgY2hhcnN0cmluZ1xuIikpOworICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworCisgIFN5bnRheF9FcnJvcjoKKyAgICBGVF9UUkFDRTQoKCAiY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3M6IHN5bnRheCBlcnJvclxuIiApKTsKKyAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKworICBTdGFja19VbmRlcmZsb3c6CisgICAgRlRfVFJBQ0U0KCggImNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiBzdGFjayB1bmRlcmZsb3dcbiIgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBUb29fRmV3X0FyZ3VtZW50cyApOworCisgIFN0YWNrX092ZXJmbG93OgorICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczogc3RhY2sgb3ZlcmZsb3dcbiIgKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBTdGFja19PdmVyZmxvdyApOworICB9CisKKyNlbmRpZiAvKiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjZmZfZGVjb2Rlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbml0aWFsaXplcyBhIGdpdmVuIGdseXBoIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBkZWNvZGVyIDo6IEEgcG9pbnRlciB0byB0aGUgZ2x5cGggYnVpbGRlciB0byBpbml0aWFsaXplLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgOjogVGhlIGN1cnJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICAgICA6OiBUaGUgY3VycmVudCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2xvdCAgICAgIDo6IFRoZSBjdXJyZW50IGdseXBoIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoaW50aW5nICAgOjogV2hldGhlciBoaW50aW5nIGlzIGFjdGl2ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhpbnRfbW9kZSA6OiBUaGUgaGludGluZyBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2ZmX2RlY29kZXJfaW5pdCggQ0ZGX0RlY29kZXIqICAgICAgICAgICAgICAgICAgICAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgVFRfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgQ0ZGX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgQ0ZGX0dseXBoU2xvdCAgICAgICAgICAgICAgICAgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgaGludGluZywKKyAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgICAgICAgICAgICAgICAgaGludF9tb2RlLAorICAgICAgICAgICAgICAgICAgICBDRkZfRGVjb2Rlcl9HZXRfR2x5cGhfQ2FsbGJhY2sgICBnZXRfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIENGRl9EZWNvZGVyX0ZyZWVfR2x5cGhfQ2FsbGJhY2sgIGZyZWVfY2FsbGJhY2sgKQorICB7CisgICAgQ0ZGX0ZvbnQgIGNmZiA9IChDRkZfRm9udClmYWNlLT5leHRyYS5kYXRhOworCisKKyAgICAvKiBjbGVhciBldmVyeXRoaW5nICovCisgICAgRlRfWkVSTyggZGVjb2RlciApOworCisgICAgLyogaW5pdGlhbGl6ZSBidWlsZGVyICovCisgICAgY2ZmX2J1aWxkZXJfaW5pdCggJmRlY29kZXItPmJ1aWxkZXIsIGZhY2UsIHNpemUsIHNsb3QsIGhpbnRpbmcgKTsKKworICAgIC8qIGluaXRpYWxpemUgVHlwZTIgZGVjb2RlciAqLworICAgIGRlY29kZXItPmNmZiAgICAgICAgICA9IGNmZjsKKyAgICBkZWNvZGVyLT5udW1fZ2xvYmFscyAgPSBjZmYtPmdsb2JhbF9zdWJyc19pbmRleC5jb3VudDsKKyAgICBkZWNvZGVyLT5nbG9iYWxzICAgICAgPSBjZmYtPmdsb2JhbF9zdWJyczsKKyAgICBkZWNvZGVyLT5nbG9iYWxzX2JpYXMgPSBjZmZfY29tcHV0ZV9iaWFzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLT50b3BfZm9udC5mb250X2RpY3QuY2hhcnN0cmluZ190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bnVtX2dsb2JhbHMgKTsKKworICAgIGRlY29kZXItPmhpbnRfbW9kZSA9IGhpbnRfbW9kZTsKKworICAgIGRlY29kZXItPmdldF9nbHlwaF9jYWxsYmFjayAgPSBnZXRfY2FsbGJhY2s7CisgICAgZGVjb2Rlci0+ZnJlZV9nbHlwaF9jYWxsYmFjayA9IGZyZWVfY2FsbGJhY2s7CisgIH0KKworCisgIC8qIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZWxlY3QgdGhlIHN1YmZvbnQgKi8KKyAgLyogYW5kIHRoZSBsb2NhbHMgc3VicnMgYXJyYXkgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgY2ZmX2RlY29kZXJfcHJlcGFyZSggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXggKQorICB7CisgICAgQ0ZGX0J1aWxkZXIgICpidWlsZGVyID0gJmRlY29kZXItPmJ1aWxkZXI7CisgICAgQ0ZGX0ZvbnQgICAgICBjZmYgICAgID0gKENGRl9Gb250KWJ1aWxkZXItPmZhY2UtPmV4dHJhLmRhdGE7CisgICAgQ0ZGX1N1YkZvbnQgICBzdWIgICAgID0gJmNmZi0+dG9wX2ZvbnQ7CisgICAgRlRfRXJyb3IgICAgICBlcnJvciAgID0gRlRfRXJyX09rOworCisgICAgRlRfU2VydmljZV9DRkZMb2FkICBjZmZsb2FkID0gKEZUX1NlcnZpY2VfQ0ZGTG9hZCljZmYtPmNmZmxvYWQ7CisKKworICAgIC8qIG1hbmFnZSBDSUQgZm9udHMgKi8KKyAgICBpZiAoIGNmZi0+bnVtX3N1YmZvbnRzICkKKyAgICB7CisgICAgICBGVF9CeXRlICBmZF9pbmRleCA9IGNmZmxvYWQtPmZkX3NlbGVjdF9nZXQoICZjZmYtPmZkX3NlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXggKTsKKworCisgICAgICBpZiAoIGZkX2luZGV4ID49IGNmZi0+bnVtX3N1YmZvbnRzICkKKyAgICAgIHsKKyAgICAgICAgRlRfVFJBQ0U0KCggImNmZl9kZWNvZGVyX3ByZXBhcmU6IGludmFsaWQgQ0lEIHN1YmZvbnQgaW5kZXhcbiIgKSk7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICAgICAgZ290byBFeGl0OworICAgICAgfQorCisgICAgICBGVF9UUkFDRTMoKCAiICBpbiBzdWJmb250ICVkOlxuIiwgZmRfaW5kZXggKSk7CisKKyAgICAgIHN1YiA9IGNmZi0+c3ViZm9udHNbZmRfaW5kZXhdOworCisgICAgICBpZiAoIGJ1aWxkZXItPmhpbnRzX2Z1bmNzICYmIHNpemUgKQorICAgICAgeworICAgICAgICBGVF9TaXplICAgICAgIGZ0c2l6ZSAgID0gRlRfU0laRSggc2l6ZSApOworICAgICAgICBDRkZfSW50ZXJuYWwgIGludGVybmFsID0gKENGRl9JbnRlcm5hbClmdHNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YTsKKworCisgICAgICAgIC8qIGZvciBDRkZzIHdpdGhvdXQgc3ViZm9udHMsIHRoaXMgdmFsdWUgaGFzIGFscmVhZHkgYmVlbiBzZXQgKi8KKyAgICAgICAgYnVpbGRlci0+aGludHNfZ2xvYmFscyA9ICh2b2lkICopaW50ZXJuYWwtPnN1YmZvbnRzW2ZkX2luZGV4XTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBkZWNvZGVyLT5udW1fbG9jYWxzICA9IHN1Yi0+bG9jYWxfc3VicnNfaW5kZXguY291bnQ7CisgICAgZGVjb2Rlci0+bG9jYWxzICAgICAgPSBzdWItPmxvY2FsX3N1YnJzOworICAgIGRlY29kZXItPmxvY2Fsc19iaWFzID0gY2ZmX2NvbXB1dGVfYmlhcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QuY2hhcnN0cmluZ190eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5udW1fbG9jYWxzICk7CisKKyAgICBkZWNvZGVyLT5nbHlwaF93aWR0aCAgID0gc3ViLT5wcml2YXRlX2RpY3QuZGVmYXVsdF93aWR0aDsKKyAgICBkZWNvZGVyLT5ub21pbmFsX3dpZHRoID0gc3ViLT5wcml2YXRlX2RpY3Qubm9taW5hbF93aWR0aDsKKworICAgIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCA9IHN1YjsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L2NmZmRlY29kZS5oIGIvc3JjL3BzYXV4L2NmZmRlY29kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGY1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcHNhdXgvY2ZmZGVjb2RlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgY2ZmZGVjb2RlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIFBvc3RTY3JpcHQgQ0ZGIChUeXBlIDIpIGRlY29kaW5nIHJvdXRpbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDE3LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIENGRkRFQ09ERV9IXworI2RlZmluZSBDRkZERUNPREVfSF8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKKworCitGVF9CRUdJTl9IRUFERVIKKworICBGVF9MT0NBTCggdm9pZCApCisgIGNmZl9kZWNvZGVyX2luaXQoIENGRl9EZWNvZGVyKiAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgIFRUX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgIENGRl9TaXplICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgIENGRl9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgIHNsb3QsCisgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRpbmcsCisgICAgICAgICAgICAgICAgICAgIEZUX1JlbmRlcl9Nb2RlICAgICAgICAgICAgICAgICAgIGhpbnRfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgQ0ZGX0RlY29kZXJfR2V0X0dseXBoX0NhbGxiYWNrICAgZ2V0X2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBDRkZfRGVjb2Rlcl9GcmVlX0dseXBoX0NhbGxiYWNrICBmcmVlX2NhbGxiYWNrICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2ZmX2RlY29kZXJfcHJlcGFyZSggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgZ2x5cGhfaW5kZXggKTsKKworCisgIEZUX0xPQ0FMKCBGVF9JbnQgKQorICBjZmZfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlKCBDRkZfRm9udCAgY2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgY2hhcmNvZGUgKTsKKworCisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICBjaGFyc3RyaW5nX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgIGNoYXJzdHJpbmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICBpbl9kaWN0ICk7CisjZW5kaWYKKworCitGVF9FTkRfSEVBREVSCisKKyNlbmRpZgorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L21vZHVsZS5tayBiL3NyYy9wc2F1eC9tb2R1bGUubWsKaW5kZXggYzcwYTIyNy4uNjU4NGQwNyAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L21vZHVsZS5taworKysgYi9zcmMvcHNhdXgvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyYXJyc3QuYyBiL3NyYy9wc2F1eC9wc2FycnN0LmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gc3JjL2NmZi9jZjJhcnJzdC5jCnJlbmFtZSB0byBzcmMvcHNhdXgvcHNhcnJzdC5jCmluZGV4IDY3OTY0NTAuLmE4NzgwOTQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyYXJyc3QuYworKysgYi9zcmMvcHNhdXgvcHNhcnJzdC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2YyYXJyc3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzYXJyc3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZG9iZSdzIGNvZGUgZm9yIEFycmF5IFN0YWNrcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM2LDEzICszNiwxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaW5jbHVkZSAiY2YyZnQuaCIKKyNpbmNsdWRlICJwc2Z0LmgiCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICiAKLSNpbmNsdWRlICJjZjJnbHVlLmgiCi0jaW5jbHVkZSAiY2YyYXJyc3QuaCIKKyNpbmNsdWRlICJwc2dsdWUuaCIKKyNpbmNsdWRlICJwc2FycnN0LmgiCiAKLSNpbmNsdWRlICJjZjJlcnJvci5oIgorI2luY2x1ZGUgInBzZXJyb3IuaCIKIAogCiAgIC8qCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmFycnN0LmggYi9zcmMvcHNhdXgvcHNhcnJzdC5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHNyYy9jZmYvY2YyYXJyc3QuaApyZW5hbWUgdG8gc3JjL3BzYXV4L3BzYXJyc3QuaAppbmRleCAzYzIxYTNiLi5iMzU2OGViIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmFycnN0LmgKKysrIGIvc3JjL3BzYXV4L3BzYXJyc3QuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMmFycnN0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2FycnN0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWRvYmUncyBjb2RlIGZvciBBcnJheSBTdGFja3MgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNiwxMSArMzYsMTEgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBDRjJBUlJTVF9IXwotI2RlZmluZSBDRjJBUlJTVF9IXworI2lmbmRlZiBQU0FSUlNUX0hfCisjZGVmaW5lIFBTQVJSU1RfSF8KIAogCi0jaW5jbHVkZSAiY2YyZXJyb3IuaCIKKyNpbmNsdWRlICJwc2Vycm9yLmgiCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC05NCw3ICs5NCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIENGMkFSUlNUX0hfICovCisjZW5kaWYgLyogUFNBUlJTVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzYXV4LmMgYi9zcmMvcHNhdXgvcHNhdXguYwppbmRleCBmOGYxOWQwLi5mYjQ0N2ZjIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNhdXguYworKysgYi9zcmMvcHNhdXgvcHNhdXguYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBhdXhpbGlhcnkgUG9zdFNjcmlwdCBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsMTggKzE3LDI1IEBACiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0KICNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgInBzb2Jqcy5jIgotI2luY2x1ZGUgInBzYXV4bW9kLmMiCi0jaW5jbHVkZSAidDFkZWNvZGUuYyIKLSNpbmNsdWRlICJ0MWNtYXAuYyIKIAotI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQogI2luY2x1ZGUgImFmbXBhcnNlLmMiCi0jZW5kaWYKLQorI2luY2x1ZGUgInBzYXV4bW9kLmMiCiAjaW5jbHVkZSAicHNjb252LmMiCisjaW5jbHVkZSAicHNvYmpzLmMiCisjaW5jbHVkZSAidDFjbWFwLmMiCisjaW5jbHVkZSAidDFkZWNvZGUuYyIKKyNpbmNsdWRlICJjZmZkZWNvZGUuYyIKKworI2luY2x1ZGUgInBzYXJyc3QuYyIKKyNpbmNsdWRlICJwc2JsdWVzLmMiCisjaW5jbHVkZSAicHNlcnJvci5jIgorI2luY2x1ZGUgInBzZm9udC5jIgorI2luY2x1ZGUgInBzZnQuYyIKKyNpbmNsdWRlICJwc2hpbnRzLmMiCisjaW5jbHVkZSAicHNpbnRycC5jIgorI2luY2x1ZGUgInBzcmVhZC5jIgorI2luY2x1ZGUgInBzc3RhY2suYyIKIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2F1eGVyci5oIGIvc3JjL3BzYXV4L3BzYXV4ZXJyLmgKaW5kZXggMWQ3YWM2MC4uY2MzM2ZkMiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXV4ZXJyLmgKKysrIGIvc3JjL3BzYXV4L3BzYXV4ZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFMgYXV4aWxpYXJ5IG1vZHVsZSBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2F1eG1vZC5jIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmMKaW5kZXggMWY1ODljZS4uZWU0OTcwOCAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXV4bW9kLmMKKysrIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgYXV4aWxpYXJ5IFBvc3RTY3JpcHQgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJwc29ianMuaCIKICNpbmNsdWRlICJ0MWRlY29kZS5oIgogI2luY2x1ZGUgInQxY21hcC5oIgorI2luY2x1ZGUgInBzZnQuaCIKKyNpbmNsdWRlICJjZmZkZWNvZGUuaCIKIAogI2lmbmRlZiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTQogI2luY2x1ZGUgImFmbXBhcnNlLmgiCkBAIC02MCw2ICs2MiwxNCBAQAogCiAKICAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IFBTX0J1aWxkZXJfRnVuY3NSZWMgIHBzX2J1aWxkZXJfZnVuY3MgPQorICB7CisgICAgcHNfYnVpbGRlcl9pbml0LCAgICAgICAgICAvKiBpbml0ICovCisgICAgcHNfYnVpbGRlcl9kb25lICAgICAgICAgICAvKiBkb25lICovCisgIH07CisKKworICBGVF9DQUxMQkFDS19UQUJMRV9ERUYKICAgY29uc3QgVDFfQnVpbGRlcl9GdW5jc1JlYyAgdDFfYnVpbGRlcl9mdW5jcyA9CiAgIHsKICAgICB0MV9idWlsZGVyX2luaXQsICAgICAgICAgIC8qIGluaXQgKi8KQEAgLTc3LDkgKzg3LDE0IEBACiAgIEZUX0NBTExCQUNLX1RBQkxFX0RFRgogICBjb25zdCBUMV9EZWNvZGVyX0Z1bmNzUmVjICB0MV9kZWNvZGVyX2Z1bmNzID0KICAgewotICAgIHQxX2RlY29kZXJfaW5pdCwgICAgICAgICAgICAgIC8qIGluaXQgICAgICAgICAgICAgICovCi0gICAgdDFfZGVjb2Rlcl9kb25lLCAgICAgICAgICAgICAgLyogZG9uZSAgICAgICAgICAgICAgKi8KLSAgICB0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzICAvKiBwYXJzZV9jaGFyc3RyaW5ncyAqLworICAgIHQxX2RlY29kZXJfaW5pdCwgICAgICAgICAgICAgICAvKiBpbml0ICAgICAgICAgICAgICAgICAgKi8KKyAgICB0MV9kZWNvZGVyX2RvbmUsICAgICAgICAgICAgICAgLyogZG9uZSAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgdDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncywgIC8qIHBhcnNlX2NoYXJzdHJpbmdzX29sZCAqLworI2Vsc2UKKyAgICB0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MsICAgICAgLyogcGFyc2VfbWV0cmljcyAgICAgICAgICovCisjZW5kaWYKKyAgICBjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyAgLyogcGFyc2VfY2hhcnN0cmluZ3MgICAgICovCiAgIH07CiAKIApAQCAtMTA0LDYgKzExOSwzNCBAQAogICB9OwogCiAKKyAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGCisgIGNvbnN0IENGRl9CdWlsZGVyX0Z1bmNzUmVjICBjZmZfYnVpbGRlcl9mdW5jcyA9CisgIHsKKyAgICBjZmZfYnVpbGRlcl9pbml0LCAgICAgICAgICAvKiBpbml0ICovCisgICAgY2ZmX2J1aWxkZXJfZG9uZSwgICAgICAgICAgLyogZG9uZSAqLworCisgICAgY2ZmX2NoZWNrX3BvaW50cywgICAgICAgICAgLyogY2hlY2tfcG9pbnRzICAqLworICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCwgICAgIC8qIGFkZF9wb2ludCAgICAgKi8KKyAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQxLCAgICAvKiBhZGRfcG9pbnQxICAgICovCisgICAgY2ZmX2J1aWxkZXJfYWRkX2NvbnRvdXIsICAgLyogYWRkX2NvbnRvdXIgICAqLworICAgIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50LCAgIC8qIHN0YXJ0X3BvaW50ICAgKi8KKyAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyICAvKiBjbG9zZV9jb250b3VyICovCisgIH07CisKKworICBGVF9DQUxMQkFDS19UQUJMRV9ERUYKKyAgY29uc3QgQ0ZGX0RlY29kZXJfRnVuY3NSZWMgIGNmZl9kZWNvZGVyX2Z1bmNzID0KKyAgeworICAgIGNmZl9kZWNvZGVyX2luaXQsICAgICAgICAgICAgICAvKiBpbml0ICAgICovCisgICAgY2ZmX2RlY29kZXJfcHJlcGFyZSwgICAgICAgICAgIC8qIHByZXBhcmUgKi8KKworI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICBjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncywgLyogcGFyc2VfY2hhcnN0cmluZ3Nfb2xkICovCisjZW5kaWYKKyAgICBjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyAgLyogcGFyc2VfY2hhcnN0cmluZ3MgICAgICovCisgIH07CisKKwogICBzdGF0aWMKICAgY29uc3QgUFNBdXhfSW50ZXJmYWNlICBwc2F1eF9pbnRlcmZhY2UgPQogICB7CkBAIC0xMTIsNiArMTU1LDkgQEAKICAgICAmdDFfYnVpbGRlcl9mdW5jcywKICAgICAmdDFfZGVjb2Rlcl9mdW5jcywKICAgICB0MV9kZWNyeXB0LAorICAgIGNmZl9yYW5kb20sCisgICAgcHNfZGVjb2Rlcl9pbml0LAorICAgIHQxX21ha2Vfc3ViZm9udCwKIAogICAgIChjb25zdCBUMV9DTWFwX0NsYXNzZXNSZWMqKSAmdDFfY21hcF9jbGFzc2VzLAogCkBAIC0xMjAsNiArMTY2LDggQEAKICNlbHNlCiAgICAgMCwKICNlbmRpZgorCisgICAgJmNmZl9kZWNvZGVyX2Z1bmNzLAogICB9OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2F1eG1vZC5oIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmgKaW5kZXggOTI2ZjM3ZS4uZjMwOTc4ZiAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzYXV4bW9kLmgKKysrIGIvc3JjL3BzYXV4L3BzYXV4bW9kLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgYXV4aWxpYXJ5IFBvc3RTY3JpcHQgbW9kdWxlIGltcGxlbWVudGF0aW9uIChzcGVjaWZpY2F0aW9uKS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfTU9EVUxFX0gKIAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorCiAKIEZUX0JFR0lOX0hFQURFUgogCkBAIC0zMSw2ICszMywxMyBAQAogI2VuZGlmCiAKIAorICBGVF9DQUxMQkFDS19UQUJMRQorICBjb25zdCBDRkZfQnVpbGRlcl9GdW5jc1JlYyAgY2ZmX2J1aWxkZXJfZnVuY3M7CisKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUKKyAgY29uc3QgUFNfQnVpbGRlcl9GdW5jc1JlYyAgIHBzX2J1aWxkZXJfZnVuY3M7CisKKwogICBGVF9FWFBPUlRfVkFSKCBjb25zdCBGVF9Nb2R1bGVfQ2xhc3MgKSAgcHNhdXhfZHJpdmVyX2NsYXNzOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyYmx1ZXMuYyBiL3NyYy9wc2F1eC9wc2JsdWVzLmMKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gc3JjL2NmZi9jZjJibHVlcy5jCnJlbmFtZSB0byBzcmMvcHNhdXgvcHNibHVlcy5jCmluZGV4IDI1MGY4OWUuLmFlMzlkMDMgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyYmx1ZXMuYworKysgYi9zcmMvcHNhdXgvcHNibHVlcy5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2YyYmx1ZXMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzYmx1ZXMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZG9iZSdzIGNvZGUgZm9yIGhhbmRsaW5nIEJsdWUgWm9uZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM2LDEyICszNiwxMiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaW5jbHVkZSAiY2YyZnQuaCIKKyNpbmNsdWRlICJwc2Z0LmgiCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICiAKLSNpbmNsdWRlICJjZjJibHVlcy5oIgotI2luY2x1ZGUgImNmMmhpbnRzLmgiCi0jaW5jbHVkZSAiY2YyZm9udC5oIgorI2luY2x1ZGUgInBzYmx1ZXMuaCIKKyNpbmNsdWRlICJwc2hpbnRzLmgiCisjaW5jbHVkZSAicHNmb250LmgiCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICAgIENGMl9Gb250ICAgZm9udCApCiAgIHsKICAgICAvKiBwb2ludGVyIHRvIHBhcnNlZCBmb250IG9iamVjdCAqLwotICAgIENGRl9EZWNvZGVyKiAgZGVjb2RlciA9IGZvbnQtPmRlY29kZXI7CisgICAgUFNfRGVjb2RlciogIGRlY29kZXIgPSBmb250LT5kZWNvZGVyOwogCiAgICAgQ0YyX0ZpeGVkICB6b25lSGVpZ2h0OwogICAgIENGMl9GaXhlZCAgbWF4Wm9uZUhlaWdodCA9IDA7CkBAIC0xOTQsOCArMTk0LDggQEAKICAgICAgIGJsdWVzLT56b25lW2JsdWVzLT5jb3VudF0uY3NUb3BFZGdlID0KICAgICAgICAgY2YyX2JsdWVUb0ZpeGVkKCBibHVlVmFsdWVzW2kgKyAxXSApOwogCi0gICAgICB6b25lSGVpZ2h0ID0gYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc1RvcEVkZ2UgLQotICAgICAgICAgICAgICAgICAgIGJsdWVzLT56b25lW2JsdWVzLT5jb3VudF0uY3NCb3R0b21FZGdlOworICAgICAgem9uZUhlaWdodCA9IFNVQl9JTlQzMiggYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc1RvcEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzQm90dG9tRWRnZSApOwogCiAgICAgICBpZiAoIHpvbmVIZWlnaHQgPCAwICkKICAgICAgIHsKQEAgLTI0Myw4ICsyNDMsOCBAQAogICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc1RvcEVkZ2UgPQogICAgICAgICBjZjJfYmx1ZVRvRml4ZWQoIG90aGVyQmx1ZXNbaSArIDFdICk7CiAKLSAgICAgIHpvbmVIZWlnaHQgPSBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzVG9wRWRnZSAtCi0gICAgICAgICAgICAgICAgICAgYmx1ZXMtPnpvbmVbYmx1ZXMtPmNvdW50XS5jc0JvdHRvbUVkZ2U7CisgICAgICB6b25lSGVpZ2h0ID0gU1VCX0lOVDMyKCBibHVlcy0+em9uZVtibHVlcy0+Y291bnRdLmNzVG9wRWRnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT56b25lW2JsdWVzLT5jb3VudF0uY3NCb3R0b21FZGdlICk7CiAKICAgICAgIGlmICggem9uZUhlaWdodCA8IDAgKQogICAgICAgewpAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgICAgICAgLyogdG9wIGVkZ2UgKi8KICAgICAgICAgICBmbGF0RmFtaWx5RWRnZSA9IGNmMl9ibHVlVG9GaXhlZCggZmFtaWx5T3RoZXJCbHVlc1tqICsgMV0gKTsKIAotICAgICAgICAgIGRpZmYgPSBjZjJfZml4ZWRBYnMoIGZsYXRFZGdlIC0gZmxhdEZhbWlseUVkZ2UgKTsKKyAgICAgICAgICBkaWZmID0gY2YyX2ZpeGVkQWJzKCBTVUJfSU5UMzIoIGZsYXRFZGdlLCBmbGF0RmFtaWx5RWRnZSApICk7CiAKICAgICAgICAgICBpZiAoIGRpZmYgPCBtaW5EaWZmICYmIGRpZmYgPCBjc1VuaXRzUGVyUGl4ZWwgKQogICAgICAgICAgIHsKQEAgLTMxOSw3ICszMTksNyBAQAogICAgICAgICAgIC8qIHRvcCBlZGdlICovCiAgICAgICAgICAgZmxhdEZhbWlseUVkZ2UgPSBjZjJfYmx1ZVRvRml4ZWQoIGZhbWlseUJsdWVzWzFdICk7CiAKLSAgICAgICAgICBkaWZmID0gY2YyX2ZpeGVkQWJzKCBmbGF0RWRnZSAtIGZsYXRGYW1pbHlFZGdlICk7CisgICAgICAgICAgZGlmZiA9IGNmMl9maXhlZEFicyggU1VCX0lOVDMyKCBmbGF0RWRnZSwgZmxhdEZhbWlseUVkZ2UgKSApOwogCiAgICAgICAgICAgaWYgKCBkaWZmIDwgbWluRGlmZiAmJiBkaWZmIDwgY3NVbml0c1BlclBpeGVsICkKICAgICAgICAgICAgIGJsdWVzLT56b25lW2ldLmNzRmxhdEVkZ2UgPSBmbGF0RmFtaWx5RWRnZTsKQEAgLTM0Miw3ICszNDIsNyBAQAogICAgICAgICAgIC8qIGFkanVzdCBlZGdlcyBvZiB0b3Agem9uZSB1cHdhcmQgYnkgdHdpY2UgZGFya2VuaW5nIGFtb3VudCAqLwogICAgICAgICAgIGZsYXRGYW1pbHlFZGdlICs9IDIgKiBmb250LT5kYXJrZW5ZOyAgICAgIC8qIGJvdHRvbSBlZGdlICovCiAKLSAgICAgICAgICBkaWZmID0gY2YyX2ZpeGVkQWJzKCBmbGF0RWRnZSAtIGZsYXRGYW1pbHlFZGdlICk7CisgICAgICAgICAgZGlmZiA9IGNmMl9maXhlZEFicyggU1VCX0lOVDMyKCBmbGF0RWRnZSwgZmxhdEZhbWlseUVkZ2UgKSApOwogCiAgICAgICAgICAgaWYgKCBkaWZmIDwgbWluRGlmZiAmJiBkaWZmIDwgY3NVbml0c1BlclBpeGVsICkKICAgICAgICAgICB7CkBAIC00MDgsOCArNDA4LDggQEAKICAgICAgIC8qIE5vdGU6IGNvbnN0YW50IGNoYW5nZWQgZnJvbSAwLjUgdG8gMC42IHRvIGF2b2lkIGEgcHJvYmxlbSB3aXRoICovCiAgICAgICAvKiAgICAgICAxMHBwZW0gQXJpYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICBibHVlcy0+Ym9vc3QgPSBjZjJfZmxvYXRUb0ZpeGVkKCAuNiApIC0KLSAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBjZjJfZmxvYXRUb0ZpeGVkICggLjYgKSwKKyAgICAgIGJsdWVzLT5ib29zdCA9IGNmMl9kb3VibGVUb0ZpeGVkKCAuNiApIC0KKyAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBjZjJfZG91YmxlVG9GaXhlZCAoIC42ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZXMtPnNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdWVzLT5ibHVlU2NhbGUgKTsKICAgICAgIGlmICggYmx1ZXMtPmJvb3N0ID4gMHg3RkZGICkKQEAgLTQ4OSwxNyArNDg5LDE4IEBACiAgICAgICBpZiAoIGJsdWVzLT56b25lW2ldLmJvdHRvbVpvbmUgICAgICAgICAgICYmCiAgICAgICAgICAgIGNmMl9oaW50X2lzQm90dG9tKCBib3R0b21IaW50RWRnZSApICkKICAgICAgIHsKLSAgICAgICAgaWYgKCAoIGJsdWVzLT56b25lW2ldLmNzQm90dG9tRWRnZSAtIGNzRnV6eiApIDw9Ci0gICAgICAgICAgICAgICBib3R0b21IaW50RWRnZS0+Y3NDb29yZCAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICBpZiAoIFNVQl9JTlQzMiggYmx1ZXMtPnpvbmVbaV0uY3NCb3R0b21FZGdlLCBjc0Z1enogKSA8PQorICAgICAgICAgICAgICAgYm90dG9tSGludEVkZ2UtPmNzQ29vcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgIGJvdHRvbUhpbnRFZGdlLT5jc0Nvb3JkIDw9Ci0gICAgICAgICAgICAgICAoIGJsdWVzLT56b25lW2ldLmNzVG9wRWRnZSArIGNzRnV6eiApICAgICApCisgICAgICAgICAgICAgICBBRERfSU5UMzIoIGJsdWVzLT56b25lW2ldLmNzVG9wRWRnZSwgY3NGdXp6ICkgICAgICkKICAgICAgICAgewogICAgICAgICAgIC8qIGJvdHRvbSBlZGdlIGNhcHR1cmVkIGJ5IGJvdHRvbSB6b25lICovCiAKICAgICAgICAgICBpZiAoIGJsdWVzLT5zdXBwcmVzc092ZXJzaG9vdCApCiAgICAgICAgICAgICBkc05ldyA9IGJsdWVzLT56b25lW2ldLmRzRmxhdEVkZ2U7CiAKLSAgICAgICAgICBlbHNlIGlmICggKCBibHVlcy0+em9uZVtpXS5jc1RvcEVkZ2UgLSBib3R0b21IaW50RWRnZS0+Y3NDb29yZCApID49CisgICAgICAgICAgZWxzZSBpZiAoIFNVQl9JTlQzMiggYmx1ZXMtPnpvbmVbaV0uY3NUb3BFZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbUhpbnRFZGdlLT5jc0Nvb3JkICkgPj0KICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+Ymx1ZVNoaWZ0ICkKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBndWFyYW50ZWUgbWluaW11bSBvZiAxIHBpeGVsIG92ZXJzaG9vdCAqLwpAQCAtNTE0LDcgKzUxNSw3IEBACiAgICAgICAgICAgICBkc05ldyA9IGNmMl9maXhlZFJvdW5kKCBib3R0b21IaW50RWRnZS0+ZHNDb29yZCApOwogICAgICAgICAgIH0KIAotICAgICAgICAgIGRzTW92ZSAgID0gZHNOZXcgLSBib3R0b21IaW50RWRnZS0+ZHNDb29yZDsKKyAgICAgICAgICBkc01vdmUgICA9IFNVQl9JTlQzMiggZHNOZXcsIGJvdHRvbUhpbnRFZGdlLT5kc0Nvb3JkICk7CiAgICAgICAgICAgY2FwdHVyZWQgPSBUUlVFOwogCiAgICAgICAgICAgYnJlYWs7CkBAIC01MjMsMTcgKzUyNCwxOCBAQAogCiAgICAgICBpZiAoICFibHVlcy0+em9uZVtpXS5ib3R0b21ab25lICYmIGNmMl9oaW50X2lzVG9wKCB0b3BIaW50RWRnZSApICkKICAgICAgIHsKLSAgICAgICAgaWYgKCAoIGJsdWVzLT56b25lW2ldLmNzQm90dG9tRWRnZSAtIGNzRnV6eiApIDw9Ci0gICAgICAgICAgICAgICB0b3BIaW50RWRnZS0+Y3NDb29yZCAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICBpZiAoIFNVQl9JTlQzMiggYmx1ZXMtPnpvbmVbaV0uY3NCb3R0b21FZGdlLCBjc0Z1enogKSA8PQorICAgICAgICAgICAgICAgdG9wSGludEVkZ2UtPmNzQ29vcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgIHRvcEhpbnRFZGdlLT5jc0Nvb3JkIDw9Ci0gICAgICAgICAgICAgICAoIGJsdWVzLT56b25lW2ldLmNzVG9wRWRnZSArIGNzRnV6eiApICAgICApCisgICAgICAgICAgICAgICBBRERfSU5UMzIoIGJsdWVzLT56b25lW2ldLmNzVG9wRWRnZSwgY3NGdXp6ICkgICAgICkKICAgICAgICAgewogICAgICAgICAgIC8qIHRvcCBlZGdlIGNhcHR1cmVkIGJ5IHRvcCB6b25lICovCiAKICAgICAgICAgICBpZiAoIGJsdWVzLT5zdXBwcmVzc092ZXJzaG9vdCApCiAgICAgICAgICAgICBkc05ldyA9IGJsdWVzLT56b25lW2ldLmRzRmxhdEVkZ2U7CiAKLSAgICAgICAgICBlbHNlIGlmICggKCB0b3BIaW50RWRnZS0+Y3NDb29yZCAtIGJsdWVzLT56b25lW2ldLmNzQm90dG9tRWRnZSApID49CisgICAgICAgICAgZWxzZSBpZiAoIFNVQl9JTlQzMiggdG9wSGludEVkZ2UtPmNzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1ZXMtPnpvbmVbaV0uY3NCb3R0b21FZGdlICkgPj0KICAgICAgICAgICAgICAgICAgICAgICBibHVlcy0+Ymx1ZVNoaWZ0ICkKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBndWFyYW50ZWUgbWluaW11bSBvZiAxIHBpeGVsIG92ZXJzaG9vdCAqLwpAQCAtNTQ4LDcgKzU1MCw3IEBACiAgICAgICAgICAgICBkc05ldyA9IGNmMl9maXhlZFJvdW5kKCB0b3BIaW50RWRnZS0+ZHNDb29yZCApOwogICAgICAgICAgIH0KIAotICAgICAgICAgIGRzTW92ZSAgID0gZHNOZXcgLSB0b3BIaW50RWRnZS0+ZHNDb29yZDsKKyAgICAgICAgICBkc01vdmUgICA9IFNVQl9JTlQzMiggZHNOZXcsIHRvcEhpbnRFZGdlLT5kc0Nvb3JkICk7CiAgICAgICAgICAgY2FwdHVyZWQgPSBUUlVFOwogCiAgICAgICAgICAgYnJlYWs7CkBAIC01NjEsMTMgKzU2MywxNCBAQAogICAgICAgLyogbW92ZSBib3RoIGVkZ2VzIGFuZCBmbGFnIHRoZW0gYGxvY2tlZCcgKi8KICAgICAgIGlmICggY2YyX2hpbnRfaXNWYWxpZCggYm90dG9tSGludEVkZ2UgKSApCiAgICAgICB7Ci0gICAgICAgIGJvdHRvbUhpbnRFZGdlLT5kc0Nvb3JkICs9IGRzTW92ZTsKKyAgICAgICAgYm90dG9tSGludEVkZ2UtPmRzQ29vcmQgPSBBRERfSU5UMzIoIGJvdHRvbUhpbnRFZGdlLT5kc0Nvb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNNb3ZlICk7CiAgICAgICAgIGNmMl9oaW50X2xvY2soIGJvdHRvbUhpbnRFZGdlICk7CiAgICAgICB9CiAKICAgICAgIGlmICggY2YyX2hpbnRfaXNWYWxpZCggdG9wSGludEVkZ2UgKSApCiAgICAgICB7Ci0gICAgICAgIHRvcEhpbnRFZGdlLT5kc0Nvb3JkICs9IGRzTW92ZTsKKyAgICAgICAgdG9wSGludEVkZ2UtPmRzQ29vcmQgPSBBRERfSU5UMzIoIHRvcEhpbnRFZGdlLT5kc0Nvb3JkLCBkc01vdmUgKTsKICAgICAgICAgY2YyX2hpbnRfbG9jayggdG9wSGludEVkZ2UgKTsKICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmJsdWVzLmggYi9zcmMvcHNhdXgvcHNibHVlcy5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIHNyYy9jZmYvY2YyYmx1ZXMuaApyZW5hbWUgdG8gc3JjL3BzYXV4L3BzYmx1ZXMuaAppbmRleCA5NmZiNjBmLi4yNWVmNjg0IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmJsdWVzLmgKKysrIGIvc3JjL3BzYXV4L3BzYmx1ZXMuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMmJsdWVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2JsdWVzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWRvYmUncyBjb2RlIGZvciBoYW5kbGluZyBCbHVlIFpvbmVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02NSwxMSArNjUsMTEgQEAKICAgICovCiAKIAotI2lmbmRlZiBDRjJCTFVFU19IXwotI2RlZmluZSBDRjJCTFVFU19IXworI2lmbmRlZiBQU0JMVUVTX0hfCisjZGVmaW5lIFBTQkxVRVNfSF8KIAogCi0jaW5jbHVkZSAiY2YyZ2x1ZS5oIgorI2luY2x1ZGUgInBzZ2x1ZS5oIgogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtMTExLDcgKzExMSw3IEBACiAgICAqIENvbnN0YW50IHVzZWQgZm9yIGhpbnQgYWRqdXN0bWVudCBhbmQgZm9yIHN5bnRoZXRpYyBlbSBib3ggaGludAogICAgKiBwbGFjZW1lbnQuCiAgICAqLwotI2RlZmluZSBDRjJfTUlOX0NPVU5URVIgIGNmMl9mbG9hdFRvRml4ZWQoIDAuNSApCisjZGVmaW5lIENGMl9NSU5fQ09VTlRFUiAgY2YyX2RvdWJsZVRvRml4ZWQoIDAuNSApCiAKIAogICAvKiBzaGFyZWQgdHlwZWRlZiBpcyBpbiBjZjJnbHVlLmggKi8KQEAgLTE3OSw3ICsxNzksNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBDRjJCTFVFU19IXyAqLworI2VuZGlmIC8qIFBTQkxVRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc2NvbnYuYyBiL3NyYy9wc2F1eC9wc2NvbnYuYwppbmRleCBiMDkyNDgyLi5hMDMzODUwIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNjb252LmMKKysrIGIvc3JjL3BzYXV4L3BzY29udi5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNvbWUgY29udmVuaWVuY2UgY29udmVyc2lvbnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMTEsNiArMTExLDEwIEBACiAgICAgICBwKys7CiAgICAgICBpZiAoIHAgPT0gbGltaXQgKQogICAgICAgICBnb3RvIEJhZDsKKworICAgICAgLyogb25seSBhIHNpbmdsZSBzaWduIGlzIGFsbG93ZWQgKi8KKyAgICAgIGlmICggKnAgPT0gJy0nIHx8ICpwID09ICcrJyApCisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIG51bV9saW1pdCA9IDB4N0ZGRkZGRkZMIC8gYmFzZTsKQEAgLTIxNSw2ICsyMTksMTAgQEAKICAgICAgIHArKzsKICAgICAgIGlmICggcCA9PSBsaW1pdCApCiAgICAgICAgIGdvdG8gQmFkOworCisgICAgICAvKiBvbmx5IGEgc2luZ2xlIHNpZ24gaXMgYWxsb3dlZCAqLworICAgICAgaWYgKCAqcCA9PSAnLScgfHwgKnAgPT0gJysnICkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLyogcmVhZCB0aGUgaW50ZWdlciBwYXJ0ICovCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNjb252LmggYi9zcmMvcHNhdXgvcHNjb252LmgKaW5kZXggY2FiMjU0YS4uZDY0M2ZmYyAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3BzY29udi5oCisrKyBiL3NyYy9wc2F1eC9wc2NvbnYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTb21lIGNvbnZlbmllbmNlIGNvbnZlcnNpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJlcnJvci5jIGIvc3JjL3BzYXV4L3BzZXJyb3IuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMmVycm9yLmMKcmVuYW1lIHRvIHNyYy9wc2F1eC9wc2Vycm9yLmMKaW5kZXggZTNkZDY5Zi4uOTE2OWU1MiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJlcnJvci5jCisrKyBiL3NyYy9wc2F1eC9wc2Vycm9yLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZjJlcnJvci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNlcnJvci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZXJyb3IgaGFuZGxpbmcgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaW5jbHVkZSAiY2YyZnQuaCIKLSNpbmNsdWRlICJjZjJlcnJvci5oIgorI2luY2x1ZGUgInBzZnQuaCIKKyNpbmNsdWRlICJwc2Vycm9yLmgiCiAKIAogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJlcnJvci5oIGIvc3JjL3BzYXV4L3BzZXJyb3IuaApzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMmVycm9yLmgKcmVuYW1lIHRvIHNyYy9wc2F1eC9wc2Vycm9yLmgKaW5kZXggZDJjNzcwZC4uMTNkNTIwNiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJlcnJvci5oCisrKyBiL3NyYy9wc2F1eC9wc2Vycm9yLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZjJlcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNlcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZXJyb3IgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIENGMkVSUk9SX0hfCi0jZGVmaW5lIENGMkVSUk9SX0hfCisjaWZuZGVmIFBTRVJST1JfSF8KKyNkZWZpbmUgUFNFUlJPUl9IXwogCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSApAQCAtNTAsNyArNTAsNyBAQAogCiAKICNpbmNsdWRlIEZUX0VSUk9SU19ICi0jaW5jbHVkZSAiY2YyZnQuaCIKKyNpbmNsdWRlICJwc2Z0LmgiCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0xMTMsNyArMTEzLDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogQ0YyRVJST1JfSF8gKi8KKyNlbmRpZiAvKiBQU0VSUk9SX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmZpeGVkLmggYi9zcmMvcHNhdXgvcHNmaXhlZC5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIHNyYy9jZmYvY2YyZml4ZWQuaApyZW5hbWUgdG8gc3JjL3BzYXV4L3BzZml4ZWQuaAppbmRleCAyZTRiNTAzLi4yMTk1ODllIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmZpeGVkLmgKKysrIGIvc3JjL3BzYXV4L3BzZml4ZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMmZpeGVkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2ZpeGVkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWRvYmUncyBjb2RlIGZvciBGaXhlZCBQb2ludCBNYXRoZW1hdGljcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgQ0YyRklYRURfSF8KLSNkZWZpbmUgQ0YyRklYRURfSF8KKyNpZm5kZWYgUFNGSVhFRF9IXworI2RlZmluZSBQU0ZJWEVEX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC02MywxMCArNjMsMTAgQEAKICAgICAgICAgICAoIChGVF9TaG9ydCkoICggKEZUX1VJbnQzMikoeCkgKyAweDgwMDBVICkgPj4gMTYgKSApCiAjZGVmaW5lIGNmMl9maXhlZFJvdW5kKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggKENGMl9GaXhlZCkoICggKEZUX1VJbnQzMikoeCkgKyAweDgwMDBVICkgJiAweEZGRkYwMDAwVUwgKSApCi0jZGVmaW5lIGNmMl9mbG9hdFRvRml4ZWQoIGYgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBjZjJfZG91YmxlVG9GaXhlZCggZiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAoIChDRjJfRml4ZWQpKCAoZikgKiA2NTUzNi4wICsgMC41ICkgKQogI2RlZmluZSBjZjJfZml4ZWRBYnMoIHggKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoICh4KSA8IDAgPyAtKHgpIDogKHgpICkKKyAgICAgICAgICAoICh4KSA8IDAgPyBORUdfSU5UMzIoIHggKSA6ICh4KSApCiAjZGVmaW5lIGNmMl9maXhlZEZsb29yKCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggKENGMl9GaXhlZCkoIChGVF9VSW50MzIpKHgpICYgMHhGRkZGMDAwMFVMICkgKQogI2RlZmluZSBjZjJfZml4ZWRGcmFjdGlvbiggeCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTg5LDcgKzg5LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogQ0YyRklYRURfSF8gKi8KKyNlbmRpZiAvKiBQU0ZJWEVEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmZvbnQuYyBiL3NyYy9wc2F1eC9wc2ZvbnQuYwpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMmZvbnQuYwpyZW5hbWUgdG8gc3JjL3BzYXV4L3BzZm9udC5jCmluZGV4IGE4NmUzNjEuLmRkZTY3YTcgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyZm9udC5jCisrKyBiL3NyYy9wc2F1eC9wc2ZvbnQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMmZvbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2ZvbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWRvYmUncyBjb2RlIGZvciBmb250IGluc3RhbmNlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zOSwxMiArMzksMTIgQEAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICiAKLSNpbmNsdWRlICJjZjJmdC5oIgorI2luY2x1ZGUgInBzZnQuaCIKIAotI2luY2x1ZGUgImNmMmdsdWUuaCIKLSNpbmNsdWRlICJjZjJmb250LmgiCi0jaW5jbHVkZSAiY2YyZXJyb3IuaCIKLSNpbmNsdWRlICJjZjJpbnRycC5oIgorI2luY2x1ZGUgInBzZ2x1ZS5oIgorI2luY2x1ZGUgInBzZm9udC5oIgorI2luY2x1ZGUgInBzZXJyb3IuaCIKKyNpbmNsdWRlICJwc2ludHJwLmgiCiAKIAogICAvKiBDb21wdXRlIGEgc3RlbSBkYXJrZW5pbmcgYW1vdW50IGluIGNoYXJhY3RlciBzcGFjZS4gKi8KQEAgLTExNyw3ICsxMTcsNyBAQAogICAgICAgcmV0dXJuOwogCiAgICAgLyogcHJvdGVjdCBhZ2FpbnN0IHJhbmdlIHByb2JsZW1zIGFuZCBkaXZpZGUgYnkgemVybyAqLwotICAgIGlmICggZW1SYXRpbyA8IGNmMl9mbG9hdFRvRml4ZWQoIC4wMSApICkKKyAgICBpZiAoIGVtUmF0aW8gPCBjZjJfZG91YmxlVG9GaXhlZCggLjAxICkgKQogICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCBzdGVtRGFya2VuZWQgKQpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgICAgICAgICAgICBjb25zdCBDRjJfTWF0cml4KiAgdHJhbnNmb3JtICkKICAgewogICAgIC8qIHBvaW50ZXIgdG8gcGFyc2VkIGZvbnQgb2JqZWN0ICovCi0gICAgQ0ZGX0RlY29kZXIqICBkZWNvZGVyID0gZm9udC0+ZGVjb2RlcjsKKyAgICBQU19EZWNvZGVyKiAgZGVjb2RlciA9IGZvbnQtPmRlY29kZXI7CiAKICAgICBGVF9Cb29sICBuZWVkRXh0cmFTZXR1cCA9IEZBTFNFOwogCkBAIC0yNjAsNyArMjYwLDYgQEAKICAgICBDRjJfVUludCAgIGxlbk5vcm1hbGl6ZWRWID0gMDsKICAgICBGVF9GaXhlZCogIG5vcm1hbGl6ZWRWICAgID0gTlVMTDsKIAotCiAgICAgLyogY2xlYXIgcHJldmlvdXMgZXJyb3IgKi8KICAgICBmb250LT5lcnJvciA9IEZUX0Vycl9PazsKIApAQCAtMjczLDQ2ICsyNzIsNTIgQEAKICAgICAgIG5lZWRFeHRyYVNldHVwICAgID0gVFJVRTsKICAgICB9CiAKLSAgICAvKiBjaGVjayBmb3IgdmFyaWF0aW9uIHZlY3RvcnMgKi8KLSAgICB2c3RvcmUgICAgICAgID0gY2YyX2dldFZTdG9yZSggZGVjb2RlciApOwotICAgIGhhc1ZhcmlhdGlvbnMgPSAoIHZzdG9yZS0+ZGF0YUNvdW50ICE9IDAgKTsKLQotICAgIGlmICggaGFzVmFyaWF0aW9ucyApCisgICAgaWYgKCAhZm9udC0+aXNUMSApCiAgICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKLSAgICAgIC8qIGNoZWNrIHdoZXRoZXIgUHJpdmF0ZSBESUNUIGluIHRoaXMgc3ViZm9udCBuZWVkcyB0byBiZSByZXBhcnNlZCAqLwotICAgICAgZm9udC0+ZXJyb3IgPSBjZjJfZ2V0Tm9ybWFsaXplZFZlY3RvciggZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW5Ob3JtYWxpemVkViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZub3JtYWxpemVkViApOwotICAgICAgaWYgKCBmb250LT5lcnJvciApCi0gICAgICAgIHJldHVybjsKKyAgICAgIEZUX1NlcnZpY2VfQ0ZGTG9hZCAgY2ZmbG9hZCA9IChGVF9TZXJ2aWNlX0NGRkxvYWQpZm9udC0+Y2ZmbG9hZDsKIAotICAgICAgaWYgKCBjZmZfYmxlbmRfY2hlY2tfdmVjdG9yKCAmc3ViRm9udC0+YmxlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvbnQtPnByaXZhdGVfZGljdC52c2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5Ob3JtYWxpemVkViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFYgKSApCisKKyAgICAgIC8qIGNoZWNrIGZvciB2YXJpYXRpb24gdmVjdG9ycyAqLworICAgICAgdnN0b3JlICAgICAgICA9IGNmMl9nZXRWU3RvcmUoIGRlY29kZXIgKTsKKyAgICAgIGhhc1ZhcmlhdGlvbnMgPSAoIHZzdG9yZS0+ZGF0YUNvdW50ICE9IDAgKTsKKworICAgICAgaWYgKCBoYXNWYXJpYXRpb25zICkKICAgICAgIHsKLSAgICAgICAgLyogYmxlbmQgaGFzIGNoYW5nZWQsIHJlcGFyc2UgKi8KLSAgICAgICAgY2ZmX2xvYWRfcHJpdmF0ZV9kaWN0KCBkZWNvZGVyLT5jZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViRm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5Ob3JtYWxpemVkViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkViApOwotICAgICAgICBuZWVkRXh0cmFTZXR1cCA9IFRSVUU7Ci0gICAgICB9CisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgICAgICAvKiBjaGVjayB3aGV0aGVyIFByaXZhdGUgRElDVCBpbiB0aGlzIHN1YmZvbnQgbmVlZHMgdG8gYmUgcmVwYXJzZWQgKi8KKyAgICAgICAgZm9udC0+ZXJyb3IgPSBjZjJfZ2V0Tm9ybWFsaXplZFZlY3RvciggZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbk5vcm1hbGl6ZWRWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9ybWFsaXplZFYgKTsKKyAgICAgICAgaWYgKCBmb250LT5lcnJvciApCisgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICggY2ZmbG9hZC0+YmxlbmRfY2hlY2tfdmVjdG9yKCAmc3ViRm9udC0+YmxlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJGb250LT5wcml2YXRlX2RpY3QudnNpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbk5vcm1hbGl6ZWRWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFYgKSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBibGVuZCBoYXMgY2hhbmdlZCwgcmVwYXJzZSAqLworICAgICAgICAgIGNmZmxvYWQtPmxvYWRfcHJpdmF0ZV9kaWN0KCBkZWNvZGVyLT5jZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbk5vcm1hbGl6ZWRWLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkViApOworICAgICAgICAgIG5lZWRFeHRyYVNldHVwID0gVFJVRTsKKyAgICAgICAgfQogI2VuZGlmCiAKLSAgICAgIC8qIGNvcHkgZnJvbSBzdWJmb250ICovCi0gICAgICBmb250LT5ibGVuZC5mb250ID0gc3ViRm9udC0+YmxlbmQuZm9udDsKKyAgICAgICAgLyogY29weSBmcm9tIHN1YmZvbnQgKi8KKyAgICAgICAgZm9udC0+YmxlbmQuZm9udCA9IHN1YkZvbnQtPmJsZW5kLmZvbnQ7CiAKLSAgICAgIC8qIGNsZWFyIHN0YXRlIG9mIGNoYXJzdHJpbmcgYmxlbmQgKi8KLSAgICAgIGZvbnQtPmJsZW5kLnVzZWRCViA9IEZBTFNFOworICAgICAgICAvKiBjbGVhciBzdGF0ZSBvZiBjaGFyc3RyaW5nIGJsZW5kICovCisgICAgICAgIGZvbnQtPmJsZW5kLnVzZWRCViA9IEZBTFNFOwogCi0gICAgICAvKiBpbml0aWFsaXplIHZhbHVlIGZvciBjaGFyc3RyaW5nICovCi0gICAgICBmb250LT52c2luZGV4ID0gc3ViRm9udC0+cHJpdmF0ZV9kaWN0LnZzaW5kZXg7CisgICAgICAgIC8qIGluaXRpYWxpemUgdmFsdWUgZm9yIGNoYXJzdHJpbmcgKi8KKyAgICAgICAgZm9udC0+dnNpbmRleCA9IHN1YkZvbnQtPnByaXZhdGVfZGljdC52c2luZGV4OwogCi0gICAgICAvKiBzdG9yZSB2ZWN0b3IgaW5wdXRzIGZvciBibGVuZHMgaW4gY2hhcnN0cmluZyAqLwotICAgICAgZm9udC0+bGVuTkRWID0gbGVuTm9ybWFsaXplZFY7Ci0gICAgICBmb250LT5ORFYgICAgPSBub3JtYWxpemVkVjsKKyAgICAgICAgLyogc3RvcmUgdmVjdG9yIGlucHV0cyBmb3IgYmxlbmRzIGluIGNoYXJzdHJpbmcgKi8KKyAgICAgICAgZm9udC0+bGVuTkRWID0gbGVuTm9ybWFsaXplZFY7CisgICAgICAgIGZvbnQtPk5EViAgICA9IG5vcm1hbGl6ZWRWOworICAgICAgfQogICAgIH0KIAogICAgIC8qIGlmIHBwZW0gaGFzIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVjb21wdXRlIHNvbWUgY2FjaGVkIGRhdGEgICAgICAgICAqLwpAQCAtNDQ3LDcgKzQ1Miw3IEBACiAgICAgICAvKiBjaG9vc2UgYSBjb25zdGFudCBmb3IgU3RkSFcgdGhhdCBkZXBlbmRzIG9uIGZvbnQgY29udHJhc3QgICAgICAgKi8KICAgICAgIHN0ZEhXID0gY2YyX2dldFN0ZEhXKCBkZWNvZGVyICk7CiAKLSAgICAgIGlmICggc3RkSFcgPiAwICYmIGZvbnQtPnN0ZFZXID4gMiAqIHN0ZEhXICkKKyAgICAgIGlmICggc3RkSFcgPiAwICYmIGZvbnQtPnN0ZFZXID4gTVVMX0lOVDMyKCAyLCBzdGRIVyApICkKICAgICAgICAgZm9udC0+c3RkSFcgPSBGVF9EaXZGaXgoIGNmMl9pbnRUb0ZpeGVkKCA3NSApLCBlbVJhdGlvICk7CiAgICAgICBlbHNlCiAgICAgICB7CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmZvbnQuaCBiL3NyYy9wc2F1eC9wc2ZvbnQuaApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMmZvbnQuaApyZW5hbWUgdG8gc3JjL3BzYXV4L3BzZm9udC5oCmluZGV4IDE3ZWNkMTcuLmU2MTFhYzQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyZm9udC5oCisrKyBiL3NyYy9wc2F1eC9wc2ZvbnQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMmZvbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2ZvbnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWRvYmUncyBjb2RlIGZvciBmb250IGluc3RhbmNlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNiwxMyArMzYsMTQgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBDRjJGT05UX0hfCi0jZGVmaW5lIENGMkZPTlRfSF8KKyNpZm5kZWYgUFNGT05UX0hfCisjZGVmaW5lIFBTRk9OVF9IXwogCiAKLSNpbmNsdWRlICJjZjJmdC5oIgotI2luY2x1ZGUgImNmMmJsdWVzLmgiCi0jaW5jbHVkZSAiY2ZmbG9hZC5oIgorI2luY2x1ZGUgRlRfU0VSVklDRV9DRkZfVEFCTEVfTE9BRF9ICisKKyNpbmNsdWRlICJwc2Z0LmgiCisjaW5jbHVkZSAicHNibHVlcy5oIgogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtNjQsNiArNjUsNyBAQAogICAgIEZUX01lbW9yeSAgbWVtb3J5OwogICAgIEZUX0Vycm9yICAgZXJyb3I7ICAgICAvKiBzaGFyZWQgZXJyb3IgZm9yIHRoaXMgaW5zdGFuY2UgKi8KIAorICAgIEZUX0Jvb2wgICAgICAgICAgICAgaXNUMTsKICAgICBGVF9Cb29sICAgICAgICAgICAgIGlzQ0ZGMjsKICAgICBDRjJfUmVuZGVyaW5nRmxhZ3MgIHJlbmRlcmluZ0ZsYWdzOwogCkBAIC04OSw3ICs5MSw3IEBACiAKICAgICAvKiBGcmVlVHlwZSByZWxhdGVkIG1lbWJlcnMgKi8KICAgICBDRjJfT3V0bGluZVJlYyAgb3V0bGluZTsgICAgICAgLyogZnJlZXR5cGUgZ2x5cGggb3V0bGluZSBmdW5jdGlvbnMgKi8KLSAgICBDRkZfRGVjb2RlciogICAgZGVjb2RlcjsKKyAgICBQU19EZWNvZGVyKiAgICAgZGVjb2RlcjsKICAgICBDRkZfU3ViRm9udCAgICAgbGFzdFN1YmZvbnQ7ICAgICAgICAgICAgICAvKiBGcmVlVHlwZSBwYXJzZWQgZGF0YTsgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b3AgZm9udCBvciBzdWJmb250ICAgKi8KIApAQCAtMTExLDYgKzExMyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY291bnRlcmNsb2Nrd2lzZSB3aW5kaW5nICovCiAKICAgICBDRjJfQmx1ZXNSZWMgIGJsdWVzOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb21wdXRlZCB6b25lIGRhdGEgKi8KKworICAgIEZUX1NlcnZpY2VfQ0ZGTG9hZCAgY2ZmbG9hZDsgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gY2ZmIGZ1bmN0aW9ucyAqLwogICB9OwogCiAKQEAgLTEyNCw3ICsxMjgsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBDRjJGT05UX0hfICovCisjZW5kaWYgLyogUFNGT05UX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmZ0LmMgYi9zcmMvcHNhdXgvcHNmdC5jCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIHNyYy9jZmYvY2YyZnQuYwpyZW5hbWUgdG8gc3JjL3BzYXV4L3BzZnQuYwppbmRleCBlYjg0NzJmLi4xZjc1MDE3IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmZ0LmMKKysrIGIvc3JjL3BzYXV4L3BzZnQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMmZ0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc2Z0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgR2x1ZSBDb21wb25lbnQgdG8gQWRvYmUncyBJbnRlcnByZXRlciAoYm9keSkuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNiwxMSArMzYsMjAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2luY2x1ZGUgImNmMmZ0LmgiCisjaW5jbHVkZSAicHNmdC5oIgogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogCi0jaW5jbHVkZSAiY2YyZm9udC5oIgotI2luY2x1ZGUgImNmMmVycm9yLmgiCisjaW5jbHVkZSAicHNmb250LmgiCisjaW5jbHVkZSAicHNlcnJvci5oIgorI2luY2x1ZGUgInBzb2Jqcy5oIgorI2luY2x1ZGUgImNmZmRlY29kZS5oIgorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAorI2VuZGlmCisKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfQ0ZGX1RBQkxFX0xPQURfSAogCiAKICNkZWZpbmUgQ0YyX01BWF9TSVpFICBjZjJfaW50VG9GaXhlZCggMjAwMCApICAgIC8qIG1heCBwcGVtICovCkBAIC04MywxMiArOTIsMTMgQEAKICAgY2YyX3NldEdseXBoV2lkdGgoIENGMl9PdXRsaW5lICBvdXRsaW5lLAogICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgIHdpZHRoICkKICAgewotICAgIENGRl9EZWNvZGVyKiAgZGVjb2RlciA9IG91dGxpbmUtPmRlY29kZXI7CisgICAgUFNfRGVjb2RlciogIGRlY29kZXIgPSBvdXRsaW5lLT5kZWNvZGVyOwogCiAKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgKTsKIAotICAgIGRlY29kZXItPmdseXBoX3dpZHRoID0gY2YyX2ZpeGVkVG9JbnQoIHdpZHRoICk7CisgICAgaWYgKCAhZGVjb2Rlci0+YnVpbGRlci5pc190MSApCisgICAgICAqZGVjb2Rlci0+Z2x5cGhfd2lkdGggPSBjZjJfZml4ZWRUb0ludCggd2lkdGggKTsKICAgfQogCiAKQEAgLTEyMiw4ICsxMzIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGMl9DYWxsYmFja1BhcmFtcyAgcGFyYW1zICkKICAgewogICAgIC8qIGRvd25jYXN0IHRoZSBvYmplY3QgcG9pbnRlciAqLwotICAgIENGMl9PdXRsaW5lICAgb3V0bGluZSA9IChDRjJfT3V0bGluZSljYWxsYmFja3M7Ci0gICAgQ0ZGX0J1aWxkZXIqICBidWlsZGVyOworICAgIENGMl9PdXRsaW5lICBvdXRsaW5lID0gKENGMl9PdXRsaW5lKWNhbGxiYWNrczsKKyAgICBQU19CdWlsZGVyKiAgYnVpbGRlcjsKIAogICAgICh2b2lkKXBhcmFtczsgICAgICAgIC8qIG9ubHkgdXNlZCBpbiBkZWJ1ZyBtb2RlICovCiAKQEAgLTEzNCw3ICsxNDQsNyBAQAogICAgIGJ1aWxkZXIgPSAmb3V0bGluZS0+ZGVjb2Rlci0+YnVpbGRlcjsKIAogICAgIC8qIG5vdGU6IHR3byBzdWNjZXNzaXZlIG1vdmVzIHNpbXBseSBjbG9zZSB0aGUgY29udG91ciB0d2ljZSAqLwotICAgIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIGJ1aWxkZXIgKTsKKyAgICBwc19idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIGJ1aWxkZXIgKTsKICAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMDsKICAgfQogCkBAIC0xNDYsOCArMTU2LDggQEAKICAgICBGVF9FcnJvciAgZXJyb3I7CiAKICAgICAvKiBkb3duY2FzdCB0aGUgb2JqZWN0IHBvaW50ZXIgKi8KLSAgICBDRjJfT3V0bGluZSAgIG91dGxpbmUgPSAoQ0YyX091dGxpbmUpY2FsbGJhY2tzOwotICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlcjsKKyAgICBDRjJfT3V0bGluZSAgb3V0bGluZSA9IChDRjJfT3V0bGluZSljYWxsYmFja3M7CisgICAgUFNfQnVpbGRlciogIGJ1aWxkZXI7CiAKIAogICAgIEZUX0FTU0VSVCggb3V0bGluZSAmJiBvdXRsaW5lLT5kZWNvZGVyICk7CkBAIC0xNTksOSArMTY5LDkgQEAKICAgICB7CiAgICAgICAvKiByZWNvcmQgdGhlIG1vdmUgYmVmb3JlIHRoZSBsaW5lOyBhbHNvIGNoZWNrIHBvaW50cyBhbmQgc2V0ICovCiAgICAgICAvKiBgcGF0aF9iZWd1bicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICBlcnJvciA9IGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDAueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQwLnkgKTsKKyAgICAgIGVycm9yID0gcHNfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDAueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDAueSApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICB7CiAgICAgICAgIGlmICggISpjYWxsYmFja3MtPmVycm9yICkKQEAgLTE3MCwxMCArMTgwLDEwIEBACiAgICAgICB9CiAgICAgfQogCi0gICAgLyogYGNmZl9idWlsZGVyX2FkZF9wb2ludDEnIGluY2x1ZGVzIGEgY2hlY2tfcG9pbnRzIGNhbGwgZm9yIG9uZSBwb2ludCAqLwotICAgIGVycm9yID0gY2ZmX2J1aWxkZXJfYWRkX3BvaW50MSggYnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQxLngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0MS55ICk7CisgICAgLyogYHBzX2J1aWxkZXJfYWRkX3BvaW50MScgaW5jbHVkZXMgYSBjaGVja19wb2ludHMgY2FsbCBmb3Igb25lIHBvaW50ICovCisgICAgZXJyb3IgPSBwc19idWlsZGVyX2FkZF9wb2ludDEoIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQxLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQxLnkgKTsKICAgICBpZiAoIGVycm9yICkKICAgICB7CiAgICAgICBpZiAoICEqY2FsbGJhY2tzLT5lcnJvciApCkBAIC0xOTAsOCArMjAwLDggQEAKICAgICBGVF9FcnJvciAgZXJyb3I7CiAKICAgICAvKiBkb3duY2FzdCB0aGUgb2JqZWN0IHBvaW50ZXIgKi8KLSAgICBDRjJfT3V0bGluZSAgIG91dGxpbmUgPSAoQ0YyX091dGxpbmUpY2FsbGJhY2tzOwotICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlcjsKKyAgICBDRjJfT3V0bGluZSAgb3V0bGluZSA9IChDRjJfT3V0bGluZSljYWxsYmFja3M7CisgICAgUFNfQnVpbGRlciogIGJ1aWxkZXI7CiAKIAogICAgIEZUX0FTU0VSVCggb3V0bGluZSAmJiBvdXRsaW5lLT5kZWNvZGVyICk7CkBAIC0yMDMsOSArMjEzLDkgQEAKICAgICB7CiAgICAgICAvKiByZWNvcmQgdGhlIG1vdmUgYmVmb3JlIHRoZSBsaW5lOyBhbHNvIGNoZWNrIHBvaW50cyBhbmQgc2V0ICovCiAgICAgICAvKiBgcGF0aF9iZWd1bicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICBlcnJvciA9IGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBidWlsZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDAueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQwLnkgKTsKKyAgICAgIGVycm9yID0gcHNfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDAueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDAueSApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICB7CiAgICAgICAgIGlmICggISpjYWxsYmFja3MtPmVycm9yICkKQEAgLTIxNSw3ICsyMjUsNyBAQAogICAgIH0KIAogICAgIC8qIHByZXBhcmUgcm9vbSBmb3IgMyBwb2ludHM6IDIgb2ZmLWN1cnZlLCAxIG9uLWN1cnZlICovCi0gICAgZXJyb3IgPSBjZmZfY2hlY2tfcG9pbnRzKCBidWlsZGVyLCAzICk7CisgICAgZXJyb3IgPSBwc19idWlsZGVyX2NoZWNrX3BvaW50cyggYnVpbGRlciwgMyApOwogICAgIGlmICggZXJyb3IgKQogICAgIHsKICAgICAgIGlmICggISpjYWxsYmFja3MtPmVycm9yICkKQEAgLTIyMywxNSArMjMzLDE1IEBACiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2ZmX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDEueCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQxLnksIDAgKTsKLSAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0Mi54LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDIueSwgMCApOwotICAgIGNmZl9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQzLngsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0My55LCAxICk7CisgICAgcHNfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQxLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy0+cHQxLnksIDAgKTsKKyAgICBwc19idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDIueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLT5wdDIueSwgMCApOworICAgIHBzX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0My54LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnB0My55LCAxICk7CiAgIH0KIAogCkBAIC0yNTMsMTEgKzI2MywxMSBAQAogCiAgIC8qIGdldCBzY2FsaW5nIGFuZCBoaW50IGZsYWcgZnJvbSBHbHlwaFNsb3QgKi8KICAgc3RhdGljIHZvaWQKLSAgY2YyX2dldFNjYWxlQW5kSGludEZsYWcoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgeF9zY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgeV9zY2FsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgICAgaGludGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgICBzY2FsZWQgKQorICBjZjJfZ2V0U2NhbGVBbmRIaW50RmxhZyggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgeF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICB5X3NjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCogICAgIGhpbnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgICBzY2FsZWQgKQogICB7CiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmJ1aWxkZXIuZ2x5cGggKTsKIApAQCAtMjY3LDggKzI3Nyw4IEBACiAKICAgICBpZiAoICpoaW50ZWQgKQogICAgIHsKLSAgICAgICp4X3NjYWxlID0gKCBkZWNvZGVyLT5idWlsZGVyLmdseXBoLT54X3NjYWxlICsgMzIgKSAvIDY0OwotICAgICAgKnlfc2NhbGUgPSAoIGRlY29kZXItPmJ1aWxkZXIuZ2x5cGgtPnlfc2NhbGUgKyAzMiApIC8gNjQ7CisgICAgICAqeF9zY2FsZSA9IEFERF9JTlQzMiggZGVjb2Rlci0+YnVpbGRlci5nbHlwaC0+eF9zY2FsZSwgMzIgKSAvIDY0OworICAgICAgKnlfc2NhbGUgPSBBRERfSU5UMzIoIGRlY29kZXItPmJ1aWxkZXIuZ2x5cGgtPnlfc2NhbGUsIDMyICkgLyA2NDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTI4NCw0NyArMjk0LDYwIEBACiAgIC8qIGdldCB1bml0cyBwZXIgZW0gZnJvbSBgRlRfRmFjZScgKi8KICAgLyogVE9ETzogc2hvdWxkIGhhbmRsZSBmb250IG1hdHJpeCBjb25jYXRlbmF0aW9uPyAqLwogICBzdGF0aWMgRlRfVVNob3J0Ci0gIGNmMl9nZXRVbml0c1BlckVtKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICBjZjJfZ2V0VW5pdHNQZXJFbSggUFNfRGVjb2RlciogIGRlY29kZXIgKQogICB7CiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmJ1aWxkZXIuZmFjZSApOwotICAgIEZUX0FTU0VSVCggZGVjb2Rlci0+YnVpbGRlci5mYWNlLT5yb290LnVuaXRzX3Blcl9FTSApOworICAgIEZUX0FTU0VSVCggZGVjb2Rlci0+YnVpbGRlci5mYWNlLT51bml0c19wZXJfRU0gKTsKIAotICAgIHJldHVybiBkZWNvZGVyLT5idWlsZGVyLmZhY2UtPnJvb3QudW5pdHNfcGVyX0VNOworICAgIHJldHVybiBkZWNvZGVyLT5idWlsZGVyLmZhY2UtPnVuaXRzX3Blcl9FTTsKICAgfQogCiAKICAgLyogTWFpbiBlbnRyeSBwb2ludDogUmVuZGVyIG9uZSBnbHlwaC4gKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4gKQorICBjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgY2hhcnN0cmluZ19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgIGNoYXJzdHJpbmdfbGVuICkKICAgewogICAgIEZUX01lbW9yeSAgbWVtb3J5OwogICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FcnJfT2s7CiAgICAgQ0YyX0ZvbnQgICBmb250OwogCisgICAgRlRfQm9vbCAgICBpc190MSA9IGRlY29kZXItPmJ1aWxkZXIuaXNfdDE7CiAKLSAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y2ZmICk7CisKKyAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYKKyAgICAgICAgICAgICAgICggaXNfdDEgfHwgZGVjb2Rlci0+Y2ZmICkgKTsKKworICAgIGlmICggaXNfdDEgJiYgIWRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApCisgICAgeworICAgICAgRlRfRVJST1IoKCAiY2YyX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MgKFR5cGUgMSk6ICIKKyAgICAgICAgICAgICAgICAgIlN1YkZvbnQgbWlzc2luZy4gVXNlIGB0MV9tYWtlX3N1YmZvbnQnIGZpcnN0XG4iICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgfQogCiAgICAgbWVtb3J5ID0gZGVjb2Rlci0+YnVpbGRlci5tZW1vcnk7CiAKICAgICAvKiBDRjIgZGF0YSBpcyBzYXZlZCBoZXJlIGFjcm9zcyBnbHlwaHMgKi8KLSAgICBmb250ID0gKENGMl9Gb250KWRlY29kZXItPmNmZi0+Y2YyX2luc3RhbmNlLmRhdGE7CisgICAgZm9udCA9IChDRjJfRm9udClkZWNvZGVyLT5jZjJfaW5zdGFuY2UtPmRhdGE7CiAKICAgICAvKiBvbiBmaXJzdCBnbHlwaCwgYWxsb2NhdGUgaW5zdGFuY2Ugc3RydWN0dXJlICovCi0gICAgaWYgKCAhZGVjb2Rlci0+Y2ZmLT5jZjJfaW5zdGFuY2UuZGF0YSApCisgICAgaWYgKCAhZGVjb2Rlci0+Y2YyX2luc3RhbmNlLT5kYXRhICkKICAgICB7Ci0gICAgICBkZWNvZGVyLT5jZmYtPmNmMl9pbnN0YW5jZS5maW5hbGl6ZXIgPQorICAgICAgZGVjb2Rlci0+Y2YyX2luc3RhbmNlLT5maW5hbGl6ZXIgPQogICAgICAgICAoRlRfR2VuZXJpY19GaW5hbGl6ZXIpY2YyX2ZyZWVfaW5zdGFuY2U7CiAKLSAgICAgIGlmICggRlRfQUxMT0MoIGRlY29kZXItPmNmZi0+Y2YyX2luc3RhbmNlLmRhdGEsCisgICAgICBpZiAoIEZUX0FMTE9DKCBkZWNvZGVyLT5jZjJfaW5zdGFuY2UtPmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBDRjJfRm9udFJlYyApICkgKQogICAgICAgICByZXR1cm4gRlRfVEhST1coIE91dF9PZl9NZW1vcnkgKTsKIAotICAgICAgZm9udCA9IChDRjJfRm9udClkZWNvZGVyLT5jZmYtPmNmMl9pbnN0YW5jZS5kYXRhOworICAgICAgZm9udCA9IChDRjJfRm9udClkZWNvZGVyLT5jZjJfaW5zdGFuY2UtPmRhdGE7CiAKICAgICAgIGZvbnQtPm1lbW9yeSA9IG1lbW9yeTsKIAorICAgICAgaWYgKCAhaXNfdDEgKQorICAgICAgICBmb250LT5jZmZsb2FkID0gKEZUX1NlcnZpY2VfQ0ZGTG9hZClkZWNvZGVyLT5jZmYtPmNmZmxvYWQ7CisKICAgICAgIC8qIGluaXRpYWxpemUgYSBjbGllbnQgb3V0bGluZSwgdG8gYmUgc2hhcmVkIGJ5IGVhY2ggZ2x5cGggcmVuZGVyZWQgKi8KICAgICAgIGNmMl9vdXRsaW5lX2luaXQoICZmb250LT5vdXRsaW5lLCBmb250LT5tZW1vcnksICZmb250LT5lcnJvciApOwogICAgIH0KQEAgLTMzNywxMyArMzYwLDEzIEBACiAgICAgewogICAgICAgLyogYnVpbGQgcGFyYW1ldGVycyBmb3IgQWRvYmUgZW5naW5lICovCiAKLSAgICAgIENGRl9CdWlsZGVyKiAgYnVpbGRlciA9ICZkZWNvZGVyLT5idWlsZGVyOwotICAgICAgQ0ZGX0RyaXZlciAgICBkcml2ZXIgID0gKENGRl9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGJ1aWxkZXItPmZhY2UgKTsKKyAgICAgIFBTX0J1aWxkZXIqICBidWlsZGVyID0gJmRlY29kZXItPmJ1aWxkZXI7CisgICAgICBQU19Ecml2ZXIgICAgZHJpdmVyICA9IChQU19Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGJ1aWxkZXItPmZhY2UgKTsKIAogICAgICAgRlRfQm9vbCAgbm9fc3RlbV9kYXJrZW5pbmdfZHJpdmVyID0KICAgICAgICAgICAgICAgICAgZHJpdmVyLT5ub19zdGVtX2RhcmtlbmluZzsKICAgICAgIEZUX0NoYXIgIG5vX3N0ZW1fZGFya2VuaW5nX2ZvbnQgPQotICAgICAgICAgICAgICAgICBidWlsZGVyLT5mYWNlLT5yb290LmludGVybmFsLT5ub19zdGVtX2RhcmtlbmluZzsKKyAgICAgICAgICAgICAgICAgYnVpbGRlci0+ZmFjZS0+aW50ZXJuYWwtPm5vX3N0ZW1fZGFya2VuaW5nOwogCiAgICAgICAvKiBsb2NhbCBlcnJvciAqLwogICAgICAgRlRfRXJyb3IgICAgICAgZXJyb3IyID0gRlRfRXJyX09rOwpAQCAtMzcyLDggKzM5NSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoaW50ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjYWxlZCApOwogCi0gICAgICAvKiBjb3B5IGlzQ0ZGMiBib29sZWFuIGZyb20gVFRfRmFjZSB0byBDRjJfRm9udCAqLwotICAgICAgZm9udC0+aXNDRkYyID0gYnVpbGRlci0+ZmFjZS0+aXNfY2ZmMjsKKyAgICAgIGlmICggaXNfdDEgKQorICAgICAgICBmb250LT5pc0NGRjIgPSBGQUxTRTsKKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogY29weSBpc0NGRjIgYm9vbGVhbiBmcm9tIFRUX0ZhY2UgdG8gQ0YyX0ZvbnQgKi8KKyAgICAgICAgZm9udC0+aXNDRkYyID0gKChUVF9GYWNlKWJ1aWxkZXItPmZhY2UpLT5pc19jZmYyOworICAgICAgfQorICAgICAgZm9udC0+aXNUMSA9IGlzX3QxOwogCiAgICAgICBmb250LT5yZW5kZXJpbmdGbGFncyA9IDA7CiAgICAgICBpZiAoIGhpbnRlZCApCkBAIC00MTYsNyArNDQ1LDcgQEAKIAogICAvKiBnZXQgcG9pbnRlciB0byBjdXJyZW50IEZyZWVUeXBlIHN1YmZvbnQgKGJhc2VkIG9uIGN1cnJlbnQgZ2x5cGhJRCkgKi8KICAgRlRfTE9DQUxfREVGKCBDRkZfU3ViRm9udCApCi0gIGNmMl9nZXRTdWJmb250KCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICBjZjJfZ2V0U3ViZm9udCggUFNfRGVjb2RlciogIGRlY29kZXIgKQogICB7CiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOwogCkBAIC00MjYsNyArNDU1LDcgQEAKIAogICAvKiBnZXQgcG9pbnRlciB0byBWU3RvcmUgc3RydWN0dXJlICovCiAgIEZUX0xPQ0FMX0RFRiggQ0ZGX1ZTdG9yZSApCi0gIGNmMl9nZXRWU3RvcmUoIENGRl9EZWNvZGVyKiAgZGVjb2RlciApCisgIGNmMl9nZXRWU3RvcmUoIFBTX0RlY29kZXIqICBkZWNvZGVyICkKICAgewogICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5jZmYgKTsKIApAQCAtNDM2LDcgKzQ2NSw3IEBACiAKICAgLyogZ2V0IG1heHN0YWNrIHZhbHVlIGZyb20gQ0ZGMiBUb3AgRElDVCAqLwogICBGVF9MT0NBTF9ERUYoIEZUX1VJbnQgKQotICBjZjJfZ2V0TWF4c3RhY2soIENGRl9EZWNvZGVyKiAgZGVjb2RlciApCisgIGNmMl9nZXRNYXhzdGFjayggUFNfRGVjb2RlciogIGRlY29kZXIgKQogICB7CiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmNmZiApOwogCkBAIC00NTAsMjUgKzQ3OSwzMyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBOb3RlOiBVc2VzIEZUX0ZpeGVkIG5vdCBDRjJfRml4ZWQgZm9yIHRoZSB2ZWN0b3IuICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKLSAgY2YyX2dldE5vcm1hbGl6ZWRWZWN0b3IoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKKyAgY2YyX2dldE5vcm1hbGl6ZWRWZWN0b3IoIFBTX0RlY29kZXIqICBkZWNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgICpsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogICAgKnZlYyApCiAgIHsKKyAgICBUVF9GYWNlICAgICAgICAgICAgICAgICAgZmFjZTsKKyAgICBGVF9TZXJ2aWNlX011bHRpTWFzdGVycyAgbW07CisKKwogICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5idWlsZGVyLmZhY2UgKTsKICAgICBGVF9BU1NFUlQoIHZlYyAmJiBsZW4gKTsKKyAgICBGVF9BU1NFUlQoICFkZWNvZGVyLT5idWlsZGVyLmlzX3QxICk7CiAKLSAgICByZXR1cm4gY2ZmX2dldF92YXJfYmxlbmQoIGRlY29kZXItPmJ1aWxkZXIuZmFjZSwgbGVuLCBOVUxMLCB2ZWMsIE5VTEwgKTsKKyAgICBmYWNlID0gKFRUX0ZhY2UpZGVjb2Rlci0+YnVpbGRlci5mYWNlOworICAgIG1tICAgPSAoRlRfU2VydmljZV9NdWx0aU1hc3RlcnMpZmFjZS0+bW07CisKKyAgICByZXR1cm4gbW0tPmdldF92YXJfYmxlbmQoIEZUX0ZBQ0UoIGZhY2UgKSwgbGVuLCBOVUxMLCB2ZWMsIE5VTEwgKTsKICAgfQogI2VuZGlmCiAKIAogICAvKiBnZXQgYHlfcHBlbScgZnJvbSBgQ0ZGX1NpemUnICovCiAgIEZUX0xPQ0FMX0RFRiggQ0YyX0ZpeGVkICkKLSAgY2YyX2dldFBwZW1ZKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICBjZjJfZ2V0UHBlbVkoIFBTX0RlY29kZXIqICBkZWNvZGVyICkKICAgewotICAgIEZUX0FTU0VSVCggZGVjb2RlciAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgIGRlY29kZXItPmJ1aWxkZXIuZmFjZSAgICAgICAgICAgICYmCi0gICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGVyLmZhY2UtPnJvb3Quc2l6ZSApOworICAgIEZUX0FTU0VSVCggZGVjb2RlciAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGVyLmZhY2UgICAgICAgJiYKKyAgICAgICAgICAgICAgIGRlY29kZXItPmJ1aWxkZXIuZmFjZS0+c2l6ZSApOwogCiAgICAgLyoKICAgICAgKiBOb3RlIHRoYXQgYHlfcHBlbScgY2FuIGJlIHplcm8gaWYgdGhlcmUgd2Fzbid0IGEgY2FsbCB0bwpAQCAtNDgwLDcgKzUxNyw3IEBACiAgICAgICoKICAgICAgKi8KICAgICByZXR1cm4gY2YyX2ludFRvRml4ZWQoCi0gICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5mYWNlLT5yb290LnNpemUtPm1ldHJpY3MueV9wcGVtICk7CisgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5mYWNlLT5zaXplLT5tZXRyaWNzLnlfcHBlbSApOwogICB9CiAKIApAQCAtNDg4LDcgKzUyNSw3IEBACiAgIC8qIEZyZWVUeXBlIHN0b3JlcyB0aGVzZSBhcyBpbnRlZ2VyIGZvbnQgdW5pdHMgICAgICAgKi8KICAgLyogKG5vdGU6IHZhcmlhYmxlIG5hbWVzIHNlZW0gc3dhcHBlZCkgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCi0gIGNmMl9nZXRTdGRWVyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICkKKyAgY2YyX2dldFN0ZFZXKCBQU19EZWNvZGVyKiAgZGVjb2RlciApCiAgIHsKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ICk7CiAKQEAgLTQ5OCw3ICs1MzUsNyBAQAogCiAKICAgRlRfTE9DQUxfREVGKCBDRjJfRml4ZWQgKQotICBjZjJfZ2V0U3RkSFcoIENGRl9EZWNvZGVyKiAgZGVjb2RlciApCisgIGNmMl9nZXRTdGRIVyggUFNfRGVjb2RlciogIGRlY29kZXIgKQogICB7CiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOwogCkBAIC01MDksMTAgKzU0NiwxMCBAQAogCiAgIC8qIG5vdGU6IEZyZWVUeXBlIHN0b3JlcyAxMDAwIHRpbWVzIHRoZSBhY3R1YWwgdmFsdWUgZm9yIGBCbHVlU2NhbGUnICovCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCi0gIGNmMl9nZXRCbHVlTWV0cmljcyggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgYmx1ZVNjYWxlLAotICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgYmx1ZVNoaWZ0LAotICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgYmx1ZUZ1enogKQorICBjZjJfZ2V0Qmx1ZU1ldHJpY3MoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICBibHVlU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgIGJsdWVTaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgYmx1ZUZ1enogKQogICB7CiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOwogCkBAIC01MjksOSArNTY2LDkgQEAKICAgLyogZ2V0IGJsdWUgdmFsdWVzIGNvdW50cyBhbmQgYXJyYXlzOyB0aGUgRnJlZVR5cGUgcGFyc2VyIGhhcyB2YWxpZGF0ZWQgKi8KICAgLyogdGhlIGNvdW50cyBhbmQgdmVyaWZpZWQgdGhhdCBlYWNoIGlzIGFuIGV2ZW4gbnVtYmVyICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgY2YyX2dldEJsdWVWYWx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKQorICBjZjJfZ2V0Qmx1ZVZhbHVlcyggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAqZGF0YSApCiAgIHsKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ICk7CiAKQEAgLTU0Miw5ICs1NzksOSBAQAogCiAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgY2YyX2dldE90aGVyQmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKQorICBjZjJfZ2V0T3RoZXJCbHVlcyggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAqZGF0YSApCiAgIHsKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ICk7CiAKQEAgLTU1NSw5ICs1OTIsOSBAQAogCiAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgY2YyX2dldEZhbWlseUJsdWVzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiAgICAgICBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKQorICBjZjJfZ2V0RmFtaWx5Qmx1ZXMoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAqZGF0YSApCiAgIHsKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ICk7CiAKQEAgLTU2OCw5ICs2MDUsOSBAQAogCiAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgY2YyX2dldEZhbWlseU90aGVyQmx1ZXMoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAgKmRhdGEgKQorICBjZjJfZ2V0RmFtaWx5T3RoZXJCbHVlcyggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAqZGF0YSApCiAgIHsKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ICk7CiAKQEAgLTU4MSw3ICs2MTgsNyBAQAogCiAKICAgRlRfTE9DQUxfREVGKCBDRjJfSW50ICkKLSAgY2YyX2dldExhbmd1YWdlR3JvdXAoIENGRl9EZWNvZGVyKiAgZGVjb2RlciApCisgIGNmMl9nZXRMYW5ndWFnZUdyb3VwKCBQU19EZWNvZGVyKiAgZGVjb2RlciApCiAgIHsKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgJiYgZGVjb2Rlci0+Y3VycmVudF9zdWJmb250ICk7CiAKQEAgLTU5Miw5ICs2MjksOSBAQAogICAvKiBjb252ZXJ0IHVuYmlhc2VkIHN1YnJvdXRpbmUgaW5kZXggdG8gYENGMl9CdWZmZXInIGFuZCAqLwogICAvKiByZXR1cm4gMCBvbiBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIENGMl9JbnQgKQotICBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBzdWJyTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICBidWYgKQorICBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgc3Vick51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICBidWYgKQogICB7CiAgICAgQ0YyX1VJbnQgIGlkeDsKIApAQCAtNjIwLDkgKzY1Nyw5IEBACiAgIC8qIGNvbnZlcnQgQWRvYmVTdGFuZGFyZEVuY29kaW5nIGNvZGUgdG8gQ0YyX0J1ZmZlcjsgKi8KICAgLyogdXNlZCBmb3Igc2VhYyBjb21wb25lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKLSAgY2YyX2dldFNlYWNDb21wb25lbnQoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgICAgY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgYnVmICkKKyAgY2YyX2dldFNlYWNDb21wb25lbnQoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgYnVmICkKICAgewogICAgIENGMl9JbnQgICBnaWQ7CiAgICAgRlRfQnl0ZSogIGNoYXJzdHJpbmc7CkBAIC02MzEsMTMgKzY2OCwxNCBAQAogCiAKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgKTsKKyAgICBGVF9BU1NFUlQoICFkZWNvZGVyLT5idWlsZGVyLmlzX3QxICk7CiAKICAgICBGVF9aRVJPKCBidWYgKTsKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKICAgICAvKiBJbmNyZW1lbnRhbCBmb250cyBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHZhbGlkIGNoYXJzZXRzLiAgICAgICAgKi8KICAgICAvKiBUaGV5IHVzZSB0aGUgY2hhcmFjdGVyIGNvZGUsIG5vdCB0aGUgZ2x5cGggaW5kZXgsIGluIHRoaXMgY2FzZS4gKi8KLSAgICBpZiAoIGRlY29kZXItPmJ1aWxkZXIuZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyAgICBpZiAoIGRlY29kZXItPmJ1aWxkZXIuZmFjZS0+aW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSApCiAgICAgICBnaWQgPSBjb2RlOwogICAgIGVsc2UKICNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCkBAIC02NDcsMTAgKzY4NSwxMCBAQAogICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CiAgICAgfQogCi0gICAgZXJyb3IgPSBjZmZfZ2V0X2dseXBoX2RhdGEoIGRlY29kZXItPmJ1aWxkZXIuZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENGMl9VSW50KWdpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4gKTsKKyAgICBlcnJvciA9IGRlY29kZXItPmdldF9nbHlwaF9jYWxsYmFjayggKFRUX0ZhY2UpZGVjb2Rlci0+YnVpbGRlci5mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0YyX1VJbnQpZ2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbiApOwogICAgIC8qIFRPRE86IGZvciBub3csIGp1c3QgcGFzcyB0aGUgRnJlZVR5cGUgZXJyb3IgdGhyb3VnaCAqLwogICAgIGlmICggZXJyb3IgKQogICAgICAgcmV0dXJuIGVycm9yOwpAQCAtNjY3LDIxICs3MDUsOTIgQEAKIAogCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCi0gIGNmMl9mcmVlU2VhY0NvbXBvbmVudCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICAgYnVmICkKKyAgY2YyX2ZyZWVTZWFjQ29tcG9uZW50KCBQU19EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgYnVmICkKICAgewogICAgIEZUX0FTU0VSVCggZGVjb2RlciApOworICAgIEZUX0FTU0VSVCggIWRlY29kZXItPmJ1aWxkZXIuaXNfdDEgKTsKIAotICAgIGNmZl9mcmVlX2dseXBoX2RhdGEoIGRlY29kZXItPmJ1aWxkZXIuZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQnl0ZSoqKSZidWYtPnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VTG9uZykoIGJ1Zi0+ZW5kIC0gYnVmLT5zdGFydCApICk7CisgICAgZGVjb2Rlci0+ZnJlZV9nbHlwaF9jYWxsYmFjayggKFRUX0ZhY2UpZGVjb2Rlci0+YnVpbGRlci5mYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKiopJmJ1Zi0+c3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKSggYnVmLT5lbmQgLSBidWYtPnN0YXJ0ICkgKTsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmMl9nZXRUMVNlYWNDb21wb25lbnQoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICBidWYgKQorICB7CisgICAgRlRfRGF0YSAgIGdseXBoX2RhdGE7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworICAgIFQxX0ZhY2UgICBmYWNlICA9IChUMV9GYWNlKWRlY29kZXItPmJ1aWxkZXIuZmFjZTsKKyAgICBUMV9Gb250ICAgdHlwZTEgPSAmZmFjZS0+dHlwZTE7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjICAqaW5jID0KKyAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZTsKKworCisgICAgLyogRm9yIGluY3JlbWVudGFsIGZvbnRzIGdldCB0aGUgY2hhcmFjdGVyIGRhdGEgdXNpbmcgdGhlICovCisgICAgLyogY2FsbGJhY2sgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBpbmMgKQorICAgICAgZXJyb3IgPSBpbmMtPmZ1bmNzLT5nZXRfZ2x5cGhfZGF0YSggaW5jLT5vYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgJmdseXBoX2RhdGEgKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAvKiBGb3Igb3JkaW5hcnkgZm9udHMgZ2V0IHRoZSBjaGFyYWN0ZXIgZGF0YSBzdG9yZWQgaW4gdGhlIGZhY2UgcmVjb3JkLiAqLworICAgIHsKKyAgICAgIGdseXBoX2RhdGEucG9pbnRlciA9IHR5cGUxLT5jaGFyc3RyaW5nc1tnbHlwaF9pbmRleF07CisgICAgICBnbHlwaF9kYXRhLmxlbmd0aCAgPSAoRlRfSW50KXR5cGUxLT5jaGFyc3RyaW5nc19sZW5bZ2x5cGhfaW5kZXhdOworICAgIH0KKworICAgIGlmICggIWVycm9yICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgY2hhcnN0cmluZ19iYXNlID0gKEZUX0J5dGUqKWdseXBoX2RhdGEucG9pbnRlcjsKKyAgICAgIEZUX1VMb25nICBjaGFyc3RyaW5nX2xlbiAgPSAoRlRfVUxvbmcpZ2x5cGhfZGF0YS5sZW5ndGg7CisKKworICAgICAgRlRfQVNTRVJUKCBjaGFyc3RyaW5nX2Jhc2UgKyBjaGFyc3RyaW5nX2xlbiA+PSBjaGFyc3RyaW5nX2Jhc2UgKTsKKworICAgICAgRlRfWkVSTyggYnVmICk7CisgICAgICBidWYtPnN0YXJ0ID0KKyAgICAgIGJ1Zi0+cHRyICAgPSBjaGFyc3RyaW5nX2Jhc2U7CisgICAgICBidWYtPmVuZCAgID0gY2hhcnN0cmluZ19iYXNlICsgY2hhcnN0cmluZ19sZW47CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfZnJlZVQxU2VhY0NvbXBvbmVudCggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgYnVmICkKKyAgeworICAgIFQxX0ZhY2UgIGZhY2U7CisgICAgRlRfRGF0YSAgZGF0YTsKKworCisgICAgRlRfQVNTRVJUKCBkZWNvZGVyICk7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgZmFjZSA9IChUMV9GYWNlKWRlY29kZXItPmJ1aWxkZXIuZmFjZTsKKworICAgIGRhdGEucG9pbnRlciA9IGJ1Zi0+c3RhcnQ7CisgICAgZGF0YS5sZW5ndGggID0gKEZUX0ludCkoIGJ1Zi0+ZW5kIC0gYnVmLT5zdGFydCApOworCisgICAgaWYgKCBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UgKQorICAgICAgZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlLT5mdW5jcy0+ZnJlZV9nbHlwaF9kYXRhKAorICAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPm9iamVjdCwKKyAgICAgICAgJmRhdGEgKTsKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCiAgIH0KIAogCiAgIEZUX0xPQ0FMX0RFRiggQ0YyX0ludCApCi0gIGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBzdWJyTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGJ1ZiApCisgIGNmMl9pbml0TG9jYWxSZWdpb25CdWZmZXIoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgc3Vick51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgIGJ1ZiApCiAgIHsKICAgICBDRjJfVUludCAgaWR4OwogCkBAIC02OTYsMTYgKzgwNSw0MiBAQAogCiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyLT5sb2NhbHMgKTsKIAotICAgIGJ1Zi0+c3RhcnQgPQotICAgIGJ1Zi0+cHRyICAgPSBkZWNvZGVyLT5sb2NhbHNbaWR4XTsKLSAgICBidWYtPmVuZCAgID0gZGVjb2Rlci0+bG9jYWxzW2lkeCArIDFdOworICAgIGJ1Zi0+c3RhcnQgPSBkZWNvZGVyLT5sb2NhbHNbaWR4XTsKKworICAgIGlmICggZGVjb2Rlci0+YnVpbGRlci5pc190MSApCisgICAgeworICAgICAgLyogVGhlIFR5cGUgMSBkcml2ZXIgc3RvcmVzIHN1YnJvdXRpbmVzIHdpdGhvdXQgdGhlIHNlZWQgYnl0ZXMuICovCisgICAgICAvKiBUaGUgQ0lEIGRyaXZlciBzdG9yZXMgc3Vicm91dGluZXMgd2l0aCBzZWVkIGJ5dGVzLiAgVGhpcyAgICAgKi8KKyAgICAgIC8qIGNhc2UgaXMgdGFrZW4gY2FyZSBvZiB3aGVuIGRlY29kZXItPnN1YnJzX2xlbiA9PSAwLiAgICAgICAgICAqLworICAgICAgaWYgKCBkZWNvZGVyLT5sb2NhbHNfbGVuICkKKyAgICAgICAgYnVmLT5lbmQgPSBidWYtPnN0YXJ0ICsgZGVjb2Rlci0+bG9jYWxzX2xlbltpZHhdOworICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBXZSBhcmUgdXNpbmcgc3Vicm91dGluZXMgZnJvbSBhIENJRCBmb250LiAgV2UgbXVzdCBhZGp1c3QgKi8KKyAgICAgICAgLyogZm9yIHRoZSBzZWVkIGJ5dGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGJ1Zi0+c3RhcnQgKz0gKCBkZWNvZGVyLT5sZW5JViA+PSAwID8gZGVjb2Rlci0+bGVuSVYgOiAwICk7CisgICAgICAgIGJ1Zi0+ZW5kICAgID0gZGVjb2Rlci0+bG9jYWxzW2lkeCArIDFdOworICAgICAgfQorCisgICAgICBpZiAoICFidWYtPnN0YXJ0ICkKKyAgICAgIHsKKyAgICAgICAgRlRfRVJST1IoKCAiY2YyX2luaXRMb2NhbFJlZ2lvbkJ1ZmZlciAoVHlwZSAxIG1vZGUpOiIKKyAgICAgICAgICAgICAgICAgICAiIGludm9raW5nIGVtcHR5IHN1YnJzXG4iICkpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgYnVmLT5lbmQgPSBkZWNvZGVyLT5sb2NhbHNbaWR4ICsgMV07CisgICAgfQorCisgICAgYnVmLT5wdHIgPSBidWYtPnN0YXJ0OwogCiAgICAgcmV0dXJuIEZBTFNFOyAgICAgIC8qIHN1Y2Nlc3MgKi8KICAgfQogCiAKICAgRlRfTE9DQUxfREVGKCBDRjJfRml4ZWQgKQotICBjZjJfZ2V0RGVmYXVsdFdpZHRoWCggQ0ZGX0RlY29kZXIqICBkZWNvZGVyICkKKyAgY2YyX2dldERlZmF1bHRXaWR0aFgoIFBTX0RlY29kZXIqICBkZWNvZGVyICkKICAgewogICAgIEZUX0FTU0VSVCggZGVjb2RlciAmJiBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQgKTsKIApAQCAtNzE1LDcgKzg1MCw3IEBACiAKIAogICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCi0gIGNmMl9nZXROb21pbmFsV2lkdGhYKCBDRkZfRGVjb2RlciogIGRlY29kZXIgKQorICBjZjJfZ2V0Tm9taW5hbFdpZHRoWCggUFNfRGVjb2RlciogIGRlY29kZXIgKQogICB7CiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICYmIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udCApOwogCkBAIC03MjcsNyArODYyLDcgQEAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgY2YyX291dGxpbmVfcmVzZXQoIENGMl9PdXRsaW5lICBvdXRsaW5lICkKICAgewotICAgIENGRl9EZWNvZGVyKiAgZGVjb2RlciA9IG91dGxpbmUtPmRlY29kZXI7CisgICAgUFNfRGVjb2RlciogIGRlY29kZXIgPSBvdXRsaW5lLT5kZWNvZGVyOwogCiAKICAgICBGVF9BU1NFUlQoIGRlY29kZXIgKTsKQEAgLTc0MSwxMiArODc2LDEyIEBACiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIGNmMl9vdXRsaW5lX2Nsb3NlKCBDRjJfT3V0bGluZSAgb3V0bGluZSApCiAgIHsKLSAgICBDRkZfRGVjb2RlciogIGRlY29kZXIgPSBvdXRsaW5lLT5kZWNvZGVyOworICAgIFBTX0RlY29kZXIqICBkZWNvZGVyID0gb3V0bGluZS0+ZGVjb2RlcjsKIAogCiAgICAgRlRfQVNTRVJUKCBkZWNvZGVyICk7CiAKLSAgICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCAmZGVjb2Rlci0+YnVpbGRlciApOworICAgIHBzX2J1aWxkZXJfY2xvc2VfY29udG91ciggJmRlY29kZXItPmJ1aWxkZXIgKTsKIAogICAgIEZUX0dseXBoTG9hZGVyX0FkZCggZGVjb2Rlci0+YnVpbGRlci5sb2FkZXIgKTsKICAgfQpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3BzZnQuaCBiL3NyYy9wc2F1eC9wc2Z0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxNzIxMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wc2F1eC9wc2Z0LmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzZnQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBHbHVlIENvbXBvbmVudCB0byBBZG9iZSdzIEludGVycHJldGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIFBTRlRfSF8KKyNkZWZpbmUgUFNGVF9IXworCisKKyNpbmNsdWRlICJwc3R5cGVzLmgiCisKKworICAvKiBUT0RPOiBkaXNhYmxlIGFzc2VydHMgZm9yIG5vdyAqLworI2RlZmluZSBDRjJfTkRFQlVHCisKKworI2luY2x1ZGUgRlRfU1lTVEVNX0gKKworI2luY2x1ZGUgInBzZ2x1ZS5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSCAgICAvKiBmb3IgUFNfRGVjb2RlciAqLworCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2YyX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICBjaGFyc3RyaW5nX2xlbiApOworCisgIEZUX0xPQ0FMKCBDRkZfU3ViRm9udCApCisgIGNmMl9nZXRTdWJmb250KCBQU19EZWNvZGVyKiAgZGVjb2RlciApOworCisgIEZUX0xPQ0FMKCBDRkZfVlN0b3JlICkKKyAgY2YyX2dldFZTdG9yZSggUFNfRGVjb2RlciogIGRlY29kZXIgKTsKKworICBGVF9MT0NBTCggRlRfVUludCApCisgIGNmMl9nZXRNYXhzdGFjayggUFNfRGVjb2RlciogIGRlY29kZXIgKTsKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2YyX2dldE5vcm1hbGl6ZWRWZWN0b3IoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICAgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgICp2ZWMgKTsKKyNlbmRpZgorCisgIEZUX0xPQ0FMKCBDRjJfRml4ZWQgKQorICBjZjJfZ2V0UHBlbVkoIFBTX0RlY29kZXIqICBkZWNvZGVyICk7CisgIEZUX0xPQ0FMKCBDRjJfRml4ZWQgKQorICBjZjJfZ2V0U3RkVlcoIFBTX0RlY29kZXIqICBkZWNvZGVyICk7CisgIEZUX0xPQ0FMKCBDRjJfRml4ZWQgKQorICBjZjJfZ2V0U3RkSFcoIFBTX0RlY29kZXIqICBkZWNvZGVyICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfZ2V0Qmx1ZU1ldHJpY3MoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICBibHVlU2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgIGJsdWVTaGlmdCwKKyAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgYmx1ZUZ1enogKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfZ2V0Qmx1ZVZhbHVlcyggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAqZGF0YSApOworICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9nZXRPdGhlckJsdWVzKCBQU19EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyogICAgICpkYXRhICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2dldEZhbWlseUJsdWVzKCBQU19EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zKiAgICAgKmRhdGEgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfZ2V0RmFtaWx5T3RoZXJCbHVlcyggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICAgICAqZGF0YSApOworCisgIEZUX0xPQ0FMKCBDRjJfSW50ICkKKyAgY2YyX2dldExhbmd1YWdlR3JvdXAoIFBTX0RlY29kZXIqICBkZWNvZGVyICk7CisKKyAgRlRfTE9DQUwoIENGMl9JbnQgKQorICBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgICAgc3Vick51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9CdWZmZXIgICBidWYgKTsKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2YyX2dldFNlYWNDb21wb25lbnQoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgYnVmICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2ZyZWVTZWFjQ29tcG9uZW50KCBQU19EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgYnVmICk7CisgIEZUX0xPQ0FMKCBDRjJfSW50ICkKKyAgY2YyX2luaXRMb2NhbFJlZ2lvbkJ1ZmZlciggUFNfRGVjb2RlciogIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgICBzdWJyTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgYnVmICk7CisKKyAgRlRfTE9DQUwoIENGMl9GaXhlZCApCisgIGNmMl9nZXREZWZhdWx0V2lkdGhYKCBQU19EZWNvZGVyKiAgZGVjb2RlciApOworICBGVF9MT0NBTCggQ0YyX0ZpeGVkICkKKyAgY2YyX2dldE5vbWluYWxXaWR0aFgoIFBTX0RlY29kZXIqICBkZWNvZGVyICk7CisKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZjJfZ2V0VDFTZWFjQ29tcG9uZW50KCBQU19EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgYnVmICk7CisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2YyX2ZyZWVUMVNlYWNDb21wb25lbnQoIFBTX0RlY29kZXIqICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgIGJ1ZiApOworCisgIC8qCisgICAqIEZyZWVUeXBlIGNsaWVudCBvdXRsaW5lCisgICAqCisgICAqIHByb2Nlc3Mgb3V0cHV0IGZyb20gdGhlIGNoYXJzdHJpbmcgaW50ZXJwcmV0ZXIKKyAgICovCisgIHR5cGVkZWYgc3RydWN0ICBDRjJfT3V0bGluZVJlY18KKyAgeworICAgIENGMl9PdXRsaW5lQ2FsbGJhY2tzUmVjICByb290OyAgICAgICAgLyogYmFzZSBjbGFzcyBtdXN0IGJlIGZpcnN0ICovCisgICAgUFNfRGVjb2RlciogICAgICAgICAgICAgIGRlY29kZXI7CisKKyAgfSBDRjJfT3V0bGluZVJlYywgKkNGMl9PdXRsaW5lOworCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfb3V0bGluZV9yZXNldCggQ0YyX091dGxpbmUgIG91dGxpbmUgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZjJfb3V0bGluZV9jbG9zZSggQ0YyX091dGxpbmUgIG91dGxpbmUgKTsKKworCitGVF9FTkRfSEVBREVSCisKKworI2VuZGlmIC8qIFBTRlRfSF8gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZ2x1ZS5oIGIvc3JjL3BzYXV4L3BzZ2x1ZS5oCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIHNyYy9jZmYvY2YyZ2x1ZS5oCnJlbmFtZSB0byBzcmMvcHNhdXgvcHNnbHVlLmgKaW5kZXggNTZhN2MyNC4uNTU0NWUxMiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJnbHVlLmgKKysrIGIvc3JjL3BzYXV4L3BzZ2x1ZS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2YyZ2x1ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzZ2x1ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZG9iZSdzIGNvZGUgZm9yIHNoYXJlZCBzdHVmZiAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM2LDE1ICszNiwxNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIENGMkdMVUVfSF8KLSNkZWZpbmUgQ0YyR0xVRV9IXworI2lmbmRlZiBQU0dMVUVfSF8KKyNkZWZpbmUgUFNHTFVFX0hfCiAKIAogLyogY29tbW9uIGluY2x1ZGVzIGZvciBvdGhlciBtb2R1bGVzICovCi0jaW5jbHVkZSAiY2YyZXJyb3IuaCIKLSNpbmNsdWRlICJjZjJmaXhlZC5oIgotI2luY2x1ZGUgImNmMmFycnN0LmgiCi0jaW5jbHVkZSAiY2YycmVhZC5oIgorI2luY2x1ZGUgInBzZXJyb3IuaCIKKyNpbmNsdWRlICJwc2ZpeGVkLmgiCisjaW5jbHVkZSAicHNhcnJzdC5oIgorI2luY2x1ZGUgInBzcmVhZC5oIgogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtMTM4LDcgKzEzOCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIENGMkdMVUVfSF8gKi8KKyNlbmRpZiAvKiBQU0dMVUVfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyaGludHMuYyBiL3NyYy9wc2F1eC9wc2hpbnRzLmMKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gc3JjL2NmZi9jZjJoaW50cy5jCnJlbmFtZSB0byBzcmMvcHNhdXgvcHNoaW50cy5jCmluZGV4IGM4ZjdkZmUuLjM2MTUxOTYgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyaGludHMuYworKysgYi9zcmMvcHNhdXgvcHNoaW50cy5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2YyaGludHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzaGludHMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZG9iZSdzIGNvZGUgZm9yIGhhbmRsaW5nIENGRiBoaW50cyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM2LDEzICszNiwxMyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaW5jbHVkZSAiY2YyZnQuaCIKKyNpbmNsdWRlICJwc2Z0LmgiCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICiAKLSNpbmNsdWRlICJjZjJnbHVlLmgiCi0jaW5jbHVkZSAiY2YyZm9udC5oIgotI2luY2x1ZGUgImNmMmhpbnRzLmgiCi0jaW5jbHVkZSAiY2YyaW50cnAuaCIKKyNpbmNsdWRlICJwc2dsdWUuaCIKKyNpbmNsdWRlICJwc2ZvbnQuaCIKKyNpbmNsdWRlICJwc2hpbnRzLmgiCisjaW5jbHVkZSAicHNpbnRycC5oIgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03NCw4ICs3NCw4IEBACiAgICAgLyogY3Jvc3MgcHJvZHVjdCBvZiBwdDEgcG9zaXRpb24gZnJvbSBvcmlnaW4gd2l0aCBwdDIgcG9zaXRpb24gZnJvbSAgKi8KICAgICAvKiBwdDE7IHdlIHJlZHVjZSB0aGUgcHJlY2lzaW9uIHNvIHRoYXQgdGhlIHJlc3VsdCBmaXRzIGludG8gMzIgYml0cyAqLwogCi0gICAgcmV0dXJuICggeDEgPj4gMTYgKSAqICggKCB5MiAtIHkxICkgPj4gMTYgKSAtCi0gICAgICAgICAgICggeTEgPj4gMTYgKSAqICggKCB4MiAtIHgxICkgPj4gMTYgKTsKKyAgICByZXR1cm4gKCB4MSA+PiAxNiApICogKCBTVUJfSU5UMzIoIHkyLCB5MSApID4+IDE2ICkgLQorICAgICAgICAgICAoIHkxID4+IDE2ICkgKiAoIFNVQl9JTlQzMiggeDIsIHgxICkgPj4gMTYgKTsKICAgfQogCiAKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtSGludEFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFN0ZW1IaW50ICk7CiAKLSAgICB3aWR0aCA9IHN0ZW1IaW50LT5tYXggLSBzdGVtSGludC0+bWluOworICAgIHdpZHRoID0gU1VCX0lOVDMyKCBzdGVtSGludC0+bWF4LCBzdGVtSGludC0+bWluICk7CiAKICAgICBpZiAoIHdpZHRoID09IGNmMl9pbnRUb0ZpeGVkKCAtMjEgKSApCiAgICAgewpAQCAtMTg1LDExICsxODUsMTEgQEAKICAgICAvKiBkYXJrZW5pbmcuICBCb3R0b21zIGFyZSBub3QgY2hhbmdlZDsgdG9wcyBhcmUgaW5jcmVtZW50ZWQgYnkgdHdpY2UgKi8KICAgICAvKiBgZGFya2VuWScuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoIGNmMl9oaW50X2lzVG9wKCBoaW50ICkgKQotICAgICAgaGludC0+Y3NDb29yZCArPSAyICogZm9udC0+ZGFya2VuWTsKKyAgICAgIGhpbnQtPmNzQ29vcmQgPSBBRERfSU5UMzIoIGhpbnQtPmNzQ29vcmQsIDIgKiBmb250LT5kYXJrZW5ZICk7CiAKLSAgICBoaW50LT5jc0Nvb3JkICs9IGhpbnRPcmlnaW47Ci0gICAgaGludC0+c2NhbGUgICAgPSBzY2FsZTsKLSAgICBoaW50LT5pbmRleCAgICA9IGluZGV4U3RlbUhpbnQ7ICAgLyogaW5kZXggaW4gb3JpZ2luYWwgc3RlbSBoaW50IGFycmF5ICovCisgICAgaGludC0+Y3NDb29yZCA9IEFERF9JTlQzMiggaGludC0+Y3NDb29yZCwgaGludE9yaWdpbiApOworICAgIGhpbnQtPnNjYWxlICAgPSBzY2FsZTsKKyAgICBoaW50LT5pbmRleCAgID0gaW5kZXhTdGVtSGludDsgICAvKiBpbmRleCBpbiBvcmlnaW5hbCBzdGVtIGhpbnQgYXJyYXkgKi8KIAogICAgIC8qIGlmIG9yaWdpbmFsIHN0ZW0gaGludCBoYXMgYmVlbiB1c2VkLCB1c2UgdGhlIHNhbWUgcG9zaXRpb24gKi8KICAgICBpZiAoIGhpbnQtPmZsYWdzICE9IDAgJiYgc3RlbUhpbnQtPnVzZWQgKQpAQCAtMjk5LDYgKzI5OSwzNiBAQAogICB9CiAKIAorICBzdGF0aWMgdm9pZAorICBjZjJfaGludG1hcF9kdW1wKCBDRjJfSGludE1hcCAgaGludG1hcCApCisgIHsKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIENGMl9VSW50ICBpOworCisKKyAgICBGVF9UUkFDRTYoKCAiICBpbmRleCAgY3NDb29yZCAgZHNDb29yZCAgc2NhbGUgIGZsYWdzXG4iICkpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBoaW50bWFwLT5jb3VudDsgaSsrICkKKyAgICB7CisgICAgICBDRjJfSGludCAgaGludCA9ICZoaW50bWFwLT5lZGdlW2ldOworCisKKyAgICAgIEZUX1RSQUNFNigoICIgICUzZCAgICAlNy4yZiAgJTcuMmYgICU1ZCAgJXMlcyVzJXNcbiIsCisgICAgICAgICAgICAgICAgICBoaW50LT5pbmRleCwKKyAgICAgICAgICAgICAgICAgIGhpbnQtPmNzQ29vcmQgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgaGludC0+ZHNDb29yZCAvICggaGludC0+c2NhbGUgKiAxLjAgKSwKKyAgICAgICAgICAgICAgICAgIGhpbnQtPnNjYWxlLAorICAgICAgICAgICAgICAgICAgKCBjZjJfaGludF9pc1BhaXIoIGhpbnQgKSA/ICJwIiA6ICJnIiApLAorICAgICAgICAgICAgICAgICAgKCBjZjJfaGludF9pc1RvcCggaGludCApID8gInQiIDogImIiICksCisgICAgICAgICAgICAgICAgICAoIGNmMl9oaW50X2lzTG9ja2VkKCBoaW50ICkgPyAiTCIgOiAiIiksCisgICAgICAgICAgICAgICAgICAoIGNmMl9oaW50X2lzU3ludGhldGljKCBoaW50ICkgPyAiUyIgOiAiIiApICkpOworICAgIH0KKyNlbHNlCisgICAgRlRfVU5VU0VEKCBoaW50bWFwICk7CisjZW5kaWYKKyAgfQorCisKICAgLyogdHJhbnNmb3JtIGNoYXJhY3RlciBzcGFjZSBjb29yZGluYXRlIHRvIGRldmljZSBzcGFjZSB1c2luZyBoaW50IG1hcCAqLwogICBzdGF0aWMgQ0YyX0ZpeGVkCiAgIGNmMl9oaW50bWFwX21hcCggQ0YyX0hpbnRNYXAgIGhpbnRtYXAsCkBAIC0zMTQsNiArMzQ0LDcgQEAKICAgICAgIC8qIHN0YXJ0IGxpbmVhciBzZWFyY2ggZnJvbSBsYXN0IGhpdCAqLwogICAgICAgQ0YyX1VJbnQgIGkgPSBoaW50bWFwLT5sYXN0SW5kZXg7CiAKKwogICAgICAgRlRfQVNTRVJUKCBoaW50bWFwLT5sYXN0SW5kZXggPCBDRjJfTUFYX0hJTlRfRURHRVMgKTsKIAogICAgICAgLyogc2VhcmNoIHVwICovCkBAIC0zMzAsOSArMzYxLDEwIEBACiAgICAgICBpZiAoIGkgPT0gMCAmJiBjc0Nvb3JkIDwgaGludG1hcC0+ZWRnZVswXS5jc0Nvb3JkICkKICAgICAgIHsKICAgICAgICAgLyogc3BlY2lhbCBjYXNlIGZvciBwb2ludHMgYmVsb3cgZmlyc3QgZWRnZTogdXNlIHVuaWZvcm0gc2NhbGUgKi8KLSAgICAgICAgcmV0dXJuIEZUX011bEZpeCggY3NDb29yZCAtIGhpbnRtYXAtPmVkZ2VbMF0uY3NDb29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+c2NhbGUgKSArCi0gICAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbMF0uZHNDb29yZDsKKyAgICAgICAgcmV0dXJuIEFERF9JTlQzMiggRlRfTXVsRml4KCBTVUJfSU5UMzIoIGNzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlWzBdLmNzQ29vcmQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5zY2FsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlWzBdLmRzQ29vcmQgKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKQEAgLTM0MCw5ICszNzIsMTAgQEAKICAgICAgICAgICogTm90ZTogZW50cmllcyB3aXRoIGR1cGxpY2F0ZSBjc0Nvb3JkIGFyZSBhbGxvd2VkLgogICAgICAgICAgKiBVc2UgZWRnZVtpXSwgdGhlIGhpZ2hlc3QgZW50cnkgd2hlcmUgY3NDb29yZCA+PSBlbnRyeVtpXS5jc0Nvb3JkCiAgICAgICAgICAqLwotICAgICAgICByZXR1cm4gRlRfTXVsRml4KCBjc0Nvb3JkIC0gaGludG1hcC0+ZWRnZVtpXS5jc0Nvb3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ldLnNjYWxlICkgKwotICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ldLmRzQ29vcmQ7CisgICAgICAgIHJldHVybiBBRERfSU5UMzIoIEZUX011bEZpeCggU1VCX0lOVDMyKCBjc0Nvb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtpXS5jc0Nvb3JkICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtpXS5zY2FsZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ldLmRzQ29vcmQgKTsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTQzNywxNCArNDcwLDE2IEBACiAgICAgICAgIC8qIGlzIHRoZXJlIHJvb20gdG8gbW92ZSB1cD8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAvKiB0aGVyZSBpcyBpZiB3ZSBhcmUgYXQgdG9wIG9mIGFycmF5IG9yIHRoZSBuZXh0IGVkZ2UgaXMgYXQgb3IgKi8KICAgICAgICAgLyogYmV5b25kIHByb3Bvc2VkIG1vdmUgdXA/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGlmICggaiA+PSBoaW50bWFwLT5jb3VudCAtIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgaWYgKCBqID49IGhpbnRtYXAtPmNvdW50IC0gMSAgICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaiArIDFdLmRzQ29vcmQgPj0KLSAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCArIG1vdmVVcCArIHVwTWluQ291bnRlciApCisgICAgICAgICAgICAgICBBRERfSU5UMzIoIGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVVwICsgdXBNaW5Db3VudGVyICkgICApCiAgICAgICAgIHsKICAgICAgICAgICAvKiB0aGVyZSBpcyByb29tIHRvIG1vdmUgdXA7IGlzIHRoZXJlIGFsc28gcm9vbSB0byBtb3ZlIGRvd24/ICovCi0gICAgICAgICAgaWYgKCBpID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICBpZiAoIGkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmRzQ29vcmQgPD0KLSAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkICsgbW92ZURvd24gLSBkb3duTWluQ291bnRlciApCisgICAgICAgICAgICAgICAgIEFERF9JTlQzMiggaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVEb3duIC0gZG93bk1pbkNvdW50ZXIgKSApCiAgICAgICAgICAgewogICAgICAgICAgICAgLyogbW92ZSBzbWFsbGVyIGFic29sdXRlIGFtb3VudCAqLwogICAgICAgICAgICAgbW92ZSA9ICggLW1vdmVEb3duIDwgbW92ZVVwICkgPyBtb3ZlRG93biA6IG1vdmVVcDsgIC8qIG9wdGltdW0gKi8KQEAgLTQ1NSw5ICs0OTAsMTAgQEAKICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgLyogaXMgdGhlcmUgcm9vbSB0byBtb3ZlIGRvd24/ICovCi0gICAgICAgICAgaWYgKCBpID09IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICBpZiAoIGkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmRzQ29vcmQgPD0KLSAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkICsgbW92ZURvd24gLSBkb3duTWluQ291bnRlciApCisgICAgICAgICAgICAgICAgIEFERF9JTlQzMiggaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVEb3duIC0gZG93bk1pbkNvdW50ZXIgKSApCiAgICAgICAgICAgewogICAgICAgICAgICAgbW92ZSAgICAgPSBtb3ZlRG93bjsKICAgICAgICAgICAgIC8qIHRydWUgaWYgbm9uLW9wdGltdW0gbW92ZSAqLwpAQCAtNDkxLDkgKzUyNywxMSBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogbW92ZSB0aGUgZWRnZShzKSAqLwotICAgICAgICBoaW50bWFwLT5lZGdlW2ldLmRzQ29vcmQgKz0gbW92ZTsKKyAgICAgICAgaGludG1hcC0+ZWRnZVtpXS5kc0Nvb3JkID0gQUREX0lOVDMyKCBoaW50bWFwLT5lZGdlW2ldLmRzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZSApOwogICAgICAgICBpZiAoIGlzUGFpciApCi0gICAgICAgICAgaGludG1hcC0+ZWRnZVtqXS5kc0Nvb3JkICs9IG1vdmU7CisgICAgICAgICAgaGludG1hcC0+ZWRnZVtqXS5kc0Nvb3JkID0gQUREX0lOVDMyKCBoaW50bWFwLT5lZGdlW2pdLmRzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlICk7CiAgICAgICB9CiAKICAgICAgIC8qIGFzc2VydCB0aGVyZSBhcmUgbm8gb3ZlcmxhcHMgaW4gZGV2aWNlIHNwYWNlICovCkBAIC01MDcsMTggKzU0NSwyMCBAQAogICAgICAgewogICAgICAgICBpZiAoIGhpbnRtYXAtPmVkZ2VbaV0uY3NDb29yZCAhPSBoaW50bWFwLT5lZGdlW2kgLSAxXS5jc0Nvb3JkICkKICAgICAgICAgICBoaW50bWFwLT5lZGdlW2kgLSAxXS5zY2FsZSA9Ci0gICAgICAgICAgICBGVF9EaXZGaXgoCi0gICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaV0uZHNDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmRzQ29vcmQsCi0gICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2VbaV0uY3NDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaSAtIDFdLmNzQ29vcmQgKTsKKyAgICAgICAgICAgIEZUX0RpdkZpeCggU1VCX0lOVDMyKCBoaW50bWFwLT5lZGdlW2ldLmRzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtpIC0gMV0uZHNDb29yZCApLAorICAgICAgICAgICAgICAgICAgICAgICBTVUJfSU5UMzIoIGhpbnRtYXAtPmVkZ2VbaV0uY3NDb29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2kgLSAxXS5jc0Nvb3JkICkgKTsKICAgICAgIH0KIAogICAgICAgaWYgKCBpc1BhaXIgKQogICAgICAgewogICAgICAgICBpZiAoIGhpbnRtYXAtPmVkZ2Vbal0uY3NDb29yZCAhPSBoaW50bWFwLT5lZGdlW2ogLSAxXS5jc0Nvb3JkICkKICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ogLSAxXS5zY2FsZSA9Ci0gICAgICAgICAgICBGVF9EaXZGaXgoCi0gICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaiAtIDFdLmRzQ29vcmQsCi0gICAgICAgICAgICAgIGhpbnRtYXAtPmVkZ2Vbal0uY3NDb29yZCAtIGhpbnRtYXAtPmVkZ2VbaiAtIDFdLmNzQ29vcmQgKTsKKyAgICAgICAgICAgIEZUX0RpdkZpeCggU1VCX0lOVDMyKCBoaW50bWFwLT5lZGdlW2pdLmRzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+ZWRnZVtqIC0gMV0uZHNDb29yZCApLAorICAgICAgICAgICAgICAgICAgICAgICBTVUJfSU5UMzIoIGhpbnRtYXAtPmVkZ2Vbal0uY3NDb29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2ogLSAxXS5jc0Nvb3JkICkgKTsKIAogICAgICAgICBpICs9IDE7ICAgICAvKiBza2lwIHVwcGVyIGVkZ2Ugb24gbmV4dCBsb29wICovCiAgICAgICB9CkBAIC01MzksMTUgKzU3OSwxOCBAQAogCiAgICAgICAvKiBpcyB0aGVyZSByb29tIHRvIG1vdmUgdXA/ICovCiAgICAgICBpZiAoIGhpbnRtYXAtPmVkZ2VbaiArIDFdLmRzQ29vcmQgPj0KLSAgICAgICAgICAgICBoaW50bWFwLT5lZGdlW2pdLmRzQ29vcmQgKyBoaW50TW92ZS0+bW92ZVVwICsgQ0YyX01JTl9DT1VOVEVSICkKKyAgICAgICAgICAgICBBRERfSU5UMzIoIGhpbnRtYXAtPmVkZ2Vbal0uZHNDb29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRNb3ZlLT5tb3ZlVXAgKyBDRjJfTUlOX0NPVU5URVIgKSApCiAgICAgICB7CiAgICAgICAgIC8qIHRoZXJlIGlzIG1vcmUgcm9vbSBub3csIG1vdmUgZWRnZSB1cCAqLwotICAgICAgICBoaW50bWFwLT5lZGdlW2pdLmRzQ29vcmQgKz0gaGludE1vdmUtPm1vdmVVcDsKKyAgICAgICAgaGludG1hcC0+ZWRnZVtqXS5kc0Nvb3JkID0gQUREX0lOVDMyKCBoaW50bWFwLT5lZGdlW2pdLmRzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludE1vdmUtPm1vdmVVcCApOwogCiAgICAgICAgIGlmICggY2YyX2hpbnRfaXNQYWlyKCAmaGludG1hcC0+ZWRnZVtqXSApICkKICAgICAgICAgewogICAgICAgICAgIEZUX0FTU0VSVCggaiA+IDAgKTsKLSAgICAgICAgICBoaW50bWFwLT5lZGdlW2ogLSAxXS5kc0Nvb3JkICs9IGhpbnRNb3ZlLT5tb3ZlVXA7CisgICAgICAgICAgaGludG1hcC0+ZWRnZVtqIC0gMV0uZHNDb29yZCA9CisgICAgICAgICAgICBBRERfSU5UMzIoIGhpbnRtYXAtPmVkZ2VbaiAtIDFdLmRzQ29vcmQsIGhpbnRNb3ZlLT5tb3ZlVXAgKTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTU5OSw2ICs2NDIsMTQgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgRlRfVFJBQ0U3KCggIiAgR290IGhpbnQgYXQgJS4yZiAoJS4yZilcbiIsCisgICAgICAgICAgICAgICAgZmlyc3RIaW50RWRnZS0+Y3NDb29yZCAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgZmlyc3RIaW50RWRnZS0+ZHNDb29yZCAvIDY1NTM2LjAgKSk7CisgICAgaWYgKCBpc1BhaXIgKQorICAgICAgRlRfVFJBQ0U3KCggIiAgR290IGhpbnQgYXQgJS4yZiAoJS4yZilcbiIsCisgICAgICAgICAgICAgICAgICBzZWNvbmRIaW50RWRnZS0+Y3NDb29yZCAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICBzZWNvbmRIaW50RWRnZS0+ZHNDb29yZCAvIDY1NTM2LjAgKSk7CisKICAgICAvKgogICAgICAqIERpc2NhcmQgYW55IGhpbnRzIHRoYXQgb3ZlcmxhcCBpbiBjaGFyYWN0ZXIgc3BhY2UuICBNb3N0IG9mdGVuLCB0aGlzCiAgICAgICogaXMgd2hpbGUgYnVpbGRpbmcgdGhlIGluaXRpYWwgbWFwLCB3aGVyZSBjYXB0dXJlZCBoaW50cyBmcm9tIGFsbApAQCAtNjM1LDE4ICs2ODYsMTkgQEAKICAgICAgIHsKICAgICAgICAgLyogVXNlIGhpbnQgbWFwIHRvIHBvc2l0aW9uIHRoZSBjZW50ZXIgb2Ygc3RlbSwgYW5kIG5vbWluYWwgc2NhbGUgKi8KICAgICAgICAgLyogdG8gcG9zaXRpb24gdGhlIHR3byBlZGdlcy4gIFRoaXMgcHJlc2VydmVzIHRoZSBzdGVtIHdpZHRoLiAgICAgKi8KLSAgICAgICAgQ0YyX0ZpeGVkICBtaWRwb2ludCAgPSBjZjJfaGludG1hcF9tYXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5pbml0aWFsSGludE1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggc2Vjb25kSGludEVkZ2UtPmNzQ29vcmQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEhpbnRFZGdlLT5jc0Nvb3JkICkgLyAyICk7Ci0gICAgICAgIENGMl9GaXhlZCAgaGFsZldpZHRoID0gRlRfTXVsRml4KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzZWNvbmRIaW50RWRnZS0+Y3NDb29yZCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0SGludEVkZ2UtPmNzQ29vcmQgKSAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50bWFwLT5zY2FsZSApOworICAgICAgICBDRjJfRml4ZWQgIG1pZHBvaW50ID0KKyAgICAgICAgICAgICAgICAgICAgIGNmMl9oaW50bWFwX21hcCgKKyAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+aW5pdGlhbEhpbnRNYXAsCisgICAgICAgICAgICAgICAgICAgICAgIEFERF9JTlQzMiggc2Vjb25kSGludEVkZ2UtPmNzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RIaW50RWRnZS0+Y3NDb29yZCApIC8gMiApOworICAgICAgICBDRjJfRml4ZWQgIGhhbGZXaWR0aCA9CisgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIFNVQl9JTlQzMiggc2Vjb25kSGludEVkZ2UtPmNzQ29vcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RIaW50RWRnZS0+Y3NDb29yZCApIC8gMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludG1hcC0+c2NhbGUgKTsKIAogCi0gICAgICAgIGZpcnN0SGludEVkZ2UtPmRzQ29vcmQgID0gbWlkcG9pbnQgLSBoYWxmV2lkdGg7Ci0gICAgICAgIHNlY29uZEhpbnRFZGdlLT5kc0Nvb3JkID0gbWlkcG9pbnQgKyBoYWxmV2lkdGg7CisgICAgICAgIGZpcnN0SGludEVkZ2UtPmRzQ29vcmQgID0gU1VCX0lOVDMyKCBtaWRwb2ludCwgaGFsZldpZHRoICk7CisgICAgICAgIHNlY29uZEhpbnRFZGdlLT5kc0Nvb3JkID0gQUREX0lOVDMyKCBtaWRwb2ludCwgaGFsZldpZHRoICk7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICAgIGZpcnN0SGludEVkZ2UtPmRzQ29vcmQgPSBjZjJfaGludG1hcF9tYXAoIGhpbnRtYXAtPmluaXRpYWxIaW50TWFwLApAQCAtNzE1LDEzICs3NjcsMjIgQEAKIAogICAgICAgLyogaW5zZXJ0IGZpcnN0IGVkZ2UgKi8KICAgICAgIGhpbnRtYXAtPmVkZ2VbaW5kZXhJbnNlcnRdID0gKmZpcnN0SGludEVkZ2U7ICAgICAgICAgLyogY29weSBzdHJ1Y3QgKi8KLSAgICAgIGhpbnRtYXAtPmNvdW50ICs9IDE7CisgICAgICBoaW50bWFwLT5jb3VudCAgICAgICAgICAgICs9IDE7CisKKyAgICAgIEZUX1RSQUNFNygoICIgIEluc2VydGluZyBoaW50ICUuMmYgKCUuMmYpXG4iLAorICAgICAgICAgICAgICAgICAgZmlyc3RIaW50RWRnZS0+Y3NDb29yZCAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICBmaXJzdEhpbnRFZGdlLT5kc0Nvb3JkIC8gNjU1MzYuMCApKTsKIAogICAgICAgaWYgKCBpc1BhaXIgKQogICAgICAgewogICAgICAgICAvKiBpbnNlcnQgc2Vjb25kIGVkZ2UgKi8KICAgICAgICAgaGludG1hcC0+ZWRnZVtpbmRleEluc2VydCArIDFdID0gKnNlY29uZEhpbnRFZGdlOyAgLyogY29weSBzdHJ1Y3QgKi8KICAgICAgICAgaGludG1hcC0+Y291bnQgICAgICAgICAgICAgICAgKz0gMTsKKworICAgICAgICBGVF9UUkFDRTcoKCAiICBJbnNlcnRpbmcgaGludCAlLjJmICglLjJmKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kSGludEVkZ2UtPmNzQ29vcmQgLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICBzZWNvbmRIaW50RWRnZS0+ZHNDb29yZCAvIDY1NTM2LjAgKSk7CisKICAgICAgIH0KICAgICB9CiAKQEAgLTc4MSw3ICs4NDIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19zaXplKCBoU3RlbUhpbnRBcnJheSApICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2FycnN0YWNrX3NpemUoIHZTdGVtSGludEFycmF5ICkgKTsKICAgICAgIGlmICggIWNmMl9oaW50bWFza19pc1ZhbGlkKCBoaW50TWFzayApICkKLSAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIC8qIHRvbyBtYW55IHN0ZW0gaGludHMgKi8KKyAgICAgIHsKKyAgICAgICAgaWYgKCBmb250LT5pc1QxICkKKyAgICAgICAgeworICAgICAgICAgIC8qIG5vIGVycm9yLCBqdXN0IGNvbnRpbnVlIHVuaGludGVkICovCisgICAgICAgICAgKmhpbnRNYXNrLT5lcnJvciA9IEZUX0Vycl9PazsKKyAgICAgICAgICBoaW50bWFwLT5oaW50ZWQgID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAvKiB0b28gbWFueSBzdGVtIGhpbnRzICovCisgICAgICB9CiAgICAgfQogCiAgICAgLyogYmVnaW4gYnkgY2xlYXJpbmcgdGhlIG1hcCAqLwpAQCAtNzk3LDcgKzg2Niw3IEBACiAKICAgICAvKiBEZWZlbnNlLWluLWRlcHRoLiAgU2hvdWxkIG5ldmVyIHJldHVybiBoZXJlLiAqLwogICAgIGlmICggYml0Q291bnQgPiBoaW50TWFzay0+Yml0Q291bnQgKQotICAgICAgICByZXR1cm47CisgICAgICByZXR1cm47CiAKICAgICAvKiBzeW50aGV0aWMgZW1ib3ggaGludHMgZ2V0IGhpZ2hlc3QgcHJpb3JpdHkgKi8KICAgICBpZiAoIGZvbnQtPmJsdWVzLmRvRW1Cb3hIaW50cyApCkBAIC05NTYsNiArMTAyNSwxMiBAQAogICAgICAgfQogICAgIH0KIAorICAgIEZUX1RSQUNFNigoIGluaXRpYWxNYXAgPyAiZmxhZ3M6IFtwXWFpciBbZ11ob3N0IFt0XW9wICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIltiXW90dG9tIFtMXW9ja2VkIFtTXXludGhldGljXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbml0aWFsIGhpbnRtYXBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIkhpbnRzOlxuIiApKTsKKyAgICBjZjJfaGludG1hcF9kdW1wKCBoaW50bWFwICk7CisKICAgICAvKgogICAgICAqIE5vdGU6IFRoZSBmb2xsb3dpbmcgbGluZSBpcyBhIGNvbnZlbmllbnQgcGxhY2UgdG8gYnJlYWsgd2hlbgogICAgICAqICAgICAgIGRlYnVnZ2luZyBoaW50aW5nLiAgRXhhbWluZSBgaGludG1hcC0+ZWRnZScgZm9yIHRoZSBsaXN0IG9mCkBAIC05NjgsNiArMTA0Myw5IEBACiAgICAgLyogYWRqdXN0IHBvc2l0aW9ucyBvZiBoaW50IGVkZ2VzIHRoYXQgYXJlIG5vdCBsb2NrZWQgdG8gYmx1ZSB6b25lcyAqLwogICAgIGNmMl9oaW50bWFwX2FkanVzdEhpbnRzKCBoaW50bWFwICk7CiAKKyAgICBGVF9UUkFDRTYoKCAiKGFkanVzdGVkKVxuIiApKTsKKyAgICBjZjJfaGludG1hcF9kdW1wKCBoaW50bWFwICk7CisKICAgICAvKiBzYXZlIHRoZSBwb3NpdGlvbiBvZiBhbGwgaGludHMgdGhhdCB3ZXJlIHVzZWQgaW4gdGhpcyBoaW50IG1hcDsgKi8KICAgICAvKiBpZiB3ZSB1c2UgdGhlbSBhZ2Fpbiwgd2UnbGwgbG9jYXRlIHRoZW0gaW4gdGhlIHNhbWUgcG9zaXRpb24gICAgKi8KICAgICBpZiAoICFpbml0aWFsTWFwICkKQEAgLTEwNjMsNyArMTE0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2ZpeGVkQWJzKCBnbHlwaHBhdGgtPnlPZmZzZXQgKSApOwogCiAgICAgLyogLjEgY2hhcmFjdGVyIHNwYWNlIHVuaXQgKi8KLSAgICBnbHlwaHBhdGgtPnNuYXBUaHJlc2hvbGQgPSBjZjJfZmxvYXRUb0ZpeGVkKCAwLjFmICk7CisgICAgZ2x5cGhwYXRoLT5zbmFwVGhyZXNob2xkID0gY2YyX2RvdWJsZVRvRml4ZWQoIDAuMSApOwogCiAgICAgZ2x5cGhwYXRoLT5tb3ZlSXNQZW5kaW5nID0gVFJVRTsKICAgICBnbHlwaHBhdGgtPnBhdGhJc09wZW4gICAgPSBGQUxTRTsKQEAgLTEwOTUsMTYgKzExNzMsMjAgQEAKICAgICBGVF9WZWN0b3IgIHB0OyAgIC8qIGhpbnRlZCBwb2ludCBpbiB1cHJpZ2h0IERTICovCiAKIAotICAgIHB0LnggPSBGVF9NdWxGaXgoIGdseXBocGF0aC0+c2NhbGVYLCB4ICkgKwotICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGhwYXRoLT5zY2FsZUMsIHkgKTsKKyAgICBwdC54ID0gQUREX0lOVDMyKCBGVF9NdWxGaXgoIGdseXBocGF0aC0+c2NhbGVYLCB4ICksCisgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRml4KCBnbHlwaHBhdGgtPnNjYWxlQywgeSApICk7CiAgICAgcHQueSA9IGNmMl9oaW50bWFwX21hcCggaGludG1hcCwgeSApOwogCi0gICAgcHB0LT54ID0gRlRfTXVsRml4KCBnbHlwaHBhdGgtPmZvbnQtPm91dGVyVHJhbnNmb3JtLmEsIHB0LnggKSAgICsKLSAgICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGhwYXRoLT5mb250LT5vdXRlclRyYW5zZm9ybS5jLCBwdC55ICkgKwotICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT5mcmFjdGlvbmFsVHJhbnNsYXRpb24ueDsKLSAgICBwcHQtPnkgPSBGVF9NdWxGaXgoIGdseXBocGF0aC0+Zm9udC0+b3V0ZXJUcmFuc2Zvcm0uYiwgcHQueCApICAgKwotICAgICAgICAgICAgICAgRlRfTXVsRml4KCBnbHlwaHBhdGgtPmZvbnQtPm91dGVyVHJhbnNmb3JtLmQsIHB0LnkgKSArCi0gICAgICAgICAgICAgICBnbHlwaHBhdGgtPmZyYWN0aW9uYWxUcmFuc2xhdGlvbi55OworICAgIHBwdC0+eCA9IEFERF9JTlQzMigKKyAgICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGhwYXRoLT5mb250LT5vdXRlclRyYW5zZm9ybS5hLCBwdC54ICksCisgICAgICAgICAgICAgICBBRERfSU5UMzIoCisgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGhwYXRoLT5mb250LT5vdXRlclRyYW5zZm9ybS5jLCBwdC55ICksCisgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+ZnJhY3Rpb25hbFRyYW5zbGF0aW9uLnggKSApOworICAgIHBwdC0+eSA9IEFERF9JTlQzMigKKyAgICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGhwYXRoLT5mb250LT5vdXRlclRyYW5zZm9ybS5iLCBwdC54ICksCisgICAgICAgICAgICAgICBBRERfSU5UMzIoCisgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZ2x5cGhwYXRoLT5mb250LT5vdXRlclRyYW5zZm9ybS5kLCBwdC55ICksCisgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+ZnJhY3Rpb25hbFRyYW5zbGF0aW9uLnkgKSApOwogICB9CiAKIApAQCAtMTEyOCw3ICsxMjEwLDcgQEAKICAgICAgKiBzZWNvbmQgc2VnbWVudC4KICAgICAgKiBMZXQgYHcgJ2JlIHRoZSB6ZXJvLWJhc2VkIHZlY3RvciBmcm9tIGB1MScgdG8gYHYxJy4KICAgICAgKiBgcGVycCcgaXMgdGhlIGBwZXJwZW5kaWN1bGFyIGRvdCBwcm9kdWN0Jzsgc2VlCi0gICAgICogaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9QZXJwRG90UHJvZHVjdC5odG1sLgorICAgICAqIGh0dHBzOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1BlcnBEb3RQcm9kdWN0Lmh0bWwuCiAgICAgICogYHMnIGlzIHRoZSBwYXJhbWV0ZXIgZm9yIHRoZSBwYXJhbWV0cmljIGxpbmUgZm9yIHRoZSBmaXJzdCBzZWdtZW50CiAgICAgICogKGB1JykuCiAgICAgICoKQEAgLTExNTQsMTIgKzEyMzYsMTIgQEAKICAgICBDRjJfRml4ZWQgIGRlbm9taW5hdG9yLCBzOwogCiAKLSAgICB1LnggPSBDRjJfQ1NfU0NBTEUoIHUyLT54IC0gdTEtPnggKTsKLSAgICB1LnkgPSBDRjJfQ1NfU0NBTEUoIHUyLT55IC0gdTEtPnkgKTsKLSAgICB2LnggPSBDRjJfQ1NfU0NBTEUoIHYyLT54IC0gdjEtPnggKTsKLSAgICB2LnkgPSBDRjJfQ1NfU0NBTEUoIHYyLT55IC0gdjEtPnkgKTsKLSAgICB3LnggPSBDRjJfQ1NfU0NBTEUoIHYxLT54IC0gdTEtPnggKTsKLSAgICB3LnkgPSBDRjJfQ1NfU0NBTEUoIHYxLT55IC0gdTEtPnkgKTsKKyAgICB1LnggPSBDRjJfQ1NfU0NBTEUoIFNVQl9JTlQzMiggdTItPngsIHUxLT54ICkgKTsKKyAgICB1LnkgPSBDRjJfQ1NfU0NBTEUoIFNVQl9JTlQzMiggdTItPnksIHUxLT55ICkgKTsKKyAgICB2LnggPSBDRjJfQ1NfU0NBTEUoIFNVQl9JTlQzMiggdjItPngsIHYxLT54ICkgKTsKKyAgICB2LnkgPSBDRjJfQ1NfU0NBTEUoIFNVQl9JTlQzMiggdjItPnksIHYxLT55ICkgKTsKKyAgICB3LnggPSBDRjJfQ1NfU0NBTEUoIFNVQl9JTlQzMiggdjEtPngsIHUxLT54ICkgKTsKKyAgICB3LnkgPSBDRjJfQ1NfU0NBTEUoIFNVQl9JTlQzMiggdjEtPnksIHUxLT55ICkgKTsKIAogICAgIGRlbm9taW5hdG9yID0gY2YyX3BlcnAoIHUsIHYgKTsKIApAQCAtMTE2OCw4ICsxMjUwLDExIEBACiAKICAgICBzID0gRlRfRGl2Rml4KCBjZjJfcGVycCggdywgdiApLCBkZW5vbWluYXRvciApOwogCi0gICAgaW50ZXJzZWN0aW9uLT54ID0gdTEtPnggKyBGVF9NdWxGaXgoIHMsIHUyLT54IC0gdTEtPnggKTsKLSAgICBpbnRlcnNlY3Rpb24tPnkgPSB1MS0+eSArIEZUX011bEZpeCggcywgdTItPnkgLSB1MS0+eSApOworICAgIGludGVyc2VjdGlvbi0+eCA9IEFERF9JTlQzMiggdTEtPngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIHMsIFNVQl9JTlQzMiggdTItPngsIHUxLT54ICkgKSApOworICAgIGludGVyc2VjdGlvbi0+eSA9IEFERF9JTlQzMiggdTEtPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIHMsIFNVQl9JTlQzMiggdTItPnksIHUxLT55ICkgKSApOworCiAKICAgICAvKgogICAgICAqIFNwZWNpYWwgY2FzZSBzbmFwcGluZyBmb3IgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgbGluZXMuCkBAIC0xMTgwLDI1ICsxMjY1LDI5IEBACiAgICAgICoKICAgICAgKi8KIAotICAgIGlmICggdTEtPnggPT0gdTItPnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBjZjJfZml4ZWRBYnMoIGludGVyc2VjdGlvbi0+eCAtIHUxLT54ICkgPCBnbHlwaHBhdGgtPnNuYXBUaHJlc2hvbGQgKQorICAgIGlmICggdTEtPnggPT0gdTItPnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgY2YyX2ZpeGVkQWJzKCBTVUJfSU5UMzIoIGludGVyc2VjdGlvbi0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MS0+eCApICkgPCBnbHlwaHBhdGgtPnNuYXBUaHJlc2hvbGQgKQogICAgICAgaW50ZXJzZWN0aW9uLT54ID0gdTEtPng7Ci0gICAgaWYgKCB1MS0+eSA9PSB1Mi0+eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIGNmMl9maXhlZEFicyggaW50ZXJzZWN0aW9uLT55IC0gdTEtPnkgKSA8IGdseXBocGF0aC0+c25hcFRocmVzaG9sZCApCisgICAgaWYgKCB1MS0+eSA9PSB1Mi0+eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBjZjJfZml4ZWRBYnMoIFNVQl9JTlQzMiggaW50ZXJzZWN0aW9uLT55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLT55ICkgKSA8IGdseXBocGF0aC0+c25hcFRocmVzaG9sZCApCiAgICAgICBpbnRlcnNlY3Rpb24tPnkgPSB1MS0+eTsKIAotICAgIGlmICggdjEtPnggPT0gdjItPnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBjZjJfZml4ZWRBYnMoIGludGVyc2VjdGlvbi0+eCAtIHYxLT54ICkgPCBnbHlwaHBhdGgtPnNuYXBUaHJlc2hvbGQgKQorICAgIGlmICggdjEtPnggPT0gdjItPnggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgY2YyX2ZpeGVkQWJzKCBTVUJfSU5UMzIoIGludGVyc2VjdGlvbi0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MS0+eCApICkgPCBnbHlwaHBhdGgtPnNuYXBUaHJlc2hvbGQgKQogICAgICAgaW50ZXJzZWN0aW9uLT54ID0gdjEtPng7Ci0gICAgaWYgKCB2MS0+eSA9PSB2Mi0+eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIGNmMl9maXhlZEFicyggaW50ZXJzZWN0aW9uLT55IC0gdjEtPnkgKSA8IGdseXBocGF0aC0+c25hcFRocmVzaG9sZCApCisgICAgaWYgKCB2MS0+eSA9PSB2Mi0+eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBjZjJfZml4ZWRBYnMoIFNVQl9JTlQzMiggaW50ZXJzZWN0aW9uLT55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxLT55ICkgKSA8IGdseXBocGF0aC0+c25hcFRocmVzaG9sZCApCiAgICAgICBpbnRlcnNlY3Rpb24tPnkgPSB2MS0+eTsKIAogICAgIC8qIGxpbWl0IHRoZSBpbnRlcnNlY3Rpb24gZGlzdGFuY2UgZnJvbSBtaWRwb2ludCBvZiB1MiBhbmQgdjEgKi8KLSAgICBpZiAoIGNmMl9maXhlZEFicyggaW50ZXJzZWN0aW9uLT54IC0gKCB1Mi0+eCArIHYxLT54ICkgLyAyICkgPgotICAgICAgICAgICBnbHlwaHBhdGgtPm1pdGVyTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICBjZjJfZml4ZWRBYnMoIGludGVyc2VjdGlvbi0+eSAtICggdTItPnkgKyB2MS0+eSApIC8gMiApID4KLSAgICAgICAgICAgZ2x5cGhwYXRoLT5taXRlckxpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgaWYgKCBjZjJfZml4ZWRBYnMoIGludGVyc2VjdGlvbi0+eCAtIEFERF9JTlQzMiggdTItPngsIHYxLT54ICkgLyAyICkgPgorICAgICAgICAgICBnbHlwaHBhdGgtPm1pdGVyTGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgIGNmMl9maXhlZEFicyggaW50ZXJzZWN0aW9uLT55IC0gQUREX0lOVDMyKCB1Mi0+eSwgdjEtPnkgKSAvIDIgKSA+CisgICAgICAgICAgIGdseXBocGF0aC0+bWl0ZXJMaW1pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICByZXR1cm4gRkFMU0U7CiAKICAgICByZXR1cm4gVFJVRTsKQEAgLTE0NDYsMTYgKzE1MzUsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQqICAgICB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgIHkgKQogICB7Ci0gICAgQ0YyX0ZpeGVkICBkeCA9IHgyIC0geDE7Ci0gICAgQ0YyX0ZpeGVkICBkeSA9IHkyIC0geTE7CisgICAgQ0YyX0ZpeGVkICBkeCA9IFNVQl9JTlQzMiggeDIsIHgxICk7CisgICAgQ0YyX0ZpeGVkICBkeSA9IFNVQl9JTlQzMiggeTIsIHkxICk7CiAKIAogICAgIC8qIG5vdGU6IG5lZ2F0aXZlIG9mZnNldHMgZG9uJ3Qgd29yayBoZXJlOyBuZWdhdGUgZGVsdGFzIHRvIGNoYW5nZSAqLwogICAgIC8qIHF1YWRyYW50cywgYmVsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggZ2x5cGhwYXRoLT5mb250LT5yZXZlcnNlV2luZGluZyApCiAgICAgewotICAgICAgZHggPSAtZHg7Ci0gICAgICBkeSA9IC1keTsKKyAgICAgIGR4ID0gTkVHX0lOVDMyKCBkeCApOworICAgICAgZHkgPSBORUdfSU5UMzIoIGR5ICk7CiAgICAgfQogCiAgICAgKnggPSAqeSA9IDA7CkBAIC0xNDY0LDggKzE1NTMsOSBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvKiBhZGQgbW9tZW50dW0gZm9yIHRoaXMgcGF0aCBlbGVtZW50ICovCi0gICAgZ2x5cGhwYXRoLT5jYWxsYmFja3MtPndpbmRpbmdNb21lbnR1bSArPQotICAgICAgY2YyX2dldFdpbmRpbmdNb21lbnR1bSggeDEsIHkxLCB4MiwgeTIgKTsKKyAgICBnbHlwaHBhdGgtPmNhbGxiYWNrcy0+d2luZGluZ01vbWVudHVtID0KKyAgICAgIEFERF9JTlQzMiggZ2x5cGhwYXRoLT5jYWxsYmFja3MtPndpbmRpbmdNb21lbnR1bSwKKyAgICAgICAgICAgICAgICAgY2YyX2dldFdpbmRpbmdNb21lbnR1bSggeDEsIHkxLCB4MiwgeTIgKSApOwogCiAgICAgLyogbm90ZTogYWxsb3cgbWl4ZWQgaW50ZWdlciBhbmQgZml4ZWQgbXVsdGlwbGljYXRpb24gaGVyZSAqLwogICAgIGlmICggZHggPj0gMCApCkBAIC0xNDc0LDEzICsxNTY0LDEzIEBACiAgICAgICB7CiAgICAgICAgIC8qIGZpcnN0IHF1YWRyYW50LCAreCAreSAqLwogCi0gICAgICAgIGlmICggZHggPiAyICogZHkgKQorICAgICAgICBpZiAoIGR4ID4gTVVMX0lOVDMyKCAyLCBkeSApICkKICAgICAgICAgewogICAgICAgICAgIC8qICt4ICovCiAgICAgICAgICAgKnggPSAwOwogICAgICAgICAgICp5ID0gMDsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggZHkgPiAyICogZHggKQorICAgICAgICBlbHNlIGlmICggZHkgPiBNVUxfSU5UMzIoIDIsIGR4ICkgKQogICAgICAgICB7CiAgICAgICAgICAgLyogK3kgKi8KICAgICAgICAgICAqeCA9IGdseXBocGF0aC0+eE9mZnNldDsKQEAgLTE0ODksOSArMTU3OSw5IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgIC8qICt4ICt5ICovCi0gICAgICAgICAgKnggPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIDAuNyApLAorICAgICAgICAgICp4ID0gRlRfTXVsRml4KCBjZjJfZG91YmxlVG9GaXhlZCggMC43ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+eE9mZnNldCApOwotICAgICAgICAgICp5ID0gRlRfTXVsRml4KCBjZjJfZmxvYXRUb0ZpeGVkKCAxLjAgLSAwLjcgKSwKKyAgICAgICAgICAqeSA9IEZUX011bEZpeCggY2YyX2RvdWJsZVRvRml4ZWQoIDEuMCAtIDAuNyApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnlPZmZzZXQgKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtMTQ5OSwyNCArMTU4OSwyNCBAQAogICAgICAgewogICAgICAgICAvKiBmb3VydGggcXVhZHJhbnQsICt4IC15ICovCiAKLSAgICAgICAgaWYgKCBkeCA+IC0yICogZHkgKQorICAgICAgICBpZiAoIGR4ID4gTVVMX0lOVDMyKCAtMiwgZHkgKSApCiAgICAgICAgIHsKICAgICAgICAgICAvKiAreCAqLwogICAgICAgICAgICp4ID0gMDsKICAgICAgICAgICAqeSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIC1keSA+IDIgKiBkeCApCisgICAgICAgIGVsc2UgaWYgKCBORUdfSU5UMzIoIGR5ICkgPiBNVUxfSU5UMzIoIDIsIGR4ICkgKQogICAgICAgICB7CiAgICAgICAgICAgLyogLXkgKi8KLSAgICAgICAgICAqeCA9IC1nbHlwaHBhdGgtPnhPZmZzZXQ7CisgICAgICAgICAgKnggPSBORUdfSU5UMzIoIGdseXBocGF0aC0+eE9mZnNldCApOwogICAgICAgICAgICp5ID0gZ2x5cGhwYXRoLT55T2Zmc2V0OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgIC8qICt4IC15ICovCi0gICAgICAgICAgKnggPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIC0wLjcgKSwKKyAgICAgICAgICAqeCA9IEZUX011bEZpeCggY2YyX2RvdWJsZVRvRml4ZWQoIC0wLjcgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhwYXRoLT54T2Zmc2V0ICk7Ci0gICAgICAgICAgKnkgPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIDEuMCAtIDAuNyApLAorICAgICAgICAgICp5ID0gRlRfTXVsRml4KCBjZjJfZG91YmxlVG9GaXhlZCggMS4wIC0gMC43ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+eU9mZnNldCApOwogICAgICAgICB9CiAgICAgICB9CkBAIC0xNTI3LDEzICsxNjE3LDEzIEBACiAgICAgICB7CiAgICAgICAgIC8qIHNlY29uZCBxdWFkcmFudCwgLXggK3kgKi8KIAotICAgICAgICBpZiAoIC1keCA+IDIgKiBkeSApCisgICAgICAgIGlmICggTkVHX0lOVDMyKCBkeCApID4gTVVMX0lOVDMyKCAyLCBkeSApICkKICAgICAgICAgewogICAgICAgICAgIC8qIC14ICovCiAgICAgICAgICAgKnggPSAwOwotICAgICAgICAgICp5ID0gMiAqIGdseXBocGF0aC0+eU9mZnNldDsKKyAgICAgICAgICAqeSA9IE1VTF9JTlQzMiggMiwgZ2x5cGhwYXRoLT55T2Zmc2V0ICk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIGR5ID4gLTIgKiBkeCApCisgICAgICAgIGVsc2UgaWYgKCBkeSA+IE1VTF9JTlQzMiggLTIsIGR4ICkgKQogICAgICAgICB7CiAgICAgICAgICAgLyogK3kgKi8KICAgICAgICAgICAqeCA9IGdseXBocGF0aC0+eE9mZnNldDsKQEAgLTE1NDIsOSArMTYzMiw5IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgIC8qIC14ICt5ICovCi0gICAgICAgICAgKnggPSBGVF9NdWxGaXgoIGNmMl9mbG9hdFRvRml4ZWQoIDAuNyApLAorICAgICAgICAgICp4ID0gRlRfTXVsRml4KCBjZjJfZG91YmxlVG9GaXhlZCggMC43ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+eE9mZnNldCApOwotICAgICAgICAgICp5ID0gRlRfTXVsRml4KCBjZjJfZmxvYXRUb0ZpeGVkKCAxLjAgKyAwLjcgKSwKKyAgICAgICAgICAqeSA9IEZUX011bEZpeCggY2YyX2RvdWJsZVRvRml4ZWQoIDEuMCArIDAuNyApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnlPZmZzZXQgKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtMTU1MiwyNCArMTY0MiwyNCBAQAogICAgICAgewogICAgICAgICAvKiB0aGlyZCBxdWFkcmFudCwgLXggLXkgKi8KIAotICAgICAgICBpZiAoIC1keCA+IC0yICogZHkgKQorICAgICAgICBpZiAoIE5FR19JTlQzMiggZHggKSA+IE1VTF9JTlQzMiggLTIsIGR5ICkgKQogICAgICAgICB7CiAgICAgICAgICAgLyogLXggKi8KICAgICAgICAgICAqeCA9IDA7Ci0gICAgICAgICAgKnkgPSAyICogZ2x5cGhwYXRoLT55T2Zmc2V0OworICAgICAgICAgICp5ID0gTVVMX0lOVDMyKCAyLCBnbHlwaHBhdGgtPnlPZmZzZXQgKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggLWR5ID4gLTIgKiBkeCApCisgICAgICAgIGVsc2UgaWYgKCBORUdfSU5UMzIoIGR5ICkgPiBNVUxfSU5UMzIoIC0yLCBkeCApICkKICAgICAgICAgewogICAgICAgICAgIC8qIC15ICovCi0gICAgICAgICAgKnggPSAtZ2x5cGhwYXRoLT54T2Zmc2V0OworICAgICAgICAgICp4ID0gTkVHX0lOVDMyKCBnbHlwaHBhdGgtPnhPZmZzZXQgKTsKICAgICAgICAgICAqeSA9IGdseXBocGF0aC0+eU9mZnNldDsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAvKiAteCAteSAqLwotICAgICAgICAgICp4ID0gRlRfTXVsRml4KCBjZjJfZmxvYXRUb0ZpeGVkKCAtMC43ICksCisgICAgICAgICAgKnggPSBGVF9NdWxGaXgoIGNmMl9kb3VibGVUb0ZpeGVkKCAtMC43ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocGF0aC0+eE9mZnNldCApOwotICAgICAgICAgICp5ID0gRlRfTXVsRml4KCBjZjJfZmxvYXRUb0ZpeGVkKCAxLjAgKyAwLjcgKSwKKyAgICAgICAgICAqeSA9IEZUX011bEZpeCggY2YyX2RvdWJsZVRvRml4ZWQoIDEuMCArIDAuNyApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHBhdGgtPnlPZmZzZXQgKTsKICAgICAgICAgfQogICAgICAgfQpAQCAtMTY3NSwxMCArMTc2NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnlPZmZzZXQgKTsKIAogICAgIC8qIGNvbnN0cnVjdCBvZmZzZXQgcG9pbnRzICovCi0gICAgUDAueCA9IGdseXBocGF0aC0+Y3VycmVudENTLnggKyB4T2Zmc2V0OwotICAgIFAwLnkgPSBnbHlwaHBhdGgtPmN1cnJlbnRDUy55ICsgeU9mZnNldDsKLSAgICBQMS54ID0geCArIHhPZmZzZXQ7Ci0gICAgUDEueSA9IHkgKyB5T2Zmc2V0OworICAgIFAwLnggPSBBRERfSU5UMzIoIGdseXBocGF0aC0+Y3VycmVudENTLngsIHhPZmZzZXQgKTsKKyAgICBQMC55ID0gQUREX0lOVDMyKCBnbHlwaHBhdGgtPmN1cnJlbnRDUy55LCB5T2Zmc2V0ICk7CisgICAgUDEueCA9IEFERF9JTlQzMiggeCwgeE9mZnNldCApOworICAgIFAxLnkgPSBBRERfSU5UMzIoIHksIHlPZmZzZXQgKTsKIAogICAgIGlmICggZ2x5cGhwYXRoLT5tb3ZlSXNQZW5kaW5nICkKICAgICB7CkBAIC0xNzUzLDE5ICsxODQzLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeU9mZnNldDMgKTsKIAogICAgIC8qIGFkZCBtb21lbnR1bSBmcm9tIHRoZSBtaWRkbGUgc2VnbWVudCAqLwotICAgIGdseXBocGF0aC0+Y2FsbGJhY2tzLT53aW5kaW5nTW9tZW50dW0gKz0KLSAgICAgIGNmMl9nZXRXaW5kaW5nTW9tZW50dW0oIHgxLCB5MSwgeDIsIHkyICk7CisgICAgZ2x5cGhwYXRoLT5jYWxsYmFja3MtPndpbmRpbmdNb21lbnR1bSA9CisgICAgICBBRERfSU5UMzIoIGdseXBocGF0aC0+Y2FsbGJhY2tzLT53aW5kaW5nTW9tZW50dW0sCisgICAgICAgICAgICAgICAgIGNmMl9nZXRXaW5kaW5nTW9tZW50dW0oIHgxLCB5MSwgeDIsIHkyICkgKTsKIAogICAgIC8qIGNvbnN0cnVjdCBvZmZzZXQgcG9pbnRzICovCi0gICAgUDAueCA9IGdseXBocGF0aC0+Y3VycmVudENTLnggKyB4T2Zmc2V0MTsKLSAgICBQMC55ID0gZ2x5cGhwYXRoLT5jdXJyZW50Q1MueSArIHlPZmZzZXQxOwotICAgIFAxLnggPSB4MSArIHhPZmZzZXQxOwotICAgIFAxLnkgPSB5MSArIHlPZmZzZXQxOworICAgIFAwLnggPSBBRERfSU5UMzIoIGdseXBocGF0aC0+Y3VycmVudENTLngsIHhPZmZzZXQxICk7CisgICAgUDAueSA9IEFERF9JTlQzMiggZ2x5cGhwYXRoLT5jdXJyZW50Q1MueSwgeU9mZnNldDEgKTsKKyAgICBQMS54ID0gQUREX0lOVDMyKCB4MSwgeE9mZnNldDEgKTsKKyAgICBQMS55ID0gQUREX0lOVDMyKCB5MSwgeU9mZnNldDEgKTsKICAgICAvKiBub3RlOiBwcmVzZXJ2ZSBhbmdsZSBvZiBmaW5hbCBzZWdtZW50IGJ5IHVzaW5nIG9mZnNldDMgYXQgYm90aCBlbmRzICovCi0gICAgUDIueCA9IHgyICsgeE9mZnNldDM7Ci0gICAgUDIueSA9IHkyICsgeU9mZnNldDM7Ci0gICAgUDMueCA9IHgzICsgeE9mZnNldDM7Ci0gICAgUDMueSA9IHkzICsgeU9mZnNldDM7CisgICAgUDIueCA9IEFERF9JTlQzMiggeDIsIHhPZmZzZXQzICk7CisgICAgUDIueSA9IEFERF9JTlQzMiggeTIsIHlPZmZzZXQzICk7CisgICAgUDMueCA9IEFERF9JTlQzMiggeDMsIHhPZmZzZXQzICk7CisgICAgUDMueSA9IEFERF9JTlQzMiggeTMsIHlPZmZzZXQzICk7CiAKICAgICBpZiAoIGdseXBocGF0aC0+bW92ZUlzUGVuZGluZyApCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJoaW50cy5oIGIvc3JjL3BzYXV4L3BzaGludHMuaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMmhpbnRzLmgKcmVuYW1lIHRvIHNyYy9wc2F1eC9wc2hpbnRzLmgKaW5kZXggYTg5ODQ1NC4uOTJlMzdlOSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJoaW50cy5oCisrKyBiL3NyYy9wc2F1eC9wc2hpbnRzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZjJoaW50cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNoaW50cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFkb2JlJ3MgY29kZSBmb3IgaGFuZGxpbmcgQ0ZGIGhpbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzYsOSArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIENGMkhJTlRTX0hfCi0jZGVmaW5lIENGMkhJTlRTX0hfCi0KKyNpZm5kZWYgUFNISU5UX0hfCisjZGVmaW5lIFBTSElOVF9IXwogCiBGVF9CRUdJTl9IRUFERVIKIApAQCAtMjgzLDcgKzI4Miw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIENGMkhJTlRTX0hfICovCisjZW5kaWYgLyogUFNISU5UX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvcHNpbnRycC5jIGIvc3JjL3BzYXV4L3BzaW50cnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVhOGRhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BzYXV4L3BzaW50cnAuYwpAQCAtMCwwICsxLDMwNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzaW50cnAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBZG9iZSdzIENGRiBJbnRlcnByZXRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE0IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgc29mdHdhcmUsIGFuZCBhbGwgd29ya3Mgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBzb3VyY2Ugb3IgICAgICAgKi8KKy8qICBvYmplY3QgY29kZSBmb3JtIGFzIGluZGljYXRlZCBieSB0aGUgY29weXJpZ2h0IG5vdGljZShzKSBpbmNsdWRlZCAgICAgICovCisvKiAgaGVyZWluIChjb2xsZWN0aXZlbHksIHRoZSAiV29yayIpIGlzIG1hZGUgYXZhaWxhYmxlLCBhbmQgbWF5IG9ubHkgYmUgICAqLworLyogIHVzZWQsIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSwgICAgKi8KKy8qICBMSUNFTlNFLlRYVC4gIEFkZGl0aW9uYWxseSwgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlICovCisvKiAgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlLCBlYWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBXb3JrIGhlcmVieSBncmFudHMgICAqLworLyogIHRvIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgICAgKi8KKy8qICB0aGUgRnJlZVR5cGUgUHJvamVjdCBMaWNlbnNlIGFuZCB0aGlzIHNlY3Rpb24gKGhlcmVhZnRlciwgIllvdSIgb3IgICAgICovCisvKiAgIllvdXIiKSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsICAgICAgICAgICAgICAqLworLyogIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgICAgKi8KKy8qICBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCAgICAgICovCisvKiAgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlICAqLworLyogIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIGNvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5ICAgICAgKi8KKy8qICBpbmZyaW5nZWQgYnkgdGhlaXIgY29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyICAgICovCisvKiAgY29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBjb250cmlidXRpb24ocykgd2FzICAgICAgICAqLworLyogIHN1Ym1pdHRlZC4gIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5ICAgICAgKi8KKy8qICAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCAgICovCisvKiAgdGhlIFdvcmsgb3IgYSBjb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyAgICAqLworLyogIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzICAgKi8KKy8qICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgICovCisvKiAgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBCeSB1c2luZywgbW9kaWZ5aW5nLCBvciBkaXN0cmlidXRpbmcgdGhlIFdvcmsgeW91IGluZGljYXRlIHRoYXQgeW91ICAgICovCisvKiAgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgICAgICAgICAgICAgICAqLworLyogIEZyZWVUeXBlIFByb2plY3QgTGljZW5zZSBhcyB3ZWxsIGFzIHRob3NlIHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbiwgICAgKi8KKy8qICBhbmQgeW91IGFjY2VwdCB0aGVtIGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAicHNmdC5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfU0VSVklDRV9DRkZfVEFCTEVfTE9BRF9ICisKKyNpbmNsdWRlICJwc2dsdWUuaCIKKyNpbmNsdWRlICJwc2ZvbnQuaCIKKyNpbmNsdWRlICJwc3N0YWNrLmgiCisjaW5jbHVkZSAicHNoaW50cy5oIgorI2luY2x1ZGUgInBzaW50cnAuaCIKKworI2luY2x1ZGUgInBzZXJyb3IuaCIKKworI2luY2x1ZGUgInBzb2Jqcy5oIiAgIC8qIGZvciBjZmZfcmFuZG9tICovCisjaW5jbHVkZSAidDFkZWNvZGUuaCIgLyogZm9yIHQxIHNlYWMgICAgKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogVGhlIG1hY3JvIEZUX0NPTVBPTkVOVCBpcyB1c2VkIGluIHRyYWNlIG1vZGUuICBJdCBpcyBhbiBpbXBsaWNpdCAgICAgICovCisgIC8qIHBhcmFtZXRlciBvZiB0aGUgRlRfVFJBQ0UoKSBhbmQgRlRfRVJST1IoKSBtYWNyb3MsIHVzZWQgdG8gcHJpbnQvbG9nICAqLworICAvKiBtZXNzYWdlcyBkdXJpbmcgZXhlY3V0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjdW5kZWYgIEZUX0NPTVBPTkVOVAorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX2NmMmludGVycAorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2hpbnRtYXNrX2luaXQoIENGMl9IaW50TWFzayAgaGludG1hc2ssCisgICAgICAgICAgICAgICAgICAgICBGVF9FcnJvciogICAgIGVycm9yICkKKyAgeworICAgIEZUX1pFUk8oIGhpbnRtYXNrICk7CisKKyAgICBoaW50bWFzay0+ZXJyb3IgPSBlcnJvcjsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCBGVF9Cb29sICkKKyAgY2YyX2hpbnRtYXNrX2lzVmFsaWQoIGNvbnN0IENGMl9IaW50TWFzayAgaGludG1hc2sgKQorICB7CisgICAgcmV0dXJuIGhpbnRtYXNrLT5pc1ZhbGlkOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Jvb2wgKQorICBjZjJfaGludG1hc2tfaXNOZXcoIGNvbnN0IENGMl9IaW50TWFzayAgaGludG1hc2sgKQorICB7CisgICAgcmV0dXJuIGhpbnRtYXNrLT5pc05ldzsKKyAgfQorCisKKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgY2YyX2hpbnRtYXNrX3NldE5ldyggQ0YyX0hpbnRNYXNrICBoaW50bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICB2YWwgKQorICB7CisgICAgaGludG1hc2stPmlzTmV3ID0gdmFsOworICB9CisKKworICAvKiBjbGllbnRzIGNhbGwgYGdldE1hc2tQdHInIGluIG9yZGVyIHRvIGl0ZXJhdGUgKi8KKyAgLyogdGhyb3VnaCBoaW50IG1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgRlRfTE9DQUxfREVGKCBGVF9CeXRlKiApCisgIGNmMl9oaW50bWFza19nZXRNYXNrUHRyKCBDRjJfSGludE1hc2sgIGhpbnRtYXNrICkKKyAgeworICAgIHJldHVybiBoaW50bWFzay0+bWFzazsKKyAgfQorCisKKyAgc3RhdGljIHNpemVfdAorICBjZjJfaGludG1hc2tfc2V0Q291bnRzKCBDRjJfSGludE1hc2sgIGhpbnRtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIGJpdENvdW50ICkKKyAgeworICAgIGlmICggYml0Q291bnQgPiBDRjJfTUFYX0hJTlRTICkKKyAgICB7CisgICAgICAvKiB0b3RhbCBvZiBoIGFuZCB2IHN0ZW1zIG11c3QgYmUgPD0gOTYgKi8KKyAgICAgIENGMl9TRVRfRVJST1IoIGhpbnRtYXNrLT5lcnJvciwgSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGhpbnRtYXNrLT5iaXRDb3VudCAgPSBiaXRDb3VudDsKKyAgICBoaW50bWFzay0+Ynl0ZUNvdW50ID0gKCBoaW50bWFzay0+Yml0Q291bnQgKyA3ICkgLyA4OworCisgICAgaGludG1hc2stPmlzVmFsaWQgPSBUUlVFOworICAgIGhpbnRtYXNrLT5pc05ldyAgID0gVFJVRTsKKworICAgIHJldHVybiBiaXRDb3VudDsKKyAgfQorCisKKyAgLyogY29uc3VtZSB0aGUgaGludG1hc2sgYnl0ZXMgZnJvbSB0aGUgY2hhcnN0cmluZywgYWR2YW5jaW5nIHRoZSBzcmMgKi8KKyAgLyogcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgY2YyX2hpbnRtYXNrX3JlYWQoIENGMl9IaW50TWFzayAgaGludG1hc2ssCisgICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyICAgIGNoYXJzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICAgIGJpdENvdW50ICkKKyAgeworICAgIHNpemVfdCAgaTsKKworI2lmbmRlZiBDRjJfTkRFQlVHCisgICAgLyogdGhlc2UgYXJlIHRoZSBiaXRzIGluIHRoZSBmaW5hbCBtYXNrIGJ5dGUgdGhhdCBzaG91bGQgYmUgemVybyAgKi8KKyAgICAvKiBOb3RlOiB0aGlzIHZhcmlhYmxlIGlzIG9ubHkgdXNlZCBpbiBhbiBhc3NlcnQgZXhwcmVzc2lvbiBiZWxvdyAqLworICAgIC8qIGFuZCB0aGVuIG9ubHkgaWYgQ0YyX05ERUJVRyBpcyBub3QgZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICovCisgICAgQ0YyX1VJbnQgIG1hc2sgPSAoIDEgPDwgKCAtKENGMl9JbnQpYml0Q291bnQgJiA3ICkgKSAtIDE7CisjZW5kaWYKKworCisgICAgLyogaW5pdGlhbGl6ZSBjb3VudHMgYW5kIGlzVmFsaWQgKi8KKyAgICBpZiAoIGNmMl9oaW50bWFza19zZXRDb3VudHMoIGhpbnRtYXNrLCBiaXRDb3VudCApID09IDAgKQorICAgICAgcmV0dXJuOworCisgICAgRlRfQVNTRVJUKCBoaW50bWFzay0+Ynl0ZUNvdW50ID4gMCApOworCisgICAgRlRfVFJBQ0U0KCggIiAobWFza2J5dGVzOiIgKSk7CisKKyAgICAvKiBzZXQgbWFzayBhbmQgYWR2YW5jZSBpbnRlcnByZXRlcidzIGNoYXJzdHJpbmcgcG9pbnRlciAqLworICAgIGZvciAoIGkgPSAwOyBpIDwgaGludG1hc2stPmJ5dGVDb3VudDsgaSsrICkKKyAgICB7CisgICAgICBoaW50bWFzay0+bWFza1tpXSA9IChGVF9CeXRlKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKKyAgICAgIEZUX1RSQUNFNCgoICIgMHglMDJYIiwgaGludG1hc2stPm1hc2tbaV0gKSk7CisgICAgfQorCisgICAgRlRfVFJBQ0U0KCggIilcbiIgKSk7CisKKyAgICAvKiBhc3NlcnQgYW55IHVudXNlZCBiaXRzIGluIGxhc3QgYnl0ZSBhcmUgemVybyB1bmxlc3MgdGhlcmUncyBhIHByaW9yICovCisgICAgLyogZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGJpdENvdW50IC0+IG1hc2ssIDAgLT4gMCwgMSAtPiA3ZiwgMiAtPiAzZiwgLi4uIDYgLT4gMywgNyAtPiAxICAgICAgKi8KKyNpZm5kZWYgQ0YyX05ERUJVRworICAgIEZUX0FTU0VSVCggKCBoaW50bWFzay0+bWFza1toaW50bWFzay0+Ynl0ZUNvdW50IC0gMV0gJiBtYXNrICkgPT0gMCB8fAorICAgICAgICAgICAgICAgKmhpbnRtYXNrLT5lcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworI2VuZGlmCisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmMl9oaW50bWFza19zZXRBbGwoIENGMl9IaW50TWFzayAgaGludG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgYml0Q291bnQgKQorICB7CisgICAgc2l6ZV90ICAgIGk7CisgICAgQ0YyX1VJbnQgIG1hc2sgPSAoIDEgPDwgKCAtKENGMl9JbnQpYml0Q291bnQgJiA3ICkgKSAtIDE7CisKKworICAgIC8qIGluaXRpYWxpemUgY291bnRzIGFuZCBpc1ZhbGlkICovCisgICAgaWYgKCBjZjJfaGludG1hc2tfc2V0Q291bnRzKCBoaW50bWFzaywgYml0Q291bnQgKSA9PSAwICkKKyAgICAgIHJldHVybjsKKworICAgIEZUX0FTU0VSVCggaGludG1hc2stPmJ5dGVDb3VudCA+IDAgKTsKKyAgICBGVF9BU1NFUlQoIGhpbnRtYXNrLT5ieXRlQ291bnQgPD0KKyAgICAgICAgICAgICAgICAgc2l6ZW9mICggaGludG1hc2stPm1hc2sgKSAvIHNpemVvZiAoIGhpbnRtYXNrLT5tYXNrWzBdICkgKTsKKworICAgIC8qIHNldCBtYXNrIHRvIGFsbCBvbmVzICovCisgICAgZm9yICggaSA9IDA7IGkgPCBoaW50bWFzay0+Ynl0ZUNvdW50OyBpKysgKQorICAgICAgaGludG1hc2stPm1hc2tbaV0gPSAweEZGOworCisgICAgLyogY2xlYXIgdW51c2VkIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBiaXRDb3VudCAtPiBtYXNrLCAwIC0+IDAsIDEgLT4gN2YsIDIgLT4gM2YsIC4uLiA2IC0+IDMsIDcgLT4gMSAqLworICAgIGhpbnRtYXNrLT5tYXNrW2hpbnRtYXNrLT5ieXRlQ291bnQgLSAxXSAmPSB+bWFzazsKKyAgfQorCisKKyAgLyogVHlwZTIgY2hhcnN0cmluZyBvcGNvZGVzICovCisgIGVudW0KKyAgeworICAgIGNmMl9jbWRSRVNFUlZFRF8wLCAgIC8qIDAgKi8KKyAgICBjZjJfY21kSFNURU0sICAgICAgICAvKiAxICovCisgICAgY2YyX2NtZFJFU0VSVkVEXzIsICAgLyogMiAqLworICAgIGNmMl9jbWRWU1RFTSwgICAgICAgIC8qIDMgKi8KKyAgICBjZjJfY21kVk1PVkVUTywgICAgICAvKiA0ICovCisgICAgY2YyX2NtZFJMSU5FVE8sICAgICAgLyogNSAqLworICAgIGNmMl9jbWRITElORVRPLCAgICAgIC8qIDYgKi8KKyAgICBjZjJfY21kVkxJTkVUTywgICAgICAvKiA3ICovCisgICAgY2YyX2NtZFJSQ1VSVkVUTywgICAgLyogOCAqLworICAgIGNmMl9jbWRDTE9TRVBBVEgsICAgIC8qIDkgICAgICBUMSBvbmx5ICovCisgICAgY2YyX2NtZENBTExTVUJSLCAgICAgLyogMTAgKi8KKyAgICBjZjJfY21kUkVUVVJOLCAgICAgICAvKiAxMSAqLworICAgIGNmMl9jbWRFU0MsICAgICAgICAgIC8qIDEyICovCisgICAgY2YyX2NtZEhTQlcsICAgICAgICAgLyogMTMgICAgIFQxIG9ubHkgKi8KKyAgICBjZjJfY21kRU5EQ0hBUiwgICAgICAvKiAxNCAqLworICAgIGNmMl9jbWRWU0lOREVYLCAgICAgIC8qIDE1ICovCisgICAgY2YyX2NtZEJMRU5ELCAgICAgICAgLyogMTYgKi8KKyAgICBjZjJfY21kUkVTRVJWRURfMTcsICAvKiAxNyAqLworICAgIGNmMl9jbWRIU1RFTUhNLCAgICAgIC8qIDE4ICovCisgICAgY2YyX2NtZEhJTlRNQVNLLCAgICAgLyogMTkgKi8KKyAgICBjZjJfY21kQ05UUk1BU0ssICAgICAvKiAyMCAqLworICAgIGNmMl9jbWRSTU9WRVRPLCAgICAgIC8qIDIxICovCisgICAgY2YyX2NtZEhNT1ZFVE8sICAgICAgLyogMjIgKi8KKyAgICBjZjJfY21kVlNURU1ITSwgICAgICAvKiAyMyAqLworICAgIGNmMl9jbWRSQ1VSVkVMSU5FLCAgIC8qIDI0ICovCisgICAgY2YyX2NtZFJMSU5FQ1VSVkUsICAgLyogMjUgKi8KKyAgICBjZjJfY21kVlZDVVJWRVRPLCAgICAvKiAyNiAqLworICAgIGNmMl9jbWRISENVUlZFVE8sICAgIC8qIDI3ICovCisgICAgY2YyX2NtZEVYVEVOREVETk1CUiwgLyogMjggKi8KKyAgICBjZjJfY21kQ0FMTEdTVUJSLCAgICAvKiAyOSAqLworICAgIGNmMl9jbWRWSENVUlZFVE8sICAgIC8qIDMwICovCisgICAgY2YyX2NtZEhWQ1VSVkVUTyAgICAgLyogMzEgKi8KKyAgfTsKKworICBlbnVtCisgIHsKKyAgICBjZjJfZXNjRE9UU0VDVElPTiwgICAvKiAwICovCisgICAgY2YyX2VzY1ZTVEVNMywgICAgICAgLyogMSAgICAgIFQxIG9ubHkgKi8KKyAgICBjZjJfZXNjSFNURU0zLCAgICAgICAvKiAyICAgICAgVDEgb25seSAqLworICAgIGNmMl9lc2NBTkQsICAgICAgICAgIC8qIDMgKi8KKyAgICBjZjJfZXNjT1IsICAgICAgICAgICAvKiA0ICovCisgICAgY2YyX2VzY05PVCwgICAgICAgICAgLyogNSAqLworICAgIGNmMl9lc2NTRUFDLCAgICAgICAgIC8qIDYgICAgICBUMSBvbmx5ICovCisgICAgY2YyX2VzY1NCVywgICAgICAgICAgLyogNyAgICAgIFQxIG9ubHkgKi8KKyAgICBjZjJfZXNjUkVTRVJWRURfOCwgICAvKiA4ICovCisgICAgY2YyX2VzY0FCUywgICAgICAgICAgLyogOSAqLworICAgIGNmMl9lc2NBREQsICAgICAgICAgIC8qIDEwICAgICBsaWtlIG90aGVyQUREICovCisgICAgY2YyX2VzY1NVQiwgICAgICAgICAgLyogMTEgICAgIGxpa2Ugb3RoZXJTVUIgKi8KKyAgICBjZjJfZXNjRElWLCAgICAgICAgICAvKiAxMiAqLworICAgIGNmMl9lc2NSRVNFUlZFRF8xMywgIC8qIDEzICovCisgICAgY2YyX2VzY05FRywgICAgICAgICAgLyogMTQgKi8KKyAgICBjZjJfZXNjRVEsICAgICAgICAgICAvKiAxNSAqLworICAgIGNmMl9lc2NDQUxMT1RIRVJTVUJSLC8qIDE2ICAgICBUMSBvbmx5ICovCisgICAgY2YyX2VzY1BPUCwgICAgICAgICAgLyogMTcgICAgIFQxIG9ubHkgKi8KKyAgICBjZjJfZXNjRFJPUCwgICAgICAgICAvKiAxOCAqLworICAgIGNmMl9lc2NSRVNFUlZFRF8xOSwgIC8qIDE5ICovCisgICAgY2YyX2VzY1BVVCwgICAgICAgICAgLyogMjAgICAgIGxpa2Ugb3RoZXJQVVQgICAgKi8KKyAgICBjZjJfZXNjR0VULCAgICAgICAgICAvKiAyMSAgICAgbGlrZSBvdGhlckdFVCAgICAqLworICAgIGNmMl9lc2NJRkVMU0UsICAgICAgIC8qIDIyICAgICBsaWtlIG90aGVySUZFTFNFICovCisgICAgY2YyX2VzY1JBTkRPTSwgICAgICAgLyogMjMgICAgIGxpa2Ugb3RoZXJSQU5ET00gKi8KKyAgICBjZjJfZXNjTVVMLCAgICAgICAgICAvKiAyNCAgICAgbGlrZSBvdGhlck1VTCAgICAqLworICAgIGNmMl9lc2NSRVNFUlZFRF8yNSwgIC8qIDI1ICovCisgICAgY2YyX2VzY1NRUlQsICAgICAgICAgLyogMjYgKi8KKyAgICBjZjJfZXNjRFVQLCAgICAgICAgICAvKiAyNyAgICAgbGlrZSBvdGhlckRVUCAgICAqLworICAgIGNmMl9lc2NFWENILCAgICAgICAgIC8qIDI4ICAgICBsaWtlIG90aGVyRVhDSCAgICovCisgICAgY2YyX2VzY0lOREVYLCAgICAgICAgLyogMjkgKi8KKyAgICBjZjJfZXNjUk9MTCwgICAgICAgICAvKiAzMCAqLworICAgIGNmMl9lc2NSRVNFUlZFRF8zMSwgIC8qIDMxICovCisgICAgY2YyX2VzY1JFU0VSVkVEXzMyLCAgLyogMzIgKi8KKyAgICBjZjJfZXNjU0VUQ1VSUkVOVFBULCAvKiAzMyAgICAgVDEgb25seSAqLworICAgIGNmMl9lc2NIRkxFWCwgICAgICAgIC8qIDM0ICovCisgICAgY2YyX2VzY0ZMRVgsICAgICAgICAgLyogMzUgKi8KKyAgICBjZjJfZXNjSEZMRVgxLCAgICAgICAvKiAzNiAqLworICAgIGNmMl9lc2NGTEVYMSwgICAgICAgIC8qIDM3ICovCisgICAgY2YyX2VzY1JFU0VSVkVEXzM4ICAgLyogMzggICAgICYgYWxsIGhpZ2hlciAgICAgKi8KKyAgfTsKKworCisgIC8qIGBzdGVtSGludEFycmF5JyBkb2VzIG5vdCBjaGFuZ2Ugb25jZSB3ZSBzdGFydCBkcmF3aW5nIHRoZSBvdXRsaW5lLiAqLworICBzdGF0aWMgdm9pZAorICBjZjJfZG9TdGVtcyggY29uc3QgQ0YyX0ZvbnQgIGZvbnQsCisgICAgICAgICAgICAgICBDRjJfU3RhY2sgICAgICAgb3BTdGFjaywKKyAgICAgICAgICAgICAgIENGMl9BcnJTdGFjayAgICBzdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgRlRfQm9vbCogICAgICAgIGhhdmVXaWR0aCwKKyAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgICBoaW50T2Zmc2V0ICkKKyAgeworICAgIENGMl9VSW50ICBpOworICAgIENGMl9VSW50ICBjb3VudCAgICAgICA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworICAgIEZUX0Jvb2wgICBoYXNXaWR0aEFyZyA9IChGVF9Cb29sKSggY291bnQgJiAxICk7CisKKyAgICAvKiB2YXJpYWJsZSBhY2N1bXVsYXRlcyBkZWx0YSB2YWx1ZXMgZnJvbSBvcGVyYW5kIHN0YWNrICovCisgICAgQ0YyX0ZpeGVkICBwb3NpdGlvbiA9IGhpbnRPZmZzZXQ7CisKKyAgICBpZiAoIGZvbnQtPmlzVDEgJiYgIWZvbnQtPmRlY29kZXItPmZsZXhfc3RhdGUgJiYgISpoYXZlV2lkdGggKQorICAgICAgRlRfRVJST1IoKCAiY2YyX2RvU3RlbXMgKFR5cGUgMSBtb2RlKToiCisgICAgICAgICAgICAgICAgICIgTm8gd2lkdGguIFVzZSBoc2J3L3NidyBhcyBmaXJzdCBvcFxuIiApKTsKKworICAgIGlmICggIWZvbnQtPmlzVDEgJiYgaGFzV2lkdGhBcmcgJiYgISpoYXZlV2lkdGggKQorICAgICAgKndpZHRoID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfZ2V0Tm9taW5hbFdpZHRoWCggZm9udC0+ZGVjb2RlciApICk7CisKKyAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgZ290byBleGl0OworCisgICAgZm9yICggaSA9IGhhc1dpZHRoQXJnID8gMSA6IDA7IGkgPCBjb3VudDsgaSArPSAyICkKKyAgICB7CisgICAgICAvKiBjb25zdHJ1Y3QgYSBDRjJfU3RlbUhpbnQgYW5kIHB1c2ggaXQgb250byB0aGUgbGlzdCAqLworICAgICAgQ0YyX1N0ZW1IaW50UmVjICBzdGVtaGludDsKKworCisgICAgICBzdGVtaGludC5taW4gPQorICAgICAgcG9zaXRpb24gICAgID0gQUREX0lOVDMyKCBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGkgKSApOworICAgICAgc3RlbWhpbnQubWF4ID0KKyAgICAgIHBvc2l0aW9uICAgICA9IEFERF9JTlQzMiggcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpICsgMSApICk7CisKKyAgICAgIHN0ZW1oaW50LnVzZWQgID0gRkFMU0U7CisgICAgICBzdGVtaGludC5tYXhEUyA9CisgICAgICBzdGVtaGludC5taW5EUyA9IDA7CisKKyAgICAgIGNmMl9hcnJzdGFja19wdXNoKCBzdGVtSGludEFycmF5LCAmc3RlbWhpbnQgKTsgLyogZGVmZXIgZXJyb3IgY2hlY2sgKi8KKyAgICB9CisKKyAgICBjZjJfc3RhY2tfY2xlYXIoIG9wU3RhY2sgKTsKKworICBleGl0OgorICAgIC8qIGNmMl9kb1N0ZW1zIG11c3QgZGVmaW5lIGEgd2lkdGggKG1heSBiZSBkZWZhdWx0KSAqLworICAgICpoYXZlV2lkdGggPSBUUlVFOworICB9CisKKworICBzdGF0aWMgdm9pZAorICBjZjJfZG9GbGV4KCBDRjJfU3RhY2sgICAgICAgb3BTdGFjaywKKyAgICAgICAgICAgICAgQ0YyX0ZpeGVkKiAgICAgIGN1clgsCisgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgICBjdXJZLAorICAgICAgICAgICAgICBDRjJfR2x5cGhQYXRoICAgZ2x5cGhQYXRoLAorICAgICAgICAgICAgICBjb25zdCBGVF9Cb29sKiAgcmVhZEZyb21TdGFjaywKKyAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgIGRvQ29uZGl0aW9uYWxMYXN0UmVhZCApCisgIHsKKyAgICBDRjJfRml4ZWQgIHZhbHNbMTRdOworICAgIENGMl9VSW50ICAgaWR4OworICAgIEZUX0Jvb2wgICAgaXNIRmxleDsKKyAgICBDRjJfSW50ICAgIHRvcCwgaSwgajsKKworCisgICAgdmFsc1swXSA9ICpjdXJYOworICAgIHZhbHNbMV0gPSAqY3VyWTsKKyAgICBpZHggICAgID0gMDsKKyAgICBpc0hGbGV4ID0gRlRfQk9PTCggcmVhZEZyb21TdGFja1s5XSA9PSBGQUxTRSApOworICAgIHRvcCAgICAgPSBpc0hGbGV4ID8gOSA6IDEwOworCisgICAgZm9yICggaSA9IDA7IGkgPCB0b3A7IGkrKyApCisgICAgeworICAgICAgdmFsc1tpICsgMl0gPSB2YWxzW2ldOworICAgICAgaWYgKCByZWFkRnJvbVN0YWNrW2ldICkKKyAgICAgICAgdmFsc1tpICsgMl0gPSBBRERfSU5UMzIoIHZhbHNbaSArIDJdLCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4KysgKSApOworICAgIH0KKworICAgIGlmICggaXNIRmxleCApCisgICAgICB2YWxzWzkgKyAyXSA9ICpjdXJZOworCisgICAgaWYgKCBkb0NvbmRpdGlvbmFsTGFzdFJlYWQgKQorICAgIHsKKyAgICAgIEZUX0Jvb2wgICAgbGFzdElzWCA9IChGVF9Cb29sKSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2ZpeGVkQWJzKCBTVUJfSU5UMzIoIHZhbHNbMTBdLCAqY3VyWCApICkgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfZml4ZWRBYnMoIFNVQl9JTlQzMiggdmFsc1sxMV0sICpjdXJZICkgKSApOworICAgICAgQ0YyX0ZpeGVkICBsYXN0VmFsID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCApOworCisKKyAgICAgIGlmICggbGFzdElzWCApCisgICAgICB7CisgICAgICAgIHZhbHNbMTJdID0gQUREX0lOVDMyKCB2YWxzWzEwXSwgbGFzdFZhbCApOworICAgICAgICB2YWxzWzEzXSA9ICpjdXJZOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICB2YWxzWzEyXSA9ICpjdXJYOworICAgICAgICB2YWxzWzEzXSA9IEFERF9JTlQzMiggdmFsc1sxMV0sIGxhc3RWYWwgKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGlmICggcmVhZEZyb21TdGFja1sxMF0gKQorICAgICAgICB2YWxzWzEyXSA9IEFERF9JTlQzMiggdmFsc1sxMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4KysgKSApOworICAgICAgZWxzZQorICAgICAgICB2YWxzWzEyXSA9ICpjdXJYOworCisgICAgICBpZiAoIHJlYWRGcm9tU3RhY2tbMTFdICkKKyAgICAgICAgdmFsc1sxM10gPSBBRERfSU5UMzIoIHZhbHNbMTFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCApICk7CisgICAgICBlbHNlCisgICAgICAgIHZhbHNbMTNdID0gKmN1clk7CisgICAgfQorCisgICAgZm9yICggaiA9IDA7IGogPCAyOyBqKysgKQorICAgICAgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKCBnbHlwaFBhdGgsIHZhbHNbaiAqIDYgKyAyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzW2ogKiA2ICsgM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsc1tqICogNiArIDRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaiAqIDYgKyA1XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzW2ogKiA2ICsgNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsc1tqICogNiArIDddICk7CisKKyAgICBjZjJfc3RhY2tfY2xlYXIoIG9wU3RhY2sgKTsKKworICAgICpjdXJYID0gdmFsc1sxMl07CisgICAgKmN1clkgPSB2YWxzWzEzXTsKKyAgfQorCisKKyAgLyogQmxlbmQgbnVtT3BlcmFuZHMgb24gdGhlIHN0YWNrLCAgICAgICAgICAgICAgICAqLworICAvKiBzdG9yZSByZXN1bHRzIGludG8gdGhlIGZpcnN0IG51bUJsZW5kcyB2YWx1ZXMsICovCisgIC8qIHRoZW4gcG9wIHJlbWFpbmluZyBhcmd1bWVudHMuICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgY2YyX2RvQmxlbmQoIGNvbnN0IENGRl9CbGVuZCAgYmxlbmQsCisgICAgICAgICAgICAgICBDRjJfU3RhY2sgICAgICAgIG9wU3RhY2ssCisgICAgICAgICAgICAgICBDRjJfVUludCAgICAgICAgIG51bUJsZW5kcyApCisgIHsKKyAgICBDRjJfVUludCAgZGVsdGE7CisgICAgQ0YyX1VJbnQgIGJhc2U7CisgICAgQ0YyX1VJbnQgIGksIGo7CisgICAgQ0YyX1VJbnQgIG51bU9wZXJhbmRzID0gKENGMl9VSW50KSggbnVtQmxlbmRzICogYmxlbmQtPmxlbkJWICk7CisKKworICAgIGJhc2UgID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgLSBudW1PcGVyYW5kczsKKyAgICBkZWx0YSA9IGJhc2UgKyBudW1CbGVuZHM7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bUJsZW5kczsgaSsrICkKKyAgICB7CisgICAgICBjb25zdCBDRjJfRml4ZWQqICB3ZWlnaHQgPSAmYmxlbmQtPkJWWzFdOworCisgICAgICAvKiBzdGFydCB3aXRoIGZpcnN0IHRlcm0gKi8KKyAgICAgIENGMl9GaXhlZCAgc3VtID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGkgKyBiYXNlICk7CisKKworICAgICAgZm9yICggaiA9IDE7IGogPCBibGVuZC0+bGVuQlY7IGorKyApCisgICAgICAgIHN1bSA9IEFERF9JTlQzMiggc3VtLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggKndlaWdodCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGErKyApICkgKTsKKworICAgICAgLyogc3RvcmUgYmxlbmRlZCByZXN1bHQgICovCisgICAgICBjZjJfc3RhY2tfc2V0UmVhbCggb3BTdGFjaywgaSArIGJhc2UsIHN1bSApOworICAgIH0KKworICAgIC8qIGxlYXZlIG9ubHkgYG51bUJsZW5kcycgcmVzdWx0cyBvbiBzdGFjayAqLworICAgIGNmMl9zdGFja19wb3AoIG9wU3RhY2ssIG51bU9wZXJhbmRzIC0gbnVtQmxlbmRzICk7CisgIH0KKworCisgIC8qCisgICAqIGBlcnJvcicgaXMgYSBzaGFyZWQgZXJyb3IgY29kZSB1c2VkIGJ5IG1hbnkgb2JqZWN0cyBpbiB0aGlzCisgICAqIHJvdXRpbmUuICBCZWZvcmUgdGhlIGNvZGUgY29udGludWVzIGZyb20gYW4gZXJyb3IsIGl0IG11c3QgY2hlY2sgYW5kCisgICAqIHJlY29yZCB0aGUgZXJyb3IgaW4gYCplcnJvcicuICBUaGUgaWRlYSBpcyB0aGF0IHRoaXMgc2hhcmVkCisgICAqIGVycm9yIGNvZGUgd2lsbCByZWNvcmQgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkLiAgSWYgdGVzdGluZworICAgKiBmb3IgYW4gZXJyb3IgYW55d2F5LCB0aGUgY29zdCBvZiBgZ290byBleGl0JyBpcyBzbWFsbCwgc28gd2UgZG8gaXQsCisgICAqIGV2ZW4gaWYgY29udGludWluZyB3b3VsZCBiZSBzYWZlLiAgSW4gdGhpcyBjYXNlLCBgbGFzdEVycm9yJyBpcworICAgKiBzZXQsIHNvIHRoZSB0ZXN0aW5nIGFuZCBzdG9yaW5nIGNhbiBiZSBkb25lIGluIG9uZSBwbGFjZSwgYXQgYGV4aXQnLgorICAgKgorICAgKiBDb250aW51aW5nIGFmdGVyIGFuIGVycm9yIGlzIGludGVuZGVkIGZvciBvYmplY3RzIHdoaWNoIGRvIHRoZWlyIG93bgorICAgKiB0ZXN0aW5nIG9mIGAqZXJyb3InLCBlLmcuLCBhcnJheSBzdGFjayBmdW5jdGlvbnMuICBUaGlzIGFsbG93cyB1cyB0bworICAgKiBhdm9pZCBhbiBleHRyYSB0ZXN0IGFmdGVyIHRoZSBjYWxsLgorICAgKgorICAgKiBVbmltcGxlbWVudGVkIG9wY29kZXMgYXJlIGlnbm9yZWQuCisgICAqCisgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZjJfaW50ZXJwVDJDaGFyU3RyaW5nKCBDRjJfRm9udCAgICAgICAgICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0J1ZmZlciAgICAgICAgICAgIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX091dGxpbmVDYWxsYmFja3MgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgICAgIHRyYW5zbGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgICAgICAgZG9pbmdTZWFjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRml4ZWQgICAgICAgICAgICAgY3VyWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICAgICAgICAgICAgIGN1clksCisgICAgICAgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCogICAgICAgICAgICB3aWR0aCApCisgIHsKKyAgICAvKiBsYXN0RXJyb3IgaXMgdXNlZCBmb3IgZXJyb3JzIHRoYXQgYXJlIGltbWVkaWF0ZWx5IHRlc3RlZCAqLworICAgIEZUX0Vycm9yICBsYXN0RXJyb3IgPSBGVF9FcnJfT2s7CisKKyAgICAvKiBwb2ludGVyIHRvIHBhcnNlZCBmb250IG9iamVjdCAqLworICAgIFBTX0RlY29kZXIqICBkZWNvZGVyID0gZm9udC0+ZGVjb2RlcjsKKworICAgIEZUX0Vycm9yKiAgZXJyb3IgID0gJmZvbnQtPmVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZm9udC0+bWVtb3J5OworCisgICAgQ0YyX0ZpeGVkICBzY2FsZVkgICAgICAgID0gZm9udC0+aW5uZXJUcmFuc2Zvcm0uZDsKKyAgICBDRjJfRml4ZWQgIG5vbWluYWxXaWR0aFggPSBjZjJfZ2V0Tm9taW5hbFdpZHRoWCggZGVjb2RlciApOworCisgICAgLyogc3R1ZmYgZm9yIFR5cGUgMSAqLworICAgIEZUX0ludCAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMDsKKyAgICBGVF9Cb29sICBsYXJnZV9pbnQgICAgICAgICAgICAgICAgICA9IEZBTFNFOworICAgIEZUX0Jvb2wgIGluaXRpYWxfbWFwX3JlYWR5ICAgICAgICAgID0gRkFMU0U7CisKKyNkZWZpbmUgUFNfU1RPUkFHRV9TSVpFIDMKKyAgICBDRjJfRjE2RG90MTYgIHJlc3VsdHNbUFNfU1RPUkFHRV9TSVpFXTsgICAvKiBmb3Igb3RoZXJzdWJyIHJlc3VsdHMgKi8KKyAgICBGVF9JbnQgICAgICAgIHJlc3VsdF9jbnQgPSAwOworCisgICAgLyogc2F2ZSB0aGlzIGZvciBoaW50aW5nIHNlYWMgYWNjZW50cyAqLworICAgIENGMl9GaXhlZCAgaGludE9yaWdpblkgPSBjdXJZOworCisgICAgQ0YyX1N0YWNrICBvcFN0YWNrID0gTlVMTDsKKyAgICBGVF9VSW50ICAgIHN0YWNrU2l6ZTsKKyAgICBGVF9CeXRlICAgIG9wMTsgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IG9wY29kZSBieXRlICovCisKKyAgICBDRjJfRjE2RG90MTYgIHN0b3JhZ2VbQ0YyX1NUT1JBR0VfU0laRV07ICAgIC8qIGZvciBgcHV0JyBhbmQgYGdldCcgKi8KKyAgICBDRjJfRjE2RG90MTYgIGZsZXhTdG9yZVs2XTsgICAgICAgICAgICAgICAgIC8qIGZvciBUeXBlIDEgZmxleCAgICAgKi8KKworICAgIC8qIGluc3RydWN0aW9uIGxpbWl0OyAyMCwwMDAsMDAwIG1hdGNoZXMgQXZhbG9uICovCisgICAgRlRfVUludDMyICBpbnN0cnVjdGlvbkxpbWl0ID0gMjAwMDAwMDBVTDsKKworICAgIENGMl9BcnJTdGFja1JlYyAgc3ViclN0YWNrOworCisgICAgRlRfQm9vbCAgICAgaGF2ZVdpZHRoOworICAgIENGMl9CdWZmZXIgIGNoYXJzdHJpbmcgPSBOVUxMOworCisgICAgQ0YyX0ludCAgY2hhcnN0cmluZ0luZGV4ID0gLTE7ICAgICAgIC8qIGluaXRpYWxpemUgdG8gZW1wdHkgKi8KKworICAgIC8qIFRPRE86IHBsYWNlaG9sZGVycyBmb3IgaGludCBzdHJ1Y3R1cmVzICovCisKKyAgICAvKiBvYmplY3RzIHVzZWQgZm9yIGhpbnRpbmcgKi8KKyAgICBDRjJfQXJyU3RhY2tSZWMgIGhTdGVtSGludEFycmF5OworICAgIENGMl9BcnJTdGFja1JlYyAgdlN0ZW1IaW50QXJyYXk7CisKKyAgICBDRjJfSGludE1hc2tSZWMgICBoaW50TWFzazsKKyAgICBDRjJfR2x5cGhQYXRoUmVjICBnbHlwaFBhdGg7CisKKworICAgIEZUX1pFUk8oICZzdG9yYWdlICk7CisgICAgRlRfWkVSTyggJnJlc3VsdHMgKTsKKyAgICBGVF9aRVJPKCAmZmxleFN0b3JlICk7CisKKyAgICAvKiBpbml0aWFsaXplIHRoZSByZW1haW5pbmcgb2JqZWN0cyAqLworICAgIGNmMl9hcnJzdGFja19pbml0KCAmc3ViclN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBDRjJfQnVmZmVyUmVjICkgKTsKKyAgICBjZjJfYXJyc3RhY2tfaW5pdCggJmhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBDRjJfU3RlbUhpbnRSZWMgKSApOworICAgIGNmMl9hcnJzdGFja19pbml0KCAmdlN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIENGMl9TdGVtSGludFJlYyApICk7CisKKyAgICAvKiBpbml0aWFsaXplIENGMl9TdGVtSGludCBhcnJheXMgKi8KKyAgICBjZjJfaGludG1hc2tfaW5pdCggJmhpbnRNYXNrLCBlcnJvciApOworCisgICAgLyogaW5pdGlhbGl6ZSBwYXRoIG1hcCB0byBtYW5hZ2UgZHJhd2luZyBvcGVyYXRpb25zICovCisKKyAgICAvKiBOb3RlOiBsYXN0IDQgcGFyYW1zIGFyZSB1c2VkIHRvIGhhbmRsZSBgTW92ZVRvUGVybWlzc2l2ZScsIHdoaWNoICovCisgICAgLyogICAgICAgbWF5IG5lZWQgdG8gY2FsbCBgaGludE1hcC5CdWlsZCcgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFRPRE86IE1vdmVUb1Blcm1pc3NpdmUgaXMgZ29uZTsgYXJlIHRoZXNlIHN0aWxsIG5lZWRlZD8gICAgICAgICAgKi8KKyAgICBjZjJfZ2x5cGhwYXRoX2luaXQoICZnbHlwaFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZLAorICAgICAgICAgICAgICAgICAgICAgICAgLyogaFNoaWZ0LCAqLworICAgICAgICAgICAgICAgICAgICAgICAgJmhTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgJnZTdGVtSGludEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgJmhpbnRNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgaGludE9yaWdpblksCisgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+Ymx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiApOworCisgICAgLyoKKyAgICAgKiBJbml0aWFsaXplIHN0YXRlIGZvciB3aWR0aCBwYXJzaW5nLiAgRnJvbSB0aGUgQ0ZGIFNwZWM6CisgICAgICoKKyAgICAgKiAgIFRoZSBmaXJzdCBzdGFjay1jbGVhcmluZyBvcGVyYXRvciwgd2hpY2ggbXVzdCBiZSBvbmUgb2YgaHN0ZW0sCisgICAgICogICBoc3RlbWhtLCB2c3RlbSwgdnN0ZW1obSwgY250cm1hc2ssIGhpbnRtYXNrLCBobW92ZXRvLCB2bW92ZXRvLAorICAgICAqICAgcm1vdmV0bywgb3IgZW5kY2hhciwgdGFrZXMgYW4gYWRkaXRpb25hbCBhcmd1bWVudCAtIHRoZSB3aWR0aCAoYXMKKyAgICAgKiAgIGRlc2NyaWJlZCBlYXJsaWVyKSwgd2hpY2ggbWF5IGJlIGV4cHJlc3NlZCBhcyB6ZXJvIG9yIG9uZSBudW1lcmljCisgICAgICogICBhcmd1bWVudC4KKyAgICAgKgorICAgICAqIFdoYXQgd2UgaW1wbGVtZW50IGhlcmUgdXNlcyB0aGUgZmlyc3QgdmFsaWRseSBzcGVjaWZpZWQgd2lkdGgsIGJ1dAorICAgICAqIGRvZXMgbm90IGRldGVjdCBlcnJvcnMgZm9yIHNwZWNpZnlpbmcgbW9yZSB0aGFuIG9uZSB3aWR0aC4KKyAgICAgKgorICAgICAqIElmIG9uZSBvZiB0aGUgYWJvdmUgb3BlcmF0b3JzIG9jY3VycyB3aXRob3V0IGV4cGxpY2l0bHkgc3BlY2lmeWluZworICAgICAqIGEgd2lkdGgsIHdlIGFzc3VtZSB0aGUgZGVmYXVsdCB3aWR0aC4KKyAgICAgKgorICAgICAqIENGRjIgY2hhcnN0cmluZ3MgYWx3YXlzIHJldHVybiB0aGUgZGVmYXVsdCB3aWR0aCAoMCkuCisgICAgICoKKyAgICAgKi8KKyAgICBoYXZlV2lkdGggPSBmb250LT5pc0NGRjIgPyBUUlVFIDogRkFMU0U7CisgICAgKndpZHRoICAgID0gY2YyX2dldERlZmF1bHRXaWR0aFgoIGRlY29kZXIgKTsKKworICAgIC8qCisgICAgICogTm90ZTogQXQgdGhpcyBwb2ludCwgYWxsIHBvaW50ZXJzIHRvIHJlc291cmNlcyBtdXN0IGJlIE5VTEwKKyAgICAgKiAgICAgICBhbmQgYWxsIGxvY2FsIG9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZC4KKyAgICAgKiAgICAgICBUaGVyZSBtdXN0IGJlIG5vIGJyYW5jaGVzIHRvIGBleGl0OicgYWJvdmUgdGhpcyBwb2ludC4KKyAgICAgKgorICAgICAqLworCisgICAgLyogYWxsb2NhdGUgYW4gb3BlcmFuZCBzdGFjayAqLworICAgIHN0YWNrU2l6ZSA9IGZvbnQtPmlzQ0ZGMiA/IGNmMl9nZXRNYXhzdGFjayggZGVjb2RlciApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogQ0YyX09QRVJBTkRfU1RBQ0tfU0laRTsKKyAgICBvcFN0YWNrICAgPSBjZjJfc3RhY2tfaW5pdCggbWVtb3J5LCBlcnJvciwgc3RhY2tTaXplICk7CisKKyAgICBpZiAoICFvcFN0YWNrICkKKyAgICB7CisgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggT3V0X09mX01lbW9yeSApOworICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIC8qIGluaXRpYWxpemUgc3Vicm91dGluZSBzdGFjayBieSBwbGFjaW5nIHRvcCBsZXZlbCBjaGFyc3RyaW5nIGFzICovCisgICAgLyogZmlyc3QgZWxlbWVudCAobWF4IGRlcHRoIHBsdXMgb25lIGZvciB0aGUgY2hhcnN0cmluZykgICAgICAgICAgKi8KKyAgICAvKiBOb3RlOiBDYWxsZXIgb3ducyBhbmQgbXVzdCBmaW5hbGl6ZSB0aGUgZmlyc3QgY2hhcnN0cmluZy4gICAgICAqLworICAgIC8qICAgICAgIE91ciBjb3B5IG9mIGl0IGRvZXMgbm90IGNoYW5nZSB0aGF0IHJlcXVpcmVtZW50LiAgICAgICAgICovCisgICAgY2YyX2FycnN0YWNrX3NldENvdW50KCAmc3ViclN0YWNrLCBDRjJfTUFYX1NVQlIgKyAxICk7CisKKyAgICBjaGFyc3RyaW5nICA9IChDRjJfQnVmZmVyKWNmMl9hcnJzdGFja19nZXRCdWZmZXIoICZzdWJyU3RhY2sgKTsKKyAgICAqY2hhcnN0cmluZyA9ICpidWY7ICAgIC8qIHN0cnVjdHVyZSBjb3B5ICovCisKKyAgICBjaGFyc3RyaW5nSW5kZXggPSAwOyAgICAgICAvKiBlbnRyeSBpcyB2YWxpZCBub3cgKi8KKworICAgIC8qIGNhdGNoIGVycm9ycyBzbyBmYXIgKi8KKyAgICBpZiAoICplcnJvciApCisgICAgICBnb3RvIGV4aXQ7CisKKyAgICAvKiBtYWluIGludGVycHJldGVyIGxvb3AgKi8KKyAgICB3aGlsZSAoIDEgKQorICAgIHsKKyAgICAgIGlmICggZm9udC0+aXNUMSApCisgICAgICAgIEZUX0FTU0VSVCgga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jbnQgPT0gMCAgICAgICAgICAgICAgICAgKTsKKworICAgICAgaWYgKCBjZjJfYnVmX2lzRW5kKCBjaGFyc3RyaW5nICkgKQorICAgICAgeworICAgICAgICAvKiBJZiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGNoYXJzdHJpbmcsIHNpbXVsYXRlIGEgKi8KKyAgICAgICAgLyogY2YyX2NtZFJFVFVSTiBvciBjZjJfY21kRU5EQ0hBUi4gICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIFdlIGRvIHRoaXMgZm9yIGJvdGggQ0ZGIGFuZCBDRkYyLiAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGNoYXJzdHJpbmdJbmRleCApCisgICAgICAgICAgb3AxID0gY2YyX2NtZFJFVFVSTjsgIC8qIGVuZCBvZiBidWZmZXIgZm9yIHN1YnJvdXRpbmUgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgIG9wMSA9IGNmMl9jbWRFTkRDSEFSOyAvKiBlbmQgb2YgYnVmZmVyIGZvciB0b3AgbGV2ZWwgY2hhcnN0cmluZyAqLworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBvcDEgPSAoRlRfQnl0ZSljZjJfYnVmX3JlYWRCeXRlKCBjaGFyc3RyaW5nICk7CisKKyAgICAgICAgLyogRXhwbGljaXQgUkVUVVJOIGFuZCBFTkRDSEFSIGluIENGRjIgc2hvdWxkIGJlIGlnbm9yZWQuICovCisgICAgICAgIC8qIE5vdGU6IFRyYWNlIG1lc3NhZ2Ugd2lsbCByZXBvcnQgMCBpbnN0ZWFkIG9mIDExIG9yIDE0LiAqLworICAgICAgICBpZiAoICggb3AxID09IGNmMl9jbWRSRVRVUk4gfHwgb3AxID09IGNmMl9jbWRFTkRDSEFSICkgJiYKKyAgICAgICAgICAgICBmb250LT5pc0NGRjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICBvcDEgPSBjZjJfY21kUkVTRVJWRURfMDsKKyAgICAgIH0KKworICAgICAgaWYgKCBmb250LT5pc1QxICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAhaW5pdGlhbF9tYXBfcmVhZHkgICAgICAgICAgICYmCisgICAgICAgICAgICAgISggb3AxID09IGNmMl9jbWRIU1RFTSAgICAgfHwKKyAgICAgICAgICAgICAgICBvcDEgPT0gY2YyX2NtZFZTVEVNICAgICB8fAorICAgICAgICAgICAgICAgIG9wMSA9PSBjZjJfY21kSFNCVyAgICAgIHx8CisgICAgICAgICAgICAgICAgb3AxID09IGNmMl9jbWRDQUxMU1VCUiAgfHwKKyAgICAgICAgICAgICAgICBvcDEgPT0gY2YyX2NtZFJFVFVSTiAgICB8fAorICAgICAgICAgICAgICAgIG9wMSA9PSBjZjJfY21kRVNDICAgICAgIHx8CisgICAgICAgICAgICAgICAgb3AxID09IGNmMl9jbWRFTkRDSEFSICAgfHwKKyAgICAgICAgICAgICAgICBvcDEgPj0gMzIgLyogTnVtYmVycyAqLyApICkKKyAgICAgICAgeworICAgICAgICAgIC8qIFNraXAgb3V0bGluZSBjb21tYW5kcyBmaXJzdCB0aW1lIHJvdW5kLiAgICAgICAqLworICAgICAgICAgIC8qIGBlbmRjaGFyJyB3aWxsIHRyaWdnZXIgaW5pdGlhbCBoaW50bWFwIGJ1aWxkICAqLworICAgICAgICAgIC8qIGFuZCByZXdpbmQgdGhlIGNoYXJzdHJpbmcuICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCByZXN1bHRfY250ID4gMCAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgISggb3AxID09IGNmMl9jbWRDQUxMU1VCUiAgfHwKKyAgICAgICAgICAgICAgICBvcDEgPT0gY2YyX2NtZFJFVFVSTiAgICB8fAorICAgICAgICAgICAgICAgIG9wMSA9PSBjZjJfY21kRVNDICAgICAgIHx8CisgICAgICAgICAgICAgICAgb3AxID49IDMyIC8qIE51bWJlcnMgKi8gKSApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaGF2ZSBiZWVuIHRyYW5zZmVycmVkIGJ5IHByZXZpb3VzIHBvcHMgKi8KKyAgICAgICAgICByZXN1bHRfY250ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggbGFyZ2VfaW50ICYmICEoIG9wMSA+PSAzMiB8fCBvcDEgPT0gY2YyX2VzY0RJViApICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmcgKFR5cGUgMSBtb2RlKToiCisgICAgICAgICAgICAgICAgICAgICAiIG5vIGBkaXYnIGFmdGVyIGxhcmdlIGludGVnZXJcbiIgKSk7CisKKyAgICAgICAgICBsYXJnZV9pbnQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBjaGVjayBmb3IgZXJyb3JzIG9uY2UgcGVyIGxvb3AgKi8KKyAgICAgIGlmICggKmVycm9yICkKKyAgICAgICAgZ290byBleGl0OworCisgICAgICBpbnN0cnVjdGlvbkxpbWl0LS07CisgICAgICBpZiAoIGluc3RydWN0aW9uTGltaXQgPT0gMCApCisgICAgICB7CisgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgICB9CisKKyAgICAgIHN3aXRjaCggb3AxICkKKyAgICAgIHsKKyAgICAgIGNhc2UgY2YyX2NtZFJFU0VSVkVEXzA6CisgICAgICBjYXNlIGNmMl9jbWRSRVNFUlZFRF8yOgorICAgICAgY2FzZSBjZjJfY21kUkVTRVJWRURfMTc6CisgICAgICAgIC8qIHdlIG1heSBnZXQgaGVyZSBpZiB3ZSBoYXZlIGEgcHJpb3IgZXJyb3IgKi8KKyAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICglZClcbiIsIG9wMSApKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgY2YyX2NtZFZTSU5ERVg6CisgICAgICAgIEZUX1RSQUNFNCgoICIgdnNpbmRleFxuIiApKTsKKworICAgICAgICBpZiAoICFmb250LT5pc0NGRjIgKQorICAgICAgICAgIGJyZWFrOyAgICAvKiBjbGVhciBzdGFjayAmIGlnbm9yZSAqLworCisgICAgICAgIGlmICggZm9udC0+YmxlbmQudXNlZEJWICkKKyAgICAgICAgeworICAgICAgICAgIC8qIHZzaW5kZXggbm90IGFsbG93ZWQgYWZ0ZXIgYmxlbmQgKi8KKyAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgRlRfSW50ICB0ZW1wID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisKKyAgICAgICAgICBpZiAoIHRlbXAgPj0gMCApCisgICAgICAgICAgICBmb250LT52c2luZGV4ID0gKEZUX1VJbnQpdGVtcDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBjZjJfY21kQkxFTkQ6CisgICAgICAgIHsKKyAgICAgICAgICBGVF9VSW50ICBudW1CbGVuZHM7CisKKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgYmxlbmRcbiIgKSk7CisKKyAgICAgICAgICBpZiAoICFmb250LT5pc0NGRjIgKQorICAgICAgICAgICAgYnJlYWs7ICAgIC8qIGNsZWFyIHN0YWNrICYgaWdub3JlICovCisKKyAgICAgICAgICAvKiBkbyB3ZSBoYXZlIGEgYGJsZW5kJyBvcCBpbiBhIG5vbi12YXJpYW50IGZvbnQ/ICovCisgICAgICAgICAgaWYgKCAhZm9udC0+YmxlbmQuZm9udCApCisgICAgICAgICAgeworICAgICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogY2hlY2sgY2FjaGVkIGJsZW5kIHZlY3RvciAqLworICAgICAgICAgIGlmICggZm9udC0+Y2ZmbG9hZC0+YmxlbmRfY2hlY2tfdmVjdG9yKCAmZm9udC0+YmxlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPnZzaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmxlbk5EViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC0+TkRWICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RFcnJvciA9IGZvbnQtPmNmZmxvYWQtPmJsZW5kX2J1aWxkX3ZlY3RvciggJmZvbnQtPmJsZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT52c2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LT5sZW5ORFYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQtPk5EViApOworICAgICAgICAgICAgaWYgKCBsYXN0RXJyb3IgKQorICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogZG8gdGhlIGJsZW5kICovCisgICAgICAgICAgbnVtQmxlbmRzID0gKEZUX1VJbnQpY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgIGlmICggbnVtQmxlbmRzID4gc3RhY2tTaXplICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjZjJfZG9CbGVuZCggJmZvbnQtPmJsZW5kLCBvcFN0YWNrLCBudW1CbGVuZHMgKTsKKworICAgICAgICAgIGZvbnQtPmJsZW5kLnVzZWRCViA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7ICAgICAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgIGNhc2UgY2YyX2NtZEhTVEVNSE06CisgICAgICBjYXNlIGNmMl9jbWRIU1RFTToKKyAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRIU1RFTUhNID8gIiBoc3RlbWhtXG4iIDogIiBoc3RlbVxuIiApKTsKKworICAgICAgICBpZiAoICFmb250LT5pc1QxICkKKyAgICAgICAgeworICAgICAgICAgIC8qIG5ldmVyIGFkZCBoaW50cyBhZnRlciB0aGUgbWFzayBpcyBjb21wdXRlZCAqLworICAgICAgICAgIC8qIGV4Y2VwdCBpZiBpbiBUeXBlIDEgbW9kZSAobm8gaGludG1hc2sgb3ApICAqLworICAgICAgICAgIGlmICggY2YyX2hpbnRtYXNrX2lzVmFsaWQoICZoaW50TWFzayApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZzoiCisgICAgICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgaG9yaXpvbnRhbCBoaW50IG1hc2tcbiIgKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBhZGQgbGVmdC1zaWRlYmVhcmluZyBjb3JyZWN0aW9uIGluIFR5cGUgMSBtb2RlICovCisgICAgICAgIGNmMl9kb1N0ZW1zKCBmb250LAorICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICZoU3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgJmhhdmVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmlzVDEgPyBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy0+eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAgKTsKKworICAgICAgICBpZiAoIGRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBjZjJfY21kVlNURU1ITToKKyAgICAgIGNhc2UgY2YyX2NtZFZTVEVNOgorICAgICAgICBGVF9UUkFDRTQoKCBvcDEgPT0gY2YyX2NtZFZTVEVNSE0gPyAiIHZzdGVtaG1cbiIgOiAiIHZzdGVtXG4iICkpOworCisgICAgICAgIGlmICggIWZvbnQtPmlzVDEgKQorICAgICAgICB7CisgICAgICAgICAgLyogbmV2ZXIgYWRkIGhpbnRzIGFmdGVyIHRoZSBtYXNrIGlzIGNvbXB1dGVkICovCisgICAgICAgICAgLyogZXhjZXB0IGlmIGluIFR5cGUgMSBtb2RlIChubyBoaW50bWFzayBvcCkgICovCisgICAgICAgICAgaWYgKCBjZjJfaGludG1hc2tfaXNWYWxpZCggJmhpbnRNYXNrICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCB2ZXJ0aWNhbCBoaW50IG1hc2tcbiIgKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBhZGQgbGVmdC1zaWRlYmVhcmluZyBjb3JyZWN0aW9uIGluIFR5cGUgMSBtb2RlICovCisgICAgICAgIGNmMl9kb1N0ZW1zKCBmb250LAorICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICZ2U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgJmhhdmVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIGZvbnQtPmlzVDEgPyBkZWNvZGVyLT5idWlsZGVyLmxlZnRfYmVhcmluZy0+eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDAgKTsKKworICAgICAgICBpZiAoIGRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBjZjJfY21kVk1PVkVUTzoKKyAgICAgICAgRlRfVFJBQ0U0KCggIiB2bW92ZXRvXG4iICkpOworCisgICAgICAgIGlmICggZm9udC0+aXNUMSAmJiAhZGVjb2Rlci0+ZmxleF9zdGF0ZSAmJiAhaGF2ZVdpZHRoICkKKyAgICAgICAgICBGVF9FUlJPUigoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nIChUeXBlIDEgbW9kZSk6IgorICAgICAgICAgICAgICAgICAgICAgIiBObyB3aWR0aC4gVXNlIGhzYncvc2J3IGFzIGZpcnN0IG9wXG4iICkpOworCisgICAgICAgIGlmICggY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgPiAxICYmICFoYXZlV2lkdGggKQorICAgICAgICAgICp3aWR0aCA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIDAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxXaWR0aFggKTsKKworICAgICAgICAvKiB3aWR0aCBpcyBkZWZpbmVkIG9yIGRlZmF1bHQgYWZ0ZXIgdGhpcyAqLworICAgICAgICBoYXZlV2lkdGggPSBUUlVFOworCisgICAgICAgIGlmICggZGVjb2Rlci0+d2lkdGhfb25seSApCisgICAgICAgICAgZ290byBleGl0OworCisgICAgICAgIGN1clkgPSBBRERfSU5UMzIoIGN1clksIGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApICk7CisKKyAgICAgICAgaWYgKCAhZGVjb2Rlci0+ZmxleF9zdGF0ZSApCisgICAgICAgICAgY2YyX2dseXBocGF0aF9tb3ZlVG8oICZnbHlwaFBhdGgsIGN1clgsIGN1clkgKTsKKworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBjZjJfY21kUkxJTkVUTzoKKyAgICAgICAgeworICAgICAgICAgIENGMl9VSW50ICBpZHg7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisKKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmxpbmV0b1xuIiApKTsKKworICAgICAgICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IGNvdW50OyBpZHggKz0gMiApCisgICAgICAgICAgeworICAgICAgICAgICAgY3VyWCA9IEFERF9JTlQzMiggY3VyWCwgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ICsgMCApICk7CisgICAgICAgICAgICBjdXJZID0gQUREX0lOVDMyKCBjdXJZLCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHggKyAxICkgKTsKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9saW5lVG8oICZnbHlwaFBhdGgsIGN1clgsIGN1clkgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjZjJfc3RhY2tfY2xlYXIoIG9wU3RhY2sgKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsgLyogbm8gbmVlZCB0byBjbGVhciBzdGFjayBhZ2FpbiAqLworCisgICAgICBjYXNlIGNmMl9jbWRITElORVRPOgorICAgICAgY2FzZSBjZjJfY21kVkxJTkVUTzoKKyAgICAgICAgeworICAgICAgICAgIENGMl9VSW50ICBpZHg7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICBGVF9Cb29sICBpc1ggPSBGVF9CT09MKCBvcDEgPT0gY2YyX2NtZEhMSU5FVE8gKTsKKworCisgICAgICAgICAgRlRfVFJBQ0U0KCggaXNYID8gIiBobGluZXRvXG4iIDogIiB2bGluZXRvXG4iICkpOworCisgICAgICAgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgY291bnQ7IGlkeCsrICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHYgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICk7CisKKworICAgICAgICAgICAgaWYgKCBpc1ggKQorICAgICAgICAgICAgICBjdXJYID0gQUREX0lOVDMyKCBjdXJYLCB2ICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGN1clkgPSBBRERfSU5UMzIoIGN1clksIHYgKTsKKworICAgICAgICAgICAgaXNYID0gIWlzWDsKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9saW5lVG8oICZnbHlwaFBhdGgsIGN1clgsIGN1clkgKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjZjJfc3RhY2tfY2xlYXIoIG9wU3RhY2sgKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKworICAgICAgY2FzZSBjZjJfY21kUkNVUlZFTElORToKKyAgICAgIGNhc2UgY2YyX2NtZFJSQ1VSVkVUTzoKKyAgICAgICAgeworICAgICAgICAgIENGMl9VSW50ICBjb3VudCA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworICAgICAgICAgIENGMl9VSW50ICBpZHggICA9IDA7CisKKworICAgICAgICAgIEZUX1RSQUNFNCgoIG9wMSA9PSBjZjJfY21kUkNVUlZFTElORSA/ICIgcmN1cnZlbGluZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgcnJjdXJ2ZXRvXG4iICkpOworCisgICAgICAgICAgd2hpbGUgKCBpZHggKyA2IDw9IGNvdW50ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHgxLCB5MSwgeDIsIHkyLCB4MywgeTM7CisKKworICAgICAgICAgICAgeDEgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAwICksIGN1clggKTsKKyAgICAgICAgICAgIHkxID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMSApLCBjdXJZICk7CisgICAgICAgICAgICB4MiA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDIgKSwgeDEgKTsKKyAgICAgICAgICAgIHkyID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMyApLCB5MSApOworICAgICAgICAgICAgeDMgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyA0ICksIHgyICk7CisgICAgICAgICAgICB5MyA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDUgKSwgeTIgKTsKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKCAmZ2x5cGhQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzICk7CisKKyAgICAgICAgICAgIGN1clggID0geDM7CisgICAgICAgICAgICBjdXJZICA9IHkzOworICAgICAgICAgICAgaWR4ICArPSA2OworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggb3AxID09IGNmMl9jbWRSQ1VSVkVMSU5FICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBjdXJYID0gQUREX0lOVDMyKCBjdXJYLCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHggKyAwICkgKTsKKyAgICAgICAgICAgIGN1clkgPSBBRERfSU5UMzIoIGN1clksIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCArIDEgKSApOworCisgICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2xpbmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOworICAgICAgICAgIH0KKworICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOyAvKiBubyBuZWVkIHRvIGNsZWFyIHN0YWNrIGFnYWluICovCisKKyAgICAgIGNhc2UgY2YyX2NtZENMT1NFUEFUSDoKKyAgICAgICAgaWYgKCAhZm9udC0+aXNUMSApCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICglZClcbiIsIG9wMSApKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBjbG9zZXBhdGgiICkpOworCisgICAgICAgICAgLyogaWYgdGhlcmUgaXMgbm8gcGF0aCwgYGNsb3NlcGF0aCcgaXMgYSBuby1vcCAqLworICAgICAgICAgIHBzX2J1aWxkZXJfY2xvc2VfY29udG91ciggJmRlY29kZXItPmJ1aWxkZXIgKTsKKworICAgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgY2YyX2NtZENBTExHU1VCUjoKKyAgICAgIGNhc2UgY2YyX2NtZENBTExTVUJSOgorICAgICAgICB7CisgICAgICAgICAgQ0YyX0ludCAgc3Vick51bTsKKworCisgICAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRDQUxMR1NVQlIgPyAiIGNhbGxnc3ViciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIgY2FsbHN1YnIiICkpOworCisgICAgICAgICAgaWYgKCAoICFmb250LT5pc1QxICYmIGNoYXJzdHJpbmdJbmRleCA+IENGMl9NQVhfU1VCUiApICAgICAgIHx8CisgICAgICAgICAgICAgICAoICBmb250LT5pc1QxICYmIGNoYXJzdHJpbmdJbmRleCA+IFQxX01BWF9TVUJSU19DQUxMUyApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBtYXggc3ViciBwbHVzIG9uZSBmb3IgY2hhcnN0cmluZyAqLworICAgICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICAgICAgICBnb3RvIGV4aXQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIG92ZXJmbG93IG9mIHN0YWNrICovCisgICAgICAgICAgfQorCisgICAgICAgICAgLyogcHVzaCBvdXIgY3VycmVudCBDRkYgY2hhcnN0cmluZyByZWdpb24gb24gc3ViclN0YWNrICovCisgICAgICAgICAgY2hhcnN0cmluZyA9IChDRjJfQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19nZXRQb2ludGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YnJTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpY2hhcnN0cmluZ0luZGV4ICsgMSApOworCisgICAgICAgICAgLyogc2V0IHVwIHRoZSBuZXcgQ0ZGIHJlZ2lvbiBhbmQgcG9pbnRlciAqLworICAgICAgICAgIHN1YnJOdW0gPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICBpZiAoIGZvbnQtPmlzVDEgJiYgZGVjb2Rlci0+bG9jYWxzX2hhc2ggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCogIHZhbCA9IGZ0X2hhc2hfbnVtX2xvb2t1cCggc3Vick51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bG9jYWxzX2hhc2ggKTsKKworCisgICAgICAgICAgICBpZiAoIHZhbCApCisgICAgICAgICAgICAgIHN1YnJOdW0gPSAqdmFsOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBzdWJyTnVtID0gLTE7CisgICAgICAgICAgfQorCisgICAgICAgICAgc3dpdGNoICggb3AxICkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBjZjJfY21kQ0FMTEdTVUJSOgorICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiAoaWR4ICVkLCBlbnRlcmluZyBsZXZlbCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtICsgZGVjb2Rlci0+Z2xvYmFsc19iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICsgMSApKTsKKworICAgICAgICAgICAgaWYgKCBjZjJfaW5pdEdsb2JhbFJlZ2lvbkJ1ZmZlciggZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJOdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgICAgZ290byBleGl0OyAgLyogc3Vicm91dGluZSBsb29rdXAgb3Igc3RyZWFtIGVycm9yICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBjZjJfY21kQ0FMTFNVQlIgKi8KKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgKGlkeCAlZCwgZW50ZXJpbmcgbGV2ZWwgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Vick51bSArIGRlY29kZXItPmxvY2Fsc19iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICsgMSApKTsKKworICAgICAgICAgICAgaWYgKCBjZjJfaW5pdExvY2FsUmVnaW9uQnVmZmVyKCBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgICAgZ290byBleGl0OyAgLyogc3Vicm91dGluZSBsb29rdXAgb3Igc3RyZWFtIGVycm9yICovCisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgY2hhcnN0cmluZ0luZGV4ICs9IDE7ICAgICAgIC8qIGVudHJ5IGlzIHZhbGlkIG5vdyAqLworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgIGNhc2UgY2YyX2NtZFJFVFVSTjoKKyAgICAgICAgRlRfVFJBQ0U0KCggIiByZXR1cm4gKGxlYXZpbmcgbGV2ZWwgJWQpXG4iLCBjaGFyc3RyaW5nSW5kZXggKSk7CisKKyAgICAgICAgaWYgKCBjaGFyc3RyaW5nSW5kZXggPCAxICkKKyAgICAgICAgeworICAgICAgICAgIC8qIE5vdGU6IGNhbm5vdCByZXR1cm4gZnJvbSB0b3AgY2hhcnN0cmluZyAqLworICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAgICAgICAgICAgICAgICAgLyogdW5kZXJmbG93IG9mIHN0YWNrICovCisgICAgICAgIH0KKworICAgICAgICAvKiByZXN0b3JlIHBvc2l0aW9uIGluIHByZXZpb3VzIGNoYXJzdHJpbmcgKi8KKyAgICAgICAgY2hhcnN0cmluZyA9IChDRjJfQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfZ2V0UG9pbnRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAmc3ViclN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgIChDRjJfVUludCktLWNoYXJzdHJpbmdJbmRleCApOworICAgICAgICBjb250aW51ZTsgICAgIC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgY2FzZSBjZjJfY21kRVNDOgorICAgICAgICB7CisgICAgICAgICAgRlRfQnl0ZSAgb3AyID0gKEZUX0J5dGUpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworCisKKyAgICAgICAgICAvKiBmaXJzdCBzd2l0Y2ggZm9yIDItYnl0ZSBvcGVyYXRvcnMgaGFuZGxlcyBDRkYyICAgICAgKi8KKyAgICAgICAgICAvKiBhbmQgb3Bjb2RlcyB0aGF0IGFyZSByZXNlcnZlZCBmb3IgYm90aCBDRkYgYW5kIENGRjIgKi8KKyAgICAgICAgICBzd2l0Y2ggKCBvcDIgKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIGNmMl9lc2NIRkxFWDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRSVUUgLyogZHgxICovLCBGQUxTRSAvKiBkeTEgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgIC8qIGR5MiAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MyAqLywgRkFMU0UgLyogZHkzICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHg0ICovLCBGQUxTRSAvKiBkeTQgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIEZBTFNFIC8qIGR5NSAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCisgICAgICAgICAgICAgIH07CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4XG4iICkpOworCisgICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgLyogZG9Db25kaXRpb25hbExhc3RSZWFkICovICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgIGNhc2UgY2YyX2VzY0ZMRVg6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBGVF9Cb29sICByZWFkRnJvbVN0YWNrWzEyXSA9CisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MSAqLywgVFJVRSAvKiBkeTEgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgLyogZHkyICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHgzICovLCBUUlVFIC8qIGR5MyAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NCAqLywgVFJVRSAvKiBkeTQgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIFRSVUUgLyogZHk1ICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHg2ICovLCBUUlVFIC8qIGR5NiAqLworICAgICAgICAgICAgICB9OworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBmbGV4XG4iICkpOworCisgICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UgLyogZG9Db25kaXRpb25hbExhc3RSZWFkICovICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsgICAgICAvKiBUT0RPOiB3aHkgaXMgdGhpcyBub3QgYSBjb250aW51ZT8gKi8KKworICAgICAgICAgIGNhc2UgY2YyX2VzY0hGTEVYMToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRSVUUgLyogZHgxICovLCBUUlVFICAvKiBkeTEgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDIgKi8sIFRSVUUgIC8qIGR5MiAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4MyAqLywgRkFMU0UgLyogZHkzICovLAorICAgICAgICAgICAgICAgIFRSVUUgLyogZHg0ICovLCBGQUxTRSAvKiBkeTQgKi8sCisgICAgICAgICAgICAgICAgVFJVRSAvKiBkeDUgKi8sIFRSVUUgIC8qIGR5NSAqLywKKyAgICAgICAgICAgICAgICBUUlVFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCisgICAgICAgICAgICAgIH07CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhmbGV4MVxuIiApKTsKKworICAgICAgICAgICAgICBjZjJfZG9GbGV4KCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1clksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaFBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRGcm9tU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIC8qIGRvQ29uZGl0aW9uYWxMYXN0UmVhZCAqLyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NGTEVYMToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IEZUX0Jvb2wgIHJlYWRGcm9tU3RhY2tbMTJdID0KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MSAqLywgVFJVRSAgLyogZHkxICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MiAqLywgVFJVRSAgLyogZHkyICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4MyAqLywgVFJVRSAgLyogZHkzICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4NCAqLywgVFJVRSAgLyogZHk0ICovLAorICAgICAgICAgICAgICAgIFRSVUUgIC8qIGR4NSAqLywgVFJVRSAgLyogZHk1ICovLAorICAgICAgICAgICAgICAgIEZBTFNFIC8qIGR4NiAqLywgRkFMU0UgLyogZHk2ICovCisgICAgICAgICAgICAgIH07CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGZsZXgxXG4iICkpOworCisgICAgICAgICAgICAgIGNmMl9kb0ZsZXgoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEZyb21TdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSAvKiBkb0NvbmRpdGlvbmFsTGFzdFJlYWQgKi8gKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgLyogdGhlc2Ugb3Bjb2RlcyBhcmUgYWx3YXlzIHJlc2VydmVkICovCisgICAgICAgICAgY2FzZSBjZjJfZXNjUkVTRVJWRURfODoKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF8xMzoKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF8xOToKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF8yNToKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF8zMToKKyAgICAgICAgICBjYXNlIGNmMl9lc2NSRVNFUlZFRF8zMjoKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgdW5rbm93biBvcCAoMTIsICVkKVxuIiwgb3AyICkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIGZvbnQtPmlzQ0ZGMiB8fCBvcDIgPj0gY2YyX2VzY1JFU0VSVkVEXzM4ICkKKyAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHVua25vd24gb3AgKDEyLCAlZClcbiIsIG9wMiApKTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoIGZvbnQtPmlzVDEgJiYgcmVzdWx0X2NudCA+IDAgJiYgb3AyICE9IGNmMl9lc2NQT1AgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGhhdmUgYmVlbiB0cmFuc2ZlcnJlZCBieSBwcmV2aW91cyBwb3BzICovCisgICAgICAgICAgICAgICAgcmVzdWx0X2NudCA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogc2Vjb25kIHN3aXRjaCBmb3IgMi1ieXRlIG9wZXJhdG9ycyBoYW5kbGVzICovCisgICAgICAgICAgICAgICAgLyogQ0ZGIGFuZCBUeXBlIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc3dpdGNoICggb3AyICkKKyAgICAgICAgICAgICAgICB7CisKKyAgICAgICAgICAgICAgICBjYXNlIGNmMl9lc2NET1RTRUNUSU9OOgorICAgICAgICAgICAgICAgICAgLyogc29tZXRoaW5nIGFib3V0IGBmbGlwIHR5cGUgb2YgbG9ja2luZycgLS0gaWdub3JlIGl0ICovCisgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGRvdHNlY3Rpb25cbiIgKSk7CisKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjVlNURU0zOgorICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0hTVEVNMzoKKyAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgKiBUeXBlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIDI6CisgICAgICAgICAgICAgICAgICAgKiAgIHgwIGR4MCB4MSBkeDEgeDIgZHgyIHZzdGVtMyAgICAgIHggZHgge2R4YSBkeGJ9KiB2c3RlbQorICAgICAgICAgICAgICAgICAgICogICB5MCBkeTAgeTEgZHkxIHkyIGR5MiBoc3RlbTMgICAgICB5IGR5IHtkeWEgZHlifSogaHN0ZW0KKyAgICAgICAgICAgICAgICAgICAqICAgcmVsYXRpdmUgdG8gbHNiIHBvaW50ICAgICAgICAgICAgcmVsYXRpdmUgdG8gemVybworICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICFmb250LT5pc1QxICkKKyAgICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHVua25vd24gb3AgKDEyLCAlZClcbiIsIG9wMiApKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICB2MCwgdjEsIHYyOworCisgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgaXNWID0gRlRfQk9PTCggb3AyID09IGNmMl9lc2NWU1RFTTMgKTsKKworCisgICAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggaXNWID8gIiB2c3RlbTNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiIGhzdGVtM1xuIiApKTsKKworICAgICAgICAgICAgICAgICAgICAgIEZUX0FTU0VSVCggY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgPT0gNiApOworCisgICAgICAgICAgICAgICAgICAgICAgdjAgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApOworICAgICAgICAgICAgICAgICAgICAgIHYxID0gY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIDIgKTsKKyAgICAgICAgICAgICAgICAgICAgICB2MiA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCA0ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfc2V0UmVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wU3RhY2ssIDIsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJfSU5UMzIoIFNVQl9JTlQzMiggdjEsIHYwICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCAxICkgKSApOworICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19zZXRSZWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9JTlQzMiggU1VCX0lOVDMyKCB2MiwgdjEgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIDMgKSApICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAvKiBhZGQgbGVmdC1zaWRlYmVhcmluZyBjb3JyZWN0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgY2YyX2RvU3RlbXMoIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzViA/ICZ2U3RlbUhpbnRBcnJheSA6ICZoU3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoYXZlV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzViA/IGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLT54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLT55ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIGRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0FORDoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcxOworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzI7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFuZFxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBhcmcyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGFyZzEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgYXJnMSAmJiBhcmcyICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjT1I6CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOworCisKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBvclxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBhcmcyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGFyZzEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgYXJnMSB8fCBhcmcyICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjTk9UOgorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzsKKworCisgICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbm90XG4iICkpOworCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoSW50KCBvcFN0YWNrLCAhYXJnICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjU0VBQzoKKyAgICAgICAgICAgICAgICAgIGlmICggIWZvbnQtPmlzVDEgKQorICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHVua25vd24gb3AgKDEyLCAlZClcbiIsIG9wMiApKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRlRfRXJyb3IgICBlcnJvcjI7CisgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgYmNoYXJfaW5kZXgsIGFjaGFyX2luZGV4OworICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgIGxlZnRfYmVhcmluZywgYWR2YW5jZTsKKworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgICAgICAgICAgICAgICAgICAgVDFfRmFjZSAgZmFjZSA9IChUMV9GYWNlKWRlY29kZXItPmJ1aWxkZXIuZmFjZTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBDRjJfQnVmZmVyUmVjICBjb21wb25lbnQ7CisgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICAgIGR1bW15V2lkdGg7CisKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgYWNoYXIgPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgIGJjaGFyID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgYWR5ID0gY2YyX3N0YWNrX3BvcEZpeGVkICggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgIGFkeCA9IGNmMl9zdGFja19wb3BGaXhlZCAoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgRlRfUG9zICBhc2IgPSBjZjJfc3RhY2tfcG9wRml4ZWQgKCBvcFN0YWNrICk7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNlYWNcbiIgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkb2luZ1NlYWMgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgRlRfRVJST1IoKCAiIG5lc3RlZCBzZWFjXG4iICkpOworICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAvKiBuZXN0ZWQgc2VhYyAqLworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWNvZGVyLT5idWlsZGVyLm1ldHJpY3Nfb25seSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBGVF9FUlJPUigoICIgdW5leHBlY3RlZCBzZWFjXG4iICkpOworICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAvKiB1bmV4cGVjdGVkIHNlYWMgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIGBnbHlwaF9uYW1lcycgaXMgc2V0IHRvIDAgZm9yIENJRCBmb250cyB3aGljaCBkbyAqLworICAgICAgICAgICAgICAgICAgICAvKiBub3QgaW5jbHVkZSBhbiBlbmNvZGluZy4gIEhvdyBjYW4gd2UgZGVhbCB3aXRoICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogdGhlc2U/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTAorICAgICAgICAgICAgICAgICAgICBpZiAoIGRlY29kZXItPmdseXBoX25hbWVzID09IDAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAhZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBkZWNvZGVyLT5nbHlwaF9uYW1lcyA9PSAwICkKKyNlbmRpZiAvKiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlRfRVJST1IoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAiY2YyX2ludGVycFQyQ2hhclN0cmluZzogKFR5cGUgMSBzZWFjKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBnbHlwaCBuYW1lcyB0YWJsZSBub3QgYXZhaWxhYmxlIGluIHRoaXMgZm9udFxuIiApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKiBzZWFjIHdlaXJkbmVzcyAqLworICAgICAgICAgICAgICAgICAgICBhZHggKz0gZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmctPng7CisKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCisgICAgICAgICAgICAgICAgICAgIGlmICggZmFjZS0+cm9vdC5pbnRlcm5hbC0+aW5jcmVtZW50YWxfaW50ZXJmYWNlICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBjYWxsZXIgbXVzdCBoYW5kbGUgdGhlIGZvbnQgZW5jb2RpbmcgYWxzbyAqLworICAgICAgICAgICAgICAgICAgICAgIGJjaGFyX2luZGV4ID0gYmNoYXI7CisgICAgICAgICAgICAgICAgICAgICAgYWNoYXJfaW5kZXggPSBhY2hhcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGJjaGFyX2luZGV4ID0gdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlX3BzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLCBiY2hhciApOworICAgICAgICAgICAgICAgICAgICAgIGFjaGFyX2luZGV4ID0gdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlX3BzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLCBhY2hhciApOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBiY2hhcl9pbmRleCA8IDAgfHwgYWNoYXJfaW5kZXggPCAwICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIEZUX0VSUk9SKCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nOiAoVHlwZSAxIHNlYWMpIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIHNlYWMgY2hhcmFjdGVyIGNvZGUgYXJndW1lbnRzXG4iICkpOworICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIGlmIHdlIGFyZSB0cnlpbmcgdG8gbG9hZCBhIGNvbXBvc2l0ZSBnbHlwaCwgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90IGxvYWQgdGhlIGFjY2VudCBjaGFyYWN0ZXIgYW5kIHJldHVybiAqLworICAgICAgICAgICAgICAgICAgICAvKiB0aGUgYXJyYXkgb2Ygc3ViZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmICggZGVjb2Rlci0+YnVpbGRlci5ub19yZWN1cnNlICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoU2xvdCAgICBnbHlwaCAgPSAoRlRfR2x5cGhTbG90KWRlY29kZXItPmJ1aWxkZXIuZ2x5cGg7CisgICAgICAgICAgICAgICAgICAgICAgRlRfR2x5cGhMb2FkZXIgIGxvYWRlciA9IGdseXBoLT5pbnRlcm5hbC0+bG9hZGVyOworICAgICAgICAgICAgICAgICAgICAgIEZUX1N1YkdseXBoICAgICBzdWJnOworCisKKyAgICAgICAgICAgICAgICAgICAgICAvKiByZWFsbG9jYXRlIHN1YmdseXBoIGFycmF5IGlmIG5lY2Vzc2FyeSAqLworICAgICAgICAgICAgICAgICAgICAgIGVycm9yMiA9IEZUX0dseXBoTG9hZGVyX0NoZWNrU3ViR2x5cGhzKCBsb2FkZXIsIDIgKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVycm9yMiApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3IyOyAvKiBwYXNzIEZyZWVUeXBlIGVycm9yIHRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICBzdWJnID0gbG9hZGVyLT5jdXJyZW50LnN1YmdseXBoczsKKworICAgICAgICAgICAgICAgICAgICAgIC8qIHN1YmdseXBoIDAgPSBiYXNlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgICAgICAgICAgIHN1YmctPmluZGV4ID0gYmNoYXJfaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgc3ViZy0+ZmxhZ3MgPSBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTOworICAgICAgICAgICAgICAgICAgICAgIHN1YmctPmFyZzEgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBzdWJnLT5hcmcyICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgc3ViZysrOworCisgICAgICAgICAgICAgICAgICAgICAgLyogc3ViZ2x5cGggMSA9IGFjY2VudCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICBzdWJnLT5pbmRleCA9IGFjaGFyX2luZGV4OworICAgICAgICAgICAgICAgICAgICAgIHN1YmctPmZsYWdzID0gRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVM7CisgICAgICAgICAgICAgICAgICAgICAgc3ViZy0+YXJnMSAgPSAoRlRfSW50KUZJWEVEX1RPX0lOVCggYWR4IC0gYXNiICk7CisgICAgICAgICAgICAgICAgICAgICAgc3ViZy0+YXJnMiAgPSAoRlRfSW50KUZJWEVEX1RPX0lOVCggYWR5ICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgdXAgcmVtYWluaW5nIGdseXBoIGZpZWxkcyAqLworICAgICAgICAgICAgICAgICAgICAgIGdseXBoLT5udW1fc3ViZ2x5cGhzID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICBnbHlwaC0+c3ViZ2x5cGhzICAgICA9IGxvYWRlci0+YmFzZS5zdWJnbHlwaHM7CisgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgtPmZvcm1hdCAgICAgICAgPSBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFOworCisgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLT5jdXJyZW50Lm51bV9zdWJnbHlwaHMgPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogRmlyc3QgbG9hZCBgYmNoYXInIGluIGJ1aWxkZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogbm93IGxvYWQgdGhlIHVuc2NhbGVkIG91dGxpbmUgKi8KKworICAgICAgICAgICAgICAgICAgICAvKiBwcmVwYXJlIGxvYWRlciAqLworICAgICAgICAgICAgICAgICAgICBGVF9HbHlwaExvYWRlcl9QcmVwYXJlKCBkZWNvZGVyLT5idWlsZGVyLmxvYWRlciApOworCisgICAgICAgICAgICAgICAgICAgIGVycm9yMiA9IGNmMl9nZXRUMVNlYWNDb21wb25lbnQoIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWJjaGFyX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcG9uZW50ICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggZXJyb3IyICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycm9yMjsgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCisgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcoIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teVdpZHRoICk7CisgICAgICAgICAgICAgICAgICAgIGNmMl9mcmVlVDFTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCAmY29tcG9uZW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogc2F2ZSB0aGUgbGVmdCBiZWFyaW5nIGFuZCB3aWR0aCBvZiB0aGUgYmFzZSAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBjaGFyYWN0ZXIgYXMgdGhleSB3aWxsIGJlIGVyYXNlZCBieSB0aGUgbmV4dCBsb2FkICovCisKKyAgICAgICAgICAgICAgICAgICAgbGVmdF9iZWFyaW5nID0gKmRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nOworICAgICAgICAgICAgICAgICAgICBhZHZhbmNlICAgICAgPSAqZGVjb2Rlci0+YnVpbGRlci5hZHZhbmNlOworCisgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmJ1aWxkZXIubGVmdF9iZWFyaW5nLT54ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmctPnkgPSAwOworCisgICAgICAgICAgICAgICAgICAgIC8qIE5vdyBsb2FkIGBhY2hhcicgb24gdG9wIG9mICovCisgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBiYXNlIG91dGxpbmUgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IyID0gY2YyX2dldFQxU2VhY0NvbXBvbmVudCggZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpYWNoYXJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21wb25lbnQgKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBlcnJvcjIgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZXJyb3IyOyAvKiBwYXNzIEZyZWVUeXBlIGVycm9yIHRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2YyX2ludGVycFQyQ2hhclN0cmluZyggZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR4IC0gYXNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teVdpZHRoICk7CisgICAgICAgICAgICAgICAgICAgIGNmMl9mcmVlVDFTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCAmY29tcG9uZW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSB0aGUgbGVmdCBzaWRlIGJlYXJpbmcgYW5kICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZSB3aWR0aCBvZiB0aGUgYmFzZSBjaGFyYWN0ZXIgKi8KKworICAgICAgICAgICAgICAgICAgICAqZGVjb2Rlci0+YnVpbGRlci5sZWZ0X2JlYXJpbmcgPSBsZWZ0X2JlYXJpbmc7CisgICAgICAgICAgICAgICAgICAgICpkZWNvZGVyLT5idWlsZGVyLmFkdmFuY2UgICAgICA9IGFkdmFuY2U7CisKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIGNmMl9lc2NTQlc6CisgICAgICAgICAgICAgICAgICBpZiAoICFmb250LT5pc1QxICkKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICgxMiwgJWQpXG4iLCBvcDIgKSk7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENGMl9GaXhlZCAgICBsc2JfeCwgbHNiX3k7CisgICAgICAgICAgICAgICAgICAgIFBTX0J1aWxkZXIqICBidWlsZGVyOworCisKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzYnciICkpOworCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSAmZGVjb2Rlci0+YnVpbGRlcjsKKworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLT5hZHZhbmNlLT55ID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UtPnggPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICBsc2JfeSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICBsc2JfeCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy0+eCA9CisgICAgICAgICAgICAgICAgICAgICAgQUREX0lOVDMyKCBidWlsZGVyLT5sZWZ0X2JlYXJpbmctPngsIGxzYl94ICk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy0+eSA9CisgICAgICAgICAgICAgICAgICAgICAgQUREX0lOVDMyKCBidWlsZGVyLT5sZWZ0X2JlYXJpbmctPnksIGxzYl95ICk7CisKKyAgICAgICAgICAgICAgICAgICAgaGF2ZVdpZHRoID0gVFJVRTsKKworICAgICAgICAgICAgICAgICAgICAvKiB0aGUgYG1ldHJpY3Nfb25seScgaW5kaWNhdGVzIHRoYXQgd2Ugb25seSB3YW50ICovCisgICAgICAgICAgICAgICAgICAgIC8qIHRvIGNvbXB1dGUgdGhlIGdseXBoJ3MgbWV0cmljcyAobHNiICsgYWR2YW5jZSAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogd2lkdGgpLCBub3QgbG9hZCB0aGUgIHJlc3Qgb2YgaXQ7IHNvIGV4aXQgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBpbW1lZGlhdGVseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmICggYnVpbGRlci0+bWV0cmljc19vbmx5ICkKKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBpbml0aWFsX21hcF9yZWFkeSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjdXJYID0gQUREX0lOVDMyKCBjdXJYLCBsc2JfeCApOworICAgICAgICAgICAgICAgICAgICAgIGN1clkgPSBBRERfSU5UMzIoIGN1clksIGxzYl95ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjQUJTOgorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzsKKworCisgICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgYWJzXG4iICkpOworCisgICAgICAgICAgICAgICAgICAgIGFyZyA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGlmICggYXJnIDwgLUNGMl9GSVhFRF9NQVggKQorICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIENGMl9GSVhFRF9NQVggKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIEZUX0FCUyggYXJnICkgKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICAgICAgICBjYXNlIGNmMl9lc2NBREQ6CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgc3VtbWFuZDE7CisgICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgc3VtbWFuZDI7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFkZFxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBzdW1tYW5kMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICBzdW1tYW5kMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFERF9JTlQzMiggc3VtbWFuZDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFuZDIgKSApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY1NVQjoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBtaW51ZW5kOworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHN1YnRyYWhlbmQ7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHN1YlxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBzdWJ0cmFoZW5kID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIG1pbnVlbmQgICAgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfSU5UMzIoIG1pbnVlbmQsIHN1YnRyYWhlbmQgKSApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0RJVjoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBkaXZpZGVuZDsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBkaXZpc29yOworCisKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkaXZcbiIgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBmb250LT5pc1QxICYmIGxhcmdlX2ludCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBkaXZpc29yICA9IChDRjJfRjE2RG90MTYpY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZW5kID0gKENGMl9GMTZEb3QxNiljZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgICBsYXJnZV9pbnQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBkaXZpc29yICA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZW5kID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EaXZGaXgoIGRpdmlkZW5kLCBkaXZpc29yICkgKTsKKworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY05FRzoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG5lZ1xuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZyA8IC1DRjJfRklYRURfTUFYICkKKyAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBDRjJfRklYRURfTUFYICk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCAtYXJnICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjRVE6CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOworCisKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBhcmcyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGFyZzEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgYXJnMSA9PSBhcmcyICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjQ0FMTE9USEVSU1VCUjoKKyAgICAgICAgICAgICAgICAgIGlmICggIWZvbnQtPmlzVDEgKQorICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHVua25vd24gb3AgKDEyLCAlZClcbiIsIG9wMiApKTsKKyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgIHN1YnJfbm87CisgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgICBhcmdfY250OworICAgICAgICAgICAgICAgICAgICBDRjJfVUludCAgY291bnQ7CisgICAgICAgICAgICAgICAgICAgIENGMl9VSW50ICBvcElkeCA9IDA7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGNhbGxvdGhlcnN1YnJcbiIgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgc3Vicl9ubyA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgYXJnX2NudCA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIHJlbW92ZSBhbGwgb3BlcmFuZHMgdG8gY2FsbG90aGVyc3ViciBmcm9tIHRoZSBzdGFjayAqLworICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogZm9yIGhhbmRsZWQgb3RoZXJzdWJycywgd2hlcmUgd2Uga25vdyB0aGUgbnVtYmVyIG9mICovCisgICAgICAgICAgICAgICAgICAgIC8qIGFyZ3VtZW50cywgd2UgaW5jcmVhc2UgdGhlIHN0YWNrIGJ5IHRoZSB2YWx1ZSBvZiAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIGZvciB1bmhhbmRsZWQgb3RoZXJzdWJycyB0aGUgZm9sbG93aW5nIHBvcHMgYWRqdXN0ICAqLworICAgICAgICAgICAgICAgICAgICAvKiB0aGUgc3RhY2sgcG9pbnRlciBhcyBuZWNlc3NhcnkgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICBGVF9BU1NFUlQoIChDRjJfVUludClhcmdfY250IDw9IGNvdW50ICk7CisKKyAgICAgICAgICAgICAgICAgICAgb3BJZHggKz0gY291bnQgLSAoQ0YyX1VJbnQpYXJnX2NudDsKKworICAgICAgICAgICAgICAgICAgICBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jbnQgICAgICAgICAgICAgICAgID0gMDsKKworICAgICAgICAgICAgICAgICAgICAvKiBYWFggVE9ETzogVGhlIGNoZWNrcyB0byBgYXJnX2NvdW50ID09IDx3aGF0ZXZlcj4nICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogbWlnaHQgbm90IGJlIGNvcnJlY3Q7IGFuIG90aGVyc3ViciBleHBlY3RzIGEgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIGNlcnRhaW4gbnVtYmVyIG9mIG9wZXJhbmRzIG9uIHRoZSBQb3N0U2NyaXB0IHN0YWNrICAqLworICAgICAgICAgICAgICAgICAgICAvKiAoYXMgb3Bwb3NlZCB0byB0aGUgVDEgc3RhY2spIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8gKi8KKyAgICAgICAgICAgICAgICAgICAgLyogcHV0IHRoZW0gdGhlcmUgYnkgaXRzZWxmOyBwcmV2aW91cyBvdGhlcnN1YnJzIG1pZ2h0ICovCisgICAgICAgICAgICAgICAgICAgIC8qIGhhdmUgbGVmdCB0aGUgb3BlcmFuZHMgdGhlcmUgaWYgdGhleSB3ZXJlIG5vdCAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBmb2xsb3dlZCBieSBhbiBhcHByb3ByaWF0ZSBudW1iZXIgb2YgcG9wcyAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIE9uIHRoZSBvdGhlciBoYW5kLCBBZG9iZSBSZWFkZXIgNy4wLjggZm9yIExpbnV4ICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBkb2Vzbid0IGFjY2VwdCBhIGZvbnQgdGhhdCBjb250YWlucyBjaGFyc3RyaW5ncyAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogbGlrZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiAgICAgMTAwIDIwMCAyIDIwIGNhbGxvdGhlcnN1YnIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICAgIDMwMCAxIDIwIGNhbGxvdGhlcnN1YnIgcG9wICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiBQZXJoYXBzIHRoaXMgaXMgdGhlIHJlYXNvbiB3aHkgQnVpbGRDaGFyQXJyYXkgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogZXhpc3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggc3Vicl9ubyApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBmbGV4IGZlYXR1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZ19jbnQgIT0gMyApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZXhwZWN0ZWRfT3RoZXJTdWJyOworCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpbml0aWFsX21hcF9yZWFkeSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAhZGVjb2Rlci0+ZmxleF9zdGF0ZSAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bnVtX2ZsZXhfdmVjdG9ycyAhPSA3ICkgKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmcgKFR5cGUgMSBtb2RlKToiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdW5leHBlY3RlZCBmbGV4IGVuZFxuIiApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSB0d28gYHJlc3VsdHMnIGFyZSBwb3BwZWQgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogYnkgdGhlIGZvbGxvd2luZyBzZXRjdXJyZW50cG9pbnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBjdXJYICk7CisgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgY3VyWSApOworICAgICAgICAgICAgICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgZmxleCBmZWF0dXJlICovCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgIGlmICggIWluaXRpYWxfbWFwX3JlYWR5ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwc19idWlsZGVyX2NoZWNrX3BvaW50cyggJmRlY29kZXItPmJ1aWxkZXIsIDYgKSApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5mbGV4X3N0YXRlICAgICAgICA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+bnVtX2ZsZXhfdmVjdG9ycyAgPSAwOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAvKiBhZGQgZmxleCB2ZWN0b3JzICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICBpZHg7CisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgIGlkeDI7CisKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZXhwZWN0ZWRfT3RoZXJTdWJyOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpbml0aWFsX21hcF9yZWFkeSApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFkZWNvZGVyLT5mbGV4X3N0YXRlICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZyAoVHlwZSAxIG1vZGUpOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1pc3NpbmcgZmxleCBzdGFydFxuIiApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90ZSB0aGF0IHdlIHNob3VsZCBub3QgYWRkIGEgcG9pbnQgZm9yICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IDA7IHRoaXMgd2lsbCBtb3ZlIG91ciBjdXJyZW50IHBvc2l0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byB0aGUgZmxleCBwb2ludCB3aXRob3V0IGFkZGluZyBhbnkgcG9pbnQgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogdG8gdGhlIG91dGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGRlY29kZXItPm51bV9mbGV4X3ZlY3RvcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaWR4ID4gMCAmJiBpZHggPCA3ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gbWFsZm9ybWVkIGZvbnRzIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3RoZXIgb3Bjb2RlcyBpbiB0aGUgbWlkZGxlIG9mIGEgZmxleCAod2hpY2ggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgaW5jcmVhc2UgYG51bV9mbGV4X3ZlY3RvcnMnKTsgd2UgdGh1cyAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaGF2ZSB0byBjaGVjayB3aGV0aGVyIHdlIGNhbiBhZGQgYSBwb2ludCAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBzX2J1aWxkZXJfY2hlY2tfcG9pbnRzKCAmZGVjb2Rlci0+YnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1hcDogMS0+MiAyLT40IDMtPjYgNC0+MiA1LT40IDYtPjYgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4MiA9ICggaWR4ID4gMyA/IGlkeCAtIDMgOiBpZHggKSAqIDI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleFN0b3JlW2lkeDIgLSAyXSA9IGN1clg7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhTdG9yZVtpZHgyIC0gMV0gPSBjdXJZOworCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaWR4ID09IDMgfHwgaWR4ID09IDYgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfY3VydmVUbyggJmdseXBoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhTdG9yZVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhTdG9yZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhTdG9yZVsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhTdG9yZVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhTdG9yZVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhTdG9yZVs1XSApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogY2hhbmdlIGhpbnRzICovCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDEgKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5pdGlhbF9tYXBfcmVhZHkgKQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdCBjbGVhciBoaW50cyBpZiBpbml0aWFsIGhpbnRtYXAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzIG5vdCByZWFkeSAtIHdlIG5lZWQgdG8gY29sbGF0ZSBhbGwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19jbGVhciggJnZTdGVtSGludEFycmF5ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfY2xlYXIoICZoU3RlbUhpbnRBcnJheSApOworCisgICAgICAgICAgICAgICAgICAgICAgICBjZjJfaGludG1hc2tfaW5pdCggJmhpbnRNYXNrLCBlcnJvciApOworICAgICAgICAgICAgICAgICAgICAgICAgaGludE1hc2suaXNWYWxpZCA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgaGludE1hc2suaXNOZXcgICA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICAgICAgICAgICAgLyogY291bnRlciBjb250cm9sIGhpbnRzLCBjbGVhciBzdGFjayAqLworICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTg6ICAgICAgICAgICAgICAgICAgICAvKiBtdWx0aXBsZSBtYXN0ZXJzICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUFNfQmxlbmQgIGJsZW5kID0gZGVjb2Rlci0+YmxlbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgbnVtX3BvaW50cywgbm4sIG1tOworICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgIGRlbHRhOworICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgIHZhbHVlczsKKworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFibGVuZCApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0VSUk9SKCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2YyX2ludGVycFQyQ2hhclN0cmluZzoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIG11bHRpcGxlIG1hc3RlcnMgb3BlcmF0b3JcbiIgKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0dseXBoX0Zvcm1hdCApOworICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wb2ludHMgPSAoRlRfVUludClzdWJyX25vIC0gMTMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBzdWJyX25vID09IDE4ICk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZ19jbnQgIT0gKEZUX0ludCkoIG51bV9wb2ludHMgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZC0+bnVtX2Rlc2lnbnMgKSApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0VSUk9SKCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2YyX2ludGVycFQyQ2hhclN0cmluZzoiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpbmNvcnJlY3QgbnVtYmVyIG9mIG11bHRpcGxlIG1hc3RlcnMgYXJndW1lbnRzXG4iICkpOworICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXZSB3YW50IHRvIGNvbXB1dGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGEwKncwICsgYTEqdzEgKyAuLi4gKyBhayp3ayAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBidXQgd2Ugb25seSBoYXZlIGEwLCBhMS1hMCwgYTItYTAsIC4uLiwgYWstYTAuICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBIb3dldmVyLCBnaXZlbiB0aGF0IHcwICsgdzEgKyAuLi4gKyB3ayA9PSAxLCB3ZSAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYW4gcmV3cml0ZSBpdCBlYXNpbHkgYXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgIGEwICsgKGExLWEwKSp3MSArIChhMi1hMCkqdzIgKyAuLi4gKyAoYWstYTApKndrICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSBrID09IG51bV9kZXNpZ25zLTEuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBJIGd1ZXNzIHRoYXQncyB3aHkgaXQncyB3cml0dGVuIGluIHRoaXMgYGNvbXBhY3QnICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3JtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSAgPSBvcElkeCArIG51bV9wb2ludHM7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBvcElkeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1fcG9pbnRzOyBubisrICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0ZpeGVkICB0bXAgPSBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzICk7CisKKworICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBtbSA9IDE7IG1tIDwgYmxlbmQtPm51bV9kZXNpZ25zOyBtbSsrICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBBRERfSU5UMzIoIHRtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSsrICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT53ZWlnaHRfdmVjdG9yW21tXSApICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3NldFJlYWwoIG9wU3RhY2ssIHZhbHVlcysrLCB0bXAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wb3AoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0YyX1VJbnQpYXJnX2NudCAtIG51bV9wb2ludHMgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAoRlRfSW50KW51bV9wb2ludHM7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOToKKyAgICAgICAgICAgICAgICAgICAgICAvKiA8aWR4PiAxIDE5IGNhbGxvdGhlcnN1YnIgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogPT0+IHJlcGxhY2UgZWxlbWVudHMgc3RhcnRpbmcgZnJvbSBpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgIC8qICAgICBjdmkoIDxpZHg+ICkgb2YgQnVpbGRDaGFyQXJyYXkgd2l0aCAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgV2VpZ2h0VmVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgIGlkeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTX0JsZW5kICBibGVuZCA9IGRlY29kZXItPmJsZW5kOworCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJnX2NudCAhPSAxIHx8ICFibGVuZCApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpZHggPCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClpZHggKyBibGVuZC0+bnVtX2Rlc2lnbnMgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmxlbl9idWlsZGNoYXIgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0X21lbWNweSggJmRlY29kZXItPmJ1aWxkY2hhcltpZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZC0+d2VpZ2h0X3ZlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPm51bV9kZXNpZ25zICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggYmxlbmQtPndlaWdodF92ZWN0b3JbMF0gKSApOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgICAgICAgICAgIC8qIDxhcmcxPiA8YXJnMj4gMiAyMCBjYWxsb3RoZXJzdWJyIHBvcCAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogPT0+IHB1c2ggPGFyZzE+ICsgPGFyZzI+IG9udG8gVDEgc3RhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHN1bW1hbmQxOworICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBzdW1tYW5kMjsKKworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZ19jbnQgIT0gMiApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hbmQyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYW5kMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUREX0lOVDMyKCBzdW1tYW5kMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFuZDIgKSApOworICAgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDIxOgorICAgICAgICAgICAgICAgICAgICAgIC8qIDxhcmcxPiA8YXJnMj4gMiAyMSBjYWxsb3RoZXJzdWJyIHBvcCAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogPT0+IHB1c2ggPGFyZzE+IC0gPGFyZzI+IG9udG8gVDEgc3RhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIG1pbnVlbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHN1YnRyYWhlbmQ7CisKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZXhwZWN0ZWRfT3RoZXJTdWJyOworCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0cmFoZW5kID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgICAgICBtaW51ZW5kICAgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfSU5UMzIoIG1pbnVlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRyYWhlbmQgKSApOworICAgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOgorICAgICAgICAgICAgICAgICAgICAgIC8qIDxhcmcxPiA8YXJnMj4gMiAyMiBjYWxsb3RoZXJzdWJyIHBvcCAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogPT0+IHB1c2ggPGFyZzE+ICogPGFyZzI+IG9udG8gVDEgc3RhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGZhY3RvcjE7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGZhY3RvcjI7CisKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZXhwZWN0ZWRfT3RoZXJTdWJyOworCisgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3IyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3IxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIGZhY3RvcjEsIGZhY3RvcjIgKSApOworICAgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDIzOgorICAgICAgICAgICAgICAgICAgICAgIC8qIDxhcmcxPiA8YXJnMj4gMiAyMyBjYWxsb3RoZXJzdWJyIHBvcCAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogPT0+IHB1c2ggPGFyZzE+IC8gPGFyZzI+IG9udG8gVDEgc3RhY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGRpdmlkZW5kOworICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBkaXZpc29yOworCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJnX2NudCAhPSAyICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGl2aXNvciAgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlkZW5kID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZGl2aXNvciA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RpdkZpeCggZGl2aWRlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdmlzb3IgKSApOworICAgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIDI0OgorICAgICAgICAgICAgICAgICAgICAgIC8qIDx2YWw+IDxpZHg+IDIgMjQgY2FsbG90aGVyc3ViciAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogPT0+IHNldCBCdWlsZENoYXJBcnJheVtjdmkoIDxpZHg+ICldID0gPHZhbD4gKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgaWR4OworICAgICAgICAgICAgICAgICAgICAgICAgUFNfQmxlbmQgIGJsZW5kID0gZGVjb2Rlci0+YmxlbmQ7CisKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDIgfHwgIWJsZW5kICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlkeCA8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWlkeCA+PSBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRjaGFyW2lkeF0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNToKKyAgICAgICAgICAgICAgICAgICAgICAvKiA8aWR4PiAxIDI1IGNhbGxvdGhlcnN1YnIgcG9wICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgIC8qID09PiBwdXNoIEJ1aWxkQ2hhckFycmF5W2N2aSggaWR4ICldICovCisgICAgICAgICAgICAgICAgICAgICAgLyogICAgIG9udG8gVDEgc3RhY2sgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICAgaWR4OworICAgICAgICAgICAgICAgICAgICAgICAgUFNfQmxlbmQgIGJsZW5kID0gZGVjb2Rlci0+YmxlbmQ7CisKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBhcmdfY250ICE9IDEgfHwgIWJsZW5kICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlkeCA8IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50KWlkeCA+PSBkZWNvZGVyLT5sZW5fYnVpbGRjaGFyICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmJ1aWxkY2hhcltpZHhdICk7CisgICAgICAgICAgICAgICAgICAgICAgICBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgMAorICAgICAgICAgICAgICAgICAgICBjYXNlIDI2OgorICAgICAgICAgICAgICAgICAgICAgIC8qIDx2YWw+IG1hcmsgPGlkeD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgIC8qID09PiBzZXQgQnVpbGRDaGFyQXJyYXlbY3ZpKCA8aWR4PiApXSA9IDx2YWw+LCAqLworICAgICAgICAgICAgICAgICAgICAgIC8qICAgICBsZWF2ZSBtYXJrIG9uIFQxIHN0YWNrICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgIC8qIDx2YWw+IDxpZHg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgIC8qID09PiBzZXQgQnVpbGRDaGFyQXJyYXlbY3ZpKCA8aWR4PiApXSA9IDx2YWw+ICAqLworICAgICAgICAgICAgICAgICAgICAgIFhYWCB3aGljaCByb3V0aW5lIGhhcyBsZWZ0IGl0cyBtYXJrIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAgIFhYWCAoUG9zdFNjcmlwdCkgc3RhY2s/OworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyNzoKKyAgICAgICAgICAgICAgICAgICAgICAvKiA8cmVzMT4gPHJlczI+IDx2YWwxPiA8dmFsMj4gNCAyNyBjYWxsb3RoZXJzdWJyIHBvcCAqLworICAgICAgICAgICAgICAgICAgICAgIC8qID09PiBwdXNoIDxyZXMxPiBvbnRvIFQxIHN0YWNrIGlmIDx2YWwxPiA8PSA8dmFsMj4sICovCisgICAgICAgICAgICAgICAgICAgICAgLyogICAgIG90aGVyd2lzZSBwdXNoIDxyZXMyPiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzE7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzI7CisgICAgICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGNvbmQxOworICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBjb25kMjsKKworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZ19jbnQgIT0gNCApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmQyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25kMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICAgICAgYXJnMiAgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kMSA8PSBjb25kMiA/IGFyZzEgOiBhcmcyICk7CisgICAgICAgICAgICAgICAgICAgICAgICBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjg6CisgICAgICAgICAgICAgICAgICAgICAgLyogMCAyOCBjYWxsb3RoZXJzdWJyIHBvcCAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgLyogPT0+IHB1c2ggcmFuZG9tIHZhbHVlIGZyb20gaW50ZXJ2YWwgWzAsIDEpICovCisgICAgICAgICAgICAgICAgICAgICAgLyogICAgIG9udG8gc3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICByOworCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJnX2NudCAhPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmV4cGVjdGVkX090aGVyU3VicjsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogb25seSB1c2UgdGhlIGxvd2VyIDE2IGJpdHMgb2YgYHJhbmRvbScgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0byBnZW5lcmF0ZSBhIG51bWJlciBpbiB0aGUgcmFuZ2UgKDA7MV0gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAoQ0YyX0YxNkRvdDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cmFuZG9tICYgMHhGRkZGICkgKyAxICk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmN1cnJlbnRfc3ViZm9udC0+cmFuZG9tID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmX3JhbmRvbSggZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgciApOworICAgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJnX2NudCA+PSAwICYmIHN1YnJfbm8gPj0gMCApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICBpOworCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0VSUk9SKCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImNmMl9pbnRlcnBUMkNoYXJTdHJpbmcgKFR5cGUgMSBtb2RlKToiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgdW5rbm93biBvdGhlcnN1YnIgWyVkICVkXSwgd2lzaCBtZSBsdWNrXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfY250LCBzdWJyX25vICkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdG9yZSB0aGUgdW51c2VkIGFyZ3MgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgdGhpcyB1bmhhbmRsZWQgT3RoZXJTdWJyICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggYXJnX2NudCA+IFBTX1NUT1JBR0VfU0laRSApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19jbnQgPSBQU19TVE9SQUdFX1NJWkU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfY250ID0gYXJnX2NudDsKKworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDE7IGkgPD0gYXJnX2NudDsgaSsrICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tyZXN1bHRfY250IC0gaV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgICAgICAgICAgICAgVW5leHBlY3RlZF9PdGhlclN1YnI6CisgICAgICAgICAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZyAoVHlwZSAxIG1vZGUpOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBvdGhlcnN1YnIgWyVkICVkXVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19jbnQsIHN1YnJfbm8gKSk7CisgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjUE9QOgorICAgICAgICAgICAgICAgICAgaWYgKCAhZm9udC0+aXNUMSApCisgICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgdW5rbm93biBvcCAoMTIsICVkKVxuIiwgb3AyICkpOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHBvcCIgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCA+IDAgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQtLTsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBpZ25vcmUsIHdlIHB1c2hlZCB0aGUgb3BlcmFuZHMgb3Vyc2VsdmVzICovCisgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3VsdF9jbnQgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBGVF9FUlJPUigoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nIChUeXBlIDEgbW9kZSk6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBubyBtb3JlIG9wZXJhbmRzIGZvciBvdGhlcnN1YnJcbiIgKSk7CisgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gRlRfVEhST1coIEludmFsaWRfR2x5cGhfRm9ybWF0ICk7CisgICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2NudC0tOworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCByZXN1bHRzW3Jlc3VsdF9jbnRdICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjRFJPUDoKKyAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZHJvcFxuIiApKTsKKworICAgICAgICAgICAgICAgICAgKHZvaWQpY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjUFVUOgorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHZhbDsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBpZHg7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHB1dFxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBpZHggPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIHZhbCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGlmICggaWR4ID49IDAgJiYgaWR4IDwgQ0YyX1NUT1JBR0VfU0laRSApCisgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVtpZHhdID0gdmFsOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0dFVDoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgaWR4OworCisKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBnZXRcbiIgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWR4ID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGlmICggaWR4ID49IDAgJiYgaWR4IDwgQ0YyX1NUT1JBR0VfU0laRSApCisgICAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgc3RvcmFnZVtpZHhdICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjSUZFTFNFOgorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzE7CisgICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMjsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBjb25kMTsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBjb25kMjsKKworCisgICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaWZlbHNlXG4iICkpOworCisgICAgICAgICAgICAgICAgICAgIGNvbmQyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGNvbmQxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGFyZzIgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGFyZzEgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZDEgPD0gY29uZDIgPyBhcmcxIDogYXJnMiApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY1JBTkRPTTogLyogaW4gc3BlYyAqLworICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHI7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJhbmRvbVxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IHVzZSB0aGUgbG93ZXIgMTYgYml0cyBvZiBgcmFuZG9tJyAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogdG8gZ2VuZXJhdGUgYSBudW1iZXIgaW4gdGhlIHJhbmdlICgwOzFdICovCisgICAgICAgICAgICAgICAgICAgIHIgPSAoQ0YyX0YxNkRvdDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAoICggZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gJiAweEZGRkYgKSArIDEgKTsKKworICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQtPnJhbmRvbSA9CisgICAgICAgICAgICAgICAgICAgICAgY2ZmX3JhbmRvbSggZGVjb2Rlci0+Y3VycmVudF9zdWJmb250LT5yYW5kb20gKTsKKworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCByICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjTVVMOgorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGZhY3RvcjE7CisgICAgICAgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgZmFjdG9yMjsKKworCisgICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbXVsXG4iICkpOworCisgICAgICAgICAgICAgICAgICAgIGZhY3RvcjIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9yMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZmFjdG9yMSwgZmFjdG9yMiApICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjU1FSVDoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHNxcnRcbiIgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggYXJnID4gMCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiB1c2UgYSBzdGFydCB2YWx1ZSB0aGF0IGRvZXNuJ3QgbWFrZSAqLworICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBhbGdvcml0aG0ncyBhZGRpdGlvbiBvdmVyZmxvdyAgICovCisgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgIHJvb3QgPSBhcmcgPCAxMCA/IGFyZyA6IGFyZyA+PiAxOworICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICBuZXdfcm9vdDsKKworCisgICAgICAgICAgICAgICAgICAgICAgLyogQmFieWxvbmlhbiBtZXRob2QgKi8KKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19yb290ID0gKCByb290ICsgRlRfRGl2Rml4KCBhcmcsIHJvb3QgKSArIDEgKSA+PiAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuZXdfcm9vdCA9PSByb290ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICByb290ID0gbmV3X3Jvb3Q7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IG5ld19yb290OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAwOworCisgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGFyZyApOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgY2YyX2VzY0RVUDoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmc7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGR1cFxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBhcmcgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBhcmcgKTsKKyAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgYXJnICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjRVhDSDoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcxOworICAgICAgICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzI7CisKKworICAgICAgICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGV4Y2hcbiIgKSk7CisKKyAgICAgICAgICAgICAgICAgICAgYXJnMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICBhcmcxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgYXJnMiApOworICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBhcmcxICk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjSU5ERVg6CisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENGMl9JbnQgICBpZHg7CisgICAgICAgICAgICAgICAgICAgIENGMl9VSW50ICBzaXplOworCisKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBpbmRleFxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBpZHggID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgICAgICAgICAgICBzaXplID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBzaXplID4gMCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgYGNmMl9zdGFja19nZXRSZWFsJywgICAqLworICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4IDAgaXMgYm90dG9tIG9mIHN0YWNrICovCisgICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgIGdyX2lkeDsKKworCisgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpZHggPCAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyX2lkeCA9IHNpemUgLSAxOworICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoQ0YyX1VJbnQpaWR4ID49IHNpemUgKQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JfaWR4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncl9pZHggPSBzaXplIC0gMSAtIChDRjJfVUludClpZHg7CisKKyAgICAgICAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncl9pZHggKSApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgICAgICAgY2FzZSBjZjJfZXNjUk9MTDoKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgaWR4OworICAgICAgICAgICAgICAgICAgICBDRjJfSW50ICBjb3VudDsKKworCisgICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcm9sbFxuIiApKTsKKworICAgICAgICAgICAgICAgICAgICBpZHggICA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgICAgICAgY2YyX3N0YWNrX3JvbGwoIG9wU3RhY2ssIGNvdW50LCBpZHggKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICAgICAgICBjYXNlIGNmMl9lc2NTRVRDVVJSRU5UUFQ6CisgICAgICAgICAgICAgICAgICBpZiAoICFmb250LT5pc1QxICkKKyAgICAgICAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICgxMiwgJWQpXG4iLCBvcDIgKSk7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgc2V0Y3VycmVudHBvaW50IiApKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoICFpbml0aWFsX21hcF9yZWFkeSApCisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLyogRnJvbSB0aGUgVDEgc3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA2LjQ6ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICBUaGUgc2V0Y3VycmVudHBvaW50IGNvbW1hbmQgaXMgdXNlZCBvbmx5IGluICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICBjb25qdW5jdGlvbiB3aXRoIHJlc3VsdHMgZnJvbSBPdGhlclN1YnJzICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogICBwcm9jZWR1cmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICAvKiBrbm93bl9vdGhlcnN1YnJfcmVzdWx0X2NudCAhPSAwIGlzIGFscmVhZHkgaGFuZGxlZCAqLworICAgICAgICAgICAgICAgICAgICAvKiBhYm92ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgIC8qIE5vdGUsIGhvd2V2ZXIsIHRoYXQgYm90aCBHaG9zdHNjcmlwdCBhbmQgQWRvYmUgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIERpc3RpbGxlciBoYW5kbGUgdGhpcyBzaXR1YXRpb24gYnkgc2lsZW50bHkgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIGlnbm9yaW5nIHRoZSBpbmFwcHJvcHJpYXRlIGBzZXRjdXJyZW50cG9pbnQnICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8qIGluc3RydWN0aW9uLiAgU28gd2UgZG8gdGhlIHNhbWUuICAgICAgICAgICAgICAgICAgICovCisjaWYgMAorCisgICAgICAgICAgICAgICAgICAgIGlmICggZGVjb2Rlci0+ZmxleF9zdGF0ZSAhPSAxICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIEZUX0VSUk9SKCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmc6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB1bmV4cGVjdGVkIGBzZXRjdXJyZW50cG9pbnQnXG4iICkpOworICAgICAgICAgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAuLi4KKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgIGN1clkgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgICAgICAgY3VyWCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmZsZXhfc3RhdGUgPSAwOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICB9IC8qIGVuZCBvZiAybmQgc3dpdGNoIGNoZWNraW5nIG9wMiAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSAvKiBlbmQgb2YgMXN0IHN3aXRjaCBjaGVja2luZyBvcDIgKi8KKyAgICAgICAgfSAvKiBjYXNlIGNmMl9jbWRFU0MgKi8KKworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBjZjJfY21kSFNCVzoKKyAgICAgICAgaWYgKCAhZm9udC0+aXNUMSApCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiB1bmtub3duIG9wICglZClcbiIsIG9wMSApKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgQ0YyX0ZpeGVkICAgIGxzYl94OworICAgICAgICAgIFBTX0J1aWxkZXIqICBidWlsZGVyOworCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIGhzYnciICkpOworCisgICAgICAgICAgYnVpbGRlciA9ICZkZWNvZGVyLT5idWlsZGVyOworCisgICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS0+eCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UtPnkgPSAwOworCisgICAgICAgICAgbHNiX3ggPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy0+eCA9IEFERF9JTlQzMiggYnVpbGRlci0+bGVmdF9iZWFyaW5nLT54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNiX3ggKTsKKworICAgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CisKKyAgICAgICAgICAvKiB0aGUgYG1ldHJpY3Nfb25seScgaW5kaWNhdGVzIHRoYXQgd2Ugb25seSB3YW50IHRvIGNvbXB1dGUgKi8KKyAgICAgICAgICAvKiB0aGUgZ2x5cGgncyBtZXRyaWNzIChsc2IgKyBhZHZhbmNlIHdpZHRoKSwgbm90IGxvYWQgdGhlICAgKi8KKyAgICAgICAgICAvKiByZXN0IG9mIGl0OyBzbyBleGl0IGltbWVkaWF0ZWx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGJ1aWxkZXItPm1ldHJpY3Nfb25seSApCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgICBpZiAoIGluaXRpYWxfbWFwX3JlYWR5ICkKKyAgICAgICAgICAgIGN1clggPSBBRERfSU5UMzIoIGN1clgsIGxzYl94ICk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgY2YyX2NtZEVORENIQVI6CisgICAgICAgIEZUX1RSQUNFNCgoICIgZW5kY2hhclxuIiApKTsKKworICAgICAgICBpZiAoIGZvbnQtPmlzVDEgJiYgIWluaXRpYWxfbWFwX3JlYWR5ICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNSgoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nIChUeXBlIDEgbW9kZSk6ICIKKyAgICAgICAgICAgICAgICAgICAgICAiQnVpbGQgaW5pdGlhbCBoaW50bWFwLCByZXdpbmRpbmcuLi5cbiIgKSk7CisKKyAgICAgICAgICAvKiB0cmlnZ2VyIGluaXRpYWwgaGludG1hcCBidWlsZCAqLworICAgICAgICAgIGNmMl9nbHlwaHBhdGhfbW92ZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7CisKKyAgICAgICAgICBpbml0aWFsX21hcF9yZWFkeSA9IFRSVUU7CisKKyAgICAgICAgICAvKiBjaGFuZ2UgaGludHMgcm91dGluZSAtIGNsZWFyIGZvciByZXdpbmQgKi8KKyAgICAgICAgICBjZjJfYXJyc3RhY2tfY2xlYXIoICZ2U3RlbUhpbnRBcnJheSApOworICAgICAgICAgIGNmMl9hcnJzdGFja19jbGVhciggJmhTdGVtSGludEFycmF5ICk7CisKKyAgICAgICAgICBjZjJfaGludG1hc2tfaW5pdCggJmhpbnRNYXNrLCBlcnJvciApOworICAgICAgICAgIGhpbnRNYXNrLmlzVmFsaWQgPSBGQUxTRTsKKyAgICAgICAgICBoaW50TWFzay5pc05ldyAgID0gVFJVRTsKKworICAgICAgICAgIC8qIHJld2luZCBjaGFyc3RyaW5nICovCisgICAgICAgICAgLyogc29tZSBjaGFyc3RyaW5ncyB1c2UgZW5kY2hhciBmcm9tIGEgZmluYWwgc3Vicm91dGluZSBjYWxsICovCisgICAgICAgICAgLyogd2l0aG91dCByZXR1cm5pbmcsIGRldGVjdCB0aGVzZSBhbmQgZXhpdCB0byB0aGUgdG9wIGxldmVsICovCisgICAgICAgICAgLyogY2hhcnN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgd2hpbGUgKCBjaGFyc3RyaW5nSW5kZXggPiAwICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHJldHVybiAobGVhdmluZyBsZXZlbCAlZClcbiIsIGNoYXJzdHJpbmdJbmRleCApKTsKKworICAgICAgICAgICAgLyogcmVzdG9yZSBwb3NpdGlvbiBpbiBwcmV2aW91cyBjaGFyc3RyaW5nICovCisgICAgICAgICAgICBjaGFyc3RyaW5nID0gKENGMl9CdWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfZ2V0UG9pbnRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1YnJTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENGMl9VSW50KS0tY2hhcnN0cmluZ0luZGV4ICk7CisgICAgICAgICAgfQorICAgICAgICAgIGNoYXJzdHJpbmctPnB0ciA9IGNoYXJzdHJpbmctPnN0YXJ0OworCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGNmMl9zdGFja19jb3VudCggb3BTdGFjayApID09IDEgfHwKKyAgICAgICAgICAgICBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA9PSA1ICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggIWhhdmVXaWR0aCApCisgICAgICAgICAgICAqd2lkdGggPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCAwICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxXaWR0aFggKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHdpZHRoIGlzIGRlZmluZWQgb3IgZGVmYXVsdCBhZnRlciB0aGlzICovCisgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CisKKyAgICAgICAgaWYgKCBkZWNvZGVyLT53aWR0aF9vbmx5ICkKKyAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgLyogY2xvc2UgcGF0aCBpZiBzdGlsbCBvcGVuICovCisgICAgICAgIGNmMl9nbHlwaHBhdGhfY2xvc2VPcGVuUGF0aCggJmdseXBoUGF0aCApOworCisgICAgICAgIC8qIGRpc2FibGUgc2VhYyBmb3IgQ0ZGMiBhbmQgVHlwZTEgICAgICAgICovCisgICAgICAgIC8qIChjaGFyc3RyaW5nIGVuZGluZyB3aXRoIGFyZ3Mgb24gc3RhY2spICovCisgICAgICAgIGlmICggIWZvbnQtPmlzQ0ZGMiAmJiAhZm9udC0+aXNUMSAmJiBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA+IDEgKQorICAgICAgICB7CisgICAgICAgICAgLyogbXVzdCBiZSBlaXRoZXIgNCBvciA1IC0tICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIHRoaXMgaXMgYSAoZGVwcmVjYXRlZCkgaW1wbGllZCBgc2VhYycgb3BlcmF0b3IgKi8KKworICAgICAgICAgIENGMl9JbnQgICAgICAgIGFjaGFyOworICAgICAgICAgIENGMl9JbnQgICAgICAgIGJjaGFyOworICAgICAgICAgIENGMl9CdWZmZXJSZWMgIGNvbXBvbmVudDsKKyAgICAgICAgICBDRjJfRml4ZWQgICAgICBkdW1teVdpZHRoOyAgIC8qIGlnbm9yZSBjb21wb25lbnQgd2lkdGggKi8KKyAgICAgICAgICBGVF9FcnJvciAgICAgICBlcnJvcjI7CisKKworICAgICAgICAgIGlmICggZG9pbmdTZWFjICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsYXN0RXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9HbHlwaF9Gb3JtYXQgKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsgICAgICAvKiBuZXN0ZWQgc2VhYyAqLworICAgICAgICAgIH0KKworICAgICAgICAgIGFjaGFyID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworICAgICAgICAgIGJjaGFyID0gY2YyX3N0YWNrX3BvcEludCggb3BTdGFjayApOworCisgICAgICAgICAgY3VyWSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgIGN1clggPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKworICAgICAgICAgIGVycm9yMiA9IGNmMl9nZXRTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCBhY2hhciwgJmNvbXBvbmVudCApOworICAgICAgICAgIGlmICggZXJyb3IyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvcjI7ICAgICAgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgfQorICAgICAgICAgIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcoIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15V2lkdGggKTsKKyAgICAgICAgICBjZjJfZnJlZVNlYWNDb21wb25lbnQoIGRlY29kZXIsICZjb21wb25lbnQgKTsKKworICAgICAgICAgIGVycm9yMiA9IGNmMl9nZXRTZWFjQ29tcG9uZW50KCBkZWNvZGVyLCBiY2hhciwgJmNvbXBvbmVudCApOworICAgICAgICAgIGlmICggZXJyb3IyICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvcjI7ICAgICAgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgfQorICAgICAgICAgIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcoIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15V2lkdGggKTsKKyAgICAgICAgICBjZjJfZnJlZVNlYWNDb21wb25lbnQoIGRlY29kZXIsICZjb21wb25lbnQgKTsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgIGNhc2UgY2YyX2NtZENOVFJNQVNLOgorICAgICAgY2FzZSBjZjJfY21kSElOVE1BU0s6CisgICAgICAgIC8qIHRoZSBmaW5hbCBcbiBpbiB0aGUgdHJhY2luZyBtZXNzYWdlIGdldHMgYWRkZWQgaW4gICAgICAqLworICAgICAgICAvKiBgY2YyX2hpbnRtYXNrX3JlYWQnICh3aGljaCBhbHNvIHRyYWNlcyB0aGUgbWFzayBieXRlcykgKi8KKyAgICAgICAgRlRfVFJBQ0U0KCggb3AxID09IGNmMl9jbWRDTlRSTUFTSyA/ICIgY250cm1hc2siIDogIiBoaW50bWFzayIgKSk7CisKKyAgICAgICAgLyogbmV2ZXIgYWRkIGhpbnRzIGFmdGVyIHRoZSBtYXNrIGlzIGNvbXB1dGVkICovCisgICAgICAgIGlmICggY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICkgPiAxICAgICYmCisgICAgICAgICAgICAgY2YyX2hpbnRtYXNrX2lzVmFsaWQoICZoaW50TWFzayApICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNCgoICJjZjJfaW50ZXJwVDJDaGFyU3RyaW5nOiBpbnZhbGlkIGhpbnQgbWFza1xuIiApKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGlmIHRoZXJlIGFyZSBhcmd1bWVudHMgb24gdGhlIHN0YWNrLCB0aGVyZSB0aGlzIGlzIGFuICovCisgICAgICAgIC8qIGltcGxpZWQgY2YyX2NtZFZTVEVNSE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGNmMl9kb1N0ZW1zKCBmb250LAorICAgICAgICAgICAgICAgICAgICAgb3BTdGFjaywKKyAgICAgICAgICAgICAgICAgICAgICZ2U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgJmhhdmVXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIDAgKTsKKworICAgICAgICBpZiAoIGRlY29kZXItPndpZHRoX29ubHkgKQorICAgICAgICAgIGdvdG8gZXhpdDsKKworICAgICAgICBpZiAoIG9wMSA9PSBjZjJfY21kSElOVE1BU0sgKQorICAgICAgICB7CisgICAgICAgICAgLyogY29uc3VtZSB0aGUgaGludCBtYXNrIGJ5dGVzIHdoaWNoIGZvbGxvdyB0aGUgb3BlcmF0b3IgKi8KKyAgICAgICAgICBjZjJfaGludG1hc2tfcmVhZCggJmhpbnRNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfc2l6ZSggJmhTdGVtSGludEFycmF5ICkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9hcnJzdGFja19zaXplKCAmdlN0ZW1IaW50QXJyYXkgKSApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qCisgICAgICAgICAgICogQ29uc3VtZSB0aGUgY291bnRlciBtYXNrIGJ5dGVzIHdoaWNoIGZvbGxvdyB0aGUgb3BlcmF0b3I6CisgICAgICAgICAgICogQnVpbGQgYSB0ZW1wb3JhcnkgaGludCBtYXAsIGp1c3QgdG8gcGxhY2UgYW5kIGxvY2sgdGhvc2UKKyAgICAgICAgICAgKiBzdGVtcyBwYXJ0aWNpcGF0aW5nIGluIHRoZSBjb3VudGVyIG1hc2suICBUaGVzZSBhcmUgbW9zdAorICAgICAgICAgICAqIGxpa2VseSB0aGUgZG9taW5hbnQgaHN0ZW1zLCBhbmQgYXJlIGdyb3VwZWQgdG9nZXRoZXIgaW4gYQorICAgICAgICAgICAqIGZldyBjb3VudGVyIGdyb3Vwcywgbm90IG5lY2Vzc2FyaWx5IGluIGNvcnJlc3BvbmRlbmNlCisgICAgICAgICAgICogd2l0aCB0aGUgaGludCBncm91cHMuICBUaGlzIHJlZHVjZXMgdGhlIGNoYW5jZXMgb2YKKyAgICAgICAgICAgKiBjb25mbGljdHMgYmV0d2VlbiBoc3RlbXMgdGhhdCBhcmUgaW5pdGlhbGx5IHBsYWNlZCBpbgorICAgICAgICAgICAqIHNlcGFyYXRlIGhpbnQgZ3JvdXBzIGFuZCB0aGVuIGJyb3VnaHQgdG9nZXRoZXIuICBUaGUKKyAgICAgICAgICAgKiBwb3NpdGlvbnMgYXJlIGNvcGllZCBiYWNrIHRvIGBoU3RlbUhpbnRBcnJheScsIHNvIHdlIGNhbgorICAgICAgICAgICAqIGRpc2NhcmQgYGNvdW50ZXJNYXNrJyBhbmQgYGNvdW50ZXJIaW50TWFwJy4KKyAgICAgICAgICAgKgorICAgICAgICAgICAqLworICAgICAgICAgIENGMl9IaW50TWFwUmVjICAgY291bnRlckhpbnRNYXA7CisgICAgICAgICAgQ0YyX0hpbnRNYXNrUmVjICBjb3VudGVyTWFzazsKKworCisgICAgICAgICAgY2YyX2hpbnRtYXBfaW5pdCggJmNvdW50ZXJIaW50TWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoUGF0aC5pbml0aWFsSGludE1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ2x5cGhQYXRoLmhpbnRNb3ZlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVkgKTsKKyAgICAgICAgICBjZjJfaGludG1hc2tfaW5pdCggJmNvdW50ZXJNYXNrLCBlcnJvciApOworCisgICAgICAgICAgY2YyX2hpbnRtYXNrX3JlYWQoICZjb3VudGVyTWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YyX2FycnN0YWNrX3NpemUoICZoU3RlbUhpbnRBcnJheSApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZjJfYXJyc3RhY2tfc2l6ZSggJnZTdGVtSGludEFycmF5ICkgKTsKKyAgICAgICAgICBjZjJfaGludG1hcF9idWlsZCggJmNvdW50ZXJIaW50TWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaFN0ZW1IaW50QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2U3RlbUhpbnRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50ZXJNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGNmMl9jbWRSTU9WRVRPOgorICAgICAgICBGVF9UUkFDRTQoKCAiIHJtb3ZldG9cbiIgKSk7CisKKyAgICAgICAgaWYgKCBmb250LT5pc1QxICYmICFkZWNvZGVyLT5mbGV4X3N0YXRlICYmICFoYXZlV2lkdGggKQorICAgICAgICAgIEZUX0VSUk9SKCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmcgKFR5cGUgMSBtb2RlKToiCisgICAgICAgICAgICAgICAgICAgICAiIE5vIHdpZHRoLiBVc2UgaHNidy9zYncgYXMgZmlyc3Qgb3BcbiIgKSk7CisKKyAgICAgICAgaWYgKCBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA+IDIgJiYgIWhhdmVXaWR0aCApCisgICAgICAgICAgKndpZHRoID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9taW5hbFdpZHRoWCApOworCisgICAgICAgIC8qIHdpZHRoIGlzIGRlZmluZWQgb3IgZGVmYXVsdCBhZnRlciB0aGlzICovCisgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CisKKyAgICAgICAgaWYgKCBkZWNvZGVyLT53aWR0aF9vbmx5ICkKKyAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgY3VyWSA9IEFERF9JTlQzMiggY3VyWSwgY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICkgKTsKKyAgICAgICAgY3VyWCA9IEFERF9JTlQzMiggY3VyWCwgY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICkgKTsKKworICAgICAgICBpZiAoICFkZWNvZGVyLT5mbGV4X3N0YXRlICkKKyAgICAgICAgICBjZjJfZ2x5cGhwYXRoX21vdmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOworCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGNmMl9jbWRITU9WRVRPOgorICAgICAgICBGVF9UUkFDRTQoKCAiIGhtb3ZldG9cbiIgKSk7CisKKyAgICAgICAgaWYgKCBmb250LT5pc1QxICYmICFkZWNvZGVyLT5mbGV4X3N0YXRlICYmICFoYXZlV2lkdGggKQorICAgICAgICAgIEZUX0VSUk9SKCggImNmMl9pbnRlcnBUMkNoYXJTdHJpbmcgKFR5cGUgMSBtb2RlKToiCisgICAgICAgICAgICAgICAgICAgICAiIE5vIHdpZHRoLiBVc2UgaHNidy9zYncgYXMgZmlyc3Qgb3BcbiIgKSk7CisKKyAgICAgICAgaWYgKCBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKSA+IDEgJiYgIWhhdmVXaWR0aCApCisgICAgICAgICAgKndpZHRoID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgMCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9taW5hbFdpZHRoWCApOworCisgICAgICAgIC8qIHdpZHRoIGlzIGRlZmluZWQgb3IgZGVmYXVsdCBhZnRlciB0aGlzICovCisgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CisKKyAgICAgICAgaWYgKCBkZWNvZGVyLT53aWR0aF9vbmx5ICkKKyAgICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICAgICAgY3VyWCA9IEFERF9JTlQzMiggY3VyWCwgY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICkgKTsKKworICAgICAgICBpZiAoICFkZWNvZGVyLT5mbGV4X3N0YXRlICkKKyAgICAgICAgICBjZjJfZ2x5cGhwYXRoX21vdmVUbyggJmdseXBoUGF0aCwgY3VyWCwgY3VyWSApOworCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGNmMl9jbWRSTElORUNVUlZFOgorICAgICAgICB7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50ID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisgICAgICAgICAgQ0YyX1VJbnQgIGlkeCAgID0gMDsKKworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBybGluZWN1cnZlXG4iICkpOworCisgICAgICAgICAgd2hpbGUgKCBpZHggKyA2IDwgY291bnQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGN1clggPSBBRERfSU5UMzIoIGN1clgsIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCArIDAgKSApOworICAgICAgICAgICAgY3VyWSA9IEFERF9JTlQzMiggY3VyWSwgY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4ICsgMSApICk7CisKKyAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfbGluZVRvKCAmZ2x5cGhQYXRoLCBjdXJYLCBjdXJZICk7CisgICAgICAgICAgICBpZHggKz0gMjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB3aGlsZSAoIGlkeCA8IGNvdW50ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHgxLCB5MSwgeDIsIHkyLCB4MywgeTM7CisKKworICAgICAgICAgICAgeDEgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAwICksIGN1clggKTsKKyAgICAgICAgICAgIHkxID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMSApLCBjdXJZICk7CisgICAgICAgICAgICB4MiA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDIgKSwgeDEgKTsKKyAgICAgICAgICAgIHkyID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMyApLCB5MSApOworICAgICAgICAgICAgeDMgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyA0ICksIHgyICk7CisgICAgICAgICAgICB5MyA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDUgKSwgeTIgKTsKKworICAgICAgICAgICAgY2YyX2dseXBocGF0aF9jdXJ2ZVRvKCAmZ2x5cGhQYXRoLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzICk7CisKKyAgICAgICAgICAgIGN1clggID0geDM7CisgICAgICAgICAgICBjdXJZICA9IHkzOworICAgICAgICAgICAgaWR4ICArPSA2OworICAgICAgICAgIH0KKworICAgICAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworICAgICAgICB9CisgICAgICAgIGNvbnRpbnVlOyAvKiBubyBuZWVkIHRvIGNsZWFyIHN0YWNrIGFnYWluICovCisKKyAgICAgIGNhc2UgY2YyX2NtZFZWQ1VSVkVUTzoKKyAgICAgICAgeworICAgICAgICAgIENGMl9VSW50ICBjb3VudCwgY291bnQxID0gY2YyX3N0YWNrX2NvdW50KCBvcFN0YWNrICk7CisgICAgICAgICAgQ0YyX1VJbnQgIGlkeCA9IDA7CisKKworICAgICAgICAgIC8qIGlmIGBjZjJfc3RhY2tfY291bnQnIGlzbid0IG9mIHRoZSBmb3JtIDRuIG9yIDRuKzEsICovCisgICAgICAgICAgLyogd2UgZW5mb3JjZSBpdCBieSBjbGVhcmluZyB0aGUgc2Vjb25kIGJpdCAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAoYW5kIHNvcnRpbmcgdGhlIHN0YWNrIGluZGV4aW5nIHRvIHN1aXQpICAgICAgICAgICAqLworICAgICAgICAgIGNvdW50ID0gY291bnQxICYgfjJVOworICAgICAgICAgIGlkeCAgKz0gY291bnQxIC0gY291bnQ7CisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiIHZ2Y3VydmV0b1xuIiApKTsKKworICAgICAgICAgIHdoaWxlICggaWR4IDwgY291bnQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIENGMl9GaXhlZCAgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MzsKKworCisgICAgICAgICAgICBpZiAoICggY291bnQgLSBpZHggKSAmIDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4MSA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCApLCBjdXJYICk7CisKKyAgICAgICAgICAgICAgaWR4Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHgxID0gY3VyWDsKKworICAgICAgICAgICAgeTEgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAwICksIGN1clkgKTsKKyAgICAgICAgICAgIHgyID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMSApLCB4MSApOworICAgICAgICAgICAgeTIgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAyICksIHkxICk7CisgICAgICAgICAgICB4MyA9IHgyOworICAgICAgICAgICAgeTMgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAzICksIHkyICk7CisKKyAgICAgICAgICAgIGNmMl9nbHlwaHBhdGhfY3VydmVUbyggJmdseXBoUGF0aCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MyApOworCisgICAgICAgICAgICBjdXJYICA9IHgzOworICAgICAgICAgICAgY3VyWSAgPSB5MzsKKyAgICAgICAgICAgIGlkeCAgKz0gNDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBjZjJfc3RhY2tfY2xlYXIoIG9wU3RhY2sgKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsgLyogbm8gbmVlZCB0byBjbGVhciBzdGFjayBhZ2FpbiAqLworCisgICAgICBjYXNlIGNmMl9jbWRISENVUlZFVE86CisgICAgICAgIHsKKyAgICAgICAgICBDRjJfVUludCAgY291bnQsIGNvdW50MSA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworICAgICAgICAgIENGMl9VSW50ICBpZHggPSAwOworCisKKyAgICAgICAgICAvKiBpZiBgY2YyX3N0YWNrX2NvdW50JyBpc24ndCBvZiB0aGUgZm9ybSA0biBvciA0bisxLCAqLworICAgICAgICAgIC8qIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlIHNlY29uZCBiaXQgICAgICAgICAgICovCisgICAgICAgICAgLyogKGFuZCBzb3J0aW5nIHRoZSBzdGFjayBpbmRleGluZyB0byBzdWl0KSAgICAgICAgICAgKi8KKyAgICAgICAgICBjb3VudCA9IGNvdW50MSAmIH4yVTsKKyAgICAgICAgICBpZHggICs9IGNvdW50MSAtIGNvdW50OworCisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBoaGN1cnZldG9cbiIgKSk7CisKKyAgICAgICAgICB3aGlsZSAoIGlkeCA8IGNvdW50ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBDRjJfRml4ZWQgIHgxLCB5MSwgeDIsIHkyLCB4MywgeTM7CisKKworICAgICAgICAgICAgaWYgKCAoIGNvdW50IC0gaWR4ICkgJiAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgeTEgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKSwgY3VyWSApOworCisgICAgICAgICAgICAgIGlkeCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB5MSA9IGN1clk7CisKKyAgICAgICAgICAgIHgxID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMCApLCBjdXJYICk7CisgICAgICAgICAgICB4MiA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDEgKSwgeDEgKTsKKyAgICAgICAgICAgIHkyID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMiApLCB5MSApOworICAgICAgICAgICAgeDMgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAzICksIHgyICk7CisgICAgICAgICAgICB5MyA9IHkyOworCisgICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oICZnbHlwaFBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMgKTsKKworICAgICAgICAgICAgY3VyWCAgPSB4MzsKKyAgICAgICAgICAgIGN1clkgID0geTM7CisgICAgICAgICAgICBpZHggICs9IDQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7IC8qIG5vIG5lZWQgdG8gY2xlYXIgc3RhY2sgYWdhaW4gKi8KKworICAgICAgY2FzZSBjZjJfY21kVkhDVVJWRVRPOgorICAgICAgY2FzZSBjZjJfY21kSFZDVVJWRVRPOgorICAgICAgICB7CisgICAgICAgICAgQ0YyX1VJbnQgIGNvdW50LCBjb3VudDEgPSBjZjJfc3RhY2tfY291bnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICBDRjJfVUludCAgaWR4ID0gMDsKKworICAgICAgICAgIEZUX0Jvb2wgIGFsdGVybmF0ZSA9IEZUX0JPT0woIG9wMSA9PSBjZjJfY21kSFZDVVJWRVRPICk7CisKKworICAgICAgICAgIC8qIGlmIGBjZjJfc3RhY2tfY291bnQnIGlzbid0IG9mIHRoZSBmb3JtIDhuLCA4bisxLCAqLworICAgICAgICAgIC8qIDhuKzQsIG9yIDhuKzUsIHdlIGVuZm9yY2UgaXQgYnkgY2xlYXJpbmcgdGhlICAgICAqLworICAgICAgICAgIC8qIHNlY29uZCBiaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qIChhbmQgc29ydGluZyB0aGUgc3RhY2sgaW5kZXhpbmcgdG8gc3VpdCkgICAgICAgICAqLworICAgICAgICAgIGNvdW50ID0gY291bnQxICYgfjJVOworICAgICAgICAgIGlkeCAgKz0gY291bnQxIC0gY291bnQ7CisKKyAgICAgICAgICBGVF9UUkFDRTQoKCBhbHRlcm5hdGUgPyAiIGh2Y3VydmV0b1xuIiA6ICIgdmhjdXJ2ZXRvXG4iICkpOworCisgICAgICAgICAgd2hpbGUgKCBpZHggPCBjb3VudCApCisgICAgICAgICAgeworICAgICAgICAgICAgQ0YyX0ZpeGVkIHgxLCB4MiwgeDMsIHkxLCB5MiwgeTM7CisKKworICAgICAgICAgICAgaWYgKCBhbHRlcm5hdGUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB4MSA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDAgKSwgY3VyWCApOworICAgICAgICAgICAgICB5MSA9IGN1clk7CisgICAgICAgICAgICAgIHgyID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMSApLCB4MSApOworICAgICAgICAgICAgICB5MiA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDIgKSwgeTEgKTsKKyAgICAgICAgICAgICAgeTMgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAzICksIHkyICk7CisKKyAgICAgICAgICAgICAgaWYgKCBjb3VudCAtIGlkeCA9PSA1ICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHgzID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgNCApLCB4MiApOworCisgICAgICAgICAgICAgICAgaWR4Kys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHgzID0geDI7CisKKyAgICAgICAgICAgICAgYWx0ZXJuYXRlID0gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHgxID0gY3VyWDsKKyAgICAgICAgICAgICAgeTEgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAwICksIGN1clkgKTsKKyAgICAgICAgICAgICAgeDIgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyAxICksIHgxICk7CisgICAgICAgICAgICAgIHkyID0gQUREX0lOVDMyKCBjZjJfc3RhY2tfZ2V0UmVhbCggb3BTdGFjaywgaWR4ICsgMiApLCB5MSApOworICAgICAgICAgICAgICB4MyA9IEFERF9JTlQzMiggY2YyX3N0YWNrX2dldFJlYWwoIG9wU3RhY2ssIGlkeCArIDMgKSwgeDIgKTsKKworICAgICAgICAgICAgICBpZiAoIGNvdW50IC0gaWR4ID09IDUgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeTMgPSBBRERfSU5UMzIoIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBpZHggKyA0ICksIHkyICk7CisKKyAgICAgICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeTMgPSB5MjsKKworICAgICAgICAgICAgICBhbHRlcm5hdGUgPSBUUlVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjZjJfZ2x5cGhwYXRoX2N1cnZlVG8oICZnbHlwaFBhdGgsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMgKTsKKworICAgICAgICAgICAgY3VyWCAgPSB4MzsKKyAgICAgICAgICAgIGN1clkgID0geTM7CisgICAgICAgICAgICBpZHggICs9IDQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgY2YyX3N0YWNrX2NsZWFyKCBvcFN0YWNrICk7CisgICAgICAgIH0KKyAgICAgICAgY29udGludWU7ICAgICAvKiBubyBuZWVkIHRvIGNsZWFyIHN0YWNrIGFnYWluICovCisKKyAgICAgIGNhc2UgY2YyX2NtZEVYVEVOREVETk1CUjoKKyAgICAgICAgeworICAgICAgICAgIENGMl9JbnQgIHY7CisKKyAgICAgICAgICBDRjJfSW50ICBieXRlMSA9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKKyAgICAgICAgICBDRjJfSW50ICBieXRlMiA9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKKworCisgICAgICAgICAgdiA9IChGVF9TaG9ydCkoICggYnl0ZTEgPDwgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlMiAgICAgICAgKTsKKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgJWQiLCB2ICkpOworCisgICAgICAgICAgY2YyX3N0YWNrX3B1c2hJbnQoIG9wU3RhY2ssIHYgKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgLyogbnVtYmVycyAqLworICAgICAgICB7CisgICAgICAgICAgaWYgKCAvKiBvcDEgPj0gMzIgJiYgKi8gb3AxIDw9IDI0NiApCisgICAgICAgICAgeworICAgICAgICAgICAgQ0YyX0ludCAgdjsKKworCisgICAgICAgICAgICB2ID0gb3AxIC0gMTM5OworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKKworICAgICAgICAgICAgLyogLTEwNyAuLiAxMDcgKi8KKyAgICAgICAgICAgIGNmMl9zdGFja19wdXNoSW50KCBvcFN0YWNrLCB2ICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZWxzZSBpZiAoIC8qIG9wMSA+PSAyNDcgJiYgKi8gb3AxIDw9IDI1MCApCisgICAgICAgICAgeworICAgICAgICAgICAgQ0YyX0ludCAgdjsKKworCisgICAgICAgICAgICB2ICA9IG9wMTsKKyAgICAgICAgICAgIHYgLT0gMjQ3OworICAgICAgICAgICAgdiAqPSAyNTY7CisgICAgICAgICAgICB2ICs9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKKyAgICAgICAgICAgIHYgKz0gMTA4OworCisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKKworICAgICAgICAgICAgLyogMTA4IC4uIDExMzEgKi8KKyAgICAgICAgICAgIGNmMl9zdGFja19wdXNoSW50KCBvcFN0YWNrLCB2ICk7CisgICAgICAgICAgfQorCisgICAgICAgICAgZWxzZSBpZiAoIC8qIG9wMSA+PSAyNTEgJiYgKi8gb3AxIDw9IDI1NCApCisgICAgICAgICAgeworICAgICAgICAgICAgQ0YyX0ludCAgdjsKKworCisgICAgICAgICAgICB2ICA9IG9wMTsKKyAgICAgICAgICAgIHYgLT0gMjUxOworICAgICAgICAgICAgdiAqPSAyNTY7CisgICAgICAgICAgICB2ICs9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKKyAgICAgICAgICAgIHYgID0gLXYgLSAxMDg7CisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgJWQiLCB2ICkpOworCisgICAgICAgICAgICAvKiAtMTEzMSAuLiAtMTA4ICovCisgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgdiApOworICAgICAgICAgIH0KKworICAgICAgICAgIGVsc2UgLyogb3AxID09IDI1NSAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIENGMl9GaXhlZCAgdjsKKworICAgICAgICAgICAgRlRfVUludDMyICBieXRlMSA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlMiA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlMyA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlNCA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworCisKKyAgICAgICAgICAgIHYgPSAoQ0YyX0ZpeGVkKSggKCBieXRlMSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBieXRlMiA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBieXRlMyA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlNCAgICAgICAgICk7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGb3IgVHlwZSAxOgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEFjY29yZGluZyB0byB0aGUgc3BlY2lmaWNhdGlvbiwgdmFsdWVzID4gMzIwMDAgb3IgPCAtMzIwMDAKKyAgICAgICAgICAgICAqIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBgZGl2JyBvcGVyYXRvciB0byBtYWtlIHRoZSByZXN1bHQgYmUKKyAgICAgICAgICAgICAqIGluIHRoZSByYW5nZSBbLTMyMDAwOzMyMDAwXS4gIFdlIGV4cGVjdCB0aGF0IHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAqIGFyZ3VtZW50IG9mIGBkaXYnIGlzIG5vdCBhIGxhcmdlIG51bWJlci4gIEFkZGl0aW9uYWxseSwgd2UKKyAgICAgICAgICAgICAqIGRvbid0IGhhbmRsZSBzdHVmZiBsaWtlIGA8bGFyZ2UxPiA8bGFyZ2UyPiA8bnVtPiBkaXYgPG51bT4KKyAgICAgICAgICAgICAqIGRpdicgb3IgPGxhcmdlMT4gPGxhcmdlMj4gPG51bT4gZGl2IGRpdicuICBUaGlzIGlzIHByb2JhYmx5CisgICAgICAgICAgICAgKiBub3QgYWxsb3dlZCBhbnl3YXkuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogPGxhcmdlPiA8bnVtPiA8bnVtPisgZGl2IGlzIG5vdCBjaGVja2VkIGJ1dCBzaG91bGQgbm90IGJlCisgICAgICAgICAgICAgKiBhbGxvd2VkIGFzIHRoZSBsYXJnZSB2YWx1ZSByZW1haW5zIHVudG91Y2hlZC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggZm9udC0+aXNUMSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICggdiA+IDMyMDAwIHx8IHYgPCAtMzIwMDAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCBsYXJnZV9pbnQgKQorICAgICAgICAgICAgICAgICAgRlRfRVJST1IoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZyAoVHlwZSAxIG1vZGUpOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBubyBgZGl2JyBhZnRlciBsYXJnZSBpbnRlZ2VyXG4iICkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGxhcmdlX2ludCA9IFRSVUU7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKKworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgKENGMl9JbnQpdiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICUuNWZGIiwgdiAvIDY1NTM2LjAgKSk7CisKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgdiApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250aW51ZTsgICAvKiBkb24ndCBjbGVhciBzdGFjayAqLworCisgICAgICB9IC8qIGVuZCBvZiBzd2l0Y2ggc3RhdGVtZW50IGNoZWNraW5nIGBvcDEnICovCisKKyAgICAgIGNmMl9zdGFja19jbGVhciggb3BTdGFjayApOworCisgICAgfSAvKiBlbmQgb2YgbWFpbiBpbnRlcnByZXRlciBsb29wICovCisKKyAgICAvKiB3ZSBnZXQgaGVyZSBpZiB0aGUgY2hhcnN0cmluZyBlbmRzIHdpdGhvdXQgY2YyX2NtZEVORENIQVIgKi8KKyAgICBGVF9UUkFDRTQoKCAiY2YyX2ludGVycFQyQ2hhclN0cmluZzoiCisgICAgICAgICAgICAgICAgIiAgY2hhcnN0cmluZyBlbmRzIHdpdGhvdXQgRU5EQ0hBUlxuIiApKTsKKworICBleGl0OgorICAgIC8qIGNoZWNrIHdoZXRoZXIgbGFzdCBlcnJvciBzZWVuIGlzIGFsc28gdGhlIGZpcnN0IG9uZSAqLworICAgIGNmMl9zZXRFcnJvciggZXJyb3IsIGxhc3RFcnJvciApOworCisgICAgaWYgKCAqZXJyb3IgKQorICAgICAgRlRfVFJBQ0U0KCggImNoYXJzdHJpbmcgZXJyb3IgJWRcbiIsICplcnJvciApKTsKKworICAgIC8qIGZyZWUgcmVzb3VyY2VzIGZyb20gb2JqZWN0cyB3ZSd2ZSB1c2VkICovCisgICAgY2YyX2dseXBocGF0aF9maW5hbGl6ZSggJmdseXBoUGF0aCApOworICAgIGNmMl9hcnJzdGFja19maW5hbGl6ZSggJnZTdGVtSGludEFycmF5ICk7CisgICAgY2YyX2FycnN0YWNrX2ZpbmFsaXplKCAmaFN0ZW1IaW50QXJyYXkgKTsKKyAgICBjZjJfYXJyc3RhY2tfZmluYWxpemUoICZzdWJyU3RhY2sgKTsKKyAgICBjZjJfc3RhY2tfZnJlZSggb3BTdGFjayApOworCisgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKKworICAgIHJldHVybjsKKyAgfQorCisKKy8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJpbnRycC5oIGIvc3JjL3BzYXV4L3BzaW50cnAuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMmludHJwLmgKcmVuYW1lIHRvIHNyYy9wc2F1eC9wc2ludHJwLmgKaW5kZXggZWMwMzBlOC4uNDc5MGFhYSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJpbnRycC5oCisrKyBiL3NyYy9wc2F1eC9wc2ludHJwLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZjJmb250LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNpbnRycC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFkb2JlJ3MgQ0ZGIEludGVycHJldGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzYsMTIgKzM2LDEyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgQ0YySU5UUlBfSF8KLSNkZWZpbmUgQ0YySU5UUlBfSF8KKyNpZm5kZWYgUFNJTlRSUF9IXworI2RlZmluZSBQU0lOVFJQX0hfCiAKIAotI2luY2x1ZGUgImNmMmZ0LmgiCi0jaW5jbHVkZSAiY2YyaGludHMuaCIKKyNpbmNsdWRlICJwc2Z0LmgiCisjaW5jbHVkZSAicHNoaW50cy5oIgogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtNzcsNyArNzcsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBDRjJJTlRSUF9IXyAqLworI2VuZGlmIC8qIFBTSU5UUlBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc29ianMuYyBiL3NyYy9wc2F1eC9wc29ianMuYwppbmRleCBkMThlODIxLi5mNTRiYzdlIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNvYmpzLmMKKysrIGIvc3JjL3BzYXV4L3Bzb2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIFBvc3RTY3JpcHQgZm9udHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMCwxMSArMjAsMTMgQEAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfQVVYX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAorI2luY2x1ZGUgRlRfRFJJVkVSX0gKIAogI2luY2x1ZGUgInBzb2Jqcy5oIgogI2luY2x1ZGUgInBzY29udi5oIgogCiAjaW5jbHVkZSAicHNhdXhlcnIuaCIKKyNpbmNsdWRlICJwc2F1eG1vZC5oIgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNTUxLDcgKzE1NTMsNyBAQAogICAgICAgYnVpbGRlci0+Y3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKICAgICAgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggbG9hZGVyICk7CiAKLSAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSBzaXplLT5pbnRlcm5hbDsKKyAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSBzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGE7CiAgICAgICBidWlsZGVyLT5oaW50c19mdW5jcyAgID0gTlVMTDsKIAogICAgICAgaWYgKCBoaW50aW5nICkKQEAgLTE3MTgsNiArMTcyMCw1ODEgQEAKICAgICBmaXJzdCA9IG91dGxpbmUtPm5fY29udG91cnMgPD0gMQogICAgICAgICAgICAgPyAwIDogb3V0bGluZS0+Y29udG91cnNbb3V0bGluZS0+bl9jb250b3VycyAtIDJdICsgMTsKIAorICAgIC8qIGluIG1hbGZvcm1lZCBmb250cyBpdCBjYW4gaGFwcGVuIHRoYXQgYSBjb250b3VyIHdhcyBzdGFydGVkICovCisgICAgLyogYnV0IG5vIHBvaW50cyB3ZXJlIGFkZGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIG91dGxpbmUtPm5fY29udG91cnMgJiYgZmlyc3QgPT0gb3V0bGluZS0+bl9wb2ludHMgKQorICAgIHsKKyAgICAgIG91dGxpbmUtPm5fY29udG91cnMtLTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBXZSBtdXN0IG5vdCBpbmNsdWRlIHRoZSBsYXN0IHBvaW50IGluIHRoZSBwYXRoIGlmIGl0ICovCisgICAgLyogaXMgbG9jYXRlZCBvbiB0aGUgZmlyc3QgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggb3V0bGluZS0+bl9wb2ludHMgPiAxICkKKyAgICB7CisgICAgICBGVF9WZWN0b3IqICBwMSAgICAgID0gb3V0bGluZS0+cG9pbnRzICsgZmlyc3Q7CisgICAgICBGVF9WZWN0b3IqICBwMiAgICAgID0gb3V0bGluZS0+cG9pbnRzICsgb3V0bGluZS0+bl9wb2ludHMgLSAxOworICAgICAgRlRfQnl0ZSogICAgY29udHJvbCA9IChGVF9CeXRlKilvdXRsaW5lLT50YWdzICsgb3V0bGluZS0+bl9wb2ludHMgLSAxOworCisKKyAgICAgIC8qIGBkZWxldGUnIGxhc3QgcG9pbnQgb25seSBpZiBpdCBjb2luY2lkZXMgd2l0aCB0aGUgZmlyc3QgKi8KKyAgICAgIC8qIHBvaW50IGFuZCBpdCBpcyBub3QgYSBjb250cm9sIHBvaW50ICh3aGljaCBjYW4gaGFwcGVuKS4gKi8KKyAgICAgIGlmICggcDEtPnggPT0gcDItPnggJiYgcDEtPnkgPT0gcDItPnkgKQorICAgICAgICBpZiAoICpjb250cm9sID09IEZUX0NVUlZFX1RBR19PTiApCisgICAgICAgICAgb3V0bGluZS0+bl9wb2ludHMtLTsKKyAgICB9CisKKyAgICBpZiAoIG91dGxpbmUtPm5fY29udG91cnMgPiAwICkKKyAgICB7CisgICAgICAvKiBEb24ndCBhZGQgY29udG91cnMgb25seSBjb25zaXN0aW5nIG9mIG9uZSBwb2ludCwgaS5lLiwgICovCisgICAgICAvKiBjaGVjayB3aGV0aGVyIHRoZSBmaXJzdCBhbmQgdGhlIGxhc3QgcG9pbnQgaXMgdGhlIHNhbWUuICovCisgICAgICBpZiAoIGZpcnN0ID09IG91dGxpbmUtPm5fcG9pbnRzIC0gMSApCisgICAgICB7CisgICAgICAgIG91dGxpbmUtPm5fY29udG91cnMtLTsKKyAgICAgICAgb3V0bGluZS0+bl9wb2ludHMtLTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgb3V0bGluZS0+Y29udG91cnNbb3V0bGluZS0+bl9jb250b3VycyAtIDFdID0KKyAgICAgICAgICAoc2hvcnQpKCBvdXRsaW5lLT5uX3BvaW50cyAtIDEgKTsKKyAgICB9CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIENGRiBCVUlMREVSICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2ZmX2J1aWxkZXJfaW5pdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgIDo6IFRoZSBjdXJyZW50IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGludGluZyA6OiBXaGV0aGVyIGhpbnRpbmcgaXMgYWN0aXZlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfYnVpbGRlcl9pbml0KCBDRkZfQnVpbGRlciogICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICBDRkZfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgaGludGluZyApCisgIHsKKyAgICBidWlsZGVyLT5wYXRoX2JlZ3VuICA9IDA7CisgICAgYnVpbGRlci0+bG9hZF9wb2ludHMgPSAxOworCisgICAgYnVpbGRlci0+ZmFjZSAgID0gZmFjZTsKKyAgICBidWlsZGVyLT5nbHlwaCAgPSBnbHlwaDsKKyAgICBidWlsZGVyLT5tZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKworICAgIGlmICggZ2x5cGggKQorICAgIHsKKyAgICAgIEZUX0dseXBoTG9hZGVyICBsb2FkZXIgPSBnbHlwaC0+cm9vdC5pbnRlcm5hbC0+bG9hZGVyOworCisKKyAgICAgIGJ1aWxkZXItPmxvYWRlciAgPSBsb2FkZXI7CisgICAgICBidWlsZGVyLT5iYXNlICAgID0gJmxvYWRlci0+YmFzZS5vdXRsaW5lOworICAgICAgYnVpbGRlci0+Y3VycmVudCA9ICZsb2FkZXItPmN1cnJlbnQub3V0bGluZTsKKyAgICAgIEZUX0dseXBoTG9hZGVyX1Jld2luZCggbG9hZGVyICk7CisKKyAgICAgIGJ1aWxkZXItPmhpbnRzX2dsb2JhbHMgPSBOVUxMOworICAgICAgYnVpbGRlci0+aGludHNfZnVuY3MgICA9IE5VTEw7CisKKyAgICAgIGlmICggaGludGluZyAmJiBzaXplICkKKyAgICAgIHsKKyAgICAgICAgRlRfU2l6ZSAgICAgICBmdHNpemUgICA9IEZUX1NJWkUoIHNpemUgKTsKKyAgICAgICAgQ0ZGX0ludGVybmFsICBpbnRlcm5hbCA9IChDRkZfSW50ZXJuYWwpZnRzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGE7CisKKyAgICAgICAgaWYgKCBpbnRlcm5hbCApCisgICAgICAgIHsKKyAgICAgICAgICBidWlsZGVyLT5oaW50c19nbG9iYWxzID0gKHZvaWQgKilpbnRlcm5hbC0+dG9wZm9udDsKKyAgICAgICAgICBidWlsZGVyLT5oaW50c19mdW5jcyAgID0gZ2x5cGgtPnJvb3QuaW50ZXJuYWwtPmdseXBoX2hpbnRzOworICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgYnVpbGRlci0+cG9zX3ggPSAwOworICAgIGJ1aWxkZXItPnBvc195ID0gMDsKKworICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gMDsKKyAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSA9IDA7CisgICAgYnVpbGRlci0+YWR2YW5jZS54ICAgICAgPSAwOworICAgIGJ1aWxkZXItPmFkdmFuY2UueSAgICAgID0gMDsKKworICAgIGJ1aWxkZXItPmZ1bmNzID0gY2ZmX2J1aWxkZXJfZnVuY3M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNmZl9idWlsZGVyX2RvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIGdseXBoIGJ1aWxkZXIuICBJdHMgY29udGVudHMgY2FuIHN0aWxsIGJlIHVzZWQgICAqLworICAvKiAgICBhZnRlciB0aGUgY2FsbCwgYnV0IHRoZSBmdW5jdGlvbiBzYXZlcyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gICAgICAgKi8KKyAgLyogICAgd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gZmluYWxpemUuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfYnVpbGRlcl9kb25lKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIgKQorICB7CisgICAgQ0ZGX0dseXBoU2xvdCAgZ2x5cGggPSBidWlsZGVyLT5nbHlwaDsKKworCisgICAgaWYgKCBnbHlwaCApCisgICAgICBnbHlwaC0+cm9vdC5vdXRsaW5lID0gKmJ1aWxkZXItPmJhc2U7CisgIH0KKworCisgIC8qIGNoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBgY291bnQnIG1vcmUgcG9pbnRzICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfY2hlY2tfcG9pbnRzKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICAgY291bnQgKQorICB7CisgICAgcmV0dXJuIEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggYnVpbGRlci0+bG9hZGVyLCBjb3VudCwgMCApOworICB9CisKKworICAvKiBhZGQgYSBuZXcgcG9pbnQsIGRvIG5vdCBjaGVjayBzcGFjZSAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUgICAgICAgZmxhZyApCisgIHsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9IGJ1aWxkZXItPmN1cnJlbnQ7CisKKworICAgIGlmICggYnVpbGRlci0+bG9hZF9wb2ludHMgKQorICAgIHsKKyAgICAgIEZUX1ZlY3RvciogIHBvaW50ICAgPSBvdXRsaW5lLT5wb2ludHMgKyBvdXRsaW5lLT5uX3BvaW50czsKKyAgICAgIEZUX0J5dGUqICAgIGNvbnRyb2wgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFncyArIG91dGxpbmUtPm5fcG9pbnRzOworCisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgICAgUFNfRHJpdmVyICBkcml2ZXIgICA9IChQU19Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGJ1aWxkZXItPmZhY2UgKTsKKworCisgICAgICBpZiAoIGRyaXZlci0+aGludGluZ19lbmdpbmUgPT0gRlRfSElOVElOR19GUkVFVFlQRSApCisgICAgICB7CisgICAgICAgIHBvaW50LT54ID0geCA+PiAxNjsKKyAgICAgICAgcG9pbnQtPnkgPSB5ID4+IDE2OworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisgICAgICAgIC8qIGNmMl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzIHVzZXMgMTYuMTYgY29vcmRpbmF0ZXMgKi8KKyAgICAgICAgcG9pbnQtPnggPSB4ID4+IDEwOworICAgICAgICBwb2ludC0+eSA9IHkgPj4gMTA7CisgICAgICB9CisgICAgICAqY29udHJvbCA9IChGVF9CeXRlKSggZmxhZyA/IEZUX0NVUlZFX1RBR19PTiA6IEZUX0NVUlZFX1RBR19DVUJJQyApOworICAgIH0KKworICAgIG91dGxpbmUtPm5fcG9pbnRzKys7CisgIH0KKworCisgIC8qIGNoZWNrIHNwYWNlIGZvciBhIG5ldyBvbi1jdXJ2ZSBwb2ludCwgdGhlbiBhZGQgaXQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9idWlsZGVyX2FkZF9wb2ludDEoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworCisKKyAgICBlcnJvciA9IGNmZl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDEgKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyogY2hlY2sgc3BhY2UgZm9yIGEgbmV3IGNvbnRvdXIsIHRoZW4gYWRkIGl0ICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBjZmZfYnVpbGRlcl9hZGRfY29udG91ciggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICkKKyAgeworICAgIEZUX091dGxpbmUqICBvdXRsaW5lID0gYnVpbGRlci0+Y3VycmVudDsKKyAgICBGVF9FcnJvciAgICAgZXJyb3I7CisKKworICAgIGlmICggIWJ1aWxkZXItPmxvYWRfcG9pbnRzICkKKyAgICB7CisgICAgICBvdXRsaW5lLT5uX2NvbnRvdXJzKys7CisgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgIH0KKworICAgIGVycm9yID0gRlRfR0xZUEhMT0FERVJfQ0hFQ0tfUE9JTlRTKCBidWlsZGVyLT5sb2FkZXIsIDAsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCisgICAgICAgIG91dGxpbmUtPmNvbnRvdXJzW291dGxpbmUtPm5fY29udG91cnMgLSAxXSA9CisgICAgICAgICAgKHNob3J0KSggb3V0bGluZS0+bl9wb2ludHMgLSAxICk7CisKKyAgICAgIG91dGxpbmUtPm5fY29udG91cnMrKzsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGlmIGEgcGF0aCB3YXMgYmVndW4sIGFkZCBpdHMgZmlyc3Qgb24tY3VydmUgcG9pbnQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICAvKiB0ZXN0IHdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIGEgbmV3IGNvbnRvdXIgKi8KKyAgICBpZiAoICFidWlsZGVyLT5wYXRoX2JlZ3VuICkKKyAgICB7CisgICAgICBidWlsZGVyLT5wYXRoX2JlZ3VuID0gMTsKKyAgICAgIGVycm9yID0gY2ZmX2J1aWxkZXJfYWRkX2NvbnRvdXIoIGJ1aWxkZXIgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZXJyb3IgPSBjZmZfYnVpbGRlcl9hZGRfcG9pbnQxKCBidWlsZGVyLCB4LCB5ICk7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBjbG9zZSB0aGUgY3VycmVudCBjb250b3VyICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIGNmZl9idWlsZGVyX2Nsb3NlX2NvbnRvdXIoIENGRl9CdWlsZGVyKiAgYnVpbGRlciApCisgIHsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9IGJ1aWxkZXItPmN1cnJlbnQ7CisgICAgRlRfSW50ICAgICAgIGZpcnN0OworCisKKyAgICBpZiAoICFvdXRsaW5lICkKKyAgICAgIHJldHVybjsKKworICAgIGZpcnN0ID0gb3V0bGluZS0+bl9jb250b3VycyA8PSAxCisgICAgICAgICAgICA/IDAgOiBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMl0gKyAxOworCisgICAgLyogV2UgbXVzdCBub3QgaW5jbHVkZSB0aGUgbGFzdCBwb2ludCBpbiB0aGUgcGF0aCBpZiBpdCAqLworICAgIC8qIGlzIGxvY2F0ZWQgb24gdGhlIGZpcnN0IHBvaW50LiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzID4gMSApCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgcDEgICAgICA9IG91dGxpbmUtPnBvaW50cyArIGZpcnN0OworICAgICAgRlRfVmVjdG9yKiAgcDIgICAgICA9IG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKKyAgICAgIEZUX0J5dGUqICAgIGNvbnRyb2wgPSAoRlRfQnl0ZSopb3V0bGluZS0+dGFncyArIG91dGxpbmUtPm5fcG9pbnRzIC0gMTsKKworCisgICAgICAvKiBgZGVsZXRlJyBsYXN0IHBvaW50IG9ubHkgaWYgaXQgY29pbmNpZGVzIHdpdGggdGhlIGZpcnN0ICAgICovCisgICAgICAvKiBwb2ludCBhbmQgaWYgaXQgaXMgbm90IGEgY29udHJvbCBwb2ludCAod2hpY2ggY2FuIGhhcHBlbikuICovCisgICAgICBpZiAoIHAxLT54ID09IHAyLT54ICYmIHAxLT55ID09IHAyLT55ICkKKyAgICAgICAgaWYgKCAqY29udHJvbCA9PSBGVF9DVVJWRV9UQUdfT04gKQorICAgICAgICAgIG91dGxpbmUtPm5fcG9pbnRzLS07CisgICAgfQorCisgICAgaWYgKCBvdXRsaW5lLT5uX2NvbnRvdXJzID4gMCApCisgICAgeworICAgICAgLyogRG9uJ3QgYWRkIGNvbnRvdXJzIG9ubHkgY29uc2lzdGluZyBvZiBvbmUgcG9pbnQsIGkuZS4sICovCisgICAgICAvKiBjaGVjayB3aGV0aGVyIGJlZ2luIHBvaW50IGFuZCBsYXN0IHBvaW50IGFyZSB0aGUgc2FtZS4gKi8KKyAgICAgIGlmICggZmlyc3QgPT0gb3V0bGluZS0+bl9wb2ludHMgLSAxICkKKyAgICAgIHsKKyAgICAgICAgb3V0bGluZS0+bl9jb250b3Vycy0tOworICAgICAgICBvdXRsaW5lLT5uX3BvaW50cy0tOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMV0gPQorICAgICAgICAgIChzaG9ydCkoIG91dGxpbmUtPm5fcG9pbnRzIC0gMSApOworICAgIH0KKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTIEJVSUxERVIgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcHNfYnVpbGRlcl9pbml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW5pdGlhbGl6ZXMgYSBnaXZlbiBnbHlwaCBidWlsZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgIDo6IFRoZSBjdXJyZW50IHNpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoICAgOjogVGhlIGN1cnJlbnQgZ2x5cGggb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGludGluZyA6OiBXaGV0aGVyIGhpbnRpbmcgc2hvdWxkIGJlIGFwcGxpZWQuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwc19idWlsZGVyX2luaXQoIFBTX0J1aWxkZXIqICBwc19idWlsZGVyLAorICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICBpc190MSApCisgIHsKKyAgICBGVF9aRVJPKCBwc19idWlsZGVyICk7CisKKyAgICBpZiAoIGlzX3QxICkKKyAgICB7CisgICAgICBUMV9CdWlsZGVyICB0MWJ1aWxkZXIgPSAoVDFfQnVpbGRlcilidWlsZGVyOworCisKKyAgICAgIHBzX2J1aWxkZXItPm1lbW9yeSAgPSB0MWJ1aWxkZXItPm1lbW9yeTsKKyAgICAgIHBzX2J1aWxkZXItPmZhY2UgICAgPSAoRlRfRmFjZSl0MWJ1aWxkZXItPmZhY2U7CisgICAgICBwc19idWlsZGVyLT5nbHlwaCAgID0gKENGRl9HbHlwaFNsb3QpdDFidWlsZGVyLT5nbHlwaDsKKyAgICAgIHBzX2J1aWxkZXItPmxvYWRlciAgPSB0MWJ1aWxkZXItPmxvYWRlcjsKKyAgICAgIHBzX2J1aWxkZXItPmJhc2UgICAgPSB0MWJ1aWxkZXItPmJhc2U7CisgICAgICBwc19idWlsZGVyLT5jdXJyZW50ID0gdDFidWlsZGVyLT5jdXJyZW50OworCisgICAgICBwc19idWlsZGVyLT5wb3NfeCA9ICZ0MWJ1aWxkZXItPnBvc194OworICAgICAgcHNfYnVpbGRlci0+cG9zX3kgPSAmdDFidWlsZGVyLT5wb3NfeTsKKworICAgICAgcHNfYnVpbGRlci0+bGVmdF9iZWFyaW5nID0gJnQxYnVpbGRlci0+bGVmdF9iZWFyaW5nOworICAgICAgcHNfYnVpbGRlci0+YWR2YW5jZSAgICAgID0gJnQxYnVpbGRlci0+YWR2YW5jZTsKKworICAgICAgcHNfYnVpbGRlci0+YmJveCAgICAgICAgPSAmdDFidWlsZGVyLT5iYm94OworICAgICAgcHNfYnVpbGRlci0+cGF0aF9iZWd1biAgPSAwOworICAgICAgcHNfYnVpbGRlci0+bG9hZF9wb2ludHMgPSB0MWJ1aWxkZXItPmxvYWRfcG9pbnRzOworICAgICAgcHNfYnVpbGRlci0+bm9fcmVjdXJzZSAgPSB0MWJ1aWxkZXItPm5vX3JlY3Vyc2U7CisKKyAgICAgIHBzX2J1aWxkZXItPm1ldHJpY3Nfb25seSA9IHQxYnVpbGRlci0+bWV0cmljc19vbmx5OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgQ0ZGX0J1aWxkZXIqICBjZmZidWlsZGVyID0gKENGRl9CdWlsZGVyKilidWlsZGVyOworCisKKyAgICAgIHBzX2J1aWxkZXItPm1lbW9yeSAgPSBjZmZidWlsZGVyLT5tZW1vcnk7CisgICAgICBwc19idWlsZGVyLT5mYWNlICAgID0gKEZUX0ZhY2UpY2ZmYnVpbGRlci0+ZmFjZTsKKyAgICAgIHBzX2J1aWxkZXItPmdseXBoICAgPSBjZmZidWlsZGVyLT5nbHlwaDsKKyAgICAgIHBzX2J1aWxkZXItPmxvYWRlciAgPSBjZmZidWlsZGVyLT5sb2FkZXI7CisgICAgICBwc19idWlsZGVyLT5iYXNlICAgID0gY2ZmYnVpbGRlci0+YmFzZTsKKyAgICAgIHBzX2J1aWxkZXItPmN1cnJlbnQgPSBjZmZidWlsZGVyLT5jdXJyZW50OworCisgICAgICBwc19idWlsZGVyLT5wb3NfeCA9ICZjZmZidWlsZGVyLT5wb3NfeDsKKyAgICAgIHBzX2J1aWxkZXItPnBvc195ID0gJmNmZmJ1aWxkZXItPnBvc195OworCisgICAgICBwc19idWlsZGVyLT5sZWZ0X2JlYXJpbmcgPSAmY2ZmYnVpbGRlci0+bGVmdF9iZWFyaW5nOworICAgICAgcHNfYnVpbGRlci0+YWR2YW5jZSAgICAgID0gJmNmZmJ1aWxkZXItPmFkdmFuY2U7CisKKyAgICAgIHBzX2J1aWxkZXItPmJib3ggICAgICAgID0gJmNmZmJ1aWxkZXItPmJib3g7CisgICAgICBwc19idWlsZGVyLT5wYXRoX2JlZ3VuICA9IGNmZmJ1aWxkZXItPnBhdGhfYmVndW47CisgICAgICBwc19idWlsZGVyLT5sb2FkX3BvaW50cyA9IGNmZmJ1aWxkZXItPmxvYWRfcG9pbnRzOworICAgICAgcHNfYnVpbGRlci0+bm9fcmVjdXJzZSAgPSBjZmZidWlsZGVyLT5ub19yZWN1cnNlOworCisgICAgICBwc19idWlsZGVyLT5tZXRyaWNzX29ubHkgPSBjZmZidWlsZGVyLT5tZXRyaWNzX29ubHk7CisgICAgfQorCisgICAgcHNfYnVpbGRlci0+aXNfdDEgPSBpc190MTsKKyAgICBwc19idWlsZGVyLT5mdW5jcyA9IHBzX2J1aWxkZXJfZnVuY3M7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBzX2J1aWxkZXJfZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpbmFsaXplcyBhIGdpdmVuIGdseXBoIGJ1aWxkZXIuICBJdHMgY29udGVudHMgY2FuIHN0aWxsIGJlIHVzZWQgICAqLworICAvKiAgICBhZnRlciB0aGUgY2FsbCwgYnV0IHRoZSBmdW5jdGlvbiBzYXZlcyBpbXBvcnRhbnQgaW5mb3JtYXRpb24gICAgICAgKi8KKyAgLyogICAgd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nIGdseXBoIHNsb3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVpbGRlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGdseXBoIGJ1aWxkZXIgdG8gZmluYWxpemUuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwc19idWlsZGVyX2RvbmUoIFBTX0J1aWxkZXIqICBidWlsZGVyICkKKyAgeworICAgIENGRl9HbHlwaFNsb3QgIGdseXBoID0gYnVpbGRlci0+Z2x5cGg7CisKKworICAgIGlmICggZ2x5cGggKQorICAgICAgZ2x5cGgtPnJvb3Qub3V0bGluZSA9ICpidWlsZGVyLT5iYXNlOworICB9CisKKworICAvKiBjaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgYGNvdW50JyBtb3JlIHBvaW50cyAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcHNfYnVpbGRlcl9jaGVja19wb2ludHMoIFBTX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgIGNvdW50ICkKKyAgeworICAgIHJldHVybiBGVF9HTFlQSExPQURFUl9DSEVDS19QT0lOVFMoIGJ1aWxkZXItPmxvYWRlciwgY291bnQsIDAgKTsKKyAgfQorCisKKyAgLyogYWRkIGEgbmV3IHBvaW50LCBkbyBub3QgY2hlY2sgc3BhY2UgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcHNfYnVpbGRlcl9hZGRfcG9pbnQoIFBTX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUgICAgICBmbGFnICkKKyAgeworICAgIEZUX091dGxpbmUqICBvdXRsaW5lID0gYnVpbGRlci0+Y3VycmVudDsKKworCisgICAgaWYgKCBidWlsZGVyLT5sb2FkX3BvaW50cyApCisgICAgeworICAgICAgRlRfVmVjdG9yKiAgcG9pbnQgICA9IG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzOworICAgICAgRlRfQnl0ZSogICAgY29udHJvbCA9IChGVF9CeXRlKilvdXRsaW5lLT50YWdzICsgb3V0bGluZS0+bl9wb2ludHM7CisKKyNpZmRlZiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgICBQU19Ecml2ZXIgIGRyaXZlciAgID0gKFBTX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggYnVpbGRlci0+ZmFjZSApOworCisKKyAgICAgIGlmICggIWJ1aWxkZXItPmlzX3QxICYmCisgICAgICAgICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPT0gRlRfSElOVElOR19GUkVFVFlQRSApCisgICAgICB7CisgICAgICAgIHBvaW50LT54ID0geCA+PiAxNjsKKyAgICAgICAgcG9pbnQtPnkgPSB5ID4+IDE2OworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisjaWZuZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICAgIFBTX0RyaXZlciAgZHJpdmVyICAgPSAoUFNfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBidWlsZGVyLT5mYWNlICk7CisjZW5kaWYKKyAgICAgIGlmICggYnVpbGRlci0+aXNfdDEgJiYKKyAgICAgICAgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9ISU5USU5HX0ZSRUVUWVBFICkKKyAgICAgIHsKKyAgICAgICAgcG9pbnQtPnggPSBGSVhFRF9UT19JTlQoIHggKTsKKyAgICAgICAgcG9pbnQtPnkgPSBGSVhFRF9UT19JTlQoIHkgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICAvKiBjZjJfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyB1c2VzIDE2LjE2IGNvb3JkaW5hdGVzICovCisgICAgICAgIHBvaW50LT54ID0geCA+PiAxMDsKKyAgICAgICAgcG9pbnQtPnkgPSB5ID4+IDEwOworICAgICAgfQorICAgICAgKmNvbnRyb2wgPSAoRlRfQnl0ZSkoIGZsYWcgPyBGVF9DVVJWRV9UQUdfT04gOiBGVF9DVVJWRV9UQUdfQ1VCSUMgKTsKKyAgICB9CisgICAgb3V0bGluZS0+bl9wb2ludHMrKzsKKyAgfQorCisKKyAgLyogY2hlY2sgc3BhY2UgZm9yIGEgbmV3IG9uLWN1cnZlIHBvaW50LCB0aGVuIGFkZCBpdCAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcHNfYnVpbGRlcl9hZGRfcG9pbnQxKCBQU19CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeSApCisgIHsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGVycm9yID0gcHNfYnVpbGRlcl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDEgKTsKKyAgICBpZiAoICFlcnJvciApCisgICAgICBwc19idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMSApOworCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBjaGVjayBzcGFjZSBmb3IgYSBuZXcgY29udG91ciwgdGhlbiBhZGQgaXQgKi8KKyAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCisgIHBzX2J1aWxkZXJfYWRkX2NvbnRvdXIoIFBTX0J1aWxkZXIqICBidWlsZGVyICkKKyAgeworICAgIEZUX091dGxpbmUqICBvdXRsaW5lID0gYnVpbGRlci0+Y3VycmVudDsKKyAgICBGVF9FcnJvciAgICAgZXJyb3I7CisKKworICAgIC8qIHRoaXMgbWlnaHQgaGFwcGVuIGluIGludmFsaWQgZm9udHMgKi8KKyAgICBpZiAoICFvdXRsaW5lICkKKyAgICB7CisgICAgICBGVF9FUlJPUigoICJwc19idWlsZGVyX2FkZF9jb250b3VyOiBubyBvdXRsaW5lIHRvIGFkZCBwb2ludHMgdG9cbiIgKSk7CisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKKyAgICB9CisKKyAgICBpZiAoICFidWlsZGVyLT5sb2FkX3BvaW50cyApCisgICAgeworICAgICAgb3V0bGluZS0+bl9jb250b3VycysrOworICAgICAgcmV0dXJuIEZUX0Vycl9PazsKKyAgICB9CisKKyAgICBlcnJvciA9IEZUX0dMWVBITE9BREVSX0NIRUNLX1BPSU5UUyggYnVpbGRlci0+bG9hZGVyLCAwLCAxICk7CisgICAgaWYgKCAhZXJyb3IgKQorICAgIHsKKyAgICAgIGlmICggb3V0bGluZS0+bl9jb250b3VycyA+IDAgKQorICAgICAgICBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMV0gPQorICAgICAgICAgIChzaG9ydCkoIG91dGxpbmUtPm5fcG9pbnRzIC0gMSApOworCisgICAgICBvdXRsaW5lLT5uX2NvbnRvdXJzKys7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBpZiBhIHBhdGggd2FzIGJlZ3VuLCBhZGQgaXRzIGZpcnN0IG9uLWN1cnZlIHBvaW50ICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwc19idWlsZGVyX3N0YXJ0X3BvaW50KCBQU19CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICB5ICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgLyogdGVzdCB3aGV0aGVyIHdlIGFyZSBidWlsZGluZyBhIG5ldyBjb250b3VyICovCisgICAgaWYgKCAhYnVpbGRlci0+cGF0aF9iZWd1biApCisgICAgeworICAgICAgYnVpbGRlci0+cGF0aF9iZWd1biA9IDE7CisgICAgICBlcnJvciA9IHBzX2J1aWxkZXJfYWRkX2NvbnRvdXIoIGJ1aWxkZXIgKTsKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgICAgZXJyb3IgPSBwc19idWlsZGVyX2FkZF9wb2ludDEoIGJ1aWxkZXIsIHgsIHkgKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3I7CisgIH0KKworCisgIC8qIGNsb3NlIHRoZSBjdXJyZW50IGNvbnRvdXIgKi8KKyAgRlRfTE9DQUxfREVGKCB2b2lkICkKKyAgcHNfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBQU19CdWlsZGVyKiAgYnVpbGRlciApCisgIHsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9IGJ1aWxkZXItPmN1cnJlbnQ7CisgICAgRlRfSW50ICAgICAgIGZpcnN0OworCisKKyAgICBpZiAoICFvdXRsaW5lICkKKyAgICAgIHJldHVybjsKKworICAgIGZpcnN0ID0gb3V0bGluZS0+bl9jb250b3VycyA8PSAxCisgICAgICAgICAgICA/IDAgOiBvdXRsaW5lLT5jb250b3Vyc1tvdXRsaW5lLT5uX2NvbnRvdXJzIC0gMl0gKyAxOworCisgICAgLyogaW4gbWFsZm9ybWVkIGZvbnRzIGl0IGNhbiBoYXBwZW4gdGhhdCBhIGNvbnRvdXIgd2FzIHN0YXJ0ZWQgKi8KKyAgICAvKiBidXQgbm8gcG9pbnRzIHdlcmUgYWRkZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggb3V0bGluZS0+bl9jb250b3VycyAmJiBmaXJzdCA9PSBvdXRsaW5lLT5uX3BvaW50cyApCisgICAgeworICAgICAgb3V0bGluZS0+bl9jb250b3Vycy0tOworICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8qIFdlIG11c3Qgbm90IGluY2x1ZGUgdGhlIGxhc3QgcG9pbnQgaW4gdGhlIHBhdGggaWYgaXQgKi8KICAgICAvKiBpcyBsb2NhdGVkIG9uIHRoZSBmaXJzdCBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKCBvdXRsaW5lLT5uX3BvaW50cyA+IDEgKQpAQCAtMTc1OCw2ICsyMzM1LDE3NiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwc19kZWNvZGVyX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDcmVhdGVzIGEgd3JhcHBlciBkZWNvZGVyIGZvciB1c2UgaW4gdGhlIGNvbWJpbmVkICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVHlwZSAxIC8gQ0ZGIGludGVycHJldGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcHNfZGVjb2RlciA6OiBBIHBvaW50ZXIgdG8gdGhlIGRlY29kZXIgdG8gaW5pdGlhbGl6ZS4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVjb2RlciAgICA6OiBBIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIGRlY29kZXIuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpc190MSAgICAgIDo6IEZsYWcgaW5kaWNhdGluZyBUeXBlIDEgb3IgQ0ZGICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHBzX2RlY29kZXJfaW5pdCggUFNfRGVjb2RlciogIHBzX2RlY29kZXIsCisgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIGlzX3QxICkKKyAgeworICAgIEZUX1pFUk8oIHBzX2RlY29kZXIgKTsKKworICAgIGlmICggaXNfdDEgKQorICAgIHsKKyAgICAgIFQxX0RlY29kZXIgIHQxX2RlY29kZXIgPSAoVDFfRGVjb2RlcilkZWNvZGVyOworCisKKyAgICAgIHBzX2J1aWxkZXJfaW5pdCggJnBzX2RlY29kZXItPmJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICZ0MV9kZWNvZGVyLT5idWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBpc190MSApOworCisgICAgICBwc19kZWNvZGVyLT5jZjJfaW5zdGFuY2UgPSAmdDFfZGVjb2Rlci0+Y2YyX2luc3RhbmNlOworICAgICAgcHNfZGVjb2Rlci0+cHNuYW1lcyAgICAgID0gdDFfZGVjb2Rlci0+cHNuYW1lczsKKworICAgICAgcHNfZGVjb2Rlci0+bnVtX2dseXBocyAgPSB0MV9kZWNvZGVyLT5udW1fZ2x5cGhzOworICAgICAgcHNfZGVjb2Rlci0+Z2x5cGhfbmFtZXMgPSB0MV9kZWNvZGVyLT5nbHlwaF9uYW1lczsKKyAgICAgIHBzX2RlY29kZXItPmhpbnRfbW9kZSAgID0gdDFfZGVjb2Rlci0+aGludF9tb2RlOworICAgICAgcHNfZGVjb2Rlci0+YmxlbmQgICAgICAgPSB0MV9kZWNvZGVyLT5ibGVuZDsKKworICAgICAgcHNfZGVjb2Rlci0+bnVtX2xvY2FscyAgPSAoRlRfVUludCl0MV9kZWNvZGVyLT5udW1fc3VicnM7CisgICAgICBwc19kZWNvZGVyLT5sb2NhbHMgICAgICA9IHQxX2RlY29kZXItPnN1YnJzOworICAgICAgcHNfZGVjb2Rlci0+bG9jYWxzX2xlbiAgPSB0MV9kZWNvZGVyLT5zdWJyc19sZW47CisgICAgICBwc19kZWNvZGVyLT5sb2NhbHNfaGFzaCA9IHQxX2RlY29kZXItPnN1YnJzX2hhc2g7CisKKyAgICAgIHBzX2RlY29kZXItPmJ1aWxkY2hhciAgICAgPSB0MV9kZWNvZGVyLT5idWlsZGNoYXI7CisgICAgICBwc19kZWNvZGVyLT5sZW5fYnVpbGRjaGFyID0gdDFfZGVjb2Rlci0+bGVuX2J1aWxkY2hhcjsKKworICAgICAgcHNfZGVjb2Rlci0+bGVuSVYgPSB0MV9kZWNvZGVyLT5sZW5JVjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIENGRl9EZWNvZGVyKiAgY2ZmX2RlY29kZXIgPSAoQ0ZGX0RlY29kZXIqKWRlY29kZXI7CisKKworICAgICAgcHNfYnVpbGRlcl9pbml0KCAmcHNfZGVjb2Rlci0+YnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgJmNmZl9kZWNvZGVyLT5idWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICBpc190MSApOworCisgICAgICBwc19kZWNvZGVyLT5jZmYgICAgICAgICAgICAgPSBjZmZfZGVjb2Rlci0+Y2ZmOworICAgICAgcHNfZGVjb2Rlci0+Y2YyX2luc3RhbmNlICAgID0gJmNmZl9kZWNvZGVyLT5jZmYtPmNmMl9pbnN0YW5jZTsKKyAgICAgIHBzX2RlY29kZXItPmN1cnJlbnRfc3ViZm9udCA9IGNmZl9kZWNvZGVyLT5jdXJyZW50X3N1YmZvbnQ7CisKKyAgICAgIHBzX2RlY29kZXItPm51bV9nbG9iYWxzICA9IGNmZl9kZWNvZGVyLT5udW1fZ2xvYmFsczsKKyAgICAgIHBzX2RlY29kZXItPmdsb2JhbHMgICAgICA9IGNmZl9kZWNvZGVyLT5nbG9iYWxzOworICAgICAgcHNfZGVjb2Rlci0+Z2xvYmFsc19iaWFzID0gY2ZmX2RlY29kZXItPmdsb2JhbHNfYmlhczsKKyAgICAgIHBzX2RlY29kZXItPm51bV9sb2NhbHMgICA9IGNmZl9kZWNvZGVyLT5udW1fbG9jYWxzOworICAgICAgcHNfZGVjb2Rlci0+bG9jYWxzICAgICAgID0gY2ZmX2RlY29kZXItPmxvY2FsczsKKyAgICAgIHBzX2RlY29kZXItPmxvY2Fsc19iaWFzICA9IGNmZl9kZWNvZGVyLT5sb2NhbHNfYmlhczsKKworICAgICAgcHNfZGVjb2Rlci0+Z2x5cGhfd2lkdGggICA9ICZjZmZfZGVjb2Rlci0+Z2x5cGhfd2lkdGg7CisgICAgICBwc19kZWNvZGVyLT53aWR0aF9vbmx5ICAgID0gY2ZmX2RlY29kZXItPndpZHRoX29ubHk7CisKKyAgICAgIHBzX2RlY29kZXItPmhpbnRfbW9kZSA9IGNmZl9kZWNvZGVyLT5oaW50X21vZGU7CisKKyAgICAgIHBzX2RlY29kZXItPmdldF9nbHlwaF9jYWxsYmFjayAgPSBjZmZfZGVjb2Rlci0+Z2V0X2dseXBoX2NhbGxiYWNrOworICAgICAgcHNfZGVjb2Rlci0+ZnJlZV9nbHlwaF9jYWxsYmFjayA9IGNmZl9kZWNvZGVyLT5mcmVlX2dseXBoX2NhbGxiYWNrOworICAgIH0KKyAgfQorCisKKyAgLyogU3ludGhlc2l6ZSBhIFN1YkZvbnQgb2JqZWN0IGZvciBUeXBlIDEgZm9udHMsIGZvciB1c2UgaW4gdGhlICAqLworICAvKiBuZXcgaW50ZXJwcmV0ZXIgdG8gYWNjZXNzIFByaXZhdGUgZGljdCBkYXRhLiAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggdm9pZCApCisgIHQxX21ha2Vfc3ViZm9udCggRlRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgUFNfUHJpdmF0ZSAgIHByaXYsCisgICAgICAgICAgICAgICAgICAgQ0ZGX1N1YkZvbnQgIHN1YmZvbnQgKQorICB7CisgICAgQ0ZGX1ByaXZhdGUgIGNwcml2ID0gJnN1YmZvbnQtPnByaXZhdGVfZGljdDsKKyAgICBGVF9VSW50ICAgICAgbiwgY291bnQ7CisKKworICAgIEZUX1pFUk8oIHN1YmZvbnQgKTsKKyAgICBGVF9aRVJPKCBjcHJpdiApOworCisgICAgY291bnQgPSBjcHJpdi0+bnVtX2JsdWVfdmFsdWVzID0gcHJpdi0+bnVtX2JsdWVfdmFsdWVzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBjcHJpdi0+Ymx1ZV92YWx1ZXNbbl0gPSAoRlRfUG9zKXByaXYtPmJsdWVfdmFsdWVzW25dOworCisgICAgY291bnQgPSBjcHJpdi0+bnVtX290aGVyX2JsdWVzID0gcHJpdi0+bnVtX290aGVyX2JsdWVzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBjcHJpdi0+b3RoZXJfYmx1ZXNbbl0gPSAoRlRfUG9zKXByaXYtPm90aGVyX2JsdWVzW25dOworCisgICAgY291bnQgPSBjcHJpdi0+bnVtX2ZhbWlseV9ibHVlcyA9IHByaXYtPm51bV9mYW1pbHlfYmx1ZXM7CisgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICAgIGNwcml2LT5mYW1pbHlfYmx1ZXNbbl0gPSAoRlRfUG9zKXByaXYtPmZhbWlseV9ibHVlc1tuXTsKKworICAgIGNvdW50ID0gY3ByaXYtPm51bV9mYW1pbHlfb3RoZXJfYmx1ZXMgPSBwcml2LT5udW1fZmFtaWx5X290aGVyX2JsdWVzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBjcHJpdi0+ZmFtaWx5X290aGVyX2JsdWVzW25dID0gKEZUX1Bvcylwcml2LT5mYW1pbHlfb3RoZXJfYmx1ZXNbbl07CisKKyAgICBjcHJpdi0+Ymx1ZV9zY2FsZSA9IHByaXYtPmJsdWVfc2NhbGU7CisgICAgY3ByaXYtPmJsdWVfc2hpZnQgPSAoRlRfUG9zKXByaXYtPmJsdWVfc2hpZnQ7CisgICAgY3ByaXYtPmJsdWVfZnV6eiAgPSAoRlRfUG9zKXByaXYtPmJsdWVfZnV6ejsKKworICAgIGNwcml2LT5zdGFuZGFyZF93aWR0aCAgPSAoRlRfUG9zKXByaXYtPnN0YW5kYXJkX3dpZHRoWzBdOworICAgIGNwcml2LT5zdGFuZGFyZF9oZWlnaHQgPSAoRlRfUG9zKXByaXYtPnN0YW5kYXJkX2hlaWdodFswXTsKKworICAgIGNvdW50ID0gY3ByaXYtPm51bV9zbmFwX3dpZHRocyA9IHByaXYtPm51bV9zbmFwX3dpZHRoczsKKyAgICBmb3IgKCBuID0gMDsgbiA8IGNvdW50OyBuKysgKQorICAgICAgY3ByaXYtPnNuYXBfd2lkdGhzW25dID0gKEZUX1Bvcylwcml2LT5zbmFwX3dpZHRoc1tuXTsKKworICAgIGNvdW50ID0gY3ByaXYtPm51bV9zbmFwX2hlaWdodHMgPSBwcml2LT5udW1fc25hcF9oZWlnaHRzOworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICBjcHJpdi0+c25hcF9oZWlnaHRzW25dID0gKEZUX1Bvcylwcml2LT5zbmFwX2hlaWdodHNbbl07CisKKyAgICBjcHJpdi0+Zm9yY2VfYm9sZCAgICAgICA9IHByaXYtPmZvcmNlX2JvbGQ7CisgICAgY3ByaXYtPmxlbklWICAgICAgICAgICAgPSBwcml2LT5sZW5JVjsKKyAgICBjcHJpdi0+bGFuZ3VhZ2VfZ3JvdXAgICA9IHByaXYtPmxhbmd1YWdlX2dyb3VwOworICAgIGNwcml2LT5leHBhbnNpb25fZmFjdG9yID0gcHJpdi0+ZXhwYW5zaW9uX2ZhY3RvcjsKKworICAgIGNwcml2LT5zdWJmb250ID0gc3ViZm9udDsKKworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICovCisgICAgaWYgKCBmYWNlLT5pbnRlcm5hbC0+cmFuZG9tX3NlZWQgIT0gLTEgKQorICAgIHsKKyAgICAgIC8qIElmIHdlIGhhdmUgYSBmYWNlLXNwZWNpZmljIHNlZWQsIHVzZSBpdC4gICAgKi8KKyAgICAgIC8qIElmIG5vbi16ZXJvLCB1cGRhdGUgaXQgdG8gYSBwb3NpdGl2ZSB2YWx1ZS4gKi8KKyAgICAgIHN1YmZvbnQtPnJhbmRvbSA9IChGVF9VSW50MzIpZmFjZS0+aW50ZXJuYWwtPnJhbmRvbV9zZWVkOworICAgICAgaWYgKCBmYWNlLT5pbnRlcm5hbC0+cmFuZG9tX3NlZWQgKQorICAgICAgeworICAgICAgICBkbworICAgICAgICB7CisgICAgICAgICAgZmFjZS0+aW50ZXJuYWwtPnJhbmRvbV9zZWVkID0gKEZUX0ludDMyKWNmZl9yYW5kb20oCisgICAgICAgICAgICAoRlRfVUludDMyKWZhY2UtPmludGVybmFsLT5yYW5kb21fc2VlZCApOworCisgICAgICAgIH0gd2hpbGUgKCBmYWNlLT5pbnRlcm5hbC0+cmFuZG9tX3NlZWQgPCAwICk7CisgICAgICB9CisgICAgfQorICAgIGlmICggIXN1YmZvbnQtPnJhbmRvbSApCisgICAgeworICAgICAgRlRfVUludDMyICBzZWVkOworCisKKyAgICAgIC8qIGNvbXB1dGUgcmFuZG9tIHNlZWQgZnJvbSBzb21lIG1lbW9yeSBhZGRyZXNzZXMgKi8KKyAgICAgIHNlZWQgPSAoRlRfVUludDMyKSggKEZUX09mZnNldCkoY2hhciopJnNlZWQgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KShjaGFyKikmZmFjZSAgICBeCisgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9PZmZzZXQpKGNoYXIqKSZzdWJmb250ICk7CisgICAgICBzZWVkID0gc2VlZCBeICggc2VlZCA+PiAxMCApIF4gKCBzZWVkID4+IDIwICk7CisgICAgICBpZiAoIHNlZWQgPT0gMCApCisgICAgICAgIHNlZWQgPSAweDczODQ7CisKKyAgICAgIHN1YmZvbnQtPnJhbmRvbSA9IHNlZWQ7CisgICAgfQorICB9CisKKwogICBGVF9MT0NBTF9ERUYoIHZvaWQgKQogICB0MV9kZWNyeXB0KCBGVF9CeXRlKiAgIGJ1ZmZlciwKICAgICAgICAgICAgICAgRlRfT2Zmc2V0ICBsZW5ndGgsCkBAIC0xNzcxLDQgKzI1MTgsMTYgQEAKICAgfQogCiAKKyAgRlRfTE9DQUxfREVGKCBGVF9VSW50MzIgKQorICBjZmZfcmFuZG9tKCBGVF9VSW50MzIgIHIgKQorICB7CisgICAgLyogYSAzMmJpdCB2ZXJzaW9uIG9mIHRoZSBgeG9yc2hpZnQnIGFsZ29yaXRobSAqLworICAgIHIgXj0gciA8PCAxMzsKKyAgICByIF49IHIgPj4gMTc7CisgICAgciBePSByIDw8IDU7CisKKyAgICByZXR1cm4gcjsKKyAgfQorCisKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3Bzb2Jqcy5oIGIvc3JjL3BzYXV4L3Bzb2Jqcy5oCmluZGV4IDIwMmU1YjIuLjhlMGZlNWYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9wc29ianMuaAorKysgYi9zcmMvcHNhdXgvcHNvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgUG9zdFNjcmlwdCBmb250cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyLDYgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9ICisjaW5jbHVkZSBGVF9JTlRFUk5BTF9DRkZfT0JKRUNUU19UWVBFU19ICiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0xOTMsMTcgKzE5NCwxMTcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGIEJVSUxERVIgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZmZfYnVpbGRlcl9pbml0KCBDRkZfQnVpbGRlciogICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICBUVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBDRkZfU2l6ZSAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICBDRkZfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgaGludGluZyApOworCisgIEZUX0xPQ0FMKCB2b2lkICkKKyAgY2ZmX2J1aWxkZXJfZG9uZSggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKKyAgY2ZmX2NoZWNrX3BvaW50cyggQ0ZGX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGNvdW50ICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQoIENGRl9CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUgICAgICAgZmxhZyApOworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfYnVpbGRlcl9hZGRfcG9pbnQxKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgICB5ICk7CisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIGNmZl9idWlsZGVyX3N0YXJ0X3BvaW50KCBDRkZfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgIHkgKTsKKyAgRlRfTE9DQUwoIHZvaWQgKQorICBjZmZfYnVpbGRlcl9jbG9zZV9jb250b3VyKCBDRkZfQnVpbGRlciogIGJ1aWxkZXIgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBjZmZfYnVpbGRlcl9hZGRfY29udG91ciggQ0ZGX0J1aWxkZXIqICBidWlsZGVyICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFMgQlVJTERFUiAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX2J1aWxkZXJfaW5pdCggUFNfQnVpbGRlciogIHBzX2J1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIGlzX3QxICk7CisKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX2J1aWxkZXJfZG9uZSggUFNfQnVpbGRlciogIGJ1aWxkZXIgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwc19idWlsZGVyX2NoZWNrX3BvaW50cyggUFNfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgY291bnQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX2J1aWxkZXJfYWRkX3BvaW50KCBQU19CdWlsZGVyKiAgYnVpbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvcyAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlICAgICAgZmxhZyApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBzX2J1aWxkZXJfYWRkX3BvaW50MSggUFNfQnVpbGRlciogIGJ1aWxkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHkgKTsKKworICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBwc19idWlsZGVyX2FkZF9jb250b3VyKCBQU19CdWlsZGVyKiAgYnVpbGRlciApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIHBzX2J1aWxkZXJfc3RhcnRfcG9pbnQoIFBTX0J1aWxkZXIqICBidWlsZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgICAgIHkgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHBzX2J1aWxkZXJfY2xvc2VfY29udG91ciggUFNfQnVpbGRlciogIGJ1aWxkZXIgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCiAgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAgIEZUX0xPQ0FMKCB2b2lkICkKKyAgcHNfZGVjb2Rlcl9pbml0KCBQU19EZWNvZGVyKiAgcHNfZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgaXNfdDEgKTsKKworICBGVF9MT0NBTCggdm9pZCApCisgIHQxX21ha2Vfc3ViZm9udCggRlRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgUFNfUHJpdmF0ZSAgIHByaXYsCisgICAgICAgICAgICAgICAgICAgQ0ZGX1N1YkZvbnQgIHN1YmZvbnQgKTsKKworICBGVF9MT0NBTCggdm9pZCApCiAgIHQxX2RlY3J5cHQoIEZUX0J5dGUqICAgYnVmZmVyLAogICAgICAgICAgICAgICBGVF9PZmZzZXQgIGxlbmd0aCwKICAgICAgICAgICAgICAgRlRfVVNob3J0ICBzZWVkICk7CiAKIAorICBGVF9MT0NBTCggRlRfVUludDMyICkKKyAgY2ZmX3JhbmRvbSggRlRfVUludDMyICByICk7CisKKwogRlRfRU5EX0hFQURFUgogCiAjZW5kaWYgLyogUFNPQkpTX0hfICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMnJlYWQuYyBiL3NyYy9wc2F1eC9wc3JlYWQuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMnJlYWQuYwpyZW5hbWUgdG8gc3JjL3BzYXV4L3BzcmVhZC5jCmluZGV4IDJiNDI5ZTMuLjcxOTg2M2MgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YycmVhZC5jCisrKyBiL3NyYy9wc2F1eC9wc3JlYWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMnJlYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc3JlYWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWRvYmUncyBjb2RlIGZvciBzdHJlYW0gaGFuZGxpbmcgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNiwxMiArMzYsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2luY2x1ZGUgImNmMmZ0LmgiCisjaW5jbHVkZSAicHNmdC5oIgogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogCi0jaW5jbHVkZSAiY2YyZ2x1ZS5oIgorI2luY2x1ZGUgInBzZ2x1ZS5oIgogCi0jaW5jbHVkZSAiY2YyZXJyb3IuaCIKKyNpbmNsdWRlICJwc2Vycm9yLmgiCiAKIAogICAvKiBEZWZpbmUgQ0YyX0lPX0ZBSUwgYXMgMSB0byBlbmFibGUgcmFuZG9tIGVycm9ycyBhbmQgcmFuZG9tICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMnJlYWQuaCBiL3NyYy9wc2F1eC9wc3JlYWQuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMnJlYWQuaApyZW5hbWUgdG8gc3JjL3BzYXV4L3BzcmVhZC5oCmluZGV4IGIwYjBkYjguLjQ2NGIyOWIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YycmVhZC5oCisrKyBiL3NyYy9wc2F1eC9wc3JlYWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGNmMnJlYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBwc3JlYWQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWRvYmUncyBjb2RlIGZvciBzdHJlYW0gaGFuZGxpbmcgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgQ0YyUkVBRF9IXwotI2RlZmluZSBDRjJSRUFEX0hfCisjaWZuZGVmIFBTUkVBRF9IXworI2RlZmluZSBQU1JFQURfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTYyLDcgKzYyLDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogQ0YyUkVBRF9IXyAqLworI2VuZGlmIC8qIFBTUkVBRF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJzdGFjay5jIGIvc3JjL3BzYXV4L3Bzc3RhY2suYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBzcmMvY2ZmL2NmMnN0YWNrLmMKcmVuYW1lIHRvIHNyYy9wc2F1eC9wc3N0YWNrLmMKaW5kZXggMTJhMDI2ZC4uNjlkMDYzMyAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJzdGFjay5jCisrKyBiL3NyYy9wc2F1eC9wc3N0YWNrLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBjZjJzdGFjay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcHNzdGFjay5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFkb2JlJ3MgY29kZSBmb3IgZW11bGF0aW5nIGEgQ0ZGIHN0YWNrIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzYsMTQgKzM2LDE0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpbmNsdWRlICJjZjJmdC5oIgorI2luY2x1ZGUgInBzZnQuaCIKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKIAotI2luY2x1ZGUgImNmMmdsdWUuaCIKLSNpbmNsdWRlICJjZjJmb250LmgiCi0jaW5jbHVkZSAiY2Yyc3RhY2suaCIKKyNpbmNsdWRlICJwc2dsdWUuaCIKKyNpbmNsdWRlICJwc2ZvbnQuaCIKKyNpbmNsdWRlICJwc3N0YWNrLmgiCiAKLSNpbmNsdWRlICJjZjJlcnJvci5oIgorI2luY2x1ZGUgInBzZXJyb3IuaCIKIAogCiAgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIENGMl9TdGFjay4gICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2Yyc3RhY2suaCBiL3NyYy9wc2F1eC9wc3N0YWNrLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gc3JjL2NmZi9jZjJzdGFjay5oCnJlbmFtZSB0byBzcmMvcHNhdXgvcHNzdGFjay5oCmluZGV4IGVmMDhlZWYuLjM4ZjdiNDEgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2Yyc3RhY2suaAorKysgYi9zcmMvcHNhdXgvcHNzdGFjay5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2Yyc3RhY2suaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzc3RhY2suaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZG9iZSdzIGNvZGUgZm9yIGVtdWxhdGluZyBhIENGRiBzdGFjayAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBDRjJTVEFDS19IXwotI2RlZmluZSBDRjJTVEFDS19IXworI2lmbmRlZiBQU1NUQUNLX0hfCisjZGVmaW5lIFBTU1RBQ0tfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTExNSw3ICsxMTUsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBDRjJTVEFDS19IXyAqLworI2VuZGlmIC8qIFBTU1RBQ0tfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YydHlwZXMuaCBiL3NyYy9wc2F1eC9wc3R5cGVzLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gc3JjL2NmZi9jZjJ0eXBlcy5oCnJlbmFtZSB0byBzcmMvcHNhdXgvcHN0eXBlcy5oCmluZGV4IDViN2UxMjMuLmRmYmFhM2QgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YydHlwZXMuaAorKysgYi9zcmMvcHNhdXgvcHN0eXBlcy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgY2YydHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIHBzdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZG9iZSdzIGNvZGUgZm9yIGRlZmluaW5nIGRhdGEgdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBDRjJUWVBFU19IXwotI2RlZmluZSBDRjJUWVBFU19IXworI2lmbmRlZiBQU1RZUEVTX0hfCisjZGVmaW5lIFBTVFlQRVNfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC03Miw3ICs3Miw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIENGMlRZUEVTX0hfICovCisjZW5kaWYgLyogUFNUWVBFU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3J1bGVzLm1rIGIvc3JjL3BzYXV4L3J1bGVzLm1rCmluZGV4IDU0MmFlMTIuLmE4N2JmZTkgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC9ydWxlcy5taworKysgYi9zcmMvcHNhdXgvcnVsZXMubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMzMsMTIgKzMzLDI1IEBACiAgICAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS90MWNtYXAuYyAgIFwKICAgICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL2FmbXBhcnNlLmMgXAogICAgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNjb252LmMgICBcCi0gICAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9wc2F1eG1vZC5jCisgICAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9wc2F1eG1vZC5jIFwKKyAgICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL3BzYXJyc3QuYyBcCisgICAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9wc2JsdWVzLmMgXAorICAgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNlcnJvci5jIFwKKyAgICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL3BzZm9udC5jICBcCisgICAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9wc2Z0LmMgICAgXAorICAgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNoaW50cy5jIFwKKyAgICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL3BzaW50cnAuYyBcCisgICAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9wc3JlYWQuYyAgXAorICAgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNzdGFjay5jIFwKKyAgICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL2NmZmRlY29kZS5jCiAKICMgUFNBVVggZHJpdmVyIGhlYWRlcnMKICMKIFBTQVVYX0RSVl9IIDo9ICQoUFNBVVhfRFJWX1NSQzolYz0laCkgIFwKLSAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9wc2F1eGVyci5oCisgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNhdXhlcnIuaCBcCisgICAgICAgICAgICAgICAkKFBTQVVYX0RJUikvcHNmaXhlZC5oIFwKKyAgICAgICAgICAgICAgICQoUFNBVVhfRElSKS9wc2dsdWUuaCAgXAorICAgICAgICAgICAgICAgJChQU0FVWF9ESVIpL3BzdHlwZXMuaAogCiAKICMgUFNBVVggZHJpdmVyIG9iamVjdChzKQpkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3QxY21hcC5jIGIvc3JjL3BzYXV4L3QxY21hcC5jCmluZGV4IDQ1YjcxM2UuLjExMmE3ODkgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC90MWNtYXAuYworKysgYi9zcmMvcHNhdXgvdDFjbWFwLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIGNoYXJhY3RlciBtYXAgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC90MWNtYXAuaCBiL3NyYy9wc2F1eC90MWNtYXAuaAppbmRleCA3ODcwMjQ1Li40MzA4ZTMxIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvdDFjbWFwLmgKKysrIGIvc3JjL3BzYXV4L3QxY21hcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFR5cGUgMSBjaGFyYWN0ZXIgbWFwIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNhdXgvdDFkZWNvZGUuYyBiL3NyYy9wc2F1eC90MWRlY29kZS5jCmluZGV4IGFmN2I0NjUuLjZhZDE0NTYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2F1eC90MWRlY29kZS5jCisrKyBiL3NyYy9wc2F1eC90MWRlY29kZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgVHlwZSAxIGRlY29kaW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMTIsNiArMTEyLDU2IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHQxX2xvb2t1cF9nbHlwaF9ieV9zdGRjaGFyY29kZV9wcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIExvb2tzIHVwIGEgZ2l2ZW4gZ2x5cGggYnkgaXRzIFN0YW5kYXJkRW5jb2RpbmcgY2hhcmNvZGUuICBVc2VkIHRvICAqLworICAvKiAgICBpbXBsZW1lbnQgdGhlIFNFQUMgVHlwZSAxIG9wZXJhdG9yIGluIHRoZSBBZG9iZSBlbmdpbmUgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICA6OiBUaGUgY3VycmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJjb2RlIDo6IFRoZSBjaGFyYWN0ZXIgY29kZSB0byBsb29rIGZvci4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZ2x5cGggaW5kZXggaW4gdGhlIGZvbnQgZmFjZS4gIFJldHVybnMgLTEgaWYgdGhlIGNvcnJlc3BvbmRpbmcgICAqLworICAvKiAgICBnbHlwaCB3YXNuJ3QgZm91bmQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0xPQ0FMX0RFRiggRlRfSW50ICkKKyAgdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlX3BzKCBQU19EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgY2hhcmNvZGUgKQorICB7CisgICAgRlRfVUludCAgICAgICAgICAgICBuOworICAgIGNvbnN0IEZUX1N0cmluZyogICAgZ2x5cGhfbmFtZTsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXMgPSBkZWNvZGVyLT5wc25hbWVzOworCisKKyAgICAvKiBjaGVjayByYW5nZSBvZiBzdGFuZGFyZCBjaGFyIGNvZGUgKi8KKyAgICBpZiAoIGNoYXJjb2RlIDwgMCB8fCBjaGFyY29kZSA+IDI1NSApCisgICAgICByZXR1cm4gLTE7CisKKyAgICBnbHlwaF9uYW1lID0gcHNuYW1lcy0+YWRvYmVfc3RkX3N0cmluZ3MoCisgICAgICAgICAgICAgICAgICAgcHNuYW1lcy0+YWRvYmVfc3RkX2VuY29kaW5nW2NoYXJjb2RlXSk7CisKKyAgICBmb3IgKCBuID0gMDsgbiA8IGRlY29kZXItPm51bV9nbHlwaHM7IG4rKyApCisgICAgeworICAgICAgRlRfU3RyaW5nKiAgbmFtZSA9IChGVF9TdHJpbmcqKWRlY29kZXItPmdseXBoX25hbWVzW25dOworCisKKyAgICAgIGlmICggbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICBuYW1lWzBdID09IGdseXBoX25hbWVbMF0gICAgICAgICAgICYmCisgICAgICAgICAgIGZ0X3N0cmNtcCggbmFtZSwgZ2x5cGhfbmFtZSApID09IDAgKQorICAgICAgICByZXR1cm4gKEZUX0ludCluOworICAgIH0KKworICAgIHJldHVybiAtMTsKKyAgfQorCisKKyNpZmRlZiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE1OCw2ICsyMDgsMTUgQEAKICAgfQogCiAKKyAgLyogcGFyc2UgYSBzaW5nbGUgVHlwZSAxIGdseXBoICovCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICB0MV9kZWNvZGVyX3BhcnNlX2dseXBoKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaCApCisgIHsKKyAgICByZXR1cm4gZGVjb2Rlci0+cGFyc2VfY2FsbGJhY2soIGRlY29kZXIsIGdseXBoICk7CisgIH0KKworCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03ODAsMTAgKzgzOSwxOSBAQAogICAgICAgICAgICAgLyogcG9pbnQgd2l0aG91dCBhZGRpbmcgYW55IHBvaW50IHRvIHRoZSBvdXRsaW5lICAgICovCiAgICAgICAgICAgICBpZHggPSBkZWNvZGVyLT5udW1fZmxleF92ZWN0b3JzKys7CiAgICAgICAgICAgICBpZiAoIGlkeCA+IDAgJiYgaWR4IDwgNyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIGluIG1hbGZvcm1lZCBmb250cyBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIG90aGVyICovCisgICAgICAgICAgICAgIC8qIG9wY29kZXMgaW4gdGhlIG1pZGRsZSBvZiBhIGZsZXggKHdoaWNoIGRvbid0ICAgICovCisgICAgICAgICAgICAgIC8qIGluY3JlYXNlIGBudW1fZmxleF92ZWN0b3JzJyk7IHdlIHRodXMgaGF2ZSB0byAgICovCisgICAgICAgICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgY2FuIGFkZCBhIHBvaW50ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgIGlmICggRlRfU0VUX0VSUk9SKCB0MV9idWlsZGVyX2NoZWNrX3BvaW50cyggYnVpbGRlciwgMSApICkgKQorICAgICAgICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworCiAgICAgICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQnl0ZSkoIGlkeCA9PSAzIHx8IGlkeCA9PSA2ICkgKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAKQEAgLTg1NSw3ICs5MjMsOSBAQAogCiAKICAgICAgICAgICAgICAgZm9yICggbW0gPSAxOyBtbSA8IGJsZW5kLT5udW1fZGVzaWduczsgbW0rKyApCi0gICAgICAgICAgICAgICAgdG1wICs9IEZUX011bEZpeCggKmRlbHRhKyssIGJsZW5kLT53ZWlnaHRfdmVjdG9yW21tXSApOworICAgICAgICAgICAgICAgIHRtcCA9IEFERF9MT05HKCB0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggKmRlbHRhKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPndlaWdodF92ZWN0b3JbbW1dICkgKTsKIAogICAgICAgICAgICAgICAqdmFsdWVzKysgPSB0bXA7CiAgICAgICAgICAgICB9CkBAIC04OTUsNyArOTY1LDcgQEAKICAgICAgICAgICBpZiAoIGFyZ19jbnQgIT0gMiApCiAgICAgICAgICAgICBnb3RvIFVuZXhwZWN0ZWRfT3RoZXJTdWJyOwogCi0gICAgICAgICAgdG9wWzBdICs9IHRvcFsxXTsgLyogWFhYIChvdmVyfHVuZGVyKWZsb3cgKi8KKyAgICAgICAgICB0b3BbMF0gPSBBRERfTE9ORyggdG9wWzBdLCB0b3BbMV0gKTsKIAogICAgICAgICAgIGtub3duX290aGVyc3Vicl9yZXN1bHRfY250ID0gMTsKICAgICAgICAgICBicmVhazsKQEAgLTkwNiw3ICs5NzYsNyBAQAogICAgICAgICAgIGlmICggYXJnX2NudCAhPSAyICkKICAgICAgICAgICAgIGdvdG8gVW5leHBlY3RlZF9PdGhlclN1YnI7CiAKLSAgICAgICAgICB0b3BbMF0gLT0gdG9wWzFdOyAvKiBYWFggKG92ZXJ8dW5kZXIpZmxvdyAqLworICAgICAgICAgIHRvcFswXSA9IFNVQl9MT05HKCB0b3BbMF0sIHRvcFsxXSApOwogCiAgICAgICAgICAga25vd25fb3RoZXJzdWJyX3Jlc3VsdF9jbnQgPSAxOwogICAgICAgICAgIGJyZWFrOwpAQCAtMTEzOCwxMSArMTIwOCwxMyBAQAogCiAgICAgICAgICAgYnVpbGRlci0+cGFyc2Vfc3RhdGUgPSBUMV9QYXJzZV9IYXZlX1dpZHRoOwogCi0gICAgICAgICAgYnVpbGRlci0+bGVmdF9iZWFyaW5nLnggKz0gdG9wWzBdOwotICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueCAgICAgICA9IHRvcFsxXTsKLSAgICAgICAgICBidWlsZGVyLT5hZHZhbmNlLnkgICAgICAgPSAwOworICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gQUREX0xPTkcoIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFswXSApOwogCi0gICAgICAgICAgb3JpZ194ID0geCA9IGJ1aWxkZXItPnBvc194ICsgdG9wWzBdOworICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueCA9IHRvcFsxXTsKKyAgICAgICAgICBidWlsZGVyLT5hZHZhbmNlLnkgPSAwOworCisgICAgICAgICAgb3JpZ194ID0geCA9IEFERF9MT05HKCBidWlsZGVyLT5wb3NfeCwgdG9wWzBdICk7CiAgICAgICAgICAgb3JpZ195ID0geSA9IGJ1aWxkZXItPnBvc195OwogCiAgICAgICAgICAgRlRfVU5VU0VEKCBvcmlnX3kgKTsKQEAgLTExNjgsMTMgKzEyNDAsMTYgQEAKIAogICAgICAgICAgIGJ1aWxkZXItPnBhcnNlX3N0YXRlID0gVDFfUGFyc2VfSGF2ZV9XaWR0aDsKIAotICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ICs9IHRvcFswXTsKLSAgICAgICAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSArPSB0b3BbMV07Ci0gICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS54ICAgICAgID0gdG9wWzJdOwotICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueSAgICAgICA9IHRvcFszXTsKKyAgICAgICAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueCA9IEFERF9MT05HKCBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BbMF0gKTsKKyAgICAgICAgICBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSA9IEFERF9MT05HKCBidWlsZGVyLT5sZWZ0X2JlYXJpbmcueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BbMV0gKTsKIAotICAgICAgICAgIHggPSBidWlsZGVyLT5wb3NfeCArIHRvcFswXTsKLSAgICAgICAgICB5ID0gYnVpbGRlci0+cG9zX3kgKyB0b3BbMV07CisgICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS54ID0gdG9wWzJdOworICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueSA9IHRvcFszXTsKKworICAgICAgICAgIHggPSBBRERfTE9ORyggYnVpbGRlci0+cG9zX3gsIHRvcFswXSApOworICAgICAgICAgIHkgPSBBRERfTE9ORyggYnVpbGRlci0+cG9zX3ksIHRvcFsxXSApOwogCiAgICAgICAgICAgLyogdGhlIGBtZXRyaWNzX29ubHknIGluZGljYXRlcyB0aGF0IHdlIG9ubHkgd2FudCB0byBjb21wdXRlICovCiAgICAgICAgICAgLyogdGhlIGdseXBoJ3MgbWV0cmljcyAobHNiICsgYWR2YW5jZSB3aWR0aCksIG5vdCBsb2FkIHRoZSAgICovCkBAIC0xMjAxLDEzICsxMjc2LDE0IEBACiAgICAgICAgICAgaWYgKCBGVF9TRVRfRVJST1IoIHQxX2J1aWxkZXJfc3RhcnRfcG9pbnQoIGJ1aWxkZXIsIHgsIHkgKSApICkKICAgICAgICAgICAgIGdvdG8gRmFpbDsKIAotICAgICAgICAgIHggKz0gdG9wWzBdOworICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgdG9wWzBdICk7CiAgICAgICAgICAgZ290byBBZGRfTGluZTsKIAogICAgICAgICBjYXNlIG9wX2htb3ZldG86CiAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBobW92ZXRvIiApKTsKIAotICAgICAgICAgIHggKz0gdG9wWzBdOworICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgdG9wWzBdICk7CisKICAgICAgICAgICBpZiAoICFkZWNvZGVyLT5mbGV4X3N0YXRlICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIGJ1aWxkZXItPnBhcnNlX3N0YXRlID09IFQxX1BhcnNlX1N0YXJ0ICkKQEAgLTEyMjMsMTIgKzEyOTksMTQgQEAKICAgICAgICAgICAgICAgIEZUX1NFVF9FUlJPUiggdDFfYnVpbGRlcl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDMgKSApICAgKQogICAgICAgICAgICAgZ290byBGYWlsOwogCi0gICAgICAgICAgeCArPSB0b3BbMF07CisgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCB0b3BbMF0gKTsKICAgICAgICAgICB0MV9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwotICAgICAgICAgIHggKz0gdG9wWzFdOwotICAgICAgICAgIHkgKz0gdG9wWzJdOworCisgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCB0b3BbMV0gKTsKKyAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIHRvcFsyXSApOwogICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0gICAgICAgICAgeSArPSB0b3BbM107CisKKyAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIHRvcFszXSApOwogICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CiAgICAgICAgICAgYnJlYWs7CiAKQEAgLTEyMzgsOCArMTMxNiw4IEBACiAgICAgICAgICAgaWYgKCBGVF9TRVRfRVJST1IoIHQxX2J1aWxkZXJfc3RhcnRfcG9pbnQoIGJ1aWxkZXIsIHgsIHkgKSApICkKICAgICAgICAgICAgIGdvdG8gRmFpbDsKIAotICAgICAgICAgIHggKz0gdG9wWzBdOwotICAgICAgICAgIHkgKz0gdG9wWzFdOworICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgdG9wWzBdICk7CisgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCB0b3BbMV0gKTsKIAogICAgICAgICBBZGRfTGluZToKICAgICAgICAgICBpZiAoIEZUX1NFVF9FUlJPUiggdDFfYnVpbGRlcl9hZGRfcG9pbnQxKCBidWlsZGVyLCB4LCB5ICkgKSApCkBAIC0xMjQ5LDggKzEzMjcsOSBAQAogICAgICAgICBjYXNlIG9wX3Jtb3ZldG86CiAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBybW92ZXRvIiApKTsKIAotICAgICAgICAgIHggKz0gdG9wWzBdOwotICAgICAgICAgIHkgKz0gdG9wWzFdOworICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgdG9wWzBdICk7CisgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCB0b3BbMV0gKTsKKwogICAgICAgICAgIGlmICggIWRlY29kZXItPmZsZXhfc3RhdGUgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggYnVpbGRlci0+cGFyc2Vfc3RhdGUgPT0gVDFfUGFyc2VfU3RhcnQgKQpAQCAtMTI2NiwxNiArMTM0NSwxNiBAQAogICAgICAgICAgICAgICAgRlRfU0VUX0VSUk9SKCB0MV9idWlsZGVyX2NoZWNrX3BvaW50cyggYnVpbGRlciwgMyApICkgICApCiAgICAgICAgICAgICBnb3RvIEZhaWw7CiAKLSAgICAgICAgICB4ICs9IHRvcFswXTsKLSAgICAgICAgICB5ICs9IHRvcFsxXTsKKyAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIHRvcFswXSApOworICAgICAgICAgIHkgPSBBRERfTE9ORyggeSwgdG9wWzFdICk7CiAgICAgICAgICAgdDFfYnVpbGRlcl9hZGRfcG9pbnQoIGJ1aWxkZXIsIHgsIHksIDAgKTsKIAotICAgICAgICAgIHggKz0gdG9wWzJdOwotICAgICAgICAgIHkgKz0gdG9wWzNdOworICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgdG9wWzJdICk7CisgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCB0b3BbM10gKTsKICAgICAgICAgICB0MV9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwogCi0gICAgICAgICAgeCArPSB0b3BbNF07Ci0gICAgICAgICAgeSArPSB0b3BbNV07CisgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCB0b3BbNF0gKTsKKyAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIHRvcFs1XSApOwogICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CiAgICAgICAgICAgYnJlYWs7CiAKQEAgLTEyODYsMTIgKzEzNjUsMTQgQEAKICAgICAgICAgICAgICAgIEZUX1NFVF9FUlJPUiggdDFfYnVpbGRlcl9jaGVja19wb2ludHMoIGJ1aWxkZXIsIDMgKSApICAgKQogICAgICAgICAgICAgZ290byBGYWlsOwogCi0gICAgICAgICAgeSArPSB0b3BbMF07CisgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCB0b3BbMF0gKTsKICAgICAgICAgICB0MV9idWlsZGVyX2FkZF9wb2ludCggYnVpbGRlciwgeCwgeSwgMCApOwotICAgICAgICAgIHggKz0gdG9wWzFdOwotICAgICAgICAgIHkgKz0gdG9wWzJdOworCisgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCB0b3BbMV0gKTsKKyAgICAgICAgICB5ID0gQUREX0xPTkcoIHksIHRvcFsyXSApOwogICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAwICk7Ci0gICAgICAgICAgeCArPSB0b3BbM107CisKKyAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIHRvcFszXSApOwogICAgICAgICAgIHQxX2J1aWxkZXJfYWRkX3BvaW50KCBidWlsZGVyLCB4LCB5LCAxICk7CiAgICAgICAgICAgYnJlYWs7CiAKQEAgLTEzMDEsMTMgKzEzODIsMTQgQEAKICAgICAgICAgICBpZiAoIEZUX1NFVF9FUlJPUiggdDFfYnVpbGRlcl9zdGFydF9wb2ludCggYnVpbGRlciwgeCwgeSApICkgKQogICAgICAgICAgICAgZ290byBGYWlsOwogCi0gICAgICAgICAgeSArPSB0b3BbMF07CisgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCB0b3BbMF0gKTsKICAgICAgICAgICBnb3RvIEFkZF9MaW5lOwogCiAgICAgICAgIGNhc2Ugb3Bfdm1vdmV0bzoKICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHZtb3ZldG8iICkpOwogCi0gICAgICAgICAgeSArPSB0b3BbMF07CisgICAgICAgICAgeSA9IEFERF9MT05HKCB5LCB0b3BbMF0gKTsKKwogICAgICAgICAgIGlmICggIWRlY29kZXItPmZsZXhfc3RhdGUgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggYnVpbGRlci0+cGFyc2Vfc3RhdGUgPT0gVDFfUGFyc2VfU3RhcnQgKQpAQCAtMTQ2NCw3ICsxNTQ2LDcgQEAKICAgICAgICAgICAvKiByZWNvcmQgdmVydGljYWwgaGludCAqLwogICAgICAgICAgIGlmICggaGludGVyICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICB0b3BbMF0gKz0gb3JpZ194OworICAgICAgICAgICAgdG9wWzBdID0gQUREX0xPTkcoIHRvcFswXSwgb3JpZ194ICk7CiAgICAgICAgICAgICBoaW50ZXItPnN0ZW0oIGhpbnRlci0+aGludHMsIDAsIHRvcCApOwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKQEAgLTE0NzgsOSArMTU2MCw5IEBACiAgICAgICAgICAgICBGVF9Qb3MgIGR4ID0gb3JpZ194OwogCiAKLSAgICAgICAgICAgIHRvcFswXSArPSBkeDsKLSAgICAgICAgICAgIHRvcFsyXSArPSBkeDsKLSAgICAgICAgICAgIHRvcFs0XSArPSBkeDsKKyAgICAgICAgICAgIHRvcFswXSA9IEFERF9MT05HKCB0b3BbMF0sIGR4ICk7CisgICAgICAgICAgICB0b3BbMl0gPSBBRERfTE9ORyggdG9wWzJdLCBkeCApOworICAgICAgICAgICAgdG9wWzRdID0gQUREX0xPTkcoIHRvcFs0XSwgZHggKTsKICAgICAgICAgICAgIGhpbnRlci0+c3RlbTMoIGhpbnRlci0+aGludHMsIDAsIHRvcCApOwogICAgICAgICAgIH0KICAgICAgICAgICBicmVhazsKQEAgLTE1NTYsMTQgKzE2MzgsMjg2IEBACiAgICAgcmV0dXJuIEZUX1RIUk9XKCBTdGFja19VbmRlcmZsb3cgKTsKICAgfQogCisjZWxzZSAvKiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUgKi8KIAotICAvKiBwYXJzZSBhIHNpbmdsZSBUeXBlIDEgZ2x5cGggKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUGFyc2VzIGEgZ2l2ZW4gVHlwZSAxIGNoYXJzdHJpbmdzIHByb2dyYW0gdG8gZXh0cmFjdCB3aWR0aCAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVjb2RlciAgICAgICAgIDo6IFRoZSBjdXJyZW50IFR5cGUgMSBkZWNvZGVyLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyc3RyaW5nX2Jhc2UgOjogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgY2hhcnN0cmluZyBzdHJlYW0uICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJzdHJpbmdfbGVuICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIHQxX2RlY29kZXJfcGFyc2VfZ2x5cGgoIFQxX0RlY29kZXIgIGRlY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoICkKKyAgdDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzKCBUMV9EZWNvZGVyICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgIGNoYXJzdHJpbmdfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBjaGFyc3RyaW5nX2xlbiApCiAgIHsKLSAgICByZXR1cm4gZGVjb2Rlci0+cGFyc2VfY2FsbGJhY2soIGRlY29kZXIsIGdseXBoICk7CisgICAgVDFfRGVjb2Rlcl9ab25lICB6b25lOworICAgIEZUX0J5dGUqICAgICAgICAgaXA7CisgICAgRlRfQnl0ZSogICAgICAgICBsaW1pdDsKKyAgICBUMV9CdWlsZGVyICAgICAgIGJ1aWxkZXIgPSAmZGVjb2Rlci0+YnVpbGRlcjsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgRlRfQm9vbCAgICAgICAgICBib2wgPSBUUlVFOworI2VuZGlmCisKKworICAgIC8qIEZpcnN0IG9mIGFsbCwgaW5pdGlhbGl6ZSB0aGUgZGVjb2RlciAqLworICAgIGRlY29kZXItPnRvcCAgPSBkZWNvZGVyLT5zdGFjazsKKyAgICBkZWNvZGVyLT56b25lID0gZGVjb2Rlci0+em9uZXM7CisgICAgem9uZSAgICAgICAgICA9IGRlY29kZXItPnpvbmVzOworCisgICAgYnVpbGRlci0+cGFyc2Vfc3RhdGUgPSBUMV9QYXJzZV9TdGFydDsKKworICAgIEZUX1RSQUNFNCgoICJcbiIKKyAgICAgICAgICAgICAgICAiU3RhcnQgY2hhcnN0cmluZzogZ2V0IHdpZHRoXG4iICkpOworCisgICAgem9uZS0+YmFzZSAgICAgICAgICAgPSBjaGFyc3RyaW5nX2Jhc2U7CisgICAgbGltaXQgPSB6b25lLT5saW1pdCAgPSBjaGFyc3RyaW5nX2Jhc2UgKyBjaGFyc3RyaW5nX2xlbjsKKyAgICBpcCAgICA9IHpvbmUtPmN1cnNvciA9IHpvbmUtPmJhc2U7CisKKyAgICAvKiBub3csIGV4ZWN1dGUgbG9vcCAqLworICAgIHdoaWxlICggaXAgPCBsaW1pdCApCisgICAgeworICAgICAgRlRfTG9uZyogICAgIHRvcCAgID0gZGVjb2Rlci0+dG9wOworICAgICAgVDFfT3BlcmF0b3IgIG9wICAgID0gb3Bfbm9uZTsKKyAgICAgIEZUX0ludDMyICAgICB2YWx1ZSA9IDA7CisKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICBpZiAoIGJvbCApCisgICAgICB7CisgICAgICAgIEZUX1RSQUNFNSgoICIgKCVkKSIsIGRlY29kZXItPnRvcCAtIGRlY29kZXItPnN0YWNrICkpOworICAgICAgICBib2wgPSBGQUxTRTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIERlY29kZSBvcGVyYXRvciBvciBvcGVyYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgLyogZmlyc3Qgb2YgYWxsLCBkZWNvbXByZXNzIG9wZXJhdG9yIG9yIHZhbHVlICovCisgICAgICBzd2l0Y2ggKCAqaXArKyApCisgICAgICB7CisgICAgICBjYXNlIDE6CisgICAgICBjYXNlIDM6CisgICAgICBjYXNlIDQ6CisgICAgICBjYXNlIDU6CisgICAgICBjYXNlIDY6CisgICAgICBjYXNlIDc6CisgICAgICBjYXNlIDg6CisgICAgICBjYXNlIDk6CisgICAgICBjYXNlIDEwOgorICAgICAgY2FzZSAxMToKKyAgICAgIGNhc2UgMTQ6CisgICAgICBjYXNlIDE1OgorICAgICAgY2FzZSAyMToKKyAgICAgIGNhc2UgMjI6CisgICAgICBjYXNlIDMwOgorICAgICAgY2FzZSAzMToKKyAgICAgICAgZ290byBOb19XaWR0aDsKKworICAgICAgY2FzZSAxMzoKKyAgICAgICAgb3AgPSBvcF9oc2J3OworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAxMjoKKyAgICAgICAgaWYgKCBpcCA+PSBsaW1pdCApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3M6IgorICAgICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGVzY2FwZSAoMTIrRU9GKVxuIiApKTsKKyAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoICppcCsrICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDc6CisgICAgICAgICAgb3AgPSBvcF9zYnc7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBnb3RvIE5vX1dpZHRoOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIDI1NTogICAgLyogZm91ciBieXRlcyBpbnRlZ2VyICovCisgICAgICAgIGlmICggaXAgKyA0ID4gbGltaXQgKQorICAgICAgICB7CisgICAgICAgICAgRlRfRVJST1IoKCAidDFfZGVjb2Rlcl9wYXJzZV9tZXRyaWNzOiIKKyAgICAgICAgICAgICAgICAgICAgICIgdW5leHBlY3RlZCBFT0YgaW4gaW50ZWdlclxuIiApKTsKKyAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKSggKCAoRlRfVUludDMyKWlwWzBdIDw8IDI0ICkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMilpcFsxXSA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIChGVF9VSW50MzIpaXBbMl0gPDwgOCAgKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludDMyKWlwWzNdICAgICAgICAgKTsKKyAgICAgICAgaXAgKz0gNDsKKworICAgICAgICAvKiBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24sIHZhbHVlcyA+IDMyMDAwIG9yIDwgLTMyMDAwIG11c3QgKi8KKyAgICAgICAgLyogYmUgZm9sbG93ZWQgYnkgYSBgZGl2JyBvcGVyYXRvciB0byBtYWtlIHRoZSByZXN1bHQgYmUgaW4gdGhlICAgICovCisgICAgICAgIC8qIHJhbmdlIFstMzIwMDA7MzIwMDBdLiAgV2UgZXhwZWN0IHRoYXQgdGhlIHNlY29uZCBhcmd1bWVudCBvZiAgICAqLworICAgICAgICAvKiBgZGl2JyBpcyBub3QgYSBsYXJnZSBudW1iZXIuICBBZGRpdGlvbmFsbHksIHdlIGRvbid0IGhhbmRsZSAgICAgKi8KKyAgICAgICAgLyogc3R1ZmYgbGlrZSBgPGxhcmdlMT4gPGxhcmdlMj4gPG51bT4gZGl2IDxudW0+IGRpdicgb3IgICAgICAgICAgICovCisgICAgICAgIC8qIDxsYXJnZTE+IDxsYXJnZTI+IDxudW0+IGRpdiBkaXYnLiAgVGhpcyBpcyBwcm9iYWJseSBub3QgYWxsb3dlZCAqLworICAgICAgICAvKiBhbnl3YXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCB2YWx1ZSA+IDMyMDAwIHx8IHZhbHVlIDwgLTMyMDAwICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfbWV0cmljczoiCisgICAgICAgICAgICAgICAgICAgICAiIGxhcmdlIGludGVnZXIgZm91bmQgZm9yIHdpZHRoXG4iICkpOworICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKSggKEZUX1VJbnQzMil2YWx1ZSA8PCAxNiApOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICggaXBbLTFdID49IDMyICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggaXBbLTFdIDwgMjQ3ICkKKyAgICAgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKWlwWy0xXSAtIDEzOTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCArK2lwID4gbGltaXQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3M6IgorICAgICAgICAgICAgICAgICAgICAgICAgICIgdW5leHBlY3RlZCBFT0YgaW4gaW50ZWdlclxuIiApKTsKKyAgICAgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggaXBbLTJdIDwgMjUxICkKKyAgICAgICAgICAgICAgdmFsdWUgPSAgICAoICggaXBbLTJdIC0gMjQ3ICkgKiAyNTYgKSArIGlwWy0xXSArIDEwODsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgdmFsdWUgPSAtKCAoICggaXBbLTJdIC0gMjUxICkgKiAyNTYgKSArIGlwWy0xXSArIDEwOCApOworICAgICAgICAgIH0KKworICAgICAgICAgIHZhbHVlID0gKEZUX0ludDMyKSggKEZUX1VJbnQzMil2YWx1ZSA8PCAxNiApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfbWV0cmljczoiCisgICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgYnl0ZSAoJWQpXG4iLCBpcFstMV0gKSk7CisgICAgICAgICAgZ290byBTeW50YXhfRXJyb3I7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgUHVzaCB2YWx1ZSBvbiBzdGFjaywgb3IgcHJvY2VzcyBvcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoIG9wID09IG9wX25vbmUgKQorICAgICAgeworICAgICAgICBpZiAoIHRvcCAtIGRlY29kZXItPnN0YWNrID49IFQxX01BWF9DSEFSU1RSSU5HU19PUEVSQU5EUyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3M6IHN0YWNrIG92ZXJmbG93XG4iICkpOworICAgICAgICAgIGdvdG8gU3ludGF4X0Vycm9yOworICAgICAgICB9CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIEZUX1RSQUNFNCgoICIgJWQiLCB2YWx1ZSAvIDY1NTM2ICkpOworI2VuZGlmCisKKyAgICAgICAgKnRvcCsrICAgICAgID0gdmFsdWU7CisgICAgICAgIGRlY29kZXItPnRvcCA9IHRvcDsKKyAgICAgIH0KKyAgICAgIGVsc2UgIC8qIGdlbmVyYWwgb3BlcmF0b3IgKi8KKyAgICAgIHsKKyAgICAgICAgRlRfSW50ICBudW1fYXJncyA9IHQxX2FyZ3NfY291bnRbb3BdOworCisKKyAgICAgICAgRlRfQVNTRVJUKCBudW1fYXJncyA+PSAwICk7CisKKyAgICAgICAgaWYgKCB0b3AgLSBkZWNvZGVyLT5zdGFjayA8IG51bV9hcmdzICkKKyAgICAgICAgICBnb3RvIFN0YWNrX1VuZGVyZmxvdzsKKworI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisKKyAgICAgICAgaWYgKCB0b3AgLSBkZWNvZGVyLT5zdGFjayAhPSBudW1fYXJncyApCisgICAgICAgICAgRlRfVFJBQ0UwKCggInQxX2RlY29kZXJfcGFyc2VfbWV0cmljczoiCisgICAgICAgICAgICAgICAgICAgICAgIiB0b28gbXVjaCBvcGVyYW5kcyBvbiB0aGUgc3RhY2siCisgICAgICAgICAgICAgICAgICAgICAgIiAoc2VlbiAlZCwgZXhwZWN0ZWQgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHRvcCAtIGRlY29kZXItPnN0YWNrLCBudW1fYXJncyApKTsKKworI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCisKKyAgICAgICAgdG9wIC09IG51bV9hcmdzOworCisgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgeworICAgICAgICBjYXNlIG9wX2hzYnc6CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiBoc2J3IiApKTsKKworICAgICAgICAgIGJ1aWxkZXItPnBhcnNlX3N0YXRlID0gVDFfUGFyc2VfSGF2ZV9XaWR0aDsKKworICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gQUREX0xPTkcoIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFswXSApOworCisgICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS54ID0gdG9wWzFdOworICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueSA9IDA7CisKKyAgICAgICAgICAvKiB3ZSBvbmx5IHdhbnQgdG8gY29tcHV0ZSB0aGUgZ2x5cGgncyBtZXRyaWNzICovCisgICAgICAgICAgLyogKGxzYiArIGFkdmFuY2Ugd2lkdGgpLCBub3QgbG9hZCB0aGUgcmVzdCBvZiAqLworICAgICAgICAgIC8qIGl0OyBzbyBleGl0IGltbWVkaWF0ZWx5ICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOworCisgICAgICAgIGNhc2Ugb3Bfc2J3OgorICAgICAgICAgIEZUX1RSQUNFNCgoICIgc2J3IiApKTsKKworICAgICAgICAgIGJ1aWxkZXItPnBhcnNlX3N0YXRlID0gVDFfUGFyc2VfSGF2ZV9XaWR0aDsKKworICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54ID0gQUREX0xPTkcoIGJ1aWxkZXItPmxlZnRfYmVhcmluZy54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFswXSApOworICAgICAgICAgIGJ1aWxkZXItPmxlZnRfYmVhcmluZy55ID0gQUREX0xPTkcoIGJ1aWxkZXItPmxlZnRfYmVhcmluZy55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFsxXSApOworCisgICAgICAgICAgYnVpbGRlci0+YWR2YW5jZS54ID0gdG9wWzJdOworICAgICAgICAgIGJ1aWxkZXItPmFkdmFuY2UueSA9IHRvcFszXTsKKworICAgICAgICAgIC8qIHdlIG9ubHkgd2FudCB0byBjb21wdXRlIHRoZSBnbHlwaCdzIG1ldHJpY3MgKi8KKyAgICAgICAgICAvKiAobHNiICsgYWR2YW5jZSB3aWR0aCksIG5vdCBsb2FkIHRoZSByZXN0IG9mICovCisgICAgICAgICAgLyogaXQ7IHNvIGV4aXQgaW1tZWRpYXRlbHkgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3M6IgorICAgICAgICAgICAgICAgICAgICAgIiB1bmhhbmRsZWQgb3Bjb2RlICVkXG4iLCBvcCApKTsKKyAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKyAgICAgICAgfQorCisgICAgICB9IC8qIGdlbmVyYWwgb3BlcmF0b3IgcHJvY2Vzc2luZyAqLworCisgICAgfSAvKiB3aGlsZSBpcCA8IGxpbWl0ICovCisKKyAgICBGVF9UUkFDRTQoKCAiLi5lbmQuLlxuXG4iICkpOworCisgIE5vX1dpZHRoOgorICAgIEZUX0VSUk9SKCggInQxX2RlY29kZXJfcGFyc2VfbWV0cmljczoiCisgICAgICAgICAgICAgICAiIG5vIHdpZHRoLCBmb3VuZCBvcCAlZCBpbnN0ZWFkXG4iLAorICAgICAgICAgICAgICAgaXBbLTFdICkpOworICBTeW50YXhfRXJyb3I6CisgICAgcmV0dXJuIEZUX1RIUk9XKCBTeW50YXhfRXJyb3IgKTsKKworICBTdGFja19VbmRlcmZsb3c6CisgICAgcmV0dXJuIEZUX1RIUk9XKCBTdGFja19VbmRlcmZsb3cgKTsKICAgfQorI2VuZGlmIC8qIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORSAqLwogCiAKICAgLyogaW5pdGlhbGl6ZSBUMSBkZWNvZGVyICovCkBAIC0xNjE4LDcgKzE5NzIsMTYgQEAKICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgdDFfZGVjb2Rlcl9kb25lKCBUMV9EZWNvZGVyICBkZWNvZGVyICkKICAgeworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZGVjb2Rlci0+YnVpbGRlci5tZW1vcnk7CisKKwogICAgIHQxX2J1aWxkZXJfZG9uZSggJmRlY29kZXItPmJ1aWxkZXIgKTsKKworICAgIGlmICggZGVjb2Rlci0+Y2YyX2luc3RhbmNlLmZpbmFsaXplciApCisgICAgeworICAgICAgZGVjb2Rlci0+Y2YyX2luc3RhbmNlLmZpbmFsaXplciggZGVjb2Rlci0+Y2YyX2luc3RhbmNlLmRhdGEgKTsKKyAgICAgIEZUX0ZSRUUoIGRlY29kZXItPmNmMl9pbnN0YW5jZS5kYXRhICk7CisgICAgfQogICB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL3BzYXV4L3QxZGVjb2RlLmggYi9zcmMvcHNhdXgvdDFkZWNvZGUuaAppbmRleCAxMmMyN2RlLi4xZDk3MThkIDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvdDFkZWNvZGUuaAorKysgYi9zcmMvcHNhdXgvdDFkZWNvZGUuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IFR5cGUgMSBkZWNvZGluZyByb3V0aW5lcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzEsNyArMzEsMTEgQEAKICAgRlRfQ0FMTEJBQ0tfVEFCTEUKICAgY29uc3QgVDFfRGVjb2Rlcl9GdW5jc1JlYyAgdDFfZGVjb2Rlcl9mdW5jczsKIAorICBGVF9MT0NBTCggRlRfSW50ICkKKyAgdDFfbG9va3VwX2dseXBoX2J5X3N0ZGNoYXJjb2RlX3BzKCBQU19EZWNvZGVyKiAgZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgY2hhcmNvZGUgKTsKIAorI2lmZGVmIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICB0MV9kZWNvZGVyX3BhcnNlX2dseXBoKCBUMV9EZWNvZGVyICBkZWNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCApOwpAQCAtNDAsNiArNDQsMTIgQEAKICAgdDFfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5ncyggVDFfRGVjb2RlciAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgbGVuICk7CisjZWxzZQorICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICB0MV9kZWNvZGVyX3BhcnNlX21ldHJpY3MoIFQxX0RlY29kZXIgIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgY2hhcnN0cmluZ19iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGNoYXJzdHJpbmdfbGVuICk7CisjZW5kaWYKIAogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICB0MV9kZWNvZGVyX2luaXQoIFQxX0RlY29kZXIgICAgICAgICAgIGRlY29kZXIsCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvSmFtZmlsZSBiL3NyYy9wc2hpbnRlci9KYW1maWxlCmluZGV4IDJiNjUyNzEuLjNmNWYwYWUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9KYW1maWxlCisrKyBiL3NyYy9wc2hpbnRlci9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy9wc2hpbnRlciBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvbW9kdWxlLm1rIGIvc3JjL3BzaGludGVyL21vZHVsZS5tawppbmRleCA3N2UzNWM0Li4wNjcwN2JlIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvbW9kdWxlLm1rCisrKyBiL3NyYy9wc2hpbnRlci9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGFsZ28uYyBiL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMKaW5kZXggOWFkMWEzYS4uYjk4MDc3YyAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGFsZ28uYworKysgYi9zcmMvcHNoaW50ZXIvcHNoYWxnby5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgaGludGluZyBhbGdvcml0aG0gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCkBAIC0yNiw3ICsyNiw3IEBACiAKIAogI3VuZGVmICBGVF9DT01QT05FTlQKLSNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9wc2hhbGdvMgorI2RlZmluZSBGVF9DT01QT05FTlQgIHRyYWNlX3BzaGFsZ28KIAogCiAjaWZkZWYgREVCVUdfSElOVEVSCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNoYWxnby5oIGIvc3JjL3BzaGludGVyL3BzaGFsZ28uaAppbmRleCA2MmU5N2QxLi5jNTA2ODNmIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNoYWxnby5oCisrKyBiL3NyYy9wc2hpbnRlci9wc2hhbGdvLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdFNjcmlwdCBoaW50aW5nIGFsZ29yaXRobSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMgYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jCmluZGV4IGM2ODc3MGMuLjI5ZjMyOGQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaGdsb2IuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIFBvc3RTY3JpcHQgaGludGVyIGdsb2JhbCBoaW50aW5nIG1hbmFnZW1lbnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICBJbnNwaXJlZCBieSB0aGUgbmV3IGF1dG8taGludGVyIG1vZHVsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGdsb2IuaCBiL3NyYy9wc2hpbnRlci9wc2hnbG9iLmgKaW5kZXggODgwMWNiYS4uY2Y4MGJmNCAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGdsb2IuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgaGludGVyIGdsb2JhbCBoaW50aW5nIG1hbmFnZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNoaW50ZXIuYyBiL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCmluZGV4IGU2NzI3YWUuLjBlZWRhYzQgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCisrKyBiL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBvc3RTY3JpcHQgSGludGluZyBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywxMyArMTcsMTMgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKKyNpbmNsdWRlICJwc2hhbGdvLmMiCisjaW5jbHVkZSAicHNoZ2xvYi5jIgorI2luY2x1ZGUgInBzaG1vZC5jIgogI2luY2x1ZGUgInBzaHBpYy5jIgogI2luY2x1ZGUgInBzaHJlYy5jIgotI2luY2x1ZGUgInBzaGdsb2IuYyIKLSNpbmNsdWRlICJwc2hhbGdvLmMiCi0jaW5jbHVkZSAicHNobW9kLmMiCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNobW9kLmMgYi9zcmMvcHNoaW50ZXIvcHNobW9kLmMKaW5kZXggODYwZGMwYS4uMGI4ZjZmOSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaG1vZC5jCisrKyBiL3NyYy9wc2hpbnRlci9wc2htb2QuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaG1vZC5oIGIvc3JjL3BzaGludGVyL3BzaG1vZC5oCmluZGV4IDFkMmI0MGYuLjU1NmRlMmYgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2htb2QuaAorKysgYi9zcmMvcHNoaW50ZXIvcHNobW9kLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdFNjcmlwdCBoaW50ZXIgbW9kdWxlIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hudGVyci5oIGIvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKaW5kZXggNzNkMTQ0ZS4uYjlkMDJkMiAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFMgSGludGVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hwaWMuYyBiL3NyYy9wc2hpbnRlci9wc2hwaWMuYwppbmRleCBjMGQzYTY0Li40NjVhZDMxIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNocGljLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaHBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc2hpbnRlciBtb2R1bGUuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNocGljLmggYi9zcmMvcHNoaW50ZXIvcHNocGljLmgKaW5kZXggOGQ5YTAxYy4uNDQ2OWJhOCAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaHBpYy5oCisrKyBiL3NyYy9wc2hpbnRlci9wc2hwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNoaW50ZXIgbW9kdWxlLiAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaHJlYy5jIGIvc3JjL3BzaGludGVyL3BzaHJlYy5jCmluZGV4IGZmZjZkMzQuLjY2NDhkMTMgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hyZWMuYworKysgYi9zcmMvcHNoaW50ZXIvcHNocmVjLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgUG9zdFNjcmlwdCBoaW50cyByZWNvcmRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hyZWMuaCBiL3NyYy9wc2hpbnRlci9wc2hyZWMuaAppbmRleCBlMTBiYzJiLi43ZTNkZmUwIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNocmVjLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaHJlYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RzY3JpcHQgKFR5cGUxL1R5cGUyKSBoaW50cyByZWNvcmRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcnVsZXMubWsgYi9zcmMvcHNoaW50ZXIvcnVsZXMubWsKaW5kZXggMmJlNjQwNC4uOTY2NjkwZSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3J1bGVzLm1rCisrKyBiL3NyYy9wc2hpbnRlci9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9KYW1maWxlIGIvc3JjL3BzbmFtZXMvSmFtZmlsZQppbmRleCA1YTZlMmMwLi5hMGZkMzczIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9KYW1maWxlCisrKyBiL3NyYy9wc25hbWVzL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL3BzbmFtZXMgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvbW9kdWxlLm1rIGIvc3JjL3BzbmFtZXMvbW9kdWxlLm1rCmluZGV4IGRkZDIyOTYuLjQxMGY0OGEgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL21vZHVsZS5taworKysgYi9zcmMvcHNuYW1lcy9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYyBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmMKaW5kZXggM2ZmOGNiOS4uODkyOWViZSAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYworKysgYi9zcmMvcHNuYW1lcy9wc21vZHVsZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBTTmFtZXMgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMyw4ICsyMywyMSBAQAogCiAjaW5jbHVkZSAicHNtb2R1bGUuaCIKIAorICAvKgorICAgKiAgVGhlIGZpbGUgYHBzdGFibGVzLmgnIHdpdGggaXRzIGFycmF5cyBhbmQgaXRzIGZ1bmN0aW9uCisgICAqICBgZnRfZ2V0X2Fkb2JlX2dseXBoX2luZGV4JyBpcyB1c2VmdWwgZm9yIG90aGVyIHByb2plY3RzIGFsc28gKGZvcgorICAgKiAgZXhhbXBsZSwgYHBkZml1bScgaXMgdXNpbmcgaXQpLiAgSG93ZXZlciwgaWYgdXNlZCBhcyBhIEMrKyBoZWFkZXIsCisgICAqICBpbmNsdWRpbmcgaXQgaW4gdHdvIGRpZmZlcmVudCBzb3VyY2UgZmlsZXMgbWFrZXMgaXQgbmVjZXNzYXJ5IHRvIHVzZQorICAgKiAgYGV4dGVybiBjb25zdCcgZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiBpdHMgYXJyYXlzLCBvdGhlcndpc2UgdGhlIGRhdGEKKyAgICogIHdvdWxkIGJlIGR1cGxpY2F0ZWQgYXMgbWFuZGF0ZWQgYnkgdGhlIEMrKyBzdGFuZGFyZC4KKyAgICoKKyAgICogIEZvciB0aGlzIHJlYXNvbiwgd2UgdXNlIGBERUZJTkVfUFNfVEFCTEVTJyB0byBndWFyZCB0aGUgZnVuY3Rpb24KKyAgICogIGRlZmluaXRpb25zLCBhbmQgYERFRklORV9QU19UQUJMRVNfREFUQScgdG8gcHJvdmlkZSBib3RoIHByb3BlciBhcnJheQorICAgKiAgZGVjbGFyYXRpb25zIGFuZCBkZWZpbml0aW9ucy4KKyAgICovCiAjaW5jbHVkZSAicHN0YWJsZXMuaCIKICNkZWZpbmUgIERFRklORV9QU19UQUJMRVMKKyNkZWZpbmUgIERFRklORV9QU19UQUJMRVNfREFUQQogI2luY2x1ZGUgInBzdGFibGVzLmgiCiAKICNpbmNsdWRlICJwc25hbWVyci5oIgpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaCBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmgKaW5kZXggNjk4M2I3OS4uM2U5NGY4YiAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaAorKysgYi9zcmMvcHNuYW1lcy9wc21vZHVsZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgUFNOYW1lcyBtb2R1bGUgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc25hbWVyci5oIGIvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaAppbmRleCBmOTBiZjVlLi4xNGViNzZjIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc25hbWVyci5oCisrKyBiL3NyYy9wc25hbWVzL3BzbmFtZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFMgbmFtZXMgbW9kdWxlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzbmFtZXMuYyBiL3NyYy9wc25hbWVzL3BzbmFtZXMuYwppbmRleCA1YjdiYzhiLi5mZWJiODBkIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc25hbWVzLmMKKysrIGIvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBTTmFtZXMgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywxMCArMTcsMTAgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSAicHNwaWMuYyIKKwogI2luY2x1ZGUgInBzbW9kdWxlLmMiCisjaW5jbHVkZSAicHNwaWMuYyIKIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzcGljLmMgYi9zcmMvcHNuYW1lcy9wc3BpYy5jCmluZGV4IDhiOTAwMzQuLjg1YTA2ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzcGljLmMKKysrIGIvc3JjL3BzbmFtZXMvcHNwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNuYW1lcyBtb2R1bGUuICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNwaWMuaCBiL3NyYy9wc25hbWVzL3BzcGljLmgKaW5kZXggMTQ0OTdlNy4uODg5NzgwYyAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNwaWMuaAorKysgYi9zcmMvcHNuYW1lcy9wc3BpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc25hbWVzIG1vZHVsZS4gICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oIGIvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaAppbmRleCBlMGY1ZTMwLi43OTU0NWVlIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oCisrKyBiL3NyYy9wc25hbWVzL3BzdGFibGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE5LDcgKzE5LDcgQEAKICAgLyogVGhpcyBmaWxlIGhhcyBiZWVuIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IC0tIGRvIG5vdCBlZGl0ISAqLwogCiAKLSNpZm5kZWYgIERFRklORV9QU19UQUJMRVMKKyNpZm5kZWYgIERFRklORV9QU19UQUJMRVNfREFUQQogI2lmZGVmICBfX2NwbHVzcGx1cwogICBleHRlcm4gIkMiCiAjZWxzZQpAQCAtMjcsNyArMjcsNyBAQAogI2VuZGlmCiAjZW5kaWYKICAgY29uc3QgY2hhciAgZnRfc3RhbmRhcmRfZ2x5cGhfbmFtZXNbMzY5Nl0KLSNpZmRlZiAgREVGSU5FX1BTX1RBQkxFUworI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEEKICAgPQogICB7CiAgICAgJy4nLCduJywndScsJ2wnLCdsJywgMCwKQEAgLTQ1MSw3ICs0NTEsNyBAQAogICAgICdSJywnbycsJ20nLCdhJywnbicsIDAsCiAgICAgJ1MnLCdlJywnbScsJ2knLCdiJywnbycsJ2wnLCdkJywgMCwKICAgfQotI2VuZGlmIC8qIERFRklORV9QU19UQUJMRVMgKi8KKyNlbmRpZiAvKiBERUZJTkVfUFNfVEFCTEVTX0RBVEEgKi8KICAgOwogCiAKQEAgLTQ1OSw3ICs0NTksNyBAQAogCiAgIC8qIFZhbHVlcyBhcmUgb2Zmc2V0cyBpbnRvIHRoZSBgZnRfc3RhbmRhcmRfZ2x5cGhfbmFtZXMnIHRhYmxlICovCiAKLSNpZm5kZWYgIERFRklORV9QU19UQUJMRVMKKyNpZm5kZWYgIERFRklORV9QU19UQUJMRVNfREFUQQogI2lmZGVmICBfX2NwbHVzcGx1cwogICBleHRlcm4gIkMiCiAjZWxzZQpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAjZW5kaWYKICNlbmRpZgogICBjb25zdCBzaG9ydCAgZnRfbWFjX25hbWVzW0ZUX05VTV9NQUNfTkFNRVNdCi0jaWZkZWYgIERFRklORV9QU19UQUJMRVMKKyNpZmRlZiAgREVGSU5FX1BTX1RBQkxFU19EQVRBCiAgID0KICAgewogICAgICAyNTMsICAgMCwgICA2LCAyNjEsIDI2NywgMjc0LCAyODMsIDI5NCwgMzAxLCAzMDksIDc1OCwgMzMwLCAzNDAsIDM1MSwKQEAgLTQ5MCw3ICs0OTAsNyBAQAogICAgIDEyNzAsMTMxMywxMzIzLDExNzEsMTI5MCwxMzMyLDEyMTEsMTIzNSwxMjc2LCAxNjksIDE3NSwgMTgyLCAxODksIDIwMCwKICAgICAgMjA5LCAyMTgsIDIyNSwgMjMyLCAyMzksIDI0NgogICB9Ci0jZW5kaWYgLyogREVGSU5FX1BTX1RBQkxFUyAqLworI2VuZGlmIC8qIERFRklORV9QU19UQUJMRVNfREFUQSAqLwogICA7CiAKIApAQCAtNDk4LDcgKzQ5OCw3IEBACiAKICAgLyogVmFsdWVzIGFyZSBvZmZzZXRzIGludG8gdGhlIGBmdF9zdGFuZGFyZF9nbHlwaF9uYW1lcycgdGFibGUgKi8KIAotI2lmbmRlZiAgREVGSU5FX1BTX1RBQkxFUworI2lmbmRlZiAgREVGSU5FX1BTX1RBQkxFU19EQVRBCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiAgIGV4dGVybiAiQyIKICNlbHNlCkBAIC01MDYsNyArNTA2LDcgQEAKICNlbmRpZgogI2VuZGlmCiAgIGNvbnN0IHNob3J0ICBmdF9zaWRfbmFtZXNbRlRfTlVNX1NJRF9OQU1FU10KLSNpZmRlZiAgREVGSU5FX1BTX1RBQkxFUworI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEEKICAgPQogICB7CiAgICAgIDI1MywgMjYxLCAyNjcsIDI3NCwgMjgzLCAyOTQsIDMwMSwgMzA5LCAzMTksIDMzMCwgMzQwLCAzNTEsIDM2MCwgMzY1LApAQCAtNTM4LDEyICs1MzgsMTIgQEAKICAgICAzNDE4LDM0MzAsMzQ0MiwzNDU0LDM0NzEsMzQ4MywzNDk4LDM1MDYsMzUxOCwzNTMwLDM1NDIsMzU1OSwzNTc0LDM1ODYsCiAgICAgMzU5NywzNjEyLDM2MjAsMzYyOCwzNjM2LDM2NDQsMzY1MCwzNjU1LDM2NjAsMzY2NiwzNjczLDM2ODEsMzY4NwogICB9Ci0jZW5kaWYgLyogREVGSU5FX1BTX1RBQkxFUyAqLworI2VuZGlmIC8qIERFRklORV9QU19UQUJMRVNfREFUQSAqLwogICA7CiAKIAogICAvKiB0aGUgZm9sbG93aW5nIGFyZSBpbmRpY2VzIGludG8gdGhlIFNJRCBuYW1lIHRhYmxlICovCi0jaWZuZGVmICBERUZJTkVfUFNfVEFCTEVTCisjaWZuZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEEKICNpZmRlZiAgX19jcGx1c3BsdXMKICAgZXh0ZXJuICJDIgogI2Vsc2UKQEAgLTU1MSw3ICs1NTEsNyBAQAogI2VuZGlmCiAjZW5kaWYKICAgY29uc3QgdW5zaWduZWQgc2hvcnQgIHQxX3N0YW5kYXJkX2VuY29kaW5nWzI1Nl0KLSNpZmRlZiAgREVGSU5FX1BTX1RBQkxFUworI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEEKICAgPQogICB7CiAgICAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLApAQCAtNTcxLDEyICs1NzEsMTIgQEAKICAgICAgIDAsMTM4LCAgMCwxMzksICAwLCAgMCwgIDAsICAwLDE0MCwxNDEsMTQyLDE0MywgIDAsICAwLCAgMCwgIDAsCiAgICAgICAwLDE0NCwgIDAsICAwLCAgMCwxNDUsICAwLCAgMCwxNDYsMTQ3LDE0OCwxNDksICAwLCAgMCwgIDAsICAwCiAgIH0KLSNlbmRpZiAvKiBERUZJTkVfUFNfVEFCTEVTICovCisjZW5kaWYgLyogREVGSU5FX1BTX1RBQkxFU19EQVRBICovCiAgIDsKIAogCiAgIC8qIHRoZSBmb2xsb3dpbmcgYXJlIGluZGljZXMgaW50byB0aGUgU0lEIG5hbWUgdGFibGUgKi8KLSNpZm5kZWYgIERFRklORV9QU19UQUJMRVMKKyNpZm5kZWYgIERFRklORV9QU19UQUJMRVNfREFUQQogI2lmZGVmICBfX2NwbHVzcGx1cwogICBleHRlcm4gIkMiCiAjZWxzZQpAQCAtNTg0LDcgKzU4NCw3IEBACiAjZW5kaWYKICNlbmRpZgogICBjb25zdCB1bnNpZ25lZCBzaG9ydCAgdDFfZXhwZXJ0X2VuY29kaW5nWzI1Nl0KLSNpZmRlZiAgREVGSU5FX1BTX1RBQkxFUworI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEEKICAgPQogICB7CiAgICAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLApAQCAtNjA0LDcgKzYwNCw3IEBACiAgICAgMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLAogICAgIDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OAogICB9Ci0jZW5kaWYgLyogREVGSU5FX1BTX1RBQkxFUyAqLworI2VuZGlmIC8qIERFRklORV9QU19UQUJMRVNfREFUQSAqLwogICA7CiAKIApAQCAtNjE5LDcgKzYxOSw3IEBACiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0FET0JFX0dMWVBIX0xJU1QKIAotI2lmbmRlZiAgREVGSU5FX1BTX1RBQkxFUworI2lmbmRlZiAgREVGSU5FX1BTX1RBQkxFU19EQVRBCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiAgIGV4dGVybiAiQyIKICNlbHNlCkBAIC02MjcsNyArNjI3LDcgQEAKICNlbmRpZgogI2VuZGlmCiAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgIGZ0X2Fkb2JlX2dseXBoX2xpc3RbNTU5OTdMXQotI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTCisjaWZkZWYgIERFRklORV9QU19UQUJMRVNfREFUQQogICA9CiAgIHsKICAgICAgIDAsIDUyLCAgMCwxMDYsICAyLDE2NywgIDMsIDYzLCAgNCwyMjAsICA2LDEyNSwgIDksMTQzLCAxMCwgMjMsCkBAIC00MTMxLDcgKzQxMzEsNyBAQAogICAgIDE4MiwxMTcsICAyLDIxOCwxNjcsMjE4LDE3OCwyMzIsMjMzLDI0MiwyMjUsMjMxLDIyNSwyMzgsIDk3LDEyOCwKICAgICAgNDgsIDkwLDIzNSwyMjUsMjQ0LDIyNSwyMzUsMjI1LDIzOCwgOTcsMTI4LCA0OCwxODYKICAgfQotI2VuZGlmIC8qIERFRklORV9QU19UQUJMRVMgKi8KKyNlbmRpZiAvKiBERUZJTkVfUFNfVEFCTEVTX0RBVEEgKi8KICAgOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3J1bGVzLm1rIGIvc3JjL3BzbmFtZXMvcnVsZXMubWsKaW5kZXggNjlmYTczMi4uNGQ2MjlkOCAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcnVsZXMubWsKKysrIGIvc3JjL3BzbmFtZXMvcnVsZXMubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9KYW1maWxlIGIvc3JjL3Jhc3Rlci9KYW1maWxlCmluZGV4IGM5ZjNkNmMuLjgzOGU3ZWYgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvSmFtZmlsZQorKysgYi9zcmMvcmFzdGVyL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL3Jhc3RlciBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL2Z0bWlzYy5oIGIvc3JjL3Jhc3Rlci9mdG1pc2MuaAppbmRleCBkMWU2NjI3Li43ZTQwMTE5IDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0bWlzYy5oCisrKyBiL3NyYy9yYXN0ZXIvZnRtaXNjLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBNaXNjZWxsYW5lb3VzIG1hY3JvcyBmb3Igc3RhbmQtYWxvbmUgcmFzdGVyaXplciAoc3BlY2lmaWNhdGlvbiAgICAgICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYyBiL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYwppbmRleCBjNTY0M2Y2Li40MzU0NzMwIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMKKysrIGIvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBnbHlwaCByYXN0ZXJpemVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcmFzdGVyL2Z0cmFzdGVyLmggYi9zcmMvcmFzdGVyL2Z0cmFzdGVyLmgKaW5kZXggNmIzMDUwYy4uNDBiNWQ2ZCAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oCisrKyBiL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmMgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuYwppbmRleCAxYTgzZTllLi5hN2NlOTczIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmVuZDEuYworKysgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzEsMTIgKzMxLDcgQEAKICAgc3RhdGljIEZUX0Vycm9yCiAgIGZ0X3Jhc3RlcjFfaW5pdCggRlRfUmVuZGVyZXIgIHJlbmRlciApCiAgIHsKLSAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5ID0gRlRfTU9EVUxFX0xJQlJBUlkoIHJlbmRlciApOwotCi0KLSAgICByZW5kZXItPmNsYXp6LT5yYXN0ZXJfY2xhc3MtPnJhc3Rlcl9yZXNldCggcmVuZGVyLT5yYXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnktPnJhc3Rlcl9wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LT5yYXN0ZXJfcG9vbF9zaXplICk7CisgICAgcmVuZGVyLT5jbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfcmVzZXQoIHJlbmRlci0+cmFzdGVyLCBOVUxMLCAwICk7CiAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CkBAIC0xMDIsMTIgKzk3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luICkKICAgewotICAgIEZUX0Vycm9yICAgICBlcnJvcjsKLSAgICBGVF9PdXRsaW5lKiAgb3V0bGluZTsKLSAgICBGVF9CQm94ICAgICAgY2JveCwgY2JveDA7Ci0gICAgRlRfVUludCAgICAgIHdpZHRoLCBoZWlnaHQsIHBpdGNoOwotICAgIEZUX0JpdG1hcCogICBiaXRtYXA7Ci0gICAgRlRfTWVtb3J5ICAgIG1lbW9yeTsKKyAgICBGVF9FcnJvciAgICAgZXJyb3IgICA9IEZUX0Vycl9PazsKKyAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9ICZzbG90LT5vdXRsaW5lOworICAgIEZUX0JpdG1hcCogICBiaXRtYXAgID0gJnNsb3QtPmJpdG1hcDsKKyAgICBGVF9NZW1vcnkgICAgbWVtb3J5ICA9IHJlbmRlci0+cm9vdC5tZW1vcnk7CisgICAgRlRfUG9zICAgICAgIHhfc2hpZnQgPSAwOworICAgIEZUX1BvcyAgICAgICB5X3NoaWZ0ID0gMDsKIAogICAgIEZUX1Jhc3Rlcl9QYXJhbXMgIHBhcmFtczsKIApAQCAtMTI2LDYwICsxMjEsNiBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfUmVuZGVyX0dseXBoICk7CiAgICAgfQogCi0gICAgb3V0bGluZSA9ICZzbG90LT5vdXRsaW5lOwotCi0gICAgLyogdHJhbnNsYXRlIHRoZSBvdXRsaW5lIHRvIHRoZSBuZXcgb3JpZ2luIGlmIG5lZWRlZCAqLwotICAgIGlmICggb3JpZ2luICkKLSAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCBvcmlnaW4tPngsIG9yaWdpbi0+eSApOwotCi0gICAgLyogY29tcHV0ZSB0aGUgY29udHJvbCBib3gsIGFuZCBncmlkIGZpdCBpdCAqLwotICAgIEZUX091dGxpbmVfR2V0X0NCb3goIG91dGxpbmUsICZjYm94MCApOwotCi0gICAgLyogdW5kb2N1bWVudGVkIGJ1dCBjb25maXJtZWQ6IGJib3ggdmFsdWVzIGdldCByb3VuZGVkICovCi0jaWYgMQotICAgIGNib3gueE1pbiA9IEZUX1BJWF9ST1VORCggY2JveDAueE1pbiApOwotICAgIGNib3gueU1pbiA9IEZUX1BJWF9ST1VORCggY2JveDAueU1pbiApOwotICAgIGNib3gueE1heCA9IEZUX1BJWF9ST1VORCggY2JveDAueE1heCApOwotICAgIGNib3gueU1heCA9IEZUX1BJWF9ST1VORCggY2JveDAueU1heCApOwotI2Vsc2UKLSAgICBjYm94LnhNaW4gPSBGVF9QSVhfRkxPT1IoIGNib3gueE1pbiApOwotICAgIGNib3gueU1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC55TWluICk7Ci0gICAgY2JveC54TWF4ID0gRlRfUElYX0NFSUwoIGNib3gueE1heCApOwotICAgIGNib3gueU1heCA9IEZUX1BJWF9DRUlMKCBjYm94LnlNYXggKTsKLSNlbmRpZgotCi0gICAgLyogSWYgZWl0aGVyIGB3aWR0aCcgb3IgYGhlaWdodCcgcm91bmQgdG8gMCwgdHJ5ICAgICovCi0gICAgLyogZXhwbGljaXRseSByb3VuZGluZyB1cC9kb3duLiAgSW4gdGhlIGNhc2Ugb2YgICAgICovCi0gICAgLyogZ2x5cGhzIGNvbnRhaW5pbmcgb25seSBvbmUgdmVyeSBuYXJyb3cgZmVhdHVyZSwgICovCi0gICAgLyogdGhpcyBnaXZlcyB0aGUgZHJvcC1vdXQgY29tcGVuc2F0aW9uIGluIHRoZSBzY2FuICovCi0gICAgLyogY29udmVyc2lvbiBjb2RlIGEgY2hhbmNlIHRvIGRvIGl0cyBzdHVmZi4gICAgICAgICovCi0gICAgd2lkdGggID0gKEZUX1VJbnQpKCAoIGNib3gueE1heCAtIGNib3gueE1pbiApID4+IDYgKTsKLSAgICBpZiAoIHdpZHRoID09IDAgKQotICAgIHsKLSAgICAgIGNib3gueE1pbiA9IEZUX1BJWF9GTE9PUiggY2JveDAueE1pbiApOwotICAgICAgY2JveC54TWF4ID0gRlRfUElYX0NFSUwoIGNib3gwLnhNYXggKTsKLQotICAgICAgd2lkdGggPSAoRlRfVUludCkoICggY2JveC54TWF4IC0gY2JveC54TWluICkgPj4gNiApOwotICAgIH0KLQotICAgIGhlaWdodCA9IChGVF9VSW50KSggKCBjYm94LnlNYXggLSBjYm94LnlNaW4gKSA+PiA2ICk7Ci0gICAgaWYgKCBoZWlnaHQgPT0gMCApCi0gICAgewotICAgICAgY2JveC55TWluID0gRlRfUElYX0ZMT09SKCBjYm94MC55TWluICk7Ci0gICAgICBjYm94LnlNYXggPSBGVF9QSVhfQ0VJTCggY2JveDAueU1heCApOwotCi0gICAgICBoZWlnaHQgPSAoRlRfVUludCkoICggY2JveC55TWF4IC0gY2JveC55TWluICkgPj4gNiApOwotICAgIH0KLQotICAgIGlmICggd2lkdGggPiBGVF9VU0hPUlRfTUFYIHx8IGhlaWdodCA+IEZUX1VTSE9SVF9NQVggKQotICAgIHsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBiaXRtYXAgPSAmc2xvdC0+Yml0bWFwOwotICAgIG1lbW9yeSA9IHJlbmRlci0+cm9vdC5tZW1vcnk7Ci0KICAgICAvKiByZWxlYXNlIG9sZCBiaXRtYXAgYnVmZmVyICovCiAgICAgaWYgKCBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgJiBGVF9HTFlQSF9PV05fQklUTUFQICkKICAgICB7CkBAIC0xODcsMzkgKzEyOCw0OCBAQAogICAgICAgc2xvdC0+aW50ZXJuYWwtPmZsYWdzICY9IH5GVF9HTFlQSF9PV05fQklUTUFQOwogICAgIH0KIAotICAgIHBpdGNoICAgICAgICAgICAgICA9ICggKCB3aWR0aCArIDE1ICkgPj4gNCApIDw8IDE7Ci0gICAgYml0bWFwLT5waXhlbF9tb2RlID0gRlRfUElYRUxfTU9ERV9NT05POworICAgIGZ0X2dseXBoc2xvdF9wcmVzZXRfYml0bWFwKCBzbG90LCBtb2RlLCBvcmlnaW4gKTsKIAotICAgIGJpdG1hcC0+d2lkdGggPSB3aWR0aDsKLSAgICBiaXRtYXAtPnJvd3MgID0gaGVpZ2h0OwotICAgIGJpdG1hcC0+cGl0Y2ggPSAoaW50KXBpdGNoOwotCi0gICAgaWYgKCBGVF9BTExPQ19NVUxUKCBiaXRtYXAtPmJ1ZmZlciwgcGl0Y2gsIGhlaWdodCApICkKKyAgICAvKiBhbGxvY2F0ZSBuZXcgb25lICovCisgICAgaWYgKCBGVF9BTExPQ19NVUxUKCBiaXRtYXAtPmJ1ZmZlciwgYml0bWFwLT5yb3dzLCBiaXRtYXAtPnBpdGNoICkgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgc2xvdC0+aW50ZXJuYWwtPmZsYWdzIHw9IEZUX0dMWVBIX09XTl9CSVRNQVA7CiAKKyAgICB4X3NoaWZ0ID0gLXNsb3QtPmJpdG1hcF9sZWZ0ICogNjQ7CisgICAgeV9zaGlmdCA9ICggKEZUX0ludCliaXRtYXAtPnJvd3MgLSBzbG90LT5iaXRtYXBfdG9wICkgKiA2NDsKKworICAgIGlmICggb3JpZ2luICkKKyAgICB7CisgICAgICB4X3NoaWZ0ICs9IG9yaWdpbi0+eDsKKyAgICAgIHlfc2hpZnQgKz0gb3JpZ2luLT55OworICAgIH0KKwogICAgIC8qIHRyYW5zbGF0ZSBvdXRsaW5lIHRvIHJlbmRlciBpdCBpbnRvIHRoZSBiaXRtYXAgKi8KLSAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgLWNib3gueE1pbiwgLWNib3gueU1pbiApOworICAgIGlmICggeF9zaGlmdCB8fCB5X3NoaWZ0ICkKKyAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCB4X3NoaWZ0LCB5X3NoaWZ0ICk7CiAKICAgICAvKiBzZXQgdXAgcGFyYW1ldGVycyAqLwogICAgIHBhcmFtcy50YXJnZXQgPSBiaXRtYXA7CiAgICAgcGFyYW1zLnNvdXJjZSA9IG91dGxpbmU7Ci0gICAgcGFyYW1zLmZsYWdzICA9IDA7CisgICAgcGFyYW1zLmZsYWdzICA9IEZUX1JBU1RFUl9GTEFHX0RFRkFVTFQ7CiAKICAgICAvKiByZW5kZXIgb3V0bGluZSBpbnRvIHRoZSBiaXRtYXAgKi8KICAgICBlcnJvciA9IHJlbmRlci0+cmFzdGVyX3JlbmRlciggcmVuZGVyLT5yYXN0ZXIsICZwYXJhbXMgKTsKIAotICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCBjYm94LnhNaW4sIGNib3gueU1pbiApOwotCi0gICAgaWYgKCBlcnJvciApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICBzbG90LT5mb3JtYXQgICAgICA9IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA7Ci0gICAgc2xvdC0+Yml0bWFwX2xlZnQgPSAoRlRfSW50KSggY2JveC54TWluID4+IDYgKTsKLSAgICBzbG90LT5iaXRtYXBfdG9wICA9IChGVF9JbnQpKCBjYm94LnlNYXggPj4gNiApOwotCiAgIEV4aXQ6CisgICAgaWYgKCAhZXJyb3IgKQorICAgICAgLyogZXZlcnl0aGluZyBpcyBmaW5lOyB0aGUgZ2x5cGggaXMgbm93IG9mZmljaWFsbHkgYSBiaXRtYXAgKi8KKyAgICAgIHNsb3QtPmZvcm1hdCA9IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA7CisgICAgZWxzZSBpZiAoIHNsb3QtPmludGVybmFsLT5mbGFncyAmIEZUX0dMWVBIX09XTl9CSVRNQVAgKQorICAgIHsKKyAgICAgIEZUX0ZSRUUoIGJpdG1hcC0+YnVmZmVyICk7CisgICAgICBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgJj0gfkZUX0dMWVBIX09XTl9CSVRNQVA7CisgICAgfQorCisgICAgaWYgKCB4X3NoaWZ0IHx8IHlfc2hpZnQgKQorICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIC14X3NoaWZ0LCAteV9zaGlmdCApOworCiAgICAgcmV0dXJuIGVycm9yOwogICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvZnRyZW5kMS5oIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKaW5kZXggY2ZmNzAyZC4uMmFiZGYyZCAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKKysrIGIvc3JjL3Jhc3Rlci9mdHJlbmQxLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvbW9kdWxlLm1rIGIvc3JjL3Jhc3Rlci9tb2R1bGUubWsKaW5kZXggYWFkMzljYi4uYjExNWY0MSAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9tb2R1bGUubWsKKysrIGIvc3JjL3Jhc3Rlci9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0ZXIuYyBiL3NyYy9yYXN0ZXIvcmFzdGVyLmMKaW5kZXggZWU1NGFlMS4uNzZlZGQyMSAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9yYXN0ZXIuYworKysgYi9zcmMvcmFzdGVyL3Jhc3Rlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIG1vbm9jaHJvbWUgcmFzdGVyZXIgbW9kdWxlIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNywxMSArMTcsMTEgQEAKIAogCiAjZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSAicmFzdHBpYy5jIgorCiAjaW5jbHVkZSAiZnRyYXN0ZXIuYyIKICNpbmNsdWRlICJmdHJlbmQxLmMiCisjaW5jbHVkZSAicmFzdHBpYy5jIgogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oIGIvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oCmluZGV4IDBkNjQ2OTAuLjIyYTNlMTUgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcmFzdGVycnMuaAorKysgYi9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgbW9ub2Nocm9tZSByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcmFzdHBpYy5jIGIvc3JjL3Jhc3Rlci9yYXN0cGljLmMKaW5kZXggNzA4NTMzOS4uMWRjODk4MSAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9yYXN0cGljLmMKKysrIGIvc3JjL3Jhc3Rlci9yYXN0cGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHJhc3RlciBtb2R1bGUuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcmFzdHBpYy5oIGIvc3JjL3Jhc3Rlci9yYXN0cGljLmgKaW5kZXggZGNkNjkxMy4uNmQwODc3YyAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9yYXN0cGljLmgKKysrIGIvc3JjL3Jhc3Rlci9yYXN0cGljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHJhc3RlciBtb2R1bGUuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcnVsZXMubWsgYi9zcmMvcmFzdGVyL3J1bGVzLm1rCmluZGV4IDA0NjJjOTMuLjlhZWYxZjAgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcnVsZXMubWsKKysrIGIvc3JjL3Jhc3Rlci9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9KYW1maWxlIGIvc3JjL3NmbnQvSmFtZmlsZQppbmRleCA1OTcxYjI1Li41Nzk3N2ZjIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9KYW1maWxlCisrKyBiL3NyYy9zZm50L0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL3NmbnQgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvbW9kdWxlLm1rIGIvc3JjL3NmbnQvbW9kdWxlLm1rCmluZGV4IDgxZGVhMTcuLjUxY2E2N2UgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L21vZHVsZS5taworKysgYi9zcmMvc2ZudC9tb2R1bGUubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvcG5nc2hpbS5jIGIvc3JjL3NmbnQvcG5nc2hpbS5jCmluZGV4IDk2ZmMwOGUuLjE2MDIwMjYgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3BuZ3NoaW0uYworKysgYi9zcmMvc2ZudC9wbmdzaGltLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUE5HIEJpdG1hcCBnbHlwaCBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBHb29nbGUsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgV3JpdHRlbiBieSBTdHVhcnQgR2lsbCBhbmQgQmVoZGFkIEVzZmFoYm9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI0LDcgKzI0LDggQEAKICNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0gKIAogCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HCisjaWYgZGVmaW5lZCggVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICkgJiYgXAorICAgIGRlZmluZWQoIEZUX0NPTkZJR19PUFRJT05fVVNFX1BORyApCiAKICAgLyogV2UgYWx3YXlzIGluY2x1ZGUgPHNldGptcC5oPiwgc28gbWFrZSBsaWJwbmcgc2h1dCB1cCEgKi8KICNkZWZpbmUgUE5HX1NLSVBfU0VUSk1QX0NIRUNLIDEKQEAgLTQ4LDE4ICs0OSw4NSBAQAogICB9CiAKIAotICAvKiBQcmVtdWx0aXBsaWVzIGRhdGEgYW5kIGNvbnZlcnRzIFJHQkEgYnl0ZXMgPT4gbmF0aXZlIGVuZGlhbi4gKi8KKyAgLyogUHJlbXVsdGlwbGllcyBkYXRhIGFuZCBjb252ZXJ0cyBSR0JBIGJ5dGVzID0+IEJHUkEuICovCiAgIHN0YXRpYyB2b2lkCiAgIHByZW11bHRpcGx5X2RhdGEoIHBuZ19zdHJ1Y3RwICAgIHBuZywKICAgICAgICAgICAgICAgICAgICAgcG5nX3Jvd19pbmZvcCAgcm93X2luZm8sCiAgICAgICAgICAgICAgICAgICAgIHBuZ19ieXRlcCAgICAgIGRhdGEgKQogICB7Ci0gICAgdW5zaWduZWQgaW50ICBpOworICAgIHVuc2lnbmVkIGludCAgaSA9IDAsIGxpbWl0OworCisgICAgLyogVGhlIGB2ZWN0b3Jfc2l6ZScgYXR0cmlidXRlIHdhcyBpbnRyb2R1Y2VkIGluIGdjYyAzLjEsIHdoaWNoICovCisgICAgLyogcHJlZGF0ZXMgY2xhbmc7IHRoZSBgX19CWVRFX09SREVSX18nIHByZXByb2Nlc3NvciBzeW1ib2wgd2FzICovCisgICAgLyogaW50cm9kdWNlZCBpbiBnY2MgNC42IGFuZCBjbGFuZyAzLjIsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICovCisgICAgLyogYF9fYnVpbHRpbl9zaHVmZmxlJyBmb3IgZ2NjIHdhcyBpbnRyb2R1Y2VkIGluIGdjYyA0LjcuMC4gICAgICovCisjaWYgKCAoIGRlZmluZWQoIF9fR05VQ19fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICAgICAgICAgICAgIFwKKyAgICAgICAgKCAoIF9fR05VQ19fID49IDUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICAgICAgICAgICAgICAgXAorICAgICAgICAoICggX19HTlVDX18gPT0gNCApICYmICggX19HTlVDX01JTk9SX18gPj0gNyApICkgKSApICAgICAgICAgfHwgICBcCisgICAgICAoIGRlZmluZWQoIF9fY2xhbmdfXyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgICAgIFwKKyAgICAgICAgKCAoIF9fY2xhbmdfbWFqb3JfXyA+PSA0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgICAgXAorICAgICAgICAoICggX19jbGFuZ19tYWpvcl9fID09IDMgKSAmJiAoIF9fY2xhbmdfbWlub3JfXyA+PSAyICkgKSApICkgKSAmJiBcCisgICAgZGVmaW5lZCggX19PUFRJTUlaRV9fICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFwKKyAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXworCisjaWZkZWYgX19jbGFuZ19fCisgICAgLyogdGhlIGNsYW5nIGRvY3VtZW50YXRpb24gZG9lc24ndCBjb3ZlciB0aGUgdHdvLWFyZ3VtZW50IGNhc2Ugb2YgKi8KKyAgICAvKiBgX19idWlsdGluX3NodWZmbGV2ZWN0b3InOyBob3dldmVyLCBpdCBpcyBpcyBpbXBsZW1lbnRlZCBzaW5jZSAqLworICAgIC8qIHZlcnNpb24gMi44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIHZlY3Rvcl9zaHVmZmxlICBfX2J1aWx0aW5fc2h1ZmZsZXZlY3RvcgorI2Vsc2UKKyNkZWZpbmUgdmVjdG9yX3NodWZmbGUgIF9fYnVpbHRpbl9zaHVmZmxlCisjZW5kaWYKKworICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHY4MiBfX2F0dHJpYnV0ZV9fKCggdmVjdG9yX3NpemUoIDE2ICkgKSk7CisKKworICAgIGlmICggcm93X2luZm8tPnJvd2J5dGVzID4gMTUgKQorICAgIHsKKyAgICAgIC8qIHByb2Nlc3MgYmxvY2tzIG9mIDE2IGJ5dGVzIGluIG9uZSBydXNoLCB3aGljaCBnaXZlcyBhIG5pY2Ugc3BlZWQtdXAgKi8KKyAgICAgIGxpbWl0ID0gcm93X2luZm8tPnJvd2J5dGVzIC0gMTYgKyAxOworICAgICAgZm9yICggOyBpIDwgbGltaXQ7IGkgKz0gMTYgKQorICAgICAgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiAgYmFzZSA9ICZkYXRhW2ldOworCisgICAgICAgIHY4MiAgcywgczAsIHMxLCBhOworCisgICAgICAgIC8qIGNsYW5nIDw9IDMuOSBjYW4ndCBhcHBseSBzY2FsYXIgdmFsdWVzIHRvIHZlY3RvcnMgKi8KKyAgICAgICAgLyogKG9yIHJhdGhlciwgaXQgbmVlZHMgYSBkaWZmZXJlbnQgc3ludGF4KSAgICAgICAgICAqLworICAgICAgICB2ODIgIG4weDgwID0geyAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwIH07CisgICAgICAgIHY4MiAgbjB4RkYgPSB7IDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYgfTsKKyAgICAgICAgdjgyICBuOCAgICA9IHsgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCB9OworCisgICAgICAgIHY4MiAgbWEgPSB7IDEsIDEsIDMsIDMsIDUsIDUsIDcsIDcgfTsKKyAgICAgICAgdjgyICBvMSA9IHsgMCwgMHhGRiwgMCwgMHhGRiwgMCwgMHhGRiwgMCwgMHhGRiB9OworICAgICAgICB2ODIgIG0wID0geyAxLCAwLCAzLCAyLCA1LCA0LCA3LCA2IH07CisKKworICAgICAgICBmdF9tZW1jcHkoICZzLCBiYXNlLCAxNiApOyAgICAgICAgICAgIC8qIFJHQkEgUkdCQSBSR0JBIFJHQkEgKi8KKyAgICAgICAgczAgPSBzICYgbjB4RkY7ICAgICAgICAgICAgICAgICAgICAgICAvKiAgUiBCICBSIEIgIFIgQiAgUiBCICovCisgICAgICAgIHMxID0gcyA+PiBuODsgICAgICAgICAgICAgICAgICAgICAgICAgLyogIEcgQSAgRyBBICBHIEEgIEcgQSAqLworCisgICAgICAgIGEgICA9IHZlY3Rvcl9zaHVmZmxlKCBzMSwgbWEgKTsgICAgICAgLyogIEEgQSAgQSBBICBBIEEgIEEgQSAqLworICAgICAgICBzMSB8PSBvMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBHIDEgIEcgMSAgRyAxICBHIDEgKi8KKyAgICAgICAgczAgID0gdmVjdG9yX3NodWZmbGUoIHMwLCBtMCApOyAgICAgICAvKiAgQiBSICBCIFIgIEIgUiAgQiBSICovCisKKyAgICAgICAgczAgKj0gYTsKKyAgICAgICAgczEgKj0gYTsKKyAgICAgICAgczAgKz0gbjB4ODA7CisgICAgICAgIHMxICs9IG4weDgwOworICAgICAgICBzMCAgPSAoIHMwICsgKCBzMCA+PiBuOCApICkgPj4gbjg7CisgICAgICAgIHMxICA9ICggczEgKyAoIHMxID4+IG44ICkgKSA+PiBuODsKKworICAgICAgICBzID0gczAgfCAoIHMxIDw8IG44ICk7CisgICAgICAgIGZ0X21lbWNweSggYmFzZSwgJnMsIDE2ICk7CisgICAgICB9CisgICAgfQorI2VuZGlmIC8qIHVzZSBgdmVjdG9yX3NpemUnICovCiAKICAgICBGVF9VTlVTRUQoIHBuZyApOwogCi0KLSAgICBmb3IgKCBpID0gMDsgaSA8IHJvd19pbmZvLT5yb3dieXRlczsgaSArPSA0ICkKKyAgICBsaW1pdCA9IHJvd19pbmZvLT5yb3dieXRlczsKKyAgICBmb3IgKCA7IGkgPCBsaW1pdDsgaSArPSA0ICkKICAgICB7CiAgICAgICB1bnNpZ25lZCBjaGFyKiAgYmFzZSAgPSAmZGF0YVtpXTsKICAgICAgIHVuc2lnbmVkIGludCAgICBhbHBoYSA9IGJhc2VbM107CkBAIC0xNjksNyArMjM3LDcgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtZW1jcHkoIGRhdGEsIHN0cmVhbS0+Y3Vyc29yLCBsZW5ndGggKTsKKyAgICBmdF9tZW1jcHkoIGRhdGEsIHN0cmVhbS0+Y3Vyc29yLCBsZW5ndGggKTsKIAogICAgIEZUX0ZSQU1FX0VYSVQoKTsKICAgfQpAQCAtMzc3LDcgKzQ0NSwxMiBAQAogICAgIHJldHVybiBlcnJvcjsKICAgfQogCi0jZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9VU0VfUE5HICovCisjZWxzZSAvKiAhKFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUyAmJiBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcpICovCisKKyAgLyogQU5TSSBDIGRvZXNuJ3QgbGlrZSBlbXB0eSBzb3VyY2UgZmlsZXMgKi8KKyAgdHlwZWRlZiBpbnQgIF9wbmdzaGltX2R1bW15OworCisjZW5kaWYgLyogIShUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMgJiYgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HKSAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvcG5nc2hpbS5oIGIvc3JjL3NmbnQvcG5nc2hpbS5oCmluZGV4IDM0NGVjZWEuLjE5NDIzOGMgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3BuZ3NoaW0uaAorKysgYi9zcmMvc2ZudC9wbmdzaGltLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUE5HIEJpdG1hcCBnbHlwaCBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBHb29nbGUsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgV3JpdHRlbiBieSBTdHVhcnQgR2lsbCBhbmQgQmVoZGFkIEVzZmFoYm9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3J1bGVzLm1rIGIvc3JjL3NmbnQvcnVsZXMubWsKaW5kZXggMjMwZDU2Yy4uODNhY2M2NiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvcnVsZXMubWsKKysrIGIvc3JjL3NmbnQvcnVsZXMubWsKQEAgLTMsNyArMyw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Zkcml2ZXIuYyBiL3NyYy9zZm50L3NmZHJpdmVyLmMKaW5kZXggZjEzMjY2OS4uMzAzZTFjYSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Zkcml2ZXIuYworKysgYi9zcmMvc2ZudC9zZmRyaXZlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgU0ZOVCBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAorI2luY2x1ZGUgRlRfVFJVRVRZUEVfSURTX0gKIAogI2luY2x1ZGUgInNmZHJpdmVyLmgiCiAjaW5jbHVkZSAidHRsb2FkLmgiCkBAIC01MCw2ICs1MSwxMSBAQAogI2luY2x1ZGUgRlRfU0VSVklDRV9TRk5UX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfVFRfQ01BUF9ICiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKKyNpbmNsdWRlIEZUX1NFUlZJQ0VfTVVMVElQTEVfTUFTVEVSU19ICisjZW5kaWYKKwogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI1MCw2ICsyNTYsMjA3IEBACiAgIH0KIAogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorCisgIC8qIE9ubHkgQVNDSUkgbGV0dGVycyBhbmQgZGlnaXRzIGFyZSB0YWtlbiBmb3IgYSB2YXJpYXRpb24gZm9udCAqLworICAvKiBpbnN0YW5jZSdzIFBvc3RTY3JpcHQgbmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIGBmdF9pc2FsbnVtJyBpcyBhIG1hY3JvLCBidXQgd2UgbmVlZCBhIGZ1bmN0aW9uIGhlcmUsIHRodXMgICAqLworICAvKiB0aGlzIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgc3RhdGljIGludAorICBzZm50X2lzX2FscGhhbnVtZXJpYyggaW50ICBjICkKKyAgeworICAgIHJldHVybiBmdF9pc2FsbnVtKCBjICk7CisgIH0KKworCisgIC8qIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNdXJtdXJIYXNoMyBpcyB0YWtlbiBhbmQgYWRhcHRlZCBmcm9tICAgICAgICAgICovCisgIC8qIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iL21hc3Rlci9zcmMvTXVybXVySGFzaDMuY3BwICovCisKKyNkZWZpbmUgUk9UTDMyKCB4LCByICkgICggeCA8PCByICkgfCAoIHggPj4gKCAzMiAtIHIgKSApCisKKworICBzdGF0aWMgRlRfVUludDMyCisgIGZtaXgzMiggRlRfVUludDMyICBoICkKKyAgeworICAgIGggXj0gaCA+PiAxNjsKKyAgICBoICo9IDB4ODVlYmNhNmI7CisgICAgaCBePSBoID4+IDEzOworICAgIGggKj0gMHhjMmIyYWUzNTsKKyAgICBoIF49IGggPj4gMTY7CisKKyAgICByZXR1cm4gaDsKKyAgfQorCisKKyAgc3RhdGljIHZvaWQKKyAgbXVybXVyX2hhc2hfM18xMjgoIGNvbnN0IHZvaWQqICAgICAgICAga2V5LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICBsZW4sCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgICAgICAgIHNlZWQsCisgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgIG91dCApCisgIHsKKyAgICBjb25zdCBGVF9CeXRlKiAgZGF0YSAgICA9IChjb25zdCBGVF9CeXRlKilrZXk7CisgICAgY29uc3QgaW50ICAgICAgIG5ibG9ja3MgPSAoaW50KWxlbiAvIDE2OworCisgICAgRlRfVUludDMyICBoMSA9IHNlZWQ7CisgICAgRlRfVUludDMyICBoMiA9IHNlZWQ7CisgICAgRlRfVUludDMyICBoMyA9IHNlZWQ7CisgICAgRlRfVUludDMyICBoNCA9IHNlZWQ7CisKKyAgICBjb25zdCBGVF9VSW50MzIgIGMxID0gMHgyMzliOTYxYjsKKyAgICBjb25zdCBGVF9VSW50MzIgIGMyID0gMHhhYjBlOTc4OTsKKyAgICBjb25zdCBGVF9VSW50MzIgIGMzID0gMHgzOGIzNGFlNTsKKyAgICBjb25zdCBGVF9VSW50MzIgIGM0ID0gMHhhMWUzOGI5MzsKKworICAgIGNvbnN0IEZUX1VJbnQzMiogIGJsb2NrcyA9IChjb25zdCBGVF9VSW50MzIqKSggZGF0YSArIG5ibG9ja3MgKiAxNiApOworCisgICAgaW50ICBpOworCisKKyAgICBmb3IoIGkgPSAtbmJsb2NrczsgaTsgaSsrICkKKyAgICB7CisgICAgICBGVF9VSW50MzIgIGsxID0gYmxvY2tzW2kgKiA0ICsgMF07CisgICAgICBGVF9VSW50MzIgIGsyID0gYmxvY2tzW2kgKiA0ICsgMV07CisgICAgICBGVF9VSW50MzIgIGszID0gYmxvY2tzW2kgKiA0ICsgMl07CisgICAgICBGVF9VSW50MzIgIGs0ID0gYmxvY2tzW2kgKiA0ICsgM107CisKKworICAgICAgazEgKj0gYzE7CisgICAgICBrMSAgPSBST1RMMzIoIGsxLCAxNSApOworICAgICAgazEgKj0gYzI7CisgICAgICBoMSBePSBrMTsKKworICAgICAgaDEgID0gUk9UTDMyKCBoMSwgMTkgKTsKKyAgICAgIGgxICs9IGgyOworICAgICAgaDEgID0gaDEgKiA1ICsgMHg1NjFjY2QxYjsKKworICAgICAgazIgKj0gYzI7CisgICAgICBrMiAgPSBST1RMMzIoIGsyLCAxNiApOworICAgICAgazIgKj0gYzM7CisgICAgICBoMiBePSBrMjsKKworICAgICAgaDIgID0gUk9UTDMyKCBoMiwgMTcgKTsKKyAgICAgIGgyICs9IGgzOworICAgICAgaDIgID0gaDIgKiA1ICsgMHgwYmNhYTc0NzsKKworICAgICAgazMgKj0gYzM7CisgICAgICBrMyAgPSBST1RMMzIoIGszLCAxNyApOworICAgICAgazMgKj0gYzQ7CisgICAgICBoMyBePSBrMzsKKworICAgICAgaDMgID0gUk9UTDMyKCBoMywgMTUgKTsKKyAgICAgIGgzICs9IGg0OworICAgICAgaDMgID0gaDMgKiA1ICsgMHg5NmNkMWMzNTsKKworICAgICAgazQgKj0gYzQ7CisgICAgICBrNCAgPSBST1RMMzIoIGs0LCAxOCApOworICAgICAgazQgKj0gYzE7CisgICAgICBoNCBePSBrNDsKKworICAgICAgaDQgID0gUk9UTDMyKCBoNCwgMTMgKTsKKyAgICAgIGg0ICs9IGgxOworICAgICAgaDQgID0gaDQgKiA1ICsgMHgzMmFjM2IxNzsKKyAgICB9CisKKyAgICB7CisgICAgICBjb25zdCBGVF9CeXRlKiAgdGFpbCA9IChjb25zdCBGVF9CeXRlKikoIGRhdGEgKyBuYmxvY2tzICogMTYgKTsKKworICAgICAgRlRfVUludDMyICBrMSA9IDA7CisgICAgICBGVF9VSW50MzIgIGsyID0gMDsKKyAgICAgIEZUX1VJbnQzMiAgazMgPSAwOworICAgICAgRlRfVUludDMyICBrNCA9IDA7CisKKworICAgICAgc3dpdGNoICggbGVuICYgMTUgKQorICAgICAgeworICAgICAgY2FzZSAxNToKKyAgICAgICAgazQgXj0gKEZUX1VJbnQzMil0YWlsWzE0XSA8PCAxNjsKKyAgICAgIGNhc2UgMTQ6CisgICAgICAgIGs0IF49IChGVF9VSW50MzIpdGFpbFsxM10gPDwgODsKKyAgICAgIGNhc2UgMTM6CisgICAgICAgIGs0IF49IChGVF9VSW50MzIpdGFpbFsxMl07CisgICAgICAgIGs0ICo9IGM0OworICAgICAgICBrNCAgPSBST1RMMzIoIGs0LCAxOCApOworICAgICAgICBrNCAqPSBjMTsKKyAgICAgICAgaDQgXj0gazQ7CisKKyAgICAgIGNhc2UgMTI6CisgICAgICAgIGszIF49IChGVF9VSW50MzIpdGFpbFsxMV0gPDwgMjQ7CisgICAgICBjYXNlIDExOgorICAgICAgICBrMyBePSAoRlRfVUludDMyKXRhaWxbMTBdIDw8IDE2OworICAgICAgY2FzZSAxMDoKKyAgICAgICAgazMgXj0gKEZUX1VJbnQzMil0YWlsWzldIDw8IDg7CisgICAgICBjYXNlIDk6CisgICAgICAgIGszIF49IChGVF9VSW50MzIpdGFpbFs4XTsKKyAgICAgICAgazMgKj0gYzM7CisgICAgICAgIGszICA9IFJPVEwzMiggazMsIDE3ICk7CisgICAgICAgIGszICo9IGM0OworICAgICAgICBoMyBePSBrMzsKKworICAgICAgY2FzZSA4OgorICAgICAgICBrMiBePSAoRlRfVUludDMyKXRhaWxbN10gPDwgMjQ7CisgICAgICBjYXNlIDc6CisgICAgICAgIGsyIF49IChGVF9VSW50MzIpdGFpbFs2XSA8PCAxNjsKKyAgICAgIGNhc2UgNjoKKyAgICAgICAgazIgXj0gKEZUX1VJbnQzMil0YWlsWzVdIDw8IDg7CisgICAgICBjYXNlIDU6CisgICAgICAgIGsyIF49IChGVF9VSW50MzIpdGFpbFs0XTsKKyAgICAgICAgazIgKj0gYzI7CisgICAgICAgIGsyICA9IFJPVEwzMiggazIsIDE2ICk7CisgICAgICAgIGsyICo9IGMzOworICAgICAgICBoMiBePSBrMjsKKworICAgICAgY2FzZSA0OgorICAgICAgICBrMSBePSAoRlRfVUludDMyKXRhaWxbM10gPDwgMjQ7CisgICAgICBjYXNlIDM6CisgICAgICAgIGsxIF49IChGVF9VSW50MzIpdGFpbFsyXSA8PCAxNjsKKyAgICAgIGNhc2UgMjoKKyAgICAgICAgazEgXj0gKEZUX1VJbnQzMil0YWlsWzFdIDw8IDg7CisgICAgICBjYXNlIDE6CisgICAgICAgIGsxIF49IChGVF9VSW50MzIpdGFpbFswXTsKKyAgICAgICAgazEgKj0gYzE7CisgICAgICAgIGsxICA9IFJPVEwzMiggazEsIDE1ICk7CisgICAgICAgIGsxICo9IGMyOworICAgICAgICBoMSBePSBrMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBoMSBePSBsZW47CisgICAgaDIgXj0gbGVuOworICAgIGgzIF49IGxlbjsKKyAgICBoNCBePSBsZW47CisKKyAgICBoMSArPSBoMjsKKyAgICBoMSArPSBoMzsKKyAgICBoMSArPSBoNDsKKworICAgIGgyICs9IGgxOworICAgIGgzICs9IGgxOworICAgIGg0ICs9IGgxOworCisgICAgaDEgPSBmbWl4MzIoIGgxICk7CisgICAgaDIgPSBmbWl4MzIoIGgyICk7CisgICAgaDMgPSBmbWl4MzIoIGgzICk7CisgICAgaDQgPSBmbWl4MzIoIGg0ICk7CisKKyAgICBoMSArPSBoMjsKKyAgICBoMSArPSBoMzsKKyAgICBoMSArPSBoNDsKKworICAgIGgyICs9IGgxOworICAgIGgzICs9IGgxOworICAgIGg0ICs9IGgxOworCisgICAgKChGVF9VSW50MzIqKW91dClbMF0gPSBoMTsKKyAgICAoKEZUX1VJbnQzMiopb3V0KVsxXSA9IGgyOworICAgICgoRlRfVUludDMyKilvdXQpWzJdID0gaDM7CisgICAgKChGVF9VSW50MzIqKW91dClbM10gPSBoNDsKKyAgfQorCisKKyNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUICovCisKKwogICB0eXBlZGVmIGludCAoKmNoYXJfdHlwZV9mdW5jKSggaW50ICBjICk7CiAKIApAQCAtMjYyLDcgKzQ2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKG4pLT5lbmNvZGluZ0lEID09IDAgJiYgXAogICAgICAgICAgICAgICAgICAgICAgICAgIChuKS0+bGFuZ3VhZ2VJRCA9PSAwICkKIAotICBzdGF0aWMgY29uc3QgY2hhcioKKyAgc3RhdGljIGNoYXIqCiAgIGdldF93aW5fc3RyaW5nKCBGVF9NZW1vcnkgICAgICAgbWVtb3J5LAogICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgICAgIHN0cmVhbSwKICAgICAgICAgICAgICAgICAgIFRUX05hbWUgICAgICAgICBlbnRyeSwKQEAgLTI3MSwxMCArNDc4LDEwIEBACiAgIHsKICAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7CiAKLSAgICBjb25zdCBjaGFyKiAgcmVzdWx0OwotICAgIEZUX1N0cmluZyogICByOwotICAgIEZUX0NoYXIqICAgICBwOwotICAgIEZUX1VJbnQgICAgICBsZW47CisgICAgY2hhciogICAgICAgcmVzdWx0ID0gTlVMTDsKKyAgICBGVF9TdHJpbmcqICByOworICAgIEZUX0NoYXIqICAgIHA7CisgICAgRlRfVUludCAgICAgbGVuOwogCiAgICAgRlRfVU5VU0VEKCBlcnJvciApOwogCkBAIC0zMjMsNyArNTMwLDcgQEAKICAgfQogCiAKLSAgc3RhdGljIGNvbnN0IGNoYXIqCisgIHN0YXRpYyBjaGFyKgogICBnZXRfYXBwbGVfc3RyaW5nKCBGVF9NZW1vcnkgICAgICAgbWVtb3J5LAogICAgICAgICAgICAgICAgICAgICBGVF9TdHJlYW0gICAgICAgc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBUVF9OYW1lICAgICAgICAgZW50cnksCkBAIC0zMzIsMTAgKzUzOSwxMCBAQAogICB7CiAgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwogCi0gICAgY29uc3QgY2hhciogIHJlc3VsdDsKLSAgICBGVF9TdHJpbmcqICAgcjsKLSAgICBGVF9DaGFyKiAgICAgcDsKLSAgICBGVF9VSW50ICAgICAgbGVuOworICAgIGNoYXIqICAgICAgIHJlc3VsdCA9IE5VTEw7CisgICAgRlRfU3RyaW5nKiAgcjsKKyAgICBGVF9DaGFyKiAgICBwOworICAgIEZUX1VJbnQgICAgIGxlbjsKIAogICAgIEZUX1VOVVNFRCggZXJyb3IgKTsKIApAQCAtNDEyLDYgKzYxOSw0MDYgQEAKICAgfQogCiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisKKyAgLyoKKyAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBheGlzIHZhbHVlIGRlc2NyaXB0b3IuCisKKyAgICAgIFdlIG5lZWQgNjU1MzYgZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIGRlY2ltYWwgZnJhY3Rpb247IHRoaXMgZml0cworICAgICAgbmljZWx5IGludG8gZml2ZSBkZWNpbWFsIHBsYWNlcy4gIENvbnNlcXVlbnRseSwgaXQgY29uc2lzdHMgb2YKKworICAgICAgICAuIHRoZSBtaW51cyBzaWduIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUsCisgICAgICAgIC4gdXAgdG8gZml2ZSBjaGFyYWN0ZXJzIGZvciB0aGUgZGlnaXRzIGJlZm9yZSB0aGUgZGVjaW1hbCBwb2ludCwKKyAgICAgICAgLiB0aGUgZGVjaW1hbCBwb2ludCBpZiB0aGVyZSBpcyBhIGZyYWN0aW9uYWwgcGFydCwgYW5kCisgICAgICAgIC4gdXAgdG8gZml2ZSBjaGFyYWN0ZXJzIGZvciB0aGUgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LgorCisgICAgICBXZSBhbHNvIG5lZWQgb25lIGJ5dGUgZm9yIHRoZSBsZWFkaW5nIGBfJyBjaGFyYWN0ZXIgYW5kIHVwIHRvIGZvdXIKKyAgICAgIGJ5dGVzIGZvciB0aGUgYXhpcyB0YWcuCisgICAqLworI2RlZmluZSBNQVhfVkFMVUVfREVTQ1JJUFRPUl9MRU4gICggMSArIDUgKyAxICsgNSArIDEgKyA0ICkKKworCisgIC8qIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBQb3N0U2NyaXB0IGZvbnQgbmFtZXMgKi8KKyNkZWZpbmUgTUFYX1BTX05BTUVfTEVOICAxMjcKKworCisgIC8qCisgICAqICBGaW5kIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgMTYuMTYgZml4ZWQgcG9pbnQKKyAgICogIG51bWJlci4gIFRoZSBmdW5jdGlvbiBmaWxscyBgYnVmJyB3aXRoIHRoZSByZXN1bHQsIHJldHVybmluZyBhIHBvaW50ZXIKKyAgICogIHRvIHRoZSBwb3NpdGlvbiBhZnRlciB0aGUgcmVwcmVzZW50YXRpb24ncyBsYXN0IGJ5dGUuCisgICAqLworCisgIHN0YXRpYyBjaGFyKgorICBmaXhlZDJmbG9hdCggRlRfSW50ICBmaXhlZCwKKyAgICAgICAgICAgICAgIGNoYXIqICAgYnVmICkKKyAgeworICAgIGNoYXIqICBwOworICAgIGNoYXIqICBxOworICAgIGNoYXIgICB0bXBbNV07CisKKyAgICBGVF9JbnQgIGludF9wYXJ0OworICAgIEZUX0ludCAgZnJhY19wYXJ0OworCisgICAgRlRfSW50ICBpOworCisKKyAgICBwID0gYnVmOworCisgICAgaWYgKCBmaXhlZCA9PSAwICkKKyAgICB7CisgICAgICAqcCsrID0gJzAnOworICAgICAgcmV0dXJuIHA7CisgICAgfQorCisgICAgaWYgKCBmaXhlZCA8IDAgKQorICAgIHsKKyAgICAgICpwKysgPSAnLSc7CisgICAgICBmaXhlZCA9IC1maXhlZDsKKyAgICB9CisKKyAgICBpbnRfcGFydCAgPSAoIGZpeGVkID4+IDE2ICkgJiAweEZGRkY7CisgICAgZnJhY19wYXJ0ID0gZml4ZWQgJiAweEZGRkY7CisKKyAgICAvKiBnZXQgZGlnaXRzIG9mIGludGVnZXIgcGFydCAoaW4gcmV2ZXJzZSBvcmRlcikgKi8KKyAgICBxID0gdG1wOworICAgIHdoaWxlICggaW50X3BhcnQgPiAwICkKKyAgICB7CisgICAgICAqcSsrICAgICAgPSAnMCcgKyBpbnRfcGFydCAlIDEwOworICAgICAgaW50X3BhcnQgLz0gMTA7CisgICAgfQorCisgICAgLyogY29weSBkaWdpdHMgaW4gY29ycmVjdCBvcmRlciB0byBidWZmZXIgKi8KKyAgICB3aGlsZSAoIHEgPiB0bXAgKQorICAgICAgKnArKyA9ICotLXE7CisKKyAgICBpZiAoICFmcmFjX3BhcnQgKQorICAgICAgcmV0dXJuIHA7CisKKyAgICAvKiBzYXZlIHBvc2l0aW9uIG9mIHBvaW50ICovCisgICAgcSAgICA9IHA7CisgICAgKnArKyA9ICcuJzsKKworICAgIC8qIGFwcGx5IHJvdW5kaW5nICovCisgICAgZnJhY19wYXJ0ID0gZnJhY19wYXJ0ICogMTAgKyA1OworCisgICAgLyogZ2V0IGRpZ2l0cyBvZiBmcmFjdGlvbmFsIHBhcnQgKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IDU7IGkrKyApCisgICAgeworICAgICAgKnArKyA9ICcwJyArIChjaGFyKSggZnJhY19wYXJ0IC8gMHgxMDAwMEwgKTsKKworICAgICAgZnJhY19wYXJ0ICU9IDB4MTAwMDBMOworICAgICAgaWYgKCAhZnJhY19wYXJ0ICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGZyYWNfcGFydCAqPSAxMDsKKyAgICB9CisKKyAgICAvKgorICAgICAgICBJZiB0aGUgcmVtYWluZGVyIHN0b3JlZCBpbiBgZnJhY19wYXJ0JyAoYWZ0ZXIgdGhlIGxhc3QgRk9SIGxvb3ApIGlzCisgICAgICAgIHNtYWxsZXIgdGhhbiAzNDQ4MCoxMCwgdGhlIHJlc3VsdGluZyBkZWNpbWFsIHZhbHVlIG1pbnVzIDAuMDAwMDEgaXMKKyAgICAgICAgYW4gZXF1aXZhbGVudCByZXByZXNlbnRhdGlvbiBvZiBgZml4ZWQnLgorCisgICAgICAgIFRoZSBhYm92ZSBGT1IgbG9vcCBhbHdheXMgZmluZHMgdGhlIGxhcmdlciBvZiB0aGUgdHdvIHZhbHVlczsgSQorICAgICAgICB2ZXJpZmllZCB0aGlzIGJ5IGl0ZXJhdGluZyBvdmVyIGFsbCBwb3NzaWJsZSBmaXhlZCBwb2ludCBudW1iZXJzLgorCisgICAgICAgIElmIHRoZSByZW1haW5kZXIgaXMgMTcyMzIqMTAsIGJvdGggdmFsdWVzIGFyZSBlcXVhbGx5IGdvb2QsIGFuZCB3ZQorICAgICAgICB0YWtlIHRoZSBuZXh0IGV2ZW4gbnVtYmVyIChmb2xsb3dpbmcgSUVFRSA3NTQncyBgcm91bmQgdG8gbmVhcmVzdCwKKyAgICAgICAgdGllcyB0byBldmVuJyByb3VuZGluZyBydWxlKS4KKworICAgICAgICBJZiB0aGUgcmVtYWluZGVyIGlzIHNtYWxsZXIgdGhhbiAxNzIzMioxMCwgdGhlIGxvd2VyIG9mIHRoZSB0d28KKyAgICAgICAgbnVtYmVycyBpcyBuZWFyZXIgdG8gdGhlIGV4YWN0IHJlc3VsdCAodmFsdWVzIDE3MjMyIGFuZCAzNDQ4MCB3ZXJlCisgICAgICAgIGFsc28gZm91bmQgYnkgdGVzdGluZyBhbGwgcG9zc2libGUgZml4ZWQgcG9pbnQgdmFsdWVzKS4KKworICAgICAgICBXZSB1c2UgdGhpcyB0byBmaW5kIGEgc2hvcnRlciBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLiAgSWYgbm90IGVuZGluZworICAgICAgICB3aXRoIGRpZ2l0IHplcm8sIHdlIHRha2UgdGhlIHJlcHJlc2VudGF0aW9uIHdpdGggbGVzcyBlcnJvci4KKyAgICAgKi8KKyAgICBwLS07CisgICAgaWYgKCBwIC0gcSA9PSA1ICkgIC8qIGZpdmUgZGlnaXRzPyAqLworICAgIHsKKyAgICAgIC8qIHRha2UgdGhlIHJlcHJlc2VudGF0aW9uIHRoYXQgaGFzIHplcm8gYXMgdGhlIGxhc3QgZGlnaXQgKi8KKyAgICAgIGlmICggZnJhY19wYXJ0IDwgMzQ0ODAgKiAxMCAmJgorICAgICAgICAgICAqcCA9PSAnMScgICAgICAgICAgICAgICkKKyAgICAgICAgKnAgPSAnMCc7CisKKyAgICAgIC8qIG90aGVyd2lzZSB1c2UgdGhlIG9uZSB3aXRoIGxlc3MgZXJyb3IgKi8KKyAgICAgIGVsc2UgaWYgKCBmcmFjX3BhcnQgPT0gMTcyMzIgKiAxMCAmJgorICAgICAgICAgICAgICAgICpwICYgMSAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgKnAgLT0gMTsKKworICAgICAgZWxzZSBpZiAoIGZyYWNfcGFydCA8IDE3MjMyICogMTAgJiYKKyAgICAgICAgICAgICAgICAqcCAhPSAnMCcgICAgICAgICAgICAgICkKKyAgICAgICAgKnAgLT0gMTsKKyAgICB9CisKKyAgICAvKiByZW1vdmUgdHJhaWxpbmcgemVyb3MgKi8KKyAgICB3aGlsZSAoICpwID09ICcwJyApCisgICAgICAqcC0tID0gJ1wwJzsKKworICAgIHJldHVybiBwICsgMTsKKyAgfQorCisKKyAgc3RhdGljIGNvbnN0IGNoYXIgIGhleGRpZ2l0c1sxNl0gPQorICB7CisgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsCisgICAgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicKKyAgfTsKKworCisgIHN0YXRpYyBjb25zdCBjaGFyKgorICBzZm50X2dldF92YXJfcHNfbmFtZSggVFRfRmFjZSAgZmFjZSApCisgIHsKKyAgICBGVF9FcnJvciAgIGVycm9yOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisKKyAgICBGVF9TZXJ2aWNlX011bHRpTWFzdGVycyAgbW0gPSAoRlRfU2VydmljZV9NdWx0aU1hc3RlcnMpZmFjZS0+bW07CisKKyAgICBGVF9VSW50ICAgICBudW1fY29vcmRzOworICAgIEZUX0ZpeGVkKiAgIGNvb3JkczsKKyAgICBGVF9NTV9WYXIqICBtbV92YXI7CisKKyAgICBGVF9JbnQgICBmb3VuZCwgd2luLCBhcHBsZTsKKyAgICBGVF9VSW50ICBpLCBqOworCisgICAgY2hhciogIHJlc3VsdCA9IE5VTEw7CisgICAgY2hhciogIHA7CisKKworICAgIGlmICggIWZhY2UtPnZhcl9wb3N0c2NyaXB0X3ByZWZpeCApCisgICAgeworICAgICAgRlRfVUludCAgbGVuOworCisKKyAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIFZhcmlhdGlvbnMgUG9zdFNjcmlwdCBOYW1lIFByZWZpeCAqLworICAgICAgZm91bmQgPSBzZm50X2dldF9uYW1lX2lkKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9OQU1FX0lEX1ZBUklBVElPTlNfUFJFRklYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXBwbGUgKTsKKyAgICAgIGlmICggIWZvdW5kICkKKyAgICAgIHsKKyAgICAgICAgLyogb3RoZXJ3aXNlIHVzZSB0aGUgdHlwb2dyYXBoaWMgZmFtaWx5IG5hbWUgKi8KKyAgICAgICAgZm91bmQgPSBzZm50X2dldF9uYW1lX2lkKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX05BTUVfSURfVFlQT0dSQVBISUNfRkFNSUxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFwcGxlICk7CisgICAgICB9CisKKyAgICAgIGlmICggIWZvdW5kICkKKyAgICAgIHsKKyAgICAgICAgLyogYXMgYSBsYXN0IHJlc29ydCB3ZSB0cnkgdGhlIGZhbWlseSBuYW1lOyBub3RlIHRoYXQgdGhpcyBpcyAqLworICAgICAgICAvKiBub3QgaW4gdGhlIEFkb2JlIFRlY2hOb3RlLCBidXQgR1ggZm9udHMgKHdoaWNoIHByZWRhdGUgdGhlICovCisgICAgICAgIC8qIFRlY2hOb3RlKSBiZW5lZml0IGZyb20gdGhpcyBiZWhhdmlvdXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgZm91bmQgPSBzZm50X2dldF9uYW1lX2lkKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX05BTUVfSURfRk9OVF9GQU1JTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXBwbGUgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCAhZm91bmQgKQorICAgICAgeworICAgICAgICBGVF9UUkFDRTAoKCAic2ZudF9nZXRfdmFyX3BzX25hbWU6IgorICAgICAgICAgICAgICAgICAgICAiIENhbid0IGNvbnN0cnVjdCBQUyBuYW1lIHByZWZpeCBmb3IgZm9udCBpbnN0YW5jZXNcbiIgKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICAvKiBwcmVmZXIgV2luZG93cyBlbnRyaWVzIG92ZXIgQXBwbGUgKi8KKyAgICAgIGlmICggd2luICE9IC0xICkKKyAgICAgICAgcmVzdWx0ID0gZ2V0X3dpbl9zdHJpbmcoIGZhY2UtPnJvb3QubWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bmFtZV90YWJsZS5zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5uYW1lX3RhYmxlLm5hbWVzICsgd2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudF9pc19hbHBoYW51bWVyaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICk7CisgICAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IGdldF9hcHBsZV9zdHJpbmcoIGZhY2UtPnJvb3QubWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5uYW1lX3RhYmxlLnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bmFtZV90YWJsZS5uYW1lcyArIGFwcGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50X2lzX2FscGhhbnVtZXJpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOworCisgICAgICBsZW4gPSBmdF9zdHJsZW4oIHJlc3VsdCApOworCisgICAgICAvKiBzYW5pdGl6ZSBpZiBuZWNlc3Nhcnk7IHdlIHJlc2VydmUgc3BhY2UgZm9yIDM2IGJ5dGVzIChhIDEyOGJpdCAgKi8KKyAgICAgIC8qIGNoZWNrc3VtIGFzIGEgaGV4IG51bWJlciwgcHJlY2VkZWQgYnkgYC0nIGFuZCBmb2xsb3dlZCBieSB0aHJlZSAqLworICAgICAgLyogQVNDSUkgZG90cywgdG8gYmUgdXNlZCBpZiB0aGUgY29uc3RydWN0ZWQgUFMgbmFtZSB3b3VsZCBiZSB0b28gICovCisgICAgICAvKiBsb25nKTsgdGhpcyBpcyBhbHNvIHN1ZmZpY2llbnQgZm9yIGEgc2luZ2xlIGluc3RhbmNlICAgICAgICAgICAgKi8KKyAgICAgIGlmICggbGVuID4gTUFYX1BTX05BTUVfTEVOIC0gKCAxICsgMzIgKyAzICkgKQorICAgICAgeworICAgICAgICBsZW4gICAgICAgICA9IE1BWF9QU19OQU1FX0xFTiAtICggMSArIDMyICsgMyApOworICAgICAgICByZXN1bHRbbGVuXSA9ICdcMCc7CisKKyAgICAgICAgRlRfVFJBQ0UwKCggInNmbnRfZ2V0X3Zhcl9wc19uYW1lOiIKKyAgICAgICAgICAgICAgICAgICAgIiBTaG9ydGVuaW5nIHZhcmlhdGlvbiBQUyBuYW1lIHByZWZpeFxuIgorICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgIgorICAgICAgICAgICAgICAgICAgICAiIHRvICVkIGNoYXJhY3RlcnNcbiIsIGxlbiApKTsKKyAgICAgIH0KKworICAgICAgZmFjZS0+dmFyX3Bvc3RzY3JpcHRfcHJlZml4ICAgICA9IHJlc3VsdDsKKyAgICAgIGZhY2UtPnZhcl9wb3N0c2NyaXB0X3ByZWZpeF9sZW4gPSBsZW47CisgICAgfQorCisgICAgbW0tPmdldF92YXJfYmxlbmQoIEZUX0ZBQ0UoIGZhY2UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgJm51bV9jb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICZjb29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICZtbV92YXIgKTsKKworICAgIGlmICggRlRfSVNfTkFNRURfSU5TVEFOQ0UoIEZUX0ZBQ0UoIGZhY2UgKSApICYmCisgICAgICAgICAhRlRfSVNfVkFSSUFUSU9OKCBGVF9GQUNFKCBmYWNlICkgKSAgICAgKQorICAgIHsKKyAgICAgIFNGTlRfU2VydmljZSAgc2ZudCA9IChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudDsKKworICAgICAgRlRfTG9uZyAgaW5zdGFuY2UgPSAoICggZmFjZS0+cm9vdC5mYWNlX2luZGV4ICYgMHg3RkZGMDAwMEwgKSA+PiAxNiApIC0gMTsKKyAgICAgIEZUX1VJbnQgIHBzaWQgICAgID0gbW1fdmFyLT5uYW1lZHN0eWxlW2luc3RhbmNlXS5wc2lkOworCisgICAgICBjaGFyKiAgcHNfbmFtZSA9IE5VTEw7CisKKworICAgICAgLyogdHJ5IGZpcnN0IHRvIGxvYWQgdGhlIG5hbWUgc3RyaW5nIHdpdGggaW5kZXggYHBvc3RTY3JpcHROYW1lSUQnICovCisgICAgICBpZiAoIHBzaWQgPT0gNiAgICAgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAoIHBzaWQgPiAyNTUgJiYgcHNpZCA8IDMyNzY4ICkgKQorICAgICAgICAodm9pZClzZm50LT5nZXRfbmFtZSggZmFjZSwgKEZUX1VTaG9ydClwc2lkLCAmcHNfbmFtZSApOworCisgICAgICBpZiAoIHBzX25hbWUgKQorICAgICAgeworICAgICAgICByZXN1bHQgPSBwc19uYW1lOworICAgICAgICBwICAgICAgPSByZXN1bHQgKyBmdF9zdHJsZW4oIHJlc3VsdCApICsgMTsKKworICAgICAgICBnb3RvIGNoZWNrX2xlbmd0aDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogb3RoZXJ3aXNlIGNvbnN0cnVjdCBhIG5hbWUgdXNpbmcgYHN1YmZhbWlseU5hbWVJRCcgKi8KKyAgICAgICAgRlRfVUludCAgc3RyaWQgPSBtbV92YXItPm5hbWVkc3R5bGVbaW5zdGFuY2VdLnN0cmlkOworCisgICAgICAgIGNoYXIqICBzdWJmYW1pbHlfbmFtZTsKKyAgICAgICAgY2hhciogIHM7CisKKworICAgICAgICAodm9pZClzZm50LT5nZXRfbmFtZSggZmFjZSwgKEZUX1VTaG9ydClzdHJpZCwgJnN1YmZhbWlseV9uYW1lICk7CisKKyAgICAgICAgaWYgKCAhc3ViZmFtaWx5X25hbWUgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UxKCggInNmbnRfZ2V0X3Zhcl9wc19uYW1lOiIKKyAgICAgICAgICAgICAgICAgICAgICAiIGNhbid0IGNvbnN0cnVjdCBuYW1lZCBpbnN0YW5jZSBQUyBuYW1lO1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgICAgICAgICAgICAgICAgIiB0cnlpbmcgdG8gY29uc3RydWN0IG5vcm1hbCBpbnN0YW5jZSBQUyBuYW1lXG4iICkpOworICAgICAgICAgIGdvdG8gY29uc3RydWN0X2luc3RhbmNlX25hbWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBhZnRlciB0aGUgcHJlZml4IHdlIGhhdmUgY2hhcmFjdGVyIGAtJyBmb2xsb3dlZCBieSB0aGUgICAqLworICAgICAgICAvKiBzdWJmYW1pbHkgbmFtZSAodXNpbmcgb25seSBjaGFyYWN0ZXJzIGEteiwgQS1aLCBhbmQgMC05KSAqLworICAgICAgICBpZiAoIEZUX0FMTE9DKCByZXN1bHQsIGZhY2UtPnZhcl9wb3N0c2NyaXB0X3ByZWZpeF9sZW4gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKyBmdF9zdHJsZW4oIHN1YmZhbWlseV9uYW1lICkgKyAxICkgKQorICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGZ0X3N0cmNweSggcmVzdWx0LCBmYWNlLT52YXJfcG9zdHNjcmlwdF9wcmVmaXggKTsKKworICAgICAgICBwID0gcmVzdWx0ICsgZmFjZS0+dmFyX3Bvc3RzY3JpcHRfcHJlZml4X2xlbjsKKyAgICAgICAgKnArKyA9ICctJzsKKworICAgICAgICBzID0gc3ViZmFtaWx5X25hbWU7CisgICAgICAgIHdoaWxlICggKnMgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBmdF9pc2FsbnVtKCAqcyApICkKKyAgICAgICAgICAgICpwKysgPSAqczsKKyAgICAgICAgICBzKys7CisgICAgICAgIH0KKyAgICAgICAgKnArKyA9ICdcMCc7CisKKyAgICAgICAgRlRfRlJFRSggc3ViZmFtaWx5X25hbWUgKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEZUX1Zhcl9BeGlzKiAgYXhpczsKKworCisgICAgY29uc3RydWN0X2luc3RhbmNlX25hbWU6CisgICAgICBheGlzID0gbW1fdmFyLT5heGlzOworCisgICAgICBpZiAoIEZUX0FMTE9DKCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICBmYWNlLT52YXJfcG9zdHNjcmlwdF9wcmVmaXhfbGVuICsKKyAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Nvb3JkcyAqIE1BWF9WQUxVRV9ERVNDUklQVE9SX0xFTiArIDEgKSApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBwID0gcmVzdWx0OworCisgICAgICBmdF9zdHJjcHkoIHAsIGZhY2UtPnZhcl9wb3N0c2NyaXB0X3ByZWZpeCApOworICAgICAgcCArPSBmYWNlLT52YXJfcG9zdHNjcmlwdF9wcmVmaXhfbGVuOworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9jb29yZHM7IGkrKywgY29vcmRzKyssIGF4aXMrKyApCisgICAgICB7CisgICAgICAgIGNoYXIgIHQ7CisKKworICAgICAgICAvKiBvbWl0IGF4aXMgdmFsdWUgZGVzY3JpcHRvciBpZiBpdCBpcyBpZGVudGljYWwgKi8KKyAgICAgICAgLyogdG8gdGhlIGRlZmF1bHQgYXhpcyB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGlmICggKmNvb3JkcyA9PSBheGlzLT5kZWYgKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICpwKysgPSAnXyc7CisgICAgICAgIHAgICAgPSBmaXhlZDJmbG9hdCggKmNvb3JkcywgcCApOworCisgICAgICAgIHQgPSAoY2hhcikoIGF4aXMtPnRhZyA+PiAyNCApOworICAgICAgICBpZiAoIHQgIT0gJyAnICYmIGZ0X2lzYWxudW0oIHQgKSApCisgICAgICAgICAgKnArKyA9IHQ7CisgICAgICAgIHQgPSAoY2hhcikoIGF4aXMtPnRhZyA+PiAxNiApOworICAgICAgICBpZiAoIHQgIT0gJyAnICYmIGZ0X2lzYWxudW0oIHQgKSApCisgICAgICAgICAgKnArKyA9IHQ7CisgICAgICAgIHQgPSAoY2hhcikoIGF4aXMtPnRhZyA+PiA4ICk7CisgICAgICAgIGlmICggdCAhPSAnICcgJiYgZnRfaXNhbG51bSggdCApICkKKyAgICAgICAgICAqcCsrID0gdDsKKyAgICAgICAgdCA9IChjaGFyKWF4aXMtPnRhZzsKKyAgICAgICAgaWYgKCB0ICE9ICcgJyAmJiBmdF9pc2FsbnVtKCB0ICkgKQorICAgICAgICAgICpwKysgPSB0OworICAgICAgfQorICAgIH0KKworICBjaGVja19sZW5ndGg6CisgICAgaWYgKCBwIC0gcmVzdWx0ID4gTUFYX1BTX05BTUVfTEVOICkKKyAgICB7CisgICAgICAvKiB0aGUgUFMgbmFtZSBpcyB0b28gbG9uZzsgcmVwbGFjZSB0aGUgcGFydCBhZnRlciB0aGUgcHJlZml4IHdpdGggKi8KKyAgICAgIC8qIGEgY2hlY2tzdW07IHdlIHVzZSBNdXJtdXJIYXNoIDMgd2l0aCBhIGhhc2ggbGVuZ3RoIG9mIDEyOCBiaXQgICAqLworCisgICAgICBGVF9VSW50MzIgIHNlZWQgPSAxMjM0NTY3ODk7CisKKyAgICAgIEZUX1VJbnQzMiAgIGhhc2hbNF07CisgICAgICBGVF9VSW50MzIqICBoOworCisKKyAgICAgIG11cm11cl9oYXNoXzNfMTI4KCByZXN1bHQsIHAgLSByZXN1bHQsIHNlZWQsIGhhc2ggKTsKKworICAgICAgcCA9IHJlc3VsdCArIGZhY2UtPnZhcl9wb3N0c2NyaXB0X3ByZWZpeF9sZW47CisgICAgICAqcCsrID0gJy0nOworCisgICAgICAvKiB3ZSBjb252ZXJ0IHRoZSBoYXNoIHZhbHVlIHRvIGhleCBkaWdpdHMgZnJvbSBiYWNrIHRvIGZyb250ICovCisgICAgICBwICs9IDMyICsgMzsKKyAgICAgIGggID0gaGFzaCArIDM7CisKKyAgICAgICpwLS0gPSAnXDAnOworICAgICAgKnAtLSA9ICcuJzsKKyAgICAgICpwLS0gPSAnLic7CisgICAgICAqcC0tID0gJy4nOworCisgICAgICBmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKywgaC0tICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludDMyICB2ID0gKmg7CisKKworICAgICAgICBmb3IgKCBqID0gMDsgaiA8IDg7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAqcC0tICAgPSBoZXhkaWdpdHNbdiAmIDB4Rl07CisgICAgICAgICAgdiAgICA+Pj0gNDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKi8KKworCiAgIHN0YXRpYyBjb25zdCBjaGFyKgogICBzZm50X2dldF9wc19uYW1lKCBUVF9GYWNlICBmYWNlICkKICAgewpAQCAtNDIyLDI2ICsxMDI5LDM1IEBACiAgICAgaWYgKCBmYWNlLT5wb3N0c2NyaXB0X25hbWUgKQogICAgICAgcmV0dXJuIGZhY2UtPnBvc3RzY3JpcHRfbmFtZTsKIAorI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgICBpZiAoIGZhY2UtPmJsZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICggRlRfSVNfTkFNRURfSU5TVEFOQ0UoIEZUX0ZBQ0UoIGZhY2UgKSApIHx8CisgICAgICAgICAgIEZUX0lTX1ZBUklBVElPTiggRlRfRkFDRSggZmFjZSApICkgICAgICApICkKKyAgICB7CisgICAgICBmYWNlLT5wb3N0c2NyaXB0X25hbWUgPSBzZm50X2dldF92YXJfcHNfbmFtZSggZmFjZSApOworICAgICAgcmV0dXJuIGZhY2UtPnBvc3RzY3JpcHRfbmFtZTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8qIHNjYW4gdGhlIG5hbWUgdGFibGUgdG8gc2VlIHdoZXRoZXIgd2UgaGF2ZSBhIFBvc3RzY3JpcHQgbmFtZSBoZXJlLCAqLwogICAgIC8qIGVpdGhlciBpbiBNYWNpbnRvc2ggb3IgV2luZG93cyBwbGF0Zm9ybSBlbmNvZGluZ3MgICAgICAgICAgICAgICAgICAqLwotICAgIGZvdW5kID0gc2ZudF9nZXRfbmFtZV9pZCggZmFjZSwgNiwgJndpbiwgJmFwcGxlICk7CisgICAgZm91bmQgPSBzZm50X2dldF9uYW1lX2lkKCBmYWNlLCBUVF9OQU1FX0lEX1BTX05BTUUsICZ3aW4sICZhcHBsZSApOworICAgIGlmICggIWZvdW5kICkKKyAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCBmb3VuZCApCi0gICAgewotICAgICAgLyogcHJlZmVyIFdpbmRvd3MgZW50cmllcyBvdmVyIEFwcGxlICovCi0gICAgICBpZiAoIHdpbiAhPSAtMSApCi0gICAgICAgIHJlc3VsdCA9IGdldF93aW5fc3RyaW5nKCBmYWNlLT5yb290Lm1lbW9yeSwKKyAgICAvKiBwcmVmZXIgV2luZG93cyBlbnRyaWVzIG92ZXIgQXBwbGUgKi8KKyAgICBpZiAoIHdpbiAhPSAtMSApCisgICAgICByZXN1bHQgPSBnZXRfd2luX3N0cmluZyggZmFjZS0+cm9vdC5tZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bmFtZV90YWJsZS5zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bmFtZV90YWJsZS5uYW1lcyArIHdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50X2lzX3Bvc3RzY3JpcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSApOworICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IGdldF9hcHBsZV9zdHJpbmcoIGZhY2UtPnJvb3QubWVtb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bmFtZV90YWJsZS5zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlLT5uYW1lX3RhYmxlLm5hbWVzICsgd2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bmFtZV90YWJsZS5uYW1lcyArIGFwcGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudF9pc19wb3N0c2NyaXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSApOwotICAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBnZXRfYXBwbGVfc3RyaW5nKCBmYWNlLT5yb290Lm1lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+bmFtZV90YWJsZS5zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPm5hbWVfdGFibGUubmFtZXMgKyBhcHBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZudF9pc19wb3N0c2NyaXB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICk7Ci0gICAgfQogCiAgICAgZmFjZS0+cG9zdHNjcmlwdF9uYW1lID0gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZmRyaXZlci5oIGIvc3JjL3NmbnQvc2Zkcml2ZXIuaAppbmRleCAzODcxMGI2Li44MWMyMmQyIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZmRyaXZlci5oCisrKyBiL3NyYy9zZm50L3NmZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBTRk5UIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3NmZXJyb3JzLmggYi9zcmMvc2ZudC9zZmVycm9ycy5oCmluZGV4IDNjZjczZDcuLjc0MDAzZDQgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3NmZXJyb3JzLmgKKysrIGIvc3JjL3NmbnQvc2ZlcnJvcnMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTRk5UIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZudC5jIGIvc3JjL3NmbnQvc2ZudC5jCmluZGV4IGNmZmRhNmUuLjhiOWE2YjMgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3NmbnQuYworKysgYi9zcmMvc2ZudC9zZm50LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU2luZ2xlIG9iamVjdCBsaWJyYXJ5IGNvbXBvbmVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDI3ICsxNywxOSBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKworI2luY2x1ZGUgInBuZ3NoaW0uYyIKKyNpbmNsdWRlICJzZmRyaXZlci5jIgogI2luY2x1ZGUgInNmbnRwaWMuYyIKLSNpbmNsdWRlICJ0dGxvYWQuYyIKLSNpbmNsdWRlICJ0dG10eC5jIgorI2luY2x1ZGUgInNmb2Jqcy5jIgorI2luY2x1ZGUgInR0YmRmLmMiCiAjaW5jbHVkZSAidHRjbWFwLmMiCiAjaW5jbHVkZSAidHRrZXJuLmMiCi0jaW5jbHVkZSAic2ZvYmpzLmMiCi0jaW5jbHVkZSAic2Zkcml2ZXIuYyIKLQotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fRU1CRURERURfQklUTUFQUwotI2luY2x1ZGUgInBuZ3NoaW0uYyIKLSNpbmNsdWRlICJ0dHNiaXQuYyIKLSNlbmRpZgotCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisjaW5jbHVkZSAidHRsb2FkLmMiCisjaW5jbHVkZSAidHRtdHguYyIKICNpbmNsdWRlICJ0dHBvc3QuYyIKLSNlbmRpZgorI2luY2x1ZGUgInR0c2JpdC5jIgogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9CREYKLSNpbmNsdWRlICJ0dGJkZi5jIgotI2VuZGlmCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZudHBpYy5jIGIvc3JjL3NmbnQvc2ZudHBpYy5jCmluZGV4IDhlYWRkNjAuLmRiMmQ4MTYgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3NmbnRwaWMuYworKysgYi9zcmMvc2ZudC9zZm50cGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHNmbnQgbW9kdWxlLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3NmbnRwaWMuaCBiL3NyYy9zZm50L3NmbnRwaWMuaAppbmRleCAzYWZiNjY4Li44ZjQzMTIyIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZm50cGljLmgKKysrIGIvc3JjL3NmbnQvc2ZudHBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzZm50IG1vZHVsZS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZm9ianMuYyBiL3NyYy9zZm50L3Nmb2Jqcy5jCmluZGV4IDU0OTEyYzUuLjBjOTE3MDMgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3Nmb2Jqcy5jCisrKyBiL3NyYy9zZm50L3Nmb2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKGJhc2UpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03ODcsNiArNzg3LDggQEAKICAgICAgICAgIHRhZyAhPSBUVEFHX09UVE8gICAgJiYKICAgICAgICAgIHRhZyAhPSBUVEFHX3RydWUgICAgJiYKICAgICAgICAgIHRhZyAhPSBUVEFHX3R5cDEgICAgJiYKKyAgICAgICAgIHRhZyAhPSBUVEFHXzB4QTVrYmQgJiYKKyAgICAgICAgIHRhZyAhPSBUVEFHXzB4QTVsc3QgJiYKICAgICAgICAgIHRhZyAhPSAweDAwMDIwMDAwVUwgKQogICAgIHsKICAgICAgIEZUX1RSQUNFMigoICIgIG5vdCBhIGZvbnQgdXNpbmcgdGhlIFNGTlQgY29udGFpbmVyIGZvcm1hdFxuIiApKTsKQEAgLTg1Niw3ICs4NTgsNiBAQAogICAgICAgICAgICAgICAgICAgRlRfUGFyYW1ldGVyKiAgcGFyYW1zICkKICAgewogICAgIEZUX0Vycm9yICAgICAgZXJyb3I7Ci0gICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKICAgICBGVF9MaWJyYXJ5ICAgIGxpYnJhcnkgPSBmYWNlLT5yb290LmRyaXZlci0+cm9vdC5saWJyYXJ5OwogICAgIFNGTlRfU2VydmljZSAgc2ZudDsKICAgICBGVF9JbnQgICAgICAgIGZhY2VfaW5kZXg7CkBAIC05NDMsNiArOTQ0LDggQEAKIAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKICAgICB7CisgICAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OworCiAgICAgICBGVF9VTG9uZyAgZnZhcl9sZW47CiAKICAgICAgIEZUX1VMb25nICB2ZXJzaW9uOwpAQCAtOTU5LDggKzk2Miw2IEBACiAgICAgICBGVF9CeXRlKiAgaW5zdGFuY2VfdmFsdWVzID0gTlVMTDsKIAogCi0gICAgICBmYWNlLT5pc19kZWZhdWx0X2luc3RhbmNlID0gMTsKLQogICAgICAgaW5zdGFuY2VfaW5kZXggPSBGVF9BQlMoIGZhY2VfaW5zdGFuY2VfaW5kZXggKSA+PiAxNjsKIAogICAgICAgLyogdGVzdCB3aGV0aGVyIGN1cnJlbnQgZmFjZSBpcyBhIEdYIGZvbnQgd2l0aCBuYW1lZCBpbnN0YW5jZXMgKi8KQEAgLTEwMTEsOCArMTAxMiw5IEBACiAgICAgICAgKiAgbGF0ZXIgb24uICBIZXJlLCB3ZSBoYXZlIHRvIGFkanVzdCBgbnVtX2luc3RhbmNlcycgYWNjb3JkaW5nbHkuCiAgICAgICAgKi8KIAotICAgICAgaWYgKCAhKCBGVF9BTExPQyggZGVmYXVsdF92YWx1ZXMsIG51bV9heGVzICogMiApICB8fAotICAgICAgICAgICAgICBGVF9BTExPQyggaW5zdGFuY2VfdmFsdWVzLCBudW1fYXhlcyAqIDIgKSApICkKKyAgICAgIGlmICggKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmIFRUX0ZBQ0VfRkxBR19WQVJfRlZBUiApICYmCisgICAgICAgICAgICEoIEZUX0FMTE9DKCBkZWZhdWx0X3ZhbHVlcywgbnVtX2F4ZXMgKiA0ICkgIHx8CisgICAgICAgICAgICAgIEZUX0FMTE9DKCBpbnN0YW5jZV92YWx1ZXMsIG51bV9heGVzICogNCApICkgICAgICApCiAgICAgICB7CiAgICAgICAgIC8qIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbiBpcyAxNiBieXRlcyBhZnRlciB0aGUgdGFibGUgc3RhcnQgKi8KICAgICAgICAgRlRfVUxvbmcgIGFycmF5X3N0YXJ0ID0gRlRfU1RSRUFNX1BPUygpIC0gMTYgKyBvZmZzZXQ7CkBAIC0xMDI3LDEwICsxMDI5LDEwIEBACiAKICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fYXhlczsgaSsrICkKICAgICAgICAgewotICAgICAgICAgICh2b2lkKUZUX1NUUkVBTV9SRUFEX0FUKCBkZWZhdWx0X3ZhbHVlX29mZnNldCwgcCwgMiApOworICAgICAgICAgICh2b2lkKUZUX1NUUkVBTV9SRUFEX0FUKCBkZWZhdWx0X3ZhbHVlX29mZnNldCwgcCwgNCApOwogCiAgICAgICAgICAgZGVmYXVsdF92YWx1ZV9vZmZzZXQgKz0gYXhpc19zaXplOwotICAgICAgICAgIHAgICAgICAgICAgICAgICAgICAgICs9IDI7CisgICAgICAgICAgcCAgICAgICAgICAgICAgICAgICAgKz0gNDsKICAgICAgICAgfQogCiAgICAgICAgIGluc3RhbmNlX29mZnNldCA9IGFycmF5X3N0YXJ0ICsgYXhpc19zaXplICogbnVtX2F4ZXMgKyA0OwpAQCAtMTAzOSw5ICsxMDQxLDkgQEAKICAgICAgICAgewogICAgICAgICAgICh2b2lkKUZUX1NUUkVBTV9SRUFEX0FUKCBpbnN0YW5jZV9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2F4ZXMgKiAyICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9heGVzICogNCApOwogCi0gICAgICAgICAgaWYgKCAhZnRfbWVtY21wKCBkZWZhdWx0X3ZhbHVlcywgaW5zdGFuY2VfdmFsdWVzLCBudW1fYXhlcyAqIDIgKSApCisgICAgICAgICAgaWYgKCAhZnRfbWVtY21wKCBkZWZhdWx0X3ZhbHVlcywgaW5zdGFuY2VfdmFsdWVzLCBudW1fYXhlcyAqIDQgKSApCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgIGluc3RhbmNlX29mZnNldCArPSBpbnN0YW5jZV9zaXplOwpAQCAtMTIyMiw3ICsxMjI0LDEwIEBACiAgICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKLSAgICBpZiAoIGZhY2UtPmhlYWRlci5Vbml0c19QZXJfRU0gPT0gMCApCisgICAgLyogT3BlblR5cGUgMS44LjIgaW50cm9kdWNlZCBsaW1pdHMgdG8gdGhpcyB2YWx1ZTsgICAgKi8KKyAgICAvKiBob3dldmVyLCB0aGV5IG1ha2Ugc2Vuc2UgZm9yIG9sZGVyIFNGTlQgZm9udHMgYWxzbyAqLworICAgIGlmICggZmFjZS0+aGVhZGVyLlVuaXRzX1Blcl9FTSA8ICAgIDE2IHx8CisgICAgICAgICBmYWNlLT5oZWFkZXIuVW5pdHNfUGVyX0VNID4gMTYzODQgKQogICAgIHsKICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKIApAQCAtMTQ2Miw3ICsxNDY3LDggQEAKICAgICAgIC8qIFBvbGlzaCB0aGUgY2hhcm1hcHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgLyogICBUcnkgdG8gc2V0IHRoZSBjaGFybWFwIGVuY29kaW5nIGFjY29yZGluZyB0byB0aGUgcGxhdGZvcm0gJiAgICAgKi8KLSAgICAgIC8qICAgZW5jb2RpbmcgSUQgb2YgZWFjaCBjaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiAgIGVuY29kaW5nIElEIG9mIGVhY2ggY2hhcm1hcC4gIEVtdWxhdGUgVW5pY29kZSBjaGFybWFwIGlmIG9uZSAgICAqLworICAgICAgLyogICBpcyBtaXNzaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgIHR0X2ZhY2VfYnVpbGRfY21hcHMoIGZhY2UgKTsgIC8qIGlnbm9yZSBlcnJvcnMgKi8KQEAgLTE0NzAsNyArMTQ3NiwxMCBAQAogCiAgICAgICAvKiBzZXQgdGhlIGVuY29kaW5nIGZpZWxkcyAqLwogICAgICAgewotICAgICAgICBGVF9JbnQgIG07CisgICAgICAgIEZUX0ludCAgIG07CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisgICAgICAgIEZUX0Jvb2wgIGhhc191bmljb2RlID0gRkFMU0U7CisjZW5kaWYKIAogCiAgICAgICAgIGZvciAoIG0gPSAwOyBtIDwgcm9vdC0+bnVtX2NoYXJtYXBzOyBtKysgKQpAQCAtMTQ4MSwxNCArMTQ5MCwzNCBAQAogICAgICAgICAgIGNoYXJtYXAtPmVuY29kaW5nID0gc2ZudF9maW5kX2VuY29kaW5nKCBjaGFybWFwLT5wbGF0Zm9ybV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcC0+ZW5jb2RpbmdfaWQgKTsKIAotI2lmIDAKLSAgICAgICAgICBpZiAoICFyb290LT5jaGFybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgIGNoYXJtYXAtPmVuY29kaW5nID09IEZUX0VOQ09ESU5HX1VOSUNPREUgKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIHNldCAncm9vdC0+Y2hhcm1hcCcgdG8gdGhlIGZpcnN0IFVuaWNvZGUgZW5jb2Rpbmcgd2UgZmluZCAqLwotICAgICAgICAgICAgcm9vdC0+Y2hhcm1hcCA9IGNoYXJtYXA7Ci0gICAgICAgICAgfQotI2VuZGlmCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisKKyAgICAgICAgICBpZiAoIGNoYXJtYXAtPmVuY29kaW5nID09IEZUX0VOQ09ESU5HX1VOSUNPREUgICB8fAorICAgICAgICAgICAgICAgY2hhcm1hcC0+ZW5jb2RpbmcgPT0gRlRfRU5DT0RJTkdfTVNfU1lNQk9MICkgIC8qIFBVQSAqLworICAgICAgICAgICAgaGFzX3VuaWNvZGUgPSBUUlVFOworICAgICAgICB9CisKKyAgICAgICAgLyogc3ludGhlc2l6ZSBVbmljb2RlIGNoYXJtYXAgaWYgb25lIGlzIG1pc3NpbmcgKi8KKyAgICAgICAgaWYgKCAhaGFzX3VuaWNvZGUgKQorICAgICAgICB7CisgICAgICAgICAgRlRfQ2hhck1hcFJlYyBjbWFwcmVjOworCisKKyAgICAgICAgICBjbWFwcmVjLmZhY2UgICAgICAgID0gcm9vdDsKKyAgICAgICAgICBjbWFwcmVjLnBsYXRmb3JtX2lkID0gVFRfUExBVEZPUk1fTUlDUk9TT0ZUOworICAgICAgICAgIGNtYXByZWMuZW5jb2RpbmdfaWQgPSBUVF9NU19JRF9VTklDT0RFX0NTOworICAgICAgICAgIGNtYXByZWMuZW5jb2RpbmcgICAgPSBGVF9FTkNPRElOR19VTklDT0RFOworCisKKyAgICAgICAgICBlcnJvciA9IEZUX0NNYXBfTmV3KCAoRlRfQ01hcF9DbGFzcykmdHRfY21hcF91bmljb2RlX2NsYXNzX3JlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmY21hcHJlYywgTlVMTCApOworICAgICAgICAgIGlmICggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICBGVF9FUlJfTkVRKCBlcnJvciwgTm9fVW5pY29kZV9HbHlwaF9OYW1lICkgKQorICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisjZW5kaWYgLyogRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTICovCisKICAgICAgICAgfQogICAgICAgfQogCkBAIC0xNjU1LDkgKzE2ODQsOSBAQAogICAgICAgICAgIChGVF9TaG9ydCkoIGZhY2UtPnZlcnRpY2FsX2luZm8gPyBmYWNlLT52ZXJ0aWNhbC5hZHZhbmNlX0hlaWdodF9NYXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcm9vdC0+aGVpZ2h0ICk7CiAKLSAgICAgICAgLyogU2VlIGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9PcGVuVHlwZS9PVFNwZWMvcG9zdC5odG0gLS0gKi8KLSAgICAgICAgLyogQWRqdXN0IHVuZGVybGluZSBwb3NpdGlvbiBmcm9tIHRvcCBlZGdlIHRvIGNlbnRyZSBvZiAgICAgKi8KLSAgICAgICAgLyogc3Ryb2tlIHRvIGNvbnZlcnQgVHJ1ZVR5cGUgbWVhbmluZyB0byBGcmVlVHlwZSBtZWFuaW5nLiAgKi8KKyAgICAgICAgLyogU2VlIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvcG9zdC5odG0gLS0gKi8KKyAgICAgICAgLyogQWRqdXN0IHVuZGVybGluZSBwb3NpdGlvbiBmcm9tIHRvcCBlZGdlIHRvIGNlbnRyZSBvZiAgICAgICAgKi8KKyAgICAgICAgLyogc3Ryb2tlIHRvIGNvbnZlcnQgVHJ1ZVR5cGUgbWVhbmluZyB0byBGcmVlVHlwZSBtZWFuaW5nLiAgICAgKi8KICAgICAgICAgcm9vdC0+dW5kZXJsaW5lX3Bvc2l0aW9uICA9IGZhY2UtPnBvc3RzY3JpcHQudW5kZXJsaW5lUG9zaXRpb24gLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+cG9zdHNjcmlwdC51bmRlcmxpbmVUaGlja25lc3MgLyAyOwogICAgICAgICByb290LT51bmRlcmxpbmVfdGhpY2tuZXNzID0gZmFjZS0+cG9zdHNjcmlwdC51bmRlcmxpbmVUaGlja25lc3M7CkBAIC0xNzU0LDcgKzE3ODMsMTAgQEAKICAgICBGVF9GUkVFKCBmYWNlLT5zYml0X3N0cmlrZV9tYXAgKTsKICAgICBmYWNlLT5yb290Lm51bV9maXhlZF9zaXplcyA9IDA7CiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAgICAgRlRfRlJFRSggZmFjZS0+cG9zdHNjcmlwdF9uYW1lICk7CisgICAgRlRfRlJFRSggZmFjZS0+dmFyX3Bvc3RzY3JpcHRfcHJlZml4ICk7CisjZW5kaWYKIAogICAgIGZhY2UtPnNmbnQgPSBOVUxMOwogICB9CmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZm9ianMuaCBiL3NyYy9zZm50L3Nmb2Jqcy5oCmluZGV4IDcwNTM4MTQuLjFiOGQxYmUgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3Nmb2Jqcy5oCisrKyBiL3NyYy9zZm50L3Nmb2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGJkZi5jIGIvc3JjL3NmbnQvdHRiZGYuYwppbmRleCBlN2U3MjIwLi41MzQyMDFmIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGJkZi5jCisrKyBiL3NyYy9zZm50L3R0YmRmLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIEJERiBwcm9wZXJ0aWVzIChib2R5KS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI0Niw3ICsyNDYsMTIgQEAKICAgICByZXR1cm4gZXJyb3I7CiAgIH0KIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fQkRGICovCisjZWxzZSAvKiAhVFRfQ09ORklHX09QVElPTl9CREYgKi8KKworICAvKiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5IHNvdXJjZSBmaWxlcyAqLworICB0eXBlZGVmIGludCAgX3R0X2JkZl9kdW1teTsKKworI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX0JERiAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRiZGYuaCBiL3NyYy9zZm50L3R0YmRmLmgKaW5kZXggMzk4YjYyMC4uODA5YTY2MyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRiZGYuaAorKysgYi9zcmMvc2ZudC90dGJkZi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBCREYgcHJvcGVydGllcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yOCw2ICsyOCw4IEBACiBGVF9CRUdJTl9IRUFERVIKIAogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9CREYKKwogICBGVF9MT0NBTCggdm9pZCApCiAgIHR0X2ZhY2VfZnJlZV9iZGZfcHJvcHMoIFRUX0ZhY2UgIGZhY2UgKTsKIApAQCAtMzcsNiArMzksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAgICAgIHByb3BlcnR5X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQkRGX1Byb3BlcnR5UmVjICAqYXByb3AgKTsKIAorI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fQkRGICovCisKIAogRlRfRU5EX0hFQURFUgogCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGNtYXAuYyBiL3NyYy9zZm50L3R0Y21hcC5jCmluZGV4IDVhZmE2YWUuLjhjYzcwZjcgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0Y21hcC5jCisrKyBiL3NyYy9zZm50L3R0Y21hcC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGNoYXJhY3RlciBtYXBwaW5nIHRhYmxlIChjbWFwKSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMyw4ICsyMywxMCBAQAogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9WQUxJREFURV9ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAorI2luY2x1ZGUgRlRfU0VSVklDRV9QT1NUU0NSSVBUX0NNQVBTX0gKICNpbmNsdWRlICJ0dGxvYWQuaCIKICNpbmNsdWRlICJ0dGNtYXAuaCIKKyNpbmNsdWRlICJ0dHBvc3QuaCIKICNpbmNsdWRlICJzZm50cGljLmgiCiAKIApAQCAtNTE2LDcgKzUxOCwxMSBAQAogCiAKICAgICAgICAgaWYgKCBvZmZzZXQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGNoYXJjb2RlID09IDB4MTAwICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsgLyogdGhpcyBoYXBwZW5zIG9ubHkgZm9yIGEgbWFsZm9ybWVkIGNtYXAgKi8KICAgICAgICAgICBnb3RvIE5leHRfU3ViSGVhZGVyOworICAgICAgICB9CiAKICAgICAgICAgaWYgKCBjaGFyX2xvIDwgc3RhcnQgKQogICAgICAgICB7CkBAIC01NDUsOSArNTUxLDE5IEBACiAgICAgICAgIH0KICAgICAgIH0KIAotICAgICAgLyoganVtcCB0byBuZXh0IHN1Yi1oZWFkZXIsIGkuZS4gaGlnaGVyIGJ5dGUgdmFsdWUgKi8KKyAgICAgIC8qIElmIGBjaGFyY29kZScgaXMgPD0gMHhGRiwgcmV0cnkgd2l0aCBgY2hhcmNvZGUgKyAxJy4gIElmICAgICAgICAqLworICAgICAgLyogYGNoYXJjb2RlJyBpcyAweDEwMCBhZnRlciB0aGUgbG9vcCwgZG8gbm90aGluZyBzaW5jZSB3ZSBoYXZlICAgICovCisgICAgICAvKiBqdXN0IHJlYWNoZWQgdGhlIGZpcnN0IHN1Yi1oZWFkZXIgZm9yIHR3by1ieXRlIGNoYXJhY3RlciBjb2Rlcy4gKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogRm9yIGFsbCBvdGhlciBjYXNlcywgd2UganVtcCB0byB0aGUgbmV4dCBzdWItaGVhZGVyIGFuZCBhZGp1c3QgICovCisgICAgICAvKiBgY2hhcmNvZGUnIGFjY29yZGluZ2x5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBOZXh0X1N1YkhlYWRlcjoKLSAgICAgIGNoYXJjb2RlID0gRlRfUEFEX0ZMT09SKCBjaGFyY29kZSwgMjU2ICkgKyAyNTY7CisgICAgICBpZiAoIGNoYXJjb2RlIDw9IDB4RkYgKQorICAgICAgICBjaGFyY29kZSsrOworICAgICAgZWxzZSBpZiAoIGNoYXJjb2RlID09IDB4MTAwICkKKyAgICAgICAgOworICAgICAgZWxzZQorICAgICAgICBjaGFyY29kZSA9IEZUX1BBRF9GTE9PUiggY2hhcmNvZGUsIDB4MTAwICkgKyAweDEwMDsKICAgICB9CiAKICAgRXhpdDoKQEAgLTM2MjIsNiArMzYzOCwxMTAgQEAKICNlbmRpZiAvKiBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTQgKi8KIAogCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgU1lOVEhFVElDIFVOSUNPREUgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qICAgICAgICBUaGlzIGNoYXJtYXAgaXMgZ2VuZXJhdGVkIHVzaW5nIHBvc3RzY3JpcHQgZ2x5cGggbmFtZXMuICAgICAgICAqLworCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBjb25zdCBjaGFyICogKQorICB0dF9nZXRfZ2x5cGhfbmFtZSggVFRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGlkeCApCisgIHsKKyAgICBGVF9TdHJpbmcqICBQU25hbWU7CisKKworICAgIHR0X2ZhY2VfZ2V0X3BzX25hbWUoIGZhY2UsIGlkeCwgJlBTbmFtZSApOworCisgICAgcmV0dXJuIFBTbmFtZTsKKyAgfQorCisKKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHR0X2NtYXBfdW5pY29kZV9pbml0KCBQU19Vbmljb2RlcyAgdW5pY29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgcG9pbnRlciApCisgIHsKKyAgICBUVF9GYWNlICAgICAgICAgICAgIGZhY2UgICAgPSAoVFRfRmFjZSlGVF9DTUFQX0ZBQ0UoIHVuaWNvZGVzICk7CisgICAgRlRfTWVtb3J5ICAgICAgICAgICBtZW1vcnkgID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKyAgICBGVF9TZXJ2aWNlX1BzQ01hcHMgIHBzbmFtZXMgPSAoRlRfU2VydmljZV9Qc0NNYXBzKWZhY2UtPnBzbmFtZXM7CisKKyAgICBGVF9VTlVTRUQoIHBvaW50ZXIgKTsKKworCisgICAgcmV0dXJuIHBzbmFtZXMtPnVuaWNvZGVzX2luaXQoIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QubnVtX2dseXBocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBTX0dldEdseXBoTmFtZUZ1bmMpJnR0X2dldF9nbHlwaF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFNfRnJlZUdseXBoTmFtZUZ1bmMpTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX1BvaW50ZXIpZmFjZSApOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQorICB0dF9jbWFwX3VuaWNvZGVfZG9uZSggUFNfVW5pY29kZXMgIHVuaWNvZGVzICkKKyAgeworICAgIEZUX0ZhY2UgICAgZmFjZSAgID0gRlRfQ01BUF9GQUNFKCB1bmljb2RlcyApOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gRlRfRkFDRV9NRU1PUlkoIGZhY2UgKTsKKworCisgICAgRlRfRlJFRSggdW5pY29kZXMtPm1hcHMgKTsKKyAgICB1bmljb2Rlcy0+bnVtX21hcHMgPSAwOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQgKQorICB0dF9jbWFwX3VuaWNvZGVfY2hhcl9pbmRleCggUFNfVW5pY29kZXMgIHVuaWNvZGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIGNoYXJfY29kZSApCisgIHsKKyAgICBUVF9GYWNlICAgICAgICAgICAgIGZhY2UgICAgPSAoVFRfRmFjZSlGVF9DTUFQX0ZBQ0UoIHVuaWNvZGVzICk7CisgICAgRlRfU2VydmljZV9Qc0NNYXBzICBwc25hbWVzID0gKEZUX1NlcnZpY2VfUHNDTWFwcylmYWNlLT5wc25hbWVzOworCisKKyAgICByZXR1cm4gcHNuYW1lcy0+dW5pY29kZXNfY2hhcl9pbmRleCggdW5pY29kZXMsIGNoYXJfY29kZSApOworICB9CisKKworICBGVF9DQUxMQkFDS19ERUYoIEZUX1VJbnQzMiApCisgIHR0X2NtYXBfdW5pY29kZV9jaGFyX25leHQoIFBTX1VuaWNvZGVzICB1bmljb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgKnBjaGFyX2NvZGUgKQorICB7CisgICAgVFRfRmFjZSAgICAgICAgICAgICBmYWNlICAgID0gKFRUX0ZhY2UpRlRfQ01BUF9GQUNFKCB1bmljb2RlcyApOworICAgIEZUX1NlcnZpY2VfUHNDTWFwcyAgcHNuYW1lcyA9IChGVF9TZXJ2aWNlX1BzQ01hcHMpZmFjZS0+cHNuYW1lczsKKworCisgICAgcmV0dXJuIHBzbmFtZXMtPnVuaWNvZGVzX2NoYXJfbmV4dCggdW5pY29kZXMsIHBjaGFyX2NvZGUgKTsKKyAgfQorCisKKyAgRlRfREVGSU5FX1RUX0NNQVAoCisgICAgdHRfY21hcF91bmljb2RlX2NsYXNzX3JlYywKKworICAgICAgc2l6ZW9mICggUFNfVW5pY29kZXNSZWMgKSwKKworICAgICAgKEZUX0NNYXBfSW5pdEZ1bmMpICAgICB0dF9jbWFwX3VuaWNvZGVfaW5pdCwgICAgICAgIC8qIGluaXQgICAgICAgKi8KKyAgICAgIChGVF9DTWFwX0RvbmVGdW5jKSAgICAgdHRfY21hcF91bmljb2RlX2RvbmUsICAgICAgICAvKiBkb25lICAgICAgICovCisgICAgICAoRlRfQ01hcF9DaGFySW5kZXhGdW5jKXR0X2NtYXBfdW5pY29kZV9jaGFyX2luZGV4LCAgLyogY2hhcl9pbmRleCAqLworICAgICAgKEZUX0NNYXBfQ2hhck5leHRGdW5jKSB0dF9jbWFwX3VuaWNvZGVfY2hhcl9uZXh0LCAgIC8qIGNoYXJfbmV4dCAgKi8KKworICAgICAgKEZUX0NNYXBfQ2hhclZhckluZGV4RnVuYykgICAgTlVMTCwgIC8qIGNoYXJfdmFyX2luZGV4ICAgKi8KKyAgICAgIChGVF9DTWFwX0NoYXJWYXJJc0RlZmF1bHRGdW5jKU5VTEwsICAvKiBjaGFyX3Zhcl9kZWZhdWx0ICovCisgICAgICAoRlRfQ01hcF9WYXJpYW50TGlzdEZ1bmMpICAgICBOVUxMLCAgLyogdmFyaWFudF9saXN0ICAgICAqLworICAgICAgKEZUX0NNYXBfQ2hhclZhcmlhbnRMaXN0RnVuYykgTlVMTCwgIC8qIGNoYXJ2YXJpYW50X2xpc3QgKi8KKyAgICAgIChGVF9DTWFwX1ZhcmlhbnRDaGFyTGlzdEZ1bmMpIE5VTEwsICAvKiB2YXJpYW50Y2hhcl9saXN0ICovCisKKyAgICB+MFUsCisgICAgKFRUX0NNYXBfVmFsaWRhdGVGdW5jKU5VTEwsICAvKiB2YWxpZGF0ZSAgICAgICovCisgICAgKFRUX0NNYXBfSW5mb19HZXRGdW5jKU5VTEwgICAvKiBnZXRfY21hcF9pbmZvICovCisgICkKKworI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUyAqLworCiAjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fUElDCiAKICAgc3RhdGljIGNvbnN0IFRUX0NNYXBfQ2xhc3MgIHR0X2NtYXBfY2xhc3Nlc1tdID0KQEAgLTM4MDEsOCArMzkyMSwxMCBAQAogICAgIEZUX0NNYXAgICAgICAgIGNtYXAgID0gKEZUX0NNYXApY2hhcm1hcDsKICAgICBUVF9DTWFwX0NsYXNzICBjbGF6eiA9IChUVF9DTWFwX0NsYXNzKWNtYXAtPmNsYXp6OwogCi0KLSAgICByZXR1cm4gY2xhenotPmdldF9jbWFwX2luZm8oIGNoYXJtYXAsIGNtYXBfaW5mbyApOworICAgIGlmICggY2xhenotPmdldF9jbWFwX2luZm8gKQorICAgICAgcmV0dXJuIGNsYXp6LT5nZXRfY21hcF9pbmZvKCBjaGFybWFwLCBjbWFwX2luZm8gKTsKKyAgICBlbHNlCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQ2hhck1hcF9Gb3JtYXQgKTsKICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y21hcC5oIGIvc3JjL3NmbnQvdHRjbWFwLmgKaW5kZXggODNmMTJkZi4uZDI2NGQ5OSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRjbWFwLmgKKysrIGIvc3JjL3NmbnQvdHRjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE0MSw2ICsxNDEsOCBAQAogI2RlZmluZSBUVF9WQUxJRF9HTFlQSF9DT1VOVCggeCApICBUVF9WQUxJREFUT1IoIHggKS0+bnVtX2dseXBocwogCiAKKyAgRlRfQ0FMTEJBQ0tfVEFCTEUgY29uc3QgVFRfQ01hcF9DbGFzc1JlYyAgdHRfY21hcF91bmljb2RlX2NsYXNzX3JlYzsKKwogICBGVF9MT0NBTCggRlRfRXJyb3IgKQogICB0dF9mYWNlX2J1aWxkX2NtYXBzKCBUVF9GYWNlICBmYWNlICk7CiAKZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0Y21hcGMuaCBiL3NyYy9zZm50L3R0Y21hcGMuaAppbmRleCA5YTVlNzA4Li40OTgwZTlkIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGNtYXBjLmgKKysrIGIvc3JjL3NmbnQvdHRjbWFwYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRUIENNQVAgY2xhc3NlcyBkZWZpbml0aW9ucyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGtlcm4uYyBiL3NyYy9zZm50L3R0a2Vybi5jCmluZGV4IDc4ZGM1ZWIuLjY4ZjE1YTIgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0a2Vybi5jCisrKyBiL3NyYy9zZm50L3R0a2Vybi5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUga2VybmluZyB0YWJsZS4gIFRoaXMgZG9lc24ndCBoYW5kbGUgICAgICAgICAgKi8KIC8qICAgIGtlcm5pbmcgZGF0YSB3aXRoaW4gdGhlIEdQT1MgdGFibGUgYXQgdGhlIG1vbWVudC4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC04NSw3ICs4NSw3IEBACiAKICAgICBmb3IgKCBubiA9IDA7IG5uIDwgbnVtX3RhYmxlczsgbm4rKyApCiAgICAgewotICAgICAgRlRfVUludCAgICBudW1fcGFpcnMsIGxlbmd0aCwgY292ZXJhZ2U7CisgICAgICBGVF9VSW50ICAgIG51bV9wYWlycywgbGVuZ3RoLCBjb3ZlcmFnZSwgZm9ybWF0OwogICAgICAgRlRfQnl0ZSogICBwX25leHQ7CiAgICAgICBGVF9VSW50MzIgIG1hc2sgPSAoRlRfVUludDMyKTFVTCA8PCBubjsKIApAQCAtMTA3LDkgKzEwNywxNSBAQAogICAgICAgaWYgKCBwX25leHQgPiBwX2xpbWl0ICkgIC8qIGhhbmRsZSBicm9rZW4gdGFibGUgKi8KICAgICAgICAgcF9uZXh0ID0gcF9saW1pdDsKIAorICAgICAgZm9ybWF0ID0gY292ZXJhZ2UgPj4gODsKKworICAgICAgLyogd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBmb3JtYXQgMCBrZXJuaW5nIHRhYmxlcyAqLworICAgICAgaWYgKCBmb3JtYXQgIT0gMCApCisgICAgICAgIGdvdG8gTmV4dFRhYmxlOworCiAgICAgICAvKiBvbmx5IHVzZSBob3Jpem9udGFsIGtlcm5pbmcgdGFibGVzICovCi0gICAgICBpZiAoICggY292ZXJhZ2UgJiB+OFUgKSAhPSAweDAwMDEgfHwKLSAgICAgICAgICAgcCArIDggPiBwX2xpbWl0ICAgICAgICAgICAgICApCisgICAgICBpZiAoICggY292ZXJhZ2UgJiAzVSApICE9IDB4MDAwMSB8fAorICAgICAgICAgICBwICsgOCA+IHBfbmV4dCAgICAgICAgICAgICAgKQogICAgICAgICBnb3RvIE5leHRUYWJsZTsKIAogICAgICAgbnVtX3BhaXJzID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKQEAgLTIxNCw4ICsyMjAsNyBAQAogICAgICAgaWYgKCAoIGZhY2UtPmtlcm5fYXZhaWxfYml0cyAmIG1hc2sgKSA9PSAwICkKICAgICAgICAgZ290byBOZXh0VGFibGU7CiAKLSAgICAgIGlmICggcCArIDggPiBuZXh0ICkKLSAgICAgICAgZ290byBOZXh0VGFibGU7CisgICAgICBGVF9BU1NFUlQoIHAgKyA4IDw9IG5leHQgKTsgLyogdGVzdGVkIGluIHR0X2ZhY2VfbG9hZF9rZXJuICovCiAKICAgICAgIG51bV9wYWlycyA9IEZUX05FWFRfVVNIT1JUKCBwICk7CiAgICAgICBwICAgICAgICArPSA2OwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRrZXJuLmggYi9zcmMvc2ZudC90dGtlcm4uaAppbmRleCBkYjFhMzBiLi40ZTQ1ZDA5IDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGtlcm4uaAorKysgYi9zcmMvc2ZudC90dGtlcm4uaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIGtlcm5pbmcgdGFibGUuICBUaGlzIGRvZXNuJ3QgaGFuZGxlICAgICAgICAgICovCiAvKiAgICBrZXJuaW5nIGRhdGEgd2l0aGluIHRoZSBHUE9TIHRhYmxlIGF0IHRoZSBtb21lbnQuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRsb2FkLmMgYi9zcmMvc2ZudC90dGxvYWQuYwppbmRleCA0Njk1MjUzLi5hODZhNTQ2IDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGxvYWQuYworKysgYi9zcmMvc2ZudC90dGxvYWQuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIHRhYmxlcywgaS5lLiwgdGFibGVzIHRoYXQgY2FuIGJlIGVpdGhlciBpbiAgICovCiAvKiAgICBUVEYgb3IgT1RGIGZvbnRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzM4LDcgKzMzOCw3IEBACiAgICAgU0ZOVF9IZWFkZXJSZWMgIHNmbnQ7CiAgICAgRlRfRXJyb3IgICAgICAgIGVycm9yOwogICAgIEZUX01lbW9yeSAgICAgICBtZW1vcnkgPSBzdHJlYW0tPm1lbW9yeTsKLSAgICBGVF9VU2hvcnQgICAgICAgbm4sIHZhbGlkX2VudHJpZXM7CisgICAgRlRfVVNob3J0ICAgICAgIG5uLCB2YWxpZF9lbnRyaWVzID0gMDsKIAogICAgIHN0YXRpYyBjb25zdCBGVF9GcmFtZV9GaWVsZCAgb2Zmc2V0X3RhYmxlX2ZpZWxkc1tdID0KICAgICB7CkBAIC05ODQsNyArOTg0LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdHRfZmFjZV9mcmVlX25hbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHR0X2ZhY2VfZnJlZV9uYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVzIHRoZSBuYW1lIHJlY29yZHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRsb2FkLmggYi9zcmMvc2ZudC90dGxvYWQuaAppbmRleCAyOTZkYTg2Li5mOTRiZThiIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGxvYWQuaAorKysgYi9zcmMvc2ZudC90dGxvYWQuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIHRhYmxlcywgaS5lLiwgdGFibGVzIHRoYXQgY2FuIGJlIGVpdGhlciBpbiAgICovCiAvKiAgICBUVEYgb3IgT1RGIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRtdHguYyBiL3NyYy9zZm50L3R0bXR4LmMKaW5kZXggMzk0YzZkYi4uNmRkZGE5NSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRtdHguYworKysgYi9zcmMvc2ZudC90dG10eC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIExvYWQgdGhlIG1ldHJpY3MgdGFibGVzIGNvbW1vbiB0byBUVEYgYW5kIE9URiBmb250cyAoYm9keSkuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dG10eC5oIGIvc3JjL3NmbnQvdHRtdHguaAppbmRleCAyYjkzYWIyLi5hYjAwYWNkIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dG10eC5oCisrKyBiL3NyYy9zZm50L3R0bXR4LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTG9hZCB0aGUgbWV0cmljcyB0YWJsZXMgY29tbW9uIHRvIFRURiBhbmQgT1RGIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0cG9zdC5jIGIvc3JjL3NmbnQvdHRwb3N0LmMKaW5kZXggNjU0OGU4NS4uNmRlOTllZiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRwb3N0LmMKKysrIGIvc3JjL3NmbnQvdHRwb3N0LmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBQb3N0U2NyaXB0IG5hbWUgdGFibGUgcHJvY2Vzc2luZyBmb3IgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGZvbnRzICAgICAqLwogLyogICAgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI5LDYgKzI5LDEwIEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICisKKworI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUworCiAjaW5jbHVkZSAidHRwb3N0LmgiCiAKICNpbmNsdWRlICJzZmVycm9ycy5oIgpAQCAtMzIxLDcgKzMyNSw2IEBACiAgICAgRlRfVU5VU0VEKCBwb3N0X2xpbWl0ICk7CiAKIAotICAgIC8qIFVORE9DVU1FTlRFRCEgIFRoaXMgdmFsdWUgYXBwZWFycyBvbmx5IGluIHRoZSBBcHBsZSBUVCBzcGVjcy4gKi8KICAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBudW1fZ2x5cGhzICkgKQogICAgICAgZ290byBFeGl0OwogCkBAIC00MDQsNyArNDA3LDcgQEAKICAgICAvKiBub3cgcmVhZCBwb3N0c2NyaXB0IHRhYmxlICovCiAgICAgaWYgKCBmb3JtYXQgPT0gMHgwMDAyMDAwMEwgKQogICAgICAgZXJyb3IgPSBsb2FkX2Zvcm1hdF8yMCggZmFjZSwgc3RyZWFtLCBwb3N0X2xpbWl0ICk7Ci0gICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAweDAwMDI4MDAwTCApCisgICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAweDAwMDI1MDAwTCApCiAgICAgICBlcnJvciA9IGxvYWRfZm9ybWF0XzI1KCBmYWNlLCBzdHJlYW0sIHBvc3RfbGltaXQgKTsKICAgICBlbHNlCiAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CkBAIC00NDMsNyArNDQ2LDcgQEAKICAgICAgICAgRlRfRlJFRSggdGFibGUtPmdseXBoX25hbWVzICk7CiAgICAgICAgIHRhYmxlLT5udW1fbmFtZXMgPSAwOwogICAgICAgfQotICAgICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAweDAwMDI4MDAwTCApCisgICAgICBlbHNlIGlmICggZm9ybWF0ID09IDB4MDAwMjUwMDBMICkKICAgICAgIHsKICAgICAgICAgVFRfUG9zdF8yNSAgdGFibGUgPSAmbmFtZXMtPm5hbWVzLmZvcm1hdF8yNTsKIApAQCAtNDcwLDggKzQ3Myw4IEBACiAgIC8qICAgIGlkeCAgICA6OiBUaGUgZ2x5cGggaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFBTbmFtZSA6OiBUaGUgYWRkcmVzcyBvZiBhIHN0cmluZyBwb2ludGVyLiAgV2lsbCBiZSBOVUxMIGluIGNhc2UgICAqLwotICAvKiAgICAgICAgICAgICAgb2YgZXJyb3IsIG90aGVyd2lzZSBpdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGdseXBoIG5hbWUuICAgKi8KKyAgLyogICAgUFNuYW1lIDo6IFRoZSBhZGRyZXNzIG9mIGEgc3RyaW5nIHBvaW50ZXIuICBVbmRlZmluZWQgaW4gY2FzZSBvZiAgICovCisgIC8qICAgICAgICAgICAgICBlcnJvciwgb3RoZXJ3aXNlIGl0IGlzIGEgcG9pbnRlciB0byB0aGUgZ2x5cGggbmFtZS4gICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgIFlvdSBtdXN0IG5vdCBtb2RpZnkgdGhlIHJldHVybmVkIHN0cmluZyEgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTM5LDcgKzU0Miw3IEBACiAgICAgICAgICAgKlBTbmFtZSA9IChGVF9TdHJpbmcqKXRhYmxlLT5nbHlwaF9uYW1lc1tuYW1lX2luZGV4IC0gMjU4XTsKICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAweDAwMDI4MDAwTCApCisgICAgZWxzZSBpZiAoIGZvcm1hdCA9PSAweDAwMDI1MDAwTCApCiAgICAgewogICAgICAgVFRfUG9zdF8yNSAgdGFibGUgPSAmbmFtZXMtPm5hbWVzLmZvcm1hdF8yNTsKIApAQCAtNTYxLDUgKzU2NCwxMiBAQAogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KIAorI2Vsc2UgLyogIVRUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQVF9OQU1FUyAqLworCisgIC8qIEFOU0kgQyBkb2Vzbid0IGxpa2UgZW1wdHkgc291cmNlIGZpbGVzICovCisgIHR5cGVkZWYgaW50ICBfdHRfcG9zdF9kdW1teTsKKworI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX1BPU1RTQ1JJUFRfTkFNRVMgKi8KKwogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0cG9zdC5oIGIvc3JjL3NmbnQvdHRwb3N0LmgKaW5kZXggNzIyNDg1ZS4uM2JlYzA3ZSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRwb3N0LmgKKysrIGIvc3JjL3NmbnQvdHRwb3N0LmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBQb3N0U2NyaXB0IG5hbWUgdGFibGUgcHJvY2Vzc2luZyBmb3IgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGZvbnRzICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0c2JpdC5jIGIvc3JjL3NmbnQvdHRzYml0LmMKaW5kZXggOTgyOTU5My4uNTNlNjE3NSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRzYml0LmMKKysrIGIvc3JjL3NmbnQvdHRzYml0LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGVtYmVkZGVkIGJpdG1hcCBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIENvcHlyaWdodCAyMDEzIGJ5IEdvb2dsZSwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI0LDYgKzI0LDEwIEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICiAjaW5jbHVkZSBGVF9CSVRNQVBfSAorCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKwogI2luY2x1ZGUgInR0c2JpdC5oIgogCiAjaW5jbHVkZSAic2ZlcnJvcnMuaCIKQEAgLTQ0NCw2ICs0NDgsMTUgQEAKICAgICAgICAgbWV0cmljcy0+bWF4X2FkdmFuY2UgPQogICAgICAgICAgIEZUX011bERpdiggaG9yaS0+YWR2YW5jZV9XaWR0aF9NYXgsIHBwZW1fICogNjQsIHVwZW0gKTsKIAorICAgICAgICAvKiBzZXQgdGhlIHNjYWxlIHZhbHVlcyAoaW4gMTYuMTYgdW5pdHMpIHNvIGFkdmFuY2VzICovCisgICAgICAgIC8qIGZyb20gdGhlIGhtdHggYW5kIHZtdHggdGFibGUgYXJlIHNjYWxlZCBjb3JyZWN0bHkgKi8KKyAgICAgICAgbWV0cmljcy0+eF9zY2FsZSA9IEZUX011bERpdiggbWV0cmljcy0+eF9wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDB4MTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmhlYWRlci5Vbml0c19QZXJfRU0gKTsKKyAgICAgICAgbWV0cmljcy0+eV9zY2FsZSA9IEZUX011bERpdiggbWV0cmljcy0+eV9wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCAqIDB4MTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmhlYWRlci5Vbml0c19QZXJfRU0gKTsKKwogICAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgICB9CiAKQEAgLTk5NCw4ICsxMDA3LDkgQEAKICAgICAgIGdvdG8gRmFpbDsKICAgICB9CiAKLSAgICBGVF9UUkFDRTMoKCAidHRfc2JpdF9kZWNvZGVyX2xvYWRfY29tcG91bmQ6IGxvYWRpbmcgJWQgY29tcG9uZW50c1xuIiwKLSAgICAgICAgICAgICAgICBudW1fY29tcG9uZW50cyApKTsKKyAgICBGVF9UUkFDRTMoKCAidHRfc2JpdF9kZWNvZGVyX2xvYWRfY29tcG91bmQ6IGxvYWRpbmcgJWQgY29tcG9uZW50JXNcbiIsCisgICAgICAgICAgICAgICAgbnVtX2NvbXBvbmVudHMsCisgICAgICAgICAgICAgICAgbnVtX2NvbXBvbmVudHMgPT0gMSA/ICIiIDogInMiICkpOwogCiAgICAgZm9yICggbm4gPSAwOyBubiA8IG51bV9jb21wb25lbnRzOyBubisrICkKICAgICB7CkBAIC0xNDM1LDEwICsxNDQ5LDE3IEBACiAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CiAKICAgTm9CaXRtYXA6CisgICAgaWYgKCByZWN1cnNlX2NvdW50ICkKKyAgICB7CisgICAgICBGVF9UUkFDRTQoKCAidHRfc2JpdF9kZWNvZGVyX2xvYWRfaW1hZ2U6IgorICAgICAgICAgICAgICAgICAgIiBtaXNzaW5nIHN1YmdseXBoIHNiaXQgd2l0aCBnbHlwaCBpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4ICkpOworICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0NvbXBvc2l0ZSApOworICAgIH0KKwogICAgIEZUX1RSQUNFNCgoICJ0dF9zYml0X2RlY29kZXJfbG9hZF9pbWFnZToiCiAgICAgICAgICAgICAgICAgIiBubyBzYml0IGZvdW5kIGZvciBnbHlwaCBpbmRleCAlZFxuIiwgZ2x5cGhfaW5kZXggKSk7Ci0KLSAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICByZXR1cm4gRlRfVEhST1coIE1pc3NpbmdfQml0bWFwICk7CiAgIH0KIAogCkBAIC0xNDYwLDYgKzE0ODEsOSBAQAogICAgIEZUX0J5dGUqICBwOwogCiAgICAgRlRfVU5VU0VEKCBtYXAgKTsKKyNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HCisgICAgRlRfVU5VU0VEKCBtZXRyaWNzX29ubHkgKTsKKyNlbmRpZgogCiAKICAgICBzdHJpa2VfaW5kZXggPSBmYWNlLT5zYml0X3N0cmlrZV9tYXBbc3RyaWtlX2luZGV4XTsKQEAgLTE2NDcsNSArMTY3MSwxMiBAQAogICAgIHJldHVybiBlcnJvcjsKICAgfQogCisjZWxzZSAvKiAhVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICovCiAKLS8qIEVPRiAqLworICAvKiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5IHNvdXJjZSBmaWxlcyAqLworICB0eXBlZGVmIGludCAgX3R0X3NiaXRfZHVtbXk7CisKKyNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9FTUJFRERFRF9CSVRNQVBTICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHNiaXQuaCBiL3NyYy9zZm50L3R0c2JpdC5oCmluZGV4IGU4NTlkZGQuLmNlMmFmM2MgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0c2JpdC5oCisrKyBiL3NyYy9zZm50L3R0c2JpdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBiaXRtYXAgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL0phbWZpbGUgYi9zcmMvc21vb3RoL0phbWZpbGUKaW5kZXggNGNkMDc2OS4uOTk1N2Q1ZSAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9KYW1maWxlCisrKyBiL3NyYy9zbW9vdGgvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvc21vb3RoIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRncmF5cy5jIGIvc3JjL3Ntb290aC9mdGdyYXlzLmMKaW5kZXggZTlhM2NlNy4uNmNlNmY4NiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdGdyYXlzLmMKKysrIGIvc3JjL3Ntb290aC9mdGdyYXlzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQSBuZXcgYHBlcmZlY3QnIGFudGktYWxpYXNpbmcgcmVuZGVyZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE0MSw2ICsxNDEsMTYgQEAKICNkZWZpbmUgRlRfSU5UX01BWCAgICBJTlRfTUFYCiAjZGVmaW5lIEZUX1VMT05HX01BWCAgVUxPTkdfTUFYCiAKKyNkZWZpbmUgQUREX0xPTkcoIGEsIGIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAobG9uZykoICh1bnNpZ25lZCBsb25nKShhKSArICh1bnNpZ25lZCBsb25nKShiKSApCisjZGVmaW5lIFNVQl9MT05HKCBhLCBiICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKGxvbmcpKCAodW5zaWduZWQgbG9uZykoYSkgLSAodW5zaWduZWQgbG9uZykoYikgKQorI2RlZmluZSBNVUxfTE9ORyggYSwgYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIChsb25nKSggKHVuc2lnbmVkIGxvbmcpKGEpICogKHVuc2lnbmVkIGxvbmcpKGIpICkKKyNkZWZpbmUgTkVHX0xPTkcoIGEgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAobG9uZykoIC0odW5zaWduZWQgbG9uZykoYSkgKQorCisKICNkZWZpbmUgZnRfbWVtc2V0ICAgbWVtc2V0CiAKICNkZWZpbmUgZnRfc2V0am1wICAgc2V0am1wCkBAIC0yNjQsNiArMjc0LDcgQEAKICNpbmNsdWRlICJmdGdyYXlzLmgiCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0NBTENfSAogI2luY2x1ZGUgRlRfT1VUTElORV9ICiAKICNpbmNsdWRlICJmdHNtZXJycy5oIgpAQCAtMzU5LDcgKzM3MCw3IEBACiAgIC8qIG9wdGltaXplIGEgZGl2aXNpb24gYW5kIG1vZHVsbyBvcGVyYXRpb24gb24gdGhlIHNhbWUgcGFyYW1ldGVycyAgICovCiAgIC8qIGludG8gYSBzaW5nbGUgY2FsbCB0byBgX19hZWFiaV9pZGl2bW9kJy4gIFNlZSAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzNzIxICAgICAgICAgICAgICAgICovCisgIC8qICBodHRwczovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00MzcyMSAgICAgICAgICAgICAgICovCiAjdW5kZWYgRlRfRElWX01PRAogI2RlZmluZSBGVF9ESVZfTU9EKCB0eXBlLCBkaXZpZGVuZCwgZGl2aXNvciwgcXVvdGllbnQsIHJlbWFpbmRlciApIFwKICAgRlRfQkVHSU5fU1RNTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC01NzEsOCArNTgyLDggQEAKICAgICBpZiAoIGV4IDwgcmFzLm1pbl9leCApCiAgICAgICBleCA9IHJhcy5taW5fZXggLSAxOwogCi0gICAgLyogcmVjb3JkIHRoZSBjdXJyZW50IG9uZSBpZiBpdCBpcyB2YWxpZCAqLwotICAgIGlmICggIXJhcy5pbnZhbGlkICkKKyAgICAvKiByZWNvcmQgdGhlIGN1cnJlbnQgb25lIGlmIGl0IGlzIHZhbGlkIGFuZCBzdWJzdGFudGlhbCAqLworICAgIGlmICggIXJhcy5pbnZhbGlkICYmICggcmFzLmFyZWEgfHwgcmFzLmNvdmVyICkgKQogICAgICAgZ3JheV9yZWNvcmRfY2VsbCggUkFTX1ZBUiApOwogCiAgICAgcmFzLmFyZWEgID0gMDsKQEAgLTExMzUsNyArMTE0Niw3IEBACiAgICAgICAvKiBzIGlzIEwgKiB0aGUgcGVycGVuZGljdWxhciBkaXN0YW5jZSBmcm9tIFAxIHRvIHRoZSBsaW5lIFAwLVAzLiAqLwogICAgICAgZHgxID0gYXJjWzFdLnggLSBhcmNbMF0ueDsKICAgICAgIGR5MSA9IGFyY1sxXS55IC0gYXJjWzBdLnk7Ci0gICAgICBzID0gRlRfQUJTKCBkeSAqIGR4MSAtIGR4ICogZHkxICk7CisgICAgICBzID0gRlRfQUJTKCBTVUJfTE9ORyggTVVMX0xPTkcoIGR5LCBkeDEgKSwgTVVMX0xPTkcoIGR4LCBkeTEgKSApICk7CiAKICAgICAgIGlmICggcyA+IHNfbGltaXQgKQogICAgICAgICBnb3RvIFNwbGl0OwpAQCAtMTE0Myw3ICsxMTU0LDcgQEAKICAgICAgIC8qIHMgaXMgTCAqIHRoZSBwZXJwZW5kaWN1bGFyIGRpc3RhbmNlIGZyb20gUDIgdG8gdGhlIGxpbmUgUDAtUDMuICovCiAgICAgICBkeDIgPSBhcmNbMl0ueCAtIGFyY1swXS54OwogICAgICAgZHkyID0gYXJjWzJdLnkgLSBhcmNbMF0ueTsKLSAgICAgIHMgPSBGVF9BQlMoIGR5ICogZHgyIC0gZHggKiBkeTIgKTsKKyAgICAgIHMgPSBGVF9BQlMoIFNVQl9MT05HKCBNVUxfTE9ORyggZHksIGR4MiApLCBNVUxfTE9ORyggZHgsIGR5MiApICkgKTsKIAogICAgICAgaWYgKCBzID4gc19saW1pdCApCiAgICAgICAgIGdvdG8gU3BsaXQ7CkBAIC0xMjg5LDggKzEzMDAsNiBAQAogICAgIGludCAgeTsKIAogCi0gICAgRlRfVFJBQ0U3KCggImdyYXlfc3dlZXA6IHN0YXJ0XG4iICkpOwotCiAgICAgZm9yICggeSA9IHJhcy5taW5fZXk7IHkgPCByYXMubWF4X2V5OyB5KysgKQogICAgIHsKICAgICAgIFBDZWxsICAgY2VsbCAgPSByYXMueWNlbGxzW3kgLSByYXMubWluX2V5XTsKQEAgLTEzMTYsOCArMTMyNSw2IEBACiAgICAgICBpZiAoIGNvdmVyICE9IDAgKQogICAgICAgICBncmF5X2hsaW5lKCBSQVNfVkFSXyB4LCB5LCBjb3ZlciwgcmFzLm1heF9leCAtIHggKTsKICAgICB9Ci0KLSAgICBGVF9UUkFDRTcoKCAiZ3JheV9zd2VlcDogZW5kXG4iICkpOwogICB9CiAKIApAQCAtMTcxMSw4ICsxNzE4LDExIEBACiAgICAgICBpZiAoICFyYXMuaW52YWxpZCApCiAgICAgICAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19WQVIgKTsKIAotICAgICAgRlRfVFJBQ0U3KCggImJhbmQgWyVkLi4lZF06ICVkIGNlbGxzXG4iLAotICAgICAgICAgICAgICAgICAgcmFzLm1pbl9leSwgcmFzLm1heF9leSwgcmFzLm51bV9jZWxscyApKTsKKyAgICAgIEZUX1RSQUNFNygoICJiYW5kIFslZC4uJWRdOiAlZCBjZWxsJXNcbiIsCisgICAgICAgICAgICAgICAgICByYXMubWluX2V5LAorICAgICAgICAgICAgICAgICAgcmFzLm1heF9leSwKKyAgICAgICAgICAgICAgICAgIHJhcy5udW1fY2VsbHMsCisgICAgICAgICAgICAgICAgICByYXMubnVtX2NlbGxzID09IDEgPyAiIiA6ICJzIiApKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTE3MjksMzUgKzE3MzksNDMgQEAKICAgc3RhdGljIGludAogICBncmF5X2NvbnZlcnRfZ2x5cGgoIFJBU19BUkcgKQogICB7CisgICAgY29uc3QgVENvb3JkICB5TWluID0gcmFzLm1pbl9leTsKKyAgICBjb25zdCBUQ29vcmQgIHlNYXggPSByYXMubWF4X2V5OworICAgIGNvbnN0IFRDb29yZCAgeE1pbiA9IHJhcy5taW5fZXg7CisgICAgY29uc3QgVENvb3JkICB4TWF4ID0gcmFzLm1heF9leDsKKwogICAgIFRDZWxsICAgIGJ1ZmZlcltGVF9NQVhfR1JBWV9QT09MXTsKLSAgICBUQ29vcmQgICBiYW5kX3NpemUgPSBGVF9NQVhfR1JBWV9QT09MIC8gODsKLSAgICBUQ29vcmQgICBjb3VudCA9IHJhcy5tYXhfZXkgLSByYXMubWluX2V5OwotICAgIGludCAgICAgIG51bV9iYW5kczsKLSAgICBUQ29vcmQgICBtaW4sIG1heCwgbWF4X3k7CisgICAgc2l6ZV90ICAgaGVpZ2h0ID0gKHNpemVfdCkoIHlNYXggLSB5TWluICk7CisgICAgc2l6ZV90ICAgbiA9IEZUX01BWF9HUkFZX1BPT0wgLyA4OworICAgIFRDb29yZCAgIHk7CiAgICAgVENvb3JkICAgYmFuZHNbMzJdOyAgLyogZW5vdWdoIHRvIGFjY29tbW9kYXRlIGJpc2VjdGlvbnMgKi8KICAgICBUQ29vcmQqICBiYW5kOwogCiAKICAgICAvKiBzZXQgdXAgdmVydGljYWwgYmFuZHMgKi8KLSAgICBpZiAoIGNvdW50ID4gYmFuZF9zaXplICkKKyAgICBpZiAoIGhlaWdodCA+IG4gKQogICAgIHsKICAgICAgIC8qIHR3byBkaXZpc2lvbnMgcm91bmRlZCB1cCAqLwotICAgICAgbnVtX2JhbmRzID0gKGludCkoICggY291bnQgKyBiYW5kX3NpemUgLSAxKSAvIGJhbmRfc2l6ZSApOwotICAgICAgYmFuZF9zaXplID0gKCBjb3VudCArIG51bV9iYW5kcyAtIDEgKSAvIG51bV9iYW5kczsKKyAgICAgIG4gICAgICAgPSAoIGhlaWdodCArIG4gLSAxICkgLyBuOworICAgICAgaGVpZ2h0ICA9ICggaGVpZ2h0ICsgbiAtIDEgKSAvIG47CiAgICAgfQogCi0gICAgbWluICAgPSByYXMubWluX2V5OwotICAgIG1heF95ID0gcmFzLm1heF9leTsKKyAgICAvKiBtZW1vcnkgbWFuYWdlbWVudCAqLworICAgIG4gPSAoIGhlaWdodCAqIHNpemVvZiAoIFBDZWxsICkgKyBzaXplb2YgKCBUQ2VsbCApIC0gMSApIC8gc2l6ZW9mICggVENlbGwgKTsKIAotICAgIGZvciAoIDsgbWluIDwgbWF4X3k7IG1pbiA9IG1heCApCisgICAgcmFzLmNlbGxzICAgICA9IGJ1ZmZlciArIG47CisgICAgcmFzLm1heF9jZWxscyA9IChGVF9QdHJEaXN0KSggRlRfTUFYX0dSQVlfUE9PTCAtIG4gKTsKKyAgICByYXMueWNlbGxzICAgID0gKFBDZWxsKilidWZmZXI7CisKKyAgICBmb3IgKCB5ID0geU1pbjsgeSA8IHlNYXg7ICkKICAgICB7Ci0gICAgICBtYXggPSBtaW4gKyBiYW5kX3NpemU7Ci0gICAgICBpZiAoIG1heCA+IG1heF95ICkKLSAgICAgICAgbWF4ID0gbWF4X3k7CisgICAgICByYXMubWluX2V5ID0geTsKKyAgICAgIHkgICAgICAgICArPSBoZWlnaHQ7CisgICAgICByYXMubWF4X2V5ID0gRlRfTUlOKCB5LCB5TWF4ICk7CiAKICAgICAgIGJhbmQgICAgPSBiYW5kczsKLSAgICAgIGJhbmRbMV0gPSBtaW47Ci0gICAgICBiYW5kWzBdID0gbWF4OworICAgICAgYmFuZFsxXSA9IHhNaW47CisgICAgICBiYW5kWzBdID0geE1heDsKIAogICAgICAgZG8KICAgICAgIHsKQEAgLTE3NjUsMjcgKzE3ODMsMTIgQEAKICAgICAgICAgaW50ICAgICBlcnJvcjsKIAogCi0gICAgICAgIC8qIG1lbW9yeSBtYW5hZ2VtZW50ICovCi0gICAgICAgIHsKLSAgICAgICAgICBzaXplX3QgIHljb3VudCA9IChzaXplX3Qpd2lkdGg7Ci0gICAgICAgICAgc2l6ZV90ICBjZWxsX3N0YXJ0OworICAgICAgICBGVF9NRU1fWkVSTyggcmFzLnljZWxscywgaGVpZ2h0ICogc2l6ZW9mICggUENlbGwgKSApOwogCi0KLSAgICAgICAgICBjZWxsX3N0YXJ0ID0gKCB5Y291bnQgKiBzaXplb2YgKCBQQ2VsbCApICsgc2l6ZW9mICggVENlbGwgKSAtIDEgKSAvCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIFRDZWxsICk7Ci0KLSAgICAgICAgICByYXMuY2VsbHMgICAgID0gYnVmZmVyICsgY2VsbF9zdGFydDsKLSAgICAgICAgICByYXMubWF4X2NlbGxzID0gKEZUX1B0ckRpc3QpKCBGVF9NQVhfR1JBWV9QT09MIC0gY2VsbF9zdGFydCApOwotICAgICAgICAgIHJhcy5udW1fY2VsbHMgPSAwOwotCi0gICAgICAgICAgcmFzLnljZWxscyA9IChQQ2VsbCopYnVmZmVyOwotICAgICAgICAgIHdoaWxlICggeWNvdW50ICkKLSAgICAgICAgICAgIHJhcy55Y2VsbHNbLS15Y291bnRdID0gTlVMTDsKLSAgICAgICAgfQotCisgICAgICAgIHJhcy5udW1fY2VsbHMgPSAwOwogICAgICAgICByYXMuaW52YWxpZCAgID0gMTsKLSAgICAgICAgcmFzLm1pbl9leSAgICA9IGJhbmRbMV07Ci0gICAgICAgIHJhcy5tYXhfZXkgICAgPSBiYW5kWzBdOworICAgICAgICByYXMubWluX2V4ICAgID0gYmFuZFsxXTsKKyAgICAgICAgcmFzLm1heF9leCAgICA9IGJhbmRbMF07CiAKICAgICAgICAgZXJyb3IgPSBncmF5X2NvbnZlcnRfZ2x5cGhfaW5uZXIoIFJBU19WQVIgKTsKIApAQCAtMTgwMSw4ICsxODA0LDcgQEAKICAgICAgICAgLyogcmVuZGVyIHBvb2wgb3ZlcmZsb3c7IHdlIHdpbGwgcmVkdWNlIHRoZSByZW5kZXIgYmFuZCBieSBoYWxmICovCiAgICAgICAgIHdpZHRoID4+PSAxOwogCi0gICAgICAgIC8qIFRoaXMgaXMgdG9vIGNvbXBsZXggZm9yIGEgc2luZ2xlIHNjYW5saW5lOyB0aGVyZSBtdXN0ICovCi0gICAgICAgIC8qIGJlIHNvbWUgcHJvYmxlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBldmVuIHdpdGggdGlueSByZW5kZXJpbmcgcG9vbCAqLwogICAgICAgICBpZiAoIHdpZHRoID09IDAgKQogICAgICAgICB7CiAgICAgICAgICAgRlRfVFJBQ0U3KCggImdyYXlfY29udmVydF9nbHlwaDogcm90dGVuIGdseXBoXG4iICkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdGdyYXlzLmggYi9zcmMvc21vb3RoL2Z0Z3JheXMuaAppbmRleCBhNTQ0N2RhLi45ZTExY2E2IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0Z3JheXMuaAorKysgYi9zcmMvc21vb3RoL2Z0Z3JheXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBzbW9vdGggcmVuZGVyZXIgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNtZXJycy5oIGIvc3JjL3Ntb290aC9mdHNtZXJycy5oCmluZGV4IGE1MjhjNjEuLjIyNmRjMWIgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRzbWVycnMuaAorKysgYi9zcmMvc21vb3RoL2Z0c21lcnJzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgc21vb3RoIHJlbmRlcmVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbW9vdGguYyBiL3NyYy9zbW9vdGgvZnRzbW9vdGguYwppbmRleCA0MzU4NTRlLi5lZjE3NmJkIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21vb3RoLmMKKysrIGIvc3JjL3Ntb290aC9mdHNtb290aC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFudGktYWxpYXNpbmcgcmVuZGVyZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMSwxMiArMzEsNyBAQAogICBzdGF0aWMgRlRfRXJyb3IKICAgZnRfc21vb3RoX2luaXQoIEZUX1JlbmRlcmVyICByZW5kZXIgKQogICB7Ci0gICAgRlRfTGlicmFyeSAgbGlicmFyeSA9IEZUX01PRFVMRV9MSUJSQVJZKCByZW5kZXIgKTsKLQotCi0gICAgcmVuZGVyLT5jbGF6ei0+cmFzdGVyX2NsYXNzLT5yYXN0ZXJfcmVzZXQoIHJlbmRlci0+cmFzdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LT5yYXN0ZXJfcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeS0+cmFzdGVyX3Bvb2xfc2l6ZSApOworICAgIHJlbmRlci0+Y2xhenotPnJhc3Rlcl9jbGFzcy0+cmFzdGVyX3Jlc2V0KCByZW5kZXItPnJhc3RlciwgTlVMTCwgMCApOwogCiAgICAgcmV0dXJuIDA7CiAgIH0KQEAgLTEwMiw4MCArOTcsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICBvcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgcmVxdWlyZWRfbW9kZSApCiAgIHsKLSAgICBGVF9FcnJvciAgICAgZXJyb3I7CisgICAgRlRfRXJyb3IgICAgIGVycm9yICAgPSBGVF9FcnJfT2s7CiAgICAgRlRfT3V0bGluZSogIG91dGxpbmUgPSAmc2xvdC0+b3V0bGluZTsKICAgICBGVF9CaXRtYXAqICAgYml0bWFwICA9ICZzbG90LT5iaXRtYXA7CiAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSAgPSByZW5kZXItPnJvb3QubWVtb3J5OwotICAgIEZUX0JCb3ggICAgICBjYm94OwogICAgIEZUX1BvcyAgICAgICB4X3NoaWZ0ID0gMDsKICAgICBGVF9Qb3MgICAgICAgeV9zaGlmdCA9IDA7Ci0gICAgRlRfUG9zICAgICAgIHhfbGVmdCwgeV90b3A7Ci0gICAgRlRfUG9zICAgICAgIHdpZHRoLCBoZWlnaHQsIHBpdGNoOwotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORwotICAgIEZUX1BvcyAgICAgICBoZWlnaHRfb3JnLCB3aWR0aF9vcmc7Ci0jZW5kaWYKICAgICBGVF9JbnQgICAgICAgaG11bCAgICA9ICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0QgKTsKICAgICBGVF9JbnQgICAgICAgdm11bCAgICA9ICggbW9kZSA9PSBGVF9SRU5ERVJfTU9ERV9MQ0RfViApOwogCiAgICAgRlRfUmFzdGVyX1BhcmFtcyAgcGFyYW1zOwogCi0gICAgRlRfQm9vbCAgaGF2ZV9vdXRsaW5lX3NoaWZ0ZWQgPSBGQUxTRTsKLSAgICBGVF9Cb29sICBoYXZlX2J1ZmZlciAgICAgICAgICA9IEZBTFNFOwotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcKLQotICAgIEZUX0ludCAgICAgICAgICAgICAgICAgICBsY2RfZXh0cmEgICAgICAgICAgPSAwOwotICAgIEZUX0xjZEZpdmVUYXBGaWx0ZXIgICAgICBsY2Rfd2VpZ2h0cyAgICAgICAgPSB7IDAgfTsKLSAgICBGVF9Cb29sICAgICAgICAgICAgICAgICAgaGF2ZV9jdXN0b21fd2VpZ2h0ID0gRkFMU0U7Ci0gICAgRlRfQml0bWFwX0xjZEZpbHRlckZ1bmMgIGxjZF9maWx0ZXJfZnVuYyAgICA9IE5VTEw7Ci0KLQotICAgIGlmICggc2xvdC0+ZmFjZSApCi0gICAgewotICAgICAgRlRfQ2hhciAgaTsKLQotCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IEZUX0xDRF9GSUxURVJfRklWRV9UQVBTOyBpKysgKQotICAgICAgICBpZiAoIHNsb3QtPmZhY2UtPmludGVybmFsLT5sY2Rfd2VpZ2h0c1tpXSAhPSAwICkKLSAgICAgICAgewotICAgICAgICAgIGhhdmVfY3VzdG9tX3dlaWdodCA9IFRSVUU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRoZSBMQ0QgZmlsdGVyIGNhbiBiZSBzZXQgbGlicmFyeS13aWRlIGFuZCBwZXItZmFjZS4gIEZhY2Ugb3ZlcnJpZGVzCi0gICAgICogbGlicmFyeS4gIElmIHRoZSBmYWNlIGZpbHRlciB3ZWlnaHRzIGFyZSBhbGwgemVybyAodGhlIGRlZmF1bHQpLCBpdAotICAgICAqIG1lYW5zIHRoYXQgdGhlIGxpYnJhcnkgZGVmYXVsdCBzaG91bGQgYmUgdXNlZC4KLSAgICAgKi8KLSAgICBpZiAoIGhhdmVfY3VzdG9tX3dlaWdodCApCi0gICAgewotICAgICAgLyoKLSAgICAgICAqIEEgcGVyLWZvbnQgZmlsdGVyIGlzIHNldC4gIEl0IGFsd2F5cyB1c2VzIHRoZSBkZWZhdWx0IDUtdGFwCi0gICAgICAgKiBpbi1wbGFjZSBGSVIgZmlsdGVyIHRoYXQgbmVlZHMgMiBleHRyYSBwaXhlbHMuCi0gICAgICAgKi8KLSAgICAgIGZ0X21lbWNweSggbGNkX3dlaWdodHMsCi0gICAgICAgICAgICAgICAgIHNsb3QtPmZhY2UtPmludGVybmFsLT5sY2Rfd2VpZ2h0cywKLSAgICAgICAgICAgICAgICAgRlRfTENEX0ZJTFRFUl9GSVZFX1RBUFMgKTsKLSAgICAgIGxjZF9maWx0ZXJfZnVuYyA9IGZ0X2xjZF9maWx0ZXJfZmlyOwotICAgICAgbGNkX2V4dHJhICAgICAgID0gMjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIC8qCi0gICAgICAgKiBUaGUgZmFjZSdzIGxjZF93ZWlnaHRzIGlzIHswLCAwLCAwLCAwLCAwfSwgbWVhbmluZyBgdXNlIGxpYnJhcnkKLSAgICAgICAqIGRlZmF1bHQnLiAgSWYgdGhlIGxpYnJhcnkgaXMgc2V0IHRvIHVzZSBubyBMQ0QgZmlsdGVyaW5nCi0gICAgICAgKiAobGNkX2ZpbHRlcl9mdW5jID09IE5VTEwpLCBgbGNkX2ZpbHRlcl9mdW5jJyBoZXJlIGlzIGFsc28gc2V0IHRvCi0gICAgICAgKiBOVUxMIGFuZCB0aGUgdGVzdHMgZnVydGhlciBiZWxvdyBwYXNzIG92ZXIgdGhlIGZpbHRlcmluZyBwcm9jZXNzLgotICAgICAgICovCi0gICAgICBmdF9tZW1jcHkoIGxjZF93ZWlnaHRzLAotICAgICAgICAgICAgICAgICBzbG90LT5saWJyYXJ5LT5sY2Rfd2VpZ2h0cywKLSAgICAgICAgICAgICAgICAgRlRfTENEX0ZJTFRFUl9GSVZFX1RBUFMgKTsKLSAgICAgIGxjZF9maWx0ZXJfZnVuYyA9IHNsb3QtPmxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYzsKLSAgICAgIGxjZF9leHRyYSAgICAgICA9IHNsb3QtPmxpYnJhcnktPmxjZF9leHRyYTsKLSAgICB9Ci0KLSNlbmRpZiAvKkZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCiAKICAgICAvKiBjaGVjayBnbHlwaCBpbWFnZSBmb3JtYXQgKi8KICAgICBpZiAoIHNsb3QtPmZvcm1hdCAhPSByZW5kZXItPmdseXBoX2Zvcm1hdCApCkBAIC0xOTEsODYgKzEyMyw2IEBACiAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCi0gICAgaWYgKCBvcmlnaW4gKQotICAgIHsKLSAgICAgIHhfc2hpZnQgPSBvcmlnaW4tPng7Ci0gICAgICB5X3NoaWZ0ID0gb3JpZ2luLT55OwotICAgIH0KLQotICAgIC8qIGNvbXB1dGUgdGhlIGNvbnRyb2wgYm94LCBhbmQgZ3JpZCBmaXQgaXQgKi8KLSAgICAvKiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBvcmlnaW4gc2hpZnQgICAgICovCi0gICAgRlRfT3V0bGluZV9HZXRfQ0JveCggb3V0bGluZSwgJmNib3ggKTsKLQotICAgIGNib3gueE1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC54TWluICsgeF9zaGlmdCApOwotICAgIGNib3gueU1pbiA9IEZUX1BJWF9GTE9PUiggY2JveC55TWluICsgeV9zaGlmdCApOwotICAgIGNib3gueE1heCA9IEZUX1BJWF9DRUlMKCBjYm94LnhNYXggKyB4X3NoaWZ0ICk7Ci0gICAgY2JveC55TWF4ID0gRlRfUElYX0NFSUwoIGNib3gueU1heCArIHlfc2hpZnQgKTsKLQotICAgIHhfc2hpZnQgLT0gY2JveC54TWluOwotICAgIHlfc2hpZnQgLT0gY2JveC55TWluOwotCi0gICAgeF9sZWZ0ICA9IGNib3gueE1pbiA+PiA2OwotICAgIHlfdG9wICAgPSBjYm94LnlNYXggPj4gNjsKLQotICAgIHdpZHRoICA9IChGVF9VTG9uZykoIGNib3gueE1heCAtIGNib3gueE1pbiApID4+IDY7Ci0gICAgaGVpZ2h0ID0gKEZUX1VMb25nKSggY2JveC55TWF4IC0gY2JveC55TWluICkgPj4gNjsKLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORwotICAgIHdpZHRoX29yZyAgPSB3aWR0aDsKLSAgICBoZWlnaHRfb3JnID0gaGVpZ2h0OwotI2VuZGlmCi0KLSAgICBwaXRjaCA9IHdpZHRoOwotICAgIGlmICggaG11bCApCi0gICAgewotICAgICAgd2lkdGggKj0gMzsKLSAgICAgIHBpdGNoICA9IEZUX1BBRF9DRUlMKCB3aWR0aCwgNCApOwotICAgIH0KLQotICAgIGlmICggdm11bCApCi0gICAgICBoZWlnaHQgKj0gMzsKLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HCi0gICAgaWYgKCBsY2RfZmlsdGVyX2Z1bmMgKQotICAgIHsKLSAgICAgIGlmICggaG11bCApCi0gICAgICB7Ci0gICAgICAgIHhfc2hpZnQgKz0gNjQgKiAoIGxjZF9leHRyYSA+PiAxICk7Ci0gICAgICAgIHhfbGVmdCAgLT0gbGNkX2V4dHJhID4+IDE7Ci0gICAgICAgIHdpZHRoICAgKz0gMyAqIGxjZF9leHRyYTsKLSAgICAgICAgcGl0Y2ggICAgPSBGVF9QQURfQ0VJTCggd2lkdGgsIDQgKTsKLSAgICAgIH0KLQotICAgICAgaWYgKCB2bXVsICkKLSAgICAgIHsKLSAgICAgICAgeV9zaGlmdCArPSA2NCAqICggbGNkX2V4dHJhID4+IDEgKTsKLSAgICAgICAgeV90b3AgICArPSBsY2RfZXh0cmEgPj4gMTsKLSAgICAgICAgaGVpZ2h0ICArPSAzICogbGNkX2V4dHJhOwotICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiBYWFg6IG9uIDE2Yml0IHN5c3RlbSwgd2UgcmV0dXJuIGFuIGVycm9yIGZvciBodWdlIGJpdG1hcAotICAgICAqIHRvIHByZXZlbnQgYW4gb3ZlcmZsb3cuCi0gICAgICovCi0gICAgaWYgKCB4X2xlZnQgPiBGVF9JTlRfTUFYIHx8IHlfdG9wID4gRlRfSU5UX01BWCB8fAotICAgICAgICAgeF9sZWZ0IDwgRlRfSU5UX01JTiB8fCB5X3RvcCA8IEZUX0lOVF9NSU4gKQotICAgIHsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfUGl4ZWxfU2l6ZSApOwotICAgICAgZ290byBFeGl0OwotICAgIH0KLQotICAgIC8qIFJlcXVpcmVkIGNoZWNrIGlzIChwaXRjaCAqIGhlaWdodCA8IEZUX1VMT05HX01BWCksICAgICAgICAqLwotICAgIC8qIGJ1dCB3ZSBjYXJlIHJlYWxpc3RpYyBjYXNlcyBvbmx5LiAgQWx3YXlzIHBpdGNoIDw9IHdpZHRoLiAqLwotICAgIGlmICggd2lkdGggPiAweDdGRkYgfHwgaGVpZ2h0ID4gMHg3RkZGICkKLSAgICB7Ci0gICAgICBGVF9FUlJPUigoICJmdF9zbW9vdGhfcmVuZGVyX2dlbmVyaWM6IGdseXBoIHRvbyBsYXJnZTogJXUgeCAldVxuIiwKLSAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCApKTsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIFJhc3Rlcl9PdmVyZmxvdyApOwotICAgICAgZ290byBFeGl0OwotICAgIH0KLQogICAgIC8qIHJlbGVhc2Ugb2xkIGJpdG1hcCBidWZmZXIgKi8KICAgICBpZiAoIHNsb3QtPmludGVybmFsLT5mbGFncyAmIEZUX0dMWVBIX09XTl9CSVRNQVAgKQogICAgIHsKQEAgLTI3OCwzMCArMTMwLDMwIEBACiAgICAgICBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgJj0gfkZUX0dMWVBIX09XTl9CSVRNQVA7CiAgICAgfQogCisgICAgZnRfZ2x5cGhzbG90X3ByZXNldF9iaXRtYXAoIHNsb3QsIG1vZGUsIG9yaWdpbiApOworCiAgICAgLyogYWxsb2NhdGUgbmV3IG9uZSAqLwotICAgIGlmICggRlRfQUxMT0MoIGJpdG1hcC0+YnVmZmVyLCAoRlRfVUxvbmcpKCBwaXRjaCAqIGhlaWdodCApICkgKQorICAgIGlmICggRlRfQUxMT0NfTVVMVCggYml0bWFwLT5idWZmZXIsIGJpdG1hcC0+cm93cywgYml0bWFwLT5waXRjaCApICkKICAgICAgIGdvdG8gRXhpdDsKLSAgICBlbHNlCi0gICAgICBoYXZlX2J1ZmZlciA9IFRSVUU7CiAKICAgICBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgfD0gRlRfR0xZUEhfT1dOX0JJVE1BUDsKIAotICAgIHNsb3QtPmZvcm1hdCAgICAgID0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUDsKLSAgICBzbG90LT5iaXRtYXBfbGVmdCA9IChGVF9JbnQpeF9sZWZ0OwotICAgIHNsb3QtPmJpdG1hcF90b3AgID0gKEZUX0ludCl5X3RvcDsKKyAgICB4X3NoaWZ0ID0gNjQgKiAtc2xvdC0+Yml0bWFwX2xlZnQ7CisgICAgeV9zaGlmdCA9IDY0ICogLXNsb3QtPmJpdG1hcF90b3A7CisgICAgaWYgKCBiaXRtYXAtPnBpeGVsX21vZGUgPT0gRlRfUElYRUxfTU9ERV9MQ0RfViApCisgICAgICB5X3NoaWZ0ICs9IDY0ICogKEZUX0ludCliaXRtYXAtPnJvd3MgLyAzOworICAgIGVsc2UKKyAgICAgIHlfc2hpZnQgKz0gNjQgKiAoRlRfSW50KWJpdG1hcC0+cm93czsKIAotICAgIGJpdG1hcC0+cGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfR1JBWTsKLSAgICBiaXRtYXAtPm51bV9ncmF5cyAgPSAyNTY7Ci0gICAgYml0bWFwLT53aWR0aCAgICAgID0gKHVuc2lnbmVkIGludCl3aWR0aDsKLSAgICBiaXRtYXAtPnJvd3MgICAgICAgPSAodW5zaWduZWQgaW50KWhlaWdodDsKLSAgICBiaXRtYXAtPnBpdGNoICAgICAgPSBwaXRjaDsKKyAgICBpZiAoIG9yaWdpbiApCisgICAgeworICAgICAgeF9zaGlmdCArPSBvcmlnaW4tPng7CisgICAgICB5X3NoaWZ0ICs9IG9yaWdpbi0+eTsKKyAgICB9CiAKICAgICAvKiB0cmFuc2xhdGUgb3V0bGluZSB0byByZW5kZXIgaXQgaW50byB0aGUgYml0bWFwICovCiAgICAgaWYgKCB4X3NoaWZ0IHx8IHlfc2hpZnQgKQotICAgIHsKICAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCB4X3NoaWZ0LCB5X3NoaWZ0ICk7Ci0gICAgICBoYXZlX291dGxpbmVfc2hpZnRlZCA9IFRSVUU7Ci0gICAgfQogCiAgICAgLyogc2V0IHVwIHBhcmFtZXRlcnMgKi8KICAgICBwYXJhbXMudGFyZ2V0ID0gYml0bWFwOwpAQCAtMzQ4LDgwICsyMDAsMTQzIEBACiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICBpZiAoIGxjZF9maWx0ZXJfZnVuYyApCi0gICAgICBsY2RfZmlsdGVyX2Z1bmMoIGJpdG1hcCwgbW9kZSwgbGNkX3dlaWdodHMgKTsKKyAgICAvKiBmaW5hbGx5IGFwcGx5IGZpbHRlcmluZyAqLworICAgIGlmICggaG11bCB8fCB2bXVsICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgICAgICAgICAgICAgICAgbGNkX3dlaWdodHM7CisgICAgICBGVF9CaXRtYXBfTGNkRmlsdGVyRnVuYyAgbGNkX2ZpbHRlcl9mdW5jOworCisKKyAgICAgIC8qIFBlci1mYWNlIExDRCBmaWx0ZXJpbmcgdGFrZXMgcHJpb3JpdHkgaWYgc2V0IHVwLiAqLworICAgICAgaWYgKCBzbG90LT5mYWNlICYmIHNsb3QtPmZhY2UtPmludGVybmFsLT5sY2RfZmlsdGVyX2Z1bmMgKQorICAgICAgeworICAgICAgICBsY2Rfd2VpZ2h0cyAgICAgPSBzbG90LT5mYWNlLT5pbnRlcm5hbC0+bGNkX3dlaWdodHM7CisgICAgICAgIGxjZF9maWx0ZXJfZnVuYyA9IHNsb3QtPmZhY2UtPmludGVybmFsLT5sY2RfZmlsdGVyX2Z1bmM7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGxjZF93ZWlnaHRzICAgICA9IHNsb3QtPmxpYnJhcnktPmxjZF93ZWlnaHRzOworICAgICAgICBsY2RfZmlsdGVyX2Z1bmMgPSBzbG90LT5saWJyYXJ5LT5sY2RfZmlsdGVyX2Z1bmM7CisgICAgICB9CisKKyAgICAgIGlmICggbGNkX2ZpbHRlcl9mdW5jICkKKyAgICAgICAgbGNkX2ZpbHRlcl9mdW5jKCBiaXRtYXAsIG1vZGUsIGxjZF93ZWlnaHRzICk7CisgICAgfQogCiAjZWxzZSAvKiAhRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KIAotICAgIC8qIHJlbmRlciBvdXRsaW5lIGludG8gYml0bWFwICovCi0gICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAvKiBleHBhbmQgaXQgaG9yaXpvbnRhbGx5ICovCi0gICAgaWYgKCBobXVsICkKKyAgICBpZiAoIGhtdWwgKSAgLyogbGNkICovCiAgICAgewotICAgICAgRlRfQnl0ZSogIGxpbmUgPSBiaXRtYXAtPmJ1ZmZlcjsKLSAgICAgIEZUX1VJbnQgICBoaDsKKyAgICAgIEZUX0J5dGUqICBsaW5lOworICAgICAgRlRfQnl0ZSogIHRlbXAgPSBOVUxMOworICAgICAgRlRfVUludCAgIGksIGo7CisKKyAgICAgIHVuc2lnbmVkIGludCAgaGVpZ2h0ID0gYml0bWFwLT5yb3dzOworICAgICAgdW5zaWduZWQgaW50ICB3aWR0aCAgPSBiaXRtYXAtPndpZHRoOworICAgICAgaW50ICAgICAgICAgICBwaXRjaCAgPSBiaXRtYXAtPnBpdGNoOwogCiAKLSAgICAgIGZvciAoIGhoID0gaGVpZ2h0X29yZzsgaGggPiAwOyBoaC0tLCBsaW5lICs9IHBpdGNoICkKKyAgICAgIC8qIFJlbmRlciAzIHNlcGFyYXRlIG1vbm9jaHJvbWUgYml0bWFwcywgc2hpZnRpbmcgdGhlIG91dGxpbmUgICovCisgICAgICAvKiBieSAxLzMgcGl4ZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgd2lkdGggLz0gMzsKKworICAgICAgYml0bWFwLT5idWZmZXIgKz0gd2lkdGg7CisKKyAgICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIC0yMSwgMCApOworICAgICAgeF9zaGlmdCAgICAgICAgLT0gMjE7CisgICAgICBiaXRtYXAtPmJ1ZmZlciArPSB3aWR0aDsKKworICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgIDQyLCAwICk7CisgICAgICB4X3NoaWZ0ICAgICAgICArPSA0MjsKKyAgICAgIGJpdG1hcC0+YnVmZmVyIC09IDIgKiB3aWR0aDsKKworICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiBYWFg6IFJlYXJyYW5nZSB0aGUgYnl0ZXMgYWNjb3JkaW5nIHRvIEZUX1BJWEVMX01PREVfTENELiAgICAqLworICAgICAgLyogWFhYOiBJdCBpcyBtb3JlIGVmZmljaWVudCB0byByZW5kZXIgZXZlcnkgdGhpcmQgYnl0ZSBhYm92ZS4gKi8KKworICAgICAgaWYgKCBGVF9BTExPQyggdGVtcCwgKEZUX1VMb25nKXBpdGNoICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgaGVpZ2h0OyBpKysgKQogICAgICAgewotICAgICAgICBGVF9VSW50ICAgeHg7Ci0gICAgICAgIEZUX0J5dGUqICBlbmQgPSBsaW5lICsgd2lkdGg7Ci0KLQotICAgICAgICBmb3IgKCB4eCA9IHdpZHRoX29yZzsgeHggPiAwOyB4eC0tICkKKyAgICAgICAgbGluZSA9IGJpdG1hcC0+YnVmZmVyICsgaSAqIChGVF9VTG9uZylwaXRjaDsKKyAgICAgICAgZm9yICggaiA9IDA7IGogPCB3aWR0aDsgaisrICkKICAgICAgICAgewotICAgICAgICAgIEZUX1VJbnQgIHBpeGVsID0gbGluZVt4eC0xXTsKLQotCi0gICAgICAgICAgZW5kWy0zXSA9IChGVF9CeXRlKXBpeGVsOwotICAgICAgICAgIGVuZFstMl0gPSAoRlRfQnl0ZSlwaXhlbDsKLSAgICAgICAgICBlbmRbLTFdID0gKEZUX0J5dGUpcGl4ZWw7Ci0gICAgICAgICAgZW5kICAgIC09IDM7CisgICAgICAgICAgdGVtcFszICogaiAgICBdID0gbGluZVtqXTsKKyAgICAgICAgICB0ZW1wWzMgKiBqICsgMV0gPSBsaW5lW2ogKyB3aWR0aF07CisgICAgICAgICAgdGVtcFszICogaiArIDJdID0gbGluZVtqICsgd2lkdGggKyB3aWR0aF07CiAgICAgICAgIH0KKyAgICAgICAgRlRfTUVNX0NPUFkoIGxpbmUsIHRlbXAsIHBpdGNoICk7CiAgICAgICB9Ci0gICAgfQogCi0gICAgLyogZXhwYW5kIGl0IHZlcnRpY2FsbHkgKi8KLSAgICBpZiAoIHZtdWwgKQorICAgICAgRlRfRlJFRSggdGVtcCApOworICAgIH0KKyAgICBlbHNlIGlmICggdm11bCApICAvKiBsY2RfdiAqLwogICAgIHsKLSAgICAgIEZUX0J5dGUqICByZWFkICA9IGJpdG1hcC0+YnVmZmVyICsgKCBoZWlnaHQgLSBoZWlnaHRfb3JnICkgKiBwaXRjaDsKLSAgICAgIEZUX0J5dGUqICB3cml0ZSA9IGJpdG1hcC0+YnVmZmVyOwotICAgICAgRlRfVUludCAgIGhoOworICAgICAgaW50ICBwaXRjaCAgPSBiaXRtYXAtPnBpdGNoOwogCiAKLSAgICAgIGZvciAoIGhoID0gaGVpZ2h0X29yZzsgaGggPiAwOyBoaC0tICkKLSAgICAgIHsKLSAgICAgICAgZnRfbWVtY3B5KCB3cml0ZSwgcmVhZCwgcGl0Y2ggKTsKLSAgICAgICAgd3JpdGUgKz0gcGl0Y2g7CisgICAgICAvKiBSZW5kZXIgMyBzZXBhcmF0ZSBtb25vY2hyb21lIGJpdG1hcHMsIHNoaWZ0aW5nIHRoZSBvdXRsaW5lICAqLworICAgICAgLyogYnkgMS8zIHBpeGVsLiBUcmlwbGUgdGhlIHBpdGNoIHRvIHJlbmRlciBvbiBlYWNoIHRoaXJkIHJvdy4gKi8KKyAgICAgIGJpdG1hcC0+cGl0Y2ggKj0gMzsKKyAgICAgIGJpdG1hcC0+cm93cyAgLz0gMzsKIAotICAgICAgICBmdF9tZW1jcHkoIHdyaXRlLCByZWFkLCBwaXRjaCApOwotICAgICAgICB3cml0ZSArPSBwaXRjaDsKKyAgICAgIGJpdG1hcC0+YnVmZmVyICs9IHBpdGNoOwogCi0gICAgICAgIGZ0X21lbWNweSggd3JpdGUsIHJlYWQsIHBpdGNoICk7Ci0gICAgICAgIHdyaXRlICs9IHBpdGNoOwotICAgICAgICByZWFkICArPSBwaXRjaDsKLSAgICAgIH0KKyAgICAgIGVycm9yID0gcmVuZGVyLT5yYXN0ZXJfcmVuZGVyKCByZW5kZXItPnJhc3RlciwgJnBhcmFtcyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKworICAgICAgRlRfT3V0bGluZV9UcmFuc2xhdGUoIG91dGxpbmUsIDAsICAyMSApOworICAgICAgeV9zaGlmdCAgICAgICAgKz0gMjE7CisgICAgICBiaXRtYXAtPmJ1ZmZlciArPSBwaXRjaDsKKworICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBGVF9PdXRsaW5lX1RyYW5zbGF0ZSggb3V0bGluZSwgMCwgLTQyICk7CisgICAgICB5X3NoaWZ0ICAgICAgICAtPSA0MjsKKyAgICAgIGJpdG1hcC0+YnVmZmVyIC09IDIgKiBwaXRjaDsKKworICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CisgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBiaXRtYXAtPnBpdGNoIC89IDM7CisgICAgICBiaXRtYXAtPnJvd3MgICo9IDM7CiAgICAgfQorICAgIGVsc2UgIC8qIGdyYXlzY2FsZSAqLworICAgICAgZXJyb3IgPSByZW5kZXItPnJhc3Rlcl9yZW5kZXIoIHJlbmRlci0+cmFzdGVyLCAmcGFyYW1zICk7CiAKICNlbmRpZiAvKiAhRlRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9SRU5ERVJJTkcgKi8KIAotICAgIC8qIGV2ZXJ5dGhpbmcgaXMgZmluZTsgZG9uJ3QgZGVhbGxvY2F0ZSBidWZmZXIgKi8KLSAgICBoYXZlX2J1ZmZlciA9IEZBTFNFOwotCi0gICAgZXJyb3IgPSBGVF9FcnJfT2s7Ci0KICAgRXhpdDoKLSAgICBpZiAoIGhhdmVfb3V0bGluZV9zaGlmdGVkICkKLSAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCAteF9zaGlmdCwgLXlfc2hpZnQgKTsKLSAgICBpZiAoIGhhdmVfYnVmZmVyICkKKyAgICBpZiAoICFlcnJvciApCisgICAgeworICAgICAgLyogZXZlcnl0aGluZyBpcyBmaW5lOyB0aGUgZ2x5cGggaXMgbm93IG9mZmljaWFsbHkgYSBiaXRtYXAgKi8KKyAgICAgIHNsb3QtPmZvcm1hdCA9IEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVA7CisgICAgfQorICAgIGVsc2UgaWYgKCBzbG90LT5pbnRlcm5hbC0+ZmxhZ3MgJiBGVF9HTFlQSF9PV05fQklUTUFQICkKICAgICB7CiAgICAgICBGVF9GUkVFKCBiaXRtYXAtPmJ1ZmZlciApOwogICAgICAgc2xvdC0+aW50ZXJuYWwtPmZsYWdzICY9IH5GVF9HTFlQSF9PV05fQklUTUFQOwogICAgIH0KIAorICAgIGlmICggeF9zaGlmdCB8fCB5X3NoaWZ0ICkKKyAgICAgIEZUX091dGxpbmVfVHJhbnNsYXRlKCBvdXRsaW5lLCAteF9zaGlmdCwgLXlfc2hpZnQgKTsKKwogICAgIHJldHVybiBlcnJvcjsKICAgfQogCkBAIC00NDgsMTQgKzM2Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgICBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luICkKICAgewotICAgIEZUX0Vycm9yICBlcnJvcjsKLQotICAgIGVycm9yID0gZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKCByZW5kZXIsIHNsb3QsIG1vZGUsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTENEICk7Ci0gICAgaWYgKCAhZXJyb3IgKQotICAgICAgc2xvdC0+Yml0bWFwLnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX0xDRDsKLQotICAgIHJldHVybiBlcnJvcjsKKyAgICByZXR1cm4gZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKCByZW5kZXIsIHNsb3QsIG1vZGUsIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SRU5ERVJfTU9ERV9MQ0QgKTsKICAgfQogCiAKQEAgLTQ2NiwxNCArMzc1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgICAgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgb3JpZ2luICkKICAgewotICAgIEZUX0Vycm9yICBlcnJvcjsKLQotICAgIGVycm9yID0gZnRfc21vb3RoX3JlbmRlcl9nZW5lcmljKCByZW5kZXIsIHNsb3QsIG1vZGUsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTENEX1YgKTsKLSAgICBpZiAoICFlcnJvciApCi0gICAgICBzbG90LT5iaXRtYXAucGl4ZWxfbW9kZSA9IEZUX1BJWEVMX01PREVfTENEX1Y7Ci0KLSAgICByZXR1cm4gZXJyb3I7CisgICAgcmV0dXJuIGZ0X3Ntb290aF9yZW5kZXJfZ2VuZXJpYyggcmVuZGVyLCBzbG90LCBtb2RlLCBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTENEX1YgKTsKICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbW9vdGguaCBiL3NyYy9zbW9vdGgvZnRzbW9vdGguaAppbmRleCA5MjllMjYwLi5jNzZmZmM1IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21vb3RoLmgKKysrIGIvc3JjL3Ntb290aC9mdHNtb290aC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFudGktYWxpYXNpbmcgcmVuZGVyZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNywxOCArMjcsMTEgQEAKIEZUX0JFR0lOX0hFQURFUgogCiAKLSNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9OT19TVERfUkFTVEVSCi0gIEZUX0RFQ0xBUkVfUkVOREVSRVIoIGZ0X3N0ZF9yZW5kZXJlcl9jbGFzcyApCi0jZW5kaWYKLQotI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX05PX1NNT09USF9SQVNURVIKICAgRlRfREVDTEFSRV9SRU5ERVJFUiggZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzICkKIAogICBGVF9ERUNMQVJFX1JFTkRFUkVSKCBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzICkKIAotICBGVF9ERUNMQVJFX1JFTkRFUkVSKCBmdF9zbW9vdGhfbGNkX3ZfcmVuZGVyZXJfY2xhc3MgKQotI2VuZGlmCi0KKyAgRlRfREVDTEFSRV9SRU5ERVJFUiggZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3MgKQogCiAKIEZUX0VORF9IRUFERVIKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzcGljLmMgYi9zcmMvc21vb3RoL2Z0c3BpYy5jCmluZGV4IGZiODliZTMuLjEwZjA0Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRzcGljLmMKKysrIGIvc3JjL3Ntb290aC9mdHNwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc21vb3RoIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNwaWMuaCBiL3NyYy9zbW9vdGgvZnRzcGljLmgKaW5kZXggOWRkZDFjNy4uODBmYjY0YyAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdHNwaWMuaAorKysgYi9zcmMvc21vb3RoL2Z0c3BpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzbW9vdGggbW9kdWxlLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL21vZHVsZS5tayBiL3NyYy9zbW9vdGgvbW9kdWxlLm1rCmluZGV4IDgwNGU5YjEuLjViOGJjM2IgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvbW9kdWxlLm1rCisrKyBiL3NyYy9zbW9vdGgvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvcnVsZXMubWsgYi9zcmMvc21vb3RoL3J1bGVzLm1rCmluZGV4IGRmZGM5YmMuLmYzMDgyNGEgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvcnVsZXMubWsKKysrIGIvc3JjL3Ntb290aC9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL3Ntb290aC5jIGIvc3JjL3Ntb290aC9zbW9vdGguYwppbmRleCAyMDBmNWRjLi41MjQ5YTg5IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL3Ntb290aC5jCisrKyBiL3NyYy9zbW9vdGgvc21vb3RoLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgYW50aS1hbGlhc2luZyByYXN0ZXJlciBtb2R1bGUgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDExICsxNywxMSBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlICJmdHNwaWMuYyIKKwogI2luY2x1ZGUgImZ0Z3JheXMuYyIKICNpbmNsdWRlICJmdHNtb290aC5jIgorI2luY2x1ZGUgImZ0c3BpYy5jIgogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2FmYmx1ZS5wbCBiL3NyYy90b29scy9hZmJsdWUucGwKaW5kZXggMDI3YjYzMC4uN2M2ZjFhNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2FmYmx1ZS5wbAorKysgYi9zcmMvdG9vbHMvYWZibHVlLnBsCkBAIC01LDcgKzUsNyBAQAogIwogIyBQcm9jZXNzIGEgYmx1ZSB6b25lIGNoYXJhY3RlciBkYXRhIGZpbGUuCiAjCi0jIENvcHlyaWdodCAyMDEzLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMTMtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9hcGluYW1lcy5jIGIvc3JjL3Rvb2xzL2FwaW5hbWVzLmMKaW5kZXggNzNiYzk5ZC4uMDZjMzI2MCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2FwaW5hbWVzLmMKKysrIGIvc3JjL3Rvb2xzL2FwaW5hbWVzLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxjdHlwZS5oPgogCiAjZGVmaW5lICBQUk9HUkFNX05BTUUgICAgICJhcGluYW1lcyIKLSNkZWZpbmUgIFBST0dSQU1fVkVSU0lPTiAgIjAuMiIKKyNkZWZpbmUgIFBST0dSQU1fVkVSU0lPTiAgIjAuMyIKIAogI2RlZmluZSAgTElORUJVRkZfU0laRSAgMTAyNAogCkBAIC0zMiw3ICszMiw4IEBACiAgIE9VVFBVVF9XSU5ET1dTX0RFRiwgICAvKiBvdXRwdXQgYSBXaW5kb3dzIC5ERUYgZmlsZSBmb3IgVmlzdWFsIEMrKyBvciBNaW5ndyAqLwogICBPVVRQVVRfQk9STEFORF9ERUYsICAgLyogb3V0cHV0IGEgV2luZG93cyAuREVGIGZpbGUgZm9yIEJvcmxhbmQgQysrICAgICAgICAgKi8KICAgT1VUUFVUX1dBVENPTV9MQkMsICAgIC8qIG91dHB1dCBhIFdhdGNvbSBMaW5rZXIgQ29tbWFuZCBGaWxlICAgICAgICAgICAgICAgICovCi0gIE9VVFBVVF9ORVRXQVJFX0lNUCAgICAvKiBvdXRwdXQgYSBOZXRXYXJlIEltcG9ydEZpbGUgICAgICAgICAgICAgICAgICAgICAgICAqLworICBPVVRQVVRfTkVUV0FSRV9JTVAsICAgLyogb3V0cHV0IGEgTmV0V2FyZSBJbXBvcnRGaWxlICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgT1VUUFVUX0dOVV9WRVJNQVAgICAgIC8qIG91dHB1dCBhIHZlcnNpb24gbWFwIGZvciBHTlUgb3IgU29sYXJpcyBsaW5rZXIgICAgICovCiAKIH0gT3V0cHV0Rm9ybWF0OwogCkBAIC0xOTgsNiArMTk5LDE1IEBACiAgICAgICB9CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgT1VUUFVUX0dOVV9WRVJNQVA6CisgICAgICB7CisgICAgICAgIGZwcmludGYoIG91dCwgIntcblx0Z2xvYmFsOlxuIiApOworICAgICAgICBmb3IgKCBubiA9IDA7IG5uIDwgbnVtX25hbWVzOyBubisrICkKKyAgICAgICAgICBmcHJpbnRmKCBvdXQsICJcdFx0JXM7XG4iLCB0aGVfbmFtZXNbbm5dLm5hbWUgKTsKKyAgICAgICAgZnByaW50Ziggb3V0LCAiXHRsb2NhbDpcblx0XHQqO1xufTtcbiIgKTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDogIC8qIExJU1QgKi8KICAgICAgIGZvciAoIG5uID0gMDsgbm4gPCBudW1fbmFtZXM7IG5uKysgKQogICAgICAgICBmcHJpbnRmKCBvdXQsICIlc1xuIiwgdGhlX25hbWVzW25uXS5uYW1lICk7CkBAIC0zMjMsNiArMzMzLDcgQEAKICAgICIgICAgICAgICAgIC13QiAgICA6IG91dHB1dCAuREVGIGZpbGUgZm9yIEJvcmxhbmQgQysrXG4iCiAgICAiICAgICAgICAgICAtd1cgICAgOiBvdXRwdXQgV2F0Y29tIExpbmtlciBSZXNwb25zZSBGaWxlXG4iCiAgICAiICAgICAgICAgICAtd04gICAgOiBvdXRwdXQgTmV0V2FyZSBJbXBvcnQgRmlsZVxuIgorICAgIiAgICAgICAgICAgLXdMICAgIDogb3V0cHV0IHZlcnNpb24gbWFwIGZvciBHTlUgb3IgU29sYXJpcyBsaW5rZXJcbiIKICAgICJcbiI7CiAKICAgZnByaW50Ziggc3RkZXJyLApAQCAtNDEwLDYgKzQyMSwxMCBAQAogICAgICAgICAgICAgZm9ybWF0ID0gT1VUUFVUX05FVFdBUkVfSU1QOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIGZvcm1hdCA9IE9VVFBVVF9HTlVfVkVSTUFQOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2RvY21ha2VyL2NvbnRlbnQucHkgYi9zcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weQppbmRleCAyODNkODE1Li5jOTk2OWRiIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weQorKysgYi9zcmMvdG9vbHMvZG9jbWFrZXIvY29udGVudC5weQpAQCAtMyw3ICszLDcgQEAKICMKICMgICAgUGFyc2UgY29tbWVudCBibG9ja3MgdG8gYnVpbGQgY29udGVudCBibG9ja3MgKGxpYnJhcnkgZmlsZSkuCiAjCi0jICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5CisjICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CiAjICBEYXZpZCBUdXJuZXIuCiAjCiAjICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC00NTMsMTUgKzQ1MywzMiBAQAogICAgICAgICBtYXJrdXBfbGluZXMgPSBbXQogICAgICAgICBmaXJzdCAgICAgICAgPSAxCiAKKyAgICAgICAgbWFyZ2luICA9IC0xCisgICAgICAgIGluX2NvZGUgPSAwCisKICAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudDoKLSAgICAgICAgICAgIGZvdW5kID0gTm9uZQotICAgICAgICAgICAgZm9yIHQgaW4gcmVfbWFya3VwX3RhZ3M6Ci0gICAgICAgICAgICAgICAgbSA9IHQubWF0Y2goIGxpbmUgKQorICAgICAgICAgICAgaWYgaW5fY29kZToKKyAgICAgICAgICAgICAgICBtID0gcmVfY29kZV9lbmQubWF0Y2goIGxpbmUgKQorICAgICAgICAgICAgICAgIGlmIG0gYW5kIGxlbiggbS5ncm91cCggMSApICkgPD0gbWFyZ2luOgorICAgICAgICAgICAgICAgICAgICBpbl9jb2RlID0gMAorICAgICAgICAgICAgICAgICAgICBtYXJnaW4gID0gLTEKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbSA9IHJlX2NvZGVfc3RhcnQubWF0Y2goIGxpbmUgKQogICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kICA9IHN0cmluZy5sb3dlciggbS5ncm91cCggMSApICkKLSAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbGVuKCBtLmdyb3VwKCAwICkgKQotICAgICAgICAgICAgICAgICAgICBsaW5lICAgPSAiICIgKiBwcmVmaXggKyBsaW5lW3ByZWZpeDpdICAgIyByZW1vdmUgbWFya3VwIGZyb20gbGluZQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpbl9jb2RlID0gMQorICAgICAgICAgICAgICAgICAgICBtYXJnaW4gID0gbGVuKCBtLmdyb3VwKCAxICkgKQorCisgICAgICAgICAgICBmb3VuZCA9IE5vbmUKKworICAgICAgICAgICAgaWYgbm90IGluX2NvZGU6CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gcmVfbWFya3VwX3RhZ3M6CisgICAgICAgICAgICAgICAgICAgIG0gPSB0Lm1hdGNoKCBsaW5lICkKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kICA9IHN0cmluZy5sb3dlciggbS5ncm91cCggMSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IGxlbiggbS5ncm91cCggMCApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIG1hcmt1cCBmcm9tIGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICA9ICIgIiAqIHByZWZpeCArIGxpbmVbcHJlZml4Ol0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgICAgICMgaXMgaXQgdGhlIHN0YXJ0IG9mIGEgbmV3IG1hcmt1cCBzZWN0aW9uID8KICAgICAgICAgICAgIGlmIGZvdW5kOgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2RvY21ha2VyL2RvY21ha2VyLnB5IGIvc3JjL3Rvb2xzL2RvY21ha2VyL2RvY21ha2VyLnB5CmluZGV4IDRlMjVmZjAuLjI1M2E0ZDMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9kb2NtYWtlci9kb2NtYWtlci5weQorKysgYi9zcmMvdG9vbHMvZG9jbWFrZXIvZG9jbWFrZXIucHkKQEAgLTQsNyArNCw3IEBACiAjCiAjICAgIENvbnZlcnQgc291cmNlIGNvZGUgbWFya3VwIHRvIEhUTUwgZG9jdW1lbnRhdGlvbi4KICMKLSMgIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgIENvcHlyaWdodCAyMDAyLTIwMTggYnkKICMgIERhdmlkIFR1cm5lci4KICMKICMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9kb2NtYWtlci9mb3JtYXR0ZXIucHkgYi9zcmMvdG9vbHMvZG9jbWFrZXIvZm9ybWF0dGVyLnB5CmluZGV4IDI3NDU3NTQuLjI3MDhmZDQgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9kb2NtYWtlci9mb3JtYXR0ZXIucHkKKysrIGIvc3JjL3Rvb2xzL2RvY21ha2VyL2Zvcm1hdHRlci5weQpAQCAtMyw3ICszLDcgQEAKICMKICMgICAgQ29udmVydCBwYXJzZWQgY29udGVudCBibG9ja3MgdG8gYSBzdHJ1Y3R1cmVkIGRvY3VtZW50IChsaWJyYXJ5IGZpbGUpLgogIwotIyAgQ29weXJpZ2h0IDIwMDItMjAxNyBieQorIyAgQ29weXJpZ2h0IDIwMDItMjAxOCBieQogIyAgRGF2aWQgVHVybmVyLgogIwogIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2RvY21ha2VyL3NvdXJjZXMucHkgYi9zcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weQppbmRleCAwNjQwN2UxLi4yY2Q1YTMzIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weQorKysgYi9zcmMvdG9vbHMvZG9jbWFrZXIvc291cmNlcy5weQpAQCAtMyw3ICszLDcgQEAKICMKICMgICAgQ29udmVydCBzb3VyY2UgY29kZSBjb21tZW50cyB0byBtdWx0aS1saW5lIGJsb2NrcyAobGlicmFyeSBmaWxlKS4KICMKLSMgIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgIENvcHlyaWdodCAyMDAyLTIwMTggYnkKICMgIERhdmlkIFR1cm5lci4KICMKICMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTE3MSw3ICsxNzEsNyBAQAogIwogIyBUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBjb2RlIHRvIGlkZW50aWZ5IGFuIFVSTCBoYXMgYmVlbiB0YWtlbiBmcm9tCiAjCi0jICAgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvdHV0b3IvMjAwMi1TZXB0ZW1iZXIvMDE3MjI4Lmh0bWwKKyMgICBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvdHV0b3IvMjAwMi1TZXB0ZW1iZXIvMDE3MjI4Lmh0bWwKICMKICMgKHdpdGggc2xpZ2h0IG1vZGlmaWNhdGlvbnMpLgogIwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weSBiL3NyYy90b29scy9kb2NtYWtlci90b2h0bWwucHkKaW5kZXggMDEyYjU1ZS4uN2Y1ZWNkYSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2RvY21ha2VyL3RvaHRtbC5weQorKysgYi9zcmMvdG9vbHMvZG9jbWFrZXIvdG9odG1sLnB5CkBAIC0zLDcgKzMsNyBAQAogIwogIyAgICBBIHN1Yi1jbGFzcyBjb250YWluZXIgb2YgdGhlIGBGb3JtYXR0ZXInIGNsYXNzIHRvIHByb2R1Y2UgSFRNTC4KICMKLSMgIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgIENvcHlyaWdodCAyMDAyLTIwMTggYnkKICMgIERhdmlkIFR1cm5lci4KICMKICMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKQEAgLTI1LDcgKzI1LDcgQEAKICMgVGhlIGZvbGxvd2luZyBzdHJpbmdzIGRlZmluZSB0aGUgSFRNTCBoZWFkZXIgdXNlZCBieSBhbGwgZ2VuZXJhdGVkIHBhZ2VzLgogaHRtbF9oZWFkZXJfMSA9ICIiIlwKIDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCi0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKyJodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KIDxodG1sPgogPGhlYWQ+CiA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZG9jbWFrZXIvdXRpbHMucHkgYi9zcmMvdG9vbHMvZG9jbWFrZXIvdXRpbHMucHkKaW5kZXggYmE1YjJlNy4uZjQwZjE2NyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2RvY21ha2VyL3V0aWxzLnB5CisrKyBiL3NyYy90b29scy9kb2NtYWtlci91dGlscy5weQpAQCAtMyw3ICszLDcgQEAKICMKICMgICAgQXV4aWxpYXJ5IGZ1bmN0aW9ucyBmb3IgdGhlIGBkb2NtYWtlcicgdG9vbCAobGlicmFyeSBmaWxlKS4KICMKLSMgIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgIENvcHlyaWdodCAyMDAyLTIwMTggYnkKICMgIERhdmlkIFR1cm5lci4KICMKICMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9mdGZ1enplci9SRUFETUUgYi9zcmMvdG9vbHMvZnRmdXp6ZXIvUkVBRE1FCmluZGV4IDUzZjkwNzEuLjA5ZDhlOWYgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9mdGZ1enplci9SRUFETUUKKysrIGIvc3JjL3Rvb2xzL2Z0ZnV6emVyL1JFQURNRQpAQCAtNiw3ICs2LDcgQEAKIC0tLS0tLS0tLS0tCiAKIFRoaXMgZmlsZSBjb250YWlucyBhIHRhcmdldCBmdW5jdGlvbiAgZm9yIEZyZWVUeXBlIGZ1enppbmcuICBJdCBjYW4gYmUKLXVzZWQgICAgd2l0aCAgIGxpYkZ1enplciAgICAoaHR0cDovL2xsdm0ub3JnL2RvY3MvTGliRnV6emVyLmh0bWwpICAgb3IKK3VzZWQgICB3aXRoICAgIGxpYkZ1enplciAgIChodHRwczovL2xsdm0ub3JnL2RvY3MvTGliRnV6emVyLmh0bWwpICAgb3IKIHBvdGVudGlhbGx5IGFueSBvdGhlciBzaW1pbGFyIGZ1enplci4KIAogVXNhZ2U6CkBAIC0yMCw3ICsyMCw3IEBACiAgICAgICAgLWZzYW5pdGl6ZT1hZGRyZXNzLHNpZ25lZC1pbnRlZ2VyLW92ZXJmbG93LHNoaWZ0CiAKICAgICAgWW91ICBhbHNvIG5lZWQgIHRoZSBoZWFkZXIgIGZpbGVzIGZyb20gIHRoZSBgbGliYXJjaGl2ZScgIGxpYnJhcnkKLSAgICAgKGh0dHA6Ly93d3cubGliYXJjaGl2ZS5vcmcvKSAgZm9yIGhhbmRsaW5nICB0YXIgIGZpbGVzIChzZWUgIGZpbGUKKyAgICAgKGh0dHBzOi8vd3d3LmxpYmFyY2hpdmUub3JnLykgIGZvciBoYW5kbGluZyAgdGFyIGZpbGVzICAoc2VlIGZpbGUKICAgICAgYGZ0bXV0YXRvci5jYycgYmVsb3cgZm9yIG1vcmUpLgogCiAgIDIuIExpbmsgd2l0aCBgbGliRnV6emVyJyAoaXQgY29udGFpbnMgYG1haW4nKSBhbmQgYGxpYmFyY2hpdmUnLgpAQCAtMjksMTAgKzI5LDE0IEBACiAKIFRoZSBleGFjdCBmbGFncyBhbmQgY29tbWFuZHMgbWF5IHZhcnkuCiAKKyAgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9vc3MtZnV6ei90cmVlL21hc3Rlci9wcm9qZWN0cy9mcmVldHlwZTIKIAogVGhlcmUgaXMgYSBjb250aW51b3VzIGZ1enppbmcgYm90IHRoYXQgcnVucyBmdGZ1enplci4KIAotICBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2xpYmZ1enplci1ib3QvdHJlZS9tYXN0ZXIvZnJlZXR5cGUKKyAgaHR0cHM6Ly9vc3MtZnV6ei5jb20KKworKFlvdSBuZWVkIGFuIGFjY291bnQgIHRvIGJlIGFibGUgdG8gc2VlIGNvdmVyYWdlICByZXBvcnRzIGFuZCB0aGUgbGlrZQorb24gb3NzLWZ1enouY29tLikKIAogQ2hlY2sgdGhlIGJvdCBjb25maWd1cmF0aW9uIGZvciB0aGUgbW9zdCBjdXJyZW50IHNldHRpbmdzLgogCkBAIC02NCw3ICs2OCw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IDIwMTUtMjAxNyBieQorQ29weXJpZ2h0IDIwMTUtMjAxOCBieQogRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogCiBUaGlzICBmaWxlIGlzICBwYXJ0IG9mICB0aGUgRnJlZVR5cGUgIHByb2plY3QsIGFuZCAgbWF5IG9ubHkgIGJlIHVzZWQsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MgYi9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRmdXp6ZXIuY2MKaW5kZXggNDc1YjIzMi4uYWNmMmJjOSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0ZnV6emVyLmNjCisrKyBiL3NyYy90b29scy9mdGZ1enplci9mdGZ1enplci5jYwpAQCAtMiw3ICsyLDcgQEAKIC8vCiAvLyAgIEEgZnV6emluZyBmdW5jdGlvbiB0byB0ZXN0IEZyZWVUeXBlIHdpdGggbGliRnV6emVyLgogLy8KLS8vIENvcHlyaWdodCAyMDE1LTIwMTcgYnkKKy8vIENvcHlyaWdodCAyMDE1LTIwMTggYnkKIC8vIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIC8vCiAvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCkBAIC00Myw4ICs0Myw3IEBACiAjaW5jbHVkZSBGVF9PVVRMSU5FX0gKICNpbmNsdWRlIEZUX0JCT1hfSAogI2luY2x1ZGUgRlRfTU9EVUxFX0gKLSNpbmNsdWRlIEZUX0NGRl9EUklWRVJfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfRFJJVkVSX0gKKyNpbmNsdWRlIEZUX0RSSVZFUl9ICiAjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKIAogCkBAIC02MSw3ICs2MCw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgICAgLy8gdHJ5IHRvIGFjdGl2YXRlIEFkb2JlJ3MgQ0ZGIGVuZ2luZTsgaXQgbWlnaHQgbm90IGJlIHRoZSBkZWZhdWx0Ci0gICAgICB1bnNpZ25lZCBpbnQgIGNmZl9oaW50aW5nX2VuZ2luZSA9IEZUX0NGRl9ISU5USU5HX0FET0JFOworICAgICAgdW5zaWduZWQgaW50ICBjZmZfaGludGluZ19lbmdpbmUgPSBGVF9ISU5USU5HX0FET0JFOwogICAgICAgRlRfUHJvcGVydHlfU2V0KCBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAiY2ZmIiwKICAgICAgICAgICAgICAgICAgICAgICAgImhpbnRpbmctZW5naW5lIiwgJmNmZl9oaW50aW5nX2VuZ2luZSApOwpAQCAtMjcwLDExICsyNjksMjAgQEAKICAgICBsb25nICBudW1fZmFjZXMgPSBmYWNlLT5udW1fZmFjZXM7CiAgICAgRlRfRG9uZV9GYWNlKCBmYWNlICk7CiAKLSAgICAvLyBsb29wIG92ZXIgYWxsIGZhY2VzCi0gICAgZm9yICggbG9uZyAgZmFjZV9pbmRleCA9IDA7Ci0gICAgICAgICAgZmFjZV9pbmRleCA8IG51bV9mYWNlczsKLSAgICAgICAgICBmYWNlX2luZGV4KysgKQorICAgIC8vIGxvb3Agb3ZlciB1cCB0byAyMCBhcmJpdHJhcmlseSBzZWxlY3RlZCBmYWNlcworICAgIC8vIGZyb20gaW5kZXggcmFuZ2UgWzA7bnVtLWZhY2VzLTFdCisgICAgbG9uZyAgbWF4X2ZhY2VfY250ID0gbnVtX2ZhY2VzIDwgMjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVtX2ZhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDIwOworCisgICAgUmFuZG9tICBmYWNlc19wb29sKCAoaW50KW1heF9mYWNlX2NudCwgKGludCludW1fZmFjZXMgKTsKKworICAgIGZvciAoIGxvbmcgIGZhY2VfY250ID0gMDsKKyAgICAgICAgICBmYWNlX2NudCA8IG1heF9mYWNlX2NudDsKKyAgICAgICAgICBmYWNlX2NudCsrICkKICAgICB7CisgICAgICBsb25nICBmYWNlX2luZGV4ID0gZmFjZXNfcG9vbC5nZXQoKSAtIDE7CisKICAgICAgIC8vIGdldCBudW1iZXIgb2YgaW5zdGFuY2VzCiAgICAgICBpZiAoIEZUX05ld19NZW1vcnlfRmFjZSggbGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1swXS5kYXRhKCksCkBAIC0yODUsMTcgKzI5Myw0MSBAQAogICAgICAgbG9uZyAgbnVtX2luc3RhbmNlcyA9IGZhY2UtPnN0eWxlX2ZsYWdzID4+IDE2OwogICAgICAgRlRfRG9uZV9GYWNlKCBmYWNlICk7CiAKLSAgICAgIC8vIGxvYWQgZmFjZSB3aXRoIGFuZCB3aXRob3V0IGluc3RhbmNlcwotICAgICAgZm9yICggbG9uZyAgaW5zdGFuY2VfaW5kZXggPSAwOwotICAgICAgICAgICAgaW5zdGFuY2VfaW5kZXggPCBudW1faW5zdGFuY2VzICsgMTsKLSAgICAgICAgICAgIGluc3RhbmNlX2luZGV4KysgKQorICAgICAgLy8gbG9vcCBvdmVyIHRoZSBmYWNlIHdpdGhvdXQgaW5zdGFuY2UgKGluZGV4IDApCisgICAgICAvLyBhbmQgdXAgdG8gMjAgYXJiaXRyYXJpbHkgc2VsZWN0ZWQgaW5zdGFuY2VzCisgICAgICAvLyBmcm9tIGluZGV4IHJhbmdlIFsxO251bV9pbnN0YW5jZXNdCisgICAgICBsb25nICBtYXhfaW5zdGFuY2VfY250ID0gbnVtX2luc3RhbmNlcyA8IDIwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG51bV9pbnN0YW5jZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMjA7CisKKyAgICAgIFJhbmRvbSAgaW5zdGFuY2VzX3Bvb2woIChpbnQpbWF4X2luc3RhbmNlX2NudCwgKGludCludW1faW5zdGFuY2VzICk7CisKKyAgICAgIGZvciAoIGxvbmcgIGluc3RhbmNlX2NudCA9IDA7CisgICAgICAgICAgICBpbnN0YW5jZV9jbnQgPD0gbWF4X2luc3RhbmNlX2NudDsKKyAgICAgICAgICAgIGluc3RhbmNlX2NudCsrICkKICAgICAgIHsKLSAgICAgICAgaWYgKCBGVF9OZXdfTWVtb3J5X0ZhY2UoIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1swXS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZylmaWxlc1swXS5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIGluc3RhbmNlX2luZGV4IDw8IDE2ICkgKyBmYWNlX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY2UgKSApCi0gICAgICAgICAgY29udGludWU7CisgICAgICAgIGxvbmcgIGluc3RhbmNlX2luZGV4ID0gMDsKKworICAgICAgICBpZiAoICFpbnN0YW5jZV9jbnQgKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCBGVF9OZXdfTWVtb3J5X0ZhY2UoIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzWzBdLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpZmlsZXNbMF0uc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjZSApICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIGluc3RhbmNlX2luZGV4ID0gaW5zdGFuY2VzX3Bvb2wuZ2V0KCk7CisKKyAgICAgICAgICBpZiAoIEZUX05ld19NZW1vcnlfRmFjZSggbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbMF0uZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfTG9uZylmaWxlc1swXS5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggaW5zdGFuY2VfaW5kZXggPDwgMTYgKSArIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYWNlICkgKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICAvLyBpZiB3ZSBoYXZlIG1vcmUgdGhhbiBhIHNpbmdsZSBpbnB1dCBmaWxlIGNvbWluZyBmcm9tIGFuIGFyY2hpdmUsCiAgICAgICAgIC8vIGF0dGFjaCB0aGVtIChzdGFydGluZyB3aXRoIHRoZSBzZWNvbmQgZmlsZSkgdXNpbmcgdGhlIG9yZGVyIGdpdmVuCkBAIC0zMTQsMTkgKzM0NiwyNCBAQAogICAgICAgICAgIEZUX0F0dGFjaF9TdHJlYW0oIGZhY2UsICZvcGVuX2FyZ3MgKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIGxvb3Agb3ZlciBhbiBhcmJpdHJhcnkgc2l6ZSBmb3Igb3V0bGluZXMgKGluZGV4IDApCi0gICAgICAgIC8vIGFuZCB1cCB0byB0ZW4gYXJiaXRyYXJpbHkgc2VsZWN0ZWQgYml0bWFwIHN0cm9rZSBzaXplcyAoaW5kZXggMS0xMCkKLSAgICAgICAgaW50ICBtYXhfaWR4ID0gZmFjZS0+bnVtX2ZpeGVkX3NpemVzIDwgMTAKLSAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhY2UtPm51bV9maXhlZF9zaXplcwotICAgICAgICAgICAgICAgICAgICAgICAgIDogMTA7CisgICAgICAgIC8vIGxvb3Agb3ZlciBhbiBhcmJpdHJhcnkgc2l6ZSBmb3Igb3V0bGluZXMKKyAgICAgICAgLy8gYW5kIHVwIHRvIHRlbiBhcmJpdHJhcmlseSBzZWxlY3RlZCBiaXRtYXAgc3RyaWtlIHNpemVzCisgICAgICAgIC8vIGZyb20gdGhlIHJhbmdlIFswO251bV9maXhlZF9zaXplcyAtIDFdCisgICAgICAgIGludCAgbWF4X3NpemVfY250ID0gZmFjZS0+bnVtX2ZpeGVkX3NpemVzIDwgMTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmFjZS0+bnVtX2ZpeGVkX3NpemVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDEwOwogCi0gICAgICAgIFJhbmRvbSBwb29sKCBtYXhfaWR4LCBmYWNlLT5udW1fZml4ZWRfc2l6ZXMgKTsKKyAgICAgICAgUmFuZG9tIHNpemVzX3Bvb2woIG1heF9zaXplX2NudCwgZmFjZS0+bnVtX2ZpeGVkX3NpemVzICk7CiAKLSAgICAgICAgZm9yICggaW50ICBpZHggPSAwOyBpZHggPD0gbWF4X2lkeDsgaWR4KysgKQorICAgICAgICBmb3IgKCBpbnQgIHNpemVfY250ID0gMDsKKyAgICAgICAgICAgICAgc2l6ZV9jbnQgPD0gbWF4X3NpemVfY250OworICAgICAgICAgICAgICBzaXplX2NudCsrICkKICAgICAgICAgewogICAgICAgICAgIEZUX0ludDMyICBmbGFncyA9IGxvYWRfZmxhZ3M7CiAKLSAgICAgICAgICBpZiAoICFpZHggKQorICAgICAgICAgIGludCAgc2l6ZV9pbmRleCA9IDA7CisKKyAgICAgICAgICBpZiAoICFzaXplX2NudCApCiAgICAgICAgICAgewogICAgICAgICAgICAgLy8gc2V0IHVwIDIwcHQgYXQgNzJkcGkgYXMgYW4gYXJiaXRyYXJ5IHNpemUKICAgICAgICAgICAgIGlmICggRlRfU2V0X0NoYXJfU2l6ZSggZmFjZSwgMjAgKiA2NCwgMjAgKiA2NCwgNzIsIDcyICkgKQpAQCAtMzM1LDE3ICszNzIsMjAgQEAKICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQogICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIGJpdG1hcCBzdHJva2VzIGFyZSBub3QgYWN0aXZlIGZvciBnbHlwaCB2YXJpYXRpb25zCisgICAgICAgICAgICAvLyBiaXRtYXAgc3RyaWtlcyBhcmUgbm90IGFjdGl2ZSBmb3IgZm9udCB2YXJpYXRpb25zCiAgICAgICAgICAgICBpZiAoIGluc3RhbmNlX2luZGV4ICkKICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGlmICggRlRfU2VsZWN0X1NpemUoIGZhY2UsIHBvb2wuZ2V0KCkgLSAxICkgKQorICAgICAgICAgICAgc2l6ZV9pbmRleCA9IHNpemVzX3Bvb2wuZ2V0KCkgLSAxOworCisgICAgICAgICAgICBpZiAoIEZUX1NlbGVjdF9TaXplKCBmYWNlLCBzaXplX2luZGV4ICkgKQogICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGZsYWdzIHw9IEZUX0xPQURfQ09MT1I7CiAgICAgICAgICAgfQogCiAgICAgICAgICAgLy8gdGVzdCBNTSBpbnRlcmZhY2Ugb25seSBmb3IgYSBmYWNlIHdpdGhvdXQgYSBzZWxlY3RlZCBpbnN0YW5jZQotICAgICAgICAgIGlmICggaW5zdGFuY2VfaW5kZXggPT0gMCApCisgICAgICAgICAgLy8gYW5kIHdpdGhvdXQgYSBzZWxlY3RlZCBiaXRtYXAgc3RyaWtlCisgICAgICAgICAgaWYgKCAhaW5zdGFuY2VfaW5kZXggJiYgIXNpemVfY250ICkKICAgICAgICAgICAgIHNldEludGVybWVkaWF0ZUF4aXMoIGZhY2UgKTsKIAogICAgICAgICAgIC8vIGxvb3Agb3ZlciBhbGwgZ2x5cGhzCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRtdXRhdG9yLmNjIGIvc3JjL3Rvb2xzL2Z0ZnV6emVyL2Z0bXV0YXRvci5jYwppbmRleCAyMmFhNWE3Li5hZTRiMTQwIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvZnRmdXp6ZXIvZnRtdXRhdG9yLmNjCisrKyBiL3NyYy90b29scy9mdGZ1enplci9mdG11dGF0b3IuY2MKQEAgLTIsNyArMiw3IEBACiAvLwogLy8gICBBIGN1c3RvbSBmdXp6ZXIgbXV0YXRvciB0byB0ZXN0IGZvciBGcmVlVHlwZSB3aXRoIGxpYkZ1enplci4KIC8vCi0vLyBDb3B5cmlnaHQgMjAxNS0yMDE3IGJ5CisvLyBDb3B5cmlnaHQgMjAxNS0yMDE4IGJ5CiAvLyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAvLwogLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2Z0ZnV6emVyL3Jhc3RlcmZ1enplci5jYyBiL3NyYy90b29scy9mdGZ1enplci9yYXN0ZXJmdXp6ZXIuY2MKaW5kZXggYWU5YjFhNS4uYzY5Yjk1ZSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2Z0ZnV6emVyL3Jhc3RlcmZ1enplci5jYworKysgYi9zcmMvdG9vbHMvZnRmdXp6ZXIvcmFzdGVyZnV6emVyLmNjCkBAIC0yLDcgKzIsNyBAQAogLy8KIC8vICAgQSBmdXp6aW5nIGZ1bmN0aW9uIHRvIHRlc3QgRnJlZVR5cGUncyByYXN0ZXJpemVycyB3aXRoIGxpYkZ1enplci4KIC8vCi0vLyBDb3B5cmlnaHQgMjAxNi0yMDE3IGJ5CisvLyBDb3B5cmlnaHQgMjAxNi0yMDE4IGJ5CiAvLyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAvLwogLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL2Z0ZnV6emVyL3J1bmlucHV0LmNjIGIvc3JjL3Rvb2xzL2Z0ZnV6emVyL3J1bmlucHV0LmNjCmluZGV4IDE1MjYxMjAuLjJiMDJmNTcgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9mdGZ1enplci9ydW5pbnB1dC5jYworKysgYi9zcmMvdG9vbHMvZnRmdXp6ZXIvcnVuaW5wdXQuY2MKQEAgLTIsNyArMiw3IEBACiAvLwogLy8gICBBIGBtYWluJyBmdW5jdGlvbiBmb3IgZnV6emVycyBsaWtlIGBmdGZ1enplci5jYycuCiAvLwotLy8gQ29weXJpZ2h0IDIwMTUtMjAxNyBieQorLy8gQ29weXJpZ2h0IDIwMTUtMjAxOCBieQogLy8gRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogLy8KIC8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9nbG5hbWVzLnB5IGIvc3JjL3Rvb2xzL2dsbmFtZXMucHkKaW5kZXggOWVkMTU4OC4uYjA0OGQyOSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL2dsbmFtZXMucHkKKysrIGIvc3JjL3Rvb2xzL2dsbmFtZXMucHkKQEAgLTYsNyArNiw3IEBACiAjCiAKIAotIyBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5CisjIENvcHlyaWdodCAxOTk2LTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApAQCAtMTUxLDcgKzE1MSw3IEBACiAjIFRoZSBsaXN0IG9mIHN0YW5kYXJkIGBTSUQnIGdseXBoIG5hbWVzLiAgRm9yIHRoZSBvZmZpY2lhbCBsaXN0LAogIyBzZWUgQW5uZXggQSBvZiBkb2N1bWVudCBhdAogIwotIyAgIGh0dHA6Ly9wYXJ0bmVycy5hZG9iZS5jb20vcHVibGljL2RldmVsb3Blci9lbi9mb250LzUxNzYuQ0ZGLnBkZiAgLgorIyAgIGh0dHBzOi8vd3d3LmFkb2JlLmNvbS9jb250ZW50L2RhbS9hY29tL2VuL2Rldm5ldC9mb250L3BkZnMvNTE3Ni5DRkYucGRmICAuCiAjCiBzaWRfc3RhbmRhcmRfbmFtZXMgPSBcCiBbCkBAIC00OTIwLDcgKzQ5MjAsNyBAQAogCiAgIGRlZiBkdW1wKCBzZWxmLCBmaWxlICk6CiAgICAgd3JpdGUgPSBmaWxlLndyaXRlCi0gICAgd3JpdGUoICIjaWZuZGVmICBERUZJTkVfUFNfVEFCTEVTXG4iICkKKyAgICB3cml0ZSggIiNpZm5kZWYgIERFRklORV9QU19UQUJMRVNfREFUQVxuIiApCiAgICAgd3JpdGUoICIjaWZkZWYgIF9fY3BsdXNwbHVzXG4iICkKICAgICB3cml0ZSggJyAgZXh0ZXJuICJDIlxuJyApCiAgICAgd3JpdGUoICIjZWxzZVxuIiApCkBAIC00OTI5LDcgKzQ5MjksNyBAQAogICAgIHdyaXRlKCAiI2VuZGlmXG4iICkKICAgICB3cml0ZSggIiAgY29uc3QgY2hhciAgIiArIHNlbGYubWFzdGVyX3RhYmxlICsKICAgICAgICAgICAgIlsiICsgcmVwciggc2VsZi50b3RhbCApICsgIl1cbiIgKQotICAgIHdyaXRlKCAiI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTXG4iICkKKyAgICB3cml0ZSggIiNpZmRlZiAgREVGSU5FX1BTX1RBQkxFU19EQVRBXG4iICkKICAgICB3cml0ZSggIiAgPVxuIiApCiAgICAgd3JpdGUoICIgIHtcbiIgKQogCkBAIC00OTQxLDcgKzQ5NDEsNyBAQAogCiAgICAgd3JpdGUoIGxpbmUgKQogICAgIHdyaXRlKCAiICB9XG4iICkKLSAgICB3cml0ZSggIiNlbmRpZiAvKiBERUZJTkVfUFNfVEFCTEVTICovXG4iICkKKyAgICB3cml0ZSggIiNlbmRpZiAvKiBERUZJTkVfUFNfVEFCTEVTX0RBVEEgKi9cbiIgKQogICAgIHdyaXRlKCAiICA7XG5cblxuIiApCiAKICAgZGVmIGR1bXBfc3VibGlzdCggc2VsZiwgZmlsZSwgdGFibGVfbmFtZSwgbWFjcm9fbmFtZSwgc3VibGlzdCApOgpAQCAtNDk1MCw3ICs0OTUwLDcgQEAKIAogICAgIHdyaXRlKCAiICAvKiBWYWx1ZXMgYXJlIG9mZnNldHMgaW50byB0aGUgYCIgKwogICAgICAgICAgICBzZWxmLm1hc3Rlcl90YWJsZSArICInIHRhYmxlICovXG5cbiIgKQotICAgIHdyaXRlKCAiI2lmbmRlZiAgREVGSU5FX1BTX1RBQkxFU1xuIiApCisgICAgd3JpdGUoICIjaWZuZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEFcbiIgKQogICAgIHdyaXRlKCAiI2lmZGVmICBfX2NwbHVzcGx1c1xuIiApCiAgICAgd3JpdGUoICcgIGV4dGVybiAiQyJcbicgKQogICAgIHdyaXRlKCAiI2Vsc2VcbiIgKQpAQCAtNDk1OSw3ICs0OTU5LDcgQEAKICAgICB3cml0ZSggIiNlbmRpZlxuIiApCiAgICAgd3JpdGUoICIgIGNvbnN0IHNob3J0ICAiICsgdGFibGVfbmFtZSArCiAgICAgICAgICAgICJbIiArIG1hY3JvX25hbWUgKyAiXVxuIiApCi0gICAgd3JpdGUoICIjaWZkZWYgIERFRklORV9QU19UQUJMRVNcbiIgKQorICAgIHdyaXRlKCAiI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEFcbiIgKQogICAgIHdyaXRlKCAiICA9XG4iICkKICAgICB3cml0ZSggIiAge1xuIiApCiAKQEAgLTQ5NzksNyArNDk3OSw3IEBACiAgICAgd3JpdGUoIGxpbmUgKQogICAgIHdyaXRlKCAiXG4iICkKICAgICB3cml0ZSggIiAgfVxuIiApCi0gICAgd3JpdGUoICIjZW5kaWYgLyogREVGSU5FX1BTX1RBQkxFUyAqL1xuIiApCisgICAgd3JpdGUoICIjZW5kaWYgLyogREVGSU5FX1BTX1RBQkxFU19EQVRBICovXG4iICkKICAgICB3cml0ZSggIiAgO1xuXG5cbiIgKQogCiAKQEAgLTUyMTMsNyArNTIxMyw3IEBACiAKICAgd3JpdGUgPSBmaWxlLndyaXRlCiAgIHdyaXRlKCAiICAvKiB0aGUgZm9sbG93aW5nIGFyZSBpbmRpY2VzIGludG8gdGhlIFNJRCBuYW1lIHRhYmxlICovXG4iICkKLSAgd3JpdGUoICIjaWZuZGVmICBERUZJTkVfUFNfVEFCTEVTXG4iICkKKyAgd3JpdGUoICIjaWZuZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEFcbiIgKQogICB3cml0ZSggIiNpZmRlZiAgX19jcGx1c3BsdXNcbiIgKQogICB3cml0ZSggJyAgZXh0ZXJuICJDIlxuJyApCiAgIHdyaXRlKCAiI2Vsc2VcbiIgKQpAQCAtNTIyMiw3ICs1MjIyLDcgQEAKICAgd3JpdGUoICIjZW5kaWZcbiIgKQogICB3cml0ZSggIiAgY29uc3QgdW5zaWduZWQgc2hvcnQgICIgKyBlbmNvZGluZ19uYW1lICsKICAgICAgICAgICJbIiArIHJlcHIoIGxlbiggZW5jb2RpbmdfbGlzdCApICkgKyAiXVxuIiApCi0gIHdyaXRlKCAiI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTXG4iICkKKyAgd3JpdGUoICIjaWZkZWYgIERFRklORV9QU19UQUJMRVNfREFUQVxuIiApCiAgIHdyaXRlKCAiICA9XG4iICkKICAgd3JpdGUoICIgIHtcbiIgKQogCkBAIC01MjQxLDE0ICs1MjQxLDE0IEBACiAgIHdyaXRlKCBsaW5lICkKICAgd3JpdGUoICJcbiIgKQogICB3cml0ZSggIiAgfVxuIiApCi0gIHdyaXRlKCAiI2VuZGlmIC8qIERFRklORV9QU19UQUJMRVMgKi9cbiIgKQorICB3cml0ZSggIiNlbmRpZiAvKiBERUZJTkVfUFNfVEFCTEVTX0RBVEEgKi9cbiIgKQogICB3cml0ZSggIiAgO1xuXG5cbiIgKQogCiAKIGRlZiBkdW1wX2FycmF5KCB0aGVfYXJyYXksIHdyaXRlLCBhcnJheV9uYW1lICk6CiAgICIiImR1bXBzIGEgZ2l2ZW4gZW5jb2RpbmciIiIKIAotICB3cml0ZSggIiNpZm5kZWYgIERFRklORV9QU19UQUJMRVNcbiIgKQorICB3cml0ZSggIiNpZm5kZWYgIERFRklORV9QU19UQUJMRVNfREFUQVxuIiApCiAgIHdyaXRlKCAiI2lmZGVmICBfX2NwbHVzcGx1c1xuIiApCiAgIHdyaXRlKCAnICBleHRlcm4gIkMiXG4nICkKICAgd3JpdGUoICIjZWxzZVxuIiApCkBAIC01MjU3LDcgKzUyNTcsNyBAQAogICB3cml0ZSggIiNlbmRpZlxuIiApCiAgIHdyaXRlKCAiICBjb25zdCB1bnNpZ25lZCBjaGFyICAiICsgYXJyYXlfbmFtZSArCiAgICAgICAgICAiWyIgKyByZXByKCBsZW4oIHRoZV9hcnJheSApICkgKyAiTF1cbiIgKQotICB3cml0ZSggIiNpZmRlZiAgREVGSU5FX1BTX1RBQkxFU1xuIiApCisgIHdyaXRlKCAiI2lmZGVmICBERUZJTkVfUFNfVEFCTEVTX0RBVEFcbiIgKQogICB3cml0ZSggIiAgPVxuIiApCiAgIHdyaXRlKCAiICB7XG4iICkKIApAQCAtNTI4Miw3ICs1MjgyLDcgQEAKICAgd3JpdGUoIGxpbmUgKQogICB3cml0ZSggIlxuIiApCiAgIHdyaXRlKCAiICB9XG4iICkKLSAgd3JpdGUoICIjZW5kaWYgLyogREVGSU5FX1BTX1RBQkxFUyAqL1xuIiApCisgIHdyaXRlKCAiI2VuZGlmIC8qIERFRklORV9QU19UQUJMRVNfREFUQSAqL1xuIiApCiAgIHdyaXRlKCAiICA7XG5cblxuIiApCiAKIApAQCAtNTI5Myw3ICs1MjkzLDcgQEAKICAgICBwcmludCBfX2RvY19fICUgc3lzLmFyZ3ZbMF0KICAgICBzeXMuZXhpdCggMSApCiAKLSAgZmlsZSAgPSBvcGVuKCBzeXMuYXJndlsxXSwgIndcbiIgKQorICBmaWxlICA9IG9wZW4oIHN5cy5hcmd2WzFdLCAid2IiICkKICAgd3JpdGUgPSBmaWxlLndyaXRlCiAKICAgY291bnRfc2lkID0gbGVuKCBzaWRfc3RhbmRhcmRfbmFtZXMgKQpAQCAtNTMxOCw3ICs1MzE4LDcgQEAKICAgd3JpdGUoICIvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCiAgIHdyaXRlKCAiLyogICAgUG9zdFNjcmlwdCBnbHlwaCBuYW1lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQogICB3cml0ZSggIi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKLSAgd3JpdGUoICIvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCisgIHdyaXRlKCAiLyogIENvcHlyaWdodCAyMDA1LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiIgKQogICB3cml0ZSggIi8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovXG4iICkKICAgd3JpdGUoICIvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuIiApCiAgIHdyaXRlKCAiLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi9cbiIgKQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3VwZGF0ZS1jb3B5cmlnaHQteWVhciBiL3NyYy90b29scy91cGRhdGUtY29weXJpZ2h0LXllYXIKaW5kZXggNGIwNGJmYy4uOTM0ZjExYyAxMDA3NTUKLS0tIGEvc3JjL3Rvb2xzL3VwZGF0ZS1jb3B5cmlnaHQteWVhcgorKysgYi9zcmMvdG9vbHMvdXBkYXRlLWNvcHlyaWdodC15ZWFyCkBAIC0yLDcgKzIsNyBAQAogICAmIGV2YWwgJ2V4ZWMgcGVybCAtd1MgLWkgIiQwIiAkYXJndjpxJwogICAgIGlmIDA7CiAKLSMgQ29weXJpZ2h0IDIwMTUtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAxNS0yMDE4IGJ5CiAjIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL0phbWZpbGUgYi9zcmMvdHJ1ZXR5cGUvSmFtZmlsZQppbmRleCAyMmQ0MDZjLi5lMzIxZmJhIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvSmFtZmlsZQorKysgYi9zcmMvdHJ1ZXR5cGUvSmFtZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgRnJlZVR5cGUgMiBzcmMvdHJ1ZXR5cGUgSmFtZmlsZQogIwotIyBDb3B5cmlnaHQgMjAwMS0yMDE3IGJ5CisjIENvcHlyaWdodCAyMDAxLTIwMTggYnkKICMgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL21vZHVsZS5tayBiL3NyYy90cnVldHlwZS9tb2R1bGUubWsKaW5kZXggNTYzYzU4NC4uMTZiYzljOCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL21vZHVsZS5taworKysgYi9zcmMvdHJ1ZXR5cGUvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS9ydWxlcy5tayBiL3NyYy90cnVldHlwZS9ydWxlcy5tawppbmRleCBhZDNkMDA3Li5lMTYxMTNmIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvcnVsZXMubWsKKysrIGIvc3JjL3RydWV0eXBlL3J1bGVzLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDE5OTYtMjAxNyBieQorIyBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90cnVldHlwZS5jIGIvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKaW5kZXggNDg2NjEwMy4uNDg0MzcwOSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKKysrIGIvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgVHJ1ZVR5cGUgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDIyICsxNywxNiBAQAogCiAKICNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAotCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlICJ0dHBpYy5jIgorCiAjaW5jbHVkZSAidHRkcml2ZXIuYyIgICAvKiBkcml2ZXIgaW50ZXJmYWNlICAgICovCi0jaW5jbHVkZSAidHRwbG9hZC5jIiAgICAvKiB0YWJsZXMgbG9hZGVyICAgICAgICovCiAjaW5jbHVkZSAidHRnbG9hZC5jIiAgICAvKiBnbHlwaCBsb2FkZXIgICAgICAgICovCi0jaW5jbHVkZSAidHRvYmpzLmMiICAgICAvKiBvYmplY3QgbWFuYWdlciAgICAgICovCi0KLSNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKLSNpbmNsdWRlICJ0dGludGVycC5jIgotI2luY2x1ZGUgInR0c3VicGl4LmMiCi0jZW5kaWYKLQotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKICNpbmNsdWRlICJ0dGd4dmFyLmMiICAgIC8qIGd4IGRpc3RvcnRhYmxlIGZvbnQgKi8KLSNlbmRpZgorI2luY2x1ZGUgInR0aW50ZXJwLmMiCisjaW5jbHVkZSAidHRvYmpzLmMiICAgICAvKiBvYmplY3QgbWFuYWdlciAgICAgICovCisjaW5jbHVkZSAidHRwaWMuYyIKKyNpbmNsdWRlICJ0dHBsb2FkLmMiICAgIC8qIHRhYmxlcyBsb2FkZXIgICAgICAgKi8KKyNpbmNsdWRlICJ0dHN1YnBpeC5jIgogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMgYi9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYwppbmRleCA2ZjliNzQ2Li44MjBjYWZiIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBmb250IGRyaXZlciBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgRlRfU0VSVklDRV9UUlVFVFlQRV9FTkdJTkVfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9UUlVFVFlQRV9HTFlGX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUFJPUEVSVElFU19ICi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9EUklWRVJfSAorI2luY2x1ZGUgRlRfRFJJVkVSX0gKIAogI2luY2x1ZGUgInR0ZHJpdmVyLmgiCiAjaW5jbHVkZSAidHRnbG9hZC5oIgpAQCAtMjMzLDggKzIzMyw4IEBACiAgICAgewogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKICAgICAgIC8qIG5vIGZhc3QgcmV0cmlldmFsIGZvciBibGVuZGVkIE1NIGZvbnRzIHdpdGhvdXQgVlZBUiB0YWJsZSAqLwotICAgICAgaWYgKCAhZmFjZS0+aXNfZGVmYXVsdF9pbnN0YW5jZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmIFRUX0ZBQ0VfRkxBR19WQVJfVkFEVkFOQ0UgKSApCisgICAgICBpZiAoICggRlRfSVNfTkFNRURfSU5TVEFOQ0UoIHR0ZmFjZSApIHx8IEZUX0lTX1ZBUklBVElPTiggdHRmYWNlICkgKSAmJgorICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmIFRUX0ZBQ0VfRkxBR19WQVJfVkFEVkFOQ0UgKSAgICAgICAgKQogICAgICAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwogI2VuZGlmCiAKQEAgLTI1Myw4ICsyNTMsOCBAQAogICAgIHsKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAgICAgICAvKiBubyBmYXN0IHJldHJpZXZhbCBmb3IgYmxlbmRlZCBNTSBmb250cyB3aXRob3V0IEhWQVIgdGFibGUgKi8KLSAgICAgIGlmICggIWZhY2UtPmlzX2RlZmF1bHRfaW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgJiBUVF9GQUNFX0ZMQUdfVkFSX0hBRFZBTkNFICkgKQorICAgICAgaWYgKCAoIEZUX0lTX05BTUVEX0lOU1RBTkNFKCB0dGZhY2UgKSB8fCBGVF9JU19WQVJJQVRJT04oIHR0ZmFjZSApICkgJiYKKyAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgJiBUVF9GQUNFX0ZMQUdfVkFSX0hBRFZBTkNFICkgICAgICAgICkKICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKICNlbmRpZgogCkBAIC0zMDgsMTEgKzMwOCwxMyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgU0ZOVF9TZXJ2aWNlICAgICAgc2ZudCAgICA9IChTRk5UX1NlcnZpY2UpdHRmYWNlLT5zZm50OwotICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyA9ICZzaXplLT5tZXRyaWNzOworICAgICAgU0ZOVF9TZXJ2aWNlICAgICAgc2ZudCAgICAgICAgID0gKFNGTlRfU2VydmljZSl0dGZhY2UtPnNmbnQ7CisgICAgICBGVF9TaXplX01ldHJpY3MqICBzaXplX21ldHJpY3MgPSAmc2l6ZS0+bWV0cmljczsKIAogCi0gICAgICBlcnJvciA9IHNmbnQtPmxvYWRfc3RyaWtlX21ldHJpY3MoIHR0ZmFjZSwgc3RyaWtlX2luZGV4LCBtZXRyaWNzICk7CisgICAgICBlcnJvciA9IHNmbnQtPmxvYWRfc3RyaWtlX21ldHJpY3MoIHR0ZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICB0dHNpemUtPnN0cmlrZV9pbmRleCA9IDB4RkZGRkZGRkZVTDsKICAgICB9CkBAIC0zNTQsMTUgKzM1NiwxNiBAQAogCiAgICAgaWYgKCBGVF9JU19TQ0FMQUJMRSggc2l6ZS0+ZmFjZSApICkKICAgICB7Ci0gICAgICBlcnJvciAgICAgICAgICAgICAgICA9IHR0X3NpemVfcmVzZXQoIHR0c2l6ZSwgMCApOwotICAgICAgdHRzaXplLT5yb290Lm1ldHJpY3MgPSB0dHNpemUtPm1ldHJpY3M7CisgICAgICBlcnJvciA9IHR0X3NpemVfcmVzZXQoIHR0c2l6ZSwgMCApOwogCiAjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiAgICAgICAvKiBmb3IgdGhlIGBNUFMnIGJ5dGVjb2RlIGluc3RydWN0aW9uIHdlIG5lZWQgdGhlIHBvaW50IHNpemUgKi8KKyAgICAgIGlmICggIWVycm9yICkKICAgICAgIHsKLSAgICAgICAgRlRfVUludCAgcmVzb2x1dGlvbiA9IHR0c2l6ZS0+bWV0cmljcy54X3BwZW0gPiB0dHNpemUtPm1ldHJpY3MueV9wcGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVxLT5ob3JpUmVzb2x1dGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlcS0+dmVydFJlc29sdXRpb247CisgICAgICAgIEZUX1VJbnQgIHJlc29sdXRpb24gPQorICAgICAgICAgICAgICAgICAgIHR0c2l6ZS0+bWV0cmljcy0+eF9wcGVtID4gdHRzaXplLT5tZXRyaWNzLT55X3BwZW0KKyAgICAgICAgICAgICAgICAgICAgID8gcmVxLT5ob3JpUmVzb2x1dGlvbgorICAgICAgICAgICAgICAgICAgICAgOiByZXEtPnZlcnRSZXNvbHV0aW9uOwogCiAKICAgICAgICAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIHJlc29sdXRpb24gdmFsdWUsIGFzc3VtZSA3MmRwaSAqLwpAQCAtNDU2LDYgKzQ1OSwxMSBAQAogICAgICAgICBsb2FkX2ZsYWdzIHw9IEZUX0xPQURfTk9fSElOVElORzsKICAgICB9CiAKKyAgICAvKiB1c2UgaGludGVkIG1ldHJpY3Mgb25seSBpZiB3ZSBsb2FkIGEgZ2x5cGggd2l0aCBoaW50aW5nICovCisgICAgc2l6ZS0+bWV0cmljcyA9ICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fSElOVElORyApCisgICAgICAgICAgICAgICAgICAgICAgPyAmdHRzaXplLT5tZXRyaWNzCisgICAgICAgICAgICAgICAgICAgICAgOiAmc2l6ZS0+aGludGVkX21ldHJpY3M7CisKICAgICAvKiBub3cgbG9hZCB0aGUgZ2x5cGggb3V0bGluZSBpZiBuZWNlc3NhcnkgKi8KICAgICBlcnJvciA9IFRUX0xvYWRfR2x5cGgoIHNpemUsIHNsb3QsIGdseXBoX2luZGV4LCBsb2FkX2ZsYWdzICk7CiAKQEAgLTQ5MCw2ICs0OTgsNyBAQAogICAgIChGVF9HZXRfTU1fVmFyX0Z1bmMpICAgIFRUX0dldF9NTV9WYXIsICAgICAgICAgIC8qIGdldF9tbV92YXIgICAgICovCiAgICAgKEZUX1NldF9WYXJfRGVzaWduX0Z1bmMpVFRfU2V0X1Zhcl9EZXNpZ24sICAgICAgLyogc2V0X3Zhcl9kZXNpZ24gKi8KICAgICAoRlRfR2V0X1Zhcl9EZXNpZ25fRnVuYylUVF9HZXRfVmFyX0Rlc2lnbiwgICAgICAvKiBnZXRfdmFyX2Rlc2lnbiAqLworICAgIChGVF9TZXRfSW5zdGFuY2VfRnVuYykgIFRUX1NldF9OYW1lZF9JbnN0YW5jZSwgIC8qIHNldF9pbnN0YW5jZSAgICovCiAKICAgICAoRlRfR2V0X1Zhcl9CbGVuZF9GdW5jKSB0dF9nZXRfdmFyX2JsZW5kLCAgICAgICAvKiBnZXRfdmFyX2JsZW5kICAqLwogICAgIChGVF9Eb25lX0JsZW5kX0Z1bmMpICAgIHR0X2RvbmVfYmxlbmQgICAgICAgICAgIC8qIGRvbmVfYmxlbmQgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRkcml2ZXIuaCBiL3NyYy90cnVldHlwZS90dGRyaXZlci5oCmluZGV4IDNiY2JhN2YuLjcwN2FhNjggMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGRyaXZlci5oCisrKyBiL3NyYy90cnVldHlwZS90dGRyaXZlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgVHJ1ZVR5cGUgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaCBiL3NyYy90cnVldHlwZS90dGVycm9ycy5oCmluZGV4IGE0OWYyMDUuLjg4YmNhM2EgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGVycm9ycy5oCisrKyBiL3NyYy90cnVldHlwZS90dGVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jIGIvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYwppbmRleCAwZmRhYTg1Li4zMmVkMzRhIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCisrKyBiL3NyYy90cnVldHlwZS90dGdsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE4LDEyICsxOCwxMyBAQAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKKyNpbmNsdWRlIEZUX0NPTkZJR19DT05GSUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0ZOVF9ICiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUdTX0gKICNpbmNsdWRlIEZUX09VVExJTkVfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfRFJJVkVSX0gKKyNpbmNsdWRlIEZUX0RSSVZFUl9ICiAjaW5jbHVkZSBGVF9MSVNUX0gKIAogI2luY2x1ZGUgInR0Z2xvYWQuaCIKQEAgLTg2LDcgKzg3LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBSZXR1cm4gdGhlIHZlcnRpY2FsIG1ldHJpY3MgaW4gZm9udCB1bml0cyBmb3IgYSBnaXZlbiBnbHlwaC4gICAgICAgICAgKi8KLSAgLyogU2VlIG1hY3JvIGBUVF9MT0FERVJfU0VUX1BQJyBiZWxvdyBmb3IgZXhwbGFuYXRpb25zLiAgICAgICAgICAgICAgICAgICovCisgIC8qIFNlZSBmdW5jdGlvbiBgdHRfbG9hZGVyX3NldF9wcCcgYmVsb3cgZm9yIGV4cGxhbmF0aW9ucy4gICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCB2b2lkICkKICAgVFRfR2V0X1ZNZXRyaWNzKCBUVF9GYWNlICAgICBmYWNlLApAQCAtMTYyLDcgKzE2Myw3IEBACiAgICAgICAvKiBUaGlzIG1heSBub3QgYmUgdGhlIHJpZ2h0IHBsYWNlIGZvciB0aGlzLCBidXQgaXQgd29ya3MuLi4gICovCiAgICAgICAvKiBOb3RlIHRoYXQgd2UgaGF2ZSB0byB1bmNvbmRpdGlvbmFsbHkgbG9hZCB0aGUgdHdlYWtzIHNpbmNlICovCiAgICAgICAvKiBpdCBpcyBwb3NzaWJsZSB0aGF0IGdseXBocyBpbmRpdmlkdWFsbHkgc3dpdGNoIENsZWFyVHlwZSdzICovCi0gICAgICAvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlIG9uIGFuZCBvZmYuICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUgb24gYW5kIG9mZi4gICAgICAgICAgICAgICAgICAgICovCiAgICAgICBzcGhfc2V0X3R3ZWFrcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOwogICAgIH0KICNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwpAQCAtMTk0LDM5ICsxOTUsMzkgQEAKICAgICBpZiAoIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBmYWNlLT5yb290LmludGVybmFsLT5pbmNyZW1lbnRhbF9pbnRlcmZhY2UtPmZ1bmNzLT5nZXRfZ2x5cGhfbWV0cmljcyApCiAgICAgewotICAgICAgRlRfSW5jcmVtZW50YWxfTWV0cmljc1JlYyAgbWV0cmljczsKKyAgICAgIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMgIGluY3JfbWV0cmljczsKICAgICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgICAgIGVycm9yOwogCiAKLSAgICAgIG1ldHJpY3MuYmVhcmluZ194ID0gbG9hZGVyLT5sZWZ0X2JlYXJpbmc7Ci0gICAgICBtZXRyaWNzLmJlYXJpbmdfeSA9IDA7Ci0gICAgICBtZXRyaWNzLmFkdmFuY2UgICA9IGxvYWRlci0+YWR2YW5jZTsKLSAgICAgIG1ldHJpY3MuYWR2YW5jZV92ID0gMDsKKyAgICAgIGluY3JfbWV0cmljcy5iZWFyaW5nX3ggPSBsb2FkZXItPmxlZnRfYmVhcmluZzsKKyAgICAgIGluY3JfbWV0cmljcy5iZWFyaW5nX3kgPSAwOworICAgICAgaW5jcl9tZXRyaWNzLmFkdmFuY2UgICA9IGxvYWRlci0+YWR2YW5jZTsKKyAgICAgIGluY3JfbWV0cmljcy5hZHZhbmNlX3YgPSAwOwogCiAgICAgICBlcnJvciA9IGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmdldF9nbHlwaF9tZXRyaWNzKAogICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+b2JqZWN0LAotICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCBGQUxTRSwgJm1ldHJpY3MgKTsKKyAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgRkFMU0UsICZpbmNyX21ldHJpY3MgKTsKICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIGxlZnRfYmVhcmluZyAgPSAoRlRfU2hvcnQpbWV0cmljcy5iZWFyaW5nX3g7Ci0gICAgICBhZHZhbmNlX3dpZHRoID0gKEZUX1VTaG9ydCltZXRyaWNzLmFkdmFuY2U7CisgICAgICBsZWZ0X2JlYXJpbmcgID0gKEZUX1Nob3J0KWluY3JfbWV0cmljcy5iZWFyaW5nX3g7CisgICAgICBhZHZhbmNlX3dpZHRoID0gKEZUX1VTaG9ydClpbmNyX21ldHJpY3MuYWR2YW5jZTsKIAogI2lmIDAKIAogICAgICAgLyogR1dXOiBEbyBJIGRvIHRoZSBzYW1lIGZvciB2ZXJ0aWNhbCBtZXRyaWNzPyAqLwotICAgICAgbWV0cmljcy5iZWFyaW5nX3ggPSAwOwotICAgICAgbWV0cmljcy5iZWFyaW5nX3kgPSBsb2FkZXItPnRvcF9iZWFyaW5nOwotICAgICAgbWV0cmljcy5hZHZhbmNlICAgPSBsb2FkZXItPnZhZHZhbmNlOworICAgICAgaW5jcl9tZXRyaWNzLmJlYXJpbmdfeCA9IDA7CisgICAgICBpbmNyX21ldHJpY3MuYmVhcmluZ195ID0gbG9hZGVyLT50b3BfYmVhcmluZzsKKyAgICAgIGluY3JfbWV0cmljcy5hZHZhbmNlICAgPSBsb2FkZXItPnZhZHZhbmNlOwogCiAgICAgICBlcnJvciA9IGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+ZnVuY3MtPmdldF9nbHlwaF9tZXRyaWNzKAogICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZS0+b2JqZWN0LAotICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCBUUlVFLCAmbWV0cmljcyApOworICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCBUUlVFLCAmaW5jcl9tZXRyaWNzICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICB0b3BfYmVhcmluZyAgICA9IChGVF9TaG9ydCltZXRyaWNzLmJlYXJpbmdfeTsKLSAgICAgIGFkdmFuY2VfaGVpZ2h0ID0gKEZUX1VTaG9ydCltZXRyaWNzLmFkdmFuY2U7CisgICAgICB0b3BfYmVhcmluZyAgICA9IChGVF9TaG9ydClpbmNyX21ldHJpY3MuYmVhcmluZ195OworICAgICAgYWR2YW5jZV9oZWlnaHQgPSAoRlRfVVNob3J0KWluY3JfbWV0cmljcy5hZHZhbmNlOwogCiAjZW5kaWYgLyogMCAqLwogCkBAIC0zMzIsNyArMzMzLDYgQEAKICAgICBGVF9PdXRsaW5lKiAgICAgb3V0bGluZTsKICAgICBGVF9VU2hvcnQgICAgICAgbl9pbnM7CiAgICAgRlRfSW50ICAgICAgICAgIG5fcG9pbnRzOwotICAgIEZUX1VMb25nICAgICAgICB0bXA7CiAKICAgICBGVF9CeXRlICAgICAgICAgKmZsYWcsICpmbGFnX2xpbWl0OwogICAgIEZUX0J5dGUgICAgICAgICBjLCBjb3VudDsKQEAgLTQwMiw2ICs0MDIsOSBAQAogCiAgICAgaWYgKCBJU19ISU5URUQoIGxvYWQtPmxvYWRfZmxhZ3MgKSApCiAgICAgeworICAgICAgRlRfVUxvbmcgIHRtcDsKKworCiAgICAgICAvKiBjaGVjayBpbnN0cnVjdGlvbnMgc2l6ZSAqLwogICAgICAgaWYgKCAoIGxpbWl0IC0gcCApIDwgbl9pbnMgKQogICAgICAgewpAQCAtNjYxLDcgKzY2NCw1MiBAQAogICAgIH0gd2hpbGUgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBNT1JFX0NPTVBPTkVOVFMgKTsKIAogICAgIGdsb2FkZXItPmN1cnJlbnQubnVtX3N1YmdseXBocyA9IG51bV9zdWJnbHlwaHM7Ci0gICAgRlRfVFJBQ0U1KCggIiAgJWQgY29tcG9uZW50c1xuIiwgbnVtX3N1YmdseXBocyApKTsKKyAgICBGVF9UUkFDRTUoKCAiICAlZCBjb21wb25lbnQlc1xuIiwKKyAgICAgICAgICAgICAgICBudW1fc3ViZ2x5cGhzLAorICAgICAgICAgICAgICAgIG51bV9zdWJnbHlwaHMgPiAxID8gInMiIDogIiIgKSk7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIHsKKyAgICAgIEZUX1VJbnQgIGk7CisKKworICAgICAgc3ViZ2x5cGggPSBnbG9hZGVyLT5jdXJyZW50LnN1YmdseXBoczsKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fc3ViZ2x5cGhzOyBpKysgKQorICAgICAgeworICAgICAgICBpZiAoIG51bV9zdWJnbHlwaHMgPiAxICkKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgIHN1YmdseXBoICVkOlxuIiwgaSApKTsKKworICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgZ2x5cGggaW5kZXg6ICVkXG4iLCBzdWJnbHlwaC0+aW5kZXggKSk7CisKKyAgICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMgKQorICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICBvZmZzZXQ6IHg9JWQsIHk9JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgbWF0Y2hpbmcgcG9pbnRzOiBiYXNlPSVkLCBjb21wb25lbnQ9JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPmFyZzEsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgKSk7CisKKyAgICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBXRV9IQVZFX0FfU0NBTEUgKQorICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICBzY2FsaW5nOiAlZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdWJnbHlwaC0+dHJhbnNmb3JtLnh4IC8gNjU1MzYuMCApKTsKKyAgICAgICAgZWxzZSBpZiAoIHN1YmdseXBoLT5mbGFncyAmIFdFX0hBVkVfQU5fWFlfU0NBTEUgKQorICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICBzY2FsaW5nOiB4PSVmLCB5PSVmXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHN1YmdseXBoLT50cmFuc2Zvcm0ueHggLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICAgIHN1YmdseXBoLT50cmFuc2Zvcm0ueXkgLyA2NTUzNi4wICkpOworICAgICAgICBlbHNlIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgV0VfSEFWRV9BXzJYMiApCisgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgIHNjYWxpbmc6IHh4PSVmLCB5eD0lZlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICB4eT0lZiwgeXk9JWZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eCAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS55eCAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS54eSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgICAgc3ViZ2x5cGgtPnRyYW5zZm9ybS55eSAvIDY1NTM2LjAgKSk7CisKKyAgICAgICAgc3ViZ2x5cGgrKzsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KIAogI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgogCkBAIC03NTMsNyArODAxLDcgQEAKICAgICB7CiAgICAgICBGVF9UUkFDRTEoKCAiVFRfSGludF9HbHlwaDogdG9vIGxvbmcgaW5zdHJ1Y3Rpb25zIiApKTsKICAgICAgIEZUX1RSQUNFMSgoICIgKDB4JWx4IGJ5dGUpIGlzIHRydW5jYXRlZFxuIiwKLSAgICAgICAgICAgICAgICAgbG9hZGVyLT5nbHlwaC0+Y29udHJvbF9sZW4gKSk7CisgICAgICAgICAgICAgICAgICBsb2FkZXItPmdseXBoLT5jb250cm9sX2xlbiApKTsKICAgICB9CiAgICAgbl9pbnMgPSBsb2FkZXItPmdseXBoLT5jb250cm9sX2xlbjsKIApAQCAtNzc1LDggKzgyMyw4IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBsb2FkZXItPmV4ZWMtPm1ldHJpY3MueF9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3NjYWxlOwotICAgICAgbG9hZGVyLT5leGVjLT5tZXRyaWNzLnlfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueV9zY2FsZTsKKyAgICAgIGxvYWRlci0+ZXhlYy0+bWV0cmljcy54X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLT54X3NjYWxlOworICAgICAgbG9hZGVyLT5leGVjLT5tZXRyaWNzLnlfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MtPnlfc2NhbGU7CiAgICAgfQogI2VuZGlmCiAKQEAgLTgxOCwxMSArODY2LDExIEBACiAjZW5kaWYKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCi0gICAgLyogU2F2ZSBwb3NzaWJseSBtb2RpZmllZCBnbHlwaCBwaGFudG9tIHBvaW50cyB1bmxlc3MgaW4gdjQwIGJhY2t3YXJkcyAqLworICAgIC8qIFNhdmUgcG9zc2libHkgbW9kaWZpZWQgZ2x5cGggcGhhbnRvbSBwb2ludHMgdW5sZXNzIGluIHY0MCBiYWNrd2FyZCAgKi8KICAgICAvKiBjb21wYXRpYmlsaXR5IG1vZGUsIHdoZXJlIG5vIG1vdmVtZW50IG9uIHRoZSB4IGF4aXMgbWVhbnMgbm8gcmVhc29uICovCiAgICAgLyogdG8gY2hhbmdlIGJlYXJpbmdzIG9yIGFkdmFuY2Ugd2lkdGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggISggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgJiYKLSAgICAgICAgICAgICFsb2FkZXItPmV4ZWMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkgKQorICAgICAgICAgICAgbG9hZGVyLT5leGVjLT5iYWNrd2FyZF9jb21wYXRpYmlsaXR5ICkgKQogICAgIHsKICNlbmRpZgogICAgICAgbG9hZGVyLT5wcDEgPSB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSA0XTsKQEAgLTg4Niw3ICs5MzQsOCBAQAogCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogCi0gICAgaWYgKCAhbG9hZGVyLT5mYWNlLT5pc19kZWZhdWx0X2luc3RhbmNlICkKKyAgICBpZiAoIEZUX0lTX05BTUVEX0lOU1RBTkNFKCBGVF9GQUNFKCBsb2FkZXItPmZhY2UgKSApIHx8CisgICAgICAgICBGVF9JU19WQVJJQVRJT04oIEZUX0ZBQ0UoIGxvYWRlci0+ZmFjZSApICkgICAgICApCiAgICAgewogICAgICAgLyogRGVsdGFzIGFwcGx5IHRvIHRoZSB1bnNjYWxlZCBkYXRhLiAqLwogICAgICAgZXJyb3IgPSBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcyggbG9hZGVyLT5mYWNlLApAQCAtOTIzLDcgKzk3Miw3IEBACiAgICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKIAogICAgICAgRlRfU3RyaW5nKiAgZmFtaWx5ICAgICAgICAgPSBmYWNlLT5yb290LmZhbWlseV9uYW1lOwotICAgICAgRlRfVUludCAgICAgcHBlbSAgICAgICAgICAgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MueF9wcGVtOworICAgICAgRlRfVUludCAgICAgcHBlbSAgICAgICAgICAgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MtPnhfcHBlbTsKICAgICAgIEZUX1N0cmluZyogIHN0eWxlICAgICAgICAgID0gZmFjZS0+cm9vdC5zdHlsZV9uYW1lOwogICAgICAgRlRfVUludCAgICAgeF9zY2FsZV9mYWN0b3IgPSAxMDAwOwogI2VuZGlmCkBAIC05NTIsOSArMTAwMSw5IEBACiAgICAgICAgIGlmICggKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCB8fAogICAgICAgICAgICAgIHhfc2NhbGVfZmFjdG9yICE9IDEwMDAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICB7Ci0gICAgICAgICAgeF9zY2FsZSA9IEZUX011bERpdiggbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGUsCisgICAgICAgICAgeF9zY2FsZSA9IEZUX011bERpdiggbG9hZGVyLT5zaXplLT5tZXRyaWNzLT54X3NjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9Mb25nKXhfc2NhbGVfZmFjdG9yLCAxMDAwICk7Ci0gICAgICAgICAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOworICAgICAgICAgIHlfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MtPnlfc2NhbGU7CiAKICAgICAgICAgICAvKiBjb21wZW5zYXRlIGZvciBhbnkgc2NhbGluZyBieSBkZS9lbWJvbGRlbmluZzsgKi8KICAgICAgICAgICAvKiB0aGUgYW1vdW50IHdhcyBkZXRlcm1pbmVkIHZpYSBleHBlcmltZW50YXRpb24gKi8KQEAgLTk3NCw4ICsxMDIzLDggQEAKICAgICAgICAgLyogc2NhbGUgdGhlIGdseXBoICovCiAgICAgICAgIGlmICggKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICB4X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGU7Ci0gICAgICAgICAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOworICAgICAgICAgIHhfc2NhbGUgPSBsb2FkZXItPnNpemUtPm1ldHJpY3MtPnhfc2NhbGU7CisgICAgICAgICAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy0+eV9zY2FsZTsKIAogICAgICAgICAgIGRvX3NjYWxlID0gVFJVRTsKICAgICAgICAgfQpAQCAtOTg4LDkgKzEwMzcsMjQgQEAKICAgICAgICAgICB2ZWMtPnggPSBGVF9NdWxGaXgoIHZlYy0+eCwgeF9zY2FsZSApOwogICAgICAgICAgIHZlYy0+eSA9IEZUX011bEZpeCggdmVjLT55LCB5X3NjYWxlICk7CiAgICAgICAgIH0KKyAgICAgIH0KIAorI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyAgICAgIC8qIGlmIHdlIGhhdmUgYSBIVkFSIHRhYmxlLCBgcHAxJyBhbmQvb3IgYHBwMicgYXJlIGFscmVhZHkgYWRqdXN0ZWQgKi8KKyAgICAgIGlmICggISggbG9hZGVyLT5mYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmIFRUX0ZBQ0VfRkxBR19WQVJfSEFEVkFOQ0UgKSB8fAorICAgICAgICAgICAhSVNfSElOVEVEKCBsb2FkZXItPmxvYWRfZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyNlbmRpZgorICAgICAgewogICAgICAgICBsb2FkZXItPnBwMSA9IG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyAtIDRdOwogICAgICAgICBsb2FkZXItPnBwMiA9IG91dGxpbmUtPnBvaW50c1tuX3BvaW50cyAtIDNdOworICAgICAgfQorCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgICAgLyogaWYgd2UgaGF2ZSBhIFZWQVIgdGFibGUsIGBwcDMnIGFuZC9vciBgcHA0JyBhcmUgYWxyZWFkeSBhZGp1c3RlZCAqLworICAgICAgaWYgKCAhKCBsb2FkZXItPmZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICYgVFRfRkFDRV9GTEFHX1ZBUl9WQURWQU5DRSApIHx8CisgICAgICAgICAgICFJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorI2VuZGlmCisgICAgICB7CiAgICAgICAgIGxvYWRlci0+cHAzID0gb3V0bGluZS0+cG9pbnRzW25fcG9pbnRzIC0gMl07CiAgICAgICAgIGxvYWRlci0+cHA0ID0gb3V0bGluZS0+cG9pbnRzW25fcG9pbnRzIC0gMV07CiAgICAgICB9CkBAIC0xMTMzLDggKzExOTcsOCBAQAogCiAgICAgICBpZiAoICEoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSApCiAgICAgICB7Ci0gICAgICAgIEZUX0ZpeGVkICB4X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGU7Ci0gICAgICAgIEZUX0ZpeGVkICB5X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnlfc2NhbGU7CisgICAgICAgIEZUX0ZpeGVkICB4X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLT54X3NjYWxlOworICAgICAgICBGVF9GaXhlZCAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy0+eV9zY2FsZTsKIAogCiAgICAgICAgIHggPSBGVF9NdWxGaXgoIHgsIHhfc2NhbGUgKTsKQEAgLTExNDIsOCArMTIwNiwyOCBAQAogCiAgICAgICAgIGlmICggc3ViZ2x5cGgtPmZsYWdzICYgUk9VTkRfWFlfVE9fR1JJRCApCiAgICAgICAgIHsKLSAgICAgICAgICB4ID0gRlRfUElYX1JPVU5EKCB4ICk7Ci0gICAgICAgICAgeSA9IEZUX1BJWF9ST1VORCggeSApOworICAgICAgICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gbG9hZGVyLT5mYWNlOworICAgICAgICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApOworCisKKyAgICAgICAgICBpZiAoIElTX0hJTlRFRCggbG9hZGVyLT5sb2FkX2ZsYWdzICkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBXZSByb3VuZCB0aGUgaG9yaXpvbnRhbCBvZmZzZXQgb25seSBpZiB0aGVyZSBpcyBoaW50aW5nIGFsb25nCisgICAgICAgICAgICAgKiB0aGUgeCBheGlzOyB0aGlzIGNvcnJlc3BvbmRzIHRvIGludGVnZXIgYWR2YW5jZSB3aWR0aCB2YWx1ZXMuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVGhlb3JldGljYWxseSwgYSBnbHlwaCdzIGJ5dGVjb2RlIGNhbiB0b2dnbGUgQ2xlYXJUeXBlJ3MKKyAgICAgICAgICAgICAqIGBiYWNrd2FyZCBjb21wYXRpYmlsaXR5JyBtb2RlLCB3aGljaCB3b3VsZCBhbGxvdyBtb2RpZmljYXRpb24KKyAgICAgICAgICAgICAqIG9mIHRoZSBhZHZhbmNlIHdpZHRoLiAgSW4gcmVhbGl0eSwgaG93ZXZlciwgYXBwbGljYXRpb25zCisgICAgICAgICAgICAgKiBuZWl0aGVyIGFsbG93IG5vciBleHBlY3QgbW9kaWZpZWQgYWR2YW5jZSB3aWR0aHMgaWYgc3ViLXBpeGVsCisgICAgICAgICAgICAgKiByZW5kZXJpbmcgaXMgYWN0aXZlLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNSApCisgICAgICAgICAgICAgIHggPSBGVF9QSVhfUk9VTkQoIHggKTsKKworICAgICAgICAgICAgeSA9IEZUX1BJWF9ST1VORCggeSApOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTEzNTYsNiArMTQ0MCw3IEBACiAgICAgVFRfRHJpdmVyIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGxvYWRlci0+ZmFjZSApOwogI2VuZGlmCiAKKwogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCiAgICAgewpAQCAtMTM5Miw3ICsxNDc3LDcgQEAKICAgLyogYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIHJldHJpZXZlIGktdGggbm9kZSBmcm9tIGdpdmVuIEZUX0xpc3QgKi8KICAgc3RhdGljIEZUX0xpc3ROb2RlCiAgIGZ0X2xpc3RfZ2V0X25vZGVfYXQoIEZUX0xpc3QgIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGluZGV4ICkKKyAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgaWR4ICkKICAgewogICAgIEZUX0xpc3ROb2RlICBjdXI7CiAKQEAgLTE0MDIsMTAgKzE0ODcsMTAgQEAKIAogICAgIGZvciAoIGN1ciA9IGxpc3QtPmhlYWQ7IGN1cjsgY3VyID0gY3VyLT5uZXh0ICkKICAgICB7Ci0gICAgICBpZiAoICFpbmRleCApCisgICAgICBpZiAoICFpZHggKQogICAgICAgICByZXR1cm4gY3VyOwogCi0gICAgICBpbmRleC0tOworICAgICAgaWR4LS07CiAgICAgfQogCiAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNDY3LDggKzE1NTIsOCBAQAogCiAgICAgaWYgKCAoIGxvYWRlci0+bG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwICkKICAgICB7Ci0gICAgICB4X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnhfc2NhbGU7Ci0gICAgICB5X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLnlfc2NhbGU7CisgICAgICB4X3NjYWxlID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLT54X3NjYWxlOworICAgICAgeV9zY2FsZSA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy0+eV9zY2FsZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTE1NzQsNyArMTY1OSw4IEBACiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAKLSAgICAgIGlmICggIWxvYWRlci0+ZmFjZS0+aXNfZGVmYXVsdF9pbnN0YW5jZSApCisgICAgICBpZiAoIEZUX0lTX05BTUVEX0lOU1RBTkNFKCBGVF9GQUNFKCBmYWNlICkgKSB8fAorICAgICAgICAgICBGVF9JU19WQVJJQVRJT04oIEZUX0ZBQ0UoIGZhY2UgKSApICAgICAgKQogICAgICAgewogICAgICAgICAvKiBhIHNtYWxsIG91dGxpbmUgc3RydWN0dXJlIHdpdGggZm91ciBlbGVtZW50cyBmb3IgKi8KICAgICAgICAgLyogY29tbXVuaWNhdGlvbiB3aXRoIGBUVF9WYXJ5X0FwcGx5X0dseXBoX0RlbHRhcycgICovCkBAIC0xNjgzLDcgKzE3NjksNyBAQAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogICAgIC8qIG90aGVyd2lzZSwgbG9hZCBhIGNvbXBvc2l0ZSEgKi8KLSAgICBlbHNlIGlmICggbG9hZGVyLT5uX2NvbnRvdXJzID09IC0xICkKKyAgICBlbHNlIGlmICggbG9hZGVyLT5uX2NvbnRvdXJzIDwgMCApCiAgICAgewogICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKIApAQCAtMTY5NCw2ICsxNzgwLDkgQEAKICAgICAgIEZUX0xpc3ROb2RlICBub2RlLCBub2RlMjsKIAogCisgICAgICAvKiBub3JtYWxpemUgdGhlIGBuX2NvbnRvdXJzJyB2YWx1ZSAqLworICAgICAgbG9hZGVyLT5uX2NvbnRvdXJzID0gLTE7CisKICAgICAgIC8qCiAgICAgICAgKiBXZSBzdG9yZSB0aGUgZ2x5cGggaW5kZXggZGlyZWN0bHkgaW4gdGhlIGBub2RlLT5kYXRhJyBwb2ludGVyLAogICAgICAgICogZm9sbG93aW5nIHRoZSBnbGliIHNvbHV0aW9uIChjZi4gbWFjcm8gYEdVSU5UX1RPX1BPSU5URVInKSB3aXRoIGEKQEAgLTE3MDUsMTEgKzE3OTQsMTEgQEAKICAgICAgIC8qIGNsZWFyIHRoZSBub2RlcyBmaWxsZWQgYnkgc2libGluZyBjaGFpbnMgKi8KICAgICAgIG5vZGUgPSBmdF9saXN0X2dldF9ub2RlX2F0KCAmbG9hZGVyLT5jb21wb3NpdGVzLCByZWN1cnNlX2NvdW50ICk7CiAgICAgICBmb3IgKCBub2RlMiA9IG5vZGU7IG5vZGUyOyBub2RlMiA9IG5vZGUyLT5uZXh0ICkKLSAgICAgICAgbm9kZTItPmRhdGEgPSAodm9pZCopVUxPTkdfTUFYOworICAgICAgICBub2RlMi0+ZGF0YSA9ICh2b2lkKilGVF9VTE9OR19NQVg7CiAKICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgYWxyZWFkeSBoYXZlIGEgY29tcG9zaXRlIGdseXBoIHdpdGggdGhpcyBpbmRleCAqLwogICAgICAgaWYgKCBGVF9MaXN0X0ZpbmQoICZsb2FkZXItPmNvbXBvc2l0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKSh1bnNpZ25lZCBsb25nKWdseXBoX2luZGV4ICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJTlRfVE9fUE9JTlRFUiggZ2x5cGhfaW5kZXggKSApICkKICAgICAgIHsKICAgICAgICAgRlRfVFJBQ0UxKCggIlRUX0xvYWRfQ29tcG9zaXRlX0dseXBoOiIKICAgICAgICAgICAgICAgICAgICAgIiBpbmZpbml0ZSByZWN1cnNpb24gZGV0ZWN0ZWRcbiIgKSk7CkBAIC0xNzE4LDEzICsxODA3LDEzIEBACiAgICAgICB9CiAKICAgICAgIGVsc2UgaWYgKCBub2RlICkKLSAgICAgICAgbm9kZS0+ZGF0YSA9ICh2b2lkKikodW5zaWduZWQgbG9uZylnbHlwaF9pbmRleDsKKyAgICAgICAgbm9kZS0+ZGF0YSA9IEZUX1VJTlRfVE9fUE9JTlRFUiggZ2x5cGhfaW5kZXggKTsKIAogICAgICAgZWxzZQogICAgICAgewogICAgICAgICBpZiAoIEZUX05FVyggbm9kZSApICkKICAgICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICAgIG5vZGUtPmRhdGEgPSAodm9pZCopKHVuc2lnbmVkIGxvbmcpZ2x5cGhfaW5kZXg7CisgICAgICAgIG5vZGUtPmRhdGEgPSBGVF9VSU5UX1RPX1BPSU5URVIoIGdseXBoX2luZGV4ICk7CiAgICAgICAgIEZUX0xpc3RfQWRkKCAmbG9hZGVyLT5jb21wb3NpdGVzLCBub2RlICk7CiAgICAgICB9CiAKQEAgLTE3NDUsNyArMTgzNCw4IEBACiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCiAKLSAgICAgIGlmICggIWZhY2UtPmlzX2RlZmF1bHRfaW5zdGFuY2UgKQorICAgICAgaWYgKCBGVF9JU19OQU1FRF9JTlNUQU5DRSggRlRfRkFDRSggZmFjZSApICkgfHwKKyAgICAgICAgICAgRlRfSVNfVkFSSUFUSU9OKCBGVF9GQUNFKCBmYWNlICkgKSAgICAgICkKICAgICAgIHsKICAgICAgICAgc2hvcnQgICAgICAgIGksIGxpbWl0OwogICAgICAgICBGVF9TdWJHbHlwaCAgc3ViZ2x5cGg7CkBAIC0xOTg4LDEyICsyMDc4LDYgQEAKICAgICAgICAgfQogICAgICAgfQogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLyogaW52YWxpZCBjb21wb3NpdGUgY291bnQgKG5lZ2F0aXZlIGJ1dCBub3QgLTEpICovCi0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX091dGxpbmUgKTsKLSAgICAgIGdvdG8gRXhpdDsKLSAgICB9CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjAzNSw3ICsyMTE5LDcgQEAKIAogICAgIHlfc2NhbGUgPSAweDEwMDAwTDsKICAgICBpZiAoICggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSApID09IDAgKQotICAgICAgeV9zY2FsZSA9IHNpemUtPnJvb3QubWV0cmljcy55X3NjYWxlOworICAgICAgeV9zY2FsZSA9IHNpemUtPm1ldHJpY3MtPnlfc2NhbGU7CiAKICAgICBpZiAoIGdseXBoLT5mb3JtYXQgIT0gRlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSApCiAgICAgICBGVF9PdXRsaW5lX0dldF9DQm94KCAmZ2x5cGgtPm91dGxpbmUsICZiYm94ICk7CkBAIC0yMDUwLDI0ICsyMTM0LDI0IEBACiAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gYmJveC55TWF4OwogICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IGxvYWRlci0+cHAyLnggLSBsb2FkZXItPnBwMS54OwogCi0gICAgLyogQWRqdXN0IGFkdmFuY2Ugd2lkdGggdG8gdGhlIHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgaGRteCB0YWJsZSAgICAqLwotICAgIC8qIHVubGVzcyBGVF9MT0FEX0NPTVBVVEVfTUVUUklDUyBpcyBzZXQgb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAvKiBtb2RlIG9mIHRoZSB2NDAgaW50ZXJwcmV0ZXIgaXMgYWN0aXZlLiAgU2VlIGB0dGludGVycC5oJyBmb3IgICAgICovCi0gICAgLyogZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEFkanVzdCBhZHZhbmNlIHdpZHRoIHRvIHRoZSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGhkbXggdGFibGUgICAqLworICAgIC8qIHVubGVzcyBGVF9MT0FEX0NPTVBVVEVfTUVUUklDUyBpcyBzZXQgb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworICAgIC8qIG1vZGUgb2YgdGhlIHY0MCBpbnRlcnByZXRlciBpcyBhY3RpdmUuICBTZWUgYHR0aW50ZXJwLmgnIGZvciAgICAqLworICAgIC8qIGRldGFpbHMgb24gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICgKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAotICAgICAgICAgISggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgJiYKLSAgICAgICAgICAgICggbG9hZGVyLT5leGVjICYmIGxvYWRlci0+ZXhlYy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgICkgKSAmJgorICAgICAgICAgISggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgICYmCisgICAgICAgICAgICAoIGxvYWRlci0+ZXhlYyAmJiBsb2FkZXItPmV4ZWMtPmJhY2t3YXJkX2NvbXBhdGliaWxpdHkgICkgKSAmJgogI2VuZGlmCi0gICAgICAgICAhZmFjZS0+cG9zdHNjcmlwdC5pc0ZpeGVkUGl0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIElTX0hJTlRFRCggbG9hZGVyLT5sb2FkX2ZsYWdzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgISggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgKSAgICAgICAgICAgICAgICkKKyAgICAgICAgICFmYWNlLT5wb3N0c2NyaXB0LmlzRml4ZWRQaXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgISggbG9hZGVyLT5sb2FkX2ZsYWdzICYgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgKSAgICAgICAgICAgICAgKQogICAgIHsKICAgICAgIEZUX0J5dGUqICB3aWR0aHA7CiAKIAogICAgICAgd2lkdGhwID0gdHRfZmFjZV9nZXRfZGV2aWNlX21ldHJpY3MoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+cm9vdC5tZXRyaWNzLnhfcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5tZXRyaWNzLT54X3BwZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXggKTsKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCkBAIC0yMDk3LDggKzIxODEsOCBAQAogICAgIH0KIAogICAgIC8qIHNldCBnbHlwaCBkaW1lbnNpb25zICovCi0gICAgZ2x5cGgtPm1ldHJpY3Mud2lkdGggID0gYmJveC54TWF4IC0gYmJveC54TWluOwotICAgIGdseXBoLT5tZXRyaWNzLmhlaWdodCA9IGJib3gueU1heCAtIGJib3gueU1pbjsKKyAgICBnbHlwaC0+bWV0cmljcy53aWR0aCAgPSBTVUJfTE9ORyggYmJveC54TWF4LCBiYm94LnhNaW4gKTsKKyAgICBnbHlwaC0+bWV0cmljcy5oZWlnaHQgPSBTVUJfTE9ORyggYmJveC55TWF4LCBiYm94LnlNaW4gKTsKIAogICAgIC8qIE5vdyB0YWtlIGNhcmUgb2YgdmVydGljYWwgbWV0cmljcy4gIEluIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzICovCiAgICAgLyogbm8gdmVydGljYWwgaW5mb3JtYXRpb24gd2l0aGluIHRoZSBmb250IChyZWxhdGl2ZWx5IGNvbW1vbiksICAgKi8KQEAgLTIxMzQsNyArMjIxOCw4IEBACiAgICAgICAgIC8qICAgICAgIHRhYmxlIGluIHRoZSBmb250LiAgT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlICAgICAqLwogICAgICAgICAvKiAgICAgICB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgaG9yaXpvbnRhbCBoZWFkZXIuICAgICAgKi8KIAotICAgICAgICBoZWlnaHQgPSAoRlRfU2hvcnQpRlRfRGl2Rml4KCBiYm94LnlNYXggLSBiYm94LnlNaW4sCisgICAgICAgIGhlaWdodCA9IChGVF9TaG9ydClGVF9EaXZGaXgoIFNVQl9MT05HKCBiYm94LnlNYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYm94LnlNaW4gKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9zY2FsZSApOwogICAgICAgICBpZiAoIGZhY2UtPm9zMi52ZXJzaW9uICE9IDB4RkZGRlUgKQogICAgICAgICAgIGFkdmFuY2UgPSAoRlRfUG9zKSggZmFjZS0+b3MyLnNUeXBvQXNjZW5kZXIgLQpAQCAtMjE0OSw3ICsyMjM0LDcgQEAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCiAgICAgICB7CiAgICAgICAgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyogIGluY3I7Ci0gICAgICAgIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMgICAgIG1ldHJpY3M7CisgICAgICAgIEZUX0luY3JlbWVudGFsX01ldHJpY3NSZWMgICAgIGluY3JfbWV0cmljczsKICAgICAgICAgRlRfRXJyb3IgICAgICAgICAgICAgICAgICAgICAgZXJyb3I7CiAKIApAQCAtMjE1OSwxOSArMjI0NCwxOSBAQAogICAgICAgICAvKiBvdmVycmlkaW5nIG1ldHJpY3MgZm9yIHRoaXMgZ2x5cGguICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICBpZiAoIGluY3IgJiYgaW5jci0+ZnVuY3MtPmdldF9nbHlwaF9tZXRyaWNzICkKICAgICAgICAgewotICAgICAgICAgIG1ldHJpY3MuYmVhcmluZ194ID0gMDsKLSAgICAgICAgICBtZXRyaWNzLmJlYXJpbmdfeSA9IHRvcDsKLSAgICAgICAgICBtZXRyaWNzLmFkdmFuY2UgICA9IGFkdmFuY2U7CisgICAgICAgICAgaW5jcl9tZXRyaWNzLmJlYXJpbmdfeCA9IDA7CisgICAgICAgICAgaW5jcl9tZXRyaWNzLmJlYXJpbmdfeSA9IHRvcDsKKyAgICAgICAgICBpbmNyX21ldHJpY3MuYWR2YW5jZSAgID0gYWR2YW5jZTsKIAogICAgICAgICAgIGVycm9yID0gaW5jci0+ZnVuY3MtPmdldF9nbHlwaF9tZXRyaWNzKCBpbmNyLT5vYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWV0cmljcyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5jcl9tZXRyaWNzICk7CiAgICAgICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgICAgICByZXR1cm4gZXJyb3I7CiAKLSAgICAgICAgICB0b3AgICAgID0gbWV0cmljcy5iZWFyaW5nX3k7Ci0gICAgICAgICAgYWR2YW5jZSA9IG1ldHJpY3MuYWR2YW5jZTsKKyAgICAgICAgICB0b3AgICAgID0gaW5jcl9tZXRyaWNzLmJlYXJpbmdfeTsKKyAgICAgICAgICBhZHZhbmNlID0gaW5jcl9tZXRyaWNzLmFkdmFuY2U7CiAgICAgICAgIH0KICAgICAgIH0KIApAQCAtMjIxMyw3ICsyMjk4LDcgQEAKICAgICBTRk5UX1NlcnZpY2UgICAgICAgIHNmbnQ7CiAgICAgRlRfU3RyZWFtICAgICAgICAgICBzdHJlYW07CiAgICAgRlRfRXJyb3IgICAgICAgICAgICBlcnJvcjsKLSAgICBUVF9TQml0X01ldHJpY3NSZWMgIG1ldHJpY3M7CisgICAgVFRfU0JpdF9NZXRyaWNzUmVjICBzYml0X21ldHJpY3M7CiAKIAogICAgIGZhY2UgICA9IChUVF9GYWNlKWdseXBoLT5mYWNlOwpAQCAtMjIyNiwzNCArMjMxMSwzNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludClsb2FkX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaC0+Yml0bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWV0cmljcyApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2JpdF9tZXRyaWNzICk7CiAgICAgaWYgKCAhZXJyb3IgKQogICAgIHsKICAgICAgIGdseXBoLT5vdXRsaW5lLm5fcG9pbnRzICAgPSAwOwogICAgICAgZ2x5cGgtPm91dGxpbmUubl9jb250b3VycyA9IDA7CiAKLSAgICAgIGdseXBoLT5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3MpbWV0cmljcy53aWR0aCAgKiA2NDsKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhlaWdodCA9IChGVF9Qb3MpbWV0cmljcy5oZWlnaHQgKiA2NDsKKyAgICAgIGdseXBoLT5tZXRyaWNzLndpZHRoICA9IChGVF9Qb3Mpc2JpdF9tZXRyaWNzLndpZHRoICAqIDY0OworICAgICAgZ2x5cGgtPm1ldHJpY3MuaGVpZ2h0ID0gKEZUX1BvcylzYml0X21ldHJpY3MuaGVpZ2h0ICogNjQ7CiAKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQmVhcmluZ1ggKiA2NDsKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWSA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQmVhcmluZ1kgKiA2NDsKLSAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IChGVF9Qb3MpbWV0cmljcy5ob3JpQWR2YW5jZSAgKiA2NDsKKyAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IChGVF9Qb3Mpc2JpdF9tZXRyaWNzLmhvcmlCZWFyaW5nWCAqIDY0OworICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZID0gKEZUX1BvcylzYml0X21ldHJpY3MuaG9yaUJlYXJpbmdZICogNjQ7CisgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSAgPSAoRlRfUG9zKXNiaXRfbWV0cmljcy5ob3JpQWR2YW5jZSAgKiA2NDsKIAotICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdYID0gKEZUX1BvcyltZXRyaWNzLnZlcnRCZWFyaW5nWCAqIDY0OwotICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdZID0gKEZUX1BvcyltZXRyaWNzLnZlcnRCZWFyaW5nWSAqIDY0OwotICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEFkdmFuY2UgID0gKEZUX1BvcyltZXRyaWNzLnZlcnRBZHZhbmNlICAqIDY0OworICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdYID0gKEZUX1BvcylzYml0X21ldHJpY3MudmVydEJlYXJpbmdYICogNjQ7CisgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1kgPSAoRlRfUG9zKXNiaXRfbWV0cmljcy52ZXJ0QmVhcmluZ1kgKiA2NDsKKyAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRBZHZhbmNlICA9IChGVF9Qb3Mpc2JpdF9tZXRyaWNzLnZlcnRBZHZhbmNlICAqIDY0OwogCiAgICAgICBnbHlwaC0+Zm9ybWF0ID0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUDsKIAogICAgICAgaWYgKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQogICAgICAgewotICAgICAgICBnbHlwaC0+Yml0bWFwX2xlZnQgPSBtZXRyaWNzLnZlcnRCZWFyaW5nWDsKLSAgICAgICAgZ2x5cGgtPmJpdG1hcF90b3AgID0gbWV0cmljcy52ZXJ0QmVhcmluZ1k7CisgICAgICAgIGdseXBoLT5iaXRtYXBfbGVmdCA9IHNiaXRfbWV0cmljcy52ZXJ0QmVhcmluZ1g7CisgICAgICAgIGdseXBoLT5iaXRtYXBfdG9wICA9IHNiaXRfbWV0cmljcy52ZXJ0QmVhcmluZ1k7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGdseXBoLT5iaXRtYXBfbGVmdCA9IG1ldHJpY3MuaG9yaUJlYXJpbmdYOwotICAgICAgICBnbHlwaC0+Yml0bWFwX3RvcCAgPSBtZXRyaWNzLmhvcmlCZWFyaW5nWTsKKyAgICAgICAgZ2x5cGgtPmJpdG1hcF9sZWZ0ID0gc2JpdF9tZXRyaWNzLmhvcmlCZWFyaW5nWDsKKyAgICAgICAgZ2x5cGgtPmJpdG1hcF90b3AgID0gc2JpdF9tZXRyaWNzLmhvcmlCZWFyaW5nWTsKICAgICAgIH0KICAgICB9CiAKQEAgLTIyNzAsMTcgKzIzNTUsMTcgQEAKICAgICAgICAgICAgICAgICAgIEZUX0ludDMyICAgICAgbG9hZF9mbGFncywKICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgZ2x5Zl90YWJsZV9vbmx5ICkKICAgewotICAgIEZUX0Vycm9yICBlcnJvcjsKLQogICAgIFRUX0ZhY2UgICAgZmFjZTsKICAgICBGVF9TdHJlYW0gIHN0cmVhbTsKKwogI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorICAgIEZUX0Vycm9yICAgZXJyb3I7CiAgICAgRlRfQm9vbCAgICBwZWRhbnRpYyA9IEZUX0JPT0woIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX1BFREFOVElDICk7Ci0jZW5kaWYKICNpZiBkZWZpbmVkIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZIHx8IFwKICAgICBkZWZpbmVkIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCiAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCAoVFRfRmFjZSlnbHlwaC0+ZmFjZSApOwogI2VuZGlmCisjZW5kaWYKIAogCiAgICAgZmFjZSAgID0gKFRUX0ZhY2UpZ2x5cGgtPmZhY2U7CkBAIC0yMzM2LDEzICsyNDIxLDE5IEBACiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKICAgICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgKQogICAgICAgewotICAgICAgICBzdWJwaXhlbF9oaW50aW5nX2xlYW4gICA9IFRSVUU7Ci0gICAgICAgIGdyYXlzY2FsZV9jbGVhcnR5cGUgICAgID0gIUZUX0JPT0woIGxvYWRfZmxhZ3MgICAgICAgICAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX0xDRCAgICAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyAgICAgICAgICAgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MT0FEX1RBUkdFVF9MQ0RfViAgICk7Ci0gICAgICAgIGV4ZWMtPnZlcnRpY2FsX2xjZF9sZWFuID0gRlRfQk9PTCggbG9hZF9mbGFncyAgICAgICAgICAgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX0xDRF9WICk7CisgICAgICAgIHN1YnBpeGVsX2hpbnRpbmdfbGVhbiA9CisgICAgICAgICAgRlRfQk9PTCggRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CisgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTU9OTyAgICAgICAgICAgICAgICk7CisgICAgICAgIGdyYXlzY2FsZV9jbGVhcnR5cGUgPQorICAgICAgICAgIEZUX0JPT0woIHN1YnBpeGVsX2hpbnRpbmdfbGVhbiAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgISggKCBsb2FkX2ZsYWdzICAgICAgICAgJgorICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEICkgICB8fAorICAgICAgICAgICAgICAgICAgICAgICggbG9hZF9mbGFncyAgICAgICAgICAgJgorICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgKSApICk7CisgICAgICAgIGV4ZWMtPnZlcnRpY2FsX2xjZF9sZWFuID0KKyAgICAgICAgICBGVF9CT09MKCBzdWJwaXhlbF9oaW50aW5nX2xlYW4gICAgJiYKKyAgICAgICAgICAgICAgICAgICAoIGxvYWRfZmxhZ3MgICAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX0xDRF9WICkgKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKQEAgLTI2MDIsNyArMjY5Myw4IEBACiAgICAgVFRfTG9hZGVyUmVjICBsb2FkZXI7CiAKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCi0jZGVmaW5lIElTX0RFRkFVTFRfSU5TVEFOQ0UgICggKCAoVFRfRmFjZSlnbHlwaC0+ZmFjZSApLT5pc19kZWZhdWx0X2luc3RhbmNlICkKKyNkZWZpbmUgSVNfREVGQVVMVF9JTlNUQU5DRSAgKCAhKCBGVF9JU19OQU1FRF9JTlNUQU5DRSggZ2x5cGgtPmZhY2UgKSB8fCAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0lTX1ZBUklBVElPTiggZ2x5cGgtPmZhY2UgKSAgICAgICkgKQogI2Vsc2UKICNkZWZpbmUgSVNfREVGQVVMVF9JTlNUQU5DRSAgMQogI2VuZGlmCkBAIC0yNjE4LDcgKzI3MTAsNjQgQEAKICAgICAgICAgIElTX0RFRkFVTFRfSU5TVEFOQ0UgICAgICAgICAgICAgICAgICAgICApCiAgICAgewogICAgICAgZXJyb3IgPSBsb2FkX3NiaXRfaW1hZ2UoIHNpemUsIGdseXBoLCBnbHlwaF9pbmRleCwgbG9hZF9mbGFncyApOwotICAgICAgaWYgKCAhZXJyb3IgKQorICAgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yLCBNaXNzaW5nX0JpdG1hcCApICkKKyAgICAgIHsKKyAgICAgICAgLyogdGhlIGJpdG1hcCBzdHJpa2UgaXMgaW5jb21wbGV0ZSBhbmQgbWlzc2VzIHRoZSByZXF1ZXN0ZWQgZ2x5cGg7ICovCisgICAgICAgIC8qIGlmIHdlIGhhdmUgYSBiaXRtYXAtb25seSBmb250LCByZXR1cm4gYW4gZW1wdHkgZ2x5cGggICAgICAgICAgICAqLworICAgICAgICBpZiAoICFGVF9JU19TQ0FMQUJMRSggZ2x5cGgtPmZhY2UgKSApCisgICAgICAgIHsKKyAgICAgICAgICBUVF9GYWNlICAgIGZhY2UgPSAoVFRfRmFjZSlnbHlwaC0+ZmFjZTsKKyAgICAgICAgICBGVF9TaG9ydCAgIGxlZnRfYmVhcmluZyA9IDAsIHRvcF9iZWFyaW5nID0gMDsKKyAgICAgICAgICBGVF9VU2hvcnQgIGFkdmFuY2Vfd2lkdGggPSAwLCBhZHZhbmNlX2hlaWdodCA9IDA7CisKKworICAgICAgICAgIC8qIHRvIHJldHVybiBhbiBlbXB0eSBnbHlwaCwgaG93ZXZlciwgd2UgbmVlZCBtZXRyaWNzIGRhdGEgICAqLworICAgICAgICAgIC8qIGZyb20gdGhlIGBobXR4JyAob3IgYHZtdHgnKSB0YWJsZTsgdGhlIGFzc3VtcHRpb24gaXMgdGhhdCAqLworICAgICAgICAgIC8qIGVtcHR5IGdseXBocyBhcmUgbWlzc2luZyBpbnRlbnRpb25hbGx5LCByZXByZXNlbnRpbmcgICAgICAqLworICAgICAgICAgIC8qIHdoaXRlc3BhY2UgLSBub3QgaGF2aW5nIGF0IGxlYXN0IGhvcml6b250YWwgbWV0cmljcyBpcyAgICAqLworICAgICAgICAgIC8qIHRodXMgY29uc2lkZXJlZCBhbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggIWZhY2UtPmhvcnpfbWV0cmljc19zaXplICkKKyAgICAgICAgICAgIHJldHVybiBlcnJvcjsKKworICAgICAgICAgIC8qIHdlIG5vdyBjb25zdHJ1Y3QgYW4gZW1wdHkgYml0bWFwIGdseXBoICovCisgICAgICAgICAgVFRfR2V0X0hNZXRyaWNzKCBmYWNlLCBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZWZ0X2JlYXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWR2YW5jZV93aWR0aCApOworICAgICAgICAgIFRUX0dldF9WTWV0cmljcyggZmFjZSwgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRvcF9iZWFyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkdmFuY2VfaGVpZ2h0ICk7CisKKyAgICAgICAgICBnbHlwaC0+b3V0bGluZS5uX3BvaW50cyAgID0gMDsKKyAgICAgICAgICBnbHlwaC0+b3V0bGluZS5uX2NvbnRvdXJzID0gMDsKKworICAgICAgICAgIGdseXBoLT5tZXRyaWNzLndpZHRoICA9IDA7CisgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaGVpZ2h0ID0gMDsKKworICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWCA9IGxlZnRfYmVhcmluZzsKKyAgICAgICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1kgPSAwOworICAgICAgICAgIGdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlICA9IGFkdmFuY2Vfd2lkdGg7CisKKyAgICAgICAgICBnbHlwaC0+bWV0cmljcy52ZXJ0QmVhcmluZ1ggPSAwOworICAgICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRCZWFyaW5nWSA9IHRvcF9iZWFyaW5nOworICAgICAgICAgIGdseXBoLT5tZXRyaWNzLnZlcnRBZHZhbmNlICA9IGFkdmFuY2VfaGVpZ2h0OworCisgICAgICAgICAgZ2x5cGgtPmZvcm1hdCAgICAgICAgICAgID0gRlRfR0xZUEhfRk9STUFUX0JJVE1BUDsKKyAgICAgICAgICBnbHlwaC0+Yml0bWFwLnBpeGVsX21vZGUgPSBGVF9QSVhFTF9NT0RFX01PTk87CisKKyAgICAgICAgICBnbHlwaC0+Yml0bWFwX2xlZnQgPSAwOworICAgICAgICAgIGdseXBoLT5iaXRtYXBfdG9wICA9IDA7CisKKyAgICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmICggZXJyb3IgKQorICAgICAgeworICAgICAgICAvKiByZXR1cm4gZXJyb3IgaWYgZm9udCBpcyBub3Qgc2NhbGFibGUgKi8KKyAgICAgICAgaWYgKCAhRlRfSVNfU0NBTEFCTEUoIGdseXBoLT5mYWNlICkgKQorICAgICAgICAgIHJldHVybiBlcnJvcjsKKyAgICAgIH0KKyAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgaWYgKCBGVF9JU19TQ0FMQUJMRSggZ2x5cGgtPmZhY2UgKSApCiAgICAgICAgIHsKQEAgLTI2MzQsMTEgKzI3ODMsMTEgQEAKICAgICAgICAgICBpZiAoICFnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSAmJiBnbHlwaC0+bGluZWFySG9yaUFkdmFuY2UgKQogICAgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MuaG9yaUFkdmFuY2UgPQogICAgICAgICAgICAgICBGVF9NdWxGaXgoIGdseXBoLT5saW5lYXJIb3JpQWR2YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5yb290Lm1ldHJpY3MueF9zY2FsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUtPm1ldHJpY3MtPnhfc2NhbGUgKTsKICAgICAgICAgICBpZiAoICFnbHlwaC0+bWV0cmljcy52ZXJ0QWR2YW5jZSAmJiBnbHlwaC0+bGluZWFyVmVydEFkdmFuY2UgKQogICAgICAgICAgICAgZ2x5cGgtPm1ldHJpY3MudmVydEFkdmFuY2UgPQogICAgICAgICAgICAgICBGVF9NdWxGaXgoIGdseXBoLT5saW5lYXJWZXJ0QWR2YW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5yb290Lm1ldHJpY3MueV9zY2FsZSApOworICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUtPm1ldHJpY3MtPnlfc2NhbGUgKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CkBAIC0yNzM0LDcgKzI4ODMsNyBAQAogICAgIC8qIFRydWVUeXBlIGdseXBocyBhdCBhbGwgc2l6ZXMgdXNpbmcgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyLiAqLwogICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggISggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSAmJgotICAgICAgICAgc2l6ZS0+cm9vdC5tZXRyaWNzLnlfcHBlbSA8IDI0ICAgICApCisgICAgICAgICBzaXplLT5tZXRyaWNzLT55X3BwZW0gPCAyNCAgICAgICAgICkKICAgICAgIGdseXBoLT5vdXRsaW5lLmZsYWdzIHw9IEZUX09VVExJTkVfSElHSF9QUkVDSVNJT047CiAKICAgRXhpdDoKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGdsb2FkLmggYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oCmluZGV4IDFkZDZjODQuLmQyMzdjZmQgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGdsb2FkLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyBiL3NyYy90cnVldHlwZS90dGd4dmFyLmMKaW5kZXggNzljMGJiOS4uYjNlOWVjNyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdYIEZvbnQgVmFyaWF0aW9uIGxvYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcsIGFuZCBHZW9yZ2UgV2lsbGlhbXMuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02MCw4ICs2MCwxMSBAQAogCiAjZGVmaW5lIEZUX1N0cmVhbV9GVGVsbCggc3RyZWFtICkgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIChGVF9VTG9uZykoIChzdHJlYW0pLT5jdXJzb3IgLSAoc3RyZWFtKS0+YmFzZSApCi0jZGVmaW5lIEZUX1N0cmVhbV9TZWVrU2V0KCBzdHJlYW0sIG9mZiApICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggKHN0cmVhbSktPmN1cnNvciA9IChzdHJlYW0pLT5iYXNlICsgKG9mZikgKQorI2RlZmluZSBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmYgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKHN0cmVhbSktPmN1cnNvciA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICggKG9mZikgPCAoRlRfVUxvbmcpKCAoc3RyZWFtKS0+bGltaXQgLSAoc3RyZWFtKS0+YmFzZSApICkgXAorICAgICAgICAgICAgICAgICAgICAgICAgPyAoc3RyZWFtKS0+YmFzZSArIChvZmYpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICA6IChzdHJlYW0pLT5saW1pdAogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zOTIsMTQgKzM5NSwxNCBAQAogCiAKICAgLyogc29tZSBtYWNyb3Mgd2UgbmVlZCAqLwotICAjZGVmaW5lIEZUX0ZJWEVEX09ORSAgKCAoRlRfRml4ZWQpMHgxMDAwMCApCisjZGVmaW5lIEZUX0ZJWEVEX09ORSAgKCAoRlRfRml4ZWQpMHgxMDAwMCApCiAKLSAgI2RlZmluZSBGVF9mZG90MTRUb0ZpeGVkKCB4ICkgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggKEZUX0ZpeGVkKSggKEZUX1VMb25nKSh4KSA8PCAyICkgKQotICAjZGVmaW5lIEZUX2ludFRvRml4ZWQoIGkgKSAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICggKEZUX0ZpeGVkKSggKEZUX1VMb25nKShpKSA8PCAxNiApICkKLSAgI2RlZmluZSBGVF9maXhlZFRvSW50KCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAoIChGVF9TaG9ydCkoICggKEZUX1VJbnQzMikoeCkgKyAweDgwMDBVICkgPj4gMTYgKSApCisjZGVmaW5lIEZUX2Zkb3QxNFRvRml4ZWQoIHggKSAgICAgICAgICAgICAgICBcCisgICAgICAgICggKEZUX0ZpeGVkKSggKEZUX1VMb25nKSh4KSA8PCAyICkgKQorI2RlZmluZSBGVF9pbnRUb0ZpeGVkKCBpICkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCAoRlRfRml4ZWQpKCAoRlRfVUxvbmcpKGkpIDw8IDE2ICkgKQorI2RlZmluZSBGVF9maXhlZFRvSW50KCB4ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCAoRlRfU2hvcnQpKCAoIChGVF9VSW50MzIpKHgpICsgMHg4MDAwVSApID4+IDE2ICkgKQogCiAKICAgc3RhdGljIEZUX0Vycm9yCkBAIC0xMDQwLDEwICsxMDQzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVySW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVySW5kZXggKTsKIAotICAgIEZUX1RSQUNFNSgoICIlcyB2YWx1ZSAlZCBhZGp1c3RlZCBieSAlZCB1bml0cyAoJXMpXG4iLAorICAgIEZUX1RSQUNFNSgoICIlcyB2YWx1ZSAlZCBhZGp1c3RlZCBieSAlZCB1bml0JXMgKCVzKVxuIiwKICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCA/ICJ2ZXJ0aWNhbCBoZWlnaHQiIDogImhvcml6b250YWwgd2lkdGgiLAogICAgICAgICAgICAgICAgICphdmFsdWUsCiAgICAgICAgICAgICAgICAgZGVsdGEsCisgICAgICAgICAgICAgICAgZGVsdGEgPT0gMSA/ICIiIDogInMiLAogICAgICAgICAgICAgICAgIHZlcnRpY2FsID8gIlZWQVIiIDogIkhWQVIiICkpOwogCiAgICAgKmF2YWx1ZSArPSBkZWx0YTsKQEAgLTEzMzAsMTMgKzEzMzQsMTUgQEAKIAogICAgICAgaWYgKCBwICkKICAgICAgIHsKLSAgICAgICAgRlRfVFJBQ0U1KCggInZhbHVlICVjJWMlYyVjICglZCB1bml0cykgYWRqdXN0ZWQgYnkgJWQgdW5pdHMgKE1WQVIpXG4iLAorICAgICAgICBGVF9UUkFDRTUoKCAidmFsdWUgJWMlYyVjJWMgKCVkIHVuaXQlcykgYWRqdXN0ZWQgYnkgJWQgdW5pdCVzIChNVkFSKVxuIiwKICAgICAgICAgICAgICAgICAgICAgKEZUX0NoYXIpKCB2YWx1ZS0+dGFnID4+IDI0ICksCiAgICAgICAgICAgICAgICAgICAgIChGVF9DaGFyKSggdmFsdWUtPnRhZyA+PiAxNiApLAogICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIHZhbHVlLT50YWcgPj4gOCApLAogICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcikoIHZhbHVlLT50YWcgKSwKICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnVubW9kaWZpZWQsCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhICkpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+dW5tb2RpZmllZCA9PSAxID8gIiIgOiAicyIsCisgICAgICAgICAgICAgICAgICAgIGRlbHRhLAorICAgICAgICAgICAgICAgICAgICBkZWx0YSA9PSAxID8gIiIgOiAicyIgKSk7CiAKICAgICAgICAgLyogc2luY2Ugd2UgaGFuZGxlIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZCB2YWx1ZXMgYXMgRlRfU2hvcnQsICovCiAgICAgICAgIC8qIGVuc3VyZSBwcm9wZXIgb3ZlcmZsb3cgYXJpdGhtZXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTQ5Niw4ICsxNTAyLDEwIEBACiAgICAgYmxlbmQtPmd2X2dseXBoY250ID0gZ3Zhcl9oZWFkLmdseXBoQ291bnQ7CiAgICAgb2Zmc2V0VG9EYXRhICAgICAgID0gZ3Zhcl9zdGFydCArIGd2YXJfaGVhZC5vZmZzZXRUb0RhdGE7CiAKLSAgICBGVF9UUkFDRTUoKCAiZ3ZhcjogdGhlcmUgYXJlICVkIHNoYXJlZCBjb29yZGluYXRlczpcbiIsCi0gICAgICAgICAgICAgICAgYmxlbmQtPnR1cGxlY291bnQgKSk7CisgICAgRlRfVFJBQ0U1KCggImd2YXI6IHRoZXJlICVzICVkIHNoYXJlZCBjb29yZGluYXRlJXM6XG4iLAorICAgICAgICAgICAgICAgIGJsZW5kLT50dXBsZWNvdW50ID09IDEgPyAiaXMiIDogImFyZSIsCisgICAgICAgICAgICAgICAgYmxlbmQtPnR1cGxlY291bnQsCisgICAgICAgICAgICAgICAgYmxlbmQtPnR1cGxlY291bnQgPT0gMSA/ICIiIDogInMiICkpOwogCiAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGJsZW5kLT5nbHlwaG9mZnNldHMsIGJsZW5kLT5ndl9nbHlwaGNudCArIDEgKSApCiAgICAgICBnb3RvIEV4aXQ7CkBAIC0xNzI1LDE1ICsxNzMzLDEzIEBACiAgICAgLyogYmFzZWQgb24gdGhlIFttaW4sZGVmLG1heF0gdmFsdWVzIGZvciB0aGUgYXhpcyB0byBiZSBbLTEsMCwxXS4gKi8KICAgICAvKiBUaGVuLCBpZiB0aGVyZSdzIGFuIGBhdmFyJyB0YWJsZSwgd2UgcmVub3JtYWxpemUgdGhpcyByYW5nZS4gICAqLwogCi0gICAgRlRfVFJBQ0U1KCggImRlc2lnbiBjb29yZGluYXRlczpcbiIgKSk7Ci0KICAgICBhID0gbW12YXItPmF4aXM7CiAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fY29vcmRzOyBpKyssIGErKyApCiAgICAgewogICAgICAgRlRfRml4ZWQgIGNvb3JkID0gY29vcmRzW2ldOwogCiAKLSAgICAgIEZUX1RSQUNFNSgoICIgICUuNWZcbiIsIGNvb3JkIC8gNjU1MzYuMCApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIgICAgJWQ6ICUuNWZcbiIsIGksIGNvb3JkIC8gNjU1MzYuMCApKTsKICAgICAgIGlmICggY29vcmQgPiBhLT5tYXhpbXVtIHx8IGNvb3JkIDwgYS0+bWluaW11bSApCiAgICAgICB7CiAgICAgICAgIEZUX1RSQUNFMSgoCkBAIC0xNzQzLDE3ICsxNzQ5LDE3IEBACiAgICAgICAgICAgYS0+bWluaW11bSAvIDY1NTM2LjAsCiAgICAgICAgICAgYS0+bWF4aW11bSAvIDY1NTM2LjAgKSk7CiAKLSAgICAgICAgaWYgKCBjb29yZCA+IGEtPm1heGltdW0pCisgICAgICAgIGlmICggY29vcmQgPiBhLT5tYXhpbXVtICkKICAgICAgICAgICBjb29yZCA9IGEtPm1heGltdW07CiAgICAgICAgIGVsc2UKICAgICAgICAgICBjb29yZCA9IGEtPm1pbmltdW07CiAgICAgICB9CiAKICAgICAgIGlmICggY29vcmQgPCBhLT5kZWYgKQotICAgICAgICBub3JtYWxpemVkW2ldID0gLUZUX0RpdkZpeCggY29vcmRzW2ldIC0gYS0+ZGVmLAorICAgICAgICBub3JtYWxpemVkW2ldID0gLUZUX0RpdkZpeCggY29vcmQgLSBhLT5kZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLT5taW5pbXVtIC0gYS0+ZGVmICk7CiAgICAgICBlbHNlIGlmICggY29vcmQgPiBhLT5kZWYgKQotICAgICAgICBub3JtYWxpemVkW2ldID0gRlRfRGl2Rml4KCBjb29yZHNbaV0gLSBhLT5kZWYsCisgICAgICAgIG5vcm1hbGl6ZWRbaV0gPSBGVF9EaXZGaXgoIGNvb3JkIC0gYS0+ZGVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLT5tYXhpbXVtIC0gYS0+ZGVmICk7CiAgICAgICBlbHNlCiAgICAgICAgIG5vcm1hbGl6ZWRbaV0gPSAwOwpAQCAtMTgxOSwxNiArMTgyNSw4IEBACiAgICAgICBuYyA9IGJsZW5kLT5udW1fYXhpczsKICAgICB9CiAKLSAgICBpZiAoIGZhY2UtPmRvYmxlbmQgKQotICAgIHsKLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgbmM7IGkrKyApCi0gICAgICAgIGRlc2lnbltpXSA9IGNvb3Jkc1tpXTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgbmM7IGkrKyApCi0gICAgICAgIGRlc2lnbltpXSA9IDA7Ci0gICAgfQorICAgIGZvciAoIGkgPSAwOyBpIDwgbmM7IGkrKyApCisgICAgICBkZXNpZ25baV0gPSBjb29yZHNbaV07CiAKICAgICBmb3IgKCA7IGkgPCBudW1fY29vcmRzOyBpKysgKQogICAgICAgZGVzaWduW2ldID0gMDsKQEAgLTE5MzcsMTEgKzE5MzUsMTEgQEAKICAgVFRfR2V0X01NX1ZhciggVFRfRmFjZSAgICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgIEZUX01NX1ZhciogICptYXN0ZXIgKQogICB7Ci0gICAgRlRfU3RyZWFtICAgICAgICAgICAgc3RyZWFtID0gZmFjZS0+cm9vdC5zdHJlYW07Ci0gICAgRlRfTWVtb3J5ICAgICAgICAgICAgbWVtb3J5ID0gZmFjZS0+cm9vdC5tZW1vcnk7CisgICAgRlRfU3RyZWFtICAgICAgICAgICAgc3RyZWFtICAgICA9IGZhY2UtPnJvb3Quc3RyZWFtOworICAgIEZUX01lbW9yeSAgICAgICAgICAgIG1lbW9yeSAgICAgPSBmYWNlLT5yb290Lm1lbW9yeTsKICAgICBGVF9VTG9uZyAgICAgICAgICAgICB0YWJsZV9sZW47Ci0gICAgRlRfRXJyb3IgICAgICAgICAgICAgZXJyb3IgID0gRlRfRXJyX09rOwotICAgIEZUX1VMb25nICAgICAgICAgICAgIGZ2YXJfc3RhcnQ7CisgICAgRlRfRXJyb3IgICAgICAgICAgICAgZXJyb3IgICAgICA9IEZUX0Vycl9PazsKKyAgICBGVF9VTG9uZyAgICAgICAgICAgICBmdmFyX3N0YXJ0ID0gMDsKICAgICBGVF9VSW50ICAgICAgICAgICAgICBpLCBqOwogICAgIEZUX01NX1ZhciogICAgICAgICAgIG1tdmFyID0gTlVMTDsKICAgICBGVF9GaXhlZCogICAgICAgICAgICBuZXh0X2Nvb3JkczsKQEAgLTE5NTEsOCArMTk0OSwxOSBAQAogICAgIEZUX0ZpeGVkKiAgICAgICAgICAgIGM7CiAgICAgRlRfVmFyX05hbWVkX1N0eWxlKiAgbnM7CiAgICAgR1hfRlZhcl9IZWFkICAgICAgICAgZnZhcl9oZWFkOwotICAgIEZUX0Jvb2wgICAgICAgICAgICAgIHVzZVBzTmFtZTsKKyAgICBGVF9Cb29sICAgICAgICAgICAgICB1c2VQc05hbWUgID0gMDsKICAgICBGVF9VSW50ICAgICAgICAgICAgICBudW1faW5zdGFuY2VzOworICAgIEZUX1VJbnQgICAgICAgICAgICAgIG51bV9heGVzOworICAgIEZUX1VTaG9ydCogICAgICAgICAgIGF4aXNfZmxhZ3M7CisKKyAgICBGVF9PZmZzZXQgIG1tdmFyX3NpemU7CisgICAgRlRfT2Zmc2V0ICBheGlzX2ZsYWdzX3NpemU7CisgICAgRlRfT2Zmc2V0ICBheGlzX3NpemU7CisgICAgRlRfT2Zmc2V0ICBuYW1lZHN0eWxlX3NpemU7CisgICAgRlRfT2Zmc2V0ICBuZXh0X2Nvb3Jkc19zaXplOworICAgIEZUX09mZnNldCAgbmV4dF9uYW1lX3NpemU7CisKKyAgICBGVF9Cb29sICBuZWVkX2luaXQ7CiAKICAgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIGZ2YXJfZmllbGRzW10gPQogICAgIHsKQEAgLTE5OTEsNyArMjAwMCw5IEBACiAgICAgLyogcmVhZCB0aGUgZm9udCBkYXRhIGFuZCBzZXQgdXAgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uICovCiAgICAgLyogaWYgbm90IGFscmVhZHkgZG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICBpZiAoICFmYWNlLT5ibGVuZCApCisgICAgbmVlZF9pbml0ID0gIWZhY2UtPmJsZW5kOworCisgICAgaWYgKCBuZWVkX2luaXQgKQogICAgIHsKICAgICAgIEZUX1RSQUNFMigoICJGVkFSICIgKSk7CiAKQEAgLTIwMjgsMjQgKzIwMzksNTcgQEAKIAogICAgICAgRlRfVFJBQ0UyKCggImxvYWRlZFxuIiApKTsKIAotICAgICAgRlRfVFJBQ0U1KCggIm51bWJlciBvZiBHWCBzdHlsZSBheGVzOiAlZFxuIiwgZnZhcl9oZWFkLmF4aXNDb3VudCApKTsKKyAgICAgIEZUX1RSQUNFNSgoICIlZCB2YXJpYXRpb24gYXglc1xuIiwKKyAgICAgICAgICAgICAgICAgIGZ2YXJfaGVhZC5heGlzQ291bnQsCisgICAgICAgICAgICAgICAgICBmdmFyX2hlYWQuYXhpc0NvdW50ID09IDEgPyAiaXMiIDogImVzIiApKTsKIAogICAgICAgaWYgKCBGVF9ORVcoIGZhY2UtPmJsZW5kICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgIC8qIGBudW1faW5zdGFuY2VzJyBob2xkcyB0aGUgbnVtYmVyIG9mIGFsbCBuYW1lZCBpbnN0YW5jZXMsICovCi0gICAgICAvKiBpbmNsdWRpbmcgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2hpY2ggbWlnaHQgYmUgbWlzc2luZyAgICAqLwotICAgICAgLyogaW4gZnZhcidzIHRhYmxlIG9mIG5hbWVkIGluc3RhbmNlcyAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIG51bV9pbnN0YW5jZXMgPSBmYWNlLT5yb290LnN0eWxlX2ZsYWdzID4+IDE2OworICAgICAgbnVtX2F4ZXMgICAgICAgICAgICAgID0gZnZhcl9oZWFkLmF4aXNDb3VudDsKKyAgICAgIGZhY2UtPmJsZW5kLT5udW1fYXhpcyA9IG51bV9heGVzOworICAgIH0KKyAgICBlbHNlCisgICAgICBudW1fYXhlcyA9IGZhY2UtPmJsZW5kLT5udW1fYXhpczsKIAotICAgICAgLyogY2Fubm90IG92ZXJmbG93IDMyLWJpdCBhcml0aG1ldGljIGJlY2F1c2Ugb2YgdGhlIHNpemUgbGltaXRzICovCi0gICAgICAvKiB1c2VkIGluIHRoZSBgZnZhcicgdGFibGUgdmFsaWRpdHkgY2hlY2sgaW4gYHNmbnRfaW5pdF9mYWNlJyAgKi8KLSAgICAgIGZhY2UtPmJsZW5kLT5tbXZhcl9sZW4gPQotICAgICAgICBzaXplb2YgKCBGVF9NTV9WYXIgKSArCi0gICAgICAgIGZ2YXJfaGVhZC5heGlzQ291bnQgKiBzaXplb2YgKCBGVF9WYXJfQXhpcyApICsKLSAgICAgICAgbnVtX2luc3RhbmNlcyAqIHNpemVvZiAoIEZUX1Zhcl9OYW1lZF9TdHlsZSApICsKLSAgICAgICAgbnVtX2luc3RhbmNlcyAqIGZ2YXJfaGVhZC5heGlzQ291bnQgKiBzaXplb2YgKCBGVF9GaXhlZCApICsKLSAgICAgICAgNSAqIGZ2YXJfaGVhZC5heGlzQ291bnQ7CisgICAgLyogYG51bV9pbnN0YW5jZXMnIGhvbGRzIHRoZSBudW1iZXIgb2YgYWxsIG5hbWVkIGluc3RhbmNlcywgKi8KKyAgICAvKiBpbmNsdWRpbmcgdGhlIGRlZmF1bHQgaW5zdGFuY2Ugd2hpY2ggbWlnaHQgYmUgbWlzc2luZyAgICAqLworICAgIC8qIGluIGZ2YXIncyB0YWJsZSBvZiBuYW1lZCBpbnN0YW5jZXMgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgbnVtX2luc3RhbmNlcyA9IChGVF9VSW50KWZhY2UtPnJvb3Quc3R5bGVfZmxhZ3MgPj4gMTY7CisKKyAgICAvKiBwcmVwYXJlIHN0b3JhZ2UgYXJlYSBmb3IgTU0gZGF0YTsgdGhpcyBjYW5ub3Qgb3ZlcmZsb3cgICAqLworICAgIC8qIDMyLWJpdCBhcml0aG1ldGljIGJlY2F1c2Ugb2YgdGhlIHNpemUgbGltaXRzIHVzZWQgaW4gdGhlICovCisgICAgLyogYGZ2YXInIHRhYmxlIHZhbGlkaXR5IGNoZWNrIGluIGBzZm50X2luaXRfZmFjZScgICAgICAgICAgKi8KKworICAgIC8qIHRoZSB2YXJpb3VzIGAqX3NpemUnIHZhcmlhYmxlcywgd2hpY2ggd2UgYWxzbyB1c2UgYXMgICAgICovCisgICAgLyogb2Zmc2V0cyBpbnRvIHRoZSBgbW1sZW4nIGFycmF5LCBtdXN0IGJlIG11bHRpcGxlcyBvZiB0aGUgKi8KKyAgICAvKiBwb2ludGVyIHNpemUgKGV4Y2VwdCB0aGUgbGFzdCBvbmUpOyB3aXRob3V0IHN1Y2ggYW4gICAgICAqLworICAgIC8qIGFsaWdubWVudCB0aGVyZSBtaWdodCBiZSBydW50aW1lIGVycm9ycyBkdWUgdG8gICAgICAgICAgICovCisgICAgLyogbWlzYWxpZ25lZCBhZGRyZXNzZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyN1bmRlZiAgQUxJR05fU0laRQorI2RlZmluZSBBTElHTl9TSVpFKCBuICkgXAorICAgICAgICAgICggKCAobikgKyBzaXplb2YgKHZvaWQqKSAtIDEgKSAmIH4oIHNpemVvZiAodm9pZCopIC0gMSApICkKKworICAgIG1tdmFyX3NpemUgICAgICAgPSBBTElHTl9TSVpFKCBzaXplb2YgKCBGVF9NTV9WYXIgKSApOworICAgIGF4aXNfZmxhZ3Nfc2l6ZSAgPSBBTElHTl9TSVpFKCBudW1fYXhlcyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIEZUX1VTaG9ydCApICk7CisgICAgYXhpc19zaXplICAgICAgICA9IEFMSUdOX1NJWkUoIG51bV9heGVzICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfVmFyX0F4aXMgKSApOworICAgIG5hbWVkc3R5bGVfc2l6ZSAgPSBBTElHTl9TSVpFKCBudW1faW5zdGFuY2VzICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfVmFyX05hbWVkX1N0eWxlICkgKTsKKyAgICBuZXh0X2Nvb3Jkc19zaXplID0gQUxJR05fU0laRSggbnVtX2luc3RhbmNlcyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9heGVzICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRlRfRml4ZWQgKSApOworICAgIG5leHRfbmFtZV9zaXplICAgPSBudW1fYXhlcyAqIDU7CisKKyAgICBpZiAoIG5lZWRfaW5pdCApCisgICAgeworICAgICAgZmFjZS0+YmxlbmQtPm1tdmFyX2xlbiA9IG1tdmFyX3NpemUgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXNfZmxhZ3Nfc2l6ZSAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aXNfc2l6ZSAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkc3R5bGVfc2l6ZSAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfY29vcmRzX3NpemUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfbmFtZV9zaXplOwogCiAgICAgICBpZiAoIEZUX0FMTE9DKCBtbXZhciwgZmFjZS0+YmxlbmQtPm1tdmFyX2xlbiApICkKICAgICAgICAgZ290byBFeGl0OwpAQCAtMjA1NSwyOCArMjA5OSwzMyBAQAogICAgICAgLyogdGhlIGRhdGEgZ2V0cyBmaWxsZWQgaW4gbGF0ZXIgb24gICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgIG1tdmFyLT5udW1fYXhpcyA9Ci0gICAgICAgIGZ2YXJfaGVhZC5heGlzQ291bnQ7CisgICAgICAgIG51bV9heGVzOwogICAgICAgbW12YXItPm51bV9kZXNpZ25zID0KICAgICAgICAgfjBVOyAgICAgICAgICAgICAgICAgICAvKiBtZWFuaW5nbGVzcyBpbiB0aGlzIGNvbnRleHQ7IGVhY2ggZ2x5cGggKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXkgaGF2ZSBhIGRpZmZlcmVudCBudW1iZXIgb2YgZGVzaWducyAgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAob3IgdHVwbGVzLCBhcyBjYWxsZWQgYnkgQXBwbGUpICAgICAgICAgKi8KICAgICAgIG1tdmFyLT5udW1fbmFtZWRzdHlsZXMgPQogICAgICAgICBudW1faW5zdGFuY2VzOwotICAgICAgbW12YXItPmF4aXMgPQotICAgICAgICAoRlRfVmFyX0F4aXMqKSYoIG1tdmFyWzFdICk7Ci0gICAgICBtbXZhci0+bmFtZWRzdHlsZSA9Ci0gICAgICAgIChGVF9WYXJfTmFtZWRfU3R5bGUqKSYoIG1tdmFyLT5heGlzW2Z2YXJfaGVhZC5heGlzQ291bnRdICk7CiAKLSAgICAgIG5leHRfY29vcmRzID0KLSAgICAgICAgKEZUX0ZpeGVkKikmKCBtbXZhci0+bmFtZWRzdHlsZVtudW1faW5zdGFuY2VzXSApOworICAgICAgLyogYWxhcywgbm8gcHVibGljIGZpZWxkIGluIGBGVF9WYXJfQXhpcycgZm9yIGF4aXMgZmxhZ3MgKi8KKyAgICAgIGF4aXNfZmxhZ3MgPQorICAgICAgICAoRlRfVVNob3J0KikoIChjaGFyKiltbXZhciArIG1tdmFyX3NpemUgKTsKKyAgICAgIG1tdmFyLT5heGlzID0KKyAgICAgICAgKEZUX1Zhcl9BeGlzKikoIChjaGFyKilheGlzX2ZsYWdzICsgYXhpc19mbGFnc19zaXplICk7CisgICAgICBtbXZhci0+bmFtZWRzdHlsZSA9CisgICAgICAgIChGVF9WYXJfTmFtZWRfU3R5bGUqKSggKGNoYXIqKW1tdmFyLT5heGlzICsgYXhpc19zaXplICk7CisKKyAgICAgIG5leHRfY29vcmRzID0gKEZUX0ZpeGVkKikoIChjaGFyKiltbXZhci0+bmFtZWRzdHlsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lZHN0eWxlX3NpemUgKTsKICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2luc3RhbmNlczsgaSsrICkKICAgICAgIHsKICAgICAgICAgbW12YXItPm5hbWVkc3R5bGVbaV0uY29vcmRzICA9IG5leHRfY29vcmRzOwotICAgICAgICBuZXh0X2Nvb3JkcyAgICAgICAgICAgICAgICAgKz0gZnZhcl9oZWFkLmF4aXNDb3VudDsKKyAgICAgICAgbmV4dF9jb29yZHMgICAgICAgICAgICAgICAgICs9IG51bV9heGVzOwogICAgICAgfQogCi0gICAgICBuZXh0X25hbWUgPSAoRlRfU3RyaW5nKiluZXh0X2Nvb3JkczsKLSAgICAgIGZvciAoIGkgPSAwOyBpIDwgZnZhcl9oZWFkLmF4aXNDb3VudDsgaSsrICkKKyAgICAgIG5leHRfbmFtZSA9IChGVF9TdHJpbmcqKSggKGNoYXIqKW1tdmFyLT5uYW1lZHN0eWxlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRzdHlsZV9zaXplICsgbmV4dF9jb29yZHNfc2l6ZSApOworICAgICAgZm9yICggaSA9IDA7IGkgPCBudW1fYXhlczsgaSsrICkKICAgICAgIHsKICAgICAgICAgbW12YXItPmF4aXNbaV0ubmFtZSAgPSBuZXh0X25hbWU7CiAgICAgICAgIG5leHRfbmFtZSAgICAgICAgICAgKz0gNTsKQEAgLTIwODgsMTAgKzIxMzcsMTQgQEAKICAgICAgICAgZ290byBFeGl0OwogCiAgICAgICBhID0gbW12YXItPmF4aXM7Ci0gICAgICBmb3IgKCBpID0gMDsgaSA8IGZ2YXJfaGVhZC5heGlzQ291bnQ7IGkrKyApCisgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9heGVzOyBpKysgKQogICAgICAgewogICAgICAgICBHWF9GVmFyX0F4aXMgIGF4aXNfcmVjOwogCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgaW50ICBpbnZhbGlkID0gMDsKKyNlbmRpZgorCiAKICAgICAgICAgaWYgKCBGVF9TVFJFQU1fUkVBRF9GSUVMRFMoIGZ2YXJheGlzX2ZpZWxkcywgJmF4aXNfcmVjICkgKQogICAgICAgICAgIGdvdG8gRXhpdDsKQEAgLTIxMDcsMjQgKzIxNjAsMzkgQEAKICAgICAgICAgYS0+bmFtZVszXSA9IChGVF9TdHJpbmcpKCAoIGEtPnRhZyAgICAgICApICYgMHhGRiApOwogICAgICAgICBhLT5uYW1lWzRdID0gJ1wwJzsKIAorICAgICAgICAqYXhpc19mbGFncyA9IGF4aXNfcmVjLmZsYWdzOworCiAgICAgICAgIGlmICggYS0+bWluaW11bSA+IGEtPmRlZiB8fAogICAgICAgICAgICAgIGEtPmRlZiA+IGEtPm1heGltdW0gKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfVFJBQ0UyKCggIlRUX0dldF9NTV9WYXI6IgotICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBcIiVzXCIgYXhpcyByZWNvcmQ7IGRpc2FibGluZ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICBhLT5uYW1lICkpOwotCiAgICAgICAgICAgYS0+bWluaW11bSA9IGEtPmRlZjsKICAgICAgICAgICBhLT5tYXhpbXVtID0gYS0+ZGVmOworCisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgICBpbnZhbGlkID0gMTsKKyNlbmRpZgogICAgICAgICB9CiAKLSAgICAgICAgRlRfVFJBQ0U1KCggIiAgXCIlc1wiOiBtaW5pbXVtPSUuNWYsIGRlZmF1bHQ9JS41ZiwgbWF4aW11bT0lLjVmXG4iLAorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCisgICAgICAgIGlmICggaSA9PSAwICkKKyAgICAgICAgICBGVF9UUkFDRTUoKCAiICBpZHggICB0YWcgICIKKyAgICAgICAgICAgICAgICAgICAvKiAiICBYWFggIGBYWFhYJyIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG1pbmltdW0gICAgIGRlZmF1bHQgICAgIG1heGltdW0gICBmbGFnc1xuIiApKTsKKyAgICAgICAgICAgICAgICAgICAvKiAiICBYWFhYLlhYWFhYICBYWFhYLlhYWFhYICBYWFhYLlhYWFhYICAweFhYWFgiICovCisKKyAgICAgICAgRlRfVFJBQ0U1KCggIiAgJTNkICBgJXMnIgorICAgICAgICAgICAgICAgICAgICAiICAlMTAuNWYgICUxMC41ZiAgJTEwLjVmICAweCUwNFglc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwKICAgICAgICAgICAgICAgICAgICAgYS0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgYS0+bWluaW11bSAvIDY1NTM2LjAsCiAgICAgICAgICAgICAgICAgICAgIGEtPmRlZiAvIDY1NTM2LjAsCi0gICAgICAgICAgICAgICAgICAgIGEtPm1heGltdW0gLyA2NTUzNi4wICkpOworICAgICAgICAgICAgICAgICAgICBhLT5tYXhpbXVtIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgKmF4aXNfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGludmFsaWQgPyAiIChpbnZhbGlkLCBkaXNhYmxlZCkiIDogIiIgKSk7CisjZW5kaWYKIAogICAgICAgICBhKys7CisgICAgICAgIGF4aXNfZmxhZ3MrKzsKICAgICAgIH0KIAogICAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKQEAgLTIxMzIsMzYgKzIyMDAsOTEgQEAKICAgICAgIC8qIG5hbWVkIGluc3RhbmNlIGNvb3JkaW5hdGVzIGFyZSBzdG9yZWQgYXMgZGVzaWduIGNvb3JkaW5hdGVzOyAqLwogICAgICAgLyogd2UgaGF2ZSB0byBjb252ZXJ0IHRoZW0gdG8gbm9ybWFsaXplZCBjb29yZGluYXRlcyBhbHNvICAgICAgICovCiAgICAgICBpZiAoIEZUX05FV19BUlJBWSggZmFjZS0+YmxlbmQtPm5vcm1hbGl6ZWRfc3R5bGVjb29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnZhcl9oZWFkLmF4aXNDb3VudCAqIG51bV9pbnN0YW5jZXMgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2F4ZXMgKiBudW1faW5zdGFuY2VzICkgKQogICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgIGlmICggZnZhcl9oZWFkLmluc3RhbmNlQ291bnQgJiYgIWZhY2UtPmJsZW5kLT5hdmFyX2xvYWRlZCApCisgICAgICB7CisgICAgICAgIEZUX1VMb25nICBvZmZzZXQgPSBGVF9TVFJFQU1fUE9TKCk7CisKKwogICAgICAgICBmdF92YXJfbG9hZF9hdmFyKCBmYWNlICk7CiAKKyAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggb2Zmc2V0ICkgKQorICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgIH0KKworICAgICAgRlRfVFJBQ0U1KCggIiVkIGluc3RhbmNlJXNcbiIsCisgICAgICAgICAgICAgICAgICBmdmFyX2hlYWQuaW5zdGFuY2VDb3VudCwKKyAgICAgICAgICAgICAgICAgIGZ2YXJfaGVhZC5pbnN0YW5jZUNvdW50ID09IDEgPyAiIiA6ICJzIiApKTsKKwogICAgICAgbnMgID0gbW12YXItPm5hbWVkc3R5bGU7CiAgICAgICBuc2MgPSBmYWNlLT5ibGVuZC0+bm9ybWFsaXplZF9zdHlsZWNvb3JkczsKICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZnZhcl9oZWFkLmluc3RhbmNlQ291bnQ7IGkrKywgbnMrKyApCiAgICAgICB7CiAgICAgICAgIC8qIFBvc3RTY3JpcHQgbmFtZXMgYWRkIDIgYnl0ZXMgdG8gdGhlIGluc3RhbmNlIHJlY29yZCBzaXplICovCiAgICAgICAgIGlmICggRlRfRlJBTUVfRU5URVIoICggdXNlUHNOYW1lID8gNkwgOiA0TCApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNEwgKiBmdmFyX2hlYWQuYXhpc0NvdW50ICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0TCAqIG51bV9heGVzICkgKQogICAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgICBucy0+c3RyaWQgICAgICAgPSAgICBGVF9HRVRfVVNIT1JUKCk7CiAgICAgICAgICh2b2lkKSAvKiBmbGFncyA9ICovIEZUX0dFVF9VU0hPUlQoKTsKIAogICAgICAgICBjID0gbnMtPmNvb3JkczsKLSAgICAgICAgZm9yICggaiA9IDA7IGogPCBmdmFyX2hlYWQuYXhpc0NvdW50OyBqKyssIGMrKyApCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbnVtX2F4ZXM7IGorKywgYysrICkKICAgICAgICAgICAqYyA9IEZUX0dFVF9MT05HKCk7CiAKKyAgICAgICAgLyogdmFsaWQgcHNpZCB2YWx1ZXMgYXJlIDYsIFsyNTY7MzI3NjddLCBhbmQgMHhGRkZGICovCiAgICAgICAgIGlmICggdXNlUHNOYW1lICkKICAgICAgICAgICBucy0+cHNpZCA9IEZUX0dFVF9VU0hPUlQoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIG5zLT5wc2lkID0gMHhGRkZGOwogCi0gICAgICAgIGZ0X3Zhcl90b19ub3JtYWxpemVkKCBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnZhcl9oZWFkLmF4aXNDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLT5jb29yZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2MgKTsKLSAgICAgICAgbnNjICs9IGZ2YXJfaGVhZC5heGlzQ291bnQ7CisjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKKyAgICAgICAgeworICAgICAgICAgIFNGTlRfU2VydmljZSAgc2ZudCA9IChTRk5UX1NlcnZpY2UpZmFjZS0+c2ZudDsKKworICAgICAgICAgIEZUX1N0cmluZyogIHN0cm5hbWUgPSBOVUxMOworICAgICAgICAgIEZUX1N0cmluZyogIHBzbmFtZSAgPSBOVUxMOworCisgICAgICAgICAgRlRfVUxvbmcgIHBvczsKKworCisgICAgICAgICAgcG9zID0gRlRfU1RSRUFNX1BPUygpOworCisgICAgICAgICAgaWYgKCBucy0+c3RyaWQgIT0gMHhGRkZGICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAodm9pZClzZm50LT5nZXRfbmFtZSggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KW5zLT5zdHJpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RybmFtZSApOworICAgICAgICAgICAgaWYgKCBzdHJuYW1lICYmICFmdF9zdHJjbXAoIHN0cm5hbWUsICIubm90ZGVmIiApICkKKyAgICAgICAgICAgICAgc3RybmFtZSA9IE5VTEw7CisgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCBucy0+cHNpZCAhPSAweEZGRkYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgICh2b2lkKXNmbnQtPmdldF9uYW1lKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpbnMtPnBzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBzbmFtZSApOworICAgICAgICAgICAgaWYgKCBwc25hbWUgJiYgIWZ0X3N0cmNtcCggcHNuYW1lLCAiLm5vdGRlZiIgKSApCisgICAgICAgICAgICAgIHBzbmFtZSA9IE5VTEw7CisgICAgICAgICAgfQorCisgICAgICAgICAgKHZvaWQpRlRfU1RSRUFNX1NFRUsoIHBvcyApOworCisgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgaW5zdGFuY2UgJWQgKCVzJXMlcywgJXMlcyVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICAgIHN0cm5hbWUgPyAibmFtZTogYCIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJuYW1lID8gc3RybmFtZSA6ICJ1bm5hbWVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJuYW1lID8gIiciIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgcHNuYW1lID8gIlBTIG5hbWU6IGAiIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgcHNuYW1lID8gcHNuYW1lIDogIm5vIFBTIG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgIHBzbmFtZSA/ICInIiA6ICIiICkpOworICAgICAgICB9CisjZW5kaWYgLyogRlRfREVCVUdfTEVWRUxfVFJBQ0UgKi8KKworICAgICAgICBmdF92YXJfdG9fbm9ybWFsaXplZCggZmFjZSwgbnVtX2F4ZXMsIG5zLT5jb29yZHMsIG5zYyApOworICAgICAgICBuc2MgKz0gbnVtX2F4ZXM7CiAKICAgICAgICAgRlRfRlJBTUVfRVhJVCgpOwogICAgICAgfQpAQCAtMjE3MCw0NiArMjI5Myw0NyBAQAogICAgICAgewogICAgICAgICBTRk5UX1NlcnZpY2UgIHNmbnQgPSAoU0ZOVF9TZXJ2aWNlKWZhY2UtPnNmbnQ7CiAKLSAgICAgICAgRlRfSW50ICBmb3VuZCwgd2luLCBhcHBsZTsKKyAgICAgICAgRlRfSW50ICAgZm91bmQsIGR1bW15MSwgZHVtbXkyOworICAgICAgICBGVF9VSW50ICBzdHJpZCA9IH4wVTsKIAogCiAgICAgICAgIC8qIHRoZSBkZWZhdWx0IGluc3RhbmNlIGlzIG1pc3NpbmcgaW4gYXJyYXkgdGhlICAgKi8KICAgICAgICAgLyogb2YgbmFtZWQgaW5zdGFuY2VzOyB0cnkgdG8gc3ludGhlc2l6ZSBhbiBlbnRyeSAqLwogICAgICAgICBmb3VuZCA9IHNmbnQtPmdldF9uYW1lX2lkKCBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9OQU1FX0lEX1RZUE9HUkFQSElDX1NVQkZBTUlMWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFwcGxlICk7Ci0gICAgICAgIGlmICggIWZvdW5kICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15MiApOworICAgICAgICBpZiAoIGZvdW5kICkKKyAgICAgICAgICBzdHJpZCA9IFRUX05BTUVfSURfVFlQT0dSQVBISUNfU1VCRkFNSUxZOworICAgICAgICBlbHNlCisgICAgICAgIHsKICAgICAgICAgICBmb3VuZCA9IHNmbnQtPmdldF9uYW1lX2lkKCBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRUX05BTUVfSURfRk9OVF9TVUJGQU1JTFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXBwbGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdW1teTIgKTsKKyAgICAgICAgICBpZiAoIGZvdW5kICkKKyAgICAgICAgICAgIHN0cmlkID0gVFRfTkFNRV9JRF9GT05UX1NVQkZBTUlMWTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICggZm91bmQgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfSW50ICBzdHJpZCA9IHdpbiA+PSAwID8gd2luIDogYXBwbGU7Ci0KLQogICAgICAgICAgIGZvdW5kID0gc2ZudC0+Z2V0X25hbWVfaWQoIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRfTkFNRV9JRF9QU19OQU1FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFwcGxlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmR1bW15MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHVtbXkyICk7CiAgICAgICAgICAgaWYgKCBmb3VuZCApCiAgICAgICAgICAgewotICAgICAgICAgICAgRlRfSW50ICBwc2lkID0gd2luID49IDAgPyB3aW4gOiBhcHBsZTsKLQotCiAgICAgICAgICAgICBGVF9UUkFDRTUoKCAiVFRfR2V0X01NX1ZhcjoiCiAgICAgICAgICAgICAgICAgICAgICAgICAiIEFkZGluZyBkZWZhdWx0IGluc3RhbmNlIHRvIG5hbWVkIGluc3RhbmNlc1xuIiApKTsKIAogICAgICAgICAgICAgbnMgPSAmbW12YXItPm5hbWVkc3R5bGVbZnZhcl9oZWFkLmluc3RhbmNlQ291bnRdOwogCiAgICAgICAgICAgICBucy0+c3RyaWQgPSBzdHJpZDsKLSAgICAgICAgICAgIG5zLT5wc2lkICA9IHBzaWQ7CisgICAgICAgICAgICBucy0+cHNpZCAgPSBUVF9OQU1FX0lEX1BTX05BTUU7CiAKICAgICAgICAgICAgIGEgPSBtbXZhci0+YXhpczsKICAgICAgICAgICAgIGMgPSBucy0+Y29vcmRzOwotICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBmdmFyX2hlYWQuYXhpc0NvdW50OyBqKyssIGErKywgYysrICkKKyAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgbnVtX2F4ZXM7IGorKywgYSsrLCBjKysgKQogICAgICAgICAgICAgICAqYyA9IGEtPmRlZjsKICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMjksMjIgKzIzNTMsMjUgQEAKICAgICAgICAgZ290byBFeGl0OwogICAgICAgRlRfTUVNX0NPUFkoIG1tdmFyLCBmYWNlLT5ibGVuZC0+bW12YXIsIGZhY2UtPmJsZW5kLT5tbXZhcl9sZW4gKTsKIAorICAgICAgYXhpc19mbGFncyA9CisgICAgICAgIChGVF9VU2hvcnQqKSggKGNoYXIqKW1tdmFyICsgbW12YXJfc2l6ZSApOwogICAgICAgbW12YXItPmF4aXMgPQotICAgICAgICAoRlRfVmFyX0F4aXMqKSYoIG1tdmFyWzFdICk7CisgICAgICAgIChGVF9WYXJfQXhpcyopKCAoY2hhciopYXhpc19mbGFncyArIGF4aXNfZmxhZ3Nfc2l6ZSApOwogICAgICAgbW12YXItPm5hbWVkc3R5bGUgPQotICAgICAgICAoRlRfVmFyX05hbWVkX1N0eWxlKikmKCBtbXZhci0+YXhpc1ttbXZhci0+bnVtX2F4aXNdICk7Ci0gICAgICBuZXh0X2Nvb3JkcyA9Ci0gICAgICAgIChGVF9GaXhlZCopJiggbW12YXItPm5hbWVkc3R5bGVbbW12YXItPm51bV9uYW1lZHN0eWxlc10gKTsKKyAgICAgICAgKEZUX1Zhcl9OYW1lZF9TdHlsZSopKCAoY2hhciopbW12YXItPmF4aXMrIGF4aXNfc2l6ZSApOwogCisgICAgICBuZXh0X2Nvb3JkcyA9IChGVF9GaXhlZCopKCAoY2hhciopbW12YXItPm5hbWVkc3R5bGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRzdHlsZV9zaXplICk7CiAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1tdmFyLT5udW1fbmFtZWRzdHlsZXM7IG4rKyApCiAgICAgICB7CiAgICAgICAgIG1tdmFyLT5uYW1lZHN0eWxlW25dLmNvb3JkcyAgPSBuZXh0X2Nvb3JkczsKLSAgICAgICAgbmV4dF9jb29yZHMgICAgICAgICAgICAgICAgICs9IG1tdmFyLT5udW1fYXhpczsKKyAgICAgICAgbmV4dF9jb29yZHMgICAgICAgICAgICAgICAgICs9IG51bV9heGVzOwogICAgICAgfQogCiAgICAgICBhICAgICAgICAgPSBtbXZhci0+YXhpczsKLSAgICAgIG5leHRfbmFtZSA9IChGVF9TdHJpbmcqKW5leHRfY29vcmRzOwotICAgICAgZm9yICggbiA9IDA7IG4gPCBtbXZhci0+bnVtX2F4aXM7IG4rKyApCisgICAgICBuZXh0X25hbWUgPSAoRlRfU3RyaW5nKikoIChjaGFyKiltbXZhci0+bmFtZWRzdHlsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVkc3R5bGVfc2l6ZSArIG5leHRfY29vcmRzX3NpemUgKTsKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgbnVtX2F4ZXM7IG4rKyApCiAgICAgICB7CiAgICAgICAgIGEtPm5hbWUgPSBuZXh0X25hbWU7CiAKQEAgLTIyNzksOCArMjQwNiwxMCBAQAogICAgIEZUX0Vycm9yICAgIGVycm9yID0gRlRfRXJyX09rOwogICAgIEdYX0JsZW5kICAgIGJsZW5kOwogICAgIEZUX01NX1ZhciogIG1tdmFyOwotICAgIEZUX1VJbnQgICAgIGksIGo7Ci0gICAgRlRfQm9vbCAgICAgaXNfZGVmYXVsdF9pbnN0YW5jZSA9IDE7CisgICAgRlRfVUludCAgICAgaTsKKworICAgIEZUX0Jvb2wgICAgIGFsbF9kZXNpZ25fY29vcmRzID0gRkFMU0U7CisKICAgICBGVF9NZW1vcnkgICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKIAogICAgIGVudW0KQEAgLTIzMTEsMTEgKzI0NDAsMTIgQEAKICAgICAgIG51bV9jb29yZHMgPSBtbXZhci0+bnVtX2F4aXM7CiAgICAgfQogCi0gICAgRlRfVFJBQ0U1KCggIm5vcm1hbGl6ZWQgZGVzaWduIGNvb3JkaW5hdGVzOlxuIiApKTsKKyAgICBGVF9UUkFDRTUoKCAiVFRfU2V0X01NX0JsZW5kOlxuIgorICAgICAgICAgICAgICAgICIgIG5vcm1hbGl6ZWQgZGVzaWduIGNvb3JkaW5hdGVzOlxuIiApKTsKIAogICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2Nvb3JkczsgaSsrICkKICAgICB7Ci0gICAgICBGVF9UUkFDRTUoKCAiICAlLjVmXG4iLCBjb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgRlRfVFJBQ0U1KCggIiAgICAlLjVmXG4iLCBjb29yZHNbaV0gLyA2NTUzNi4wICkpOwogICAgICAgaWYgKCBjb29yZHNbaV0gPCAtMHgwMDAxMDAwMEwgfHwgY29vcmRzW2ldID4gMHgwMDAxMDAwMEwgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTEoKCAiVFRfU2V0X01NX0JsZW5kOiBub3JtYWxpemVkIGRlc2lnbiBjb29yZGluYXRlICUuNWZcbiIKQEAgLTIzMjQsOSArMjQ1NCw2IEBACiAgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQotCi0gICAgICBpZiAoIGNvb3Jkc1tpXSAhPSAwICkKLSAgICAgICAgaXNfZGVmYXVsdF9pbnN0YW5jZSA9IDA7CiAgICAgfQogCiAgICAgRlRfVFJBQ0U1KCggIlxuIiApKTsKQEAgLTIzMzksNiArMjQ2Niw5IEBACiAgICAgewogICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGJsZW5kLT5jb29yZHMsIG1tdmFyLT5udW1fYXhpcyApICkKICAgICAgICAgZ290byBFeGl0OworCisgICAgICAvKiB0aGUgZmlyc3QgdGltZSB3ZSBoYXZlIHRvIGNvbXB1dGUgYWxsIGRlc2lnbiBjb29yZGluYXRlcyAqLworICAgICAgYWxsX2Rlc2lnbl9jb29yZHMgPSBUUlVFOwogICAgIH0KIAogICAgIGlmICggIWJsZW5kLT5ub3JtYWxpemVkY29vcmRzICkKQEAgLTIzNTQsNiArMjQ4NCwxMiBAQAogICAgIH0KICAgICBlbHNlCiAgICAgeworICAgICAgRlRfQm9vbCAgICBoYXZlX2RpZmYgPSAwOworICAgICAgRlRfVUludCAgICBqOworICAgICAgRlRfRml4ZWQqICBjOworICAgICAgRlRfRml4ZWQqICBuOworCisKICAgICAgIG1hbmFnZUN2dCA9IG1jdnRfcmV0YWluOwogCiAgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9jb29yZHM7IGkrKyApCkBAIC0yMzYxLDEwICsyNDk3LDM0IEBACiAgICAgICAgIGlmICggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gIT0gY29vcmRzW2ldICkKICAgICAgICAgewogICAgICAgICAgIG1hbmFnZUN2dCA9IG1jdnRfbG9hZDsKKyAgICAgICAgICBoYXZlX2RpZmYgPSAxOwogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICB9CiAKKyAgICAgIGlmICggRlRfSVNfTkFNRURfSU5TVEFOQ0UoIEZUX0ZBQ0UoIGZhY2UgKSApICkKKyAgICAgIHsKKyAgICAgICAgRlRfVUludCAgaWR4ID0gKEZUX1VJbnQpZmFjZS0+cm9vdC5mYWNlX2luZGV4ID4+IDE2OworCisKKyAgICAgICAgYyA9IGJsZW5kLT5ub3JtYWxpemVkY29vcmRzICsgaTsKKyAgICAgICAgbiA9IGJsZW5kLT5ub3JtYWxpemVkX3N0eWxlY29vcmRzICsgaWR4ICogbW12YXItPm51bV9heGlzICsgaTsKKyAgICAgICAgZm9yICggaiA9IGk7IGogPCBtbXZhci0+bnVtX2F4aXM7IGorKywgbisrLCBjKysgKQorICAgICAgICAgIGlmICggKmMgIT0gKm4gKQorICAgICAgICAgICAgaGF2ZV9kaWZmID0gMTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgYyA9IGJsZW5kLT5ub3JtYWxpemVkY29vcmRzICsgaTsKKyAgICAgICAgZm9yICggaiA9IGk7IGogPCBtbXZhci0+bnVtX2F4aXM7IGorKywgYysrICkKKyAgICAgICAgICBpZiAoICpjICE9IDAgKQorICAgICAgICAgICAgaGF2ZV9kaWZmID0gMTsKKyAgICAgIH0KKworICAgICAgLyogcmV0dXJuIHZhbHVlIC0xIGluZGljYXRlcyBgbm8gY2hhbmdlJyAqLworICAgICAgaWYgKCAhaGF2ZV9kaWZmICkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgICBmb3IgKCA7IGkgPCBtbXZhci0+bnVtX2F4aXM7IGkrKyApCiAgICAgICB7CiAgICAgICAgIGlmICggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gIT0gMCApCkBAIC0yMzg3LDcgKzI1NDcsNyBAQAogCiAgICAgaWYgKCBzZXRfZGVzaWduX2Nvb3JkcyApCiAgICAgICBmdF92YXJfdG9fZGVzaWduKCBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Nvb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9kZXNpZ25fY29vcmRzID8gYmxlbmQtPm51bV9heGlzIDogbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmQtPmNvb3JkcyApOwogCkBAIC0yNDE4LDMxICsyNTc4LDkgQEAKICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBjaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHZhcmlhdGlvbiB0dXBsZSBjb2luY2lkZXMgKi8KLSAgICAvKiB3aXRoIGEgbmFtZWQgaW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgIGZvciAoIGkgPSAwOyBpIDwgYmxlbmQtPm1tdmFyLT5udW1fbmFtZWRzdHlsZXM7IGkrKyApCi0gICAgewotICAgICAgRlRfRml4ZWQqICBuc2MgPSBibGVuZC0+bm9ybWFsaXplZF9zdHlsZWNvb3JkcyArIGkgKiBibGVuZC0+bnVtX2F4aXM7Ci0gICAgICBGVF9GaXhlZCogIG5zICA9IGJsZW5kLT5ub3JtYWxpemVkY29vcmRzOwotCi0KLSAgICAgIGZvciAoIGogPSAwOyBqIDwgYmxlbmQtPm51bV9heGlzOyBqKyssIG5zYysrLCBucysrICkKLSAgICAgIHsKLSAgICAgICAgaWYgKCAqbnNjICE9ICpucyApCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmICggaiA9PSBibGVuZC0+bnVtX2F4aXMgKQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvKiBhZGp1c3QgbmFtZWQgaW5zdGFuY2UgaW5kZXggKi8KLSAgICBmYWNlLT5yb290LmZhY2VfaW5kZXggJj0gMHhGRkZGOwotICAgIGlmICggaSA8IGJsZW5kLT5tbXZhci0+bnVtX25hbWVkc3R5bGVzICkKLSAgICAgIGZhY2UtPnJvb3QuZmFjZV9pbmRleCB8PSAoIGkgKyAxICkgPDwgMTY7Ci0KLSAgICBmYWNlLT5pc19kZWZhdWx0X2luc3RhbmNlID0gaXNfZGVmYXVsdF9pbnN0YW5jZTsKKyAgICAvKiBlbmZvcmNlIHJlY29tcHV0YXRpb24gb2YgdGhlIFBvc3RTY3JpcHQgbmFtZTsgKi8KKyAgICBGVF9GUkVFKCBmYWNlLT5wb3N0c2NyaXB0X25hbWUgKTsKKyAgICBmYWNlLT5wb3N0c2NyaXB0X25hbWUgPSBOVUxMOwogCiAgIEV4aXQ6CiAgICAgcmV0dXJuIGVycm9yOwpAQCAtMjQ3OSw3ICsyNjE3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICkKICAgewotICAgIHJldHVybiB0dF9zZXRfbW1fYmxlbmQoIGZhY2UsIG51bV9jb29yZHMsIGNvb3JkcywgMSApOworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgZXJyb3IgPSB0dF9zZXRfbW1fYmxlbmQoIGZhY2UsIG51bV9jb29yZHMsIGNvb3JkcywgMSApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgaWYgKCBudW1fY29vcmRzICkKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OOworICAgIGVsc2UKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX1ZBUklBVElPTjsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KIAogCkBAIC0yNTI0LDYgKzI2NzQsMTQgQEAKIAogICAgIGJsZW5kID0gZmFjZS0+YmxlbmQ7CiAKKyAgICBpZiAoICFibGVuZC0+Y29vcmRzICkKKyAgICB7CisgICAgICAvKiBzZWxlY3QgZGVmYXVsdCBpbnN0YW5jZSBjb29yZGluYXRlcyAqLworICAgICAgLyogaWYgbm8gaW5zdGFuY2UgaXMgc2VsZWN0ZWQgeWV0ICAgICAgKi8KKyAgICAgIGlmICggRlRfU0VUX0VSUk9SKCB0dF9zZXRfbW1fYmxlbmQoIGZhY2UsIDAsIE5VTEwsIDEgKSApICkKKyAgICAgICAgcmV0dXJuIGVycm9yOworICAgIH0KKwogICAgIG5jID0gbnVtX2Nvb3JkczsKICAgICBpZiAoIG51bV9jb29yZHMgPiBibGVuZC0+bnVtX2F4aXMgKQogICAgIHsKQEAgLTI1ODcsMTEgKzI3NDUsMTIgQEAKICAgICBGVF9VSW50ICAgICBpOwogICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IGZhY2UtPnJvb3QubWVtb3J5OwogCi0gICAgRlRfVmFyX0F4aXMqICBhOwotICAgIEZUX0ZpeGVkKiAgICAgYzsKLQorICAgIEZUX0ZpeGVkKiAgYzsKKyAgICBGVF9GaXhlZCogIG47CiAgICAgRlRfRml4ZWQqICBub3JtYWxpemVkID0gTlVMTDsKIAorICAgIEZUX0Jvb2wgIGhhdmVfZGlmZiA9IDA7CisKIAogICAgIGlmICggIWZhY2UtPmJsZW5kICkKICAgICB7CkBAIC0yNjE2LDE0ICsyNzc1LDU2IEBACiAgICAgICAgIGdvdG8gRXhpdDsKICAgICB9CiAKLSAgICBGVF9NRU1fQ09QWSggYmxlbmQtPmNvb3JkcywKLSAgICAgICAgICAgICAgICAgY29vcmRzLAotICAgICAgICAgICAgICAgICBudW1fY29vcmRzICogc2l6ZW9mICggRlRfRml4ZWQgKSApOworICAgIGMgPSBibGVuZC0+Y29vcmRzOworICAgIG4gPSBjb29yZHM7CisgICAgZm9yICggaSA9IDA7IGkgPCBudW1fY29vcmRzOyBpKyssIG4rKywgYysrICkKKyAgICB7CisgICAgICBpZiAoICpjICE9ICpuICkKKyAgICAgIHsKKyAgICAgICAgKmMgICAgICAgID0gKm47CisgICAgICAgIGhhdmVfZGlmZiA9IDE7CisgICAgICB9CisgICAgfQogCi0gICAgYSA9IG1tdmFyLT5heGlzICsgbnVtX2Nvb3JkczsKLSAgICBjID0gY29vcmRzICsgbnVtX2Nvb3JkczsKLSAgICBmb3IgKCBpID0gbnVtX2Nvb3JkczsgaSA8IG1tdmFyLT5udW1fYXhpczsgaSsrLCBhKyssIGMrKyApCi0gICAgICAqYyA9IGEtPmRlZjsKKyAgICBpZiAoIEZUX0lTX05BTUVEX0lOU1RBTkNFKCBGVF9GQUNFKCBmYWNlICkgKSApCisgICAgeworICAgICAgRlRfVUludCAgICAgICAgICAgICAgaW5zdGFuY2VfaW5kZXg7CisgICAgICBGVF9WYXJfTmFtZWRfU3R5bGUqICBuYW1lZF9zdHlsZTsKKworCisgICAgICBpbnN0YW5jZV9pbmRleCA9IChGVF9VSW50KWZhY2UtPnJvb3QuZmFjZV9pbmRleCA+PiAxNjsKKyAgICAgIG5hbWVkX3N0eWxlICAgID0gbW12YXItPm5hbWVkc3R5bGUgKyBpbnN0YW5jZV9pbmRleCAtIDE7CisKKyAgICAgIG4gPSBuYW1lZF9zdHlsZS0+Y29vcmRzICsgbnVtX2Nvb3JkczsKKyAgICAgIGZvciAoIDsgaSA8IG1tdmFyLT5udW1fYXhpczsgaSsrLCBuKyssIGMrKyApCisgICAgICB7CisgICAgICAgIGlmICggKmMgIT0gKm4gKQorICAgICAgICB7CisgICAgICAgICAgKmMgICAgICAgID0gKm47CisgICAgICAgICAgaGF2ZV9kaWZmID0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgRlRfVmFyX0F4aXMqICBhOworCisKKyAgICAgIGEgPSBtbXZhci0+YXhpcyArIG51bV9jb29yZHM7CisgICAgICBmb3IgKCA7IGkgPCBtbXZhci0+bnVtX2F4aXM7IGkrKywgYSsrLCBjKysgKQorICAgICAgeworICAgICAgICBpZiAoICpjICE9IGEtPmRlZiApCisgICAgICAgIHsKKyAgICAgICAgICAqYyAgICAgICAgPSBhLT5kZWY7CisgICAgICAgICAgaGF2ZV9kaWZmID0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIHJldHVybiB2YWx1ZSAtMSBpbmRpY2F0ZXMgYG5vIGNoYW5nZSc7ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogd2UgY2FuIGV4aXQgZWFybHkgaWYgYG5vcm1hbGl6ZWRjb29yZHMnIGlzIGFscmVhZHkgY29tcHV0ZWQgKi8KKyAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzICYmICFoYXZlX2RpZmYgKQorICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIG5vcm1hbGl6ZWQsIG1tdmFyLT5udW1fYXhpcyApICkKICAgICAgIGdvdG8gRXhpdDsKQEAgLTI2MzEsOSArMjgzMiwxOCBAQAogICAgIGlmICggIWZhY2UtPmJsZW5kLT5hdmFyX2xvYWRlZCApCiAgICAgICBmdF92YXJfbG9hZF9hdmFyKCBmYWNlICk7CiAKLSAgICBmdF92YXJfdG9fbm9ybWFsaXplZCggZmFjZSwgbnVtX2Nvb3JkcywgY29vcmRzLCBub3JtYWxpemVkICk7CisgICAgRlRfVFJBQ0U1KCggIlRUX1NldF9WYXJfRGVzaWduOlxuIgorICAgICAgICAgICAgICAgICIgIG5vcm1hbGl6ZWQgZGVzaWduIGNvb3JkaW5hdGVzOlxuIiApKTsKKyAgICBmdF92YXJfdG9fbm9ybWFsaXplZCggZmFjZSwgbnVtX2Nvb3JkcywgYmxlbmQtPmNvb3Jkcywgbm9ybWFsaXplZCApOwogCiAgICAgZXJyb3IgPSB0dF9zZXRfbW1fYmxlbmQoIGZhY2UsIG1tdmFyLT5udW1fYXhpcywgbm9ybWFsaXplZCwgMCApOworICAgIGlmICggZXJyb3IgKQorICAgICAgZ290byBFeGl0OworCisgICAgaWYgKCBudW1fY29vcmRzICkKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OOworICAgIGVsc2UKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX1ZBUklBVElPTjsKIAogICBFeGl0OgogICAgIEZUX0ZSRUUoIG5vcm1hbGl6ZWQgKTsKQEAgLTI2ODEsNiArMjg5MSwxNCBAQAogCiAgICAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKIAorICAgIGlmICggIWJsZW5kLT5jb29yZHMgKQorICAgIHsKKyAgICAgIC8qIHNlbGVjdCBkZWZhdWx0IGluc3RhbmNlIGNvb3JkaW5hdGVzICovCisgICAgICAvKiBpZiBubyBpbnN0YW5jZSBpcyBzZWxlY3RlZCB5ZXQgICAgICAqLworICAgICAgaWYgKCBGVF9TRVRfRVJST1IoIHR0X3NldF9tbV9ibGVuZCggZmFjZSwgMCwgTlVMTCwgMSApICkgKQorICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgfQorCiAgICAgbmMgPSBudW1fY29vcmRzOwogICAgIGlmICggbnVtX2Nvb3JkcyA+IGJsZW5kLT5udW1fYXhpcyApCiAgICAgewpAQCAtMjcwOSw2ICsyOTI3LDkwIEBACiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUVF9TZXRfTmFtZWRfSW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZXQgdGhlIGdpdmVuIG5hbWVkIGluc3RhbmNlLCBhbHNvIHJlc2V0dGluZyBhbnkgZnVydGhlciAgICAgICAgICAgKi8KKyAgLyogICAgdmFyaWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBpbnN0YW5jZV9pbmRleCA6OiBUaGUgaW5zdGFuY2UgaW5kZXgsIHN0YXJ0aW5nIHdpdGggdmFsdWUgMS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgVmFsdWUgMCBpbmRpY2F0ZXMgdG8gbm90IHVzZSBhbiBpbnN0YW5jZS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVFRfU2V0X05hbWVkX0luc3RhbmNlKCBUVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGluc3RhbmNlX2luZGV4ICkKKyAgeworICAgIEZUX0Vycm9yICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgR1hfQmxlbmQgICAgYmxlbmQ7CisgICAgRlRfTU1fVmFyKiAgbW12YXI7CisKKyAgICBGVF9VSW50ICBudW1faW5zdGFuY2VzOworCisKKyAgICBpZiAoICFmYWNlLT5ibGVuZCApCisgICAgeworICAgICAgaWYgKCBGVF9TRVRfRVJST1IoIFRUX0dldF9NTV9WYXIoIGZhY2UsIE5VTEwgKSApICkKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIGJsZW5kID0gZmFjZS0+YmxlbmQ7CisgICAgbW12YXIgPSBibGVuZC0+bW12YXI7CisKKyAgICBudW1faW5zdGFuY2VzID0gKEZUX1VJbnQpZmFjZS0+cm9vdC5zdHlsZV9mbGFncyA+PiAxNjsKKworICAgIC8qIGBpbnN0YW5jZV9pbmRleCcgc3RhcnRzIHdpdGggdmFsdWUgMSwgdGh1cyBgPicgKi8KKyAgICBpZiAoIGluc3RhbmNlX2luZGV4ID4gbnVtX2luc3RhbmNlcyApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIGluc3RhbmNlX2luZGV4ID4gMCAmJiBtbXZhci0+bmFtZWRzdHlsZSApCisgICAgeworICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnkgPSBmYWNlLT5yb290Lm1lbW9yeTsKKyAgICAgIFNGTlRfU2VydmljZSAgc2ZudCAgID0gKFNGTlRfU2VydmljZSlmYWNlLT5zZm50OworCisgICAgICBGVF9WYXJfTmFtZWRfU3R5bGUqICBuYW1lZF9zdHlsZTsKKyAgICAgIEZUX1N0cmluZyogICAgICAgICAgIHN0eWxlX25hbWU7CisKKworICAgICAgbmFtZWRfc3R5bGUgPSBtbXZhci0+bmFtZWRzdHlsZSArIGluc3RhbmNlX2luZGV4IC0gMTsKKworICAgICAgZXJyb3IgPSBzZm50LT5nZXRfbmFtZSggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9VU2hvcnQpbmFtZWRfc3R5bGUtPnN0cmlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlX25hbWUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIC8qIHNldCAob3IgcmVwbGFjZSkgc3R5bGUgbmFtZSAqLworICAgICAgRlRfRlJFRSggZmFjZS0+cm9vdC5zdHlsZV9uYW1lICk7CisgICAgICBmYWNlLT5yb290LnN0eWxlX25hbWUgPSBzdHlsZV9uYW1lOworCisgICAgICAvKiBmaW5hbGx5LCBzZWxlY3QgdGhlIG5hbWVkIGluc3RhbmNlICovCisgICAgICBlcnJvciA9IFRUX1NldF9WYXJfRGVzaWduKCBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW12YXItPm51bV9heGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRfc3R5bGUtPmNvb3JkcyApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisgICAgZWxzZQorICAgICAgZXJyb3IgPSBUVF9TZXRfVmFyX0Rlc2lnbiggZmFjZSwgMCwgTlVMTCApOworCisgICAgZmFjZS0+cm9vdC5mYWNlX2luZGV4ICA9ICggaW5zdGFuY2VfaW5kZXggPDwgMTYgKSAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggZmFjZS0+cm9vdC5mYWNlX2luZGV4ICYgMHhGRkZGTCApOworICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX1ZBUklBVElPTjsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KICAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgR1ggVkFSIFBBUlNJTkcgUk9VVElORVMgICAgICAgICAgICAgICAgICAgKioqKiovCkBAIC0yNzU0LDggKzMwNTYsMTAgQEAKICAgICBGVF9GaXhlZCogICBpbV9zdGFydF9jb29yZHMgPSBOVUxMOwogICAgIEZUX0ZpeGVkKiAgIGltX2VuZF9jb29yZHMgICA9IE5VTEw7CiAgICAgR1hfQmxlbmQgICAgYmxlbmQgICAgICAgICAgID0gZmFjZS0+YmxlbmQ7Ci0gICAgRlRfVUludCAgICAgcG9pbnRfY291bnQ7Ci0gICAgRlRfVVNob3J0KiAgbG9jYWxwb2ludHM7CisgICAgRlRfVUludCAgICAgcG9pbnRfY291bnQsIHNwb2ludF9jb3VudCA9IDA7CisgICAgRlRfVVNob3J0KiAgc2hhcmVkcG9pbnRzID0gTlVMTDsKKyAgICBGVF9VU2hvcnQqICBsb2NhbHBvaW50cyAgPSBOVUxMOworICAgIEZUX1VTaG9ydCogIHBvaW50czsKICAgICBGVF9TaG9ydCogICBkZWx0YXM7CiAKIApAQCAtMjgyNCwxMSArMzEyOCwyNCBAQAogCiAgICAgb2Zmc2V0VG9EYXRhICs9IHRhYmxlX3N0YXJ0OwogCi0gICAgLyogVGhlIGRvY3VtZW50YXRpb24gaW1wbGllcyB0aGVyZSBhcmUgZmxhZ3MgcGFja2VkIGludG8gICAgICAgICAgICAgICovCi0gICAgLyogYHR1cGxlQ291bnQnLCBidXQgSm9obiBKZW5raW5zIHNheXMgdGhhdCBzaGFyZWQgcG9pbnRzIGRvbid0IGFwcGx5ICovCi0gICAgLyogdG8gYGN2YXInLCBhbmQgbm8gb3RoZXIgZmxhZ3MgYXJlIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVTX1NIQVJFX1BPSU5UX05VTUJFUlMgKQorICAgIHsKKyAgICAgIGhlcmUgPSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApOwogCi0gICAgRlRfVFJBQ0U1KCggImN2YXI6IHRoZXJlIGFyZSAlZCB0dXBsZXM6XG4iLCB0dXBsZUNvdW50ICYgMHhGRkYgKSk7CisgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmZzZXRUb0RhdGEgKTsKKworICAgICAgc2hhcmVkcG9pbnRzID0gZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMoIHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwb2ludF9jb3VudCApOworICAgICAgb2Zmc2V0VG9EYXRhID0gRlRfU3RyZWFtX0ZUZWxsKCBzdHJlYW0gKTsKKworICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgaGVyZSApOworICAgIH0KKworICAgIEZUX1RSQUNFNSgoICJjdmFyOiB0aGVyZSAlcyAlZCB0dXBsZSVzOlxuIiwKKyAgICAgICAgICAgICAgICAoIHR1cGxlQ291bnQgJiAweEZGRiApID09IDEgPyAiaXMiIDogImFyZSIsCisgICAgICAgICAgICAgICAgdHVwbGVDb3VudCAmIDB4RkZGLAorICAgICAgICAgICAgICAgICggdHVwbGVDb3VudCAmIDB4RkZGICkgPT0gMSA/ICIiIDogInMiICkpOwogCiAgICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiAweEZGRiApOyBpKysgKQogICAgIHsKQEAgLTI4NDIsMjYgKzMxNTksMjUgQEAKICAgICAgIHR1cGxlRGF0YVNpemUgPSBGVF9HRVRfVVNIT1JUKCk7CiAgICAgICB0dXBsZUluZGV4ICAgID0gRlRfR0VUX1VTSE9SVCgpOwogCi0gICAgICAvKiBUaGVyZSBpcyBubyBwcm92aXNpb24gaGVyZSBmb3IgYSBnbG9iYWwgdHVwbGUgY29vcmRpbmF0ZSBzZWN0aW9uLCAqLwotICAgICAgLyogc28gSm9obiBzYXlzLiAgVGhlcmUgYXJlIG5vIHR1cGxlIGluZGljZXMsIGp1c3QgZW1iZWRkZWQgdHVwbGVzLiAgKi8KLQogICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfRU1CRURERURfVFVQTEVfQ09PUkQgKQogICAgICAgewogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGJsZW5kLT5udW1fYXhpczsgaisrICkKICAgICAgICAgICB0dXBsZV9jb29yZHNbal0gPSBGVF9HRVRfU0hPUlQoKSAqIDQ7ICAvKiBjb252ZXJ0IGZyb20gICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2hvcnQgZnJhYyB0byBmaXhlZCAqLwogICAgICAgfQotICAgICAgZWxzZQorICAgICAgZWxzZSBpZiAoICggdHVwbGVJbmRleCAmIEdYX1RJX1RVUExFX0lOREVYX01BU0sgKSA+PSBibGVuZC0+dHVwbGVjb3VudCApCiAgICAgICB7Ci0gICAgICAgIC8qIHNraXAgdGhpcyB0dXBsZTsgaXQgbWFrZXMgbm8gc2Vuc2UgKi8KKyAgICAgICAgRlRfVFJBQ0UyKCggInR0X2ZhY2VfdmFyeV9jdnQ6IgorICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgdHVwbGUgaW5kZXhcbiIgKSk7CiAKLSAgICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfSU5URVJNRURJQVRFX1RVUExFICkKLSAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IDIgKiBibGVuZC0+bnVtX2F4aXM7IGorKyApCi0gICAgICAgICAgICAodm9pZClGVF9HRVRfU0hPUlQoKTsKLQotICAgICAgICBvZmZzZXRUb0RhdGEgKz0gdHVwbGVEYXRhU2l6ZTsKLSAgICAgICAgY29udGludWU7CisgICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICAgICAgZ290byBFeGl0OwogICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBGVF9NRU1fQ09QWSgKKyAgICAgICAgICB0dXBsZV9jb29yZHMsCisgICAgICAgICAgJmJsZW5kLT50dXBsZWNvb3Jkc1soIHR1cGxlSW5kZXggJiAweEZGRiApICogYmxlbmQtPm51bV9heGlzXSwKKyAgICAgICAgICBibGVuZC0+bnVtX2F4aXMgKiBzaXplb2YgKCBGVF9GaXhlZCApICk7CiAKICAgICAgIGlmICggdHVwbGVJbmRleCAmIEdYX1RJX0lOVEVSTUVESUFURV9UVVBMRSApCiAgICAgICB7CkBAIC0yODc2LDExICszMTkyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHMgKTsKLSAgICAgIGlmICggLyogdHVwbGUgaXNuJ3QgYWN0aXZlIGZvciBvdXIgYmxlbmQgKi8KLSAgICAgICAgICAgYXBwbHkgPT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8Ci0gICAgICAgICAgIC8qIGdsb2JhbCBwb2ludHMgbm90IGFsbG93ZWQsICAgICAgICAgICAqLwotICAgICAgICAgICAvKiBpZiB0aGV5IGFyZW4ndCBsb2NhbCwgbWFrZXMgbm8gc2Vuc2UgKi8KLSAgICAgICAgICAgISggdHVwbGVJbmRleCAmIEdYX1RJX1BSSVZBVEVfUE9JTlRfTlVNQkVSUyApICkKKworICAgICAgaWYgKCBhcHBseSA9PSAwICkgICAgICAgICAgICAgIC8qIHR1cGxlIGlzbid0IGFjdGl2ZSBmb3Igb3VyIGJsZW5kICovCiAgICAgICB7CiAgICAgICAgIG9mZnNldFRvRGF0YSArPSB0dXBsZURhdGFTaXplOwogICAgICAgICBjb250aW51ZTsKQEAgLTI4OTAsMTQgKzMyMDMsMjcgQEAKIAogICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgb2Zmc2V0VG9EYXRhICk7CiAKLSAgICAgIGxvY2FscG9pbnRzID0gZnRfdmFyX3JlYWRwYWNrZWRwb2ludHMoIHN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2ludF9jb3VudCApOwotICAgICAgZGVsdGFzICAgICAgPSBmdF92YXJfcmVhZHBhY2tlZGRlbHRhcyggc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfY291bnQgPT0gMCA/IGZhY2UtPmN2dF9zaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcG9pbnRfY291bnQgKTsKLSAgICAgIGlmICggIWxvY2FscG9pbnRzIHx8ICFkZWx0YXMgKQorICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfUFJJVkFURV9QT0lOVF9OVU1CRVJTICkKKyAgICAgIHsKKyAgICAgICAgbG9jYWxwb2ludHMgPSBmdF92YXJfcmVhZHBhY2tlZHBvaW50cyggc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2ludF9jb3VudCApOworICAgICAgICBwb2ludHMgICAgICA9IGxvY2FscG9pbnRzOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBwb2ludHMgICAgICA9IHNoYXJlZHBvaW50czsKKyAgICAgICAgcG9pbnRfY291bnQgPSBzcG9pbnRfY291bnQ7CisgICAgICB9CisKKyAgICAgIGRlbHRhcyA9IGZ0X3Zhcl9yZWFkcGFja2VkZGVsdGFzKCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50X2NvdW50ID09IDAgPyBmYWNlLT5jdnRfc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwb2ludF9jb3VudCApOworCisgICAgICBpZiAoICFwb2ludHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICFkZWx0YXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICggbG9jYWxwb2ludHMgPT0gQUxMX1BPSU5UUyAmJiBwb2ludF9jb3VudCAhPSBmYWNlLT5jdnRfc2l6ZSApICkKICAgICAgICAgOyAvKiBmYWlsdXJlLCBpZ25vcmUgaXQgKi8KIAogICAgICAgZWxzZSBpZiAoIGxvY2FscG9pbnRzID09IEFMTF9QT0lOVFMgKQpAQCAtMjk0OSw3ICszMjc1LDcgQEAKICAgICAgICAgICBGVF9Mb25nICBvcmlnX2N2dDsKIAogCi0gICAgICAgICAgcGluZGV4ID0gbG9jYWxwb2ludHNbal07CisgICAgICAgICAgcGluZGV4ID0gcG9pbnRzW2pdOwogICAgICAgICAgIGlmICggKEZUX1VMb25nKXBpbmRleCA+PSBmYWNlLT5jdnRfc2l6ZSApCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMjk4OCw2ICszMzE0LDggQEAKICAgICBGVF9GUkFNRV9FWElUKCk7CiAKICAgRXhpdDoKKyAgICBpZiAoIHNoYXJlZHBvaW50cyAhPSBBTExfUE9JTlRTICkKKyAgICAgIEZUX0ZSRUUoIHNoYXJlZHBvaW50cyApOwogICAgIEZUX0ZSRUUoIHR1cGxlX2Nvb3JkcyApOwogICAgIEZUX0ZSRUUoIGltX3N0YXJ0X2Nvb3JkcyApOwogICAgIEZUX0ZSRUUoIGltX2VuZF9jb29yZHMgKTsKQEAgLTMwNzYsMjUgKzM0MDQsMTIgQEAKICAgICAgIGQxICAgPSBvdXQxIC0gaW4xOwogICAgICAgZDIgICA9IG91dDIgLSBpbjI7CiAKLSAgICAgIGlmICggb3V0MSA9PSBvdXQyIHx8IGluMSA9PSBpbjIgKQorICAgICAgLyogSWYgdGhlIHJlZmVyZW5jZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSBjb29yZGluYXRlIGJ1dCBkaWZmZXJlbnQgKi8KKyAgICAgIC8qIGRlbHRhLCBpbmZlcnJlZCBkZWx0YSBpcyB6ZXJvLiAgT3RoZXJ3aXNlIGludGVycG9sYXRlLiAgICAgICAgICovCisgICAgICBpZiAoIGluMSAhPSBpbjIgfHwgb3V0MSA9PSBvdXQyICkKICAgICAgIHsKLSAgICAgICAgZm9yICggcCA9IHAxOyBwIDw9IHAyOyBwKysgKQotICAgICAgICB7Ci0gICAgICAgICAgb3V0ID0gaW5fcG9pbnRzW3BdLng7Ci0KLSAgICAgICAgICBpZiAoIG91dCA8PSBpbjEgKQotICAgICAgICAgICAgb3V0ICs9IGQxOwotICAgICAgICAgIGVsc2UgaWYgKCBvdXQgPj0gaW4yICkKLSAgICAgICAgICAgIG91dCArPSBkMjsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQgPSBvdXQxOwotCi0gICAgICAgICAgb3V0X3BvaW50c1twXS54ID0gb3V0OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIEZUX0ZpeGVkICBzY2FsZSA9IEZUX0RpdkZpeCggb3V0MiAtIG91dDEsIGluMiAtIGluMSApOworICAgICAgICBGVF9GaXhlZCAgc2NhbGUgPSBpbjEgIT0gaW4yID8gRlRfRGl2Rml4KCBvdXQyIC0gb3V0MSwgaW4yIC0gaW4xICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CiAKIAogICAgICAgICBmb3IgKCBwID0gcDE7IHAgPD0gcDI7IHArKyApCkBAIC0zMjg3LDcgKzM2MDIsNiBAQAogICAgIGdseXBoX3N0YXJ0ID0gRlRfU3RyZWFtX0ZUZWxsKCBzdHJlYW0gKTsKIAogICAgIC8qIGVhY2ggc2V0IG9mIGdseXBoIHZhcmlhdGlvbiBkYXRhIGlzIGZvcm1hdHRlZCBzaW1pbGFybHkgdG8gYGN2YXInICovCi0gICAgLyogKGV4Y2VwdCB3ZSBnZXQgc2hhcmVkIHBvaW50cyBhbmQgZ2xvYmFsIHR1cGxlcykgICAgICAgICAgICAgICAgICAgKi8KIAogICAgIGlmICggRlRfTkVXX0FSUkFZKCB0dXBsZV9jb29yZHMsIGJsZW5kLT5udW1fYXhpcyApICAgIHx8CiAgICAgICAgICBGVF9ORVdfQVJSQVkoIGltX3N0YXJ0X2Nvb3JkcywgYmxlbmQtPm51bV9heGlzICkgfHwKQEAgLTMzMjQsOCArMzYzOCwxMCBAQAogICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgaGVyZSApOwogICAgIH0KIAotICAgIEZUX1RSQUNFNSgoICJndmFyOiB0aGVyZSBhcmUgJWQgdHVwbGVzOlxuIiwKLSAgICAgICAgICAgICAgICB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyApKTsKKyAgICBGVF9UUkFDRTUoKCAiZ3ZhcjogdGhlcmUgJXMgJWQgdHVwbGUlczpcbiIsCisgICAgICAgICAgICAgICAgKCB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyApID09IDEgPyAiaXMiIDogImFyZSIsCisgICAgICAgICAgICAgICAgdHVwbGVDb3VudCAmIEdYX1RDX1RVUExFX0NPVU5UX01BU0ssCisgICAgICAgICAgICAgICAgKCB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyApID09IDEgPyAiIiA6ICJzIiApKTsKIAogICAgIGZvciAoIGogPSAwOyBqIDwgbl9wb2ludHM7IGorKyApCiAgICAgICBwb2ludHNfb3JnW2pdID0gb3V0bGluZS0+cG9pbnRzW2pdOwpAQCAtMzQyNyw3ICszNzQzLDcgQEAKICAgICAgICAgICBGVF9Qb3MgIGRlbHRhX3kgPSBGVF9NdWxGaXgoIGRlbHRhc195W2pdLCBhcHBseSApOwogCiAKLSAgICAgICAgICBpZiAoIGogPCBuX3BvaW50cyAtIDMgKQorICAgICAgICAgIGlmICggaiA8IG5fcG9pbnRzIC0gNCApCiAgICAgICAgICAgewogICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gZGVsdGFfeDsKICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CkBAIC0zNDM3LDI1ICszNzUzLDI1IEBACiAgICAgICAgICAgICAvKiBUbyBhdm9pZCBkb3VibGUgYWRqdXN0bWVudCBvZiBhZHZhbmNlIHdpZHRoIG9yIGhlaWdodCwgKi8KICAgICAgICAgICAgIC8qIGFkanVzdCBwaGFudG9tIHBvaW50cyBvbmx5IGlmIHRoZXJlIGlzIG5vIEhWQVIgb3IgVlZBUiAqLwogICAgICAgICAgICAgLyogc3VwcG9ydCwgcmVzcGVjdGl2ZWx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIGogPT0gKCBuX3BvaW50cyAtIDMgKSAgICAgICAgICAmJgotICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAgICYKLSAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9IQURWQU5DRSApICkKKyAgICAgICAgICAgIGlmICggaiA9PSAoIG5fcG9pbnRzIC0gNCApICAgICAgICAmJgorICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmCisgICAgICAgICAgICAgICAgICAgIFRUX0ZBQ0VfRkxBR19WQVJfTFNCICAgICkgKQorICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OworCisgICAgICAgICAgICBlbHNlIGlmICggaiA9PSAoIG5fcG9pbnRzIC0gMyApICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9IQURWQU5DRSApICkKICAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gZGVsdGFfeDsKIAogICAgICAgICAgICAgZWxzZSBpZiAoIGogPT0gKCBuX3BvaW50cyAtIDIgKSAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9MU0IgICAgKSApCi0gICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54ICs9IGRlbHRhX3g7CisgICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9UU0IgICAgKSApCisgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CiAKICAgICAgICAgICAgIGVsc2UgaWYgKCBqID09ICggbl9wb2ludHMgLSAxICkgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAgICYKICAgICAgICAgICAgICAgICAgICAgICAgICBUVF9GQUNFX0ZMQUdfVkFSX1ZBRFZBTkNFICkgKQogICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSArPSBkZWx0YV95OwotCi0gICAgICAgICAgICBlbHNlIGlmICggaiA9PSAoIG5fcG9pbnRzIC0gMCApICAgICAgICAmJgotICAgICAgICAgICAgICAgICAgICAgICEoIGZhY2UtPnZhcmlhdGlvbl9zdXBwb3J0ICYKLSAgICAgICAgICAgICAgICAgICAgICAgICBUVF9GQUNFX0ZMQUdfVkFSX1RTQiAgICApICkKLSAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKz0gZGVsdGFfeTsKICAgICAgICAgICB9CiAKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQpAQCAtMzUyMiw4ICszODM4LDM2IEBACiAgICAgICAgICAgRlRfUG9zICBkZWx0YV95ID0gcG9pbnRzX291dFtqXS55IC0gcG9pbnRzX29yZ1tqXS55OwogCiAKLSAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OwotICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CisgICAgICAgICAgaWYgKCBqIDwgbl9wb2ludHMgLSA0ICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OworICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKz0gZGVsdGFfeTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRvIGF2b2lkIGRvdWJsZSBhZGp1c3RtZW50IG9mIGFkdmFuY2Ugd2lkdGggb3IgaGVpZ2h0LCAqLworICAgICAgICAgICAgLyogYWRqdXN0IHBoYW50b20gcG9pbnRzIG9ubHkgaWYgdGhlcmUgaXMgbm8gSFZBUiBvciBWVkFSICovCisgICAgICAgICAgICAvKiBzdXBwb3J0LCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggaiA9PSAoIG5fcG9pbnRzIC0gNCApICAgICAgICAmJgorICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmCisgICAgICAgICAgICAgICAgICAgIFRUX0ZBQ0VfRkxBR19WQVJfTFNCICAgICkgKQorICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OworCisgICAgICAgICAgICBlbHNlIGlmICggaiA9PSAoIG5fcG9pbnRzIC0gMyApICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgICAgISggZmFjZS0+dmFyaWF0aW9uX3N1cHBvcnQgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9IQURWQU5DRSApICkKKyAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gZGVsdGFfeDsKKworICAgICAgICAgICAgZWxzZSBpZiAoIGogPT0gKCBuX3BvaW50cyAtIDIgKSAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgVFRfRkFDRV9GTEFHX1ZBUl9UU0IgICAgKSApCisgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CisKKyAgICAgICAgICAgIGVsc2UgaWYgKCBqID09ICggbl9wb2ludHMgLSAxICkgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAhKCBmYWNlLT52YXJpYXRpb25fc3VwcG9ydCAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICBUVF9GQUNFX0ZMQUdfVkFSX1ZBRFZBTkNFICkgKQorICAgICAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSArPSBkZWx0YV95OworICAgICAgICAgIH0KIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAgICAgICAgICAgaWYgKCBkZWx0YV94IHx8IGRlbHRhX3kgKQpAQCAtMzY5MSw2ICs0MDM1LDE2IEBACiAgICAgICAgIEZUX0ZSRUUoIGJsZW5kLT5odmFyX3RhYmxlICk7CiAgICAgICB9CiAKKyAgICAgIGlmICggYmxlbmQtPnZ2YXJfdGFibGUgKQorICAgICAgeworICAgICAgICBmdF92YXJfZG9uZV9pdGVtX3ZhcmlhdGlvbl9zdG9yZSggZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZibGVuZC0+dnZhcl90YWJsZS0+aXRlbVN0b3JlICk7CisKKyAgICAgICAgRlRfRlJFRSggYmxlbmQtPnZ2YXJfdGFibGUtPndpZHRoTWFwLmlubmVySW5kZXggKTsKKyAgICAgICAgRlRfRlJFRSggYmxlbmQtPnZ2YXJfdGFibGUtPndpZHRoTWFwLm91dGVySW5kZXggKTsKKyAgICAgICAgRlRfRlJFRSggYmxlbmQtPnZ2YXJfdGFibGUgKTsKKyAgICAgIH0KKwogICAgICAgaWYgKCBibGVuZC0+bXZhcl90YWJsZSApCiAgICAgICB7CiAgICAgICAgIGZ0X3Zhcl9kb25lX2l0ZW1fdmFyaWF0aW9uX3N0b3JlKCBmYWNlLApAQCAtMzcwNiw3ICs0MDYwLDEyIEBACiAgICAgfQogICB9CiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUICovCisjZWxzZSAvKiAhVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCAqLworCisgIC8qIEFOU0kgQyBkb2Vzbid0IGxpa2UgZW1wdHkgc291cmNlIGZpbGVzICovCisgIHR5cGVkZWYgaW50ICBfdHRfZ3h2YXJfZHVtbXk7CisKKyNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaCBiL3NyYy90cnVldHlwZS90dGd4dmFyLmgKaW5kZXggN2U4MTcxOS4uYTM3YmI5MCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdYIEZvbnQgVmFyaWF0aW9uIGxvYWRlciAoc3BlY2lmaWNhdGlvbikgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcgYW5kIEdlb3JnZSBXaWxsaWFtcy4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNyw2ICsyNyw4IEBACiBGVF9CRUdJTl9IRUFERVIKIAogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MDIsNiArNDA0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCogIGNvb3JkcyApOwogCiAgIEZUX0xPQ0FMKCBGVF9FcnJvciApCisgIFRUX1NldF9OYW1lZF9JbnN0YW5jZSggVFRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBpbnN0YW5jZV9pbmRleCApOworCisgIEZUX0xPQ0FMKCBGVF9FcnJvciApCiAgIHR0X2ZhY2VfdmFyeV9jdnQoIFRUX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICBzdHJlYW0gKTsKIApAQCAtNDM1LDYgKzQ0MSw4IEBACiAgIEZUX0xPQ0FMKCB2b2lkICkKICAgdHRfZG9uZV9ibGVuZCggVFRfRmFjZSAgZmFjZSApOwogCisjZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVCAqLworCiAKIEZUX0VORF9IRUFERVIKIApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYwppbmRleCA1ZDRmZDA5Li41NTFmMTRhIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0FMQ19ICiAjaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAogI2luY2x1ZGUgRlRfU1lTVEVNX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogI2luY2x1ZGUgRlRfTVVMVElQTEVfTUFTVEVSU19ICiAKICNpbmNsdWRlICJ0dGludGVycC5oIgpAQCAtNjUsMTEgKzY1LDE1IEBACiAgICAgICAgICAgICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICkKICNlbmRpZgogCi0jZGVmaW5lIFBST0pFQ1QoIHYxLCB2MiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGV4Yy0+ZnVuY19wcm9qZWN0KCBleGMsICh2MSktPnggLSAodjIpLT54LCAodjEpLT55IC0gKHYyKS0+eSApCisjZGVmaW5lIFBST0pFQ1QoIHYxLCB2MiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QoIGV4YywgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9MT05HKCAodjEpLT54LCAodjIpLT54ICksICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9MT05HKCAodjEpLT55LCAodjIpLT55ICkgKQogCi0jZGVmaW5lIERVQUxQUk9KKCB2MSwgdjIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBleGMtPmZ1bmNfZHVhbHByb2ooIGV4YywgKHYxKS0+eCAtICh2MiktPngsICh2MSktPnkgLSAodjIpLT55ICkKKyNkZWZpbmUgRFVBTFBST0ooIHYxLCB2MiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZXhjLT5mdW5jX2R1YWxwcm9qKCBleGMsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VCX0xPTkcoICh2MSktPngsICh2MiktPnggKSwgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQl9MT05HKCAodjEpLT55LCAodjIpLT55ICkgKQogCiAjZGVmaW5lIEZBU1RfUFJPSkVDVCggdiApICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QoIGV4YywgKHYpLT54LCAodiktPnkgKQpAQCAtNDAyLDcgKzQwNiw3IEBACiAgICAgICBleGVjLT5JRGVmcyAgICAgID0gc2l6ZS0+aW5zdHJ1Y3Rpb25fZGVmczsKICAgICAgIGV4ZWMtPnBvaW50U2l6ZSAgPSBzaXplLT5wb2ludF9zaXplOwogICAgICAgZXhlYy0+dHRfbWV0cmljcyA9IHNpemUtPnR0bWV0cmljczsKLSAgICAgIGV4ZWMtPm1ldHJpY3MgICAgPSBzaXplLT5tZXRyaWNzOworICAgICAgZXhlYy0+bWV0cmljcyAgICA9ICpzaXplLT5tZXRyaWNzOwogCiAgICAgICBleGVjLT5tYXhGdW5jICAgID0gc2l6ZS0+bWF4X2Z1bmM7CiAgICAgICBleGVjLT5tYXhJbnMgICAgID0gc2l6ZS0+bWF4X2luczsKQEAgLTE2NTYsNyArMTY2MCw3IEBACiAgIC8qICAgIHpvbmUgICAgIDo6IFRoZSBhZmZlY3RlZCBnbHlwaCB6b25lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gICAgICAqLworICAvKiAgICBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZS4gICAgICAgKi8KICAgLyogICAgYFRvdWNoZXMnIHRoZSBwb2ludC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBzdGF0aWMgdm9pZApAQCAtMTY3Niw3ICsxNjgwLDEwIEBACiAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19BTExPV19YX0RNT1ZFICkgKSApCi0gICAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKyAgICAgICAgem9uZS0+Y3VyW3BvaW50XS54ID0gQUREX0xPTkcoIHpvbmUtPmN1cltwb2ludF0ueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+Rl9kb3RfUCApICk7CiAgICAgICBlbHNlCiAjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIApAQCAtMTY4NCwxMyArMTY5MSwxOSBAQAogICAgICAgLyogRXhjZXB0aW9uIHRvIHRoZSBwb3N0LUlVUCBjdXJmZXc6IEFsbG93IHRoZSB4IGNvbXBvbmVudCBvZiAqLwogICAgICAgLyogZGlhZ29uYWwgbW92ZXMsIGJ1dCBvbmx5IHBvc3QtSVVQLiAgRGVqYVZ1IHRyaWVzIHRvIGFkanVzdCAqLwogICAgICAgLyogZGlhZ29uYWwgc3RlbXMgbGlrZSBvbiBgWicgYW5kIGB6JyBwb3N0LUlVUC4gICAgICAgICAgICAgICAqLwotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgJiYgIWV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgKQotICAgICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAmJiAhZXhjLT5iYWNrd2FyZF9jb21wYXRpYmlsaXR5ICkKKyAgICAgICAgem9uZS0+Y3VyW3BvaW50XS54ID0gQUREX0xPTkcoIHpvbmUtPmN1cltwb2ludF0ueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+Rl9kb3RfUCApICk7CiAgICAgICBlbHNlCiAjZW5kaWYKIAogICAgICAgaWYgKCBOT19TVUJQSVhFTF9ISU5USU5HICkKLSAgICAgICAgem9uZS0+Y3VyW3BvaW50XS54ICs9IEZUX011bERpdiggZGlzdGFuY2UsIHYsIGV4Yy0+Rl9kb3RfUCApOworICAgICAgICB6b25lLT5jdXJbcG9pbnRdLnggPSBBRERfTE9ORyggem9uZS0+Y3VyW3BvaW50XS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5GX2RvdF9QICkgKTsKIAogICAgICAgem9uZS0+dGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1g7CiAgICAgfQpAQCAtMTcwMCwxMiArMTcxMywxNSBAQAogICAgIGlmICggdiAhPSAwICkKICAgICB7CiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKLSAgICAgIGlmICggISggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgotICAgICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICYmCi0gICAgICAgICAgICAgIGV4Yy0+aXVweF9jYWxsZWQgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICApICkKKyAgICAgIGlmICggISggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICYmCisgICAgICAgICAgICAgIGV4Yy0+YmFja3dhcmRfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICkgKQogI2VuZGlmCi0gICAgICAgIHpvbmUtPmN1cltwb2ludF0ueSArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKyAgICAgICAgem9uZS0+Y3VyW3BvaW50XS55ID0gQUREX0xPTkcoIHpvbmUtPmN1cltwb2ludF0ueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+Rl9kb3RfUCApICk7CiAKICAgICAgIHpvbmUtPnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwogICAgIH0KQEAgLTE3NDEsMTIgKzE3NTcsMTggQEAKICAgICB2ID0gZXhjLT5HUy5mcmVlVmVjdG9yLng7CiAKICAgICBpZiAoIHYgIT0gMCApCi0gICAgICB6b25lLT5vcmdbcG9pbnRdLnggKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CisgICAgICB6b25lLT5vcmdbcG9pbnRdLnggPSBBRERfTE9ORyggem9uZS0+b3JnW3BvaW50XS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5GX2RvdF9QICkgKTsKIAogICAgIHYgPSBleGMtPkdTLmZyZWVWZWN0b3IueTsKIAogICAgIGlmICggdiAhPSAwICkKLSAgICAgIHpvbmUtPm9yZ1twb2ludF0ueSArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKyAgICAgIHpvbmUtPm9yZ1twb2ludF0ueSA9IEFERF9MT05HKCB6b25lLT5vcmdbcG9pbnRdLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBkaXN0YW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkZfZG90X1AgKSApOwogICB9CiAKIApAQCAtMTc1Niw3ICsxNzc4LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgVGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBhcmUgdXNlZCB3aGVuZXZlciBib3RoIHZlY3RvcnMgYXJlIGJvdGggICAgICAqLwogICAvKiAgIGFsb25nIG9uZSBvZiB0aGUgY29vcmRpbmF0ZSB1bml0IHZlY3RvcnMsIGkuZS4gaW4gOTAlIG9mIHRoZSBjYXNlcy4gKi8KLSAgLyogICBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuICAgICAgICovCisgIC8qICAgU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUuICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTE3NjksMTggKzE3OTEsMTggQEAKICAgewogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYgIWV4Yy0+aWdub3JlX3hfbW9kZSApCi0gICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gZGlzdGFuY2U7CisgICAgICB6b25lLT5jdXJbcG9pbnRdLnggPSBBRERfTE9ORyggem9uZS0+Y3VyW3BvaW50XS54LCBkaXN0YW5jZSApOwogICAgIGVsc2UKICNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAmJiAhZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApCi0gICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gZGlzdGFuY2U7CisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgJiYgIWV4Yy0+YmFja3dhcmRfY29tcGF0aWJpbGl0eSApCisgICAgICB6b25lLT5jdXJbcG9pbnRdLnggPSBBRERfTE9ORyggem9uZS0+Y3VyW3BvaW50XS54LCBkaXN0YW5jZSApOwogICAgIGVsc2UKICNlbmRpZgogCiAgICAgaWYgKCBOT19TVUJQSVhFTF9ISU5USU5HICkKLSAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBkaXN0YW5jZTsKKyAgICAgIHpvbmUtPmN1cltwb2ludF0ueCA9IEFERF9MT05HKCB6b25lLT5jdXJbcG9pbnRdLngsIGRpc3RhbmNlICk7CiAKICAgICB6b25lLT50YWdzW3BvaW50XSAgfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1g7CiAgIH0KQEAgLTE3OTYsMTAgKzE4MTgsMTAgQEAKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCiAgICAgaWYgKCAhKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgIGV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgICAgICAgICAmJgorICAgICAgICAgICAgZXhjLT5iYWNrd2FyZF9jb21wYXRpYmlsaXR5ICAgICAgICAgICYmCiAgICAgICAgICAgICBleGMtPml1cHhfY2FsbGVkICYmIGV4Yy0+aXVweV9jYWxsZWQgKSApCiAjZW5kaWYKLSAgICAgIHpvbmUtPmN1cltwb2ludF0ueSArPSBkaXN0YW5jZTsKKyAgICAgIHpvbmUtPmN1cltwb2ludF0ueSA9IEFERF9MT05HKCB6b25lLT5jdXJbcG9pbnRdLnksIGRpc3RhbmNlICk7CiAKICAgICB6b25lLT50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWTsKICAgfQpAQCAtMTgyMyw3ICsxODQ1LDcgQEAKICAgewogICAgIEZUX1VOVVNFRCggZXhjICk7CiAKLSAgICB6b25lLT5vcmdbcG9pbnRdLnggKz0gZGlzdGFuY2U7CisgICAgem9uZS0+b3JnW3BvaW50XS54ID0gQUREX0xPTkcoIHpvbmUtPm9yZ1twb2ludF0ueCwgZGlzdGFuY2UgKTsKICAgfQogCiAKQEAgLTE4MzUsNyArMTg1Nyw3IEBACiAgIHsKICAgICBGVF9VTlVTRUQoIGV4YyApOwogCi0gICAgem9uZS0+b3JnW3BvaW50XS55ICs9IGRpc3RhbmNlOworICAgIHpvbmUtPm9yZ1twb2ludF0ueSA9IEFERF9MT05HKCB6b25lLT5vcmdbcG9pbnRdLnksIGRpc3RhbmNlICk7CiAgIH0KIAogCkBAIC0xODczLDEzICsxODk1LDEzIEBACiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKLSAgICAgIHZhbCA9IGRpc3RhbmNlICsgY29tcGVuc2F0aW9uOworICAgICAgdmFsID0gQUREX0xPTkcoIGRpc3RhbmNlLCBjb21wZW5zYXRpb24gKTsKICAgICAgIGlmICggdmFsIDwgMCApCiAgICAgICAgIHZhbCA9IDA7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICB2YWwgPSBkaXN0YW5jZSAtIGNvbXBlbnNhdGlvbjsKKyAgICAgIHZhbCA9IFNVQl9MT05HKCBkaXN0YW5jZSwgY29tcGVuc2F0aW9uICk7CiAgICAgICBpZiAoIHZhbCA+IDAgKQogICAgICAgICB2YWwgPSAwOwogICAgIH0KQEAgLTE5MTUsMTMgKzE5MzcsMTQgQEAKIAogICAgIGlmICggZGlzdGFuY2UgPj0gMCApCiAgICAgewotICAgICAgdmFsID0gRlRfUElYX1JPVU5EKCBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiApOworICAgICAgdmFsID0gRlRfUElYX1JPVU5EX0xPTkcoIEFERF9MT05HKCBkaXN0YW5jZSwgY29tcGVuc2F0aW9uICkgKTsKICAgICAgIGlmICggdmFsIDwgMCApCiAgICAgICAgIHZhbCA9IDA7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICB2YWwgPSAtRlRfUElYX1JPVU5EKCBjb21wZW5zYXRpb24gLSBkaXN0YW5jZSApOworICAgICAgdmFsID0gTkVHX0xPTkcoIEZUX1BJWF9ST1VORF9MT05HKCBTVUJfTE9ORyggY29tcGVuc2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgKSApICk7CiAgICAgICBpZiAoIHZhbCA+IDAgKQogICAgICAgICB2YWwgPSAwOwogICAgIH0KQEAgLTE5NTgsMTMgKzE5ODEsMTYgQEAKIAogICAgIGlmICggZGlzdGFuY2UgPj0gMCApCiAgICAgewotICAgICAgdmFsID0gRlRfUElYX0ZMT09SKCBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiApICsgMzI7CisgICAgICB2YWwgPSBBRERfTE9ORyggRlRfUElYX0ZMT09SKCBBRERfTE9ORyggZGlzdGFuY2UsIGNvbXBlbnNhdGlvbiApICksCisgICAgICAgICAgICAgICAgICAgICAgMzIgKTsKICAgICAgIGlmICggdmFsIDwgMCApCiAgICAgICAgIHZhbCA9IDMyOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgdmFsID0gLSggRlRfUElYX0ZMT09SKCBjb21wZW5zYXRpb24gLSBkaXN0YW5jZSApICsgMzIgKTsKKyAgICAgIHZhbCA9IE5FR19MT05HKCBBRERfTE9ORyggRlRfUElYX0ZMT09SKCBTVUJfTE9ORyggY29tcGVuc2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSApICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyICkgKTsKICAgICAgIGlmICggdmFsID4gMCApCiAgICAgICAgIHZhbCA9IC0zMjsKICAgICB9CkBAIC0yMDAxLDEzICsyMDI3LDEzIEBACiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKLSAgICAgIHZhbCA9IEZUX1BJWF9GTE9PUiggZGlzdGFuY2UgKyBjb21wZW5zYXRpb24gKTsKKyAgICAgIHZhbCA9IEZUX1BJWF9GTE9PUiggQUREX0xPTkcoIGRpc3RhbmNlLCBjb21wZW5zYXRpb24gKSApOwogICAgICAgaWYgKCB2YWwgPCAwICkKICAgICAgICAgdmFsID0gMDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHZhbCA9IC1GVF9QSVhfRkxPT1IoIGNvbXBlbnNhdGlvbiAtIGRpc3RhbmNlICk7CisgICAgICB2YWwgPSBORUdfTE9ORyggRlRfUElYX0ZMT09SKCBTVUJfTE9ORyggY29tcGVuc2F0aW9uLCBkaXN0YW5jZSApICkgKTsKICAgICAgIGlmICggdmFsID4gMCApCiAgICAgICAgIHZhbCA9IDA7CiAgICAgfQpAQCAtMjA0NCwxMyArMjA3MCwxNCBAQAogCiAgICAgaWYgKCBkaXN0YW5jZSA+PSAwICkKICAgICB7Ci0gICAgICB2YWwgPSBGVF9QSVhfQ0VJTCggZGlzdGFuY2UgKyBjb21wZW5zYXRpb24gKTsKKyAgICAgIHZhbCA9IEZUX1BJWF9DRUlMX0xPTkcoIEFERF9MT05HKCBkaXN0YW5jZSwgY29tcGVuc2F0aW9uICkgKTsKICAgICAgIGlmICggdmFsIDwgMCApCiAgICAgICAgIHZhbCA9IDA7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICB2YWwgPSAtRlRfUElYX0NFSUwoIGNvbXBlbnNhdGlvbiAtIGRpc3RhbmNlICk7CisgICAgICB2YWwgPSBORUdfTE9ORyggRlRfUElYX0NFSUxfTE9ORyggU1VCX0xPTkcoIGNvbXBlbnNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgKSApICk7CiAgICAgICBpZiAoIHZhbCA+IDAgKQogICAgICAgICB2YWwgPSAwOwogICAgIH0KQEAgLTIwODcsMTMgKzIxMTQsMTQgQEAKIAogICAgIGlmICggZGlzdGFuY2UgPj0gMCApCiAgICAgewotICAgICAgdmFsID0gRlRfUEFEX1JPVU5EKCBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiwgMzIgKTsKKyAgICAgIHZhbCA9IEZUX1BBRF9ST1VORF9MT05HKCBBRERfTE9ORyggZGlzdGFuY2UsIGNvbXBlbnNhdGlvbiApLCAzMiApOwogICAgICAgaWYgKCB2YWwgPCAwICkKICAgICAgICAgdmFsID0gMDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHZhbCA9IC1GVF9QQURfUk9VTkQoIGNvbXBlbnNhdGlvbiAtIGRpc3RhbmNlLCAzMiApOworICAgICAgdmFsID0gTkVHX0xPTkcoIEZUX1BBRF9ST1VORF9MT05HKCBTVUJfTE9ORyggY29tcGVuc2F0aW9uLCBkaXN0YW5jZSApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiApICk7CiAgICAgICBpZiAoIHZhbCA+IDAgKQogICAgICAgICB2YWwgPSAwOwogICAgIH0KQEAgLTIxMzQsNyArMjE2Miw4IEBACiAKICAgICBpZiAoIGRpc3RhbmNlID49IDAgKQogICAgIHsKLSAgICAgIHZhbCA9ICggZGlzdGFuY2UgLSBleGMtPnBoYXNlICsgZXhjLT50aHJlc2hvbGQgKyBjb21wZW5zYXRpb24gKSAmCisgICAgICB2YWwgPSBBRERfTE9ORyggZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgZXhjLT50aHJlc2hvbGQgLSBleGMtPnBoYXNlICsgY29tcGVuc2F0aW9uICkgJgogICAgICAgICAgICAgICAtZXhjLT5wZXJpb2Q7CiAgICAgICB2YWwgKz0gZXhjLT5waGFzZTsKICAgICAgIGlmICggdmFsIDwgMCApCkBAIC0yMTQyLDggKzIxNzEsOSBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgdmFsID0gLSggKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgLSBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiApICYKLSAgICAgICAgICAgICAgIC1leGMtPnBlcmlvZCApOworICAgICAgdmFsID0gTkVHX0xPTkcoIFNVQl9MT05HKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgKyBjb21wZW5zYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlICkgJgorICAgICAgICAgICAgICAgICAgICAgICAgLWV4Yy0+cGVyaW9kICk7CiAgICAgICB2YWwgLT0gZXhjLT5waGFzZTsKICAgICAgIGlmICggdmFsID4gMCApCiAgICAgICAgIHZhbCA9IC1leGMtPnBoYXNlOwpAQCAtMjE4Myw3ICsyMjEzLDggQEAKIAogICAgIGlmICggZGlzdGFuY2UgPj0gMCApCiAgICAgewotICAgICAgdmFsID0gKCAoIGRpc3RhbmNlIC0gZXhjLT5waGFzZSArIGV4Yy0+dGhyZXNob2xkICsgY29tcGVuc2F0aW9uICkgLworICAgICAgdmFsID0gKCBBRERfTE9ORyggZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgKyBjb21wZW5zYXRpb24gKSAvCiAgICAgICAgICAgICAgICAgZXhjLT5wZXJpb2QgKSAqIGV4Yy0+cGVyaW9kOwogICAgICAgdmFsICs9IGV4Yy0+cGhhc2U7CiAgICAgICBpZiAoIHZhbCA8IDAgKQpAQCAtMjE5MSw4ICsyMjIyLDkgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHZhbCA9IC0oICggKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgLSBkaXN0YW5jZSArIGNvbXBlbnNhdGlvbiApIC8KLSAgICAgICAgICAgICAgICAgICBleGMtPnBlcmlvZCApICogZXhjLT5wZXJpb2QgKTsKKyAgICAgIHZhbCA9IE5FR19MT05HKCAoIFNVQl9MT05HKCBleGMtPnRocmVzaG9sZCAtIGV4Yy0+cGhhc2UgKyBjb21wZW5zYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+cGVyaW9kICkgKiBleGMtPnBlcmlvZCApOwogICAgICAgdmFsIC09IGV4Yy0+cGhhc2U7CiAgICAgICBpZiAoIHZhbCA+IDAgKQogICAgICAgICB2YWwgPSAtZXhjLT5waGFzZTsKQEAgLTI4MjYsNyArMjg1OCw3IEBACiAgIHN0YXRpYyB2b2lkCiAgIEluc19BREQoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIGFyZ3NbMF0gKz0gYXJnc1sxXTsKKyAgICBhcmdzWzBdID0gQUREX0xPTkcoIGFyZ3NbMF0sIGFyZ3NbMV0gKTsKICAgfQogCiAKQEAgLTI4MzksNyArMjg3MSw3IEBACiAgIHN0YXRpYyB2b2lkCiAgIEluc19TVUIoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIGFyZ3NbMF0gLT0gYXJnc1sxXTsKKyAgICBhcmdzWzBdID0gU1VCX0xPTkcoIGFyZ3NbMF0sIGFyZ3NbMV0gKTsKICAgfQogCiAKQEAgLTI4ODIsNyArMjkxNCw4IEBACiAgIHN0YXRpYyB2b2lkCiAgIEluc19BQlMoIEZUX0xvbmcqICBhcmdzICkKICAgewotICAgIGFyZ3NbMF0gPSBGVF9BQlMoIGFyZ3NbMF0gKTsKKyAgICBpZiAoIGFyZ3NbMF0gPCAwICkKKyAgICAgIGFyZ3NbMF0gPSBORUdfTE9ORyggYXJnc1swXSApOwogICB9CiAKIApAQCAtMjg5NSw3ICsyOTI4LDcgQEAKICAgc3RhdGljIHZvaWQKICAgSW5zX05FRyggRlRfTG9uZyogIGFyZ3MgKQogICB7Ci0gICAgYXJnc1swXSA9IC1hcmdzWzBdOworICAgIGFyZ3NbMF0gPSBORUdfTE9ORyggYXJnc1swXSApOwogICB9CiAKIApAQCAtMzU2NCw2ICszNTk3LDEzIEBACiAjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogCisgICAgLyogRkRFRiBpcyBvbmx5IGFsbG93ZWQgaW4gYHByZXAnIG9yIGBmcGdtJyAqLworICAgIGlmICggZXhjLT5jdXJSYW5nZSA9PSB0dF9jb2RlcmFuZ2VfZ2x5cGggKQorICAgIHsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggREVGX0luX0dseWZfQnl0ZWNvZGUgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvKiBzb21lIGZvbnQgcHJvZ3JhbXMgYXJlIGJyb2tlbiBlbm91Z2ggdG8gcmVkZWZpbmUgZnVuY3Rpb25zISAqLwogICAgIC8qIFdlIHdpbGwgdGhlbiBwYXJzZSB0aGUgY3VycmVudCB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTM5OTAsNiArNDAzMCwxMyBAQAogICAgIFRUX0RlZlJlY29yZCogIGxpbWl0OwogCiAKKyAgICAvKiB3ZSBlbmFibGUgSURFRiBvbmx5IGluIGBwcmVwJyBvciBgZnBnbScgKi8KKyAgICBpZiAoIGV4Yy0+Y3VyUmFuZ2UgPT0gdHRfY29kZXJhbmdlX2dseXBoICkKKyAgICB7CisgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIERFRl9Jbl9HbHlmX0J5dGVjb2RlICk7CisgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLyogIEZpcnN0IG9mIGFsbCwgbG9vayBmb3IgdGhlIHNhbWUgZnVuY3Rpb24gaW4gb3VyIHRhYmxlICovCiAKICAgICBkZWYgICA9IGV4Yy0+SURlZnM7CkBAIC00MTk3LDggKzQyNDQsOCBAQAogICAgIHAxID0gZXhjLT56cDEuY3VyICsgYUlkeDI7CiAgICAgcDIgPSBleGMtPnpwMi5jdXIgKyBhSWR4MTsKIAotICAgIEEgPSBwMS0+eCAtIHAyLT54OwotICAgIEIgPSBwMS0+eSAtIHAyLT55OworICAgIEEgPSBTVUJfTE9ORyggcDEtPngsIHAyLT54ICk7CisgICAgQiA9IFNVQl9MT05HKCBwMS0+eSwgcDItPnkgKTsKIAogICAgIC8qIElmIHAxID09IHAyLCBTUHZUTCBhbmQgU0Z2VEwgYmVoYXZlIHRoZSBzYW1lIGFzICovCiAgICAgLyogU1B2VENBW1hdIGFuZCBTRnZUQ0FbWF0sIHJlc3BlY3RpdmVseS4gICAgICAgICAgKi8KQEAgLTQyMTMsOSArNDI2MCw5IEBACiAKICAgICBpZiAoICggb3Bjb2RlICYgMSApICE9IDAgKQogICAgIHsKLSAgICAgIEMgPSAgQjsgICAvKiBjb3VudGVyIGNsb2Nrd2lzZSByb3RhdGlvbiAqLwotICAgICAgQiA9ICBBOwotICAgICAgQSA9IC1DOworICAgICAgQyA9IEI7ICAgLyogY291bnRlciBjbG9ja3dpc2Ugcm90YXRpb24gKi8KKyAgICAgIEIgPSBBOworICAgICAgQSA9IE5FR19MT05HKCBDICk7CiAgICAgfQogCiAgICAgTm9ybWFsaXplKCBBLCBCLCBWZWMgKTsKQEAgLTQ3NTYsNyArNDgwMyw3IEBACiAKICAgICBLID0gRkFTVF9QUk9KRUNUKCAmZXhjLT56cDIuY3VyW0xdICk7CiAKLSAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDIsIEwsIGFyZ3NbMV0gLSBLICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAyLCBMLCBTVUJfTE9ORyggYXJnc1sxXSwgSyApICk7CiAKICAgICAvKiBVTkRPQ1VNRU5URUQhICBUaGUgTVMgcmFzdGVyaXplciBkb2VzIHRoYXQgd2l0aCAqLwogICAgIC8qIHR3aWxpZ2h0IHBvaW50cyAoY29uZmlybWVkIGJ5IEdyZWcgSGl0Y2hjb2NrKSAgICovCkBAIC00ODgwLDEyICs0OTI3LDEyIEBACiAgICAgfQogCiAgICAgewotICAgICAgRlRfVmVjdG9yKiB2MSA9IGV4Yy0+enAxLm9yZyArIHAyOwotICAgICAgRlRfVmVjdG9yKiB2MiA9IGV4Yy0+enAyLm9yZyArIHAxOworICAgICAgRlRfVmVjdG9yKiAgdjEgPSBleGMtPnpwMS5vcmcgKyBwMjsKKyAgICAgIEZUX1ZlY3RvciogIHYyID0gZXhjLT56cDIub3JnICsgcDE7CiAKIAotICAgICAgQSA9IHYxLT54IC0gdjItPng7Ci0gICAgICBCID0gdjEtPnkgLSB2Mi0+eTsKKyAgICAgIEEgPSBTVUJfTE9ORyggdjEtPngsIHYyLT54ICk7CisgICAgICBCID0gU1VCX0xPTkcoIHYxLT55LCB2Mi0+eSApOwogCiAgICAgICAvKiBJZiB2MSA9PSB2MiwgU0RQdlRMIGJlaGF2ZXMgdGhlIHNhbWUgYXMgKi8KICAgICAgIC8qIFNWVENBW1hdLCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAqLwpAQCAtNDkwMSw5ICs0OTQ4LDkgQEAKIAogICAgIGlmICggKCBvcGNvZGUgJiAxICkgIT0gMCApCiAgICAgewotICAgICAgQyA9ICBCOyAgIC8qIGNvdW50ZXIgY2xvY2t3aXNlIHJvdGF0aW9uICovCi0gICAgICBCID0gIEE7Ci0gICAgICBBID0gLUM7CisgICAgICBDID0gQjsgICAvKiBjb3VudGVyIGNsb2Nrd2lzZSByb3RhdGlvbiAqLworICAgICAgQiA9IEE7CisgICAgICBBID0gTkVHX0xPTkcoIEMgKTsKICAgICB9CiAKICAgICBOb3JtYWxpemUoIEEsIEIsICZleGMtPkdTLmR1YWxWZWN0b3IgKTsKQEAgLTQ5MTMsOCArNDk2MCw4IEBACiAgICAgICBGVF9WZWN0b3IqICB2MiA9IGV4Yy0+enAyLmN1ciArIHAxOwogCiAKLSAgICAgIEEgPSB2MS0+eCAtIHYyLT54OwotICAgICAgQiA9IHYxLT55IC0gdjItPnk7CisgICAgICBBID0gU1VCX0xPTkcoIHYxLT54LCB2Mi0+eCApOworICAgICAgQiA9IFNVQl9MT05HKCB2MS0+eSwgdjItPnkgKTsKIAogICAgICAgaWYgKCBBID09IDAgJiYgQiA9PSAwICkKICAgICAgIHsKQEAgLTQ5MjUsOSArNDk3Miw5IEBACiAKICAgICBpZiAoICggb3Bjb2RlICYgMSApICE9IDAgKQogICAgIHsKLSAgICAgIEMgPSAgQjsgICAvKiBjb3VudGVyIGNsb2Nrd2lzZSByb3RhdGlvbiAqLwotICAgICAgQiA9ICBBOwotICAgICAgQSA9IC1DOworICAgICAgQyA9IEI7ICAgLyogY291bnRlciBjbG9ja3dpc2Ugcm90YXRpb24gKi8KKyAgICAgIEIgPSBBOworICAgICAgQSA9IE5FR19MT05HKCBDICk7CiAgICAgfQogCiAgICAgTm9ybWFsaXplKCBBLCBCLCAmZXhjLT5HUy5wcm9qVmVjdG9yICk7CkBAIC01MTEyLDExICs1MTU5LDExIEBACiAjZW5kaWYKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCi0gICAgICAvKiBOYXRpdmUgQ2xlYXJUeXBlIGZvbnRzIHNpZ24gYSB3YWl2ZXIgdGhhdCB0dXJucyBvZmYgYWxsIGJhY2t3YXJkcyAqLworICAgICAgLyogTmF0aXZlIENsZWFyVHlwZSBmb250cyBzaWduIGEgd2FpdmVyIHRoYXQgdHVybnMgb2ZmIGFsbCBiYWNrd2FyZCAgKi8KICAgICAgIC8qIGNvbXBhdGliaWxpdHkgaGFja3MgYW5kIGxldHMgdGhlbSBwcm9ncmFtIHBvaW50cyB0byB0aGUgZ3JpZCBsaWtlICovCiAgICAgICAvKiBpdCdzIDE5OTYuICBUaGV5IG1pZ2h0IHNpZ24gYSB3YWl2ZXIgZm9yIGp1c3Qgb25lIGdseXBoLCB0aG91Z2guICAqLwogICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgKQotICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ID0gIUZUX0JPT0woIEwgPT0gNCApOworICAgICAgICBleGMtPmJhY2t3YXJkX2NvbXBhdGliaWxpdHkgPSAhRlRfQk9PTCggTCA9PSA0ICk7CiAjZW5kaWYKICAgICB9CiAgIH0KQEAgLTUyMDQsMTEgKzUyNTEsMTEgQEAKIAogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKLSAgICAvKiBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuICovCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICYmCi0gICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICYmCi0gICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgICYmCi0gICAgICAgICBleGMtPml1cHlfY2FsbGVkICAgICAgICAgICAgICkKKyAgICAvKiBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAmJgorICAgICAgICAgZXhjLT5iYWNrd2FyZF9jb21wYXRpYmlsaXR5ICYmCisgICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+aXVweV9jYWxsZWQgICAgICAgICAgICApCiAgICAgICBnb3RvIEZhaWw7CiAjZW5kaWYKIApAQCAtNTI1OSwxMSArNTMwNiwxMSBAQAogCiAKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAotICAgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgJiYKLSAgICAgICAgIGV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgJiYKLSAgICAgICAgIGV4Yy0+aXVweF9jYWxsZWQgICAgICAgICAgICAgJiYKLSAgICAgICAgIGV4Yy0+aXVweV9jYWxsZWQgICAgICAgICAgICAgKQorICAgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICYmCisgICAgICAgICBleGMtPmJhY2t3YXJkX2NvbXBhdGliaWxpdHkgJiYKKyAgICAgICAgIGV4Yy0+aXVweF9jYWxsZWQgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICkKICAgICAgIHJldHVybjsKICNlbmRpZgogCkBAIC01Mjk3LDExICs1MzQ0LDExIEBACiAKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCi0gICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLwotICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgotICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgotICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAgICAgICAgICAgICAmJgotICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICApCisgICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUuICovCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgJiYKKyAgICAgICAgIGV4Yy0+YmFja3dhcmRfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPml1cHlfY2FsbGVkICAgICAgICAgICAgKQogICAgICAgcmV0dXJuOwogI2VuZGlmCiAKQEAgLTUzNjQsNyArNTQxMSw3IEBACiAgIH0KIAogCi0gIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KKyAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUuICovCiAgIHN0YXRpYyB2b2lkCiAgIE1vdmVfWnAyX1BvaW50KCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgICAgICAgRlRfVVNob3J0ICAgICAgIHBvaW50LApAQCAtNTM3NSwxMCArNTQyMiwxMCBAQAogICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCApCiAgICAgewogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCi0gICAgICBpZiAoICEoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgJiYKLSAgICAgICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApICkKKyAgICAgIGlmICggISggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICYmCisgICAgICAgICAgICAgIGV4Yy0+YmFja3dhcmRfY29tcGF0aWJpbGl0eSApICkKICNlbmRpZgotICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7CisgICAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueCA9IEFERF9MT05HKCBleGMtPnpwMi5jdXJbcG9pbnRdLngsIGR4ICk7CiAKICAgICAgIGlmICggdG91Y2ggKQogICAgICAgICBleGMtPnpwMi50YWdzW3BvaW50XSB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWDsKQEAgLTUzODcsMTIgKzU0MzQsMTIgQEAKICAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQogICAgIHsKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAotICAgICAgaWYgKCAhKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICYmCi0gICAgICAgICAgICAgIGV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgJiYKLSAgICAgICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICBleGMtPml1cHlfY2FsbGVkICAgICAgICAgICAgICkgKQorICAgICAgaWYgKCAhKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgJiYKKyAgICAgICAgICAgICAgZXhjLT5iYWNrd2FyZF9jb21wYXRpYmlsaXR5ICYmCisgICAgICAgICAgICAgIGV4Yy0+aXVweF9jYWxsZWQgICAgICAgICAgICAmJgorICAgICAgICAgICAgICBleGMtPml1cHlfY2FsbGVkICAgICAgICAgICAgKSApCiAjZW5kaWYKLSAgICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ICs9IGR5OworICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgPSBBRERfTE9ORyggZXhjLT56cDIuY3VyW3BvaW50XS55LCBkeSApOwogCiAgICAgICBpZiAoIHRvdWNoICkKICAgICAgICAgZXhjLT56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CkBAIC01NjQzLDcgKzU2OTAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAoIEIxICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgIEIxICE9IEIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAtZHgsIC1keSwgVFJVRSApOworICAgICAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORUdfTE9ORyggZHggKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVHX0xPTkcoIGR5ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZSBpZiAoIGV4Yy0+ZmFjZS0+c3BoX2NvbXBhdGliaWxpdHlfbW9kZSApCkBAIC01Njc1LDcgKzU3MjYsNyBAQAogICAgICAgICAgICAgICBpZiAoICggQjEgJiA2MyApID09IDAgJiYKICAgICAgICAgICAgICAgICAgICAoIEIyICYgNjMgKSAhPSAwICYmCiAgICAgICAgICAgICAgICAgICAgQjEgIT0gQjIgICAgICAgICApCi0gICAgICAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIDAsIC1keSwgVFJVRSApOworICAgICAgICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAwLCBORUdfTE9ORyggZHkgKSwgVFJVRSApOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIGlmICggZXhjLT5zcGhfaW5fZnVuY19mbGFncyAmIFNQSF9GREVGX1RZUEVNQU5fRElBR0VORENUUkwgKQpAQCAtNTY4Nyw4ICs1NzM4LDggQEAKICAgICAgIGVsc2UKICNlbmRpZgogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgJiYKLSAgICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAmJgorICAgICAgICAgICBleGMtPmJhY2t3YXJkX2NvbXBhdGliaWxpdHkgKQogICAgICAgewogICAgICAgICAvKiBTcGVjaWFsIGNhc2U6IGFsbG93IFNIUElYIHRvIG1vdmUgcG9pbnRzIGluIHRoZSB0d2lsaWdodCB6b25lLiAgKi8KICAgICAgICAgLyogT3RoZXJ3aXNlLCB0cmVhdCBTSFBJWCB0aGUgc2FtZSBhcyBERUxUQVAuICBVbmJyZWFrcyB2YXJpb3VzICAgICovCkBAIC01NzY3LDE0ICs1ODE4LDE3IEBACiAKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qIHN1YnBpeGVsIGhpbnRpbmcgLSBtYWtlIE1TSVJQIHJlc3BlY3QgQ1ZUIGN1dC1pbjsgKi8KLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIEZUX0FCUyggZGlzdGFuY2UgLSBhcmdzWzFdICkgPj0gY29udHJvbF92YWx1ZV9jdXRpbiApCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBGVF9BQlMoIFNVQl9MT05HKCBkaXN0YW5jZSwgYXJnc1sxXSApICkgPj0gY29udHJvbF92YWx1ZV9jdXRpbiApCiAgICAgICBkaXN0YW5jZSA9IGFyZ3NbMV07CiAjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAotICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcG9pbnQsIGFyZ3NbMV0gLSBkaXN0YW5jZSApOworICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsCisgICAgICAgICAgICAgICAgICAgICZleGMtPnpwMSwKKyAgICAgICAgICAgICAgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgIFNVQl9MT05HKCBhcmdzWzFdLCBkaXN0YW5jZSApICk7CiAKICAgICBleGMtPkdTLnJwMSA9IGV4Yy0+R1MucnAwOwogICAgIGV4Yy0+R1MucnAyID0gcG9pbnQ7CkBAIC01OTQxLDcgKzU5OTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT50dF9tZXRyaWNzLmNvbXBlbnNhdGlvbnNbMF0gKTsKICAgICB9CiAKLSAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDAsIHBvaW50LCBkaXN0YW5jZSAtIG9yZ19kaXN0ICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwb2ludCwgU1VCX0xPTkcoIGRpc3RhbmNlLCBvcmdfZGlzdCApICk7CiAKICAgRmFpbDoKICAgICBleGMtPkdTLnJwMCA9IHBvaW50OwpAQCAtNjAxMyw4ICs2MDY3LDEwIEBACiAgICAgICAgIEZUX1ZlY3RvciAgdmVjOwogCiAKLSAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIHZlYzEtPnggLSB2ZWMyLT54LCBleGMtPm1ldHJpY3MueF9zY2FsZSApOwotICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggdmVjMS0+eSAtIHZlYzItPnksIGV4Yy0+bWV0cmljcy55X3NjYWxlICk7CisgICAgICAgIHZlYy54ID0gRlRfTXVsRml4KCBTVUJfTE9ORyggdmVjMS0+eCwgdmVjMi0+eCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5tZXRyaWNzLnhfc2NhbGUgKTsKKyAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIFNVQl9MT05HKCB2ZWMxLT55LCB2ZWMyLT55ICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPm1ldHJpY3MueV9zY2FsZSApOwogCiAgICAgICAgIG9yZ19kaXN0ID0gRkFTVF9EVUFMUFJPSiggJnZlYyApOwogICAgICAgfQpAQCAtNjAyMiw4ICs2MDc4LDEyIEBACiAKICAgICAvKiBzaW5nbGUgd2lkdGggY3V0LWluIHRlc3QgKi8KIAotICAgIGlmICggRlRfQUJTKCBvcmdfZGlzdCAtIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX3ZhbHVlICkgPAotICAgICAgICAgZXhjLT5HUy5zaW5nbGVfd2lkdGhfY3V0aW4gKQorICAgIC8qIHxvcmdfZGlzdCAtIHNpbmdsZV93aWR0aF92YWx1ZXwgPCBzaW5nbGVfd2lkdGhfY3V0aW4gKi8KKyAgICBpZiAoIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX2N1dGluID4gMCAgICAgICAgICAmJgorICAgICAgICAgb3JnX2Rpc3QgPCBleGMtPkdTLnNpbmdsZV93aWR0aF92YWx1ZSArCisgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5zaW5nbGVfd2lkdGhfY3V0aW4gJiYKKyAgICAgICAgIG9yZ19kaXN0ID4gZXhjLT5HUy5zaW5nbGVfd2lkdGhfdmFsdWUgLQorICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1Muc2luZ2xlX3dpZHRoX2N1dGluICkKICAgICB7CiAgICAgICBpZiAoIG9yZ19kaXN0ID49IDAgKQogICAgICAgICBvcmdfZGlzdCA9IGV4Yy0+R1Muc2luZ2xlX3dpZHRoX3ZhbHVlOwpAQCAtNjA2Nyw4ICs2MTI3LDggQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgaWYgKCBkaXN0YW5jZSA+IC1taW5pbXVtX2Rpc3RhbmNlICkKLSAgICAgICAgICBkaXN0YW5jZSA9IC1taW5pbXVtX2Rpc3RhbmNlOworICAgICAgICBpZiAoIGRpc3RhbmNlID4gTkVHX0xPTkcoIG1pbmltdW1fZGlzdGFuY2UgKSApCisgICAgICAgICAgZGlzdGFuY2UgPSBORUdfTE9ORyggbWluaW11bV9kaXN0YW5jZSApOwogICAgICAgfQogICAgIH0KIApAQCAtNjA3Niw3ICs2MTM2LDcgQEAKIAogICAgIG9yZ19kaXN0ID0gUFJPSkVDVCggZXhjLT56cDEuY3VyICsgcG9pbnQsIGV4Yy0+enAwLmN1ciArIGV4Yy0+R1MucnAwICk7CiAKLSAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBkaXN0YW5jZSAtIG9yZ19kaXN0ICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAxLCBwb2ludCwgU1VCX0xPTkcoIGRpc3RhbmNlLCBvcmdfZGlzdCApICk7CiAKICAgRmFpbDoKICAgICBleGMtPkdTLnJwMSA9IGV4Yy0+R1MucnAwOwpAQCAtNjI1MSw4ICs2MzExLDggQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgaWYgKCBkaXN0YW5jZSA+IC1taW5pbXVtX2Rpc3RhbmNlICkKLSAgICAgICAgICBkaXN0YW5jZSA9IC1taW5pbXVtX2Rpc3RhbmNlOworICAgICAgICBpZiAoIGRpc3RhbmNlID4gTkVHX0xPTkcoIG1pbmltdW1fZGlzdGFuY2UgKSApCisgICAgICAgICAgZGlzdGFuY2UgPSBORUdfTE9ORyggbWluaW11bV9kaXN0YW5jZSApOwogICAgICAgfQogICAgIH0KIApAQCAtNjI3Niw3ICs2MzM2LDEwIEBACiAgICAgfQogI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKLSAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBkaXN0YW5jZSAtIGN1cl9kaXN0ICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywKKyAgICAgICAgICAgICAgICAgICAgJmV4Yy0+enAxLAorICAgICAgICAgICAgICAgICAgICBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgU1VCX0xPTkcoIGRpc3RhbmNlLCBjdXJfZGlzdCApICk7CiAKICNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKQEAgLTYzMDAsNyArNjM2MywxMCBAQAogICAgICAgfQogCiAgICAgICBpZiAoIHJldmVyc2VfbW92ZSApCi0gICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcG9pbnQsIC0oIGRpc3RhbmNlIC0gY3VyX2Rpc3QgKSApOworICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgJmV4Yy0+enAxLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJfTE9ORyggY3VyX2Rpc3QsIGRpc3RhbmNlICkgKTsKICAgICB9CiAKICNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwpAQCAtNjM2Niw3ICs2NDMyLDcgQEAKICAgICAgICAgZGlzdGFuY2UgPSBQUk9KRUNUKCBleGMtPnpwMS5jdXIgKyBwb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXIgKyBleGMtPkdTLnJwMCApOwogCi0gICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcG9pbnQsIC1kaXN0YW5jZSApOworICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBORUdfTE9ORyggZGlzdGFuY2UgKSApOwogICAgICAgfQogCiAgICAgICBleGMtPkdTLmxvb3AtLTsKQEAgLTY0MjMsMTkgKzY0ODksMTkgQEAKIAogICAgIC8qIENyYW1lcidzIHJ1bGUgKi8KIAotICAgIGRieCA9IGV4Yy0+enAwLmN1cltiMV0ueCAtIGV4Yy0+enAwLmN1cltiMF0ueDsKLSAgICBkYnkgPSBleGMtPnpwMC5jdXJbYjFdLnkgLSBleGMtPnpwMC5jdXJbYjBdLnk7CisgICAgZGJ4ID0gU1VCX0xPTkcoIGV4Yy0+enAwLmN1cltiMV0ueCwgZXhjLT56cDAuY3VyW2IwXS54ICk7CisgICAgZGJ5ID0gU1VCX0xPTkcoIGV4Yy0+enAwLmN1cltiMV0ueSwgZXhjLT56cDAuY3VyW2IwXS55ICk7CiAKLSAgICBkYXggPSBleGMtPnpwMS5jdXJbYTFdLnggLSBleGMtPnpwMS5jdXJbYTBdLng7Ci0gICAgZGF5ID0gZXhjLT56cDEuY3VyW2ExXS55IC0gZXhjLT56cDEuY3VyW2EwXS55OworICAgIGRheCA9IFNVQl9MT05HKCBleGMtPnpwMS5jdXJbYTFdLngsIGV4Yy0+enAxLmN1clthMF0ueCApOworICAgIGRheSA9IFNVQl9MT05HKCBleGMtPnpwMS5jdXJbYTFdLnksIGV4Yy0+enAxLmN1clthMF0ueSApOwogCi0gICAgZHggPSBleGMtPnpwMC5jdXJbYjBdLnggLSBleGMtPnpwMS5jdXJbYTBdLng7Ci0gICAgZHkgPSBleGMtPnpwMC5jdXJbYjBdLnkgLSBleGMtPnpwMS5jdXJbYTBdLnk7CisgICAgZHggPSBTVUJfTE9ORyggZXhjLT56cDAuY3VyW2IwXS54LCBleGMtPnpwMS5jdXJbYTBdLnggKTsKKyAgICBkeSA9IFNVQl9MT05HKCBleGMtPnpwMC5jdXJbYjBdLnksIGV4Yy0+enAxLmN1clthMF0ueSApOwogCi0gICAgZGlzY3JpbWluYW50ID0gRlRfTXVsRGl2KCBkYXgsIC1kYnksIDB4NDAgKSArCi0gICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBkYXksIGRieCwgMHg0MCApOwotICAgIGRvdHByb2R1Y3QgICA9IEZUX011bERpdiggZGF4LCBkYngsIDB4NDAgKSArCi0gICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBkYXksIGRieSwgMHg0MCApOworICAgIGRpc2NyaW1pbmFudCA9IEFERF9MT05HKCBGVF9NdWxEaXYoIGRheCwgTkVHX0xPTkcoIGRieSApLCAweDQwICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGF5LCBkYngsIDB4NDAgKSApOworICAgIGRvdHByb2R1Y3QgICA9IEFERF9MT05HKCBGVF9NdWxEaXYoIGRheCwgZGJ4LCAweDQwICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bERpdiggZGF5LCBkYnksIDB4NDAgKSApOwogCiAgICAgLyogVGhlIGRpc2NyaW1pbmFudCBhYm92ZSBpcyBhY3R1YWxseSBhIGNyb3NzIHByb2R1Y3Qgb2YgdmVjdG9ycyAgICAgKi8KICAgICAvKiBkYSBhbmQgZGIuIFRvZ2V0aGVyIHdpdGggdGhlIGRvdCBwcm9kdWN0LCB0aGV5IGNhbiBiZSB1c2VkIGFzICAgICAqLwpAQCAtNjQ0NSwzMCArNjUxMSwyOSBAQAogICAgIC8qICAgICAgIGRpc2NyaW1pbmFudCA9IHxkYXx8ZGJ8c2luKGFuZ2xlKSAgICAgLiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogV2UgdXNlIHRoZXNlIGVxdWF0aW9ucyB0byByZWplY3QgZ3JhemluZyBpbnRlcnNlY3Rpb25zIGJ5ICAgICAgICAgKi8KICAgICAvKiB0aHJlc2hvbGRpbmcgYWJzKHRhbihhbmdsZSkpIGF0IDEvMTksIGNvcnJlc3BvbmRpbmcgdG8gMyBkZWdyZWVzLiAqLwotICAgIGlmICggMTkgKiBGVF9BQlMoIGRpc2NyaW1pbmFudCApID4gRlRfQUJTKCBkb3Rwcm9kdWN0ICkgKQorICAgIGlmICggTVVMX0xPTkcoIDE5LCBGVF9BQlMoIGRpc2NyaW1pbmFudCApICkgPiBGVF9BQlMoIGRvdHByb2R1Y3QgKSApCiAgICAgewotICAgICAgdmFsID0gRlRfTXVsRGl2KCBkeCwgLWRieSwgMHg0MCApICsgRlRfTXVsRGl2KCBkeSwgZGJ4LCAweDQwICk7CisgICAgICB2YWwgPSBBRERfTE9ORyggRlRfTXVsRGl2KCBkeCwgTkVHX0xPTkcoIGRieSApLCAweDQwICksCisgICAgICAgICAgICAgICAgICAgICAgRlRfTXVsRGl2KCBkeSwgZGJ4LCAweDQwICkgKTsKIAogICAgICAgUi54ID0gRlRfTXVsRGl2KCB2YWwsIGRheCwgZGlzY3JpbWluYW50ICk7CiAgICAgICBSLnkgPSBGVF9NdWxEaXYoIHZhbCwgZGF5LCBkaXNjcmltaW5hbnQgKTsKIAotICAgICAgLyogWFhYOiBCbG9jayBpbiBiYWNrd2FyZHNfY29tcGF0aWJpbGl0eSBhbmQvb3IgcG9zdC1JVVA/ICovCi0gICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggPSBleGMtPnpwMS5jdXJbYTBdLnggKyBSLng7Ci0gICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgPSBleGMtPnpwMS5jdXJbYTBdLnkgKyBSLnk7CisgICAgICAvKiBYWFg6IEJsb2NrIGluIGJhY2t3YXJkX2NvbXBhdGliaWxpdHkgYW5kL29yIHBvc3QtSVVQPyAqLworICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS54ID0gQUREX0xPTkcoIGV4Yy0+enAxLmN1clthMF0ueCwgUi54ICk7CisgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgPSBBRERfTE9ORyggZXhjLT56cDEuY3VyW2EwXS55LCBSLnkgKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qIGVsc2UsIHRha2UgdGhlIG1pZGRsZSBvZiB0aGUgbWlkZGxlcyBvZiBBIGFuZCBCICovCiAKLSAgICAgIC8qIFhYWDogQmxvY2sgaW4gYmFja3dhcmRzX2NvbXBhdGliaWxpdHkgYW5kL29yIHBvc3QtSVVQPyAqLwotICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS54ID0gKCBleGMtPnpwMS5jdXJbYTBdLnggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMS5jdXJbYTFdLnggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjBdLnggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjFdLnggKSAvIDQ7Ci0gICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgPSAoIGV4Yy0+enAxLmN1clthMF0ueSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAxLmN1clthMV0ueSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAwLmN1cltiMF0ueSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+enAwLmN1cltiMV0ueSApIC8gNDsKKyAgICAgIC8qIFhYWDogQmxvY2sgaW4gYmFja3dhcmRfY29tcGF0aWJpbGl0eSBhbmQvb3IgcG9zdC1JVVA/ICovCisgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggPQorICAgICAgICBBRERfTE9ORyggQUREX0xPTkcoIGV4Yy0+enAxLmN1clthMF0ueCwgZXhjLT56cDEuY3VyW2ExXS54ICksCisgICAgICAgICAgICAgICAgICBBRERfTE9ORyggZXhjLT56cDAuY3VyW2IwXS54LCBleGMtPnpwMC5jdXJbYjFdLnggKSApIC8gNDsKKyAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueSA9CisgICAgICAgIEFERF9MT05HKCBBRERfTE9ORyggZXhjLT56cDEuY3VyW2EwXS55LCBleGMtPnpwMS5jdXJbYTFdLnkgKSwKKyAgICAgICAgICAgICAgICAgIEFERF9MT05HKCBleGMtPnpwMC5jdXJbYjBdLnksIGV4Yy0+enAwLmN1cltiMV0ueSApICkgLyA0OwogICAgIH0KIAogICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9CT1RIOwpAQCAtNjUwMyw3ICs2NTY4LDcgQEAKICAgICBkaXN0YW5jZSA9IFBST0pFQ1QoIGV4Yy0+enAwLmN1ciArIHAyLCBleGMtPnpwMS5jdXIgKyBwMSApIC8gMjsKIAogICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMSwgcDEsIGRpc3RhbmNlICk7Ci0gICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwMiwgLWRpc3RhbmNlICk7CisgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBwMiwgTkVHX0xPTkcoIGRpc3RhbmNlICkgKTsKICAgfQogCiAKQEAgLTY1NzYsOSArNjY0MSwxMSBAQAogICAgICAgICBGVF9WZWN0b3IgIHZlYzsKIAogCi0gICAgICAgIHZlYy54ID0gRlRfTXVsRml4KCBleGMtPnpwMS5vcnVzW2V4Yy0+R1MucnAyXS54IC0gb3J1c19iYXNlLT54LAorICAgICAgICB2ZWMueCA9IEZUX011bEZpeCggU1VCX0xPTkcoIGV4Yy0+enAxLm9ydXNbZXhjLT5HUy5ycDJdLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J1c19iYXNlLT54ICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPm1ldHJpY3MueF9zY2FsZSApOwotICAgICAgICB2ZWMueSA9IEZUX011bEZpeCggZXhjLT56cDEub3J1c1tleGMtPkdTLnJwMl0ueSAtIG9ydXNfYmFzZS0+eSwKKyAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIFNVQl9MT05HKCBleGMtPnpwMS5vcnVzW2V4Yy0+R1MucnAyXS55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydXNfYmFzZS0+eSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5tZXRyaWNzLnlfc2NhbGUgKTsKIAogICAgICAgICBvbGRfcmFuZ2UgPSBGQVNUX0RVQUxQUk9KKCAmdmVjICk7CkBAIC02NjEzLDkgKzY2ODAsMTEgQEAKICAgICAgICAgRlRfVmVjdG9yICB2ZWM7CiAKIAotICAgICAgICB2ZWMueCA9IEZUX011bEZpeCggZXhjLT56cDIub3J1c1twb2ludF0ueCAtIG9ydXNfYmFzZS0+eCwKKyAgICAgICAgdmVjLnggPSBGVF9NdWxGaXgoIFNVQl9MT05HKCBleGMtPnpwMi5vcnVzW3BvaW50XS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydXNfYmFzZS0+eCApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5tZXRyaWNzLnhfc2NhbGUgKTsKLSAgICAgICAgdmVjLnkgPSBGVF9NdWxGaXgoIGV4Yy0+enAyLm9ydXNbcG9pbnRdLnkgLSBvcnVzX2Jhc2UtPnksCisgICAgICAgIHZlYy55ID0gRlRfTXVsRml4KCBTVUJfTE9ORyggZXhjLT56cDIub3J1c1twb2ludF0ueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnVzX2Jhc2UtPnkgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+bWV0cmljcy55X3NjYWxlICk7CiAKICAgICAgICAgb3JnX2Rpc3QgPSBGQVNUX0RVQUxQUk9KKCAmdmVjICk7CkBAIC02NjU0LDcgKzY3MjMsNyBAQAogICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywKICAgICAgICAgICAgICAgICAgICAgICAmZXhjLT56cDIsCiAgICAgICAgICAgICAgICAgICAgICAgKEZUX1VTaG9ydClwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICBuZXdfZGlzdCAtIGN1cl9kaXN0ICk7CisgICAgICAgICAgICAgICAgICAgICAgU1VCX0xPTkcoIG5ld19kaXN0LCBjdXJfZGlzdCApICk7CiAgICAgfQogCiAgIEZhaWw6CkBAIC02NzE5LDE0ICs2Nzg4LDE0IEBACiAgICAgRlRfRjI2RG90NiAgZHg7CiAKIAotICAgIGR4ID0gd29ya2VyLT5jdXJzW3BdLnggLSB3b3JrZXItPm9yZ3NbcF0ueDsKKyAgICBkeCA9IFNVQl9MT05HKCB3b3JrZXItPmN1cnNbcF0ueCwgd29ya2VyLT5vcmdzW3BdLnggKTsKICAgICBpZiAoIGR4ICE9IDAgKQogICAgIHsKICAgICAgIGZvciAoIGkgPSBwMTsgaSA8IHA7IGkrKyApCi0gICAgICAgIHdvcmtlci0+Y3Vyc1tpXS54ICs9IGR4OworICAgICAgICB3b3JrZXItPmN1cnNbaV0ueCA9IEFERF9MT05HKCB3b3JrZXItPmN1cnNbaV0ueCwgZHggKTsKIAogICAgICAgZm9yICggaSA9IHAgKyAxOyBpIDw9IHAyOyBpKysgKQotICAgICAgICB3b3JrZXItPmN1cnNbaV0ueCArPSBkeDsKKyAgICAgICAgd29ya2VyLT5jdXJzW2ldLnggPSBBRERfTE9ORyggd29ya2VyLT5jdXJzW2ldLngsIGR4ICk7CiAgICAgfQogICB9CiAKQEAgLTY3NzEsOCArNjg0MCw4IEBACiAgICAgb3JnMiAgID0gd29ya2VyLT5vcmdzW3JlZjJdLng7CiAgICAgY3VyMSAgID0gd29ya2VyLT5jdXJzW3JlZjFdLng7CiAgICAgY3VyMiAgID0gd29ya2VyLT5jdXJzW3JlZjJdLng7Ci0gICAgZGVsdGExID0gY3VyMSAtIG9yZzE7Ci0gICAgZGVsdGEyID0gY3VyMiAtIG9yZzI7CisgICAgZGVsdGExID0gU1VCX0xPTkcoIGN1cjEsIG9yZzEgKTsKKyAgICBkZWx0YTIgPSBTVUJfTE9ORyggY3VyMiwgb3JnMiApOwogCiAgICAgaWYgKCBjdXIxID09IGN1cjIgfHwgb3J1czEgPT0gb3J1czIgKQogICAgIHsKQEAgLTY3ODQsMTAgKzY4NTMsMTAgQEAKIAogCiAgICAgICAgIGlmICggeCA8PSBvcmcxICkKLSAgICAgICAgICB4ICs9IGRlbHRhMTsKKyAgICAgICAgICB4ID0gQUREX0xPTkcoIHgsIGRlbHRhMSApOwogCiAgICAgICAgIGVsc2UgaWYgKCB4ID49IG9yZzIgKQotICAgICAgICAgIHggKz0gZGVsdGEyOworICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgZGVsdGEyICk7CiAKICAgICAgICAgZWxzZQogICAgICAgICAgIHggPSBjdXIxOwpAQCAtNjgwOCwyMCArNjg3NywyMyBAQAogCiAKICAgICAgICAgaWYgKCB4IDw9IG9yZzEgKQotICAgICAgICAgIHggKz0gZGVsdGExOworICAgICAgICAgIHggPSBBRERfTE9ORyggeCwgZGVsdGExICk7CiAKICAgICAgICAgZWxzZSBpZiAoIHggPj0gb3JnMiApCi0gICAgICAgICAgeCArPSBkZWx0YTI7CisgICAgICAgICAgeCA9IEFERF9MT05HKCB4LCBkZWx0YTIgKTsKIAogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBpZiAoICFzY2FsZV92YWxpZCApCiAgICAgICAgICAgewogICAgICAgICAgICAgc2NhbGVfdmFsaWQgPSAxOwotICAgICAgICAgICAgc2NhbGUgICAgICAgPSBGVF9EaXZGaXgoIGN1cjIgLSBjdXIxLCBvcnVzMiAtIG9ydXMxICk7CisgICAgICAgICAgICBzY2FsZSAgICAgICA9IEZUX0RpdkZpeCggU1VCX0xPTkcoIGN1cjIsIGN1cjEgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfTE9ORyggb3J1czIsIG9ydXMxICkgKTsKICAgICAgICAgICB9CiAKLSAgICAgICAgICB4ID0gY3VyMSArIEZUX011bEZpeCggd29ya2VyLT5vcnVzW2ldLnggLSBvcnVzMSwgc2NhbGUgKTsKKyAgICAgICAgICB4ID0gQUREX0xPTkcoIGN1cjEsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIFNVQl9MT05HKCB3b3JrZXItPm9ydXNbaV0ueCwgb3J1czEgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgKSApOwogICAgICAgICB9CiAgICAgICAgIHdvcmtlci0+Y3Vyc1tpXS54ID0geDsKICAgICAgIH0KQEAgLTY4NTIsMTEgKzY5MjQsMTEgQEAKIAogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKLSAgICAvKiBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuICovCisgICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUuICAqLwogICAgIC8qIEFsbG93IElVUCB1bnRpbCBpdCBoYXMgYmVlbiBjYWxsZWQgb24gYm90aCBheGVzLiAgSW1tZWRpYXRlbHkgKi8KICAgICAvKiByZXR1cm4gb24gc3Vic2VxdWVudCBvbmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICYmCi0gICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAmJgorICAgICAgICAgZXhjLT5iYWNrd2FyZF9jb21wYXRpYmlsaXR5ICkKICAgICB7CiAgICAgICBpZiAoIGV4Yy0+aXVweF9jYWxsZWQgJiYgZXhjLT5pdXB5X2NhbGxlZCApCiAgICAgICAgIHJldHVybjsKQEAgLTcwODksNyArNzE2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgU1BIX1RXRUFLX1NLSVBfTk9OUElYRUxfWV9NT1ZFU19ERUxUQVAgKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAoIEIxICYgNjMgKSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKCBCMiAmIDYzICkgIT0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKSApCi0gICAgICAgICAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBBLCAtQiApOworICAgICAgICAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgQSwgTkVHX0xPTkcoIEIgKSApOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCkBAIC03MDk4LDEwICs3MTcwLDEwIEBACiAgICAgICAgICAgewogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKLSAgICAgICAgICAgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSAgICAgICAgICAgIC8qIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgotICAgICAgICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICAgICAgICAgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworICAgICAgICAgICAgLyogbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAmJgorICAgICAgICAgICAgICAgICBleGMtPmJhY2t3YXJkX2NvbXBhdGliaWxpdHkgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZiAoICEoIGV4Yy0+aXVweF9jYWxsZWQgJiYgZXhjLT5pdXB5X2NhbGxlZCApICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgICggKCBleGMtPmlzX2NvbXBvc2l0ZSAmJiBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICkgfHwKQEAgLTcyNDUsNyArNzMxNyw3IEBACiAgICAgewogICAgICAgaWYgKCBleGMtPmlnbm9yZV94X21vZGUgKQogICAgICAgewotICAgICAgICAvKiBpZiBpbiBDbGVhclR5cGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZSwgICAgICAgICovCisgICAgICAgIC8qIGlmIGluIENsZWFyVHlwZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG1vZGUsICAgICAgICAgKi8KICAgICAgICAgLyogd2Ugc29tZXRpbWVzIGNoYW5nZSB0aGUgVHJ1ZVR5cGUgdmVyc2lvbiBkeW5hbWljYWxseSAqLwogICAgICAgICBLID0gZXhjLT5yYXN0ZXJpemVyX3ZlcnNpb247CiAgICAgICAgIEZUX1RSQUNFNigoICJTZXR0aW5nIHJhc3Rlcml6ZXIgdmVyc2lvbiAlZFxuIiwKQEAgLTcyOTYsNyArNzM2OCwxMSBAQAogICAgICAgSyB8PSAxIDw8IDEyOwogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCApCisgICAgLyogVG9nZ2xlIHRoZSBmb2xsb3dpbmcgZmxhZ3Mgb25seSBvdXRzaWRlIG9mIG1vbm9jaHJvbWUgbW9kZS4gICAgICAqLworICAgIC8qIE90aGVyd2lzZSwgaW5zdHJ1Y3Rpb25zIG1heSBiZWhhdmUgd2VpcmRseSBhbmQgcmVuZGVyaW5nIHJlc3VsdHMgKi8KKyAgICAvKiBtYXkgZGlmZmVyIGJldHdlZW4gdjM1IGFuZCB2NDAgbW9kZSwgZS5nLiwgaW4gYFRpbWVzIE5ldyBSb21hbiAgICovCisgICAgLyogQm9sZCBJdGFsaWMnLiAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICYmIGV4Yy0+c3VicGl4ZWxfaGludGluZ19sZWFuICkKICAgICB7CiAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgICAvKiBISU5USU5HIEZPUiBTVUJQSVhFTCAgICAgICAgICovCkBAIC03MzMxLDcgKzc0MDcsNyBAQAogICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgLyogVGhlIG9ubHkgc21vb3RoaW5nIG1ldGhvZCBGcmVlVHlwZSBzdXBwb3J0cyB1bmxlc3Mgc29tZW9uZSBzZXRzICovCiAgICAgICAvKiBGVF9MT0FEX1RBUkdFVF9NT05PLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgIGlmICggKCBhcmdzWzBdICYgMjA0OCApICE9IDAgKQorICAgICAgaWYgKCAoIGFyZ3NbMF0gJiAyMDQ4ICkgIT0gMCAmJiBleGMtPnN1YnBpeGVsX2hpbnRpbmdfbGVhbiApCiAgICAgICAgIEsgfD0gMSA8PCAxODsKIAogICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzQ1Niw4ICs3NTMyLDE2IEBACiAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZm9yICggaSA9IDA7IGkgPCBudW1fYXhlczsgaSsrICkKLSAgICAgIGFyZ3NbaV0gPSBjb29yZHNbaV0gPj4gMjsgLyogY29udmVydCAxNi4xNiB0byAyLjE0IGZvcm1hdCAqLworICAgIGlmICggY29vcmRzICkKKyAgICB7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9heGVzOyBpKysgKQorICAgICAgICBhcmdzW2ldID0gY29vcmRzW2ldID4+IDI7IC8qIGNvbnZlcnQgMTYuMTYgdG8gMi4xNCBmb3JtYXQgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtX2F4ZXM7IGkrKyApCisgICAgICAgIGFyZ3NbaV0gPSAwOworICAgIH0KICAgfQogCiAKQEAgLTc1NzUsMTUgKzc2NTksMjUgQEAKICNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKLSAgICAvKiBUb2dnbGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWNjb3JkaW5nIHRvIHdoYXQgZm9udCBzYXlzLCBleGNlcHQgICovCi0gICAgLyogd2hlbiBpdCdzIGEgYHRyaWNreScgZm9udCB0aGF0IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBpbnRlcnByZXRlciB0byAqLwotICAgIC8qIHJlbmRlciBnbHlwaHMgY29ycmVjdGx5LCBlLmcuIERGS2FpLVNCLiAgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgICAgKi8KLSAgICAvKiBoYWNrcyBtYXkgYnJlYWsgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyoKKyAgICAgKiAgVG9nZ2xlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWNjb3JkaW5nIHRvIHdoYXQgZm9udCB3YW50cywgZXhjZXB0CisgICAgICogIHdoZW4KKyAgICAgKgorICAgICAqICAxKSB3ZSBoYXZlIGEgYHRyaWNreScgZm9udCB0aGF0IGhlYXZpbHkgcmVsaWVzIG9uIHRoZSBpbnRlcnByZXRlciB0bworICAgICAqICAgICByZW5kZXIgZ2x5cGhzIGNvcnJlY3RseSwgZm9yIGV4YW1wbGUgREZLYWktU0IsIG9yCisgICAgICogIDIpIEZUX1JFTkRFUl9NT0RFX01PTk8gKGkuZSwgbW9ub2Nob21lIHJlbmRlcmluZykgaXMgcmVxdWVzdGVkLgorICAgICAqCisgICAgICogIEluIHRob3NlIGNhc2VzLCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5lZWRzIHRvIGJlIHR1cm5lZCBvZmYgdG8gZ2V0CisgICAgICogIGNvcnJlY3QgcmVuZGVyaW5nLiAgVGhlIHJlbmRlcmluZyBpcyB0aGVuIGNvbXBsZXRlbHkgdXAgdG8gdGhlCisgICAgICogIGZvbnQncyBwcm9ncmFtbWluZy4KKyAgICAgKgorICAgICAqLwogICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAgICAgICYmCisgICAgICAgICBleGMtPnN1YnBpeGVsX2hpbnRpbmdfbGVhbiAgICAgICAgJiYKICAgICAgICAgICFGVF9JU19UUklDS1koICZleGMtPmZhY2UtPnJvb3QgKSApCi0gICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ID0gISggZXhjLT5HUy5pbnN0cnVjdF9jb250cm9sICYgNCApOworICAgICAgZXhjLT5iYWNrd2FyZF9jb21wYXRpYmlsaXR5ID0gISggZXhjLT5HUy5pbnN0cnVjdF9jb250cm9sICYgNCApOwogICAgIGVsc2UKLSAgICAgIGV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgPSBGQUxTRTsKKyAgICAgIGV4Yy0+YmFja3dhcmRfY29tcGF0aWJpbGl0eSA9IEZBTFNFOwogCiAgICAgZXhjLT5pdXB4X2NhbGxlZCA9IEZBTFNFOwogICAgIGV4Yy0+aXVweV9jYWxsZWQgPSBGQUxTRTsKQEAgLTc2MjUsOCArNzcxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTUFYKCA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+Y3Z0U2l6ZSAvIDEwICk7CiAgICAgZWxzZQotICAgICAgZXhjLT5sb29wY2FsbF9jb3VudGVyX21heCA9IEZUX01BWCggMTAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgKiBleGMtPmN2dFNpemUgKTsKKyAgICAgIGV4Yy0+bG9vcGNhbGxfY291bnRlcl9tYXggPSAzMDAgKyA4ICogZXhjLT5jdnRTaXplOwogCiAgICAgLyogYXMgYSBwcm90ZWN0aW9uIGFnYWluc3QgYW4gdW5yZWFzb25hYmxlIG51bWJlciBvZiBDVlQgZW50cmllcyAgKi8KICAgICAvKiB3ZSBhc3N1bWUgYXQgbW9zdCAxMDAgY29udHJvbCB2YWx1ZXMgcGVyIGdseXBoIGZvciB0aGUgY291bnRlciAqLwpAQCAtODQwMSwzMCArODQ5NCwyNyBAQAogICAgIH0gd2hpbGUgKCAhZXhjLT5pbnN0cnVjdGlvbl90cmFwICk7CiAKICAgTE5vX0Vycm9yXzoKLSAgICBGVF9UUkFDRTQoKCAiICAlZCBpbnN0cnVjdGlvbnMgZXhlY3V0ZWRcbiIsIGluc19jb3VudGVyICkpOworICAgIEZUX1RSQUNFNCgoICIgICVkIGluc3RydWN0aW9uJXMgZXhlY3V0ZWRcbiIsCisgICAgICAgICAgICAgICAgaW5zX2NvdW50ZXIgPT0gMSA/ICIiIDogInMiLAorICAgICAgICAgICAgICAgIGluc19jb3VudGVyICkpOwogICAgIHJldHVybiBGVF9FcnJfT2s7CiAKICAgTEVycm9yQ29kZU92ZXJmbG93XzoKICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIENvZGVfT3ZlcmZsb3cgKTsKIAogICBMRXJyb3JMYWJlbF86Ci0gICAgLyogSWYgYW55IGVycm9ycyBoYXZlIG9jY3VycmVkLCBmdW5jdGlvbiB0YWJsZXMgbWF5IGJlIGJyb2tlbi4gKi8KLSAgICAvKiBGb3JjZSBhIHJlLWV4ZWN1dGlvbiBvZiBgcHJlcCcgYW5kIGBmcGdtJyB0YWJsZXMgaWYgbm8gICAgICAqLwotICAgIC8qIGJ5dGVjb2RlIGRlYnVnZ2VyIGlzIHJ1bi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCBleGMtPmVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgIWV4Yy0+aW5zdHJ1Y3Rpb25fdHJhcCAgICAgICAgICAgICAgJiYKLSAgICAgICAgIGV4Yy0+Y3VyUmFuZ2UgPT0gdHRfY29kZXJhbmdlX2dseXBoICkKLSAgICB7CisgICAgaWYgKCBleGMtPmVycm9yICYmICFleGMtPmluc3RydWN0aW9uX3RyYXAgKQogICAgICAgRlRfVFJBQ0UxKCggIiAgVGhlIGludGVycHJldGVyIHJldHVybmVkIGVycm9yIDB4JXhcbiIsIGV4Yy0+ZXJyb3IgKSk7Ci0gICAgICBleGMtPnNpemUtPmJ5dGVjb2RlX3JlYWR5ID0gLTE7Ci0gICAgICBleGMtPnNpemUtPmN2dF9yZWFkeSAgICAgID0gLTE7Ci0gICAgfQogCiAgICAgcmV0dXJuIGV4Yy0+ZXJyb3I7CiAgIH0KIAorI2Vsc2UgLyogIVRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLwogCi0jZW5kaWYgLyogVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCisgIC8qIEFOU0kgQyBkb2Vzbid0IGxpa2UgZW1wdHkgc291cmNlIGZpbGVzICovCisgIHR5cGVkZWYgaW50ICBfdHRfaW50ZXJwX2R1bW15OworCisjZW5kaWYgLyogIVRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAppbmRleCA2NjI1ZTE2Li4yOTY2NDM5IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUzLDIzICsyNTMsMzggQEAKIAogI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCiAgICAgLyoKLSAgICAgKiBNb2Rlcm4gVHJ1ZVR5cGUgZm9udHMgYXJlIHVzdWFsbHkgcmVuZGVyZWQgdGhyb3VnaCBNaWNyb3NvZnQncwotICAgICAqIGNvbGxlY3Rpb24gb2YgcmVuZGVyaW5nIHRlY2huaXF1ZXMgY2FsbGVkIENsZWFyVHlwZSAoZS5nLiwgc3VicGl4ZWwKLSAgICAgKiByZW5kZXJpbmcgYW5kIHN1YnBpeGVsIGhpbnRpbmcpLiAgV2hlbiBDbGVhclR5cGUgd2FzIGludHJvZHVjZWQsIG1vc3QKLSAgICAgKiBmb250cyB3ZXJlIG5vdCByZWFkeS4gIE1pY3Jvc29mdCBkZWNpZGVkIHRvIGltcGxlbWVudCBhIGJhY2t3YXJkcwotICAgICAqIGNvbXBhdGliaWxpdHkgbW9kZSB0aGF0IGVtcGxveWVkIHNldmVyYWwgc2ltcGxlIHRvIGNvbXBsaWNhdGVkCi0gICAgICogYXNzdW1wdGlvbnMgYW5kIHRyaWNrcyB0aGF0IG1vZGlmaWVkIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUKLSAgICAgKiBieXRlY29kZSBjb250YWluZWQgaW4gdGhlc2UgZm9udHMgdG8gbWFrZSB0aGVtIGxvb2sgQ2xlYXJUeXBlLXkKLSAgICAgKiBzb21laG93LiAgTW9zdCAod2ViKWZvbnRzIHRoYXQgd2VyZSByZWxlYXNlZCBzaW5jZSB0aGVuIGhhdmUgY29tZSB0bwotICAgICAqIHJlbHkgb24gdGhlc2UgaGFja3MgdG8gcmVuZGVyIGNvcnJlY3RseSwgZXZlbiBzb21lIG9mIE1pY3Jvc29mdCdzCi0gICAgICogZmxhZ3NoaXAgQ2xlYXJUeXBlIGZvbnRzIChDYWxpYnJpLCBDYW1icmlhLCBTZWdvZSBVSSkuCisgICAgICogRnJlZVR5cGUgc3VwcG9ydHMgQ2xlYXJUeXBlLWxpa2UgaGludGluZyBvZiBUcnVlVHlwZSBmb250cyB0aHJvdWdoCisgICAgICogdGhlIHZlcnNpb24gNDAgaW50ZXJwcmV0ZXIuICBUaGlzIGlzIGFjaGlldmVkIHRocm91Z2ggc2V2ZXJhbCBoYWNrcworICAgICAqIGluIHRoZSBiYXNlICh2MzUpIGludGVycHJldGVyLCBhcyBkZXRhaWxlZCBiZWxvdy4KICAgICAgKgotICAgICAqIFRoZSBtaW5pbWFsIHN1YnBpeGVsIGhpbnRpbmcgY29kZSAoaW50ZXJwcmV0ZXIgdmVyc2lvbiA0MCkgZW1wbG95cyBhCi0gICAgICogc21hbGwgbGlzdCBvZiBmb250LWFnbm9zdGljIGhhY2tzIHRvIGJsdWRnZW9uIG5vbi1uYXRpdmUtQ2xlYXJUeXBlCi0gICAgICogZm9udHMgKGV4Y2VwdCB0cmlja3kgb25lc1sxXSkgaW50byBzdWJtaXNzaW9uLiAgSXQgd2lsbCBub3QgdHJ5IHRvCi0gICAgICogdG9nZ2xlIGhhY2tzIGZvciBzcGVjaWZpYyBmb250cyBmb3IgcGVyZm9ybWFuY2UgYW5kIGNvbXBsZXhpdHkKLSAgICAgKiByZWFzb25zLiAgVGhlIGZvY3VzIGlzIG9uIG1vZGVybiAod2ViKWZvbnRzIHJhdGhlciB0aGFuIGxlZ2FjeSBmb250cwotICAgICAqIHRoYXQgd2VyZSBtYWRlIGZvciBibGFjay1hbmQtd2hpdGUgcmVuZGVyaW5nLgorICAgICAqIENsZWFyVHlwZSBpcyBhbiB1bWJyZWxsYSB0ZXJtIGZvciBzZXZlcmFsIHJlbmRlcmluZyB0ZWNobmlxdWVzCisgICAgICogZW1wbG95ZWQgYnkgTWljcm9zb2Z0J3MgdmFyaW91cyBHVUkgYW5kIHJlbmRlcmluZyB0b29sa2l0CisgICAgICogaW1wbGVtZW50YXRpb25zLCBtb3N0IGltcG9ydGFudGx5OiBzdWJwaXhlbCByZW5kZXJpbmcgZm9yIHVzaW5nIHRoZQorICAgICAqIFJHQiBzdWJwaXhlbHMgb2YgTENEcyB0byBhcHByb3hpbWF0ZWx5IHRyaXBsZSB0aGUgcGVyY2VpdmVkCisgICAgICogcmVzb2x1dGlvbiBvbiB0aGUgeC1heGlzIGFuZCBzdWJwaXhlbCBoaW50aW5nIGZvciBwb3NpdGlvbmluZyBzdGVtcworICAgICAqIG9uIHN1YnBpeGVsIGJvcmRlcnMuICBUcnVlVHlwZSBwcm9ncmFtbWluZyBpcyBleHBsaWNpdCwgaS5lLiwgZm9udHMKKyAgICAgKiBtdXN0IGJlIHByb2dyYW1tZWQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgQ2xlYXJUeXBlJ3MgcG9zc2liaWxpdGllcy4KKyAgICAgKgorICAgICAqIFdoZW4gQ2xlYXJUeXBlIHdhcyBpbnRyb2R1Y2VkLCBpdCBzZWVtZWQgdW5saWtlbHkgdGhhdCBhbGwgZm9udHMKKyAgICAgKiB3b3VsZCBiZSByZXByb2dyYW1tZWQsIHNvIE1pY3Jvc29mdCBkZWNpZGVkIHRvIGltcGxlbWVudCBhIGJhY2t3YXJkCisgICAgICogY29tcGF0aWJpbGl0eSBtb2RlLiAgSXQgZW1wbG95cyBzZXZlcmFsIHNpbXBsZSB0byBjb21wbGljYXRlZAorICAgICAqIGFzc3VtcHRpb25zIGFuZCB0cmlja3MsIG1hbnkgb2YgdGhlbSBmb250LWRlcGVuZGVudCwgdGhhdCBtb2RpZnkgdGhlCisgICAgICogaW50ZXJwcmV0YXRpb24gb2YgdGhlIGJ5dGVjb2RlIGNvbnRhaW5lZCBpbiB0aGVzZSBmb250cyB0byByZXRyb2ZpdAorICAgICAqIHRoZW0gaW50byBhIENsZWFyVHlwZS15IGxvb2suICBUaGUgcXVhbGl0eSBvZiB0aGUgcmVzdWx0cyB2YXJpZXMuCisgICAgICogTW9zdCAod2ViKWZvbnRzIHRoYXQgd2VyZSByZWxlYXNlZCBzaW5jZSB0aGVuIGhhdmUgY29tZSB0byByZWx5IG9uCisgICAgICogdGhlc2UgaGFja3MgdG8gcmVuZGVyIGNvcnJlY3RseSwgZXZlbiBzb21lIG9mIE1pY3Jvc29mdCdzIGZsYWdzaGlwCisgICAgICogZm9udHMgKGUuZy4sIENhbGlicmksIENhbWJyaWEsIFNlZ29lIFVJKS4KKyAgICAgKgorICAgICAqIEZyZWVUeXBlJ3MgbWluaW1hbCBzdWJwaXhlbCBoaW50aW5nIGNvZGUgKGludGVycHJldGVyIHZlcnNpb24gNDApCisgICAgICogZW1wbG95cyBhIHNtYWxsIGxpc3Qgb2YgZm9udC1hZ25vc3RpYyBoYWNrcyBsb29zZWx5IGJhc2VkIG9uIHRoZQorICAgICAqIHB1YmxpYyBpbmZvcm1hdGlvbiBhdmFpbGFibGUgb24gTWljcm9zb2Z0J3MgY29tcGF0aWJpbGl0eSBtb2RlWzJdLgorICAgICAqIFRoZSBmb2N1cyBpcyBvbiBtb2Rlcm4gKHdlYilmb250cyByYXRoZXIgdGhhbiBsZWdhY3kgZm9udHMgdGhhdCB3ZXJlCisgICAgICogbWFkZSBmb3IgbW9ub2Nocm9tZSByZW5kZXJpbmcuICBJdCB3aWxsIG5vdCBtYXRjaCBDbGVhclR5cGUgcmVuZGVyaW5nCisgICAgICogZXhhY3RseS4gIFVubGlrZSB0aGUgYEluZmluYWxpdHknIGNvZGUgKGludGVycHJldGVyIHZlcnNpb24gMzgpIHRoYXQKKyAgICAgKiBjYW1lIGJlZm9yZSwgaXQgd2lsbCBub3QgdHJ5IHRvIHRvZ2dsZSBoYWNrcyBmb3Igc3BlY2lmaWMgZm9udHMgZm9yCisgICAgICogcGVyZm9ybWFuY2UgYW5kIGNvbXBsZXhpdHkgcmVhc29ucy4gIEl0IHdpbGwgZmFsbCBiYWNrIHRvIHZlcnNpb24gMzUKKyAgICAgKiBiZWhhdmlvciBmb3IgdHJpY2t5IGZvbnRzWzFdIG9yIHdoZW4gbW9ub2Nocm9tZSByZW5kZXJpbmcgaXMKKyAgICAgKiByZXF1ZXN0ZWQuCiAgICAgICoKICAgICAgKiBNYWpvciBoYWNrcwogICAgICAqCkBAIC0zMTYsMTIgKzMzMSwxMiBAQAogICAgICAqIHZlcnkgc3BlY2lmaWMgcGF0dGVybnMgKGBzdXBlcmhpbnRpbmcnKSBmb3IgcHJlLUNsZWFyVHlwZS1kaXNwbGF5cywKICAgICAgKiB0aGUgd29yc2UgdGhlIHJlc3VsdHMuCiAgICAgICoKLSAgICAgKiBNaWNyb3NvZnQgZGVmaW5lcyBhIHdheSB0byB0dXJuIG9mZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQKKyAgICAgKiBNaWNyb3NvZnQgZGVmaW5lcyBhIHdheSB0byB0dXJuIG9mZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZAogICAgICAqIGludGVycHJldCBpbnN0cnVjdGlvbnMgYXMgYmVmb3JlIChjYWxsZWQgYG5hdGl2ZSBDbGVhclR5cGUnKVsyXVszXS4KICAgICAgKiBUaGUgZm9udCBkZXNpZ25lciB0aGVuIHJlZ2FpbnMgZnVsbCBjb250cm9sIGFuZCBpcyByZXNwb25zaWJsZSBmb3IKICAgICAgKiBtYWtpbmcgdGhlIGZvbnQgd29yayBjb3JyZWN0bHkgd2l0aCBDbGVhclR5cGUgd2l0aG91dCBhbnkKICAgICAgKiBoYW5kLWhvbGRpbmcgYnkgdGhlIGludGVycHJldGVyIG9yIHJhc3Rlcml6ZXJbNF0uICBUaGUgdjQwCi0gICAgICogaW50ZXJwcmV0ZXIgYXNzdW1lcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBieSBkZWZhdWx0LCB3aGljaCBjYW4gYmUKKyAgICAgKiBpbnRlcnByZXRlciBhc3N1bWVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYnkgZGVmYXVsdCwgd2hpY2ggY2FuIGJlCiAgICAgICogdHVybmVkIG9mZiB0aGUgc2FtZSB3YXkgYnkgZXhlY3V0aW5nIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNvbnRyb2wKICAgICAgKiBwcm9ncmFtIChjZi4gYEluc19JTlNUQ1RSTCcpLgogICAgICAqCkBAIC0zMzEsNyArMzQ2LDcgQEAKICAgICAgKiBbMV0gVHJpY2t5IGZvbnRzIGFzIEZyZWVUeXBlIGRlZmluZXMgdGhlbSByZWx5IG9uIHRoZSBieXRlY29kZQogICAgICAqICAgICBpbnRlcnByZXRlciB0byBkaXNwbGF5IGNvcnJlY3RseS4gIEhhY2tzIGNhbiBpbnRlcmZlcmUgd2l0aCB0aGVtLAogICAgICAqICAgICBzbyB0aGV5IGdldCB0cmVhdGVkIGxpa2UgbmF0aXZlIENsZWFyVHlwZSBmb250cyAodjQwIHdpdGgKLSAgICAgKiAgICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdHVybmVkIG9mZikuICBDZi4gYFRUX1J1bklucycuCisgICAgICogICAgIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdHVybmVkIG9mZikuICBDZi4gYFRUX1J1bklucycuCiAgICAgICoKICAgICAgKiBbMl0gUHJvcG9zZWQgYnkgTWljcm9zb2Z0J3MgR3JlZyBIaXRjaGNvY2sgaW4KICAgICAgKiAgICAgaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L2NsZWFydHlwZS90cnVldHlwZWNsZWFydHlwZS5hc3B4CkBAIC0zNDcsNyArMzYyLDggQEAKICAgICAgKgogICAgICAqLwogCi0gICAgLyogVXNpbmcgdjQwIGltcGxpZXMgc3VicGl4ZWwgaGludGluZy4gIFVzZWQgdG8gZGV0ZWN0IGludGVycHJldGVyICovCisgICAgLyogVXNpbmcgdjQwIGltcGxpZXMgc3VicGl4ZWwgaGludGluZywgdW5sZXNzIEZUX1JFTkRFUl9NT0RFX01PTk8gaGFzIGJlZW4KKyAgICAgKiByZXF1ZXN0ZWQuICBVc2VkIHRvIGRldGVjdCBpbnRlcnByZXRlciAqLwogICAgIC8qIHZlcnNpb24gc3dpdGNoZXMuICBgX2xlYW4nIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUgSW5maW5hbGl0eSAqLwogICAgIC8qIGBzdWJwaXhlbF9oaW50aW5nJywgd2hpY2ggaXMgbWFuYWdlZCBkaWZmZXJlbnRseS4gICAgICAgICAgICAgICAqLwogICAgIEZUX0Jvb2wgICAgICAgICAgICBzdWJwaXhlbF9oaW50aW5nX2xlYW47CkBAIC0zNTcsMTAgKzM3MywxMCBAQAogICAgIC8qIGlzIG1hbmFnZWQgZGlmZmVyZW50bHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIEZUX0Jvb2wgICAgICAgICAgICB2ZXJ0aWNhbF9sY2RfbGVhbjsKIAotICAgIC8qIERlZmF1bHQgdG8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZSBpbiB2NDAgaW50ZXJwcmV0ZXIuICBJZiAgKi8KKyAgICAvKiBEZWZhdWx0IHRvIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbW9kZSBpbiB2NDAgaW50ZXJwcmV0ZXIuICBJZiAgICovCiAgICAgLyogdGhpcyBpcyBmYWxzZSwgaXQgaW1wbGllcyB0aGUgaW50ZXJwcmV0ZXIgaXMgaW4gdjM1IG9yIGluIG5hdGl2ZSAqLwogICAgIC8qIENsZWFyVHlwZSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBGVF9Cb29sICAgICAgICAgICAgYmFja3dhcmRzX2NvbXBhdGliaWxpdHk7CisgICAgRlRfQm9vbCAgICAgICAgICAgIGJhY2t3YXJkX2NvbXBhdGliaWxpdHk7CiAKICAgICAvKiBVc2VmdWwgZm9yIGRldGVjdGluZyBhbmQgZGVueWluZyBwb3N0LUlVUCB0cmlja2VyeSB0aGF0IGlzIHVzdWFsbHkgKi8KICAgICAvKiB1c2VkIHRvIGZpeCBwaXhlbCBwYXR0ZXJucyAoYHN1cGVyaGludGluZycpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dG9ianMuYyBiL3NyYy90cnVldHlwZS90dG9ianMuYwppbmRleCBmZDBjNGRkLi5iYzgwODZmIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0b2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRk5UX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogCiAjaW5jbHVkZSAidHRnbG9hZC5oIgogI2luY2x1ZGUgInR0cGxvYWQuaCIKQEAgLTE0NywyMCArMTQ3LDQ4IEBACiAgIHsKIAogI2RlZmluZSBUUklDS19OQU1FU19NQVhfQ0hBUkFDVEVSUyAgMTkKLSNkZWZpbmUgVFJJQ0tfTkFNRVNfQ09VTlQgICAgICAgICAgICA5CisjZGVmaW5lIFRSSUNLX05BTUVTX0NPVU5UICAgICAgICAgICAyMwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgdHJpY2tfbmFtZXNbVFJJQ0tfTkFNRVNfQ09VTlRdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVFJJQ0tfTkFNRVNfTUFYX0NIQVJBQ1RFUlMgKyAxXSA9CiAgICAgeworICAgICAgLyoKKyAgICAgICAgIFBvc3RTY3JpcHQgbmFtZXMgYXJlIGdpdmVuIGluIGJyYWNrZXRzIGlmIHRoZXkgZGlmZmVyIGZyb20gdGhlCisgICAgICAgICBmYW1pbHkgbmFtZS4gIFRoZSB2ZXJzaW9uIG51bWJlcnMsIHRvZ2V0aGVyIHdpdGggdGhlIGNvcHlyaWdodCBvcgorICAgICAgICAgcmVsZWFzZSB5ZWFyIGRhdGEsIGFyZSB0YWtlbiBmcm9tIGZvbnRzIGF2YWlsYWJsZSB0byB0aGUKKyAgICAgICAgIGRldmVsb3BlcnMuCisKKyAgICAgICAgIE5vdGUgdGhhdCBsYXRlciB2ZXJzaW9ucyBvZiB0aGUgZm9udHMgbWlnaHQgYmUgbm8gbG9uZ2VyIHRyaWNreTsKKyAgICAgICAgIGZvciBleGFtcGxlLCBgTWluZ0xpVScgdmVyc2lvbiA3LjAwIChmaWxlIGBtaW5nbGl1LnR0YycgZnJvbQorICAgICAgICAgV2luZG93cyA3KSBpcyBhbiBvcmRpbmFyeSBUVEMgd2l0aCBub24tdHJpY2t5IHN1YmZvbnRzLgorICAgICAgICovCisKKyAgICAgICJjcG9wIiwgICAgICAgICAgICAgICAvKiBkZnR0LXA3LnR0ZjsgdmVyc2lvbiAxLjAwLCAxOTkyIFtETEpHeVNob01lZGl1bV0gKi8KKyAgICAgICJERkdpcmwtVzYtV0lOLUJGIiwgICAvKiBkZnR0LWg2LnR0ZjsgdmVyc2lvbiAxLjAwLCAxOTkzICovCisgICAgICAiREZHb3RoaWMtRUIiLCAgICAgICAgLyogRHluYUxhYiBJbmMuIDE5OTItMTk5NSAqLworICAgICAgIkRGR3lvU2hvLUx0IiwgICAgICAgIC8qIER5bmFMYWIgSW5jLiAxOTkyLTE5OTUgKi8KKyAgICAgICJERkhTR290aGljLVc1IiwgICAgICAvKiBEeW5hTGFiIEluYy4gMTk5Mi0xOTk1ICovCisgICAgICAiREZIU01pbmNoby1XMyIsICAgICAgLyogRHluYUxhYiBJbmMuIDE5OTItMTk5NSAqLworICAgICAgIkRGSFNNaW5jaG8tVzciLCAgICAgIC8qIER5bmFMYWIgSW5jLiAxOTkyLTE5OTUgKi8KICAgICAgICJERkthaVNoby1TQiIsICAgICAgICAvKiBkZmthaXNiLnR0ZiAqLwogICAgICAgIkRGS2FpU2h1IiwKLSAgICAgICJERkthaS1TQiIsICAgICAgICAgICAvKiBrYWl1LnR0ZiAqLworICAgICAgIkRGS2FpLVNCIiwgICAgICAgICAgIC8qIGthaXUudHRmOyB2ZXJzaW9uIDMuMDAsIDE5OTggW0RGS2FpU2h1LVNCLUVzdGQtQkZdICovCisgICAgICAiRExDIiwgICAgICAgICAgICAgICAgLyogZGZ0dC1tNy50dGY7IHZlcnNpb24gMS4wMCwgMTk5MyBbRExDTWluZ0JvbGRdICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGZ0dC1mNS50dGY7IHZlcnNpb24gMS4wMCwgMTk5MyBbRExDRm9uZ1N1bmddICovCisgICAgICAiRExDSGF5TWVkaXVtIiwgICAgICAgLyogZGZ0dC1iNS50dGY7IHZlcnNpb24gMS4wMCwgMTk5MyAqLworICAgICAgIkRMQ0hheUJvbGQiLCAgICAgICAgIC8qIGRmdHQtYjcudHRmOyB2ZXJzaW9uIDEuMDAsIDE5OTMgKi8KKyAgICAgICJETENLYWlNZWRpdW0iLCAgICAgICAvKiBkZnR0LWs1LnR0ZjsgdmVyc2lvbiAxLjAwLCAxOTkyICovCisgICAgICAiRExDTGlTaHUiLCAgICAgICAgICAgLyogZGZ0dC1sNS50dGY7IHZlcnNpb24gMS4wMCwgMTk5MiAqLworICAgICAgIkRMQ1JvdW5kQm9sZCIsICAgICAgIC8qIGRmdHQtcjcudHRmOyB2ZXJzaW9uIDEuMDAsIDE5OTMgKi8KICAgICAgICJIdWFUaWFuS2FpVGk/IiwgICAgICAvKiBodGt0Mi50dGYgKi8KICAgICAgICJIdWFUaWFuU29uZ1RpPyIsICAgICAvKiBodHN0My50dGYgKi8KLSAgICAgICJNaW5nKGZvciBJU08xMDY0NikiLCAvKiBoa3Njc2lpYy50dGYgJiBpaWNvcmUudHRmICovCi0gICAgICAiTWluZ0xpVSIsICAgICAgICAgICAgLyogbWluZ2xpdS50dGYgJiBtaW5nbGl1LnR0YyAqLwotICAgICAgIlBNaW5nTGlVIiwgICAgICAgICAgIC8qIG1pbmdsaXUudHRjICovCi0gICAgICAiTWluZ0xpNDMiLCAgICAgICAgICAgLyogbWluZ2xpLnR0ZiAqLworICAgICAgIk1pbmcoZm9yIElTTzEwNjQ2KSIsIC8qIGhrc2NzaWljLnR0ZjsgdmVyc2lvbiAwLjEyLCAyMDA3IFtNaW5nXSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlpY29yZS50dGY7IHZlcnNpb24gMC4wNywgMjAwNyBbTWluZ10gKi8KKyAgICAgICJNaW5nTGlVIiwgICAgICAgICAgICAvKiBtaW5nbGl1LnR0ZiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1pbmdsaXUudHRjOyB2ZXJzaW9uIDMuMjEsIDIwMDEgKi8KKyAgICAgICJNaW5nTWVkaXVtIiwgICAgICAgICAvKiBkZnR0LW01LnR0ZjsgdmVyc2lvbiAxLjAwLCAxOTkzIFtETENNaW5nTWVkaXVtXSAqLworICAgICAgIlBNaW5nTGlVIiwgICAgICAgICAgIC8qIG1pbmdsaXUudHRjOyB2ZXJzaW9uIDMuMjEsIDIwMDEgKi8KKyAgICAgICJNaW5nTGk0MyIsICAgICAgICAgICAvKiBtaW5nbGkudHRmOyB2ZXJzaW9uIDEuMDAsIDE5OTIgKi8KICAgICB9OwogCiAgICAgaW50ICBubjsKQEAgLTI0Miw3ICsyNzAsNyBAQAogICB0dF9jaGVja190cmlja3luZXNzX3NmbnRfaWRzKCBUVF9GYWNlICBmYWNlICkKICAgewogI2RlZmluZSBUUklDS19TRk5UX0lEU19QRVJfRkFDRSAgIDMKLSNkZWZpbmUgVFJJQ0tfU0ZOVF9JRFNfTlVNX0ZBQ0VTICAxOAorI2RlZmluZSBUUklDS19TRk5UX0lEU19OVU1fRkFDRVMgIDI2CiAKICAgICBzdGF0aWMgY29uc3QgdHRfc2ZudF9pZF9yZWMgc2ZudF9pZFtUUklDS19TRk5UX0lEU19OVU1fRkFDRVNdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVFJJQ0tfU0ZOVF9JRFNfUEVSX0ZBQ0VdID0gewpAQCAtMjYxLDE2ICsyODksNTEgQEAKICAgICAgICAgeyAweDI4MjMzQkYxVUwsIDB4MDAwMDg3QzRVTCB9LCAvKiBmcGdtICovCiAgICAgICAgIHsgMHhBMzQ0QTFFQlVMLCAweDAwMDAwMUUxVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKKyAgICAgIHsgLyogREZHb3RoaWMtRUIgKi8KKyAgICAgICAgeyAweDEyQzNFQkIyVUwsIDB4MDAwMDAzNTBVTCB9LCAvKiBjdnQgICovCisgICAgICAgIHsgMHhCNjgwRUU2NFVMLCAweDAwMDA4N0E3VUwgfSwgLyogZnBnbSAqLworICAgICAgICB7IDB4Q0U5Mzk1NjNVTCwgMHgwMDAwMDc1OFVMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICB7IC8qIERGR3lvU2hvLUx0ICovCisgICAgICAgIHsgMHgxMUU1RUFENFVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4Q0U1OTU2RTlVTCwgMHgwMDAwQkM4NVVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDgyNzJGNDE2VUwsIDB4MDAwMDAwNDVVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBERkhTR290aGljLVc1ICovCisgICAgICAgIHsgMHgxMjYyRUI0RVVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4RTg2QTVENjRVTCwgMHgwMDAwNzk0MFVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDc4NTBGNzI5VUwsIDB4MDAwMDA1RkZVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBERkhTTWluY2hvLVczICovCisgICAgICAgIHsgMHgxMjJERUIwQVVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4M0QxNjMyOEFVTCwgMHgwMDAwODU5QlVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweEE5M0ZDMzNCVUwsIDB4MDAwMDAyQ0JVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAorICAgICAgeyAvKiBERkhTTWluY2hvLVc3ICovCisgICAgICAgIHsgMHgxMjVGRUIyNlVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLworICAgICAgICB7IDB4QTVBQ0M5ODJVTCwgMHgwMDAwN0VFMVVMIH0sIC8qIGZwZ20gKi8KKyAgICAgICAgeyAweDkwOTk5MTk2VUwsIDB4MDAwMDA0MUZVTCB9ICAvKiBwcmVwICovCisgICAgICB9LAogICAgICAgeyAvKiBERkthaVNodSAqLwogICAgICAgICB7IDB4MTFFNUVBRDRVTCwgMHgwMDAwMDM1MFVMIH0sIC8qIGN2dCAgKi8KICAgICAgICAgeyAweDVBMzBDQTNCVUwsIDB4MDAwMDkwNjNVTCB9LCAvKiBmcGdtICovCiAgICAgICAgIHsgMHgxM0E0MjYwMlVMLCAweDAwMDAwMDdFVUwgfSAgLyogcHJlcCAqLwogICAgICAgfSwKLSAgICAgIHsgLyogREZLYWlTaHUyICovCisgICAgICB7IC8qIERGS2FpU2h1LCB2YXJpYW50ICovCiAgICAgICAgIHsgMHgxMUU1RUFENFVMLCAweDAwMDAwMzUwVUwgfSwgLyogY3Z0ICAqLwogICAgICAgICB7IDB4QTZFNzhDMDFVTCwgMHgwMDAwODk5OFVMIH0sIC8qIGZwZ20gKi8KICAgICAgICAgeyAweDEzQTQyNjAyVUwsIDB4MDAwMDAwN0VVTCB9ICAvKiBwcmVwICovCiAgICAgICB9LAorICAgICAgeyAvKiBETENMaVNodSAqLworICAgICAgICB7IDB4MDdEQ0Y1NDZVTCwgMHgwMDAwMDMwOFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweDQwRkU3QzkwVUwsIDB4MDAwMDhFMkFVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHg2MDgxNzRCNVVMLCAweDAwMDAwMDdBVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKKyAgICAgIHsgLyogRExDSGF5Qm9sZCAqLworICAgICAgICB7IDB4RUI4OTEyMzhVTCwgMHgwMDAwMDMwOFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweEQyRTREQ0Q0VUwsIDB4MDAwMDY3NkZVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHg4RUE1RjI5M1VMLCAweDAwMDAwM0I4VUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKICAgICAgIHsgLyogSHVhVGlhbkthaVRpICovCiAgICAgICAgIHsgMHhGRkZCRkZGQ1VMLCAweDAwMDAwMDA4VUwgfSwgLyogY3Z0ICAqLwogICAgICAgICB7IDB4OUM5RTQ4QjhVTCwgMHgwMDAwQkVBMlVMIH0sIC8qIGZwZ20gKi8KQEAgLTM0MCw2ICs0MDMsMTEgQEAKICAgICAgICAgeyAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCB9LCAvKiBjdnQgICovCiAgICAgICAgIHsgMHhGMDU1RkM0OFVMLCAweDAwMDAwMUMyVUwgfSwgLyogZnBnbSAqLwogICAgICAgICB7IDB4MzkwMERFRDNVTCwgMHgwMDAwMUUxOFVMIH0gIC8qIHByZXAgKi8KKyAgICAgIH0sCisgICAgICAgIHsgLyogTUlOR0xJLlRURiwgMTk5MiAqLworICAgICAgICB7IDB4MDAxNzAwMDNVTCwgMHgwMDAwMDA2MFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweERCQjQzMDZFVUwsIDB4MDAwMDU4QUFVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHhENjQzNDgyQVVMLCAweDAwMDAwMDM1VUwgfSAgLyogcHJlcCAqLwogICAgICAgfQogICAgIH07CiAKQEAgLTU0OCw5ICs2MTYsMTEgQEAKICAgICAvKiBXZSBtdXN0IGFsc28gYmUgYWJsZSB0byBhY2NlcHQgTWFjL0dYIGZvbnRzLCBhcyB3ZWxsIGFzIE9UIG9uZXMuICovCiAgICAgLyogVGhlIDB4MDAwMjAwMDAgdGFnIGlzIGNvbXBsZXRlbHkgdW5kb2N1bWVudGVkOyBzb21lIGZvbnRzIGZyb20gICAqLwogICAgIC8qIEFycGhpYyBtYWRlIGZvciBDaGluZXNlIFdpbmRvd3MgMy4xIGhhdmUgdGhpcy4gICAgICAgICAgICAgICAgICAgKi8KLSAgICBpZiAoIGZhY2UtPmZvcm1hdF90YWcgIT0gMHgwMDAxMDAwMEwgJiYgICAgLyogTVMgZm9udHMgICovCi0gICAgICAgICBmYWNlLT5mb3JtYXRfdGFnICE9IDB4MDAwMjAwMDBMICYmICAgIC8qIENKSyBmb250cyBmb3IgV2luIDMuMSAqLwotICAgICAgICAgZmFjZS0+Zm9ybWF0X3RhZyAhPSBUVEFHX3RydWUgICApICAgICAvKiBNYWMgZm9udHMgKi8KKyAgICBpZiAoIGZhY2UtPmZvcm1hdF90YWcgIT0gMHgwMDAxMDAwMEwgICYmIC8qIE1TIGZvbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgZmFjZS0+Zm9ybWF0X3RhZyAhPSAweDAwMDIwMDAwTCAgJiYgLyogQ0pLIGZvbnRzIGZvciBXaW4gMy4xICAgICAgICAgICAgICAgICovCisgICAgICAgICBmYWNlLT5mb3JtYXRfdGFnICE9IFRUQUdfdHJ1ZSAgICAmJiAvKiBNYWMgZm9udHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgIGZhY2UtPmZvcm1hdF90YWcgIT0gVFRBR18weEE1a2JkICYmIC8qIGBLZXlib2FyZC5kZm9udCcgKGxlZ2FjeSBNYWMgT1MgWCkgICAqLworICAgICAgICAgZmFjZS0+Zm9ybWF0X3RhZyAhPSBUVEFHXzB4QTVsc3QgKSAgLyogYExhc3RSZXNvcnQuZGZvbnQnIChsZWdhY3kgTWFjIE9TIFgpICovCiAgICAgewogICAgICAgRlRfVFJBQ0UyKCggIiAgbm90IGEgVFRGIGZvbnRcbiIgKSk7CiAgICAgICBnb3RvIEJhZF9Gb3JtYXQ7CkBAIC02MjcsNDYgKzY5NywxNyBAQAogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKIAogICAgIHsKLSAgICAgIEZUX0ludCAgaW5zdGFuY2VfaW5kZXggPSBmYWNlX2luZGV4ID4+IDE2OworICAgICAgRlRfVUludCAgaW5zdGFuY2VfaW5kZXggPSAoRlRfVUludClmYWNlX2luZGV4ID4+IDE2OwogCiAKICAgICAgIGlmICggRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIHR0ZmFjZSApICYmCiAgICAgICAgICAgIGluc3RhbmNlX2luZGV4ID4gMCAgICAgICAgICAgICAgICApCiAgICAgICB7Ci0gICAgICAgIGVycm9yID0gVFRfR2V0X01NX1ZhciggZmFjZSwgTlVMTCApOworICAgICAgICBlcnJvciA9IFRUX1NldF9OYW1lZF9JbnN0YW5jZSggZmFjZSwgaW5zdGFuY2VfaW5kZXggKTsKICAgICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgICAgZ290byBFeGl0OwogCi0gICAgICAgIGlmICggZmFjZS0+YmxlbmQtPm1tdmFyLT5uYW1lZHN0eWxlICkKLSAgICAgICAgewotICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gdHRmYWNlLT5tZW1vcnk7Ci0KLSAgICAgICAgICBGVF9WYXJfTmFtZWRfU3R5bGUqICBuYW1lZF9zdHlsZTsKLSAgICAgICAgICBGVF9TdHJpbmcqICAgICAgICAgICBzdHlsZV9uYW1lOwotCi0KLSAgICAgICAgICAvKiBpbiBgZmFjZV9pbmRleCcsIHRoZSBpbnN0YW5jZSBpbmRleCBzdGFydHMgd2l0aCB2YWx1ZSAxICovCi0gICAgICAgICAgbmFtZWRfc3R5bGUgPSBmYWNlLT5ibGVuZC0+bW12YXItPm5hbWVkc3R5bGUgKyBpbnN0YW5jZV9pbmRleCAtIDE7Ci0gICAgICAgICAgZXJyb3IgPSBzZm50LT5nZXRfbmFtZSggZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KW5hbWVkX3N0eWxlLT5zdHJpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVfbmFtZSApOwotICAgICAgICAgIGlmICggZXJyb3IgKQotICAgICAgICAgICAgZ290byBFeGl0OwotCi0gICAgICAgICAgLyogc2V0IHN0eWxlIG5hbWU7IGlmIGFscmVhZHkgc2V0LCByZXBsYWNlIGl0ICovCi0gICAgICAgICAgaWYgKCBmYWNlLT5yb290LnN0eWxlX25hbWUgKQotICAgICAgICAgICAgRlRfRlJFRSggZmFjZS0+cm9vdC5zdHlsZV9uYW1lICk7Ci0gICAgICAgICAgZmFjZS0+cm9vdC5zdHlsZV9uYW1lID0gc3R5bGVfbmFtZTsKLQotICAgICAgICAgIC8qIGZpbmFsbHksIHNlbGVjdCB0aGUgbmFtZWQgaW5zdGFuY2UgKi8KLSAgICAgICAgICBlcnJvciA9IFRUX1NldF9WYXJfRGVzaWduKCBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPmJsZW5kLT5tbXZhci0+bnVtX2F4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWRfc3R5bGUtPmNvb3JkcyApOwotICAgICAgICAgIGlmICggZXJyb3IgKQotICAgICAgICAgICAgZ290byBFeGl0OwotCi0gICAgICAgICAgdHRfYXBwbHlfbXZhciggZmFjZSApOwotICAgICAgICB9CisgICAgICAgIHR0X2FwcGx5X212YXIoIGZhY2UgKTsKICAgICAgIH0KICAgICB9CiAKQEAgLTc5MiwxNCArODMzLDE0IEBACiAgICAgZXhlYy0+cGVkYW50aWNfaGludGluZyA9IHBlZGFudGljOwogCiAgICAgewotICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgbWV0cmljcyAgICA9ICZleGVjLT5tZXRyaWNzOwotICAgICAgVFRfU2l6ZV9NZXRyaWNzKiAgdHRfbWV0cmljcyA9ICZleGVjLT50dF9tZXRyaWNzOworICAgICAgRlRfU2l6ZV9NZXRyaWNzKiAgc2l6ZV9tZXRyaWNzID0gJmV4ZWMtPm1ldHJpY3M7CisgICAgICBUVF9TaXplX01ldHJpY3MqICB0dF9tZXRyaWNzICAgPSAmZXhlYy0+dHRfbWV0cmljczsKIAogCi0gICAgICBtZXRyaWNzLT54X3BwZW0gICA9IDA7Ci0gICAgICBtZXRyaWNzLT55X3BwZW0gICA9IDA7Ci0gICAgICBtZXRyaWNzLT54X3NjYWxlICA9IDA7Ci0gICAgICBtZXRyaWNzLT55X3NjYWxlICA9IDA7CisgICAgICBzaXplX21ldHJpY3MtPnhfcHBlbSAgID0gMDsKKyAgICAgIHNpemVfbWV0cmljcy0+eV9wcGVtICAgPSAwOworICAgICAgc2l6ZV9tZXRyaWNzLT54X3NjYWxlICA9IDA7CisgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgID0gMDsKIAogICAgICAgdHRfbWV0cmljcy0+cHBlbSAgPSAwOwogICAgICAgdHRfbWV0cmljcy0+c2NhbGUgPSAwOwpAQCAtMTAxNCwxNyArMTA1NSwxNyBAQAogCiAgICAgLyogU2V0IGRlZmF1bHQgbWV0cmljcyAqLwogICAgIHsKLSAgICAgIFRUX1NpemVfTWV0cmljcyogIG1ldHJpY3MgPSAmc2l6ZS0+dHRtZXRyaWNzOworICAgICAgVFRfU2l6ZV9NZXRyaWNzKiAgdHRfbWV0cmljcyA9ICZzaXplLT50dG1ldHJpY3M7CiAKIAotICAgICAgbWV0cmljcy0+cm90YXRlZCAgID0gRkFMU0U7Ci0gICAgICBtZXRyaWNzLT5zdHJldGNoZWQgPSBGQUxTRTsKKyAgICAgIHR0X21ldHJpY3MtPnJvdGF0ZWQgICA9IEZBTFNFOworICAgICAgdHRfbWV0cmljcy0+c3RyZXRjaGVkID0gRkFMU0U7CiAKICAgICAgIC8qIHNldCBkZWZhdWx0IGVuZ2luZSBjb21wZW5zYXRpb24gKi8KLSAgICAgIG1ldHJpY3MtPmNvbXBlbnNhdGlvbnNbMF0gPSAwOyAgIC8qIGdyYXkgICAgICovCi0gICAgICBtZXRyaWNzLT5jb21wZW5zYXRpb25zWzFdID0gMDsgICAvKiBibGFjayAgICAqLwotICAgICAgbWV0cmljcy0+Y29tcGVuc2F0aW9uc1syXSA9IDA7ICAgLyogd2hpdGUgICAgKi8KLSAgICAgIG1ldHJpY3MtPmNvbXBlbnNhdGlvbnNbM10gPSAwOyAgIC8qIHJlc2VydmVkICovCisgICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzBdID0gMDsgICAvKiBncmF5ICAgICAqLworICAgICAgdHRfbWV0cmljcy0+Y29tcGVuc2F0aW9uc1sxXSA9IDA7ICAgLyogYmxhY2sgICAgKi8KKyAgICAgIHR0X21ldHJpY3MtPmNvbXBlbnNhdGlvbnNbMl0gPSAwOyAgIC8qIHdoaXRlICAgICovCisgICAgICB0dF9tZXRyaWNzLT5jb21wZW5zYXRpb25zWzNdID0gMDsgICAvKiByZXNlcnZlZCAqLwogICAgIH0KIAogICAgIC8qIGFsbG9jYXRlIGZ1bmN0aW9uIGRlZnMsIGluc3RydWN0aW9uIGRlZnMsIGN2dCwgYW5kIHN0b3JhZ2UgYXJlYSAqLwpAQCAtMTIwMiwxNCArMTI0MywxNiBAQAogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc2l6ZSAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBzaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBvbmx5X2hlaWdodCA6OiBPbmx5IHJlY29tcHV0ZSBhc2NlbmRlciwgZGVzY2VuZGVyLCBhbmQgaGVpZ2h0LiAgICAgKi8KKyAgLyogICAgb25seV9oZWlnaHQgOjogT25seSByZWNvbXB1dGUgYXNjZW5kZXIsIGRlc2NlbmRlciwgYW5kIGhlaWdodDsgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHRoaXMgZmxhZyBpcyB1c2VkIGZvciB2YXJpYXRpb24gZm9udHMgd2hlcmUgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBgdHRfc2l6ZV9yZXNldCcgaXMgdXNlZCBhcyBhbiBpdGVyYXRvciBmdW5jdGlvbi4gICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICB0dF9zaXplX3Jlc2V0KCBUVF9TaXplICBzaXplLAogICAgICAgICAgICAgICAgICBGVF9Cb29sICBvbmx5X2hlaWdodCApCiAgIHsKICAgICBUVF9GYWNlICAgICAgICAgICBmYWNlOwotICAgIEZUX1NpemVfTWV0cmljcyogIG1ldHJpY3M7CisgICAgRlRfU2l6ZV9NZXRyaWNzKiAgc2l6ZV9tZXRyaWNzOwogCiAKICAgICBmYWNlID0gKFRUX0ZhY2Upc2l6ZS0+cm9vdC5mYWNlOwpAQCAtMTIyMCwxMiArMTI2MywxMiBAQAogCiAgICAgc2l6ZS0+dHRtZXRyaWNzLnZhbGlkID0gRkFMU0U7CiAKLSAgICBtZXRyaWNzID0gJnNpemUtPm1ldHJpY3M7CisgICAgc2l6ZV9tZXRyaWNzID0gJnNpemUtPmhpbnRlZF9tZXRyaWNzOwogCiAgICAgLyogY29weSB0aGUgcmVzdWx0IGZyb20gYmFzZSBsYXllciAqLwotICAgICptZXRyaWNzID0gc2l6ZS0+cm9vdC5tZXRyaWNzOworICAgICpzaXplX21ldHJpY3MgPSBzaXplLT5yb290Lm1ldHJpY3M7CiAKLSAgICBpZiAoIG1ldHJpY3MtPnhfcHBlbSA8IDEgfHwgbWV0cmljcy0+eV9wcGVtIDwgMSApCisgICAgaWYgKCBzaXplX21ldHJpY3MtPnhfcHBlbSA8IDEgfHwgc2l6ZV9tZXRyaWNzLT55X3BwZW0gPCAxICkKICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9QUGVtICk7CiAKICAgICAvKiBUaGlzIGJpdCBmbGFnLCBpZiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSBwcGVtcyBtdXN0IGJlICAgICAgICovCkBAIC0xMjM0LDQ5ICsxMjc3LDYxIEBACiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggZmFjZS0+aGVhZGVyLkZsYWdzICYgOCApCiAgICAgewotICAgICAgbWV0cmljcy0+YXNjZW5kZXIgPQotICAgICAgICBGVF9QSVhfUk9VTkQoIEZUX011bEZpeCggZmFjZS0+cm9vdC5hc2NlbmRlciwgbWV0cmljcy0+eV9zY2FsZSApICk7Ci0gICAgICBtZXRyaWNzLT5kZXNjZW5kZXIgPQotICAgICAgICBGVF9QSVhfUk9VTkQoIEZUX011bEZpeCggZmFjZS0+cm9vdC5kZXNjZW5kZXIsIG1ldHJpY3MtPnlfc2NhbGUgKSApOwotICAgICAgbWV0cmljcy0+aGVpZ2h0ID0KLSAgICAgICAgRlRfUElYX1JPVU5EKCBGVF9NdWxGaXgoIGZhY2UtPnJvb3QuaGVpZ2h0LCBtZXRyaWNzLT55X3NjYWxlICkgKTsKKyAgICAgIC8qIHRoZSBUVCBzcGVjIGFsd2F5cyBhc2tzIGZvciBST1VORCwgbm90IEZMT09SIG9yIENFSUwgKi8KKyAgICAgIHNpemVfbWV0cmljcy0+YXNjZW5kZXIgPSBGVF9QSVhfUk9VTkQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIGZhY2UtPnJvb3QuYXNjZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfbWV0cmljcy0+eV9zY2FsZSApICk7CisgICAgICBzaXplX21ldHJpY3MtPmRlc2NlbmRlciA9IEZUX1BJWF9ST1VORCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX011bEZpeCggZmFjZS0+cm9vdC5kZXNjZW5kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfbWV0cmljcy0+eV9zY2FsZSApICk7CisgICAgICBzaXplX21ldHJpY3MtPmhlaWdodCA9IEZUX1BJWF9ST1VORCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIGZhY2UtPnJvb3QuaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9tZXRyaWNzLT55X3NjYWxlICkgKTsKICAgICB9CiAKICAgICBzaXplLT50dG1ldHJpY3MudmFsaWQgPSBUUlVFOwogCiAgICAgaWYgKCBvbmx5X2hlaWdodCApCisgICAgeworICAgICAgLyogd2UgbXVzdCBub3QgcmVjb21wdXRlIHRoZSBzY2FsaW5nIHZhbHVlcyBoZXJlIHNpbmNlICAgICAgICovCisgICAgICAvKiBgdHRfc2l6ZV9yZXNldCcgd2FzIGFscmVhZHkgY2FsbGVkICh3aXRoIG9ubHlfaGVpZ2h0ID0gMCkgKi8KICAgICAgIHJldHVybiBGVF9FcnJfT2s7CisgICAgfQogCiAgICAgaWYgKCBmYWNlLT5oZWFkZXIuRmxhZ3MgJiA4ICkKICAgICB7Ci0gICAgICBtZXRyaWNzLT54X3NjYWxlID0gRlRfRGl2Rml4KCBtZXRyaWNzLT54X3BwZW0gPDwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QudW5pdHNfcGVyX0VNICk7Ci0gICAgICBtZXRyaWNzLT55X3NjYWxlID0gRlRfRGl2Rml4KCBtZXRyaWNzLT55X3BwZW0gPDwgNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QudW5pdHNfcGVyX0VNICk7CisgICAgICAvKiBiYXNlIHNjYWxpbmcgdmFsdWVzIG9uIGludGVnZXIgcHBlbSB2YWx1ZXMsICovCisgICAgICAvKiBhcyBtYW5kYXRlZCBieSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiAgICovCisgICAgICBzaXplX21ldHJpY3MtPnhfc2NhbGUgPSBGVF9EaXZGaXgoIHNpemVfbWV0cmljcy0+eF9wcGVtIDw8IDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QudW5pdHNfcGVyX0VNICk7CisgICAgICBzaXplX21ldHJpY3MtPnlfc2NhbGUgPSBGVF9EaXZGaXgoIHNpemVfbWV0cmljcy0+eV9wcGVtIDw8IDYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QudW5pdHNfcGVyX0VNICk7CiAKLSAgICAgIG1ldHJpY3MtPm1heF9hZHZhbmNlID0KLSAgICAgICAgRlRfUElYX1JPVU5EKCBGVF9NdWxGaXgoIGZhY2UtPnJvb3QubWF4X2FkdmFuY2Vfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT54X3NjYWxlICkgKTsKKyAgICAgIHNpemVfbWV0cmljcy0+bWF4X2FkdmFuY2UgPSBGVF9QSVhfUk9VTkQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9NdWxGaXgoIGZhY2UtPnJvb3QubWF4X2FkdmFuY2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfbWV0cmljcy0+eF9zY2FsZSApICk7CiAgICAgfQogCiAgICAgLyogY29tcHV0ZSBuZXcgdHJhbnNmb3JtYXRpb24gKi8KLSAgICBpZiAoIG1ldHJpY3MtPnhfcHBlbSA+PSBtZXRyaWNzLT55X3BwZW0gKQorICAgIGlmICggc2l6ZV9tZXRyaWNzLT54X3BwZW0gPj0gc2l6ZV9tZXRyaWNzLT55X3BwZW0gKQogICAgIHsKLSAgICAgIHNpemUtPnR0bWV0cmljcy5zY2FsZSAgID0gbWV0cmljcy0+eF9zY2FsZTsKLSAgICAgIHNpemUtPnR0bWV0cmljcy5wcGVtICAgID0gbWV0cmljcy0+eF9wcGVtOworICAgICAgc2l6ZS0+dHRtZXRyaWNzLnNjYWxlICAgPSBzaXplX21ldHJpY3MtPnhfc2NhbGU7CisgICAgICBzaXplLT50dG1ldHJpY3MucHBlbSAgICA9IHNpemVfbWV0cmljcy0+eF9wcGVtOwogICAgICAgc2l6ZS0+dHRtZXRyaWNzLnhfcmF0aW8gPSAweDEwMDAwTDsKLSAgICAgIHNpemUtPnR0bWV0cmljcy55X3JhdGlvID0gRlRfRGl2Rml4KCBtZXRyaWNzLT55X3BwZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy0+eF9wcGVtICk7CisgICAgICBzaXplLT50dG1ldHJpY3MueV9yYXRpbyA9IEZUX0RpdkZpeCggc2l6ZV9tZXRyaWNzLT55X3BwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9tZXRyaWNzLT54X3BwZW0gKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHNpemUtPnR0bWV0cmljcy5zY2FsZSAgID0gbWV0cmljcy0+eV9zY2FsZTsKLSAgICAgIHNpemUtPnR0bWV0cmljcy5wcGVtICAgID0gbWV0cmljcy0+eV9wcGVtOwotICAgICAgc2l6ZS0+dHRtZXRyaWNzLnhfcmF0aW8gPSBGVF9EaXZGaXgoIG1ldHJpY3MtPnhfcHBlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNzLT55X3BwZW0gKTsKKyAgICAgIHNpemUtPnR0bWV0cmljcy5zY2FsZSAgID0gc2l6ZV9tZXRyaWNzLT55X3NjYWxlOworICAgICAgc2l6ZS0+dHRtZXRyaWNzLnBwZW0gICAgPSBzaXplX21ldHJpY3MtPnlfcHBlbTsKKyAgICAgIHNpemUtPnR0bWV0cmljcy54X3JhdGlvID0gRlRfRGl2Rml4KCBzaXplX21ldHJpY3MtPnhfcHBlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX21ldHJpY3MtPnlfcHBlbSApOwogICAgICAgc2l6ZS0+dHRtZXRyaWNzLnlfcmF0aW8gPSAweDEwMDAwTDsKICAgICB9CiAKKyAgICBzaXplLT5tZXRyaWNzID0gc2l6ZV9tZXRyaWNzOworCiAjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiAgICAgc2l6ZS0+Y3Z0X3JlYWR5ID0gLTE7CiAjZW5kaWYgLyogVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmggYi9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmgKaW5kZXggNjU5MjllNS4uMzhmYTMwZSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCisrKyBiL3NyYy90cnVldHlwZS90dG9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjc4LDcgKzI3OCw4IEBACiAKICAgICAvKiB3ZSBoYXZlIG91ciBvd24gY29weSBvZiBtZXRyaWNzIHNvIHRoYXQgd2UgY2FuIG1vZGlmeSAqLwogICAgIC8qIGl0IHdpdGhvdXQgYWZmZWN0aW5nIGF1dG8taGludGluZyAod2hlbiB1c2VkKSAgICAgICAgICovCi0gICAgRlRfU2l6ZV9NZXRyaWNzICAgIG1ldHJpY3M7CisgICAgRlRfU2l6ZV9NZXRyaWNzKiAgIG1ldHJpY3M7ICAgICAgICAvKiBmb3IgdGhlIGN1cnJlbnQgcmVuZGVyaW5nIG1vZGUgKi8KKyAgICBGVF9TaXplX01ldHJpY3MgICAgaGludGVkX21ldHJpY3M7IC8qIGZvciB0aGUgaGludGVkIHJlbmRlcmluZyBtb2RlICAqLwogCiAgICAgVFRfU2l6ZV9NZXRyaWNzICAgIHR0bWV0cmljczsKIApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGljLmMgYi9zcmMvdHJ1ZXR5cGUvdHRwaWMuYwppbmRleCA2NmJkN2UxLi5jZGJiODA2IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRwaWMuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgdHJ1ZXR5cGUgbW9kdWxlLiAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGljLmggYi9zcmMvdHJ1ZXR5cGUvdHRwaWMuaAppbmRleCAxNDEwY2Q3Li5kZjg3OGFlIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRwaWMuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgdHJ1ZXR5cGUgbW9kdWxlLiAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuYyBiL3NyYy90cnVldHlwZS90dHBsb2FkLmMKaW5kZXggNzBhYzE1ZC4uZDk1MjZhZCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNDcsMTMgKzI0NywxMyBAQAogICAgIGlmICggcG9zMiA+IGZhY2UtPmdseWZfbGVuICkKICAgICB7CiAgICAgICAvKiBXZSB0cnkgdG8gc2FuaXRpemUgdGhlIGxhc3QgYGxvY2EnIGVudHJ5LiAqLwotICAgICAgaWYgKCBnaW5kZXggPT0gZmFjZS0+bnVtX2xvY2F0aW9ucyAtIDEgKQorICAgICAgaWYgKCBnaW5kZXggPT0gZmFjZS0+bnVtX2xvY2F0aW9ucyAtIDIgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTEoKCAidHRfZmFjZV9nZXRfbG9jYXRpb246IgotICAgICAgICAgICAgICAgICAgICAiIHRvbyBsYXJnZSBvZmZzZXQgKDB4JTA4bHgpIGZvdW5kIGZvciBnbHlwaCBpbmRleCAlbGQsXG4iCisgICAgICAgICAgICAgICAgICAgICIgdG9vIGxhcmdlIHNpemUgKCVsZCBieXRlcykgZm91bmQgZm9yIGdseXBoIGluZGV4ICVsZCxcbiIKICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICIKLSAgICAgICAgICAgICAgICAgICAgIiB0cnVuY2F0aW5nIGF0IHRoZSBlbmQgb2YgYGdseWYnIHRhYmxlICgweCUwOGx4KVxuIiwKLSAgICAgICAgICAgICAgICAgICAgcG9zMiwgZ2luZGV4ICsgMSwgZmFjZS0+Z2x5Zl9sZW4gKSk7CisgICAgICAgICAgICAgICAgICAgICIgdHJ1bmNhdGluZyBhdCB0aGUgZW5kIG9mIGBnbHlmJyB0YWJsZSB0byAlbGQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHBvczIgLSBwb3MxLCBnaW5kZXgsIGZhY2UtPmdseWZfbGVuIC0gcG9zMSApKTsKICAgICAgICAgcG9zMiA9IGZhY2UtPmdseWZfbGVuOwogICAgICAgfQogICAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaCBiL3NyYy90cnVldHlwZS90dHBsb2FkLmgKaW5kZXggNzkwNzlmMy4uZmExMjUyNyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyBiL3NyYy90cnVldHlwZS90dHN1YnBpeC5jCmluZGV4IDVkODAzY2QuLmQ5NGJjYzggMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dHN1YnBpeC5jCisrKyBiL3NyYy90cnVldHlwZS90dHN1YnBpeC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIFN1YnBpeGVsIEhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEwLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMC0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMiwxMiArMjIsMTMgQEAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NGTlRfSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICiAjaW5jbHVkZSBGVF9PVVRMSU5FX0gKLSNpbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogCiAjaW5jbHVkZSAidHRzdWJwaXguaCIKIAogCi0jaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyNpZiBkZWZpbmVkKCBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKSAgICAgICAgICAgICYmIFwKKyAgICBkZWZpbmVkKCBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNzUyLDI0ICs3NTMsMjQgQEAKIAogCiAgICAgLyogRG9lcyBmb250IG5hbWUgbWF0Y2ggcnVsZSBmYW1pbHk/ICovCi0gICAgaWYgKCBzdHJjbXAoIGRldGVjdGVkX2ZvbnRfbmFtZSwgcnVsZV9mb250X25hbWUgKSA9PSAwICkKKyAgICBpZiAoIGZ0X3N0cmNtcCggZGV0ZWN0ZWRfZm9udF9uYW1lLCBydWxlX2ZvbnRfbmFtZSApID09IDAgKQogICAgICAgcmV0dXJuIFRSVUU7CiAKICAgICAvKiBJcyBmb250IG5hbWUgYSB3aWxkY2FyZCAiIj8gKi8KLSAgICBpZiAoIHN0cmNtcCggcnVsZV9mb250X25hbWUsICIiICkgPT0gMCApCisgICAgaWYgKCBmdF9zdHJjbXAoIHJ1bGVfZm9udF9uYW1lLCAiIiApID09IDAgKQogICAgICAgcmV0dXJuIFRSVUU7CiAKICAgICAvKiBJcyBmb250IG5hbWUgY29udGFpbmVkIGluIGEgY2xhc3MgbGlzdD8gKi8KICAgICBmb3IgKCBpID0gMDsgaSA8IEZBTUlMWV9DTEFTU19SVUxFU19TSVpFOyBpKysgKQogICAgIHsKLSAgICAgIGlmICggc3RyY21wKCBGQU1JTFlfQ0xBU1NfUnVsZXNbaV0ubmFtZSwgcnVsZV9mb250X25hbWUgKSA9PSAwICkKKyAgICAgIGlmICggZnRfc3RyY21wKCBGQU1JTFlfQ0xBU1NfUnVsZXNbaV0ubmFtZSwgcnVsZV9mb250X25hbWUgKSA9PSAwICkKICAgICAgIHsKICAgICAgICAgZm9yICggaiA9IDA7IGogPCBTUEhfTUFYX0NMQVNTX01FTUJFUlM7IGorKyApCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoIHN0cmNtcCggRkFNSUxZX0NMQVNTX1J1bGVzW2ldLm1lbWJlcltqXSwgIiIgKSA9PSAwICkKKyAgICAgICAgICBpZiAoIGZ0X3N0cmNtcCggRkFNSUxZX0NMQVNTX1J1bGVzW2ldLm1lbWJlcltqXSwgIiIgKSA9PSAwICkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIGlmICggc3RyY21wKCBGQU1JTFlfQ0xBU1NfUnVsZXNbaV0ubWVtYmVyW2pdLAotICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZF9mb250X25hbWUgKSA9PSAwICkKKyAgICAgICAgICBpZiAoIGZ0X3N0cmNtcCggRkFNSUxZX0NMQVNTX1J1bGVzW2ldLm1lbWJlcltqXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWRfZm9udF9uYW1lICkgPT0gMCApCiAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgfQogICAgICAgfQpAQCAtNzg3LDI0ICs3ODgsMjQgQEAKIAogCiAgICAgLyogRG9lcyBmb250IHN0eWxlIG1hdGNoIHJ1bGUgc3R5bGU/ICovCi0gICAgaWYgKCBzdHJjbXAoIGRldGVjdGVkX2ZvbnRfc3R5bGUsIHJ1bGVfZm9udF9zdHlsZSApID09IDAgKQorICAgIGlmICggZnRfc3RyY21wKCBkZXRlY3RlZF9mb250X3N0eWxlLCBydWxlX2ZvbnRfc3R5bGUgKSA9PSAwICkKICAgICAgIHJldHVybiBUUlVFOwogCiAgICAgLyogSXMgZm9udCBzdHlsZSBhIHdpbGRjYXJkICIiPyAqLwotICAgIGlmICggc3RyY21wKCBydWxlX2ZvbnRfc3R5bGUsICIiICkgPT0gMCApCisgICAgaWYgKCBmdF9zdHJjbXAoIHJ1bGVfZm9udF9zdHlsZSwgIiIgKSA9PSAwICkKICAgICAgIHJldHVybiBUUlVFOwogCiAgICAgLyogSXMgZm9udCBzdHlsZSBjb250YWluZWQgaW4gYSBjbGFzcyBsaXN0PyAqLwogICAgIGZvciAoIGkgPSAwOyBpIDwgU1RZTEVfQ0xBU1NfUlVMRVNfU0laRTsgaSsrICkKICAgICB7Ci0gICAgICBpZiAoIHN0cmNtcCggU1RZTEVfQ0xBU1NfUnVsZXNbaV0ubmFtZSwgcnVsZV9mb250X3N0eWxlICkgPT0gMCApCisgICAgICBpZiAoIGZ0X3N0cmNtcCggU1RZTEVfQ0xBU1NfUnVsZXNbaV0ubmFtZSwgcnVsZV9mb250X3N0eWxlICkgPT0gMCApCiAgICAgICB7CiAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgU1BIX01BWF9DTEFTU19NRU1CRVJTOyBqKysgKQogICAgICAgICB7Ci0gICAgICAgICAgaWYgKCBzdHJjbXAoIFNUWUxFX0NMQVNTX1J1bGVzW2ldLm1lbWJlcltqXSwgIiIgKSA9PSAwICkKKyAgICAgICAgICBpZiAoIGZ0X3N0cmNtcCggU1RZTEVfQ0xBU1NfUnVsZXNbaV0ubWVtYmVyW2pdLCAiIiApID09IDAgKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgaWYgKCBzdHJjbXAoIFNUWUxFX0NMQVNTX1J1bGVzW2ldLm1lbWJlcltqXSwKLSAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWRfZm9udF9zdHlsZSApID09IDAgKQorICAgICAgICAgIGlmICggZnRfc3RyY21wKCBTVFlMRV9DTEFTU19SdWxlc1tpXS5tZW1iZXJbal0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkX2ZvbnRfc3R5bGUgKSA9PSAwICkKICAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICB9CiAgICAgICB9CkBAIC05MDUsNyArOTA2LDcgQEAKICAgewogICAgIFRUX0ZhY2UgICAgIGZhY2UgICA9IGxvYWRlci0+ZmFjZTsKICAgICBGVF9TdHJpbmcqICBmYW1pbHkgPSBmYWNlLT5yb290LmZhbWlseV9uYW1lOwotICAgIEZUX1VJbnQgICAgIHBwZW0gICA9IGxvYWRlci0+c2l6ZS0+bWV0cmljcy54X3BwZW07CisgICAgRlRfVUludCAgICAgcHBlbSAgID0gbG9hZGVyLT5zaXplLT5tZXRyaWNzLT54X3BwZW07CiAgICAgRlRfU3RyaW5nKiAgc3R5bGUgID0gZmFjZS0+cm9vdC5zdHlsZV9uYW1lOwogCiAKQEAgLTEwMDAsMTIgKzEwMDEsMTQgQEAKICAgICB9CiAgIH0KIAotI2Vsc2UgLyogIVRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCisjZWxzZSAvKiAhKFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAmJiAgICAgICAgICAqLworICAgICAgLyogICBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSkgKi8KIAogICAvKiBBTlNJIEMgZG9lc24ndCBsaWtlIGVtcHR5IHNvdXJjZSBmaWxlcyAqLwogICB0eXBlZGVmIGludCAgX3R0X3N1YnBpeF9kdW1teTsKIAotI2VuZGlmIC8qICFUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLworI2VuZGlmIC8qICEoVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICYmICAgICAgICAgICovCisgICAgICAgLyogICBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSkgKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHN1YnBpeC5oIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKaW5kZXggYzY4Zjk3Zi4uMTA3MGJiMCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKKysrIGIvc3JjL3RydWV0eXBlL3R0c3VicGl4LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgU3VicGl4ZWwgSGludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTAtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEwLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlMS9KYW1maWxlIGIvc3JjL3R5cGUxL0phbWZpbGUKaW5kZXggNmMxMGEzMS4uYjk0YjdkMCAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL0phbWZpbGUKKysrIGIvc3JjL3R5cGUxL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL3R5cGUxIEphbWZpbGUKICMKLSMgQ29weXJpZ2h0IDIwMDEtMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMS0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS9tb2R1bGUubWsgYi9zcmMvdHlwZTEvbW9kdWxlLm1rCmluZGV4IGYyOTlkNmYuLjNmZWE1Y2MgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS9tb2R1bGUubWsKKysrIGIvc3JjL3R5cGUxL21vZHVsZS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvcnVsZXMubWsgYi9zcmMvdHlwZTEvcnVsZXMubWsKaW5kZXggOTdiZWYyOC4uY2IxYTE0MiAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3J1bGVzLm1rCisrKyBiL3NyYy90eXBlMS9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFhZm0uYyBiL3NyYy90eXBlMS90MWFmbS5jCmluZGV4IDc5MmVhMmYuLjYxMDUzZDkgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MWFmbS5jCisrKyBiL3NyYy90eXBlMS90MWFmbS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFGTSBzdXBwb3J0IGZvciBUeXBlIDEgZm9udHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSAidDFlcnJvcnMuaCIKIAogCisjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGUgbWFjcm8gRlRfQ09NUE9ORU5UIGlzIHVzZWQgaW4gdHJhY2UgbW9kZS4gIEl0IGlzIGFuIGltcGxpY2l0ICAgICAgKi8KQEAgLTQwMiw1ICs0MDQsMTIgQEAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CiAKKyNlbHNlIC8qIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNICovCisKKyAgLyogQU5TSSBDIGRvZXNuJ3QgbGlrZSBlbXB0eSBzb3VyY2UgZmlsZXMgKi8KKyAgdHlwZWRlZiBpbnQgIF90MV9hZm1fZHVtbXk7CisKKyNlbmRpZiAvKiBUMV9DT05GSUdfT1BUSU9OX05PX0FGTSAqLworCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxYWZtLmggYi9zcmMvdHlwZTEvdDFhZm0uaAppbmRleCA5ZjYyY2QwLi5jYjhkMzAyIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFhZm0uaAorKysgYi9zcmMvdHlwZTEvdDFhZm0uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBRk0gc3VwcG9ydCBmb3IgVHlwZSAxIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxZHJpdmVyLmMgYi9zcmMvdHlwZTEvdDFkcml2ZXIuYwppbmRleCBjMjA4OTk0Li4wMjliNDEwIDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFkcml2ZXIuYworKysgYi9zcmMvdHlwZTEvdDFkcml2ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX0hBU0hfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9QUk9QU19ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogCiAjaW5jbHVkZSBGVF9TRVJWSUNFX01VTFRJUExFX01BU1RFUlNfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9HTFlQSF9ESUNUX0gKQEAgLTM3LDYgKzM5LDcgQEAKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9OQU1FX0gKICNpbmNsdWRlIEZUX1NFUlZJQ0VfUE9TVFNDUklQVF9DTUFQU19ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfSU5GT19ICisjaW5jbHVkZSBGVF9TRVJWSUNFX1BST1BFUlRJRVNfSAogI2luY2x1ZGUgRlRfU0VSVklDRV9LRVJOSU5HX0gKIAogCkBAIC0xMjYsNiArMTI5LDcgQEAKICAgICAoRlRfR2V0X01NX1Zhcl9GdW5jKSAgICBUMV9HZXRfTU1fVmFyLCAgICAgICAgIC8qIGdldF9tbV92YXIgICAgICovCiAgICAgKEZUX1NldF9WYXJfRGVzaWduX0Z1bmMpVDFfU2V0X1Zhcl9EZXNpZ24sICAgICAvKiBzZXRfdmFyX2Rlc2lnbiAqLwogICAgIChGVF9HZXRfVmFyX0Rlc2lnbl9GdW5jKVQxX0dldF9WYXJfRGVzaWduLCAgICAgLyogZ2V0X3Zhcl9kZXNpZ24gKi8KKyAgICAoRlRfU2V0X0luc3RhbmNlX0Z1bmMpICBUMV9SZXNldF9NTV9CbGVuZCwgICAgIC8qIHNldF9pbnN0YW5jZSAgICovCiAKICAgICAoRlRfR2V0X1Zhcl9CbGVuZF9GdW5jKSBOVUxMLCAgICAgICAgICAgICAgICAgIC8qIGdldF92YXJfYmxlbmQgICovCiAgICAgKEZUX0RvbmVfQmxlbmRfRnVuYykgICAgVDFfRG9uZV9CbGVuZCAgICAgICAgICAvKiBkb25lX2JsZW5kICAgICAqLwpAQCAtNjE0LDYgKzYxOCwxOCBAQAogCiAKICAgLyoKKyAgICogIFBST1BFUlRZIFNFUlZJQ0UKKyAgICoKKyAgICovCisKKyAgRlRfREVGSU5FX1NFUlZJQ0VfUFJPUEVSVElFU1JFQygKKyAgICB0MV9zZXJ2aWNlX3Byb3BlcnRpZXMsCisKKyAgICAoRlRfUHJvcGVydGllc19TZXRGdW5jKXBzX3Byb3BlcnR5X3NldCwgICAgICAvKiBzZXRfcHJvcGVydHkgKi8KKyAgICAoRlRfUHJvcGVydGllc19HZXRGdW5jKXBzX3Byb3BlcnR5X2dldCApICAgICAvKiBnZXRfcHJvcGVydHkgKi8KKworCisgIC8qCiAgICAqICBTRVJWSUNFIExJU1QKICAgICoKICAgICovCkBAIC02MjQsNiArNjQwLDcgQEAKICAgICB7IEZUX1NFUlZJQ0VfSURfR0xZUEhfRElDVCwgICAgICAgICAgICZ0MV9zZXJ2aWNlX2dseXBoX2RpY3QgfSwKICAgICB7IEZUX1NFUlZJQ0VfSURfRk9OVF9GT1JNQVQsICAgICAgICAgIEZUX0ZPTlRfRk9STUFUX1RZUEVfMSB9LAogICAgIHsgRlRfU0VSVklDRV9JRF9QT1NUU0NSSVBUX0lORk8sICAgICAgJnQxX3NlcnZpY2VfcHNfaW5mbyB9LAorICAgIHsgRlRfU0VSVklDRV9JRF9QUk9QRVJUSUVTLCAgICAgICAgICAgJnQxX3NlcnZpY2VfcHJvcGVydGllcyB9LAogCiAjaWZuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCiAgICAgeyBGVF9TRVJWSUNFX0lEX0tFUk5JTkcsICAgICAgICAgICAgICAmdDFfc2VydmljZV9rZXJuaW5nIH0sCkBAIC03MTMsNyArNzMwLDcgQEAKICAgICAgIEZUX01PRFVMRV9EUklWRVJfU0NBTEFCTEUgICB8CiAgICAgICBGVF9NT0RVTEVfRFJJVkVSX0hBU19ISU5URVIsCiAKLSAgICAgIHNpemVvZiAoIEZUX0RyaXZlclJlYyApLAorICAgICAgc2l6ZW9mICggUFNfRHJpdmVyUmVjICksCiAKICAgICAgICJ0eXBlMSIsCiAgICAgICAweDEwMDAwTCwKZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWRyaXZlci5oIGIvc3JjL3R5cGUxL3QxZHJpdmVyLmgKaW5kZXggMjkyNzg2NC4uMmIxNTA3MiAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZHJpdmVyLmgKKysrIGIvc3JjL3R5cGUxL3QxZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBUeXBlIDEgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWVycm9ycy5oIGIvc3JjL3R5cGUxL3QxZXJyb3JzLmgKaW5kZXggNDkyZGJiNC4uOWUwMTUxYiAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZXJyb3JzLmgKKysrIGIvc3JjL3R5cGUxL3QxZXJyb3JzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MWdsb2FkLmMgYi9zcmMvdHlwZTEvdDFnbG9hZC5jCmluZGV4IGFhZjE5YjYuLjg3ZDQwZTcgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MWdsb2FkLmMKKysrIGIvc3JjL3R5cGUxL3QxZ2xvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlIEZUX09VVExJTkVfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUE9TVFNDUklQVF9BVVhfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfQ0ZGX1RZUEVTX0gKKyNpbmNsdWRlIEZUX0RSSVZFUl9ICiAKICNpbmNsdWRlICJ0MWVycm9ycy5oIgogCkBAIC0zNywzNyArMzksMjggQEAKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90MWdsb2FkCiAKIAotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KLSAgLyoqKioqKioqKiogICAgICAgICAgICBDT01QVVRFIFRIRSBNQVhJTVVNIEFEVkFOQ0UgV0lEVEggICAgICAgICAqKioqKioqKiovCi0gIC8qKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLwotICAvKioqKioqKioqKiAgICBUaGUgZm9sbG93aW5nIGNvZGUgaXMgaW4gY2hhcmdlIG9mIGNvbXB1dGluZyAgICAgICoqKioqKioqKi8KLSAgLyoqKioqKioqKiogICAgdGhlIG1heGltdW0gYWR2YW5jZSB3aWR0aCBvZiB0aGUgZm9udC4gIEl0ICAgICAgICAqKioqKioqKiovCi0gIC8qKioqKioqKioqICAgIHF1aWNrbHkgcHJvY2Vzc2VzIGVhY2ggZ2x5cGggY2hhcnN0cmluZyB0byAgICAgICAgKioqKioqKioqLwotICAvKioqKioqKioqKiAgICBleHRyYWN0IHRoZSB2YWx1ZSBmcm9tIGVpdGhlciBhIGBzYncnIG9yIGBzZWFjJyAgICoqKioqKioqKi8KLSAgLyoqKioqKioqKiogICAgb3BlcmF0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCi0gIC8qKioqKioqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KICAgc3RhdGljIEZUX0Vycm9yCiAgIFQxX1BhcnNlX0dseXBoX0FuZF9HZXRfQ2hhcl9TdHJpbmcoIFQxX0RlY29kZXIgIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9EYXRhKiAgICBjaGFyX3N0cmluZyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0RhdGEqICAgIGNoYXJfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sKiAgICBmb3JjZV9zY2FsaW5nICkKICAgewogICAgIFQxX0ZhY2UgICBmYWNlICA9IChUMV9GYWNlKWRlY29kZXItPmJ1aWxkZXIuZmFjZTsKICAgICBUMV9Gb250ICAgdHlwZTEgPSAmZmFjZS0+dHlwZTE7CiAgICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwogCisgICAgUFNBdXhfU2VydmljZSAgICAgICAgICAgcHNhdXggICAgICAgICA9IChQU0F1eF9TZXJ2aWNlKWZhY2UtPnBzYXV4OworICAgIGNvbnN0IFQxX0RlY29kZXJfRnVuY3MgIGRlY29kZXJfZnVuY3MgPSBwc2F1eC0+dDFfZGVjb2Rlcl9mdW5jczsKKyAgICBQU19EZWNvZGVyICAgICAgICAgICAgICBwc2RlY29kZXI7CisKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCiAgICAgRlRfSW5jcmVtZW50YWxfSW50ZXJmYWNlUmVjICppbmMgPQogICAgICAgICAgICAgICAgICAgICAgIGZhY2UtPnJvb3QuaW50ZXJuYWwtPmluY3JlbWVudGFsX2ludGVyZmFjZTsKICNlbmRpZgogCisjaWZkZWYgVDFfQ09ORklHX09QVElPTl9PTERfRU5HSU5FCisgICAgUFNfRHJpdmVyICBkcml2ZXIgPSAoUFNfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CisjZW5kaWYKIAogICAgIGRlY29kZXItPmZvbnRfbWF0cml4ID0gdHlwZTEtPmZvbnRfbWF0cml4OwogICAgIGRlY29kZXItPmZvbnRfb2Zmc2V0ID0gdHlwZTEtPmZvbnRfb2Zmc2V0OwpAQCAtOTAsOSArODMsNTYgQEAKICAgICB9CiAKICAgICBpZiAoICFlcnJvciApCi0gICAgICBlcnJvciA9IGRlY29kZXItPmZ1bmNzLnBhcnNlX2NoYXJzdHJpbmdzKAotICAgICAgICAgICAgICAgIGRlY29kZXIsIChGVF9CeXRlKiljaGFyX3N0cmluZy0+cG9pbnRlciwKLSAgICAgICAgICAgICAgICAoRlRfVUludCljaGFyX3N0cmluZy0+bGVuZ3RoICk7CisgICAgeworICAgICAgLyogY2hvb3NlIHdoaWNoIHJlbmRlcmVyIHRvIHVzZSAqLworI2lmZGVmIFQxX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgICAgaWYgKCBkcml2ZXItPmhpbnRpbmdfZW5naW5lID09IEZUX0hJTlRJTkdfRlJFRVRZUEUgfHwKKyAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRlci5tZXRyaWNzX29ubHkgICAgICAgICAgICAgICAgICkKKyAgICAgICAgZXJyb3IgPSBkZWNvZGVyX2Z1bmNzLT5wYXJzZV9jaGFyc3RyaW5nc19vbGQoCisgICAgICAgICAgICAgICAgICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgKEZUX0J5dGUqKWNoYXJfc3RyaW5nLT5wb2ludGVyLAorICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpY2hhcl9zdHJpbmctPmxlbmd0aCApOworI2Vsc2UKKyAgICAgIGlmICggZGVjb2Rlci0+YnVpbGRlci5tZXRyaWNzX29ubHkgKQorICAgICAgICBlcnJvciA9IGRlY29kZXJfZnVuY3MtPnBhcnNlX21ldHJpY3MoCisgICAgICAgICAgICAgICAgICBkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgKEZUX0J5dGUqKWNoYXJfc3RyaW5nLT5wb2ludGVyLAorICAgICAgICAgICAgICAgICAgKEZUX1VJbnQpY2hhcl9zdHJpbmctPmxlbmd0aCApOworI2VuZGlmCisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIENGRl9TdWJGb250UmVjICBzdWJmb250OworCisKKyAgICAgICAgcHNhdXgtPnBzX2RlY29kZXJfaW5pdCggJnBzZGVjb2RlciwgZGVjb2RlciwgVFJVRSApOworCisgICAgICAgIHBzYXV4LT50MV9tYWtlX3N1YmZvbnQoIEZUX0ZBQ0UoIGZhY2UgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY2UtPnR5cGUxLnByaXZhdGVfZGljdCwgJnN1YmZvbnQgKTsKKyAgICAgICAgcHNkZWNvZGVyLmN1cnJlbnRfc3ViZm9udCA9ICZzdWJmb250OworCisgICAgICAgIGVycm9yID0gZGVjb2Rlcl9mdW5jcy0+cGFyc2VfY2hhcnN0cmluZ3MoCisgICAgICAgICAgICAgICAgICAmcHNkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgKEZUX0J5dGUqKWNoYXJfc3RyaW5nLT5wb2ludGVyLAorICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKWNoYXJfc3RyaW5nLT5sZW5ndGggKTsKKworICAgICAgICAvKiBBZG9iZSdzIGVuZ2luZSB1c2VzIDE2LjE2IG51bWJlcnMgZXZlcnl3aGVyZTsgICAgICAgICAgICAgICovCisgICAgICAgIC8qIGFzIGEgY29uc2VxdWVuY2UsIGdseXBocyBsYXJnZXIgdGhhbiAyMDAwcHBlbSBnZXQgcmVqZWN0ZWQgKi8KKyAgICAgICAgaWYgKCBGVF9FUlJfRVEoIGVycm9yLCBHbHlwaF9Ub29fQmlnICkgKQorICAgICAgICB7CisgICAgICAgICAgLyogdGhpcyB0aW1lLCB3ZSByZXRyeSB1bmhpbnRlZCBhbmQgc2NhbGUgdXAgdGhlIGdseXBoIGxhdGVyIG9uICovCisgICAgICAgICAgLyogKHRoZSBlbmdpbmUgdXNlcyBhbmQgc2V0cyB0aGUgaGFyZGNvZGVkIHZhbHVlIDB4MTAwMDAgLyA2NCA9ICovCisgICAgICAgICAgLyogMHg0MDAgZm9yIGJvdGggYHhfc2NhbGUnIGFuZCBgeV9zY2FsZScgaW4gdGhpcyBjYXNlKSAgICAgICAgICovCisgICAgICAgICAgKChUMV9HbHlwaFNsb3QpZGVjb2Rlci0+YnVpbGRlci5nbHlwaCktPmhpbnQgPSBGQUxTRTsKKworICAgICAgICAgICpmb3JjZV9zY2FsaW5nID0gVFJVRTsKKworICAgICAgICAgIGVycm9yID0gZGVjb2Rlcl9mdW5jcy0+cGFyc2VfY2hhcnN0cmluZ3MoCisgICAgICAgICAgICAgICAgICAgICZwc2RlY29kZXIsCisgICAgICAgICAgICAgICAgICAgIChGVF9CeXRlKiljaGFyX3N0cmluZy0+cG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgKEZUX1VMb25nKWNoYXJfc3RyaW5nLT5sZW5ndGggKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKIApAQCAtMTI2LDggKzE2NiwxMCBAQAogICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgZ2x5cGhfaW5kZXggKQogICB7CiAgICAgRlRfRGF0YSAgIGdseXBoX2RhdGE7Ci0gICAgRlRfRXJyb3IgIGVycm9yID0gVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIsIGdseXBoX2luZGV4LCAmZ2x5cGhfZGF0YSApOworICAgIEZUX0Jvb2wgICBmb3JjZV9zY2FsaW5nID0gRkFMU0U7CisgICAgRlRfRXJyb3IgIGVycm9yICAgICAgICAgPSBUMV9QYXJzZV9HbHlwaF9BbmRfR2V0X0NoYXJfU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLCBnbHlwaF9pbmRleCwgJmdseXBoX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JjZV9zY2FsaW5nICk7CiAKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKQEAgLTE0OSw2ICsxOTEsMjMgQEAKICAgfQogCiAKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgICAgICAgICAgQ09NUFVURSBUSEUgTUFYSU1VTSBBRFZBTkNFIFdJRFRIICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgVGhlIGZvbGxvd2luZyBjb2RlIGlzIGluIGNoYXJnZSBvZiBjb21wdXRpbmcgICAgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgIHRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggb2YgdGhlIGZvbnQuICBJdCAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICBxdWlja2x5IHByb2Nlc3NlcyBlYWNoIGdseXBoIGNoYXJzdHJpbmcgdG8gICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKiogICAgZXh0cmFjdCB0aGUgdmFsdWUgZnJvbSBlaXRoZXIgYSBgc2J3JyBvciBgc2VhYycgICAqKioqKioqKiovCisgIC8qKioqKioqKioqICAgIG9wZXJhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqLworICAvKioqKioqKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCiAgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQogICBUMV9Db21wdXRlX01heF9BZHZhbmNlKCBUMV9GYWNlICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MqICBtYXhfYWR2YW5jZSApCkBAIC0yNzgsNiArMzM3LDggQEAKICAgICBUMV9EZWNvZGVyUmVjICAgICAgICAgICBkZWNvZGVyOwogICAgIFQxX0ZhY2UgICAgICAgICAgICAgICAgIGZhY2UgPSAoVDFfRmFjZSl0MWdseXBoLT5mYWNlOwogICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgIGhpbnRpbmc7CisgICAgRlRfQm9vbCAgICAgICAgICAgICAgICAgc2NhbGVkOworICAgIEZUX0Jvb2wgICAgICAgICAgICAgICAgIGZvcmNlX3NjYWxpbmcgPSBGQUxTRTsKICAgICBUMV9Gb250ICAgICAgICAgICAgICAgICB0eXBlMSAgICAgICAgID0gJmZhY2UtPnR5cGUxOwogICAgIFBTQXV4X1NlcnZpY2UgICAgICAgICAgIHBzYXV4ICAgICAgICAgPSAoUFNBdXhfU2VydmljZSlmYWNlLT5wc2F1eDsKICAgICBjb25zdCBUMV9EZWNvZGVyX0Z1bmNzICBkZWNvZGVyX2Z1bmNzID0gcHNhdXgtPnQxX2RlY29kZXJfZnVuY3M7CkBAIC0zMjUsNyArMzg2LDEwIEBACiAKICAgICBoaW50aW5nID0gRlRfQk9PTCggKCBsb2FkX2ZsYWdzICYgRlRfTE9BRF9OT19TQ0FMRSAgICkgPT0gMCAmJgogICAgICAgICAgICAgICAgICAgICAgICAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX0hJTlRJTkcgKSA9PSAwICk7CisgICAgc2NhbGVkICA9IEZUX0JPT0woICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgICApID09IDAgKTsKIAorICAgIGdseXBoLT5oaW50ICAgICA9IGhpbnRpbmc7CisgICAgZ2x5cGgtPnNjYWxlZCAgID0gc2NhbGVkOwogICAgIHQxZ2x5cGgtPmZvcm1hdCA9IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FOwogCiAgICAgZXJyb3IgPSBkZWNvZGVyX2Z1bmNzLT5pbml0KCAmZGVjb2RlciwKQEAgLTM1NSwxMyArNDE5LDE1IEBACiAKICAgICAvKiBub3cgbG9hZCB0aGUgdW5zY2FsZWQgb3V0bGluZSAqLwogICAgIGVycm9yID0gVDFfUGFyc2VfR2x5cGhfQW5kX0dldF9DaGFyX1N0cmluZyggJmRlY29kZXIsIGdseXBoX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdseXBoX2RhdGEgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcmNlX3NjYWxpbmcgKTsKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCiAgICAgZ2x5cGhfZGF0YV9sb2FkZWQgPSAxOwogI2VuZGlmCiAKKyAgICBoaW50aW5nICAgICA9IGdseXBoLT5oaW50OwogICAgIGZvbnRfbWF0cml4ID0gZGVjb2Rlci5mb250X21hdHJpeDsKICAgICBmb250X29mZnNldCA9IGRlY29kZXIuZm9udF9vZmZzZXQ7CiAKQEAgLTQ1MSw3ICs1MTcsNyBAQAogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBpZiAoICggbG9hZF9mbGFncyAmIEZUX0xPQURfTk9fU0NBTEUgKSA9PSAwICkKKyAgICAgICAgaWYgKCAoIGxvYWRfZmxhZ3MgJiBGVF9MT0FEX05PX1NDQUxFICkgPT0gMCB8fCBmb3JjZV9zY2FsaW5nICkKICAgICAgICAgewogICAgICAgICAgIC8qIHNjYWxlIHRoZSBvdXRsaW5lIGFuZCB0aGUgbWV0cmljcyAqLwogICAgICAgICAgIEZUX0ludCAgICAgICBuOwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxZ2xvYWQuaCBiL3NyYy90eXBlMS90MWdsb2FkLmgKaW5kZXggY2M0ZDVlNy4uNzJlZjc2ZiAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxZ2xvYWQuaAorKysgYi9zcmMvdHlwZTEvdDFnbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFR5cGUgMSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFsb2FkLmMgYi9zcmMvdHlwZTEvdDFsb2FkLmMKaW5kZXggZjVjNjYxZi4uMmI4ZDQ4OSAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3QxbG9hZC5jCisrKyBiL3NyYy90eXBlMS90MWxvYWQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgZm9udCBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzI5LDggKzMyOSw4IEBACiAgICAgZm9yICggaSA9IDA7IGkgPCBtbWFzdGVyLm51bV9heGlzOyBpKysgKQogICAgIHsKICAgICAgIG1tdmFyLT5heGlzW2ldLm5hbWUgICAgPSBtbWFzdGVyLmF4aXNbaV0ubmFtZTsKLSAgICAgIG1tdmFyLT5heGlzW2ldLm1pbmltdW0gPSBJTlRfVE9fRklYRUQoIG1tYXN0ZXIuYXhpc1tpXS5taW5pbXVtKTsKLSAgICAgIG1tdmFyLT5heGlzW2ldLm1heGltdW0gPSBJTlRfVE9fRklYRUQoIG1tYXN0ZXIuYXhpc1tpXS5tYXhpbXVtKTsKKyAgICAgIG1tdmFyLT5heGlzW2ldLm1pbmltdW0gPSBJTlRfVE9fRklYRUQoIG1tYXN0ZXIuYXhpc1tpXS5taW5pbXVtICk7CisgICAgICBtbXZhci0+YXhpc1tpXS5tYXhpbXVtID0gSU5UX1RPX0ZJWEVEKCBtbWFzdGVyLmF4aXNbaV0ubWF4aW11bSApOwogICAgICAgbW12YXItPmF4aXNbaV0uZGVmICAgICA9ICggbW12YXItPmF4aXNbaV0ubWluaW11bSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1tdmFyLT5heGlzW2ldLm1heGltdW0gKSAvIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRG9lcyBub3QgYXBwbHkuICBCdXQgdGhpcyB2YWx1ZSBpcyBpbiByYW5nZSAqLwpAQCAtMzY2LDE0ICszNjYsMTYgQEAKICAgfQogCiAKLSAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIFQxX1NldF9NTV9CbGVuZCggVDFfRmFjZSAgICBmYWNlLAorICBzdGF0aWMgRlRfRXJyb3IKKyAgdDFfc2V0X21tX2JsZW5kKCBUMV9GYWNlICAgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICkKICAgewogICAgIFBTX0JsZW5kICBibGVuZCA9IGZhY2UtPmJsZW5kOwogICAgIEZUX1VJbnQgICBuLCBtOwogCisgICAgRlRfQm9vbCAgaGF2ZV9kaWZmID0gMDsKKwogCiAgICAgaWYgKCAhYmxlbmQgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CkBAIC00MDUsOSArNDA3LDM2IEBACiAKICAgICAgICAgcmVzdWx0ID0gRlRfTXVsRml4KCByZXN1bHQsIGZhY3RvciApOwogICAgICAgfQotICAgICAgYmxlbmQtPndlaWdodF92ZWN0b3Jbbl0gPSByZXN1bHQ7CisKKyAgICAgIGlmICggYmxlbmQtPndlaWdodF92ZWN0b3Jbbl0gIT0gcmVzdWx0ICkKKyAgICAgIHsKKyAgICAgICAgYmxlbmQtPndlaWdodF92ZWN0b3Jbbl0gPSByZXN1bHQ7CisgICAgICAgIGhhdmVfZGlmZiAgICAgICAgICAgICAgID0gMTsKKyAgICAgIH0KICAgICB9CiAKKyAgICAvKiByZXR1cm4gdmFsdWUgLTEgaW5kaWNhdGVzIGBubyBjaGFuZ2UnICovCisgICAgcmV0dXJuIGhhdmVfZGlmZiA/IEZUX0Vycl9PayA6IC0xOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVDFfU2V0X01NX0JsZW5kKCBUMV9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBudW1fY29vcmRzLAorICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgZXJyb3IgPSB0MV9zZXRfbW1fYmxlbmQoIGZhY2UsIG51bV9jb29yZHMsIGNvb3JkcyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgaWYgKCBudW1fY29vcmRzICkKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OOworICAgIGVsc2UKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX1ZBUklBVElPTjsKKwogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KIApAQCAtNDUyLDYgKzQ4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBudW1fY29vcmRzLAogICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgY29vcmRzICkKICAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKICAgICBQU19CbGVuZCAgYmxlbmQgPSBmYWNlLT5ibGVuZDsKICAgICBGVF9VSW50ICAgbiwgcDsKICAgICBGVF9GaXhlZCAgZmluYWxfYmxlbmRzW1QxX01BWF9NTV9ERVNJR05TXTsKQEAgLTUxOCw3ICs1NDgsMjggQEAKICAgICAgIGZpbmFsX2JsZW5kc1tuXSA9IHRoZV9ibGVuZDsKICAgICB9CiAKLSAgICByZXR1cm4gVDFfU2V0X01NX0JsZW5kKCBmYWNlLCBibGVuZC0+bnVtX2F4aXMsIGZpbmFsX2JsZW5kcyApOworICAgIGVycm9yID0gdDFfc2V0X21tX2JsZW5kKCBmYWNlLCBibGVuZC0+bnVtX2F4aXMsIGZpbmFsX2JsZW5kcyApOworICAgIGlmICggZXJyb3IgKQorICAgICAgcmV0dXJuIGVycm9yOworCisgICAgaWYgKCBudW1fY29vcmRzICkKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyB8PSBGVF9GQUNFX0ZMQUdfVkFSSUFUSU9OOworICAgIGVsc2UKKyAgICAgIGZhY2UtPnJvb3QuZmFjZV9mbGFncyAmPSB+RlRfRkFDRV9GTEFHX1ZBUklBVElPTjsKKworICAgIHJldHVybiBGVF9FcnJfT2s7CisgIH0KKworCisgIC8qIE1NIGZvbnRzIGRvbid0IGhhdmUgbmFtZWQgaW5zdGFuY2VzLCBzbyBvbmx5IHRoZSBkZXNpZ24gaXMgcmVzZXQgKi8KKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgVDFfUmVzZXRfTU1fQmxlbmQoIFQxX0ZhY2UgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBpbnN0YW5jZV9pbmRleCApCisgIHsKKyAgICBGVF9VTlVTRUQoIGluc3RhbmNlX2luZGV4ICk7CisKKyAgICByZXR1cm4gVDFfU2V0X01NX0JsZW5kKCBmYWNlLCAwLCBOVUxMICk7CiAgIH0KIAogCkBAIC0xMjY2LDcgKzEzMTcsNyBAQAogICAgIGlmICggZnRfaXNkaWdpdCggKmN1ciApIHx8ICpjdXIgPT0gJ1snICkKICAgICB7CiAgICAgICBUMV9FbmNvZGluZyAgZW5jb2RlICAgICAgICAgID0gJmZhY2UtPnR5cGUxLmVuY29kaW5nOwotICAgICAgRlRfSW50ICAgICAgIGNvdW50LCBuOworICAgICAgRlRfSW50ICAgICAgIGNvdW50LCBhcnJheV9zaXplLCBuOwogICAgICAgUFNfVGFibGUgICAgIGNoYXJfdGFibGUgICAgICA9ICZsb2FkZXItPmVuY29kaW5nX3RhYmxlOwogICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSAgICAgICAgICA9IHBhcnNlci0+cm9vdC5tZW1vcnk7CiAgICAgICBGVF9FcnJvciAgICAgZXJyb3I7CkBAIC0xMjgzLDEzICsxMzM0LDEyIEBACiAgICAgICBlbHNlCiAgICAgICAgIGNvdW50ID0gKEZUX0ludClUMV9Ub0ludCggcGFyc2VyICk7CiAKLSAgICAgIC8qIG9ubHkgY29tcG9zaXRlIGZvbnRzICh3aGljaCB3ZSBkb24ndCBzdXBwb3J0KSAqLwotICAgICAgLyogY2FuIGhhdmUgbGFyZ2VyIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBhcnJheV9zaXplID0gY291bnQ7CiAgICAgICBpZiAoIGNvdW50ID4gMjU2ICkKICAgICAgIHsKLSAgICAgICAgRlRfRVJST1IoKCAicGFyc2VfZW5jb2Rpbmc6IGludmFsaWQgZW5jb2RpbmcgYXJyYXkgc2l6ZVxuIiApKTsKLSAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBGVF9UUkFDRTIoKCAicGFyc2VfZW5jb2Rpbmc6IgorICAgICAgICAgICAgICAgICAgICAiIG9ubHkgdXNpbmcgZmlyc3QgMjU2IGVuY29kaW5nIGFycmF5IGVudHJpZXNcbiIgKSk7CisgICAgICAgIGFycmF5X3NpemUgPSAyNTY7CiAgICAgICB9CiAKICAgICAgIFQxX1NraXBfU3BhY2VzKCBwYXJzZXIgKTsKQEAgLTEzMDUsMTggKzEzNTUsMTggQEAKICAgICAgIH0KIAogICAgICAgLyogd2UgdXNlIGEgVDFfVGFibGUgdG8gc3RvcmUgb3VyIGNoYXJuYW1lcyAqLwotICAgICAgbG9hZGVyLT5udW1fY2hhcnMgPSBlbmNvZGUtPm51bV9jaGFycyA9IGNvdW50OwotICAgICAgaWYgKCBGVF9ORVdfQVJSQVkoIGVuY29kZS0+Y2hhcl9pbmRleCwgY291bnQgKSAgICAgfHwKLSAgICAgICAgICAgRlRfTkVXX0FSUkFZKCBlbmNvZGUtPmNoYXJfbmFtZSwgIGNvdW50ICkgICAgIHx8CisgICAgICBsb2FkZXItPm51bV9jaGFycyA9IGVuY29kZS0+bnVtX2NoYXJzID0gYXJyYXlfc2l6ZTsKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBlbmNvZGUtPmNoYXJfaW5kZXgsIGFycmF5X3NpemUgKSAgICAgfHwKKyAgICAgICAgICAgRlRfTkVXX0FSUkFZKCBlbmNvZGUtPmNoYXJfbmFtZSwgIGFycmF5X3NpemUgKSAgICAgfHwKICAgICAgICAgICAgRlRfU0VUX0VSUk9SKCBwc2F1eC0+cHNfdGFibGVfZnVuY3MtPmluaXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3RhYmxlLCBjb3VudCwgbWVtb3J5ICkgKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3RhYmxlLCBhcnJheV9zaXplLCBtZW1vcnkgKSApICkKICAgICAgIHsKICAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gZXJyb3I7CiAgICAgICAgIHJldHVybjsKICAgICAgIH0KIAogICAgICAgLyogV2UgbmVlZCB0byBgemVybycgb3V0IGVuY29kaW5nX3RhYmxlLmVsZW1lbnRzICovCi0gICAgICBmb3IgKCBuID0gMDsgbiA8IGNvdW50OyBuKysgKQorICAgICAgZm9yICggbiA9IDA7IG4gPCBhcnJheV9zaXplOyBuKysgKQogICAgICAgewogICAgICAgICBjaGFyKiAgbm90ZGVmID0gKGNoYXIgKikiLm5vdGRlZiI7CiAKQEAgLTE0MDksMTEgKzE0NTksMTQgQEAKIAogICAgICAgICAgICAgbGVuID0gKEZUX1VJbnQpKCBwYXJzZXItPnJvb3QuY3Vyc29yIC0gY3VyICk7CiAKLSAgICAgICAgICAgIHBhcnNlci0+cm9vdC5lcnJvciA9IFQxX0FkZF9UYWJsZSggY2hhcl90YWJsZSwgY2hhcmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ciwgbGVuICsgMSApOwotICAgICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQotICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjaGFyX3RhYmxlLT5lbGVtZW50c1tjaGFyY29kZV1bbGVuXSA9ICdcMCc7CisgICAgICAgICAgICBpZiAoIG4gPCBhcnJheV9zaXplICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcGFyc2VyLT5yb290LmVycm9yID0gVDFfQWRkX1RhYmxlKCBjaGFyX3RhYmxlLCBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXIsIGxlbiArIDEgKTsKKyAgICAgICAgICAgICAgaWYgKCBwYXJzZXItPnJvb3QuZXJyb3IgKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2hhcl90YWJsZS0+ZWxlbWVudHNbY2hhcmNvZGVdW2xlbl0gPSAnXDAnOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuKys7CiAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxbG9hZC5oIGIvc3JjL3R5cGUxL3QxbG9hZC5oCmluZGV4IDJkODY5ODQuLjAzYmUzZjcgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MWxvYWQuaAorKysgYi9zcmMvdHlwZTEvdDFsb2FkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIGZvbnQgbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTkwLDYgKzkwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICBjb29yZHMgKTsKIAogICBGVF9MT0NBTCggRlRfRXJyb3IgKQorICBUMV9SZXNldF9NTV9CbGVuZCggVDFfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGluc3RhbmNlX2luZGV4ICk7CisKKyAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgVDFfR2V0X1Zhcl9EZXNpZ24oIFQxX0ZhY2UgICAgZmFjZSwKICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgbnVtX2Nvb3JkcywKICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgY29vcmRzICk7CmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFvYmpzLmMgYi9zcmMvdHlwZTEvdDFvYmpzLmMKaW5kZXggNTYzNzAzNS4uNzMzM2M0YyAxMDA2NDQKLS0tIGEvc3JjL3R5cGUxL3Qxb2Jqcy5jCisrKyBiL3NyYy90eXBlMS90MW9ianMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX0lEU19ICisjaW5jbHVkZSBGVF9EUklWRVJfSAogCiAjaW5jbHVkZSAidDFnbG9hZC5oIgogI2luY2x1ZGUgInQxbG9hZC5oIgpAQCAtNDksOSArNTAsNiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRSBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgbm90ZSB0aGF0IHdlIHN0b3JlIHRoZSBnbG9iYWwgaGludHMgaW4gdGhlIHNpemUncyAiaW50ZXJuYWwiIHJvb3QgICAgKi8KLSAgLyogIGZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCkBAIC03NywxNiArNzUsMTYgQEAKICAgICBUMV9TaXplICBzaXplID0gKFQxX1NpemUpdDFzaXplOwogCiAKLSAgICBpZiAoIHNpemUtPnJvb3QuaW50ZXJuYWwgKQorICAgIGlmICggdDFzaXplLT5pbnRlcm5hbC0+bW9kdWxlX2RhdGEgKQogICAgIHsKICAgICAgIFBTSF9HbG9iYWxzX0Z1bmNzICBmdW5jczsKIAogCiAgICAgICBmdW5jcyA9IFQxX1NpemVfR2V0X0dsb2JhbHNfRnVuY3MoIHNpemUgKTsKICAgICAgIGlmICggZnVuY3MgKQotICAgICAgICBmdW5jcy0+ZGVzdHJveSggKFBTSF9HbG9iYWxzKXNpemUtPnJvb3QuaW50ZXJuYWwgKTsKKyAgICAgICAgZnVuY3MtPmRlc3Ryb3koIChQU0hfR2xvYmFscyl0MXNpemUtPmludGVybmFsLT5tb2R1bGVfZGF0YSApOwogCi0gICAgICBzaXplLT5yb290LmludGVybmFsID0gTlVMTDsKKyAgICAgIHQxc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhID0gTlVMTDsKICAgICB9CiAgIH0KIApAQCAtMTA4LDcgKzEwNiw3IEBACiAgICAgICBlcnJvciA9IGZ1bmNzLT5jcmVhdGUoIHNpemUtPnJvb3QuZmFjZS0+bWVtb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjZS0+dHlwZTEucHJpdmF0ZV9kaWN0LCAmZ2xvYmFscyApOwogICAgICAgaWYgKCAhZXJyb3IgKQotICAgICAgICBzaXplLT5yb290LmludGVybmFsID0gKEZUX1NpemVfSW50ZXJuYWwpKHZvaWQqKWdsb2JhbHM7CisgICAgICAgIHQxc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhID0gZ2xvYmFsczsKICAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CkBAIC0xMjYsNyArMTI0LDcgQEAKICAgICBGVF9SZXF1ZXN0X01ldHJpY3MoIHNpemUtPnJvb3QuZmFjZSwgcmVxICk7CiAKICAgICBpZiAoIGZ1bmNzICkKLSAgICAgIGZ1bmNzLT5zZXRfc2NhbGUoIChQU0hfR2xvYmFscylzaXplLT5yb290LmludGVybmFsLAorICAgICAgZnVuY3MtPnNldF9zY2FsZSggKFBTSF9HbG9iYWxzKXQxc2l6ZS0+aW50ZXJuYWwtPm1vZHVsZV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+cm9vdC5tZXRyaWNzLnhfc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLT5yb290Lm1ldHJpY3MueV9zY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAgKTsKQEAgLTM4Miw3ICszODAsNyBAQAogICAgICAgLyogc2ltcGxpc3RpYyBhbmQgbWlnaHQgZ2V0IHNvbWUgdGhpbmdzIHdyb25nLiAgRm9yIGEgZnVsbC1mZWF0dXJlZCAqLwogICAgICAgLyogYWxnb3JpdGhtIHlvdSBtaWdodCBoYXZlIGEgbG9vayBhdCB0aGUgd2hpdGVwYXBlciBnaXZlbiBhdCAgICAgICAqLwogICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgLyogICBodHRwOi8vYmxvZ3MubXNkbi5jb20vdGV4dC9hcmNoaXZlLzIwMDcvMDQvMjMvd3BmLWZvbnQtc2VsZWN0aW9uLW1vZGVsLmFzcHggKi8KKyAgICAgIC8qICAgaHR0cHM6Ly9ibG9ncy5tc2RuLmNvbS90ZXh0L2FyY2hpdmUvMjAwNy8wNC8yMy93cGYtZm9udC1zZWxlY3Rpb24tbW9kZWwuYXNweCAqLwogCiAgICAgICAvKiBnZXQgc3R5bGUgbmFtZSAtLSBiZSBjYXJlZnVsLCBzb21lIGJyb2tlbiBmb250cyBvbmx5ICovCiAgICAgICAvKiBoYXZlIGEgYC9Gb250TmFtZScgZGljdGlvbmFyeSBlbnRyeSEgICAgICAgICAgICAgICAgICovCkBAIC01NTgsMTIgKzU1Niw2IEBACiAKICAgICAgICAgaWYgKCBjbGF6eiApCiAgICAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggY2xhenosIE5VTEwsICZjaGFybWFwLCBOVUxMICk7Ci0KLSNpZiAwCi0gICAgICAgIC8qIFNlbGVjdCBkZWZhdWx0IGNoYXJtYXAgKi8KLSAgICAgICAgaWYgKHJvb3QtPm51bV9jaGFybWFwcykKLSAgICAgICAgICByb290LT5jaGFybWFwID0gcm9vdC0+Y2hhcm1hcHNbMF07Ci0jZW5kaWYKICAgICAgIH0KICAgICB9CiAKQEAgLTU4Nyw5ICs1NzksNDIgQEAKICAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDAgbWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKLSAgVDFfRHJpdmVyX0luaXQoIEZUX01vZHVsZSAgZHJpdmVyICkKKyAgVDFfRHJpdmVyX0luaXQoIEZUX01vZHVsZSAgbW9kdWxlICkKICAgewotICAgIEZUX1VOVVNFRCggZHJpdmVyICk7CisgICAgUFNfRHJpdmVyICBkcml2ZXIgPSAoUFNfRHJpdmVyKW1vZHVsZTsKKworICAgIEZUX1VJbnQzMiAgc2VlZDsKKworCisgICAgLyogc2V0IGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzLCBjZi4gYGZ0dDFkcnYuaCcgKi8KKyNpZmRlZiBUMV9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfSElOVElOR19GUkVFVFlQRTsKKyNlbHNlCisgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9IEZUX0hJTlRJTkdfQURPQkU7CisjZW5kaWYKKworICAgIGRyaXZlci0+bm9fc3RlbV9kYXJrZW5pbmcgPSBUUlVFOworCisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzBdID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMTsKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbMV0gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kxOworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1syXSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDI7CisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzNdID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9ZMjsKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbNF0gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gzOworICAgIGRyaXZlci0+ZGFya2VuX3BhcmFtc1s1XSA9IENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTM7CisgICAgZHJpdmVyLT5kYXJrZW5fcGFyYW1zWzZdID0gQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YNDsKKyAgICBkcml2ZXItPmRhcmtlbl9wYXJhbXNbN10gPSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0OworCisgICAgLyogY29tcHV0ZSByYW5kb20gc2VlZCBmcm9tIHNvbWUgbWVtb3J5IGFkZHJlc3NlcyAqLworICAgIHNlZWQgPSAoRlRfVUludDMyKSggKEZUX09mZnNldCkoY2hhciopJnNlZWQgICAgICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgKEZUX09mZnNldCkoY2hhciopJm1vZHVsZSAgICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgKEZUX09mZnNldCkoY2hhciopbW9kdWxlLT5tZW1vcnkgKTsKKyAgICBzZWVkID0gc2VlZCBeICggc2VlZCA+PiAxMCApIF4gKCBzZWVkID4+IDIwICk7CisKKyAgICBkcml2ZXItPnJhbmRvbV9zZWVkID0gKEZUX0ludDMyKXNlZWQ7CisgICAgaWYgKCBkcml2ZXItPnJhbmRvbV9zZWVkIDwgMCApCisgICAgICBkcml2ZXItPnJhbmRvbV9zZWVkID0gLWRyaXZlci0+cmFuZG9tX3NlZWQ7CisgICAgZWxzZSBpZiAoIGRyaXZlci0+cmFuZG9tX3NlZWQgPT0gMCApCisgICAgICBkcml2ZXItPnJhbmRvbV9zZWVkID0gMTIzNDU2Nzg5OwogCiAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgfQpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3Qxb2Jqcy5oIGIvc3JjL3R5cGUxL3Qxb2Jqcy5oCmluZGV4IDM5ZDI2YmYuLjgyOThlMDMgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MW9ianMuaAorKysgYi9zcmMvdHlwZTEvdDFvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIG9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEyMCwxMiArMTIwLDEyIEBACiAgICAgRlRfQm9vbCAgICAgICAgICBoaW50OwogICAgIEZUX0Jvb2wgICAgICAgICAgc2NhbGVkOwogCi0gICAgRlRfSW50ICAgICAgICAgICBtYXhfcG9pbnRzOwotICAgIEZUX0ludCAgICAgICAgICAgbWF4X2NvbnRvdXJzOwotCiAgICAgRlRfRml4ZWQgICAgICAgICB4X3NjYWxlOwogICAgIEZUX0ZpeGVkICAgICAgICAgeV9zY2FsZTsKIAorICAgIEZUX0ludCAgICAgICAgICAgbWF4X3BvaW50czsKKyAgICBGVF9JbnQgICAgICAgICAgIG1heF9jb250b3VyczsKKwogICB9IFQxX0dseXBoU2xvdFJlYzsKIAogCmRpZmYgLS1naXQgYS9zcmMvdHlwZTEvdDFwYXJzZS5jIGIvc3JjL3R5cGUxL3QxcGFyc2UuYwppbmRleCAxOGRkMjY0Li44ZTIwMWU1IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDFwYXJzZS5jCisrKyBiL3NyYy90eXBlMS90MXBhcnNlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSAxIHBhcnNlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlMS90MXBhcnNlLmggYi9zcmMvdHlwZTEvdDFwYXJzZS5oCmluZGV4IDMzOTY2ODAuLjRhYzgyYWUgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlMS90MXBhcnNlLmgKKysrIGIvc3JjL3R5cGUxL3QxcGFyc2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3QxdG9rZW5zLmggYi9zcmMvdHlwZTEvdDF0b2tlbnMuaAppbmRleCBjYTBjNTVmLi40M2E2NWQ4IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdDF0b2tlbnMuaAorKysgYi9zcmMvdHlwZTEvdDF0b2tlbnMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDEgdG9rZW5pemVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGUxL3R5cGUxLmMgYi9zcmMvdHlwZTEvdHlwZTEuYwppbmRleCBiZmUwZTQzLi43MmVmZjU5IDEwMDY0NAotLS0gYS9zcmMvdHlwZTEvdHlwZTEuYworKysgYi9zcmMvdHlwZTEvdHlwZTEuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBUeXBlIDEgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsMTcgKzE3LDE0IEBACiAKIAogI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCi0KICNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgInQxcGFyc2UuYyIKLSNpbmNsdWRlICJ0MWxvYWQuYyIKLSNpbmNsdWRlICJ0MW9ianMuYyIKKworI2luY2x1ZGUgInQxYWZtLmMiCiAjaW5jbHVkZSAidDFkcml2ZXIuYyIKICNpbmNsdWRlICJ0MWdsb2FkLmMiCi0KLSNpZm5kZWYgVDFfQ09ORklHX09QVElPTl9OT19BRk0KLSNpbmNsdWRlICJ0MWFmbS5jIgotI2VuZGlmCisjaW5jbHVkZSAidDFsb2FkLmMiCisjaW5jbHVkZSAidDFvYmpzLmMiCisjaW5jbHVkZSAidDFwYXJzZS5jIgogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi9KYW1maWxlIGIvc3JjL3R5cGU0Mi9KYW1maWxlCmluZGV4IGI4MjZiYmMuLmI5OGRlMDUgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvSmFtZmlsZQorKysgYi9zcmMvdHlwZTQyL0phbWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIEZyZWVUeXBlIDIgc3JjL3R5cGU0MiBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDItMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL21vZHVsZS5tayBiL3NyYy90eXBlNDIvbW9kdWxlLm1rCmluZGV4IDJmNTI4MDYuLjNkNDczMmIgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvbW9kdWxlLm1rCisrKyBiL3NyYy90eXBlNDIvbW9kdWxlLm1rCkBAIC0zLDcgKzMsNyBAQAogIwogCiAKLSMgQ29weXJpZ2h0IDIwMDItMjAxNyBieQorIyBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5CiAjIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvcnVsZXMubWsgYi9zcmMvdHlwZTQyL3J1bGVzLm1rCmluZGV4IGQ3ZTg5NjUuLjkzMjVkMzggMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvcnVsZXMubWsKKysrIGIvc3JjL3R5cGU0Mi9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAyMDAyLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDItMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL3Q0MmRyaXZyLmMgYi9zcmMvdHlwZTQyL3Q0MmRyaXZyLmMKaW5kZXggMzY2Y2ZiMy4uZjU3OWIyNyAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJkcml2ci5jCisrKyBiL3NyYy90eXBlNDIvdDQyZHJpdnIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIaWdoLWxldmVsIFR5cGUgNDIgZHJpdmVyIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi90NDJkcml2ci5oIGIvc3JjL3R5cGU0Mi90NDJkcml2ci5oCmluZGV4IDFhYzRhMGEuLjM2NjdmM2UgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQyZHJpdnIuaAorKysgYi9zcmMvdHlwZTQyL3Q0MmRyaXZyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBUeXBlIDQyIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBSb2JlcnRvIEFsYW1lZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyZXJyb3IuaCBiL3NyYy90eXBlNDIvdDQyZXJyb3IuaAppbmRleCBmZGE5MmFiLi5lMzk3OGE3IDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MmVycm9yLmgKKysrIGIvc3JjL3R5cGU0Mi90NDJlcnJvci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFR5cGUgNDIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL3Q0Mm9ianMuYyBiL3NyYy90eXBlNDIvdDQyb2Jqcy5jCmluZGV4IDg3ZTUyMDYuLjY2ZTVjNDAgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQyb2Jqcy5jCisrKyBiL3NyYy90eXBlNDIvdDQyb2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFR5cGUgNDIgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgUm9iZXJ0byBBbGFtZWRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zOTQsMTIgKzM5NCw2IEBACiAKICAgICAgICAgaWYgKCBjbGF6eiApCiAgICAgICAgICAgZXJyb3IgPSBGVF9DTWFwX05ldyggY2xhenosIE5VTEwsICZjaGFybWFwLCBOVUxMICk7Ci0KLSNpZiAwCi0gICAgICAgIC8qIFNlbGVjdCBkZWZhdWx0IGNoYXJtYXAgKi8KLSAgICAgICAgaWYgKCByb290LT5udW1fY2hhcm1hcHMgKQotICAgICAgICAgIHJvb3QtPmNoYXJtYXAgPSByb290LT5jaGFybWFwc1swXTsKLSNlbmRpZgogICAgICAgfQogICAgIH0KICAgRXhpdDoKZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQyb2Jqcy5oIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmgKaW5kZXggZWI0YzViZi4uM2JhZDUxMyAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJvYmpzLmgKKysrIGIvc3JjL3R5cGU0Mi90NDJvYmpzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSA0MiBvYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBSb2JlcnRvIEFsYW1lZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdDQycGFyc2UuYyBiL3NyYy90eXBlNDIvdDQycGFyc2UuYwppbmRleCBlN2M2NzcwLi40ODEzZDFmIDEwMDY0NAotLS0gYS9zcmMvdHlwZTQyL3Q0MnBhcnNlLmMKKysrIGIvc3JjL3R5cGU0Mi90NDJwYXJzZS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFR5cGUgNDIgZm9udCBwYXJzZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTcgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE4IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgUm9iZXJ0byBBbGFtZWRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHlwZTQyL3Q0MnBhcnNlLmggYi9zcmMvdHlwZTQyL3Q0MnBhcnNlLmgKaW5kZXggN2E2ODYwNi4uZjM1ZDIzZCAxMDA2NDQKLS0tIGEvc3JjL3R5cGU0Mi90NDJwYXJzZS5oCisrKyBiL3NyYy90eXBlNDIvdDQycGFyc2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUeXBlIDQyIGZvbnQgcGFyc2VyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFJvYmVydG8gQWxhbWVkYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3R5cGU0Mi90NDJ0eXBlcy5oIGIvc3JjL3R5cGU0Mi90NDJ0eXBlcy5oCmluZGV4IDIzMDZhYjYuLmQwYWEyZGUgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdDQydHlwZXMuaAorKysgYi9zcmMvdHlwZTQyL3Q0MnR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHlwZSA0MiBmb250IGRhdGEgdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBSb2JlcnRvIEFsYW1lZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90eXBlNDIvdHlwZTQyLmMgYi9zcmMvdHlwZTQyL3R5cGU0Mi5jCmluZGV4IDRlN2M5ZDEuLjZhODljZmIgMTAwNjQ0Ci0tLSBhL3NyYy90eXBlNDIvdHlwZTQyLmMKKysrIGIvc3JjL3R5cGU0Mi90eXBlNDIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBUeXBlIDQyIGRyaXZlciBjb21wb25lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTUsMTEgKzE1LDEzIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBGVF9NQUtFX09QVElPTl9TSU5HTEVfT0JKRUNUCiAKKyNkZWZpbmUgRlRfTUFLRV9PUFRJT05fU0lOR0xFX09CSkVDVAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CisKKyNpbmNsdWRlICJ0NDJkcml2ci5jIgogI2luY2x1ZGUgInQ0Mm9ianMuYyIKICNpbmNsdWRlICJ0NDJwYXJzZS5jIgotI2luY2x1ZGUgInQ0MmRyaXZyLmMiCisKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvd2luZm9udHMvSmFtZmlsZSBiL3NyYy93aW5mb250cy9KYW1maWxlCmluZGV4IDUyYWE3ZjkuLjQzODVlM2IgMTAwNjQ0Ci0tLSBhL3NyYy93aW5mb250cy9KYW1maWxlCisrKyBiL3NyYy93aW5mb250cy9KYW1maWxlCkBAIC0xLDYgKzEsNiBAQAogIyBGcmVlVHlwZSAyIHNyYy93aW5mb250cyBKYW1maWxlCiAjCi0jIENvcHlyaWdodCAyMDAxLTIwMTcgYnkKKyMgQ29weXJpZ2h0IDIwMDEtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvd2luZm9udHMvZm50ZXJycy5oIGIvc3JjL3dpbmZvbnRzL2ZudGVycnMuaAppbmRleCA0MjUxMDIxLi4zYTg2YWY1IDEwMDY0NAotLS0gYS9zcmMvd2luZm9udHMvZm50ZXJycy5oCisrKyBiL3NyYy93aW5mb250cy9mbnRlcnJzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgV2luIEZOVC9GT04gZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy93aW5mb250cy9tb2R1bGUubWsgYi9zcmMvd2luZm9udHMvbW9kdWxlLm1rCmluZGV4IGZmYzUzYTEuLjEzZjkwNzcgMTAwNjQ0Ci0tLSBhL3NyYy93aW5mb250cy9tb2R1bGUubWsKKysrIGIvc3JjL3dpbmZvbnRzL21vZHVsZS5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvd2luZm9udHMvcnVsZXMubWsgYi9zcmMvd2luZm9udHMvcnVsZXMubWsKaW5kZXggNzNlODI1ZC4uZDY5NGQxYSAxMDA2NDQKLS0tIGEvc3JjL3dpbmZvbnRzL3J1bGVzLm1rCisrKyBiL3NyYy93aW5mb250cy9ydWxlcy5tawpAQCAtMyw3ICszLDcgQEAKICMKIAogCi0jIENvcHlyaWdodCAxOTk2LTIwMTcgYnkKKyMgQ29weXJpZ2h0IDE5OTYtMjAxOCBieQogIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAjCiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsCmRpZmYgLS1naXQgYS9zcmMvd2luZm9udHMvd2luZm50LmMgYi9zcmMvd2luZm9udHMvd2luZm50LmMKaW5kZXggOTgxMWZiYi4uMzZiZDMxNCAxMDA2NDQKLS0tIGEvc3JjL3dpbmZvbnRzL3dpbmZudC5jCisrKyBiL3NyYy93aW5mb250cy93aW5mbnQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBmb250IGRyaXZlciBmb3IgV2luZG93cyBGTlQvRk9OIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE3IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxOCBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBDb3B5cmlnaHQgMjAwMyBIdXcgRCBNIERhdmllcyBmb3IgQ29kZXdlYXZlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgQ29weXJpZ2h0IDIwMDcgRG1pdHJ5IFRpbW9zaGtvdiBmb3IgQ29kZXdlYXZlcnMgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODU5LDEwICs4NTksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICk7CiAgICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICAgIGdvdG8gRmFpbDsKLQotICAgICAgICAvKiBTZWxlY3QgZGVmYXVsdCBjaGFybWFwICovCi0gICAgICAgIGlmICggcm9vdC0+bnVtX2NoYXJtYXBzICkKLSAgICAgICAgICByb290LT5jaGFybWFwID0gcm9vdC0+Y2hhcm1hcHNbMF07CiAgICAgICB9CiAKICAgICAgIC8qIHNldCB1cCByZW1haW5pbmcgZmxhZ3MgKi8KQEAgLTEwOTUsNyArMTA5MSw3IEBACiAKICAgICAgIC8qIG5vdGU6IHNpbmNlIGdseXBocyBhcmUgc3RvcmVkIGluIGNvbHVtbnMgYW5kIG5vdCBpbiByb3dzIHdlICovCiAgICAgICAvKiAgICAgICBjYW4ndCB1c2UgZnRfZ2x5cGhzbG90X3NldF9iaXRtYXAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgaWYgKCBGVF9BTExPQ19NVUxUKCBiaXRtYXAtPmJ1ZmZlciwgcGl0Y2gsIGJpdG1hcC0+cm93cyApICkKKyAgICAgIGlmICggRlRfQUxMT0NfTVVMVCggYml0bWFwLT5idWZmZXIsIGJpdG1hcC0+cm93cywgcGl0Y2ggKSApCiAgICAgICAgIGdvdG8gRXhpdDsKIAogICAgICAgY29sdW1uID0gKEZUX0J5dGUqKWJpdG1hcC0+YnVmZmVyOwpkaWZmIC0tZ2l0IGEvc3JjL3dpbmZvbnRzL3dpbmZudC5oIGIvc3JjL3dpbmZvbnRzL3dpbmZudC5oCmluZGV4IDg4NGI2NDUuLjQ4ODVjOWQgMTAwNjQ0Ci0tLSBhL3NyYy93aW5mb250cy93aW5mbnQuaAorKysgYi9zcmMvd2luZm9udHMvd2luZm50LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgZm9udCBkcml2ZXIgZm9yIFdpbmRvd3MgRk5UL0ZPTiBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTggYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgQ29weXJpZ2h0IDIwMDcgRG1pdHJ5IFRpbW9zaGtvdiBmb3IgQ29kZXdlYXZlcnMgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3Ztc19tYWtlLmNvbSBiL3Ztc19tYWtlLmNvbQppbmRleCBlYTU2MzE4Li42MjIyYzVlIDEwMDY0NAotLS0gYS92bXNfbWFrZS5jb20KKysrIGIvdm1zX21ha2UuY29tCkBAIC0xLDYgKzEsNiBAQAotJCEgbWFrZSBGcmVldHlwZTIgdW5kZXIgT3BlblZNUworJCEgbWFrZSBGcmVlVHlwZSAyIHVuZGVyIE9wZW5WTVMKICQhCi0kISBDb3B5cmlnaHQgMjAwMy0yMDE3IGJ5CiskISBDb3B5cmlnaHQgMjAwMy0yMDE4IGJ5CiAkISBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiAkIQogJCEgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKQEAgLTEwLDcgKzEwLDcgQEAKICQhIGZ1bGx5LgogJCEKICQhCi0kISBFeHRlcm5hbCBsaWJyYXJpZXMgKGxpa2UgRnJlZXR5cGUsIFhQTSwgZXRjLikgYXJlIHN1cHBvcnRlZCB2aWEgdGhlCiskISBFeHRlcm5hbCBsaWJyYXJpZXMgKGxpa2UgRnJlZVR5cGUsIFhQTSwgZXRjLikgYXJlIHN1cHBvcnRlZCB2aWEgdGhlCiAkISBjb25maWcgZmlsZSBWTVNMSUIuREFULiBQbGVhc2UgY2hlY2sgdGhlIHNhbXBsZSBmaWxlLCB3aGljaCBpcyBwYXJ0IG9mIHRoaXMKICQhIGRpc3RyaWJ1dGlvbiwgZm9yIHRoZSBpbmZvcm1hdGlvbiB5b3UgbmVlZCB0byBwcm92aWRlCiAkIQpAQCAtMjYsMTIgKzI2LDEyIEBACiAkISB6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gKHByZWZlcnJlZCkgb3IKICQhIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbSAod29yaykKICQhCi0kISBNYWtlIHByb2NlZHVyZSBoaXN0b3J5IGZvciBGcmVldHlwZTIKKyQhIE1ha2UgcHJvY2VkdXJlIGhpc3RvcnkgZm9yIEZyZWVUeXBlIDIKICQhCiAkIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCEgVmVyc2lvbiBoaXN0b3J5CiAkISAwLjAxIDIwMDQwNDAxIEZpcnN0IHZlcnNpb24gdG8gcmVjZWl2ZSBhIG51bWJlcgotJCEgMC4wMiAyMDA0MTAzMCBBZGQgZXJyb3IgaGFuZGxpbmcsIEZyZWV0eXBlIDIuMS45CiskISAwLjAyIDIwMDQxMDMwIEFkZCBlcnJvciBoYW5kbGluZywgRnJlZVR5cGUgMi4xLjkKICQhCiAkIG9uIGVycm9yIHRoZW4gZ290byBlcnJfZXhpdAogJCB0cnVlICA9IDEKQEAgLTEyOCw3ICsxMjgsNyBAQAogJCB3cml0ZSBzeXMkb3V0cHV0ICJFcnJvciByZWFkaW5nIGNvbmZpZyBmaWxlIHZtc2xpYi5kYXQiCiAkIGdvdG8gZXJyX2V4aXQKICRGVDJfRVJSOgotJCB3cml0ZSBzeXMkb3V0cHV0ICJDb3VsZCBub3QgbG9jYXRlIEZyZWV0eXBlIDIgaW5jbHVkZSBmaWxlcyIKKyQgd3JpdGUgc3lzJG91dHB1dCAiQ291bGQgbm90IGxvY2F0ZSBGcmVlVHlwZSAyIGluY2x1ZGUgZmlsZXMiCiAkIGdvdG8gZXJyX2V4aXQKICRFUlJfRVhJVDoKICQgc2V0IG1lc3NhZ2UvZmFjaWwvaWRlbnQvc2V2ZXIvdGV4dApAQCAtMTA3MCw3ICsxMDcwLDcgQEAKICQgICB0eXBlL291dD12bXNsaWIuZGF0IHN5cyRpbnB1dAogIQogISBUaGlzIGlzIGEgc2ltcGxlIGRyaXZlciBmaWxlIHdpdGggaW5mb3JtYXRpb24gdXNlZCBieSB2bXNfbWFrZS5jb20gdG8KLSEgY2hlY2sgaWYgZXh0ZXJuYWwgbGlicmFyaWVzIChsaWtlIHQxbGliIGFuZCBmcmVldHlwZSkgYXJlIGF2YWlsYWJsZSBvbgorISBjaGVjayBpZiBleHRlcm5hbCBsaWJyYXJpZXMgKGxpa2UgdDFsaWIgYW5kIEZyZWVUeXBlKSBhcmUgYXZhaWxhYmxlIG9uCiAhIHRoZSBzeXN0ZW0uCiAhCiAhIExheW91dCBvZiB0aGUgZmlsZToKQEAgLTExNDgsNyArMTE0OCw3IEBACiAkIHdyaXRlIG9wdGYgbGlibG9jICwgbHF1YWwKICQgaWYgKGYkdHJubG5tKCJ0b3B0IikgLm5lcy4gIiIpIHRoZW4gd3JpdGUgdG9wdCBsaWJsb2MgLCBscXVhbAogJCEKLSQhIE5hc3R5IGhhY2sgdG8gZ2V0IHRoZSBmcmVldHlwZSBpbmNsdWRlcyB0byB3b3JrCiskISBOYXN0eSBoYWNrIHRvIGdldCB0aGUgRnJlZVR5cGUgaW5jbHVkZXMgdG8gd29yawogJCEKICQgZnQyZGVmID0gZmFsc2UKICQgaWYgKChsaWJuYW1lIC5lcXMuICJGUkVFVFlQRSIpIC5hbmQuIC0K