ZGlmZiAtLWdpdCBhL2JpdC5jIGIvYml0LmMKaW5kZXggYzJiZmIyNC4uMjYyY2UzYSAxMDA2NDQKLS0tIGEvYml0LmMKKysrIGIvYml0LmMKQEAgLTI1LDEyICsyNSw2IEBACiAKICMgaW5jbHVkZSAiZ2xvYmFsLmgiCiAKLSMgaWZkZWYgSEFWRV9MSU1JVFNfSAotIyAgaW5jbHVkZSA8bGltaXRzLmg+Ci0jIGVsc2UKLSMgIGRlZmluZSBDSEFSX0JJVCAgOAotIyBlbmRpZgotCiAjIGluY2x1ZGUgImJpdC5oIgogCiAvKgpAQCAtODEsNiArNzUsOCBAQCB1bnNpZ25lZCBzaG9ydCBjb25zdCBjcmNfdGFibGVbMjU2XSA9IHsKIAogIyBkZWZpbmUgQ1JDX1BPTFkgIDB4ODAwNQogCisjaWZuZGVmIEZQTV9BVlIzMgorCiAvKgogICogTkFNRToJYml0LT5pbml0KCkKICAqIERFU0NSSVBUSU9OOglpbml0aWFsaXplIGJpdCBwb2ludGVyIHN0cnVjdApAQCAtMTkwLDYgKzE4Niw4IEBAIHZvaWQgbWFkX2JpdF93cml0ZShzdHJ1Y3QgbWFkX2JpdHB0ciAqYml0cHRyLCB1bnNpZ25lZCBpbnQgbGVuLAogfQogIyBlbmRpZgogCisjZW5kaWYKKwogLyoKICAqIE5BTUU6CWJpdC0+Y3JjKCkKICAqIERFU0NSSVBUSU9OOgljb21wdXRlIENSQy1jaGVjayB3b3JkCmRpZmYgLS1naXQgYS9iaXQuaCBiL2JpdC5oCmluZGV4IDVhNTE1NzAuLjcwZjU1MGEgMTAwNjQ0Ci0tLSBhL2JpdC5oCisrKyBiL2JpdC5oCkBAIC0yMiw2ICsyMiw5MiBAQAogIyBpZm5kZWYgTElCTUFEX0JJVF9ICiAjIGRlZmluZSBMSUJNQURfQklUX0gKIAorIyBpZmRlZiBIQVZFX0xJTUlUU19ICisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgZWxzZQorIyAgZGVmaW5lIENIQVJfQklUICA4CisjIGVuZGlmCisKKyNpZmRlZiBGUE1fQVZSMzIKKworc3RydWN0IG1hZF9iaXRwdHIgeworICB1bnNpZ25lZCBjaGFyIGNvbnN0ICpieXRlOworICB1bnNpZ25lZCBpbnQgcmVhZF9ieXRlczsKK307CisKKy8qCisgKiBOQU1FOgliaXQtPmluaXQoKQorICogREVTQ1JJUFRJT046CWluaXRpYWxpemUgYml0IHBvaW50ZXIgc3RydWN0CisgKi8KK3N0YXRpYyB2b2lkIG1hZF9iaXRfaW5pdChzdHJ1Y3QgbWFkX2JpdHB0ciAqYml0cHRyLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpieXRlKQoreworICBiaXRwdHItPmJ5dGUgID0gYnl0ZTsKKyAgYml0cHRyLT5yZWFkX2J5dGVzICA9IDA7Cit9CisKKy8qCisgKiBOQU1FOgliaXQtPmxlbmd0aCgpCisgKiBERVNDUklQVElPTjoJcmV0dXJuIG51bWJlciBvZiBiaXRzIGJldHdlZW4gc3RhcnQgYW5kIGVuZCBwb2ludHMKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBtYWRfYml0X2xlbmd0aChzdHJ1Y3QgbWFkX2JpdHB0ciBjb25zdCAqYmVnaW4sCisJCQkgICAgc3RydWN0IG1hZF9iaXRwdHIgY29uc3QgKmVuZCkKK3sKKyAgcmV0dXJuIChlbmQtPnJlYWRfYnl0ZXMgLSBiZWdpbi0+cmVhZF9ieXRlcykgKworICAgIDggKiAoZW5kLT5ieXRlIC0gYmVnaW4tPmJ5dGUpOworfQorCisvKgorICogTkFNRToJYml0LT5uZXh0Ynl0ZSgpCisgKiBERVNDUklQVElPTjoJcmV0dXJuIHBvaW50ZXIgdG8gbmV4dCB1bnByb2Nlc3NlZCBieXRlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNvbnN0ICptYWRfYml0X25leHRieXRlKHN0cnVjdCBtYWRfYml0cHRyIGNvbnN0ICpiaXRwdHIpCit7CisgIHJldHVybiBiaXRwdHItPmJ5dGUgKyAoKGJpdHB0ci0+cmVhZF9ieXRlcyArIDB4NykgPj4gMyk7Cit9CisKKy8qCisgKiBOQU1FOgliaXQtPnNraXAoKQorICogREVTQ1JJUFRJT046CWFkdmFuY2UgYml0IHBvaW50ZXIKKyAqLworc3RhdGljIHZvaWQgbWFkX2JpdF9za2lwKHN0cnVjdCBtYWRfYml0cHRyICpiaXRwdHIsIHVuc2lnbmVkIGludCBsZW4pCit7CisgIGJpdHB0ci0+cmVhZF9ieXRlcyArPSBsZW47CisgIGJpdHB0ci0+Ynl0ZSArPSAoYml0cHRyLT5yZWFkX2J5dGVzID4+IDMpOworICBiaXRwdHItPnJlYWRfYnl0ZXMgJj0gIDB4NzsKK30KKworLyoKKyAqIE5BTUU6CWJpdC0+cmVhZCgpCisgKiBERVNDUklQVElPTjoJcmVhZCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGJpdHMgYW5kIHJldHVybiB0aGVpciBVSU1TQkYgdmFsdWUKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFkX2JpdF9yZWFkKHN0cnVjdCBtYWRfYml0cHRyICpiaXRwdHIsIHVuc2lnbmVkIGludCBsZW4pCit7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdmFsdWU7CisKKyAgaWYgKCFsZW4pCisgICAgcmV0dXJuIDA7CisKKyAgdmFsdWUgPSAqKHVuc2lnbmVkIGludCAqKWJpdHB0ci0+Ynl0ZTsKKworICB2YWx1ZSA8PD0gYml0cHRyLT5yZWFkX2J5dGVzOworICB2YWx1ZSA+Pj0gKDMyIC0gbGVuKTsKKworICBiaXRwdHItPnJlYWRfYnl0ZXMgKz0gbGVuOworICBiaXRwdHItPmJ5dGUgKz0gKGJpdHB0ci0+cmVhZF9ieXRlcyA+PiAzKTsKKyAgYml0cHRyLT5yZWFkX2J5dGVzICY9ICAweDc7CisKKyAgcmV0dXJuIHZhbHVlOworfQorCisjIGRlZmluZSBtYWRfYml0X2ZpbmlzaChiaXRwdHIpCQkvKiBub3RoaW5nICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nICBtYWRfYml0X2JpdHNsZWZ0KHN0cnVjdCBtYWRfYml0cHRyICpiaXRwdHIpCit7CisgIHJldHVybiAoOCAtIChiaXRwdHIpLT5yZWFkX2J5dGVzKTsKK30KKworI2Vsc2UgLyogI2lmZGVmIEZQTV9BVlIzMiAqLworCiBzdHJ1Y3QgbWFkX2JpdHB0ciB7CiAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKmJ5dGU7CiAgIHVuc2lnbmVkIHNob3J0IGNhY2hlOwpAQCAtNDIsNiArMTI4LDggQEAgdm9pZCBtYWRfYml0X3NraXAoc3RydWN0IG1hZF9iaXRwdHIgKiwgdW5zaWduZWQgaW50KTsKIHVuc2lnbmVkIGxvbmcgbWFkX2JpdF9yZWFkKHN0cnVjdCBtYWRfYml0cHRyICosIHVuc2lnbmVkIGludCk7CiB2b2lkIG1hZF9iaXRfd3JpdGUoc3RydWN0IG1hZF9iaXRwdHIgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAorI2VuZGlmCisKIHVuc2lnbmVkIHNob3J0IG1hZF9iaXRfY3JjKHN0cnVjdCBtYWRfYml0cHRyLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIHNob3J0KTsKIAogIyBlbmRpZgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDliNzkzOTkuLjA2M2NiOWIgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTI3NCwxMyArMjc0LDE0IEBAIGZpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmaXhlZC1wb2ludCBtYXRoIHJvdXRpbmVzKQogQUNfQVJHX0VOQUJMRShmcG0sIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mcG09QVJDSF0sCiAJCSAgIFt1c2UgQVJDSC1zcGVjaWZpYyBmaXhlZC1wb2ludCBtYXRoIHJvdXRpbmVzCi0JCSAgICAob25lIG9mOiBpbnRlbCwgYXJtLCBtaXBzLCBzcGFyYywgcHBjLCA2NGJpdCwgZGVmYXVsdCldKSwKKwkJICAgIChvbmUgb2Y6IGludGVsLCBhcm0sIGF2cjMyLCBtaXBzLCBzcGFyYywgcHBjLCA2NGJpdCwgZGVmYXVsdCldKSwKIFsKICAgICBjYXNlICIkZW5hYmxldmFsIiBpbgogCXllcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAJbm98ZGVmYXVsdHxhcHByb3gpIEZQTT0iREVGQVVMVCIgOzsKIAlpbnRlbHxpPzg2KSAgICAgICAgRlBNPSJJTlRFTCIgICA7OwogCWFybSkgICAgICAgICAgICAgICBGUE09IkFSTSIgICAgIDs7CisJYXZyMzIpICAgICAgICAgICAgIEZQTT0iQVZSMzIiICAgOzsKIAltaXBzKSAgICAgICAgICAgICAgRlBNPSJNSVBTIiAgICA7OwogCXNwYXJjKSAgICAgICAgICAgICBGUE09IlNQQVJDIiAgIDs7CiAJcHBjfHBvd2VycGMpICAgICAgIEZQTT0iUFBDIiAgICAgOzsKQEAgLTI5OCw2ICsyOTksNyBAQCB0aGVuCiAgICAgY2FzZSAiJGhvc3QiIGluCiAJaT84Ni0qKSAgICAgRlBNPSJJTlRFTCIgIDs7CiAJYXJtKi0qKSAgICAgRlBNPSJBUk0iICAgIDs7CisJYXZyMzIqLSopICAgRlBNPSJBVlIzMiIgIDs7CiAJbWlwcyotKikgICAgRlBNPSJNSVBTIiAgIDs7CiAJc3BhcmMqLSopICAgRlBNPSJTUEFSQyIgIDs7CiAJcG93ZXJwYyotKikgRlBNPSJQUEMiICAgIDs7CkBAIC0zNDMsNiArMzQ1LDExIEBAIHRoZW4KIAkgICAgQVNPPSIkQVNPIC1EQVNPX0lNRENUIgogCSAgICBBU09fT0JKUz0iaW1kY3RfbF9hcm0ubG8iCiAJICAgIDs7CisJYXZyMzIqLSopCisJICAgIEFTTz0iJEFTTyAtREFTT19JTlRFUkxFQVZFMiIKKwkgICAgQVNPPSIkQVNPIC1EQVNPX1pFUk9DSEVDSyIKKwkgICAgQVNPX09CSlM9ImRjdDMyX2F2cjMyLmxvIHN5bnRoX2F2cjMyLmxvIGltZGN0X2F2cjMyLmxvIgorCSAgICA7OwogCW1pcHMqLSopCiAJICAgIEFTTz0iJEFTTyAtREFTT19JTlRFUkxFQVZFMiIKIAkgICAgQVNPPSIkQVNPIC1EQVNPX1pFUk9DSEVDSyIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlZTQyMWNjLi43YTlmMGM4IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQCBPcHRpb25hbCBGZWF0dXJlczoKICAgLS1lbmFibGUtc3BlZWQgICAgICAgICAgb3B0aW1pemUgZm9yIHNwZWVkIG92ZXIgYWNjdXJhY3kKICAgLS1lbmFibGUtYWNjdXJhY3kgICAgICAgb3B0aW1pemUgZm9yIGFjY3VyYWN5IG92ZXIgc3BlZWQKICAgLS1lbmFibGUtZnBtPUFSQ0ggICAgICAgdXNlIEFSQ0gtc3BlY2lmaWMgZml4ZWQtcG9pbnQgbWF0aCByb3V0aW5lcyAob25lIG9mOgotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbCwgYXJtLCBtaXBzLCBzcGFyYywgcHBjLCA2NGJpdCwgZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWwsIGFybSwgYXZyMzIsIG1pcHMsIHNwYXJjLCBwcGMsIDY0Yml0LCBkZWZhdWx0KQogICAtLWVuYWJsZS1zc28gICAgICAgICAgICB1c2Ugc3ViYmFuZCBzeW50aGVzaXMgb3B0aW1pemF0aW9uCiAgIC0tZGlzYWJsZS1hc28gICAgICAgICAgIGRpc2FibGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG9wdGltaXphdGlvbnMKICAgLS1lbmFibGUtc3RyaWN0LWlzbyAgICAgdXNlIHN0cmljdCBJU08vSUVDIGludGVycHJldGF0aW9ucwpAQCAtMjE0NzcsNiArMjE0NzcsNyBAQCBpZiB0ZXN0ICIke2VuYWJsZV9mcG0rc2V0fSIgPSBzZXQ7IHRoZW4KIAlub3xkZWZhdWx0fGFwcHJveCkgRlBNPSJERUZBVUxUIiA7OwogCWludGVsfGk/ODYpICAgICAgICBGUE09IklOVEVMIiAgIDs7CiAJYXJtKSAgICAgICAgICAgICAgIEZQTT0iQVJNIiAgICAgOzsKKwlhdnIzMikgICAgICAgICAgICAgRlBNPSJBVlIzMiIgICA7OwogCW1pcHMpICAgICAgICAgICAgICBGUE09Ik1JUFMiICAgIDs7CiAJc3BhcmMpICAgICAgICAgICAgIEZQTT0iU1BBUkMiICAgOzsKIAlwcGN8cG93ZXJwYykgICAgICAgRlBNPSJQUEMiICAgICA7OwpAQCAtMjE0OTgsNiArMjE0OTksNyBAQCB0aGVuCiAgICAgY2FzZSAiJGhvc3QiIGluCiAJaT84Ni0qKSAgICAgRlBNPSJJTlRFTCIgIDs7CiAJYXJtKi0qKSAgICAgRlBNPSJBUk0iICAgIDs7CisJYXZyMzIqLSopICAgRlBNPSJBVlIzMiIgIDs7CiAJbWlwcyotKikgICAgRlBNPSJNSVBTIiAgIDs7CiAJc3BhcmMqLSopICAgRlBNPSJTUEFSQyIgIDs7CiAJcG93ZXJwYyotKikgRlBNPSJQUEMiICAgIDs7CkBAIC0yMTU1NCw2ICsyMTU1NiwxMSBAQCB0aGVuCiAJICAgIEFTTz0iJEFTTyAtREFTT19JTURDVCIKIAkgICAgQVNPX09CSlM9ImltZGN0X2xfYXJtLmxvIgogCSAgICA7OworCWF2cjMyKi0qKQorCSAgICBBU089IiRBU08gLURBU09fSU5URVJMRUFWRTIiCisJICAgIEFTTz0iJEFTTyAtREFTT19aRVJPQ0hFQ0siCisJICAgIEFTT19PQkpTPSJkY3QzMl9hdnIzMi5sbyBzeW50aF9hdnIzMi5sbyBpbWRjdF9hdnIzMi5sbyIKKwkgICAgOzsKIAltaXBzKi0qKQogCSAgICBBU089IiRBU08gLURBU09fSU5URVJMRUFWRTIiCiAJICAgIEFTTz0iJEFTTyAtREFTT19aRVJPQ0hFQ0siCmRpZmYgLS1naXQgYS9kY3QzMl9hdnIzMi5TIGIvZGN0MzJfYXZyMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTEzMzQwCi0tLSAvZGV2L251bGwKKysrIGIvZGN0MzJfYXZyMzIuUwpAQCAtMCwwICsxLDc4MCBAQAorLyoKKyAgIE9wdGltaXplZCAzMi1wb2ludCBEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtIChEQ1QpCisgICBDb3B5cmlnaHQgMjAwMy0yMDA2IEF0bWVsIENvcnBvcmF0aW9uLgorCisgICBXcml0dGVuIGJ5IFJvbm55IFBlZGVyc2VuLCBBdG1lbCBOb3J3YXkKKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAqLworCisjZGVmaW5lCVNISUZUCTEyCisjZGVmaW5lIE1BRF9GX1NDQUxFQklUUyAyOAorI2RlZmluZSBTTE9UUyA4CisKKyNkZWZpbmUgTUFEX0YoeCkJKCh4ICsgKDEgPDwgMTUpKSA+PiAxNikKKworIyAgZGVmaW5lIGNvc3RhYjEJTUFEX0YoMHg3ZmQ4ODc4ZSkKKyMgIGRlZmluZSBjb3N0YWIyCU1BRF9GKDB4N2Y2MjM2OGYpCisjICBkZWZpbmUgY29zdGFiMwlNQURfRigweDdlOWQ1NWZjKQorIyAgZGVmaW5lIGNvc3RhYjQJTUFEX0YoMHg3ZDhhNWY0MCkKKyMgIGRlZmluZSBjb3N0YWI1CU1BRF9GKDB4N2MyOWZiZWUpCisjICBkZWZpbmUgY29zdGFiNglNQURfRigweDdhN2QwNTViKQorIyAgZGVmaW5lIGNvc3RhYjcJTUFEX0YoMHg3ODg0ODQxNCkKKyMgIGRlZmluZSBjb3N0YWI4CU1BRF9GKDB4NzY0MWFmM2QpCisjICBkZWZpbmUgY29zdGFiOQlNQURfRigweDczYjVlYmQxKQorIyAgZGVmaW5lIGNvc3RhYjEwCU1BRF9GKDB4NzBlMmNiYzYpCisjICBkZWZpbmUgY29zdGFiMTEJTUFEX0YoMHg2ZGNhMGQxNCkKKyMgIGRlZmluZSBjb3N0YWIxMglNQURfRigweDZhNmQ5OGE0KQorIyAgZGVmaW5lIGNvc3RhYjEzCU1BRF9GKDB4NjZjZjgxMjApCisjICBkZWZpbmUgY29zdGFiMTQJTUFEX0YoMHg2MmYyMDFhYykKKyMgIGRlZmluZSBjb3N0YWIxNQlNQURfRigweDVlZDc3YzhhKQorIyAgZGVmaW5lIGNvc3RhYjE2CU1BRF9GKDB4NWE4Mjc5OWEpCisjICBkZWZpbmUgY29zdGFiMTcJTUFEX0YoMHg1NWY1YTRkMikKKyMgIGRlZmluZSBjb3N0YWIxOAlNQURfRigweDUxMzNjYzk0KQorIyAgZGVmaW5lIGNvc3RhYjE5CU1BRF9GKDB4NGMzZmRmZjQpCisjICBkZWZpbmUgY29zdGFiMjAJTUFEX0YoMHg0NzFjZWNlNykKKyMgIGRlZmluZSBjb3N0YWIyMQlNQURfRigweDQxY2UxZTY1KQorIyAgZGVmaW5lIGNvc3RhYjIyCU1BRF9GKDB4M2M1NmJhNzApCisjICBkZWZpbmUgY29zdGFiMjMJTUFEX0YoMHgzNmJhMjAxNCkKKyMgIGRlZmluZSBjb3N0YWIyNAlNQURfRigweDMwZmJjNTRkKQorIyAgZGVmaW5lIGNvc3RhYjI1CU1BRF9GKDB4MmIxZjM0ZWIpCisjICBkZWZpbmUgY29zdGFiMjYJTUFEX0YoMHgyNTI4MGM1ZSkKKyMgIGRlZmluZSBjb3N0YWIyNwlNQURfRigweDFmMTlmOTdiKQorIyAgZGVmaW5lIGNvc3RhYjI4CU1BRF9GKDB4MThmOGI4M2MpCisjICBkZWZpbmUgY29zdGFiMjkJTUFEX0YoMHgxMmM4MTA2ZikKKyMgIGRlZmluZSBjb3N0YWIzMAlNQURfRigweDBjOGJkMzVlKQorIyAgZGVmaW5lIGNvc3RhYjMxCU1BRF9GKDB4MDY0N2Q5N2MpCisKKworCS5tYWNybwlidXR0ZXJmbHkyX2luIG91dDEsIG91dDIsIG91dDMsIG91dDQsIGluLCBpZHhfaW4xLCBpZHhfaW4yLCBpZHhfaW4zLCBpZHhfaW40LCBjb2VmZjEsIGNvZWZmMiwgdG1wbG8sIHRtcGhpCisJbW92CVx0bXBsbywgXGNvZWZmMQorCWxkLncJXG91dDEsIFxpbltcaWR4X2luMSAqIDRdCisJbGQudwlcb3V0MiwgXGluW1xpZHhfaW4yICogNF0KKwlsZC53CVxvdXQzLCBcaW5bXGlkeF9pbjMgKiA0XQorCWxkLncJXG91dDQsIFxpbltcaWR4X2luNCAqIDRdCisJc3ViCVx0bXBoaSwgXG91dDEsIFxvdXQyCisJYWRkCVxvdXQxLCBcb3V0MgorCW11bHNhdHJuZHdoLncJXG91dDIsIFx0bXBoaSwgXHRtcGxvOmIKKworCXN1YglcdG1waGksIFxvdXQzLCBcb3V0NAorCW1vdglcdG1wbG8sIFxjb2VmZjIKKwlhZGQJXG91dDMsIFxvdXQ0CisJbXVsc2F0cm5kd2gudwlcb3V0NCwgXHRtcGhpLCBcdG1wbG86YgorCS5lbmRtCisKKwkubWFjcm8JYnV0dGVyZmx5MglpbjEsIGluMiwgaW4zLCBpbjQsIGNvZWZmMSwgdG1wbG8sIHRtcGhpLCB0bXAKKwltb3YJXHRtcCwgXGNvZWZmMQorCXN1YglcdG1waGksIFxpbjEsIFxpbjIKKwlhZGQJXGluMSwgXGluMgorCW11bHNhdHJuZHdoLncJXGluMiwgXHRtcGhpLCBcdG1wOmIKKworCXN1YglcdG1waGksIFxpbjMsIFxpbjQKKwlhZGQJXGluMywgXGluNAorCW11bHNhdHJuZHdoLncJXGluNCwgXHRtcGhpLCBcdG1wOmIKKwkuZW5kbQorCisJLm1hY3JvCWJ1dHRlcmZseTQJaW4xLCBpbjIsIGluMywgaW40LCBpbjUsIGluNiwgaW43LCBpbjgsIGNvZWZmMSwgdG1wbG8sIHRtcGhpLCB0bXAKKwltb3YJXHRtcCwgXGNvZWZmMQorCXN1YglcdG1waGksIFxpbjEsIFxpbjIKKwlhZGQJXGluMSwgXGluMgorCW11bHNhdHJuZHdoLncJXGluMiwgXHRtcGhpLCBcdG1wOmIKKworCXN1YglcdG1waGksIFxpbjMsIFxpbjQKKwlhZGQJXGluMywgXGluNAorCW11bHNhdHJuZHdoLncJXGluNCwgXHRtcGhpLCBcdG1wOmIKKworCXN1YglcdG1waGksIFxpbjUsIFxpbjYKKwlhZGQJXGluNSwgXGluNgorCW11bHNhdHJuZHdoLncJXGluNiwgXHRtcGhpLCBcdG1wOmIKKworCXN1YglcdG1waGksIFxpbjcsIFxpbjgKKwlhZGQJXGluNywgXGluOAorCW11bHNhdHJuZHdoLncJXGluOCwgXHRtcGhpLCBcdG1wOmIKKwkuZW5kbQorCisJLm1hY3JvCXNjYWxlCXJlZworCS5lbmRtCisKKy8qdm9pZCBkY3QzMigJbWFkX2ZpeGVkX3QgY29uc3QgaW5bMzJdLCB1bnNpZ25lZCBpbnQgc2xvdCwKKwkJbWFkX2ZpeGVkX3QgbG9bMTZdWzhdLCBtYWRfZml4ZWRfdCBoaVsxNl1bOF0pICovCisKKwkuZ2xvYmFsCWRjdDMyX2F2cjMyCitkY3QzMl9hdnIzMjoKKwlzdG0JLS1zcCwgcjAtcjcsIHI5LXIxMSwgbHIKKworCXN1YglzcCwgMzIqNAorCisvKgl0MCAgID0gaW5bMF0gICsgaW5bMzFdOyAgdDE2ICA9IE1VTChpblswXSAgLSBpblszMV0sIGNvc3RhYjEpOworCXQxICAgPSBpblsxNV0gKyBpblsxNl07ICB0MTcgID0gTVVMKGluWzE1XSAtIGluWzE2XSwgY29zdGFiMzEpOyAqLworCWJ1dHRlcmZseTJfaW4JcjQvKnQwKi8sIHI1Lyp0MTYqLywgcjYvKnQxKi8sIHI3Lyp0MTcqLywgcjEyLCAwLCAzMSwgMTUsIDE2LCBjb3N0YWIxLCBjb3N0YWIzMSwgcjEwLCByMTEKKworLyoJdDQxICA9IHQxNiArIHQxNzsKKwl0NTkgID0gTVVMKHQxNiAtIHQxNywgY29zdGFiMik7CisJdDMzICA9CSB0MCAgKyB0MTsKKwl0NTAgID0gTVVMKHQwICAtIHQxLCAgY29zdGFiMik7Ki8KKwlidXR0ZXJmbHkyCXI1Lyp0NDEqLywgcjcvKnQ1OSovLCByNC8qdDMzKi8sIHI2Lyp0NTAqLywgY29zdGFiMiwgcjEwLCByMTEsIGxyCisKKy8qCXQyICAgPSBpbls3XSAgKyBpblsyNF07ICB0MTggID0gTVVMKGluWzddICAtIGluWzI0XSwgY29zdGFiMTUpOworCXQzICAgPSBpbls4XSAgKyBpblsyM107ICB0MTkgID0gTVVMKGluWzhdICAtIGluWzIzXSwgY29zdGFiMTcpOyAqLworCWJ1dHRlcmZseTJfaW4JcjAvKnQyKi8sIHIxLyp0MTgqLywgcjIvKnQzKi8sIHIzLyp0MTkqLywgcjEyLCA3LCAyNCwgOCwgMjMsIGNvc3RhYjE1LCBjb3N0YWIxNywgcjEwLCByMTEKKworLyoJdDQyICA9IHQxOCArIHQxOTsKKwl0NjAgID0gTVVMKHQxOCAtIHQxOSwgY29zdGFiMzApOworCXQzNCAgPSB0MiAgKyB0MzsKKwl0NTEgID0gTVVMKHQyICAtIHQzLCAgY29zdGFiMzApOyAqLworCWJ1dHRlcmZseTIJcjEvKnQ0MiovLCByMy8qdDYwKi8sIHIwLyp0MzQqLywgcjIvKnQ1MSovLCBjb3N0YWIzMCwgcjEwLCByMTEsIGxyCisKKy8qCXQ3MyAgPSB0NDEgKyB0NDI7ICB0OTQgID0gTVVMKHQ0MSAtIHQ0MiwgY29zdGFiNCk7CisJdDgzICA9IHQ1OSArIHQ2MDsgIHQxMDYgPSBNVUwodDU5IC0gdDYwLCBjb3N0YWI0KTsgKi8KKworCisvKgl0NjkgID0gdDMzICsgdDM0OyAgdDg5ICA9IE1VTCh0MzMgLSB0MzQsIGNvc3RhYjQpOworCXQ3OCAgPSB0NTAgKyB0NTE7ICB0MTAwID0gTVVMKHQ1MCAtIHQ1MSwgY29zdGFiNCk7ICovCisJYnV0dGVyZmx5NAlyNS8qdDczKi8sIHIxLyp0OTQqLywgcjcvKnQ4MyovLCByMy8qdDEwNiovLHI0Lyp0NjkqLywgcjAvKnQ4OSovLCByNi8qdDc4Ki8sIHIyLyp0MTAwKi8sIGNvc3RhYjQsIHIxMCwgcjExLCBscgorCisvKglTdG9yZSBhd2F5IHRoZSBjb21wdXRlZCBidXR0ZXJmbGllczoKKwlzcFswLTddID0gdDgzLCB0NzgsIHQ3MywgdDY5LCB0MTA2LCB0MTAwLCB0OTQsIHQ4OSAqLworCXN0bQlzcCwgcjAtcjcKKworCisvKgl0NCAgID0gaW5bM10gICsgaW5bMjhdOyAgdDIwICA9IE1VTChpblszXSAgLSBpblsyOF0sIGNvc3RhYjcpOworCXQ1ICAgPSBpblsxMl0gKyBpblsxOV07ICB0MjEgID0gTVVMKGluWzEyXSAtIGluWzE5XSwgY29zdGFiMjUpOyAqLworCWJ1dHRlcmZseTJfaW4JcjQvKnQ0Ki8sIHI1Lyp0MjAqLywgcjYvKnQ1Ki8sIHI3Lyp0MjEqLywgcjEyLCAzLCAyOCwgMTIsIDE5LCBjb3N0YWI3LCBjb3N0YWIyNSwgcjEwLCByMTEKKworLyoJdDQzICA9IHQyMCArIHQyMTsKKwl0NjEgID0gTVVMKHQyMCAtIHQyMSwgY29zdGFiMTQpOworCXQzNSAgPSB0NCAgKyB0NTsKKwl0NTIgID0gTVVMKHQ0ICAtIHQ1LCAgY29zdGFiMTQpOyAqLworCWJ1dHRlcmZseTIJcjUvKnQ0MyovLCByNy8qdDYxKi8sIHI0Lyp0MzUqLywgcjYvKnQ1MiovLCBjb3N0YWIxNCwgcjEwLCByMTEsIGxyCisKKy8qCXQ2ICAgPSBpbls0XSAgKyBpblsyN107ICB0MjIgID0gTVVMKGluWzRdICAtIGluWzI3XSwgY29zdGFiOSk7CisJdDcgICA9IGluWzExXSArIGluWzIwXTsgIHQyMyAgPSBNVUwoaW5bMTFdIC0gaW5bMjBdLCBjb3N0YWIyMyk7ICovCisJYnV0dGVyZmx5Ml9pbglyMC8qdDYqLywgcjEvKnQyMiovLCByMi8qdDcqLywgcjMvKnQyMyovLCByMTIsIDQsIDI3LCAxMSwgMjAsIGNvc3RhYjksIGNvc3RhYjIzLCByMTAsIHIxMQorCisvKgl0NDQgID0gdDIyICsgdDIzOworCXQ2MiAgPSBNVUwodDIyIC0gdDIzLCBjb3N0YWIxOCk7CisJdDM2ICA9IHQ2ICArIHQ3OworCXQ1MyAgPSBNVUwodDYgIC0gdDcsICBjb3N0YWIxOCk7ICovCisJYnV0dGVyZmx5MglyMS8qdDQ0Ki8sIHIzLyp0NjIqLywgcjAvKnQzNiovLCByMi8qdDUzKi8sIGNvc3RhYjE4LCByMTAsIHIxMSwgbHIKKworLyoJdDc0ICA9IHQ0MyArIHQ0NDsgIHQ5NSAgPSBNVUwodDQzIC0gdDQ0LCBjb3N0YWIyOCk7CisJdDg0ICA9IHQ2MSArIHQ2MjsgIHQxMDcgPSBNVUwodDYxIC0gdDYyLCBjb3N0YWIyOCk7ICovCisKKy8qCXQ3MCAgPSB0MzUgKyB0MzY7ICB0OTAgID0gTVVMKHQzNSAtIHQzNiwgY29zdGFiMjgpOworCXQ3OSAgPSB0NTIgKyB0NTM7ICB0MTAxID0gTVVMKHQ1MiAtIHQ1MywgY29zdGFiMjgpOyAqLworCWJ1dHRlcmZseTQJcjUvKnQ3NCovLCByMS8qdDk1Ki8sIHI3Lyp0ODQqLywgcjMvKnQxMDcqLywgcjQvKnQ3MCovLCByMC8qdDkwKi8sIHI2Lyp0NzkqLywgcjIvKnQxMDEqLywgY29zdGFiMjgsIHIxMCwgcjExLCBscgorCisvKglTdG9yZSBhd2F5IHRoZSBjb21wdXRlZCBidXR0ZXJmbGllczoKKwlzcFs4LTE1XSA9IHQ4NCwgdDc5LCB0NzQsIHQ3MCwgdDEwNywgdDEwMSwgdDk1LCB0OTAgKi8KKwlzdWIJcjEwLCBzcCwgLTgqNAorCXN0bQlyMTAsIHIwLXI3CisKKworLyoJdDggICA9IGluWzFdICArIGluWzMwXTsgIHQyNCAgPSBNVUwoaW5bMV0gIC0gaW5bMzBdLCBjb3N0YWIzKTsKKwl0OSAgID0gaW5bMTRdICsgaW5bMTddOyAgdDI1ICA9IE1VTChpblsxNF0gLSBpblsxN10sIGNvc3RhYjI5KTsgKi8KKwlidXR0ZXJmbHkyX2luCXI0Lyp0OCovLCByNS8qdDI0Ki8sIHI2Lyp0OSovLCByNy8qdDI1Ki8sIHIxMiwgMSwgMzAsIDE0LCAxNywgY29zdGFiMywgY29zdGFiMjksIHIxMCwgcjExCisKKworLyoJdDQ1ICA9IHQyNCArIHQyNTsKKwl0NjMgID0gTVVMKHQyNCAtIHQyNSwgY29zdGFiNik7CisJdDM3ICA9IHQ4ICArIHQ5OworCXQ1NCAgPSBNVUwodDggIC0gdDksICBjb3N0YWI2KTsgKi8KKwlidXR0ZXJmbHkyCXI1Lyp0NDUqLywgcjcvKnQ2MyovLCByNC8qdDM3Ki8sIHI2Lyp0NTQqLywgY29zdGFiNiwgcjEwLCByMTEsIGxyCisKKy8qCXQxMCAgPSBpbls2XSAgKyBpblsyNV07ICB0MjYgID0gTVVMKGluWzZdICAtIGluWzI1XSwgY29zdGFiMTMpOworCXQxMSAgPSBpbls5XSAgKyBpblsyMl07ICB0MjcgID0gTVVMKGluWzldICAtIGluWzIyXSwgY29zdGFiMTkpOyAqLworCWJ1dHRlcmZseTJfaW4JcjAvKnQxMCovLCByMS8qdDI2Ki8sIHIyLyp0MTEqLywgcjMvKnQyNyovLCByMTIsIDYsIDI1LCA5LCAyMiwgY29zdGFiMTMsIGNvc3RhYjE5LCByMTAsIHIxMQorCisvKgl0NDYgID0gdDI2ICsgdDI3OworCXQ2NCAgPSBNVUwodDI2IC0gdDI3LCBjb3N0YWIyNik7CisJdDM4ICA9IHQxMCArIHQxMTsKKwl0NTUgID0gTVVMKHQxMCAtIHQxMSwgY29zdGFiMjYpOyAqLworCWJ1dHRlcmZseTIJcjEvKnQ0NiovLCByMy8qdDY0Ki8sIHIwLyp0MzgqLywgcjIvKnQ1NSovLCBjb3N0YWIyNiwgcjEwLCByMTEsIGxyCisKKy8qCXQ3NSAgPSB0NDUgKyB0NDY7ICB0OTYgID0gTVVMKHQ0NSAtIHQ0NiwgY29zdGFiMTIpOworCXQ4NSAgPSB0NjMgKyB0NjQ7ICB0MTA4ID0gTVVMKHQ2MyAtIHQ2NCwgY29zdGFiMTIpOyAqLworCisvKgl0NzEgID0gdDM3ICsgdDM4OyAgdDkxICA9IE1VTCh0MzcgLSB0MzgsIGNvc3RhYjEyKTsKKwl0ODAgID0gdDU0ICsgdDU1OyAgdDEwMiA9IE1VTCh0NTQgLSB0NTUsIGNvc3RhYjEyKTsgKi8KKwlidXR0ZXJmbHk0CXI1Lyp0NzUqLywgcjEvKnQ5NiovLCByNy8qdDg1Ki8sIHIzLyp0MTA4Ki8sIHI0Lyp0NzEqLywgcjAvKnQ5MSovLCByNi8qdDgwKi8sIHIyLyp0MTAyKi8sIGNvc3RhYjEyLCByMTAsIHIxMSwgbHIKKworLyoJU3RvcmUgYXdheSB0aGUgY29tcHV0ZWQgYnV0dGVyZmxpZXM6CisJc3BbMTYtMjNdID0gdDg1LCB0ODAsIHQ3NSwgdDcxLCB0MTA4LCB0MTAyLCB0OTYsIHQ5MSAqLworCXN1YglyMTAsIHNwLCAtMTYqNAorCXN0bQlyMTAsIHIwLXI3CisKKy8qCXQxMiAgPSBpblsyXSAgKyBpblsyOV07ICB0MjggID0gTVVMKGluWzJdICAtIGluWzI5XSwgY29zdGFiNSk7CisJdDEzICA9IGluWzEzXSArIGluWzE4XTsgIHQyOSAgPSBNVUwoaW5bMTNdIC0gaW5bMThdLCBjb3N0YWIyNyk7ICovCisJYnV0dGVyZmx5Ml9pbglyNC8qdDEyKi8sIHI1Lyp0MjgqLywgcjYvKnQxMyovLCByNy8qdDI5Ki8sIHIxMiwgMiwgMjksIDEzLCAxOCwgY29zdGFiNSwgY29zdGFiMjcsIHIxMCwgcjExCisKKy8qCXQ0NyAgPSB0MjggKyB0Mjk7CisJdDY1ICA9IE1VTCh0MjggLSB0MjksIGNvc3RhYjEwKTsKKwl0MzkgID0gdDEyICsgdDEzOworCXQ1NiAgPSBNVUwodDEyIC0gdDEzLCBjb3N0YWIxMCk7ICovCisJYnV0dGVyZmx5MglyNS8qdDQ3Ki8sIHI3Lyp0NjUqLywgcjQvKnQzOSovLCByNi8qdDU2Ki8sIGNvc3RhYjEwLCByMTAsIHIxMSwgbHIKKworLyoJdDE0ICA9IGluWzVdICArIGluWzI2XTsgIHQzMCAgPSBNVUwoaW5bNV0gIC0gaW5bMjZdLCBjb3N0YWIxMSk7CisJdDE1ICA9IGluWzEwXSArIGluWzIxXTsgIHQzMSAgPSBNVUwoaW5bMTBdIC0gaW5bMjFdLCBjb3N0YWIyMSk7Ki8KKwlidXR0ZXJmbHkyX2luCXIwLyp0MTQqLywgcjEvKnQzMCovLCByMi8qdDE1Ki8sIHIzLyp0MzEqLywgcjEyLCA1LCAyNiwgMTAsIDIxLCBjb3N0YWIxMSwgY29zdGFiMjEsIHIxMCwgcjExCisKKy8qCXQ0OCAgPSB0MzAgKyB0MzE7CisJdDY2ICA9IE1VTCh0MzAgLSB0MzEsIGNvc3RhYjIyKTsKKwl0NDAgID0gdDE0ICsgdDE1OworCXQ1NyAgPSBNVUwodDE0IC0gdDE1LCBjb3N0YWIyMik7Ki8KKwlidXR0ZXJmbHkyCXIxLyp0NDgqLywgcjMvKnQ2NiovLCByMC8qdDQwKi8sIHIyLyp0NTcqLywgY29zdGFiMjIsIHIxMCwgcjExLCBscgorCisvKgl0NzYgID0gdDQ3ICsgdDQ4OyAgdDk3ICA9IE1VTCh0NDcgLSB0NDgsIGNvc3RhYjIwKTsKKwl0ODYgID0gdDY1ICsgdDY2OyAgdDEwOSA9IE1VTCh0NjUgLSB0NjYsIGNvc3RhYjIwKTsqLworCisvKgl0NzIgID0gdDM5ICsgdDQwOyAgdDkyICA9IE1VTCh0MzkgLSB0NDAsIGNvc3RhYjIwKTsKKwl0ODEgID0gdDU2ICsgdDU3OyAgdDEwMyA9IE1VTCh0NTYgLSB0NTcsIGNvc3RhYjIwKTsqLworCWJ1dHRlcmZseTQJcjUvKnQ3NiovLCByMS8qdDk3Ki8sIHI3Lyp0ODYqLywgcjMvKnQxMDkqLyxyNC8qdDcyKi8sIHIwLyp0OTIqLywgcjYvKnQ4MSovLCByMi8qdDEwMyovLCBjb3N0YWIyMCwgcjEwLCByMTEsIGxyCisKKy8qCVN0b3JlIGF3YXkgdGhlIGNvbXB1dGVkIGJ1dHRlcmZsaWVzOgorCXNwWzI0LTMxXSA9IHQ4NiwgdDgxLCB0NzYsIHQ3MiwgdDEwOSwgdDEwMywgdDk3LCB0OTIgKi8KKwlzdWIJcjEwLCBzcCwgLTI0KjQKKwlzdG0JcjEwLCByMC1yNworCisvKiAgICAgIFdlIG5vdyBoYXZlIHRoZSBmb2xsb3dpbmcgb24gdGhlIHN0YWNrOgorCisJc3BbMC03XSA9IHQ4MywgdDc4LCB0NzMsIHQ2OSwgdDEwNiwgdDEwMCwgdDk0LCB0ODkKKwlzcFs4LTE1XSA9IHQ4NCwgdDc5LCB0NzQsIHQ3MCwgdDEwNywgdDEwMSwgdDk1LCB0OTAKKwlzcFsxNi0yM10gPSB0ODUsIHQ4MCwgdDc1LCB0NzEsIHQxMDgsIHQxMDIsIHQ5NiwgdDkxCisJc3BbMjQtMzFdID0gdDg2LCB0ODEsIHQ3NiwgdDcyLCB0MTA5LCB0MTAzLCB0OTcsIHQ5MiAJKi8KKworLyoJTG9hZCAJe3IwLi4ucjd9ID0geyB0NzIsIHQ3NiwgdDcxLCB0NzUsIHQ3MCwgdDc0LCB0NjksIHQ3MyB9ICovCisJbGQuZAlyNiwgc3BbMio0XQorCWxkLmQJcjQsIHNwWzEwKjRdCisJbGQuZAlyMiwgc3BbMTgqNF0KKwlsZC5kCXIwLCBzcFsyNio0XQorCisKKy8qCXQxMTMgPSB0NjkgICsgdDcwOworCXQxNDEgPSBNVUwodDY5IC0gdDcwLCBjb3N0YWI4KTsKKworCXQxMTUgPSB0NzMgICsgdDc0OworCXQxNDQgPSBNVUwodDczIC0gdDc0LCBjb3N0YWI4KTsgKi8KKwlidXR0ZXJmbHkyCXI2Lyp0MTEzKi8sIHI0Lyp0MTQxKi8sIHI3Lyp0MTE1Ki8sIHI1Lyp0MTQ0Ki8sIGNvc3RhYjgsIHIxMCwgcjExLCBscgorCisvKgl0MTE0ID0gdDcxICArIHQ3MjsKKwl0MTQyID0gTVVMKHQ3MSAtIHQ3MiwgY29zdGFiMjQpOworCisJdDExNiA9IHQ3NSAgKyB0NzY7CisJdDE0NSA9IE1VTCh0NzUgLSB0NzYsIGNvc3RhYjI0KTsgKi8KKwlidXR0ZXJmbHkyCXIyLyp0MTE0Ki8sIHIwLyp0MTQyKi8sIHIzLyp0MTE2Ki8sIHIxLyp0MTQ1Ki8sIGNvc3RhYjI0LCByMTAsIHIxMSwgbHIKKworCisvKgorCXQxOTEgPSB0MTEzICsgdDExNDsKKwl0MTkyID0gTVVMKHQxMTMgLSB0MTE0LCBjb3N0YWIxNikKKworCXQzMiAgPSB0MTE1ICsgdDExNjsKKwl0MTc3ID0gTVVMKHQxMTUgLSB0MTE2LCBjb3N0YWIxNikgOworCisJdDE0MyA9IHQxNDEgKyB0MTQyOworCXQxOTAgPSBNVUwodDE0MSAtIHQxNDIsIGNvc3RhYjE2KSA7CisKKwl0MTQ2ID0gdDE0NCArIHQxNDU7CisJdDE4NCA9IE1VTCh0MTQ0IC0gdDE0NSwgY29zdGFiMTYpIDsgKi8KKwlidXR0ZXJmbHk0CXI2Lyp0MTkxKi8sIHIyLyp0MTkyKi8sIHI3Lyp0MzIqLywgcjMvKnQxNzcqLywgcjQvKnQxNDMqLywgcjAvKjE5MCovLCByNS8qdDE0NiovLCByMS8qdDE4NCovLCBjb3N0YWIxNiwgcjEwLCByMTEsIGxyCisKKy8qCVN0b3JlIGF3YXkgdGhlIGNvbXB1dGVkIGJ1dHRlcmZsaWVzOgorCXNwWzItM10gPSB0MzIsIHQxOTEKKwlzcFsxMC0xMV0gPSB0MTQ2LCB0MTQzCisJc3BbMTgtMTldID0gdDE3NywgdDE5MgorCXNwWzI2LTI3XSA9IHQxODQsIHQxOTAgKi8KKwlzdC5kCXNwWzIqNF0gLCByNgorCXN0LmQJc3BbMTAqNF0sIHI0CisJc3QuZAlzcFsxOCo0XSwgcjIKKwlzdC5kCXNwWzI2KjRdLCByMAorCisvKglMb2FkIAl7cjAuLi5yN30gPSB7IHQ4MSwgdDg2LCB0ODAsIHQ4NSwgdDc5LCB0ODQsIHQ3OCwgdDgzIH0gKi8KKwlsZC5kCXI2LCBzcFswKjRdCisJbGQuZAlyNCwgc3BbOCo0XQorCWxkLmQJcjIsIHNwWzE2KjRdCisJbGQuZAlyMCwgc3BbMjQqNF0KKworCisvKgl0MTE4ID0gdDc4ICArIHQ3OTsKKwl0MTQ4ID0gTVVMKHQ3OCAtIHQ3OSwgY29zdGFiOCk7CisKKwl0MTIxID0gdDgzICArIHQ4NDsKKwl0MTUyID0gTVVMKHQ4MyAtIHQ4NCwgY29zdGFiOCk7ICovCisJYnV0dGVyZmx5MglyNi8qdDExOCovLCByNC8qdDE0OCovLCByNy8qdDEyMSovLCByNS8qdDE1MiovLCBjb3N0YWI4LCByMTAsIHIxMSwgbHIKKworLyoJdDExOSA9IHQ4MCAgKyB0ODE7CisJdDE0OSA9IE1VTCh0ODAgLSB0ODEsIGNvc3RhYjI0KTsKKworCXQxMjIgPSB0ODUgICsgdDg2OworCXQxNTMgPSBNVUwodDg1IC0gdDg2LCBjb3N0YWIyNCk7ICovCisJYnV0dGVyZmx5MglyMi8qdDExOSovLCByMC8qdDE0OSovLCByMy8qdDEyMiovLCByMS8qdDE1MyovLCBjb3N0YWIyNCwgcjEwLCByMTEsIGxyCisKKworCisvKgl0NTggID0gdDExOCArIHQxMTk7CisJdDE3OCA9IE1VTCh0MTE4IC0gdDExOSwgY29zdGFiMTYpIDsKKworCXQ2NyAgPSB0MTIxICsgdDEyMjsKKwl0MTc5ID0gTVVMKHQxMjEgLSB0MTIyLCBjb3N0YWIxNikgOworCisJdDE1MCA9IHQxNDggKyB0MTQ5OworCXQxODUgPSBNVUwodDE0OCAtIHQxNDksIGNvc3RhYjE2KSA7CisKKwl0MTU0ID0gdDE1MiArIHQxNTM7CisJdDE4NiA9IE1VTCh0MTUyIC0gdDE1MywgY29zdGFiMTYpIDsgKi8KKwlidXR0ZXJmbHk0CXI2Lyp0NTgqLywgcjIvKnQxNzgqLywgcjcvKnQ2NyovLCByMy8qdDE3OSovLCByNC8qdDE1MCovLCByMC8qMTg1Ki8sIHI1Lyp0MTU0Ki8sIHIxLyp0MTg2Ki8sIGNvc3RhYjE2LCByMTAsIHIxMSwgbHIKKworLyoJU3RvcmUgYXdheSB0aGUgY29tcHV0ZWQgYnV0dGVyZmxpZXM6CisJc3BbMC0xXSA9IHQ2NywgdDU4CisJc3BbOC05XSA9IHQxNTQsIHQxNTAKKwlzcFsxNi0xN10gPSB0MTc5LCB0MTc4CisJc3BbMjQtMjVdID0gdDE4NiwgdDE4NSAqLworCXN0LmQJc3BbMCo0XSAsIHI2CisJc3QuZAlzcFs4KjRdLCByNAorCXN0LmQJc3BbMTYqNF0sIHIyCisJc3QuZAlzcFsyNCo0XSwgcjAKKworLyoJTG9hZCAJe3IwLi4ucjd9ID0geyB0OTIsIHQ5NywgdDkxLCB0OTYsIHQ5MCwgdDk1LCB0ODksIHQ5NCB9ICovCisJbGQuZAlyNiwgc3BbNio0XQorCWxkLmQJcjQsIHNwWzE0KjRdCisJbGQuZAlyMiwgc3BbMjIqNF0KKwlsZC5kCXIwLCBzcFszMCo0XQorCisKKy8qCXQxMjUgPSB0ODkgICsgdDkwOworCXQxNTcgPSBNVUwodDg5IC0gdDkwLCBjb3N0YWI4KTsKKworCXQxMjggPSB0OTQgICsgdDk1OworCXQxNjEgPSBNVUwodDk0IC0gdDk1LCBjb3N0YWI4KTsgKi8KKwlidXR0ZXJmbHkyCXI2Lyp0MTI1Ki8sIHI0Lyp0MTU3Ki8sIHI3Lyp0MTI4Ki8sIHI1Lyp0MTYxKi8sIGNvc3RhYjgsIHIxMCwgcjExLCBscgorCisvKgl0MTI2ID0gdDkxICArIHQ5MjsKKwl0MTU4ID0gTVVMKHQ5MSAtIHQ5MiwgY29zdGFiMjQpOworCisJdDEyOSA9IHQ5NiAgKyB0OTc7CisJdDE2MiA9IE1VTCh0OTYgLSB0OTcsIGNvc3RhYjI0KTsgKi8KKwlidXR0ZXJmbHkyCXIyLyp0MTI2Ki8sIHIwLyp0MTU4Ki8sIHIzLyp0MTI5Ki8sIHIxLyp0MTYyKi8sIGNvc3RhYjI0LCByMTAsIHIxMSwgbHIKKworCisvKgorCXQ5MyAgPSB0MTI1ICsgdDEyNjsKKwl0MTgwID0gTVVMKHQxMjUgLSB0MTI2LCBjb3N0YWIxNikgOworCisJdDk4ICA9IHQxMjggKyB0MTI5OworCXQxODEgPSBNVUwodDEyOCAtIHQxMjksIGNvc3RhYjE2KSA7CisKKwl0MTU5ID0gdDE1NyArIHQxNTg7CisJdDE4NyA9IE1VTCh0MTU3IC0gdDE1OCwgY29zdGFiMTYpIDsKKworCXQxNjMgPSB0MTYxICsgdDE2MjsKKwl0MTg4ID0gTVVMKHQxNjEgLSB0MTYyLCBjb3N0YWIxNikgOyAqLworCWJ1dHRlcmZseTQJcjYvKnQ5MyovLCByMi8qdDE4MCovLCByNy8qdDk4Ki8sIHIzLyp0MTgxKi8sIHI0Lyp0MTU5Ki8sIHIwLyoxODcqLywgcjUvKnQxNjMqLywgcjEvKnQxODgqLywgY29zdGFiMTYsIHIxMCwgcjExLCBscgorCisKKy8qCVN0b3JlIGF3YXkgdGhlIGNvbXB1dGVkIGJ1dHRlcmZsaWVzOgorCXNwWzYtN10gPSB0OTgsIHQ5MworCXNwWzE0LTE1XSA9IHQxNjMsIHQxNTkKKwlzcFsyMi0yM10gPSB0MTgxLCB0MTgwCisJc3BbMzAtMzFdID0gdDE4OCwgdDE4NyAqLworCXN0LmQJc3BbNio0XSAsIHI2CisJc3QuZAlzcFsxNCo0XSwgcjQKKwlzdC5kCXNwWzIyKjRdLCByMgorCXN0LmQJc3BbMzAqNF0sIHIwCisKKy8qCUxvYWQgCXtyMC4uLnI3fSA9IHsgdDEwMywgdDEwOSwgdDEwMiwgdDEwOCwgdDEwMSwgdDEwNywgdDEwMCwgdDEwNiB9ICovCisJbGQuZAlyNiwgc3BbNCo0XQorCWxkLmQJcjQsIHNwWzEyKjRdCisJbGQuZAlyMiwgc3BbMjAqNF0KKwlsZC5kCXIwLCBzcFsyOCo0XQorCisKKworLyoJdDEzMiA9IHQxMDAgKyB0MTAxOworCXQxNjYgPSBNVUwodDEwMCAtIHQxMDEsIGNvc3RhYjgpOworCisJdDEzNiA9IHQxMDYgKyB0MTA3OworCXQxNzEgPSBNVUwodDEwNiAtIHQxMDcsIGNvc3RhYjgpOyAqLworCWJ1dHRlcmZseTIJcjYvKnQxMzIqLywgcjQvKnQxNjYqLywgcjcvKnQxMzYqLywgcjUvKnQxNzEqLywgY29zdGFiOCwgcjEwLCByMTEsIGxyCisKKy8qCXQxMzMgPSB0MTAyICsgdDEwMzsKKwl0MTY3ID0gTVVMKHQxMDIgLSB0MTAzLCBjb3N0YWIyNCk7CisKKwl0MTM3ID0gdDEwOCArIHQxMDk7CisJdDE3MiA9IE1VTCh0MTA4IC0gdDEwOSwgY29zdGFiMjQpOyovCisJYnV0dGVyZmx5MglyMi8qdDEzMyovLCByMC8qdDE2NyovLCByMy8qdDEzNyovLCByMS8qdDE3MiovLCBjb3N0YWIyNCwgcjEwLCByMTEsIGxyCisKKworLyoJdDEwNCA9IHQxMzIgKyB0MTMzOworCXQxODIgPSBNVUwodDEzMiAtIHQxMzMsIGNvc3RhYjE2KSA7CisKKwl0MTEwID0gdDEzNiArIHQxMzc7CisJdDE4MyA9IE1VTCh0MTM2IC0gdDEzNywgY29zdGFiMTYpIDsKKworCXQxNjggPSB0MTY2ICsgdDE2NzsKKwl0MTg5ID0gTVVMKHQxNjYgLSB0MTY3LCBjb3N0YWIxNikgOworCisJdDE3MyA9IHQxNzEgKyB0MTcyOworCXQyMDggPSBNVUwodDE3MSAtIHQxNzIsIGNvc3RhYjE2KSA7ICovCisJYnV0dGVyZmx5NAlyNi8qdDEwNCovLCByMi8qdDE4MiovLCByNy8qdDExMCovLCByMy8qdDE4MyovLCByNC8qdDE2OCovLCByMC8qMTg5Ki8sIHI1Lyp0MTczKi8sIHIxLyp0MjA4Ki8sIGNvc3RhYjE2LCByMTAsIHIxMSwgbHIKKworLyoJU3RvcmUgYXdheSB0aGUgY29tcHV0ZWQgYnV0dGVyZmxpZXM6CisJc3BbNC01XSA9IHQxMTAsIHQxMDQKKwlzcFsxMi0xM10gPSB0MTczLCB0MTY4CisJc3BbMjAtMjFdID0gdDE4MywgdDE4MgorCXNwWzI4LTI5XSA9IHQyMDgsIHQxODkgKi8KKwlzdC5kCXNwWzQqNF0gLCByNgorCXN0LmQJc3BbMTIqNF0sIHI0CisJc3QuZAlzcFsyMCo0XSwgcjIKKwlzdC5kCXNwWzI4KjRdLCByMAorCisvKglOb3cgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YWNrCisKKwlzcFswLTddICAgPSB0NjcsICB0NTggLCB0MzIsICB0MTkxLCB0MTEwLCB0MTA0LCB0OTgsICB0OTMKKwlzcFs4LTE1XSAgPSB0MTU0LCB0MTUwLAl0MTQ2LCB0MTQzLCB0MTczLCB0MTY4LAl0MTYzLCB0MTU5CisJc3BbMTYtMjNdID0gdDE3OSwgdDE3OCwJdDE3NywgdDE5MiwgdDE4MywgdDE4MiwJdDE4MSwgdDE4MAorCXNwWzI0LTMxXSA9IHQxODYsIHQxODUsIHQxODQsIHQxOTAsIHQyMDgsIHQxODksCXQxODgsIHQxODcKKyovCisKKwkvKiBHZXQgc2xvdCwgbG8gYW5kIGhpIGZyb20gc3RhY2sgKi8KKwlsZGRzcAlsciwgc3BbMzIqNCArIDRdIC8qc2xvdCovCisJbGRkc3AJcjEyLCBzcFszMio0ICsgOF0gLypsbyovCisJbGRkc3AJcjExLCBzcFszMio0ICsgMTJdIC8qaGkqLworCisJYWRkCXIxMiwgcjEyLCBsciA8PCAyCisJYWRkCXIxMSwgcjExLCBsciA8PCAyCisKKworLyoJdDQ5ICA9IC0odDY3ICogMikgKyB0MzI7CisJIGhpWzE0XVtzbG90XSA9IFNISUZUKHQzMik7CisJdDg3ICA9IC0odDExMCAqIDIpICsgdDY3OworCXQxMzggPSAtKHQxNzMgKiAyKSArIHQxMTA7CisJdDIwMyA9IC0odDIwOCAqIDIpICsgdDE3MzsgKi8KKworCWxkZHNwCXIwLyp0NjcqLywgc3BbMF0KKwlsZGRzcAlyMS8qdDMyKi8sIHNwWzIqNF0KKwlsZGRzcAlyMi8qdDExMCovLCBzcFs0KjRdCisJbGRkc3AJcjMvKnQxNzMqLywgc3BbMTIqNF0KKwlsZGRzcAlyNS8qdDIwOCovLCBzcFsyOCo0XQorCisJc3ViCXI0Lyp0NDkqLywgcjEsIHIwIDw8IDEKKwlzY2FsZQlyMQorCXN1YglyMC8qdDg3Ki8sIHIwLCByMiA8PCAxCisJc3QudwlyMTFbMTQqU0xPVFMqNF0sIHIxCisJc3ViCXIyLyp0MTM4Ki8sIHIyLCByMyA8PCAxCisJc3ViCXIxLyp0MjAzKi8sIHIzLCByNSA8PCAxCisKKy8qICAgICAgTGl2ZToJcjAgPSB0ODcsIHIxPSB0MjAzLCByMj0gdDEzOCwgcjQgPSB0NDkKKwlGcmVlOglyMywgcjUsIHI2LCByNywgcjgsIHI5LCByMTAsIGxyICAqLworCisvKgl0NjggID0gKHQ5OCAqIDIpICsgdDQ5OworCWhpWzEyXVtzbG90XSA9IFNISUZUKC10NDkpOworCXQxMzAgPSAtKHQxNjMgKiAyKSArIHQ5ODsKKwl0MjAxID0gLSh0MTg4ICogMikgKyB0MTYzOworCXQyMDAgPSAtKHQxODYgKiAyKSArIHQxNTQ7CisJdDExMSA9ICh0MTU0ICogMikgKyB0ODc7CisJdDc3ICA9IC0oLSh0ODcgKiAyKSAtIHQ2OCk7CisJdDg4ICA9ICh0MTQ2ICogMikgKyB0Nzc7CisJdDE5OSA9IC0odDE4NCAqIDIpICsgdDE0NjsKKwloaVsgOF1bc2xvdF0gPSBTSElGVCgtdDc3KTsKKwloaVsxMF1bc2xvdF0gPSBTSElGVCh0NjgpOyovCisJbGRkc3AJcjMvKnQ5OCovLCBzcFs2KjRdCisJbGRkc3AJcjUvKnQxNjMqLywgc3BbMTQqNF0KKwlsZGRzcAlyNi8qdDE4OCovLCBzcFszMCo0XQorCWxkZHNwCXIxMC8qdDE4NiovLCBzcFsyNCo0XQorCisJYWRkCXI3Lyp0NjgqLywgcjQsIHIzIDw8IDEKKwluZWcJcjQKKwlzY2FsZQlyNAorCWxkZHNwCXI5Lyp0MTU0Ki8sIHNwWzgqNF0KKwlzdWIJcjMvKnQxMzAqLywgcjMsIHI1IDw8IDEKKwlzdC53CXIxMVsxMipTTE9UUyo0XSwgcjQKKwlzdWIJcjgvKnQyMDEqLywgcjUsIHI2IDw8IDEKKwlzdWIJcjQvKnQyMDAqLywgcjksIHIxMCA8PCAxCisJbGRkc3AJbHIvKnQxNDYqLywgc3BbMTAqNF0KKwlsZGRzcAlyNi8qdDE4NCovLCBzcFsyNio0XQorCWFkZAlyMTAvKnQxMTEqLywgcjAsIHI5IDw8IDEKKwlhZGQJcjUvKnQ3NyovLHI3LCByMCA8PCAxCisJYWRkCXIwLyp0ODgqLywgcjUsIGxyIDw8IDEKKwlzdWIJcjYvKnQxOTkqLywgbHIsIHI2IDw8IDEKKwluZWcJcjUKKwlzY2FsZQlyNQorCXNjYWxlCXI3CisJc3QudwlyMTFbOCpTTE9UUyo0XSwgcjUKKwlzdC53CXIxMVsxMCpTTE9UUyo0XSwgcjcKKworLyogICAgICBMaXZlOglyMCA9IHQ4OCwgcjE9IHQyMDMsIHIyPSB0MTM4LCByMyA9IHQxMzAsIHI0ID0gdDIwMCwKKwkJcjYgPSAxOTksIHI4ID0gdDIwMSwgcjEwID0gdDExMQorCUZyZWU6CXI1LCByNywgcjksIGxyICAgICovCisKKworLyoKKwl0MTIzID0gLSgtKHQxMzggKiAyKSAtIHQxMTEpOworCXQxNzQgPSAodDE4MyAqIDIpICsgdDEzODsKKwl0OTkgID0gLSh0MTExICogMikgKyB0ODg7CisJaGlbIDZdW3Nsb3RdID0gU0hJRlQodDg4KTsgKi8KKwlsZGRzcAlyNS8qdDE4MyovLCBzcFsyMCo0XQorCisJYWRkCXI3Lyp0MTIzKi8sIHIxMCwgcjIgPDwgMQorCXN1YglyMTAvKnQ5OSovLCByMCwgcjEwIDw8IDEKKwlzY2FsZQlyMAorCWFkZAlyMi8qdDE3NCovLCByMiwgcjUgPDwgMQorCXN0LncJcjExWzYqU0xPVFMqNF0sIHIwCisKKy8qICAgICAgTGl2ZToJcjEgPSB0MjAzLCByMiA9IHQxNzQsIHIzID0gdDEzMCwgcjQgPSB0MjAwLAorCQlyNiA9IHQxOTksIHI3ID0gdDEyMywgcjggPSB0MjAxLCByMTAgPSB0OTkKKwlGcmVlOglyMCwgcjUsIHI5LCBsciAgICAqLworCisvKgl0MTEyID0gLSh0MTMwICogMikgKyB0OTk7CisJdDE2NCA9ICh0MTgxICogMikgKyB0MTMwOworCWhpWyA0XVtzbG90XSA9IFNISUZUKC10OTkpOyAqLworCWxkZHNwCXIwLyp0MTgxKi8sIHNwWzIyKjRdCisKKwlzdWIJcjUvKnQxMTIqLywgcjEwLCByMyA8PCAxCisJbmVnCXIxMAorCXNjYWxlCXIxMAorCWFkZAlyMy8qMTY0Ki8sIHIzLCByMCA8PCAxCisJc3QudwlyMTFbNCpTTE9UUyo0XSwgcjEwCisKKy8qICAgICAgTGl2ZToJcjEgPSB0MjAzLCByMiA9IHQxNzQsIHIzID0gdDE2NCwgcjQgPSB0MjAwLAorCQlyNSA9IHQxMTIsIHI2ID0gdDE5OSwgcjcgPSB0MTIzLCByOCA9IHQyMDEKKwlGcmVlOglyMCwgcjksIHIxMCwgbHIgICAgKi8KKworCisvKgl0MTE3ID0gLSgtKHQxMjMgKiAyKSAtIHQxMTIpOworCXQxMzkgPSAodDE3OSAqIDIpICsgdDEyMzsKKwloaVsgMl1bc2xvdF0gPSBTSElGVCh0MTEyKTsgKi8KKwlsZGRzcAlyMC8qdDE3OSovLCBzcFsxNio0XQorCisJYWRkCXI5Lyp0MTE3Ki8sIHI1LCByNyA8PCAxCisJc2NhbGUJcjUKKwlhZGQJcjcvKnQxMzkqLywgcjcsIHIwIDw8IDEKKwlzdC53CXIxMVsyKlNMT1RTKjRdLCByNQorCisvKiAgICAgIExpdmU6CXIxID0gdDIwMywgcjIgPSB0MTc0LCByMyA9IHQxNjQsIHI0ID0gdDIwMCwKKwkJcjYgPSB0MTk5LCByNyA9IHQxMzksIHI4ID0gdDIwMSwgcjkgPSB0MTE3CisJRnJlZToJcjAsIHI1LCByMTAsIGxyICAgICovCisKKy8qCXQxNTUgPSAtKHQxNzQgKiAyKSArIHQxMzk7CisJdDIwNCA9IC0oLSh0MjAzICogMikgLSB0MTc0KTsKKwl0MTI0ID0gKHQxNzcgKiAyKSArIHQxMTc7CisJaGlbIDBdW3Nsb3RdID0gU0hJRlQoLXQxMTcpOworCXQxMzEgPSAtKHQxMzkgKiAyKSArIHQxMjQ7CisJbG9bIDFdW3Nsb3RdID0gU0hJRlQodDEyNCk7Ki8KKwlsZGRzcAlyMC8qdDE3NyovLCBzcFsxOCo0XQorCisJc3ViCXI1Lyp0MTU1Ki8sIHI3LCByMiA8PCAxCisJYWRkCXIyLyp0MjA0Ki8sIHIyLCByMSA8PCAxCisJYWRkCXIwLyp0MTI0Ki8sIHI5LCByMCA8PCAxCisJbmVnCXI5CisJc2NhbGUJcjkKKwlzdWIJcjcvKnQxMzEqLywgcjAsIHI3IDw8IDEKKwlzY2FsZQlyMAorCXN0LncJcjExWzAqU0xPVFMqNF0sIHI5CisJc3QudwlyMTJbMSpTTE9UUyo0XSwgcjAKKworLyogICAgICBMaXZlOglyMiA9IHQyMDQsIHIzID0gdDE2NCwgcjQgPSB0MjAwLAorCQlyNSA9IHQxNTUsIHI2ID0gdDE5OSwgcjcgPSB0MTMxLCByOCA9IHQyMDEKKwlGcmVlOglyMCwgcjEsIHI5LCByMTAsIGxyICAgICovCisKKy8qCXQxNDAgPSAodDE2NCAqIDIpICsgdDEzMTsKKwlsb1sgM11bc2xvdF0gPSBTSElGVCgtdDEzMSk7CisJdDIwMiA9IC0oLSh0MjAxICogMikgLSB0MTY0KTsgICovCisJYWRkCXIwLyp0MTQwKi8sIHI3LCByMyA8PCAxCisJbmVnCXI3CisJc2NhbGUJcjcKKwlhZGQJcjMvKnQyMDIqLywgcjMsIHI4IDw8IDEKKwlzdC53CXIxMlszKlNMT1RTKjRdLCByNworCisvKiAgICAgIExpdmU6CXIwID0gdDE0MCwgcjIgPSB0MjA0LCByMyA9IHQyMDIsIHI0ID0gdDIwMCwKKwkJcjUgPSB0MTU1LCByNiA9IHQxOTkKKwlGcmVlOglyMSwgcjcsIHI4LCByOSwgcjEwLCBsciAgICAqLworCisKKy8qCXQxNDcgPSAtKC0odDE1NSAqIDIpIC0gdDE0MCk7CisJbG9bIDVdW3Nsb3RdID0gU0hJRlQodDE0MCk7CisJdDE3NSA9IC0odDIwMCAqIDIpICsgdDE1NTsKKwl0MTU2ID0gLSh0MTk5ICogMikgKyB0MTQ3OworCWxvWyA3XVtzbG90XSA9IFNISUZUKC10MTQ3KTsgKi8KKwlhZGQJcjEvKnQxNDcqLywgcjAsIHI1IDw8IDEKKwlzY2FsZQlyMAorCXN1YglyNS8qdDE3NSovLCByNSwgcjQgPDwgMQorCXN1YglyNC8qMTU2Ki8sIHIxLCByNiA8PCAxCisJbmVnCXIxCisJc2NhbGUJcjEKKwlzdC53CXIxMls1KlNMT1RTKjRdLCByMAorCXN0LncJcjEyWzcqU0xPVFMqNF0sIHIxCisKKy8qICAgICAgTGl2ZToJcjIgPSB0MjA0LCByMyA9IHQyMDIsCisJCXI0ID0gdDE1NiwgcjUgPSB0MTc1CisJRnJlZToJcjAsIHIxLCByNiwgcjcsIHI4LCByOSwgcjEwLCBsciAgICAqLworCisKKy8qCXQyMDUgPSAtKC0odDIwNCAqIDIpIC0gdDE3NSk7CisJdDE2NSA9IC0odDE3NSAqIDIpICsgdDE1NjsKKwlsb1sgOV1bc2xvdF0gPSBTSElGVCh0MTU2KTsKKwl0MTc2ID0gLSh0MjAyICogMikgKyB0MTY1OworCWxvWzExXVtzbG90XSA9IFNISUZUKC10MTY1KTsKKwl0MjA2ID0gLSgtKHQyMDUgKiAyKSAtIHQxNzYpOworCWxvWzE1XVtzbG90XSA9IFNISUZUKC10MjA2KQorCWxvWzEzXVtzbG90XSA9IFNISUZUKHQxNzYpICovCisJYWRkCXIwLyp0MjA1Ki8sIHI1LCByMiA8PCAxCisJc3ViCXIxLyp0MTY1Ki8sIHI0LCByNSA8PCAxCisJc2NhbGUJcjQKKwlzdWIJcjMvKnQxNzYqLywgcjEsIHIzIDw8IDEKKwlzdC53CXIxMls5KlNMT1RTKjRdLCByNAorCW5lZwlyMQorCXNjYWxlCXIxCisJYWRkCXI2Lyp0MjA2Ki8sIHIzLCByMCA8PCAxCisJbmVnCXI2CisJc2NhbGUJcjYKKwlzY2FsZQlyMworCXN0LncJcjEyWzExKlNMT1RTKjRdLCByMQorCXN0LncJcjEyWzE1KlNMT1RTKjRdLCByNgorCXN0LncJcjEyWzEzKlNMT1RTKjRdLCByMworCisvKgl0MTkzID0gLSgodDE5MCAqIDIpIC0gdDE0MykKKwloaVsgN11bc2xvdF0gPSBTSElGVCh0MTQzKTsKKwlsb1sgOF1bc2xvdF0gPSBTSElGVCgtdDE5Myk7CisJdDgyICA9IC0odDEwNCAqIDIpICsgdDU4OworCWhpWzEzXVtzbG90XSA9IFNISUZUKHQ1OCk7CisJdDEzNCA9IC0odDE2OCAqIDIpICsgdDEwNDsKKwl0MTk2ID0gLSh0MTg5ICogMikgKyB0MTY4OyAqLworCisJbGRkc3AJcjAvKnQxOTAqLywgc3BbMjcqNF0KKwlsZGRzcAlyMS8qdDE0MyovLCBzcFsxMSo0XQorCWxkZHNwCXIyLyp0MTA0Ki8sIHNwWzUqNF0KKwlsZGRzcAlyMy8qdDU4Ki8sIHNwWzEqNF0KKwlsZGRzcAlyNC8qdDE2OCovLCBzcFsxMyo0XQorCWxkZHNwCXI1Lyp0MTg5Ki8sIHNwWzI5KjRdCisJc3ViCXIwLyp0MTkzKi8sIHIxLCByMCA8PCAxCisJbmVnCXIwCisJc2NhbGUJcjEKKwlzY2FsZQlyMAorCXN0LncJcjExWzcqU0xPVFMqNF0sIHIxCisJc3QudwlyMTJbOCpTTE9UUyo0XSwgcjAKKwlzdWIJcjAvKnQ4MiovLCByMywgcjIgPDwgMQorCXNjYWxlCXIzCisJc3ViCXIyLyp0MTM0Ki8sIHIyLCByNCA8PCAxCisJc3ViCXI0Lyp0MTk2Ki8sIHI0LCByNSA8PCAxCisJc3QudwlyMTFbMTMqU0xPVFMqNF0sIHIzCisKKy8qICAgICAgTGl2ZToJcjAgPSB0ODIsIHIyID0gdDEzNCwKKwkJcjQgPSB0MTk2CisJRnJlZToJcjEsIHIzLCByNSwgcjYsIHI3LCByOCwgcjksIHIxMCwgbHIgICAgKi8KKworCisKKy8qCisKKwl0MjA3ID0gLSh0MTg1ICogMikgKyB0MTUwOworCXQxMDUgPSAodDE1MCAqIDIpICsgdDgyOworCWhpWyA5XVtzbG90XSA9IFNISUZUKC10ODIpOworCXQxMjAgPSAtKC0odDEzNCAqIDIpIC0gdDEwNSk7CisJaGlbIDVdW3Nsb3RdID0gU0hJRlQodDEwNSk7CisJdDE2OSA9ICh0MTgyICogMikgKyB0MTM0OworCisJdDEzNSA9ICh0MTc4ICogMikgKyB0MTIwOworCWhpWyAxXVtzbG90XSA9IFNISUZUKC10MTIwKTsKKwl0MTk3ID0gLSgtKHQxOTYgKiAyKSAtIHQxNjkpOworCXQxNTEgPSAtKHQxNjkgKiAyKSArIHQxMzU7CisJbG9bIDJdW3Nsb3RdID0gU0hJRlQodDEzNSk7ICovCisJbGRkc3AJcjEvKnQxODUqLywgc3BbMjUqNF0KKwlsZGRzcAlyMy8qdDE1MCovLCBzcFs5KjRdCisJbGRkc3AJcjUvKnQxODIqLywgc3BbMjEqNF0KKwlsZGRzcAlyOC8qdDE3OCovLCBzcFsxNyo0XQorCisJc3ViCXI2Lyp0MjA3Ki8sIHIzLCByMSA8PCAxCisJYWRkCXIzLyp0MTA1Ki8sIHIwLCByMyA8PCAxCisJbmVnCXIwCisJc2NhbGUJcjAKKwlhZGQJcjcvKnQxMjAqLywgcjMsIHIyIDw8IDEKKwlzY2FsZQlyMworCXN0LncJcjExWzkqU0xPVFMqNF0sIHIwCisJc3QudwlyMTFbNSpTTE9UUyo0XSwgcjMKKwlhZGQJcjIvKnQxNjkqLywgcjIsIHI1IDw8IDEKKwlhZGQJcjgvKnQxMzUqLywgcjcsIHI4IDw8IDEKKwluZWcJcjcKKwlzY2FsZQlyNworCWFkZAlyNC8qdDE5NyovLCByMiwgcjQgPDwgMQorCXN1YglyMi8qdDE1MSovLCByOCwgcjIgPDwgMQorCXNjYWxlCXI4CisJc3QudwlyMTFbMSpTTE9UUyo0XSwgcjcKKwlzdC53CXIxMlsyKlNMT1RTKjRdLCByOAorCisvKiAgICAgIExpdmU6CXIyID0gdDE1MSwgcjQgPSB0MTk3LCByNiA9IHQyMDcKKworCUZyZWU6CXIwLCByMSwgcjMsIHI1LCByNywgcjgsIHI5LCByMTAsIGxyICAgICovCisKKworCisvKgl0MTcwID0gLSh0MjA3ICogMikgKyB0MTUxOworCWxvWyA2XVtzbG90XSA9IFNISUZUKC10MTUxKTsKKworCXQxOTggPSAtKC0odDE5NyAqIDIpIC0gdDE3MCk7CisJbG9bMTBdW3Nsb3RdID0gU0hJRlQodDE3MCk7CisJbG9bMTRdW3Nsb3RdID0gU0hJRlQoLXQxOTgpOworCisJdDEyNyA9IC0odDE1OSAqIDIpICsgdDkzOworCWhpWzExXVtzbG90XSA9IFNISUZUKHQ5Myk7CisJdDE5NCA9IC0odDE4NyAqIDIpICsgdDE1OTsgICAqLworCWxkZHNwCXIwLyp0MTU5Ki8sIHNwWzE1KjRdCisJbGRkc3AJcjEvKnQ5MyovLCBzcFs3KjRdCisJbGRkc3AJcjMvKnQxODcqLywgc3BbMzEqNF0KKwlzdWIJcjUvKnQxNzAqLywgcjIsIHI2IDw8IDEKKwluZWcJcjIKKwlzY2FsZQlyMgorCWFkZAlyNC8qdDE5OCovLHI1LCByNCA8PCAxCisJbmVnCXI0CisJc2NhbGUJcjUKKwlzY2FsZQlyNAorCXN0LncJcjEyWzYqU0xPVFMqNF0sIHIyCisJc3QudwlyMTJbMTAqU0xPVFMqNF0sIHI1CisJc3QudwlyMTJbMTQqU0xPVFMqNF0sIHI0CisJc3ViCXI3Lyp0MTI3Ki8sIHIxLCByMCA8PCAxCisJc2NhbGUJcjEKKwlzdWIJcjAvKnQxOTQqLywgcjAsIHIzIDw8IDEKKwlzdC53CXIxMVsxMSpTTE9UUyo0XSwgcjEKKworCisvKiAgICAgIExpdmU6CXIwID0gdDE5NCwgcjcgPSB0MTI3CisJRnJlZToJcjEsIHIyLCByMywgcjQsIHI2LCByNSwgcjgsIHI5LCByMTAsIGxyICAgICovCisKKy8qCXQxNjAgPSAodDE4MCAqIDIpICsgdDEyNzsKKwloaVsgM11bc2xvdF0gPSBTSElGVCgtdDEyNyk7CisJdDE5NSA9IC0oLSh0MTk0ICogMikgLSB0MTYwKTsKKwlsb1sgNF1bc2xvdF0gPSBTSElGVCh0MTYwKTsKKwlsb1sxMl1bc2xvdF0gPSBTSElGVCgtdDE5NSk7CisKKwloaVsxNV1bc2xvdF0gPSBTSElGVCh0MTkxKTsKKwlsb1sgMF1bc2xvdF0gPSBTSElGVCh0MTkyKTsgKi8KKwlsZGRzcAlyMS8qdDE4MCovLCBzcFsyMyo0XQorCWxkZHNwCXIyLyp0MTkxKi8sIHNwWzMqNF0KKwlsZGRzcAlyMy8qdDE5MiovLCBzcFsxOSo0XQorCWFkZAlyNC8qdDE2MCovLCByNywgcjEgPDwgMQorCW5lZwlyNworCXNjYWxlCXI3CisJYWRkCXI2Lyp0MTk1Ki8sIHI0LCByMCA8PCAxCisJc2NhbGUJcjQKKwluZWcJcjYKKwlzY2FsZQlyNgorCXN0LncJcjExWzMqU0xPVFMqNF0sIHI3CisJc3QudwlyMTJbNCpTTE9UUyo0XSwgcjQKKwlzdC53CXIxMlsxMipTTE9UUyo0XSwgcjYKKwlzY2FsZQlyMgorCXNjYWxlCXIzCisJc3QudwlyMTFbMTUqU0xPVFMqNF0sIHIyCisJc3QudwlyMTJbMCpTTE9UUyo0XSwgcjMKKworCXN1YglzcCwgLTMyKjQKKwlsZG0Jc3ArKyxyMC1yNywgcjktcjExLCBwYwpkaWZmIC0tZ2l0IGEvZml4ZWQuaCBiL2ZpeGVkLmgKaW5kZXggNGI1OGFiZi4uMGExMzUwYSAxMDA2NDQKLS0tIGEvZml4ZWQuaAorKysgYi9maXhlZC5oCkBAIC0yMzcsNiArMjM3LDQ2IEBAIG1hZF9maXhlZF90IG1hZF9mX211bF9pbmxpbmUobWFkX2ZpeGVkX3QgeCwgbWFkX2ZpeGVkX3QgeSkKICMgICBkZWZpbmUgTUFEX0ZfU0NBTEVCSVRTICBNQURfRl9GUkFDQklUUwogIyAgZW5kaWYKIAorLyogLS0tIEFWUjMyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyMgZWxpZiBkZWZpbmVkKEZQTV9BVlIzMikKKwordHlwZWRlZiAgIHNpZ25lZCBzaG9ydCBtYWRfY29lZmZfdDsKKworc3RydWN0IERXc3RydWN0IHtpbnQgaGlnaCwgbG93O307CisKK3R5cGVkZWYgdW5pb24geworICBzdHJ1Y3QgRFdzdHJ1Y3QgczsKKyAgbG9uZyBsb25nIGxsOworfSBEV3VuaW9uOworCisjICBkZWZpbmUgTUFEX0ZfTUxYKGhpLCBsbywgeCwgeSkgIFwKKyAgeyByZWdpc3RlciBEV3VuaW9uIF9fcmVzOyBcCisgICAgX19yZXMubGwgPSAobG9uZyBsb25nKXggKiAobG9uZyBsb25nKXk7IFwKKyAgICAvKiAgICBhc20gKCJtdWxzLmRcdCUwLCAlMSwgJTIiIDogIj1yIiAoX19yZXMubGwpIDogInIiICh4KSwgInIiICh5KSk7Ki8gXAorICAgIGhpID0gX19yZXMucy5oaWdoOyBcCisgICAgbG8gPSBfX3Jlcy5zLmxvdzsgfQorCisjICBkZWZpbmUgTUFEX0ZfTUxBKGhpLCBsbywgeCwgeSkgIFwKKyAgeyByZWdpc3RlciBEV3VuaW9uIF9fcmVzOyBcCisgICAgX19yZXMucy5oaWdoID0gaGk7IFwKKyAgICBfX3Jlcy5zLmxvdyA9IGxvOyBcCisgICAgX19yZXMubGwgKz0gKGxvbmcgbG9uZyl4ICogKGxvbmcgbG9uZyl5OyBcCisvKiAgYXNtICgibWFjcy5kXHQlMCwgJTEsICUyIiA6ICIrciIgKF9fcmVzLmxsKSA6ICJyIiAoeCksICJyIiAoeSkpOyovIFwKKyAgICBoaSA9IF9fcmVzLnMuaGlnaDsgXAorICAgIGxvID0gX19yZXMucy5sb3c7IH0KKworCisjICBkZWZpbmUgTUFEX0ZfTUxOKGhpLCBsbykgIFwKKyAgICBhc20gKCJuZWcJJTBcbiIgIFwKKwkgImFjcgklMVxuIiAgXAorICAgICAgICAgIm5lZyAgICUxIiAgICBcCisJIDogIityIiAobG8pLCAiK3IiIChoaSkgXAorCSA6OiAiY2MiKQorCisKKyMgIGRlZmluZSBNQURfRl9TQ0FMRUJJVFMgIE1BRF9GX0ZSQUNCSVRTCisKIC8qIC0tLSBBUk0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogIyBlbGlmIGRlZmluZWQoRlBNX0FSTSkKQEAgLTQzMyw2ICs0NzMsOCBAQCBtYWRfZml4ZWRfdCBtYWRfZl9tdWxfaW5saW5lKG1hZF9maXhlZF90IHgsIG1hZF9maXhlZF90IHkpCiAgKgogICogUHJlLXJvdW5kaW5nIGlzIHJlcXVpcmVkIHRvIHN0YXkgd2l0aGluIHRoZSBsaW1pdHMgb2YgY29tcGxpYW5jZS4KICAqLwordHlwZWRlZiAgIHNpZ25lZCBpbnQgbWFkX2NvZWZmX3Q7CisKICMgIGlmIGRlZmluZWQoT1BUX1NQRUVEKQogIyAgIGRlZmluZSBtYWRfZl9tdWwoeCwgeSkJKCgoeCkgPj4gMTIpICogKCh5KSA+PiAxNikpCiAjICBlbHNlCmRpZmYgLS1naXQgYS9pbWRjdF9hdnIzMi5TIGIvaW1kY3RfYXZyMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGVlNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW1kY3RfYXZyMzIuUwpAQCAtMCwwICsxLDc4OSBAQAorLyoKKyAgIE9wdGltaXplZCAzNi1wb2ludCBJbnZlcnNlIE1vZGlmaWVkIENvc2luZSBUcmFuc2Zvcm0gKElNRENUKQorICAgQ29weXJpZ2h0IDIwMDMtMjAwNiBBdG1lbCBDb3Jwb3JhdGlvbi4KKworICAgV3JpdHRlbiBieSBSb25ueSBQZWRlcnNlbiwgQXRtZWwgTm9yd2F5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gKi8KKworI2RlZmluZSBNQURfRih4KSAoKHggKyAoMSA8PCAxMykpID4+IDE0KQorCisJLnB1YmxpYwlpbWRjdDM2X2F2cjMyCisKKy8qCisJdm9pZCBpbWRjdDM2KG1hZF9maXhlZF90IGNvbnN0IHhbMThdLCBtYWRfZml4ZWRfdCB5WzM2XSkKKwl7CisJbWFkX2ZpeGVkX3QgdG1wWzE4XTsKKwlpbnQgaTsKKyovCisvKiBEQ1QtSVYgKi8KK2ltZGN0MzZfYXZyMzI6CisJcHVzaG0JcjAtcjcscjExLGxyCisJc3ViCXNwLCA0KjE4CisvKgorCXsKKwltYWRfZml4ZWRfdCB0bXAyWzE4XTsKKwlpbnQgaTsKKworCS8qIHNjYWxlW2ldID0gMiAqIGNvcyhQSSAqICgyICogaSArIDEpIC8gKDQgKiAxOCkpICovCisvKgorCXN0YXRpYyBtYWRfZml4ZWRfdCBjb25zdCBzY2FsZVsxOF0gPSB7CisJTUFEX0YoMHgxZmY4MzNmYSksIE1BRF9GKDB4MWZiOWVhOTMpLCBNQURfRigweDFmM2RkMTIwKSwKKwlNQURfRigweDFlODRkOTY5KSwgTUFEX0YoMHgxZDkwNmJjZiksIE1BRF9GKDB4MWM2MjY0OGIpLAorCU1BRF9GKDB4MWFmZDEwMGYpLCBNQURfRigweDE5NjMyNjhiKSwgTUFEX0YoMHgxNzk3YzZhNCksCisJTUFEX0YoMHgxNTllNmY1YiksIE1BRF9GKDB4MTM3YWY5NDApLCBNQURfRigweDExMzE4ZWYzKSwKKwlNQURfRigweDBlYzZhNTA3KSwgTUFEX0YoMHgwYzNlZjE1MyksIE1BRF9GKDB4MDk5ZjYxYzUpLAorCU1BRF9GKDB4MDZlZDEyYzUpLCBNQURfRigweDA0MmQ0NTQ0KSwgTUFEX0YoMHgwMTY1NTQ3YykKKwl9OworKi8KKworICAvKiBzY2FsaW5nICovCisKKy8qCisJZm9yIChpID0gMDsgaSA8IDE4OyBpICs9IDMpIHsKKwkJdG1wMltpICsgMF0gPSBtYWRfZl9tdWwoeFtpICsgMF0sIHNjYWxlW2kgKyAwXSk7CisJCXRtcDJbaSArIDFdID0gbWFkX2ZfbXVsKHhbaSArIDFdLCBzY2FsZVtpICsgMV0pOworCQl0bXAyW2kgKyAyXSA9IG1hZF9mX211bCh4W2kgKyAyXSwgc2NhbGVbaSArIDJdKTsKKwkgIH0KKyovCisJLyogZXZlbiBpbnB1dCBidXR0ZXJmbHkgKi8KKworLyoKKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSArPSAzKSB7CisJCXRtcDNbaSArIDBdID0gdG1wMltpICsgMF0gKyB0bXAyWzE4IC0gKGkgKyAwKSAtIDFdOworCQl0bXAzW2kgKyAxXSA9IHRtcDJbaSArIDFdICsgdG1wMlsxOCAtIChpICsgMSkgLSAxXTsKKwkJdG1wM1tpICsgMl0gPSB0bXAyW2kgKyAyXSArIHRtcDJbMTggLSAoaSArIDIpIC0gMV07CisJICB9CisJZm9yIChpID0gMDsgaSA8IDk7IGkgKz0gMykgeworCQl0bXA0W2kgKyAwXSA9IHRtcDJbaSArIDBdIC0gdG1wMlsxOCAtIChpICsgMCkgLSAxXTsKKwkJdG1wNFtpICsgMV0gPSB0bXAyW2kgKyAxXSAtIHRtcDJbMTggLSAoaSArIDEpIC0gMV07CisJCXRtcDRbaSArIDJdID0gdG1wMltpICsgMl0gLSB0bXAyWzE4IC0gKGkgKyAyKSAtIDFdOworCSAgfQorKi8KKworCWxkLmQJcjgsIHIxMlswXQkJCQkvKnI4ID0geFsxXSwgcjkgPSB4WzBdKi8KKwlsZC5kCXIwLCBwY1tzY2FsZV9kY3RJViAtIC5dCQkJLypyMCA9IHtzY2FsZVsyXSwgc2NhbGVbM119LCByMSA9IHsgc2NhbGVbMF0sIHNjYWxlWzFdIH0qLworCWxkLmQJcjIsIHIxMlsyKjRdCQkJCS8qcjIgPSB4WzNdLCByMyA9IHhbMl0qLworCWxkLmQJcjQsIHBjW3NjYWxlX2RjdElWIC0gLiArIDE0KjJdCQkvKnI0ID0ge3NjYWxlWzE2XSwgc2NhbGVbMTddfSwgcjUgPSB7IHNjYWxlWzE0XSwgc2NhbGVbMTVdIH0qLworCW11bHNhdHJuZHdoLncJcjkvKnRtcDJbMF0qLywgcjksIHIxOnQJCS8qdG1wMlswXSA9IG1hZF9mX211bCh4WzBdLCBzY2FsZVswXSkgKi8KKwlsZC5kCXI2LCByMTJbMTYqNF0JCQkJLypyNiA9IHhbMTddLCByNyA9IHhbMTZdKi8KKwltdWxzYXRybmR3aC53CXI4Lyp0bXAyWzFdKi8sIHI4LCByMTpiCQkvKnRtcDJbMV0gPSBtYWRfZl9tdWwoeFsxXSwgc2NhbGVbMV0pICovCisJbXVsc2F0cm5kd2gudwlyMy8qdG1wMlsyXSovLCByMywgcjA6dAkJLyp0bXAyWzJdID0gbWFkX2ZfbXVsKHhbMl0sIHNjYWxlWzJdKSAqLworCW11bHNhdHJuZHdoLncJcjIvKnRtcDJbM10qLywgcjIsIHIwOmIJCS8qdG1wMlszXSA9IG1hZF9mX211bCh4WzNdLCBzY2FsZVszXSkgKi8KKwlsZC5kCXIwLCByMTJbMTQqNF0JCQkJLypyMCA9IHhbMTVdLCByMSA9IHhbMTRdKi8KKwltdWxzYXRybmR3aC53CXI3Lyp0bXAyWzE2XSovLCByNywgcjQ6dAkvKnRtcDJbMTZdID0gbWFkX2ZfbXVsKHhbMTZdLCBzY2FsZVsxNl0pICovCisJbXVsc2F0cm5kd2gudwlyNi8qdG1wMlsxN10qLywgcjYsIHI0OmIJLyp0bXAyWzE3XSA9IG1hZF9mX211bCh4WzE3XSwgc2NhbGVbMTddKSAqLworCW11bHNhdHJuZHdoLncJcjEvKnRtcDJbMTRdKi8sIHIxLCByNTp0CS8qdG1wMlsxNF0gPSBtYWRfZl9tdWwoeFsxNF0sIHNjYWxlWzE0XSkgKi8KKwltdWxzYXRybmR3aC53CXIwLyp0bXAyWzE1XSovLCByMCwgcjU6YgkvKnRtcDJbMTVdID0gbWFkX2ZfbXVsKHhbMTVdLCBzY2FsZVsxNV0pICovCisKKwlsZC5kCXI0LCByMTJbNCo0XQkJCQkvKnI0ID0geFs1XSwgcjUgPSB4WzRdKi8KKworCXN1YgkJbHIvKnRtcDRbMF0qLywgcjksIHI2CisJYWRkCQlyNi8qdG1wM1swXSovLCByOSwgcjYKKwlzdWIJCXIxMC8qdG1wNFsxXSovLCByOCwgcjcKKwlhZGQJCXI3Lyp0bXAzWzFdKi8sIHI4LCByNworCXN1YgkJcjkvKnRtcDRbMl0qLywgcjMsIHIwCisJYWRkCQlyMC8qdG1wM1syXSovLCByMywgcjAKKwlzdWIJCXI4Lyp0bXA0WzNdKi8sIHIyLCByMQorCWFkZAkJcjEvKnRtcDNbM10qLywgcjIsIHIxCisKKwlsZC5kCXIyLCBwY1tzY2FsZV9kY3RJViAtIC4gKyA0KjJdCQkvKnIyID0ge3NjYWxlWzZdLCBzY2FsZVs3XX0sIHIzID0geyBzY2FsZVs0XSwgc2NhbGVbNV0gfSovCisKKwlzdG0JCS0tc3AsIHI4LXIxMCwgbHIJCS8qc3BbMF0gPSB0bXA0WzBdLHNwWzFdID0gdG1wNFsxXSwKKwkJCQkJCQkgIHNwWzJdID0gdG1wNFsyXSxzcFszXSA9IHRtcDRbM10gKi8KKworCS8qIFJlZ2lzdGVycyB1c2VkOglyMCA9IHRtcDNbMl0sIHIxID0gdG1wM1szXSwgcjYgPSB0bXAzWzBdLCByNyA9IHRtcDNbMV0sIHIxMiA9IHgKKwkgICBGcmVlCXJlZ2lzdGVyczoJcjItcjUsIHI4LXIxMSwgbHIKKwkqLworCWxkLmQJcjgsIHIxMls2KjRdCQkJCS8qcjggPSB4WzddLCByOSA9IHhbNl0qLworCWxkLmQJcjEwLCBwY1tzY2FsZV9kY3RJViAtIC4gKyAxMCoyXQkJLypyMTAgPSB7c2NhbGVbMTJdLCBzY2FsZVsxM119LCByMTEgPSB7IHNjYWxlWzEwXSwgc2NhbGVbMTFdIH0qLworCW11bHNhdHJuZHdoLncJcjUvKnRtcDJbNF0qLywgcjUsIHIzOnQJCS8qdG1wMls0XSA9IG1hZF9mX211bCh4WzRdLCBzY2FsZVs0XSkgKi8KKwltdWxzYXRybmR3aC53CXI0Lyp0bXAyWzVdKi8sIHI0LCByMzpiCQkvKnRtcDJbNV0gPSBtYWRfZl9tdWwoeFs1XSwgc2NhbGVbNV0pICovCisJbXVsc2F0cm5kd2gudwlyOS8qdG1wMls2XSovLCByOSwgcjI6dAkJLyp0bXAyWzZdID0gbWFkX2ZfbXVsKHhbNl0sIHNjYWxlWzZdKSAqLworCW11bHNhdHJuZHdoLncJcjgvKnRtcDJbN10qLywgcjgsIHIyOmIJCS8qdG1wMls3XSA9IG1hZF9mX211bCh4WzddLCBzY2FsZVs3XSkgKi8KKworCWxkLmQJcjIsIHIxMlsxMio0XQkJCQkvKnIyID0geFsxM10sIHIzID0geFsxMl0qLworCWxkLncJbHIsIHIxMlsxMSo0XQkJCQkvKmxyID0geFsxMV0gKi8KKwltdWxzYXRybmR3aC53CXIzLyp0bXAyWzEyXSovLCByMywgcjEwOnQJLyp0bXAyWzEyXSA9IG1hZF9mX211bCh4WzEyXSwgc2NhbGVbMTJdKSAqLworCW11bHNhdHJuZHdoLncJcjIvKnRtcDJbMTNdKi8sIHIyLCByMTA6YgkvKnRtcDJbMTNdID0gbWFkX2ZfbXVsKHhbMTNdLCBzY2FsZVsxM10pICovCisJbGQudwlyMTAsIHIxMlsxMCo0XQkJCQkvKnIxMCA9IHhbMTBdICovCisJbXVsc2F0cm5kd2gudwlsci8qdG1wMlsxMV0qLywgbHIsIHIxMTpiCS8qdG1wMlsxMV0gPSBtYWRfZl9tdWwoeFsxMV0sIHNjYWxlWzExXSkgKi8KKwltdWxzYXRybmR3aC53CXIxMC8qdG1wMlsxMF0qLywgcjEwLCByMTE6dAkvKnRtcDJbMTBdID0gbWFkX2ZfbXVsKHhbMTBdLCBzY2FsZVsxMF0pICovCisKKwlzdWIJcjExLyp0bXA0WzRdKi8sIHI1LCByMgorCWFkZAlyMi8qdG1wM1s0XSovLCByNSwgcjIKKwlzdWIJcjUvKnRtcDRbNV0qLywgcjQsIHIzCisJYWRkCXIzLyp0bXAzWzVdKi8sIHI0LCByMworCXN1YglyNC8qdG1wNFs2XSovLCByOSwgbHIKKwlhZGQJbHIvKnRtcDNbNl0qLywgcjksIGxyCisJc3ViCXI5Lyp0bXA0WzddKi8sIHI4LCByMTAKKwlhZGQJcjEwLyp0bXAzWzddKi8sIHI4LCByMTAKKwlsZGRwYwlyOCwgc2NhbGVfZGN0SVYgKyA4KjIJCQkvKnI4ID0ge3NjYWxlWzhdLCBzY2FsZVs5XX0gKi8KKworCXN0bQktLXNwLCByNCwgcjUsIHI5LCByMTEJCQkvKnNwWzBdID0gdG1wNFs0XSxzcFsxXSA9IHRtcDRbN10sCisJCQkJCQkJICBzcFsyXSA9IHRtcDRbNV0sc3BbM10gPSB0bXA0WzZdICovCisJbGQuZAlyNCwgcjEyWzgqNF0JCQkJLypyNCA9IHhbOV0sIHI1ID0geFs4XSovCisJbXVsc2F0cm5kd2gudwlyNS8qdG1wMls4XSovLCByNSwgcjg6dAkJLyp0bXAyWzhdID0gbWFkX2ZfbXVsKHhbOF0sIHNjYWxlWzhdKSAqLworCW11bHNhdHJuZHdoLncJcjQvKnRtcDJbOV0qLywgcjQsIHI4OmIJCS8qdG1wMls5XSA9IG1hZF9mX211bCh4WzldLCBzY2FsZVs5XSkgKi8KKwlzdWIJCXI5Lyp0bXA0WzhdKi8sIHI1LCByNAorCWFkZAkJcjUvKnRtcDNbOF0qLywgcjUsIHI0CisKKwlzdC53CS0tc3AsIHI5CQkJCS8qIHNwWzBdID0gdG1wNFs4XSAqLworCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisKKwkJcjA9dG1wM1syXSwgcjE9dG1wM1szXSwgcjI9dG1wM1s0XSwgcjM9dG1wM1s1XSwgcjU9dG1wM1s4XSwgcjYgPSB0bXAzWzBdLAorCQlyNyA9IHRtcDNbMV0sIHIxMD10bXAzWzddLCBscj10bXAzWzZdCisJICAgRnJlZSByZWdpc3RlcnM6CisJCXI0LCByOCwgcjksIHIxMSwgcjEyCisJKi8KKworCisgIC8qIFNEQ1QtSUkgKi8KKy8qCisKKwl7CisJbWFkX2ZpeGVkX3QgdG1wM1s5XTsKKwlpbnQgaTsKKyovCisJLyogc2NhbGVbaV0gPSAyICogY29zKFBJICogKDIgKiBpICsgMSkgLyAoMiAqIDE4KSkgKi8KKy8qCisJc3RhdGljIG1hZF9maXhlZF90IGNvbnN0IHNjYWxlWzldID0geworCU1BRF9GKDB4MWZlMGQzYjQpLCBNQURfRigweDFlZThkZDQ3KSwgTUFEX0YoMHgxZDAwNzkzMCksCisJTUFEX0YoMHgxYTM2N2U1OSksIE1BRF9GKDB4MTZhMDllNjYpLCBNQURfRigweDEyNWFiY2Y4KSwKKwlNQURfRigweDBkODYxNmJjKSwgTUFEX0YoMHgwODQ4M2VlMSksIE1BRF9GKDB4MDJjOWZhZDcpCisJfTsKKyovCisgIC8qIGRpdmlkZSB0aGUgMTgtcG9pbnQgU0RDVC1JSSBpbnRvIHR3byA5LXBvaW50IFNEQ1QtSUlzICovCisKKworICAvKiBmYXN0ZGN0ICovCisKKy8qCisJeworCW1hZF9maXhlZF90IGEwLCAgYTEsICBhMiwgIGEzLCAgYTQsICBhNSwgIGE2LCAgYTcsICBhOCwgIGE5LCAgYTEwLCBhMTEsIGExMjsKKwltYWRfZml4ZWRfdCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCwgYTIxLCBhMjIsIGEyMywgYTI0LCBhMjU7CisJbWFkX2ZpeGVkX3QgbTAsICBtMSwgIG0yLCAgbTMsICBtNCwgIG01LCAgbTYsICBtNzsKKyovCisvLwkgIGVudW0geworLy8JICAgIGMwID0gIE1BRF9GKDB4MWY4MzhiOGQpLCAgLyogMiAqIGNvcyggMSAqIFBJIC8gMTgpICovCisvLwkgICAgYzEgPSAgTUFEX0YoMHgxYmI2N2FlOCksICAvKiAyICogY29zKCAzICogUEkgLyAxOCkgKi8KKy8vCSAgICBjMiA9ICBNQURfRigweDE4ODM2ZmEzKSwgIC8qIDIgKiBjb3MoIDQgKiBQSSAvIDE4KSAqLworLy8JICAgIGMzID0gIE1BRF9GKDB4MTQ5MWI3NTIpLCAgLyogMiAqIGNvcyggNSAqIFBJIC8gMTgpICovCisvLwkgICAgYzQgPSAgTUFEX0YoMHgwYWYxZDQzYSksICAvKiAyICogY29zKCA3ICogUEkgLyAxOCkgKi8KKy8vCSAgICBjNSA9ICBNQURfRigweDA1OGU4NmEwKSwgIC8qIDIgKiBjb3MoIDggKiBQSSAvIDE4KSAqLworLy8JICAgIGM2ID0gLU1BRF9GKDB4MWUxMWY2NDIpICAgLyogMiAqIGNvcygxNiAqIFBJIC8gMTgpICovCisvLwkgIH07CisKKy8qCisJYTIgPSB0bXAzWzZdICsgdG1wM1syXTsKKwlhNiA9IHRtcDNbOF0gKyB0bXAzWzBdOworCWExMSA9IGEyICAtIGE2OworCW01ID0gbWFkX2ZfbXVsKGExMSwgLWM2KSA7CisJYTQgPSB0bXAzWzFdICsgdG1wM1s3XTsKKworCWExOCA9ICAgICB0bXAzWzRdICsgYTQ7CisJYTE5ID0gLTIgKiB0bXAzWzRdICsgYTQ7CisKKwlhMCA9IHRtcDNbM10gKyB0bXAzWzVdOworCisqLworCWFkZAlyMTEvKmE0Ki8sIHI3LCByMTAKKwlhZGQJcjEyLyphMTgqLywgcjIsIHIxMQorCXN1YglyMTEvKmExOSovLCByMTEsIHIyPDwxCisKKwlhZGQJcjQvKmEyKi8sIGxyLCByMAorCWFkZAlyOC8qYTYqLywgcjUsIHI2CisJc3ViCXI5LyphMTEqLywgcjQsIHI4CisKKwlzdC5kCS0tc3AsIHIwCS8qIHNwWzBdID0gdG1wM1szXSwgc3AxWzFdID0gdG1wM1syXSovCisKKwltb3YJcjIsIE1BRF9GKDB4MWUxMWY2NDIpCisJbXVsc2F0cm5kd2gudwlyOS8qbTUqLywgcjksIHIyOmIKKworCWFkZAlyMi8qYTAqLywgcjEsIHIzCisKKwkvKiBSZWdpc3RlcnMgdXNlZDoKKworCQlyMj1hMCwgcjM9dG1wM1s1XSwgcjQ9YTIsIHI1PXRtcDNbOF0sIHI2ID0gdG1wM1swXSwKKwkJcjcgPSB0bXAzWzFdLCByOD1hNiwgcjEwPXRtcDNbN10sIHI5PW01LCByMTE9YTE5LCByMTI9YTE4LGxyPXRtcDNbNl0KKwkgICBGcmVlIHJlZ2lzdGVyczoKKwkJcjAsIHIxCisJKi8KKworLyoKKwlhOCAgPSBhMCAgKyBhMjsKKwlhMTIgPSBhOCAgKyBhNjsKKwlhMTAgPSBhMCAgLSBhNjsKKwlhOSAgPSBhMCAgLSBhMjsKKwltNyA9IG1hZF9mX211bChhOSwgIC1jMikgOworCW02ID0gbWFkX2ZfbXVsKGExMCwgLWM1KSA7CisqLworCisJYWRkCXIwLyphOCovLCByMiwgcjQKKwlhZGQJcjAvKmExMiovLCByOAorCXJzdWIJcjgvKmExMCovLCByMgorCXN1YglyMi8qYTkqLywgcjQKKwltb3YJcjEsIC1NQURfRigweDE4ODM2ZmEzKQorCW11bHNhdHJuZHdoLncJcjIvKm03Ki8sIHIyLCByMTpiCisJbW92CXIxLCAtTUFEX0YoMHgwNThlODZhMCkKKwltdWxzYXRybmR3aC53CXI4LyptNiovLCByOCwgcjE6YgorCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisKKwkJcjA9YTEyLCByMj1tNywgcjM9dG1wM1s1XSwgcjU9dG1wM1s4XSwgcjYgPSB0bXAzWzBdLAorCQlyNyA9IHRtcDNbMV0sIHI4PW02LCByMTA9dG1wM1s3XSwgcjk9bTUsIHIxMT1hMTksIHIxMj1hMTgsbHI9dG1wM1s2XQorCSAgIEZyZWUgcmVnaXN0ZXJzOgorCQlyMSwgcjQKKwkqLworCisKKy8qCisJYTIxID0gLWExOSAtIChtNSA8PCAxKTsKKwl0bXBbIDhdID0gYTIxIC0gKG02IDw8IDEpOworCisJYTIwID0gYTE5IC0gKG01IDw8IDEpOworCXRtcFsgNF0gPSAobTcgPDwgMSkgICsgYTIwOworCWEyMiA9IC1hMTkgKyAobTYgPDwgMSk7CisJdG1wWzE2XSA9IGEyMiArIChtNyA8PCAxKTsKKwl0bXBbIDBdID0gYTE4ICsgYTEyOworCXRtcFsxMl0gPSBhMTIgLSAyICogYTE4OworKi8KKwlhZGQJcjEvKmEyMSovLCByMTEsIHI5IDw8IDEKKwluZWcJcjEKKwlzdWIJcjEvKnRtcFs4XSovLCByMSwgcjggPDwgMQorCXN0ZHNwCXNwWzQqMTEvKnRtcDNbLi5dIG9uIHRoZSBzdGFjayovICsgOCo0XSwgcjEKKwlzdWIJcjQvKmEyMCovLCByMTEsIHI5IDw8IDEKKwlhZGQJcjQvKnRtcFs0XSovLCByNCwgcjIgPDwgMQorCXN0ZHNwCXNwWzQqMTEvKnRtcDNbLi5dIG9uIHRoZSBzdGFjayovICsgNCo0XSwgcjQKKwluZWcJcjExCisJYWRkCXIxLyphMjIqLywgcjExLCByOCA8PCAxCisJYWRkCXIxLyp0bXBbMTZdKi8sIHIxLCByMiA8PCAxCisJc3Rkc3AJc3BbNCoxMS8qdG1wM1suLl0gb24gdGhlIHN0YWNrKi8gKyAxNio0XSwgcjEKKwlhZGQJcjQsIHIxMiwgcjAKKwlzdWIJcjEsIHIwLCByMTIgPDwgMQorCXN0ZHNwCXNwWzQqMTEvKnRtcDNbLi5dIG9uIHRoZSBzdGFjayovICsgMCo0XSwgcjQKKwlzdGRzcAlzcFs0KjExLyp0bXAzWy4uXSBvbiB0aGUgc3RhY2sqLyArIDEyKjRdLCByMQorCisJbGQuZAlyMCwgc3ArKworCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisKKwkJcjAgPSB0bXAzWzJdLCByMSA9IHRtcDNbM10sIHIzPXRtcDNbNV0sIHI1PXRtcDNbOF0sIHI2ID0gdG1wM1swXSwKKwkJcjcgPSB0bXAzWzFdLCByMTA9dG1wM1s3XSwgcjExPWExOSwgbHI9dG1wM1s2XQorCSAgIEZyZWUgcmVnaXN0ZXJzOgorCQlyMixyNCxyOCxyOSxyMTIKKwkqLworCisvKgorCWE1ID0gdG1wM1sxXSAtIHRtcDNbN107CisJYTcgPSB0bXAzWzhdIC0gdG1wM1swXTsKKwlhMyA9IHRtcDNbNl0gLSB0bXAzWzJdOworCWExID0gdG1wM1szXSAtIHRtcDNbNV07CisJYTEzID0gYTEgIC0gYTM7CisJYTE0ID0gYTEzICsgYTc7CisJbTMgPSBtYWRfZl9tdWwoYTE0LCAtYzEpIDsKKwltNCA9IG1hZF9mX211bChhNSwgIC1jMSkgOworCXRtcFsgNl0gPSBtMyA8PCAxOworKi8KKwlzdWIJcjcvKmE1Ki8sIHIxMAorCXN1YglyMi8qYTcqLywgcjUsIHI2CisJc3ViCXI0LyphMyovLCBsciwgcjAKKwlzdWIJcjgvKmExKi8sIHIxLCByMworCXN1YglyOS8qYTEzKi8sIHI4LCByNAorCWFkZAlyMTIvKmExNCovLCByOSwgcjIKKwltb3YJcjAsIC1NQURfRigweDFiYjY3YWU4KQorCW11bHNhdHJuZHdoLncJcjEyLyptMyovLCByMTIsIHIwOmIKKwltdWxzYXRybmR3aC53CXI3LyptNCovLCByNywgcjA6YgorCWxzbAlyMTIsIDEKKwlzdGRzcAlzcFs0KjkvKnRtcDNbLi5dIG9uIHRoZSBzdGFjayovICsgNio0XSwgcjEyCisKKwkvKiBSZWdpc3RlcnMgdXNlZDoKKwkJcjIgPSBhNywgcjQgPSBhMywgcjcgPSBtNCwgcjggPSBhMSwgcjEyID0gbTMKKworCSAgIEZyZWUgcmVnaXN0ZXJzOgorCQlyMCwgcjEsIHIzLCByNSwgcjYsIHIxMCwgcjksIHIxMSwgbHIKKwkqLworCisKKy8qCisJYTE1ID0gYTMgICsgYTc7CisJbTIgPSBtYWRfZl9tdWwoYTE1LCAtYzQpIDsKKwlhMTcgPSBhMSAgKyBhMzsKKwltMCA9IG1hZF9mX211bChhMTcsIC1jMykgOworCWEyMyA9IChtNCA8PCAxKSAgKyAobTIgPDwgMSk7CisJdG1wWzE0XSA9IGEyMyArIChtMCA8PCAxKTsgKi8KKwlhZGQJcjAvKmExNSovLCByNCwgcjIKKwltb3YJcjEsIC1NQURfRigweDBhZjFkNDNhKQorCW11bHNhdHJuZHdoLncJcjAvKm0yKi8sIHIwLCByMTpiCisJbW92CXIzLCAtTUFEX0YoMHgxNDkxYjc1MikKKwlhZGQJcjUvKmExNyovLCByOCwgcjQKKwltdWxzYXRybmR3aC53CXI1LyptMCovLCByNSwgcjM6YgorCWxzbAlyNywgMQorCWFkZAlyNi8qYTIzKi8sIHI3LCByMCA8PCAxCisJYWRkCXI2Lyp0bXBbMTRdKi8sIHI2LCByNSA8PCAxCisJc3Rkc3AJc3BbNCo5Lyp0bXAzWy4uXSBvbiB0aGUgc3RhY2sqLyArIDE0KjRdLCByNgorCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisJCXIwID0gbTIsIHIyID0gYTcsIHI1ID0gbTAsIHI3ID0gbTQsIHI4ID0gYTEKKworCSAgIEZyZWUgcmVnaXN0ZXJzOgorCQlyMSwgcjMsIHI0LCByNiwgcjEwLCByOSwgcjExLCBscgorCSovCisKKy8qCisJYTE2ID0gYTEgIC0gYTc7CisJbTEgPSBtYWRfZl9tdWwoYTE2LCAtYzApIDsKKwlhMjQgPSAobTQgPDwgMSkgIC0gKG0yIDw8IDEpOworCXRtcFsxMF0gPSBhMjQgLSAobTEgPDwgMSk7CisKKwlhMjUgPSAobTQgPDwgMSkgICsgKG0xIDw8IDEpOworCXRtcFsgMl0gPSAobTAgPDwgMSkgIC0gYTI1OworKi8KKwlzdWIJcjMvKmExNiovLCByOCwgcjIKKwltb3YJcjQsICAtTUFEX0YoMHgxZjgzOGI4ZCkKKwltdWxzYXRybmR3aC53CXIzLyptMSovLCByMywgcjQ6YgorCXN1YglyMS8qYTI0Ki8sIHI3LCByMCA8PCAxCisJc3ViCXIxLyp0bXBbMTBdKi8sIHIxLCByMyA8PCAxCisJc3Rkc3AJc3BbNCo5Lyp0bXAzWy4uXSBvbiB0aGUgc3RhY2sqLyArIDEwKjRdLCByMQorCWFkZAlyNy8qYTI1Ki8sIHI3LCByMyA8PCAxCisJc3ViCXI3LCByNywgcjUgPDwgMQorCW5lZwlyNworCXN0ZHNwCXNwWzQqOS8qdG1wM1suLl0gb24gdGhlIHN0YWNrKi8gKyAyKjRdLCByNworCisKKworCisgIC8qIG91dHB1dCB0byBldmVyeSBvdGhlciBzbG90IGZvciBjb252ZW5pZW5jZSAqLworCisgIC8qfSAqLworICAvKiBFbmQgZmFzdGRjdCAqLworCisgIC8qIG9kZCBpbnB1dCBidXR0ZXJmbHkgYW5kIHNjYWxpbmcgKi8KKworCisJLyogIE9uIHRoZSBzdGFjazoKKwkJc3BbMF0gPSB0bXA0WzhdLCBzcFsxXSA9IHRtcDRbNF0sc3BbMl0gPSB0bXA0WzddLCBzcFszXSA9IHRtcDRbNV0sc3BbNF0gPSB0bXA0WzZdCisJCXNwWzVdID0gdG1wNFswXSwgc3BbNl0gPSB0bXA0WzFdLHNwWzddID0gdG1wNFsyXSxzcFs4XSA9IHRtcDRbM10KKwkqLworCisgIC8qCisJICB0bXAzWzBdID0gbWFkX2ZfbXVsKHRtcDRbMF0sIHNjYWxlWzBdKTsKKwkgIHRtcDNbMV0gPSBtYWRfZl9tdWwodG1wNFsxXSwgc2NhbGVbMV0pIDw8IDE7CisJICB0bXAzWzJdID0gbWFkX2ZfbXVsKHRtcDRbMl0sIHNjYWxlWzJdKTsKKwkgIHRtcDNbM10gPSBtYWRfZl9tdWwodG1wNFszXSwgc2NhbGVbM10pIDw8IDE7CisJICB0bXAzWzRdID0gbWFkX2ZfbXVsKHRtcDRbNF0sIHNjYWxlWzRdKTsKKwkgIHRtcDNbNV0gPSBtYWRfZl9tdWwodG1wNFs1XSwgc2NhbGVbNV0pOworCSAgdG1wM1s2XSA9IG1hZF9mX211bCh0bXA0WzZdLCBzY2FsZVs2XSkgPDwgMTsKKwkgIHRtcDNbN10gPSBtYWRfZl9tdWwodG1wNFs3XSwgc2NhbGVbN10pOworCSAgdG1wM1s4XSA9IG1hZF9mX211bCh0bXA0WzhdLCBzY2FsZVs4XSkgPDwgMTsKKyAgKi8KKwkvKiBSZWdpc3RlcnMgdXNlZDoKKwkJcjEgPSB0bXA0WzNdLCByMiA9IHRtcDRbMl0sIHIzID0gdG1wNFsxXSwgcjQgPSB0bXA0WzBdLCByNyA9IHRtcDRbNl0KKwkJcjEwID0gdG1wNFs1XSwgcjExID0gdG1wNFs3XSwgcjEyID0gdG1wNFs0XSwgbHIgPSB0bXA0WzhdCisKKwkgICBGcmVlIHJlZ2lzdGVyczoKKwkJcjAsIHI1LCByNiwgcjgsIHI5CisJKi8KKwlsZC5kCXI4LCBwY1sgc2NhbGVfc2RjdElJIC0gLiArIDQqMl0JLyogcjggPSB7IHNjYWxlWzZdLCBzY2FsZVs3XSB9LCByOSA9IHsgc2NhbGVbNF0sIHNjYWxlWzVdfSAqLworCWxkbQlzcCsrLCByMSwgcjIsIHIzLCByNCwgcjcsIHIxMCwgcjExLCByMTIsIGxyCisJbW92CXI1LCBNQURfRigweDAyYzlmYWQ3KQkJLyogcjMgPSBzY2FsZVs4XSAqLworCW11bHNhdHJuZHdoLncJcjUvKnRtcDNbOF0qLywgbHIsIHI1OmIKKwltdWxzYXRybmR3aC53CWxyLyp0bXAzWzZdKi8sIHI3LCByODp0CisJbGQuZAlyNiwgcGNbIHNjYWxlX3NkY3RJSSAtIC4gKyAwKjJdCS8qIHI2ID0geyBzY2FsZVsyXSwgc2NhbGVbM10gfSwgcjcgPSB7IHNjYWxlWzBdLCBzY2FsZVsxXX0gKi8KKwlsc2wJbHIsIDEKKwlsc2wJcjUsIDEKKwltdWxzYXRybmR3aC53CXIwLyp0bXAzWzJdKi8sIHIyLCByNjp0CisJbXVsc2F0cm5kd2gudwlyMS8qdG1wM1szXSovLCByMSwgcjY6YgorCW11bHNhdHJuZHdoLncJcjYvKnRtcDNbMF0qLywgcjQsIHI3OnQKKwltdWxzYXRybmR3aC53CXI3Lyp0bXAzWzFdKi8sIHIzLCByNzpiCisJbXVsc2F0cm5kd2gudwlyMy8qdG1wM1s1XSovLCByMTAsIHI5OmIKKwltdWxzYXRybmR3aC53CXIyLyp0bXAzWzRdKi8sIHIxMiwgcjk6dAorCW11bHNhdHJuZHdoLncJcjkvKnRtcDNbN10qLywgcjExLCByODpiCisJbHNsCXIxLCAxCisJbHNsCXI3LCAxCisKKworICAvKiBmYXN0ZGN0ICovCisKKy8qCisJeworCW1hZF9maXhlZF90IGEwLCAgYTEsICBhMiwgIGEzLCAgYTQsICBhNSwgIGE2LCAgYTcsICBhOCwgIGE5LCAgYTEwLCBhMTEsIGExMjsKKwltYWRfZml4ZWRfdCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCwgYTIxLCBhMjIsIGEyMywgYTI0LCBhMjU7CisJbWFkX2ZpeGVkX3QgbTAsICBtMSwgIG0yLCAgbTMsICBtNCwgIG01LCAgbTYsICBtNzsKKyovCisvLwkgIGVudW0geworLy8JICAgIGMwID0gIE1BRF9GKDB4MWY4MzhiOGQpLCAgLyogMiAqIGNvcyggMSAqIFBJIC8gMTgpICovCisvLwkgICAgYzEgPSAgTUFEX0YoMHgxYmI2N2FlOCksICAvKiAyICogY29zKCAzICogUEkgLyAxOCkgKi8KKy8vCSAgICBjMiA9ICBNQURfRigweDE4ODM2ZmEzKSwgIC8qIDIgKiBjb3MoIDQgKiBQSSAvIDE4KSAqLworLy8JICAgIGMzID0gIE1BRF9GKDB4MTQ5MWI3NTIpLCAgLyogMiAqIGNvcyggNSAqIFBJIC8gMTgpICovCisvLwkgICAgYzQgPSAgTUFEX0YoMHgwYWYxZDQzYSksICAvKiAyICogY29zKCA3ICogUEkgLyAxOCkgKi8KKy8vCSAgICBjNSA9ICBNQURfRigweDA1OGU4NmEwKSwgIC8qIDIgKiBjb3MoIDggKiBQSSAvIDE4KSAqLworLy8JICAgIGM2ID0gLU1BRF9GKDB4MWUxMWY2NDIpICAgLyogMiAqIGNvcygxNiAqIFBJIC8gMTgpICovCisvLwkgIH07CisKKwkvKiBSZWdpc3RlcnMgdXNlZDoKKworCQlyMD10bXAzWzJdLCByMT10bXAzWzNdLCByMj10bXAzWzRdLCByMz10bXAzWzVdLCByNT10bXAzWzhdLCByNiA9IHRtcDNbMF0sCisJCXI3ID0gdG1wM1sxXSwgcjk9dG1wM1s3XSwgbHI9dG1wM1s2XQorCSAgIEZyZWUgcmVnaXN0ZXJzOgorCQlyNCwgcjgsIHIxMCwgcjExLCByMTIKKwkqLworCisvKgorCWEyID0gdG1wM1s2XSArICh0bXAzWzJdIDw8IDEpOworCWE2ID0gdG1wM1s4XSArICh0bXAzWzBdIDw8IDEpOworCWExMSA9IGEyIC0gYTY7CisJbTUgPSBtYWRfZl9tdWwoYTExLCBjNikgOworCWE0ID0gdG1wM1sxXSArICh0bXAzWzddIDw8IDEpOworCisJYTE4ID0gICAgICh0bXAzWzRdIDw8IDEpICsgYTQ7CisJYTE5ID0gLTIgKiAodG1wM1s0XSA8PCAxKSArIGE0OworCisJYTAgPSB0bXAzWzNdICsgKHRtcDNbNV0gPDwgMSk7CisKKyovCisJYWRkCXIxMS8qYTQqLywgcjcsIHI5IDw8IDEKKwlhZGQJcjEyLyphMTgqLywgcjExLCByMiA8PCAxCisJc3ViCXIxMS8qYTE5Ki8sIHIxMSwgcjIgPDwgMgorCisJYWRkCXI0LyphMiovLCBsciwgcjAgPDwgMQorCWFkZAlyOC8qYTYqLywgcjUsIHI2IDw8IDEKKwlzdWIJcjEwLyphMTEqLywgcjQsIHI4CisKKwlzdC5kCS0tc3AsIHIwCS8qIHNwWzBdID0gdG1wM1szXSwgc3AxWzFdID0gdG1wM1syXSovCisKKwltb3YJcjIsIC1NQURfRigweDFlMTFmNjQyKQorCW11bHNhdHJuZHdoLncJcjEwLyptNSovLCByMTAsIHIyOmIKKworCWFkZAlyMi8qYTAqLywgcjEsIHIzIDw8IDEKKworCS8qIFJlZ2lzdGVycyB1c2VkOgorCisJCXIyPWEwLCByMz10bXAzWzVdLCByND1hMiwgcjU9dG1wM1s4XSwgcjYgPSB0bXAzWzBdLAorCQlyNyA9IHRtcDNbMV0sIHI4PWE2LCByOT10bXAzWzddLCByMTA9bTUsIHIxMT1hMTksIHIxMj1hMTgsbHI9dG1wM1s2XQorCSAgIEZyZWUgcmVnaXN0ZXJzOgorCQlyMCwgcjEKKwkqLworCisvKgorCWE4ICA9IGEwICArIGEyOworCWExMiA9IGE4ICArIGE2OworCWExMCA9IGEwICAtIGE2OworCWE5ICA9IGEwICAtIGEyOworCW03ID0gbWFkX2ZfbXVsKGE5LCAgLWMyKSA7CisJbTYgPSBtYWRfZl9tdWwoYTEwLCAtYzUpIDsKKyovCisKKwlhZGQJcjAvKmE4Ki8sIHIyLCByNAorCWFkZAlyMC8qYTEyKi8sIHI4CisJcnN1YglyOC8qYTEwKi8sIHIyCisJc3ViCXIyLyphOSovLCByNAorCW1vdglyMSwgLU1BRF9GKDB4MTg4MzZmYTMpCisJbXVsc2F0cm5kd2gudwlyMi8qbTcqLywgcjIsIHIxOmIKKwltb3YJcjEsIC1NQURfRigweDA1OGU4NmEwKQorCW11bHNhdHJuZHdoLncJcjgvKm02Ki8sIHI4LCByMTpiCisKKwkvKiBSZWdpc3RlcnMgdXNlZDoKKworCQlyMD1hMTIsIHIyPW03LCByMz10bXAzWzVdLCByNT10bXAzWzhdLCByNiA9IHRtcDNbMF0sCisJCXI3ID0gdG1wM1sxXSwgcjg9bTYsIHI5PXRtcDNbN10sIHIxMD1tNSwgcjExPWExOSwgcjEyPWExOCxscj10bXAzWzZdCisJICAgRnJlZSByZWdpc3RlcnM6CisJCXIxLCByNAorCSovCisKKworLyoKKwlhMjEgPSAtYTE5ICsgKG01IDw8IDEpOworCXRtcFsgOV0gPSBhMjEgLSAobTYgPDwgMSk7CisKKwlhMjAgPSAtKC1hMTkgLSAobTUgPDwgMSkpOworCXRtcFsgNV0gPSAobTcgPDwgMSkgICsgYTIwOworCWEyMiA9IC1hMTkgKyAobTYgPDwgMSk7CisJdG1wWzE3XSA9IGEyMiArIChtNyA8PCAxKTsKKwl0bXBbIDFdID0gYTE4ICsgYTEyOworCXRtcFsxM10gPSBhMTIgLSAyICogYTE4OworKi8KKwlzdWIJcjEvKmEyMSovLCByMTEsIHIxMCA8PCAxCisJbmVnCXIxCisJc3ViCXIxLyp0bXBbOV0qLywgcjEsIHI4IDw8IDEKKwlzdGRzcAlzcFs0KjIvKnRtcDNbLi5dIG9uIHRoZSBzdGFjayovICsgOSo0XSwgcjEKKwlhZGQJcjQvKmEyMCovLCByMTEsIHIxMCA8PCAxCisJYWRkCXI0Lyp0bXBbNV0qLywgcjQsIHIyIDw8IDEKKwlzdGRzcAlzcFs0KjIvKnRtcDNbLi5dIG9uIHRoZSBzdGFjayovICsgNSo0XSwgcjQKKwluZWcJcjExCisJYWRkCXIxLyphMjIqLywgcjExLCByOCA8PCAxCisJYWRkCXIxLyp0bXBbMTddKi8sIHIxLCByMiA8PCAxCisJc3Rkc3AJc3BbNCoyLyp0bXAzWy4uXSBvbiB0aGUgc3RhY2sqLyArIDE3KjRdLCByMQorCWFkZAlyNCwgcjEyLCByMAorCXN1YglyMSwgcjAsIHIxMiA8PCAxCisJc3Rkc3AJc3BbNCoyLyp0bXAzWy4uXSBvbiB0aGUgc3RhY2sqLyArIDEqNF0sIHI0CisJc3Rkc3AJc3BbNCoyLyp0bXAzWy4uXSBvbiB0aGUgc3RhY2sqLyArIDEzKjRdLCByMQorCisJbGQuZAlyMCwgc3ArKworCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisKKwkJcjAgPSB0bXAzWzJdLCByMSA9IHRtcDNbM10sIHIzPXRtcDNbNV0sIHI1PXRtcDNbOF0sIHI2ID0gdG1wM1swXSwKKwkJcjcgPSB0bXAzWzFdLCByOT10bXAzWzddLCByMTE9YTE5LCBscj10bXAzWzZdCisJICAgRnJlZSByZWdpc3RlcnM6CisJCXIyLHI0LHI4LHIxMCxyMTIKKwkqLworCisvKgorCWE1ID0gdG1wM1sxXSAtICh0bXAzWzddIDw8IDEpOworCWE3ID0gdG1wM1s4XSAtICh0bXAzWzBdIDw8IDEpOworCWEzID0gdG1wM1s2XSAtICh0bXAzWzJdIDw8IDEpOworCWExID0gdG1wM1szXSAtICh0bXAzWzVdIDw8IDEpOworCWExMyA9IGExICAtIGEzOworCWExNCA9IGExMyArIGE3OworCW0zID0gbWFkX2ZfbXVsKGExNCwgLWMxKSA7CisJbTQgPSBtYWRfZl9tdWwoYTUsICAtYzEpIDsKKwl0bXBbIDddID0gbTMgPDwgMTsKKyovCisJc3ViCXI3LyphNSovLCByNywgcjkgPDwgMQorCXN1YglyMi8qYTcqLywgcjUsIHI2IDw8IDEKKwlzdWIJcjQvKmEzKi8sIGxyLCByMCA8PCAxCisJc3ViCXI4LyphMSovLCByMSwgcjMgPDwgMQorCXN1YglyMTAvKmExMyovLCByOCwgcjQKKwlhZGQJcjEyLyphMTQqLywgcjEwLCByMgorCW1vdglyMCwgLU1BRF9GKDB4MWJiNjdhZTgpCisJbXVsc2F0cm5kd2gudwlyMTIvKm0zKi8sIHIxMiwgcjA6YgorCW11bHNhdHJuZHdoLncJcjcvKm00Ki8sIHI3LCByMDpiCisJbHNsCXIxMiwgMQorCXN0ZHNwCXNwWzcqNF0sIHIxMgorCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisJCXIyID0gYTcsIHI0ID0gYTMsIHI3ID0gbTQsIHI4ID0gYTEsIHIxMiA9IG0zCisKKwkgICBGcmVlIHJlZ2lzdGVyczoKKwkJcjAsIHIxLCByMywgcjUsIHI2LCByOSwgcjEwLCByMTEsIGxyCisJKi8KKworCisvKgorCWExNSA9IGEzICArIGE3OworCW0yID0gbWFkX2ZfbXVsKGExNSwgLWM0KSA7CisJYTE3ID0gYTEgICsgYTM7CisJbTAgPSBtYWRfZl9tdWwoYTE3LCAtYzMpIDsKKwlhMjMgPSAobTQgPDwgMSkgICsgKG0yIDw8IDEpOworCXRtcFsxNV0gPSBhMjMgKyAobTAgPDwgMSk7ICovCisJYWRkCXIwLyphMTUqLywgcjQsIHIyCisJbW92CXIxLCAtTUFEX0YoMHgwYWYxZDQzYSkKKwltdWxzYXRybmR3aC53CXIwLyptMiovLCByMCwgcjE6YgorCW1vdglyMywgLU1BRF9GKDB4MTQ5MWI3NTIpCisJYWRkCXI1LyphMTcqLywgcjgsIHI0CisJbXVsc2F0cm5kd2gudwlyNS8qbTAqLywgcjUsIHIzOmIKKwlsc2wJcjcsIDEKKwlhZGQJcjYvKmEyMyovLCByNywgcjAgPDwgMQorCWFkZAlyNi8qdG1wWzE1XSovLCByNiwgcjUgPDwgMQorCXN0ZHNwCXNwWzE1KjRdLCByNgorCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisJCXIwID0gbTIsIHIyID0gYTcsIHI1ID0gbTAsIHI3ID0gbTQsIHI4ID0gYTEKKworCSAgIEZyZWUgcmVnaXN0ZXJzOgorCQlyMSwgcjMsIHI0LCByNiwgcjksIHIxMCwgcjExLCBscgorCSovCisKKy8qCisJYTE2ID0gYTEgIC0gYTc7CisJbTEgPSBtYWRfZl9tdWwoYTE2LCAtYzApIDsKKwlhMjQgPSAobTQgPDwgMSkgIC0gKG0yIDw8IDEpOworCXRtcFsxMV0gPSBhMjQgLSAobTEgPDwgMSk7CisKKwlhMjUgPSAobTQgPDwgMSkgICsgKG0xIDw8IDEpOworCXRtcFsgM10gPSAobTAgPDwgMSkgIC0gYTI1OworKi8KKwlzdWIJcjMvKmExNiovLCByOCwgcjIKKwltb3YJcjQsICAtTUFEX0YoMHgxZjgzOGI4ZCkKKwltdWxzYXRybmR3aC53CXIzLyptMSovLCByMywgcjQ6YgorCXN1YglyMS8qYTI0Ki8sIHI3LCByMCA8PCAxCisJc3ViCXIxLyp0bXBbMTFdKi8sIHIxLCByMyA8PCAxCisJc3Rkc3AJc3BbMTEqNF0sIHIxCisJYWRkCXI3LyphMjUqLywgcjcsIHIzIDw8IDEKKwlzdWIJcjcsIHI3LCByNSA8PCAxCisJbmVnCXI3CisJbGRkc3AJcjEyLCBzcFs0KjE4KzRdCS8qIEdldCB5IGZyb20gc3RhY2sgKi8KKwlzdGRzcAlzcFszKjRdLCByNworCisKKyAgLyogb3V0cHV0IHRvIGV2ZXJ5IG90aGVyIHNsb3QgZm9yIGNvbnZlbmllbmNlICovCisKKyAgLyogRW5kIGZhc3RkY3QgKi8KKworICAvKiBvdXRwdXQgYWNjdW11bGF0aW9uICovCisKKy8qCWZvciAoaSA9IDM7IGkgPCAxODsgaSArPSA4KSB7CisJICB0bXBbaSArIDBdIC09IHRtcFsoaSArIDApIC0gMl07CisJICB0bXBbaSArIDJdIC09IHRtcFsoaSArIDIpIC0gMl07CisJICB0bXBbaSArIDRdIC09IHRtcFsoaSArIDQpIC0gMl07CisJICB0bXBbaSArIDZdIC09IHRtcFsoaSArIDYpIC0gMl07CisJfQorCX0KKyovCisKKy8qIEVuZCAgU0RDVC1JSSAqLworCisKKworICAvKiBzY2FsZSByZWR1Y3Rpb24gYW5kIG91dHB1dCBhY2N1bXVsYXRpb24gKi8KKworLyoKKwlmb3IgKGkgPSAxOyBpIDwgMTc7IGkgKz0gNCkgeworCSAgdG1wW2kgKyAwXSA9IHRtcFtpICsgMF0gIC0gdG1wWyhpICsgMCkgLSAxXTsKKwkgIHRtcFtpICsgMV0gPSB0bXBbaSArIDFdICAtIHRtcFsoaSArIDEpIC0gMV07CisJICB0bXBbaSArIDJdID0gdG1wW2kgKyAyXSAgLSB0bXBbKGkgKyAyKSAtIDFdOworCSAgdG1wW2kgKyAzXSA9IHRtcFtpICsgM10gIC0gdG1wWyhpICsgMykgLSAxXTsKKwl9CisJdG1wWzE3XSA9IHRtcFsxN10gLSB0bXBbMTZdOworCX0KKyovCisvKiBFbmQgIERDVC1JViAqLworCisKKyAgLyogY29udmVydCAxOC1wb2ludCBEQ1QtSVYgdG8gMzYtcG9pbnQgSU1EQ1QgKi8KKworLyoKKwlmb3IgKGkgPSAgMDsgaSA8ICA5OyBpICs9IDMpIHsKKwkgIHlbaSArIDBdID0gIHRtcFs5ICsgKGkgKyAwKV07CisJICB5W2kgKyAxXSA9ICB0bXBbOSArIChpICsgMSldOworCSAgeVtpICsgMl0gPSAgdG1wWzkgKyAoaSArIDIpXTsKKwl9CisJZm9yIChpID0gIDk7IGkgPCAyNzsgaSArPSAzKSB7CisJICB5W2kgKyAwXSA9IC10bXBbMzYgLSAoOSArIChpICsgMCkpIC0gMV07CisJICB5W2kgKyAxXSA9IC10bXBbMzYgLSAoOSArIChpICsgMSkpIC0gMV07CisJICB5W2kgKyAyXSA9IC10bXBbMzYgLSAoOSArIChpICsgMikpIC0gMV07CisJfQorCWZvciAoaSA9IDI3OyBpIDwgMzY7IGkgKz0gMykgeworCSAgeVtpICsgMF0gPSAtdG1wWyhpICsgMCkgLSAyN107CisJICB5W2kgKyAxXSA9IC10bXBbKGkgKyAxKSAtIDI3XTsKKwkgIHlbaSArIDJdID0gLXRtcFsoaSArIDIpIC0gMjddOworCX0KKwl9CisqLworCisJLyogUmVnaXN0ZXJzIHVzZWQ6CisJCXIwID0gdG1wWzhdLCByMSA9IHRtcFs3XSwgcjIgPSB0bXBbNl0sIHIzID0gdG1wWzVdLCByNCA9IHRtcFs0XQorCQlyNSA9IHRtcFszXSwgcjYgPSB0bXBbMl0sIHI3ID0gdG1wWzFdLCByOCA9IHRtcFswXSwgcjEyID0geQorCisJICAgRnJlZSByZWdpc3RlcnM6CisJCXI5LCByMTAsIHIxMSwgbHIKKwkqLworCisJbGRtCXNwKyssIHIwLXI4CS8qIEdldCB0bXBbMF0tdG1wWzhdIGZyb20gc3RhY2sgKi8KKwlzdWIJcjUsIHI3CQkvKiB0bXBbM10gLT0gdG1wWzFdKi8KKwlzdWIJcjMsIHI1CQkvKiB0bXBbNV0gLT0gdG1wWzNdKi8KKwlzdWIJcjEsIHIzCQkvKiB0bXBbN10gLT0gdG1wWzVdKi8KKworCXN1YglyNywgcjgJCS8qIHRtcFsxXSAtPSB0bXBbMF0qLworCXN1YglyNiwgcjcJCS8qIHRtcFsyXSAtPSB0bXBbMV0qLworCXN1YglyNSwgcjYJCS8qIHRtcFszXSAtPSB0bXBbMl0qLworCW5lZwlyOAorCXN0LncJcjEyWzI2KjRdLCByOAkvKiB5WzI2XSA9IC10bXBbMF0gKi8KKwlzdC53CXIxMlsyNyo0XSwgcjgJLyogeVsyN10gPSAtdG1wWzBdICovCisJbmVnCXI3CisJbmVnCXI2CisJc3QudwlyMTJbMjUqNF0sIHI3CS8qIHlbMjVdID0gLXRtcFsxXSAqLworCXN0LncJcjEyWzI0KjRdLCByNgkvKiB5WzI0XSA9IC10bXBbMl0gKi8KKwlzdC5kCXIxMlsyOCo0XSwgcjYJLyogeVsyOF0gPSAtdG1wWzFdLCB5WzI5XSA9IC10bXBbMl0qLworCisJc3ViCXI0LCByNQkJLyogdG1wWzRdIC09IHRtcFszXSovCisJc3ViCXIzLCByNAkJLyogdG1wWzVdIC09IHRtcFs0XSovCisJbmVnCXI1CisJbmVnCXI0CisJc3QudwlyMTJbMjMqNF0sIHI1CS8qIHlbMjNdID0gLXRtcFszXSAqLworCXN0LncJcjEyWzIyKjRdLCByNAkvKiB5WzIyXSA9IC10bXBbNF0gKi8KKwlzdC5kCXIxMlszMCo0XSwgcjQJLyogeVszMF0gPSAtdG1wWzNdLCB5WzMxXSA9IC10bXBbNF0qLworCisJbGRtCXNwKyssIHI0LXIxMSxscgkvKiBHZXQgdG1wWzldLXRtcFsxN10gZnJvbSBzdGFjayAqLworCisJc3ViCXIyLCByMwkJLyogdG1wWzZdIC09IHRtcFs1XSovCisKKwlzdWIJbHIsIHIxCQkvKiB0bXBbOV0gLT0gdG1wWzddKi8KKwlzdWIJcjEwLCBscgkJLyogdG1wWzExXSAtPSB0bXBbOV0qLworCXN1YglyOCwgcjEwCQkvKiB0bXBbMTNdIC09IHRtcFsxMV0qLworCXN1YglyNiwgcjgJCS8qIHRtcFsxNV0gLT0gdG1wWzEzXSovCisJc3ViCXI0LCByNgkJLyogdG1wWzE3XSAtPSB0bXBbMTVdKi8KKworCXN1YglyMSwgcjIJCS8qIHRtcFs3XSAtPSB0bXBbNl0qLworCXN1YglyMCwgcjEJCS8qIHRtcFs4XSAtPSB0bXBbN10qLworCW5lZwlyMworCW5lZwlyMgorCXN0LncJcjEyWzIxKjRdLCByMwkvKiB5WzIxXSA9IC10bXBbNV0gKi8KKwlzdC53CXIxMlsyMCo0XSwgcjIJLyogeVsyMF0gPSAtdG1wWzZdICovCisJc3QuZAlyMTJbMzIqNF0sIHIyCS8qIHlbMzJdID0gLXRtcFs1XSwgeVszM10gPSAtdG1wWzZdKi8KKworCXN1YglsciwgcjAJCS8qIHRtcFs5XSAtPSB0bXBbOF0qLworCXN1YglyMTEsIGxyCQkvKiB0bXBbMTBdIC09IHRtcFs5XSovCisJbmVnCXIxCisJbmVnCXIwCisJc3QudwlyMTJbMTkqNF0sIHIxCS8qIHlbMTldID0gLXRtcFs3XSAqLworCXN0LncJcjEyWzE4KjRdLCByMAkvKiB5WzE4XSA9IC10bXBbOF0gKi8KKwlzdC5kCXIxMlszNCo0XSwgcjAJLyogeVszNF0gPSAtdG1wWzddLCB5WzM1XSA9IC10bXBbOF0qLworCisJc3ViCXIxMCwgcjExCS8qIHRtcFsxMV0gLT0gdG1wWzEwXSovCisJc3ViCXI5LCByMTAJCS8qIHRtcFsxMl0gLT0gdG1wWzExXSovCisKKwlzdC53CXIxMlswKjRdLCBscgkvKiB5WzBdID0gdG1wWzldKi8KKwluZWcJbHIKKwlzdC53CXIxMlsxNyo0XSwgbHIJLyogeVsxN10gPSAtdG1wWzldKi8KKwlzdC5kCXIxMlsxKjRdLCByMTAJLyogeVsxXSA9IHRtcFsxMF0sIHlbMl0gPSB0bXBbMTFdICovCisJbmVnCXIxMQorCW5lZwlyMTAKKwlzdC53CXIxMlsxNio0XSwgcjExCS8qIHlbMTZdID0gLXRtcFsxMF0gKi8KKwlzdC53CXIxMlsxNSo0XSwgcjEwCS8qIHlbMTVdID0gLXRtcFsxMV0gKi8KKworCisJc3ViCXI4LCByOQkJLyogdG1wWzEzXSAtPSB0bXBbMTJdKi8KKwlzdWIJcjcsIHI4CQkvKiB0bXBbMTRdIC09IHRtcFsxM10qLworCXN0LmQJcjEyWzMqNF0sIHI4CS8qIHlbM10gPSB0bXBbMTJdLCB5WzRdID0gdG1wWzEzXSAqLworCW5lZwlyOQorCW5lZwlyOAorCXN0LncJcjEyWzE0KjRdLCByOQkvKiB5WzE0XSA9IC10bXBbMTJdICovCisJc3QudwlyMTJbMTMqNF0sIHI4CS8qIHlbMTNdID0gLXRtcFsxM10gKi8KKworCXN1YglyNiwgcjcJCS8qIHRtcFsxNV0gLT0gdG1wWzE0XSovCisJc3ViCXI1LCByNgkJLyogdG1wWzE2XSAtPSB0bXBbMTVdKi8KKwlzdWIJcjQsIHI1CQkvKiB0bXBbMTddIC09IHRtcFsxNl0qLworCisJc3QuZAlyMTJbNSo0XSwgcjYJLyogeVs1XSA9IHRtcFsxNF0sIHlbNl0gPSB0bXBbMTVdICovCisJbmVnCXI3CisJbmVnCXI2CisJc3QudwlyMTJbMTIqNF0sIHI3CS8qIHlbMTJdID0gLXRtcFsxNF0gKi8KKwlzdC53CXIxMlsxMSo0XSwgcjYJLyogeVsxMV0gPSAtdG1wWzE1XSAqLworCisJc3QuZAlyMTJbNyo0XSwgcjQJLyogeVs3XSA9IHRtcFsxNl0sIHlbOF0gPSB0bXBbMTddICovCisJbmVnCXI1CisJbmVnCXI0CisJc3QudwlyMTJbMTAqNF0sIHI1CS8qIHlbMTBdID0gLXRtcFsxNl0gKi8KKwlzdC53CXIxMls5KjRdLCByNAkvKiB5WzldID0gLXRtcFsxN10gKi8KKworCXBvcG0JcjAtcjcscjExLHBjCisKKwkuYWxpZ24JMgorc2NhbGVfZGN0SVY6CisJLnNob3J0CU1BRF9GKDB4MWZmODMzZmEpLCBNQURfRigweDFmYjllYTkzKSwgTUFEX0YoMHgxZjNkZDEyMCkKKwkuc2hvcnQJTUFEX0YoMHgxZTg0ZDk2OSksIE1BRF9GKDB4MWQ5MDZiY2YpLCBNQURfRigweDFjNjI2NDhiKQorCS5zaG9ydAlNQURfRigweDFhZmQxMDBmKSwgTUFEX0YoMHgxOTYzMjY4YiksIE1BRF9GKDB4MTc5N2M2YTQpCisJLnNob3J0CU1BRF9GKDB4MTU5ZTZmNWIpLCBNQURfRigweDEzN2FmOTQwKSwgTUFEX0YoMHgxMTMxOGVmMykKKwkuc2hvcnQJTUFEX0YoMHgwZWM2YTUwNyksIE1BRF9GKDB4MGMzZWYxNTMpLCBNQURfRigweDA5OWY2MWM1KQorCS5zaG9ydAlNQURfRigweDA2ZWQxMmM1KSwgTUFEX0YoMHgwNDJkNDU0NCksIE1BRF9GKDB4MDE2NTU0N2MpCisKKwkuYWxpZ24JMgorc2NhbGVfc2RjdElJOgorCS5zaG9ydAlNQURfRigweDFmZTBkM2I0KSwgTUFEX0YoMHgxZWU4ZGQ0NyksIE1BRF9GKDB4MWQwMDc5MzApCisJLnNob3J0CU1BRF9GKDB4MWEzNjdlNTkpLCBNQURfRigweDE2YTA5ZTY2KSwgTUFEX0YoMHgxMjVhYmNmOCkKKwkuc2hvcnQJTUFEX0YoMHgwZDg2MTZiYyksIE1BRF9GKDB4MDg0ODNlZTEpLCBNQURfRigweDAyYzlmYWQ3KQpkaWZmIC0tZ2l0IGEvbGF5ZXIzLmMgYi9sYXllcjMuYwppbmRleCA0ZTVkM2ZhLi5kZmZkYWIzIDEwMDY0NAotLS0gYS9sYXllcjMuYworKysgYi9sYXllcjMuYwpAQCAtMzc4LDYgKzM3OCwxMSBAQCBtYWRfZml4ZWRfdCBjb25zdCBjYVs4XSA9IHsKICAgLU1BRF9GKDB4MDAzYTI4NDcpIC8qIC0wLjAxNDE5ODU2OSAqLywgLU1BRF9GKDB4MDAwZjI3YjQpIC8qIC0wLjAwMzY5OTk3NSAqLwogfTsKIAorI2lmZGVmIEZQTV9BVlIzMgorIyB1bmRlZiBNQURfRgorIyBkZWZpbmUgTUFEX0YoeCkgKCh4ICsgKDEgPDwgMTIpKSA+PiAxMykKKyNlbmRpZgorCiAvKgogICogSU1EQ1QgY29lZmZpY2llbnRzIGZvciBzaG9ydCBibG9ja3MKICAqIGRlcml2ZWQgZnJvbSBzZWN0aW9uIDIuNC4zLjQuMTAuMiBvZiBJU08vSUVDIDExMTcyLTMKQEAgLTM4Niw3ICszOTEsNyBAQCBtYWRfZml4ZWRfdCBjb25zdCBjYVs4XSA9IHsKICAqIGltZGN0X3NbaSAvb2RkXVtrXSA9IGNvcygoUEkgLyAyNCkgKiAoMiAqICg2ICsgKGktMSkvMikgKyA3KSAqICgyICogayArIDEpKQogICovCiBzdGF0aWMKLW1hZF9maXhlZF90IGNvbnN0IGltZGN0X3NbNl1bNl0gPSB7CittYWRfY29lZmZfdCBjb25zdCBpbWRjdF9zWzZdWzZdID0gewogIyBpbmNsdWRlICJpbWRjdF9zLmRhdCIKIH07CiAKQEAgLTM5OCw3ICs0MDMsNyBAQCBtYWRfZml4ZWRfdCBjb25zdCBpbWRjdF9zWzZdWzZdID0gewogICogd2luZG93X2xbaV0gPSBzaW4oKFBJIC8gMzYpICogKGkgKyAxLzIpKQogICovCiBzdGF0aWMKLW1hZF9maXhlZF90IGNvbnN0IHdpbmRvd19sWzM2XSA9IHsKK21hZF9jb2VmZl90IGNvbnN0IHdpbmRvd19sWzM2XSA9IHsKICAgTUFEX0YoMHgwMGIyYWEzZSkgLyogMC4wNDM2MTkzODcgKi8sIE1BRF9GKDB4MDIxNmEyYTIpIC8qIDAuMTMwNTI2MTkyICovLAogICBNQURfRigweDAzNzY4OTYyKSAvKiAwLjIxNjQzOTYxNCAqLywgTUFEX0YoMHgwNGNmYjBlMikgLyogMC4zMDA3MDU4MDAgKi8sCiAgIE1BRF9GKDB4MDYxZjc4YWEpIC8qIDAuMzgyNjgzNDMyICovLCBNQURfRigweDA3NjM1Mjg0KSAvKiAwLjQ2MTc0ODYxMyAqLywKQEAgLTQyOSw3ICs0MzQsNyBAQCBtYWRfZml4ZWRfdCBjb25zdCB3aW5kb3dfbFszNl0gPSB7CiAgKiB3aW5kb3dfc1tpXSA9IHNpbigoUEkgLyAxMikgKiAoaSArIDEvMikpCiAgKi8KIHN0YXRpYwotbWFkX2ZpeGVkX3QgY29uc3Qgd2luZG93X3NbMTJdID0geworbWFkX2NvZWZmX3QgY29uc3Qgd2luZG93X3NbMTJdID0gewogICBNQURfRigweDAyMTZhMmEyKSAvKiAwLjEzMDUyNjE5MiAqLywgTUFEX0YoMHgwNjFmNzhhYSkgLyogMC4zODI2ODM0MzIgKi8sCiAgIE1BRF9GKDB4MDliZDdjYTApIC8qIDAuNjA4NzYxNDI5ICovLCBNQURfRigweDBjYjE5MzQ2KSAvKiAwLjc5MzM1MzM0MCAqLywKICAgTUFEX0YoMHgwZWM4MzVlOCkgLyogMC45MjM4Nzk1MzMgKi8sIE1BRF9GKDB4MGZkY2Y1NDkpIC8qIDAuOTkxNDQ0ODYxICovLApAQCAtNDM4LDYgKzQ0MywxMSBAQCBtYWRfZml4ZWRfdCBjb25zdCB3aW5kb3dfc1sxMl0gPSB7CiAgIE1BRF9GKDB4MDYxZjc4YWEpIC8qIDAuMzgyNjgzNDMyICovLCBNQURfRigweDAyMTZhMmEyKSAvKiAwLjEzMDUyNjE5MiAqLywKIH07CiAKKyNpZmRlZiBGUE1fQVZSMzIKKyMgdW5kZWYgTUFEX0YKKyMgZGVmaW5lIE1BRF9GKHgpCQkoKG1hZF9maXhlZF90KSAoeCMjTCkpCisjZW5kaWYKKwogLyoKICAqIGNvZWZmaWNpZW50cyBmb3IgaW50ZW5zaXR5IHN0ZXJlbyBwcm9jZXNzaW5nCiAgKiBkZXJpdmVkIGZyb20gc2VjdGlvbiAyLjQuMy40LjkuMyBvZiBJU08vSUVDIDExMTcyLTMKQEAgLTg3OSw2ICs4ODksNDIgQEAgdm9pZCBJSUlfZXhwb25lbnRzKHN0cnVjdCBjaGFubmVsIGNvbnN0ICpjaGFubmVsLAogICogTkFNRToJSUlJX3JlcXVhbnRpemUoKQogICogREVTQ1JJUFRJT046CXJlcXVhbnRpemUgb25lIChwb3NpdGl2ZSkgdmFsdWUKICAqLworCisjaWYgMAorLypzdGF0aWMqLworbWFkX2ZpeGVkX3QgSUlJX3JlcXVhbnRpemUodW5zaWduZWQgaW50IHZhbHVlLCBzaWduZWQgaW50IGV4cCkKK3sKKyAgcmVnaXN0ZXIgbWFkX2ZpeGVkX3QgdG1wMiwgdG1wMzsKKyAgbG9uZyBsb25nIHRtcF9kOworCisgIGFzbSAoImFzclx0JTAsICUxLCAyXG4iCisgICAgICAgImxkLndcdCUyLCAlNFslNSA8PCAyXVxuIgorICAgICAgICJzdWJcdCUxLCAlMSwgJTAgPDwgMlxuIgorICAgICAgICJhc3JcdCUzLCAlMiwgN1xuIgorICAgICAgICJhbmRsXHQlMiwgMHg3ZiwgQ09IXG4iCisgICAgICAgImFkZFx0JTAsICUyXG4iCisgICAgICAgImxzbFx0JW0wLCUzLCUwXG4iCisgICAgICAgIm5lZ1x0JTBcbiIKKyAgICAgICAiYXNyXHQlMywlMywlMFxuIgorICAgICAgICJhZGRcdCUyLCAlNiwgJTEgPDwgMlxuIgorICAgICAgICJsZC53XHQlMiwgJTJbMTJdXG4iCisgICAgICAgImNwLndcdCUwLCAwXG4iCisgICAgICAgIm1vdmx0XHQlMywgJW0wXG4iCisgICAgICAgIm11bHMuZFx0JTAsICUzLCAlMlxuIgorICAgICAgICJjcC53XHQlMSwgMFxuIgorICAgICAgICJicmVxXHQwZlxuIgorICAgICAgICJsc3JcdCUwLCAlMCwgMjhcbiIKKyAgICAgICAib3JcdCUzLCAlMCwgJW0wIDw8IDRcbiIKKyAgICAgICAiMDpcbiIKKyAgICAgICA6ICI9JnIiKHRtcF9kKSwgIityIihleHApLCAiPSZyIih0bXAyKSwgIj0mciIodG1wMykKKyAgICAgICA6ICJyIigmcnFfdGFibGUpLCAiciIodmFsdWUpLCAiciIocm9vdF90YWJsZSkpOworCisKKyAgcmV0dXJuIHRtcDM7Cit9CisKKyNlbHNlCisKIHN0YXRpYwogbWFkX2ZpeGVkX3QgSUlJX3JlcXVhbnRpemUodW5zaWduZWQgaW50IHZhbHVlLCBzaWduZWQgaW50IGV4cCkKIHsKQEAgLTkxOCw2ICs5NjQsNyBAQCBtYWRfZml4ZWRfdCBJSUlfcmVxdWFudGl6ZSh1bnNpZ25lZCBpbnQgdmFsdWUsIHNpZ25lZCBpbnQgZXhwKQogCiAgIHJldHVybiBmcmFjID8gbWFkX2ZfbXVsKHJlcXVhbnRpemVkLCByb290X3RhYmxlWzMgKyBmcmFjXSkgOiByZXF1YW50aXplZDsKIH0KKyNlbmRpZgogCiAvKiB3ZSBtdXN0IHRha2UgY2FyZSB0aGF0IHN6ID49IGJpdHMgYW5kIHN6IDwgc2l6ZW9mKGxvbmcpIGxlc3QgYml0cyA9PSAwICovCiAjIGRlZmluZSBNQVNLKGNhY2hlLCBzeiwgYml0cykJXApAQCAtMjA1NCwyNyArMjEwMSw0MiBAQCB2b2lkIGltZGN0MzYobWFkX2ZpeGVkX3QgY29uc3QgWFsxOF0sIG1hZF9maXhlZF90IHhbMzZdKQogfQogIyAgZW5kaWYKIAorCisjaWZkZWYgRlBNX0FWUjMyCisjIHVuZGVmICBtYWRfZl9tdWwKKyMgZGVmaW5lIG1hZF9mX211bCh4LCB5KSBfX2J1aWx0aW5fbXVsc2F0cm5kd2hfdyh4LCB5KQorI2VuZGlmCisKIC8qCiAgKiBOQU1FOglJSUlfaW1kY3RfbCgpCiAgKiBERVNDUklQVElPTjoJcGVyZm9ybSBJTURDVCBhbmQgd2luZG93aW5nIGZvciBsb25nIGJsb2NrcwogICovCiBzdGF0aWMKLXZvaWQgSUlJX2ltZGN0X2wobWFkX2ZpeGVkX3QgY29uc3QgWFsxOF0sIG1hZF9maXhlZF90IHpbMzZdLAordm9pZCBJSUlfaW1kY3RfbChtYWRfZml4ZWRfdCAvKmNvbnN0Ki8gWFsxOF0sIG1hZF9maXhlZF90IHpbMzZdLAogCQkgdW5zaWduZWQgaW50IGJsb2NrX3R5cGUpCiB7CiAgIHVuc2lnbmVkIGludCBpOworICBtYWRfZml4ZWRfdCAqel9wdHI7CisgIG1hZF9jb2VmZl90ICp3X3B0cjsKIAogICAvKiBJTURDVCAqLwogCisjaWZkZWYgRlBNX0FWUjMyCisgIGltZGN0MzZfYXZyMzIoWCwgeik7CisjZWxzZQogICBpbWRjdDM2KFgsIHopOworI2VuZGlmCiAKICAgLyogd2luZG93aW5nICovCiAKKyAgel9wdHIgPSAmelswXTsKKyAgd19wdHIgPSAmd2luZG93X2xbMF07CisKICAgc3dpdGNoIChibG9ja190eXBlKSB7CiAgIGNhc2UgMDogIC8qIG5vcm1hbCB3aW5kb3cgKi8KICMgaWYgZGVmaW5lZChBU09fSU5URVJMRUFWRTEpCiAgICAgewotICAgICAgcmVnaXN0ZXIgbWFkX2ZpeGVkX3QgdG1wMSwgdG1wMjsKKyAgICAgIHJlZ2lzdGVyIG1hZF9jb2VmZl90IHRtcDEsIHRtcDI7CiAKICAgICAgIHRtcDEgPSB3aW5kb3dfbFswXTsKICAgICAgIHRtcDIgPSB3aW5kb3dfbFsxXTsKQEAgLTIwOTEsMTUgKzIxNTMsMTYgQEAgdm9pZCBJSUlfaW1kY3RfbChtYWRfZml4ZWRfdCBjb25zdCBYWzE4XSwgbWFkX2ZpeGVkX3QgelszNl0sCiAgICAgfQogIyBlbGlmIGRlZmluZWQoQVNPX0lOVEVSTEVBVkUyKQogICAgIHsKLSAgICAgIHJlZ2lzdGVyIG1hZF9maXhlZF90IHRtcDEsIHRtcDI7CisgICAgICByZWdpc3RlciBtYWRfZml4ZWRfdCB0bXAxOworICAgICAgcmVnaXN0ZXIgbWFkX2NvZWZmX3QgdG1wMjsKIAotICAgICAgdG1wMSA9IHpbMF07Ci0gICAgICB0bXAyID0gd2luZG93X2xbMF07CisgICAgICB0bXAxID0gKnpfcHRyOworICAgICAgdG1wMiA9ICp3X3B0cisrOwogCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzU7ICsraSkgewotCXpbaV0gPSBtYWRfZl9tdWwodG1wMSwgdG1wMik7Ci0JdG1wMSA9IHpbaSArIDFdOwotCXRtcDIgPSB3aW5kb3dfbFtpICsgMV07CisJKnpfcHRyKysgPSBtYWRfZl9tdWwodG1wMSwgdG1wMik7CisJdG1wMSA9ICp6X3B0cjsKKwl0bXAyID0gKndfcHRyKys7CiAgICAgICB9CiAKICAgICAgIHpbMzVdID0gbWFkX2ZfbXVsKHRtcDEsIHRtcDIpOwpAQCAtMjExOCwyMyArMjE4MSwyOCBAQCB2b2lkIElJSV9pbWRjdF9sKG1hZF9maXhlZF90IGNvbnN0IFhbMThdLCBtYWRfZml4ZWRfdCB6WzM2XSwKIAogICBjYXNlIDE6ICAvKiBzdGFydCBibG9jayAqLwogICAgIGZvciAoaSA9ICAwOyBpIDwgMTg7IGkgKz0gMykgewotICAgICAgeltpICsgMF0gPSBtYWRfZl9tdWwoeltpICsgMF0sIHdpbmRvd19sW2kgKyAwXSk7Ci0gICAgICB6W2kgKyAxXSA9IG1hZF9mX211bCh6W2kgKyAxXSwgd2luZG93X2xbaSArIDFdKTsKLSAgICAgIHpbaSArIDJdID0gbWFkX2ZfbXVsKHpbaSArIDJdLCB3aW5kb3dfbFtpICsgMl0pOworICAgICAgKih6X3B0cisrKSA9IG1hZF9mX211bCgqel9wdHIsICp3X3B0cisrKTsKKyAgICAgICooel9wdHIrKykgPSBtYWRfZl9tdWwoKnpfcHRyLCAqd19wdHIrKyk7CisgICAgICAqKHpfcHRyKyspID0gbWFkX2ZfbXVsKCp6X3B0ciwgKndfcHRyKyspOwogICAgIH0KKyAgICB6X3B0ciArPSA2OworICAgIHdfcHRyID0gJndpbmRvd19zWzZdOwogICAgIC8qICAoaSA9IDE4OyBpIDwgMjQ7ICsraSkgeltpXSB1bmNoYW5nZWQgKi8KLSAgICBmb3IgKGkgPSAyNDsgaSA8IDMwOyArK2kpIHpbaV0gPSBtYWRfZl9tdWwoeltpXSwgd2luZG93X3NbaSAtIDE4XSk7Ci0gICAgZm9yIChpID0gMzA7IGkgPCAzNjsgKytpKSB6W2ldID0gMDsKKyAgICBmb3IgKGkgPSAyNDsgaSA8IDMwOyArK2kpICp6X3B0cisrID0gbWFkX2ZfbXVsKCp6X3B0ciwgKndfcHRyKyspOworICAgIGZvciAoaSA9IDMwOyBpIDwgMzY7ICsraSkgKnpfcHRyKysgPSAwOwogICAgIGJyZWFrOwogCiAgIGNhc2UgMzogIC8qIHN0b3AgYmxvY2sgKi8KLSAgICBmb3IgKGkgPSAgMDsgaSA8ICA2OyArK2kpIHpbaV0gPSAwOwotICAgIGZvciAoaSA9ICA2OyBpIDwgMTI7ICsraSkgeltpXSA9IG1hZF9mX211bCh6W2ldLCB3aW5kb3dfc1tpIC0gNl0pOworICAgIHdfcHRyID0gJndpbmRvd19zWzBdOworICAgIGZvciAoaSA9ICAwOyBpIDwgIDY7ICsraSkgKnpfcHRyKysgPSAwOworICAgIGZvciAoaSA9ICA2OyBpIDwgMTI7ICsraSkgKnpfcHRyKysgPSBtYWRfZl9tdWwoKnpfcHRyLCAqd19wdHIrKyk7CiAgICAgLyogIChpID0gMTI7IGkgPCAxODsgKytpKSB6W2ldIHVuY2hhbmdlZCAqLworICAgIHdfcHRyID0gJndpbmRvd19sWzE4XTsKKyAgICB6X3B0ciArPSA2OwogICAgIGZvciAoaSA9IDE4OyBpIDwgMzY7IGkgKz0gMykgewotICAgICAgeltpICsgMF0gPSBtYWRfZl9tdWwoeltpICsgMF0sIHdpbmRvd19sW2kgKyAwXSk7Ci0gICAgICB6W2kgKyAxXSA9IG1hZF9mX211bCh6W2kgKyAxXSwgd2luZG93X2xbaSArIDFdKTsKLSAgICAgIHpbaSArIDJdID0gbWFkX2ZfbXVsKHpbaSArIDJdLCB3aW5kb3dfbFtpICsgMl0pOworICAgICAgKnpfcHRyKysgPSBtYWRfZl9tdWwoKnpfcHRyLCAqd19wdHIrKyApOworICAgICAgKnpfcHRyKysgPSBtYWRfZl9tdWwoKnpfcHRyLCAqd19wdHIrKyk7CisgICAgICAqel9wdHIrKyA9IG1hZF9mX211bCgqel9wdHIsICp3X3B0cisrKTsKICAgICB9CiAgICAgYnJlYWs7CiAgIH0KQEAgLTIxNDYsMTAgKzIyMTQsMTAgQEAgdm9pZCBJSUlfaW1kY3RfbChtYWRfZml4ZWRfdCBjb25zdCBYWzE4XSwgbWFkX2ZpeGVkX3QgelszNl0sCiAgKiBERVNDUklQVElPTjoJcGVyZm9ybSBJTURDVCBhbmQgd2luZG93aW5nIGZvciBzaG9ydCBibG9ja3MKICAqLwogc3RhdGljCi12b2lkIElJSV9pbWRjdF9zKG1hZF9maXhlZF90IGNvbnN0IFhbMThdLCBtYWRfZml4ZWRfdCB6WzM2XSkKK3ZvaWQgSUlJX2ltZGN0X3MobWFkX2ZpeGVkX3QgLypjb25zdCovIFhbMThdLCBtYWRfZml4ZWRfdCB6WzM2XSkKIHsKICAgbWFkX2ZpeGVkX3QgeVszNl0sICp5cHRyOwotICBtYWRfZml4ZWRfdCBjb25zdCAqd3B0cjsKKyAgbWFkX2NvZWZmX3QgY29uc3QgKndwdHI7CiAgIGludCB3LCBpOwogICByZWdpc3RlciBtYWRfZml4ZWQ2NGhpX3QgaGk7CiAgIHJlZ2lzdGVyIG1hZF9maXhlZDY0bG9fdCBsbzsKQEAgLTIxNTksMTEgKzIyMjcsNTYgQEAgdm9pZCBJSUlfaW1kY3RfcyhtYWRfZml4ZWRfdCBjb25zdCBYWzE4XSwgbWFkX2ZpeGVkX3QgelszNl0pCiAgIHlwdHIgPSAmeVswXTsKIAogICBmb3IgKHcgPSAwOyB3IDwgMzsgKyt3KSB7Ci0gICAgcmVnaXN0ZXIgbWFkX2ZpeGVkX3QgY29uc3QgKCpzKVs2XTsKKyAgICByZWdpc3RlciBtYWRfY29lZmZfdCBjb25zdCAoKnMpWzZdOwogCiAgICAgcyA9IGltZGN0X3M7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgKytpKSB7CisjaWZkZWYgRlBNX0FWUjMyCisgICAgICByZWdpc3RlciBsb25nIGxvbmcgaW50IGFjYywgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDsKKyAgICAgIGFzbSB2b2xhdGlsZSAoImxkLmRcdCUwLCAlNSsrXG4iCisgICAgICAgICAgICAgICAgICAgICJsZC5kXHQlMSwgJTZbMF1cbiIKKyAgICAgICAgICAgICAgICAgICAgImxkLmRcdCUyLCAlNlsyKjRdXG4iCisgICAgICAgICAgICAgICAgICAgICJsZC5kXHQlMywgJTZbNCo0XVxuIgorICAgICAgICAgICAgICAgICAgICAibXVsd2guZFx0JTQsICVtMSwgJW0wOnRcbiIKKyAgICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCU0LCAlMSwgJW0wOmJcbiIKKyAgICAgICAgICAgICAgICAgICAgImxkLndcdCVtMCwgJTUrK1xuIgorICAgICAgICAgICAgICAgICAgICAibWFjd2guZFx0JTQsICVtMiwgJTA6dFxuIgorICAgICAgICAgICAgICAgICAgICAibWFjd2guZFx0JTQsICUyLCAlMDpiXG4iCisgICAgICAgICAgICAgICAgICAgICJtYWN3aC5kXHQlNCwgJW0zLCAlbTA6dFxuIgorICAgICAgICAgICAgICAgICAgICAibWFjd2guZFx0JTQsICUzLCAlbTA6YlxuIgorICAgICAgICAgICAgICAgICAgICAibGQuZFx0JTAsICU1KytcbiIKKyAgICAgICAgICAgICAgICAgICAgInJvbFx0JTRcbiIKKyAgICAgICAgICAgICAgICAgICAgInJvbFx0JW00XG4iCisgICAgICAgICAgICAgICAgICAgIDogIj0mciIodG1wMSksICI9JnIiKHRtcDIpLCAiPSZyIih0bXAzKSwgIj0mciIodG1wNCksCisgICAgICAgICAgICAgICAgICAgICAgIj0mciIoYWNjKSwgIityIihzKQorICAgICAgICAgICAgICAgICAgICA6ICJyIihYKSk7CisKKyAgICAgIGFzbSB2b2xhdGlsZSAoInN0LndcdCUxWzBdLCAlbTBcbiIKKyAgICAgICAgICAgICAgICAgICAgIm5lZ1x0JW0wXG4iCisgICAgICAgICAgICAgICAgICAgICJzdC53XHQlMls1KjRdLCAlbTBcbiIKKyAgICAgICAgICAgICAgICAgICAgOiAiK3IiKGFjYykKKyAgICAgICAgICAgICAgICAgICAgOiAiciIoJnlwdHJbaV0pLCAiciIoJnlwdHJbLWldKSk7CisKKyAgICAgIGFzbSB2b2xhdGlsZSAoIm11bHdoLmRcdCU0LCAlbTEsICVtMDp0XG4iCisgICAgICAgICAgICAgICAgICAgICJtYWN3aC5kXHQlNCwgJTEsICVtMDpiXG4iCisgICAgICAgICAgICAgICAgICAgICJsZC53XHQlbTAsICU1KytcbiIKKyAgICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCU0LCAlbTIsICUwOnRcbiIKKyAgICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCU0LCAlMiwgJTA6YlxuIgorICAgICAgICAgICAgICAgICAgICAibWFjd2guZFx0JTQsICVtMywgJW0wOnRcbiIKKyAgICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCU0LCAlMywgJW0wOmJcbiIKKyAgICAgICAgICAgICAgICAgICAgInJvbFx0JTRcbiIKKyAgICAgICAgICAgICAgICAgICAgInJvbFx0JW00XG4iCisgICAgICAgICAgICAgICAgICAgIDogIityIih0bXAxKSwgIityIih0bXAyKSwgIityIih0bXAzKSwgIityIih0bXA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAiPSZyIihhY2MpLCAiK3IiKHMpCisgICAgICAgICAgICAgICAgICAgIDogInIiKFgpKTsKKworICAgICAgYXNtIHZvbGF0aWxlICggICJzdC53XHQlMVs2KjRdLCAlbTBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAic3Qud1x0JTJbMTEqNF0sICVtMFxuIgorICAgICAgICAgICAgICAgICAgICAgIDo6ICJyIihhY2MpLCAiciIoJnlwdHJbaV0pLCAiciIoJnlwdHJbLWldKSk7CisKKworI2Vsc2UKICAgICAgIE1BRF9GX01MMChoaSwgbG8sIFhbMF0sICgqcylbMF0pOwogICAgICAgTUFEX0ZfTUxBKGhpLCBsbywgWFsxXSwgKCpzKVsxXSk7CiAgICAgICBNQURfRl9NTEEoaGksIGxvLCBYWzJdLCAoKnMpWzJdKTsKQEAgLTIxODcsNiArMjMwMCw3IEBAIHZvaWQgSUlJX2ltZGN0X3MobWFkX2ZpeGVkX3QgY29uc3QgWFsxOF0sIG1hZF9maXhlZF90IHpbMzZdKQogICAgICAgeXB0clsxMSAtIGldID0geXB0cltpICsgNl07CiAKICAgICAgICsrczsKKyNlbmRpZgogICAgIH0KIAogICAgIHlwdHIgKz0gMTI7CkBAIC0yMTk4LDYgKzIzMTIsMTk2IEBAIHZvaWQgSUlJX2ltZGN0X3MobWFkX2ZpeGVkX3QgY29uc3QgWFsxOF0sIG1hZF9maXhlZF90IHpbMzZdKQogICB5cHRyID0gJnlbMF07CiAgIHdwdHIgPSAmd2luZG93X3NbMF07CiAKKyNpZmRlZiBGUE1fQVZSMzIKKyAgLyogICAgelswXSA9IDA7CisgICAgICAgIHpbMV0gPSAwOworICAgICAgICB6WzJdID0gMDsKKyAgICAgICAgelszXSA9IDA7CisgICAgICAgIHpbNF0gPSAwOworICAgICAgICB6WzVdID0gMDsKKyAgICAgICAgelszMF0gPSAwOworICAgICAgICB6WzMxXSA9IDA7CisgICAgICAgIHpbMzJdID0gMDsKKyAgICAgICAgelszM10gPSAwOworICAgICAgICB6WzM0XSA9IDA7CisgICAgICAgIHpbMzVdID0gMDsKKyAgKi8KKyAgeworICAgIHJlZ2lzdGVyIGxvbmcgbG9uZyBpbnQgdG1wLCB0bXAyLCB0bXAzLCB3MDEyMywgdzQ1NjcsIHc4OTEwMTE7CisgICAgYXNtIHZvbGF0aWxlICgibW92XHQlbTAsIDBcbiIKKyAgICAgICAgICAgICAgICAgICJtb3ZcdCUwLCAlbTBcbiIKKyAgICAgICAgICAgICAgICAgICJzdC5kXHQlMVswXSwgJTBcbiIKKyAgICAgICAgICAgICAgICAgICJzdC5kXHQlMVsyKjRdLCAlMFxuIgorICAgICAgICAgICAgICAgICAgInN0LmRcdCUxWzQqNF0sICUwXG4iCisgICAgICAgICAgICAgICAgICAic3QuZFx0JTFbMzAqNF0sICUwXG4iCisgICAgICAgICAgICAgICAgICAic3QuZFx0JTFbMzIqNF0sICUwXG4iCisgICAgICAgICAgICAgICAgICAic3QuZFx0JTFbMzQqNF0sICUwXG4iCisgICAgICAgICAgICAgICAgICA6ICI9JnIiKHRtcCkgOiAiciIoeikpOworCisKKworICAgIC8qCisgICAgICAgICAgICB6WzZdID0gbWFkX2ZfbXVsKHlwdHIgWzBdLCB3cHRyWzBdKTsKKyAgICAgICAgICAgIHpbN10gPSBtYWRfZl9tdWwoeXB0ciBbMV0sIHdwdHJbMV0pOworICAgICAgICAgICAgels4XSA9IG1hZF9mX211bCh5cHRyIFsyXSwgd3B0clsyXSk7CisgICAgICAgICAgICB6WzldID0gbWFkX2ZfbXVsKHlwdHIgWzNdLCB3cHRyWzNdKTsKKyAgICAgICAgICAgIHpbMTBdID0gbWFkX2ZfbXVsKHlwdHJbNF0sIHdwdHJbNF0pOworICAgICAgICAgICAgelsxMV0gPSBtYWRfZl9tdWwoeXB0cls1XSwgd3B0cls1XSk7CisgICAgICAgICAgICB6WzI0XSA9IG1hZF9mX211bCh5cHRyIFszMF0sIHdwdHJbNl0pOworICAgICAgICAgICAgelsyNV0gPSBtYWRfZl9tdWwoeXB0ciBbMzFdLCB3cHRyWzddKTsKKyAgICAgICAgICAgIHpbMjZdID0gbWFkX2ZfbXVsKHlwdHIgWzMyXSwgd3B0cls4XSk7CisgICAgICAgICAgICB6WzI3XSA9IG1hZF9mX211bCh5cHRyIFszM10sIHdwdHJbOV0pOworICAgICAgICAgICAgelsyOF0gPSBtYWRfZl9tdWwoeXB0clszNF0sIHdwdHJbMTBdKTsKKyAgICAgICAgICAgIHpbMjldID0gbWFkX2ZfbXVsKHlwdHJbMzVdLCB3cHRyWzExXSk7CisgICAgKi8KKworCisgICAgYXNtIHZvbGF0aWxlICgibGQuZFx0JTAsICU1WzAqNF1cbiIKKyAgICAgICAgICAgICAgICAgICJsZC5kXHQlMywgJTZbMCo0XVxuIgorICAgICAgICAgICAgICAgICAgImxkLmRcdCUxLCAlNVsyKjRdXG4iCisgICAgICAgICAgICAgICAgICAibGQuZFx0JTIsICU1WzQqNF1cbiIKKyAgICAgICAgICAgICAgICAgICJtdWxzYXRybmR3aC53XHQlbTMsICVtMywgJW0wOnRcbiIKKyAgICAgICAgICAgICAgICAgICJtdWxzYXRybmR3aC53XHQlMywgJTMsICVtMDpiXG4iCisgICAgICAgICAgICAgICAgICAibGQuZFx0JTQsICU2WzIqNF1cbiIKKyAgICAgICAgICAgICAgICAgICJzdC5kXHQlN1s2KjRdLCAlM1xuIgorCisgICAgICAgICAgICAgICAgICAibXVsc2F0cm5kd2gud1x0JW00LCAlbTQsICUwOnRcbiIKKyAgICAgICAgICAgICAgICAgICJtdWxzYXRybmR3aC53XHQlNCwgJTQsICUwOmJcbiIKKyAgICAgICAgICAgICAgICAgICJsZC5kXHQlMywgJTZbNCo0XVxuIgorICAgICAgICAgICAgICAgICAgInN0LmRcdCU3WzgqNF0sICU0XG4iCisKKyAgICAgICAgICAgICAgICAgICJtdWxzYXRybmR3aC53XHQlbTMsICVtMywgJW0xOnRcbiIKKyAgICAgICAgICAgICAgICAgICJtdWxzYXRybmR3aC53XHQlMywgJTMsICVtMTpiXG4iCisgICAgICAgICAgICAgICAgICAibGQuZFx0JTQsICU2WzMwKjRdXG4iCisgICAgICAgICAgICAgICAgICAic3QuZFx0JTdbMTAqNF0sICUzXG4iCisKKyAgICAgICAgICAgICAgICAgICJtdWxzYXRybmR3aC53XHQlbTQsICVtNCwgJTE6dFxuIgorICAgICAgICAgICAgICAgICAgIm11bHNhdHJuZHdoLndcdCU0LCAlNCwgJTE6YlxuIgorICAgICAgICAgICAgICAgICAgImxkLmRcdCUzLCAlNlszMio0XVxuIgorICAgICAgICAgICAgICAgICAgInN0LmRcdCU3WzI0KjRdLCAlNFxuIgorCisgICAgICAgICAgICAgICAgICAibXVsc2F0cm5kd2gud1x0JW0zLCAlbTMsICVtMjp0XG4iCisgICAgICAgICAgICAgICAgICAibXVsc2F0cm5kd2gud1x0JTMsICUzLCAlbTI6YlxuIgorICAgICAgICAgICAgICAgICAgImxkLmRcdCU0LCAlNlszNCo0XVxuIgorICAgICAgICAgICAgICAgICAgInN0LmRcdCU3WzI2KjRdLCAlM1xuIgorCisgICAgICAgICAgICAgICAgICAibXVsc2F0cm5kd2gud1x0JW00LCAlbTQsICUyOnRcbiIKKyAgICAgICAgICAgICAgICAgICJtdWxzYXRybmR3aC53XHQlNCwgJTQsICUyOmJcbiIKKyAgICAgICAgICAgICAgICAgICJzdC5kXHQlN1syOCo0XSwgJTRcbiIKKworICAgICAgICAgICAgICAgICAgOiAiPSZyIih3MDEyMyksICI9JnIiKHc0NTY3KSwgIj0mciIodzg5MTAxMSksICI9JnIiKHRtcCksICI9JnIiKHRtcDIpCisgICAgICAgICAgICAgICAgICA6ICJyIih3cHRyKSwgInIiKHlwdHIpLCAiciIoeikpOworICAgIC8qCisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0cls2XSwgd3B0cls2XSk7CisgICAgICAgTUFEX0ZfTUxBKGhpLCBsbywgeXB0clsxMl0sIHdwdHJbMF0pOworICAgICAgIHpbMTJdID0gTUFEX0ZfTUxaKGhpLCBsbyk7CisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0cls3XSwgd3B0cls3XSk7CisgICAgICAgTUFEX0ZfTUxBKGhpLCBsbywgeXB0clsxM10sIHdwdHJbMV0pOworICAgICAgIHpbMTNdID0gTUFEX0ZfTUxaKGhpLCBsbyk7CisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0cls4XSwgd3B0cls4XSk7CisgICAgICAgTUFEX0ZfTUxBKGhpLCBsbywgeXB0clsxNF0sIHdwdHJbMl0pOworICAgICAgIHpbMTRdID0gTUFEX0ZfTUxaKGhpLCBsbyk7CisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0cls5XSwgd3B0cls5XSk7CisgICAgICAgTUFEX0ZfTUxBKGhpLCBsbywgeXB0clsxNV0sIHdwdHJbM10pOworICAgICAgIHpbMTVdID0gTUFEX0ZfTUxaKGhpLCBsbyk7CisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0clsxMF0sIHdwdHJbMTBdKTsKKyAgICAgICBNQURfRl9NTEEoaGksIGxvLCB5cHRyWzE2XSwgd3B0cls0XSk7CisgICAgICAgelsxNl0gPSBNQURfRl9NTFooaGksIGxvKTsKKyAgICAgICBNQURfRl9NTDAoaGksIGxvLCB5cHRyWzExXSwgd3B0clsxMV0pOworICAgICAgIE1BRF9GX01MQShoaSwgbG8sIHlwdHJbMTddLCB3cHRyWzVdKTsKKyAgICAgICB6WzE3XSA9IE1BRF9GX01MWihoaSwgbG8pOworCisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0clsxOF0sIHdwdHJbNl0pOworICAgICAgIE1BRF9GX01MQShoaSwgbG8sIHlwdHJbMjRdLCB3cHRyWzBdKTsKKyAgICAgICB6WzE4XSA9IE1BRF9GX01MWihoaSwgbG8pOworICAgICAgIE1BRF9GX01MMChoaSwgbG8sIHlwdHJbMTldLCB3cHRyWzddKTsKKyAgICAgICBNQURfRl9NTEEoaGksIGxvLCB5cHRyWzI1XSwgd3B0clsxXSk7CisgICAgICAgelsxOV0gPSBNQURfRl9NTFooaGksIGxvKTsKKyAgICAgICBNQURfRl9NTDAoaGksIGxvLCB5cHRyWzIwXSwgd3B0cls4XSk7CisgICAgICAgTUFEX0ZfTUxBKGhpLCBsbywgeXB0clsyNl0sIHdwdHJbMl0pOworICAgICAgIHpbMjBdID0gTUFEX0ZfTUxaKGhpLCBsbyk7CisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0clsyMV0sIHdwdHJbOV0pOworICAgICAgIE1BRF9GX01MQShoaSwgbG8sIHlwdHJbMjddLCB3cHRyWzNdKTsKKyAgICAgICB6WzIxXSA9IE1BRF9GX01MWihoaSwgbG8pOworICAgICAgIE1BRF9GX01MMChoaSwgbG8sIHlwdHJbMjJdLCB3cHRyWzEwXSk7CisgICAgICAgTUFEX0ZfTUxBKGhpLCBsbywgeXB0clsyOF0sIHdwdHJbNF0pOworICAgICAgIHpbMjJdID0gTUFEX0ZfTUxaKGhpLCBsbyk7CisgICAgICAgTUFEX0ZfTUwwKGhpLCBsbywgeXB0clsyM10sIHdwdHJbMTFdKTsKKyAgICAgICBNQURfRl9NTEEoaGksIGxvLCB5cHRyWzI5XSwgd3B0cls1XSk7CisgICAgICAgelsyM10gPSBNQURfRl9NTFooaGksIGxvKTsqLworCisKKyAgICBhc20gdm9sYXRpbGUgKCJsZC5kXHQlMCwgJTNbNio0XVxuIgorICAgICAgICAgICAgICAgICAgImxkLmRcdCUxLCAlM1sxMio0XVxuIgorICAgICAgICAgICAgICAgICAgIm11bHdoLmRcdCUyLCAlbTAsICU1OnRcbiIKKyAgICAgICAgICAgICAgICAgICJtYWN3aC5kXHQlMiwgJW0xLCAlbTQ6dFxuIgorICAgICAgICAgICAgICAgICAgIm11bHdoLmRcdCUwLCAlMCwgJTU6YlxuIgorICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCUwLCAlMSwgJW00OmJcbiIKKyAgICAgICAgICAgICAgICAgICJsc2xcdCVtMiwgMVxuIgorICAgICAgICAgICAgICAgICAgImxzbFx0JTIsICVtMCwgMVxuIgorICAgICAgICAgICAgICAgICAgInN0LmRcdCU2WzEyKjRdLCAlMlxuIgorCisgICAgICAgICAgICAgICAgICAibGQuZFx0JTAsICUzWzE4KjRdXG4iCisgICAgICAgICAgICAgICAgICAibGQuZFx0JTEsICUzWzI0KjRdXG4iCisgICAgICAgICAgICAgICAgICAibXVsd2guZFx0JTIsICVtMCwgJTU6dFxuIgorICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCUyLCAlbTEsICVtNDp0XG4iCisgICAgICAgICAgICAgICAgICAibXVsd2guZFx0JTAsICUwLCAlNTpiXG4iCisgICAgICAgICAgICAgICAgICAibWFjd2guZFx0JTAsICUxLCAlbTQ6YlxuIgorICAgICAgICAgICAgICAgICAgImxzbFx0JW0yLCAxXG4iCisgICAgICAgICAgICAgICAgICAibHNsXHQlMiwgJW0wLCAxXG4iCisgICAgICAgICAgICAgICAgICAic3QuZFx0JTZbMTgqNF0sICUyXG4iCisKKyAgICAgICAgICAgICAgICAgIDogIj0mciIodG1wKSwgIj0mciIodG1wMiksICI9JnIiKHRtcDMpCisgICAgICAgICAgICAgICAgICA6ICJyIih5cHRyKSwgInIiKHcwMTIzKSwgInIiKHc0NTY3KSwgInIiKHopKTsKKworICAgIGFzbSB2b2xhdGlsZSAoImxkLmRcdCUwLCAlM1s4KjRdXG4iCisgICAgICAgICAgICAgICAgICAibGQuZFx0JTEsICUzWzE0KjRdXG4iCisgICAgICAgICAgICAgICAgICAibXVsd2guZFx0JTIsICVtMCwgJW01OnRcbiIKKyAgICAgICAgICAgICAgICAgICJtYWN3aC5kXHQlMiwgJW0xLCAlNDp0XG4iCisgICAgICAgICAgICAgICAgICAibXVsd2guZFx0JTAsICUwLCAlbTU6YlxuIgorICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCUwLCAlMSwgJTQ6YlxuIgorICAgICAgICAgICAgICAgICAgImxzbFx0JW0yLCAxXG4iCisgICAgICAgICAgICAgICAgICAibHNsXHQlMiwgJW0wLCAxXG4iCisgICAgICAgICAgICAgICAgICAic3QuZFx0JTZbMTQqNF0sICUyXG4iCisKKyAgICAgICAgICAgICAgICAgICJsZC5kXHQlMCwgJTNbMjAqNF1cbiIKKyAgICAgICAgICAgICAgICAgICJsZC5kXHQlMSwgJTNbMjYqNF1cbiIKKyAgICAgICAgICAgICAgICAgICJtdWx3aC5kXHQlMiwgJW0wLCAlbTU6dFxuIgorICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCUyLCAlbTEsICU0OnRcbiIKKyAgICAgICAgICAgICAgICAgICJtdWx3aC5kXHQlMCwgJTAsICVtNTpiXG4iCisgICAgICAgICAgICAgICAgICAibWFjd2guZFx0JTAsICUxLCAlNDpiXG4iCisgICAgICAgICAgICAgICAgICAibHNsXHQlbTIsIDFcbiIKKyAgICAgICAgICAgICAgICAgICJsc2xcdCUyLCAlbTAsIDFcbiIKKyAgICAgICAgICAgICAgICAgICJzdC5kXHQlNlsyMCo0XSwgJTJcbiIKKworICAgICAgICAgICAgICAgICAgOiAiPSZyIih0bXApLCAiPSZyIih0bXAyKSwgIj0mciIodG1wMykKKyAgICAgICAgICAgICAgICAgIDogInIiKHlwdHIpLCAiciIodzAxMjMpLCAiciIodzg5MTAxMSksICJyIih6KSk7CisKKyAgICBhc20gdm9sYXRpbGUgKCJsZC5kXHQlMCwgJTNbMTAqNF1cbiIKKyAgICAgICAgICAgICAgICAgICJsZC5kXHQlMSwgJTNbMTYqNF1cbiIKKyAgICAgICAgICAgICAgICAgICJtdWx3aC5kXHQlMiwgJW0wLCAlNTp0XG4iCisgICAgICAgICAgICAgICAgICAibWFjd2guZFx0JTIsICVtMSwgJW00OnRcbiIKKyAgICAgICAgICAgICAgICAgICJtdWx3aC5kXHQlMCwgJTAsICU1OmJcbiIKKyAgICAgICAgICAgICAgICAgICJtYWN3aC5kXHQlMCwgJTEsICVtNDpiXG4iCisgICAgICAgICAgICAgICAgICAibHNsXHQlbTIsIDFcbiIKKyAgICAgICAgICAgICAgICAgICJsc2xcdCUyLCAlbTAsIDFcbiIKKyAgICAgICAgICAgICAgICAgICJzdC5kXHQlNlsxNio0XSwgJTJcbiIKKworICAgICAgICAgICAgICAgICAgImxkLmRcdCUwLCAlM1syMio0XVxuIgorICAgICAgICAgICAgICAgICAgImxkLmRcdCUxLCAlM1syOCo0XVxuIgorICAgICAgICAgICAgICAgICAgIm11bHdoLmRcdCUyLCAlbTAsICU1OnRcbiIKKyAgICAgICAgICAgICAgICAgICJtYWN3aC5kXHQlMiwgJW0xLCAlbTQ6dFxuIgorICAgICAgICAgICAgICAgICAgIm11bHdoLmRcdCUwLCAlMCwgJTU6YlxuIgorICAgICAgICAgICAgICAgICAgIm1hY3doLmRcdCUwLCAlMSwgJW00OmJcbiIKKyAgICAgICAgICAgICAgICAgICJsc2xcdCVtMiwgMVxuIgorICAgICAgICAgICAgICAgICAgImxzbFx0JTIsICVtMCwgMVxuIgorICAgICAgICAgICAgICAgICAgInN0LmRcdCU2WzIyKjRdLCAlMlxuIgorCisgICAgICAgICAgICAgICAgICA6ICI9JnIiKHRtcCksICI9JnIiKHRtcDIpLCAiPSZyIih0bXAzKQorICAgICAgICAgICAgICAgICAgOiAiciIoeXB0ciksICJyIih3NDU2NyksICJyIih3ODkxMDExKSwgInIiKHopKTsKKworICB9CisjZWxzZQogICBmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7CiAgICAgeltpICsgIDBdID0gMDsKICAgICB6W2kgKyAgNl0gPSBtYWRfZl9tdWwoeXB0clsgMCArIDBdLCB3cHRyWzBdKTsKQEAgLTIyMTgsOCArMjUyMiwxNSBAQCB2b2lkIElJSV9pbWRjdF9zKG1hZF9maXhlZF90IGNvbnN0IFhbMThdLCBtYWRfZml4ZWRfdCB6WzM2XSkKICAgICArK3lwdHI7CiAgICAgKyt3cHRyOwogICB9CisjZW5kaWYKIH0KIAorI2lmZGVmIEZQTV9BVlIzMgorIyB1bmRlZiAgbWFkX2ZfbXVsCisjIGRlZmluZSBtYWRfZl9tdWwoeCwgeSkgKCgoKHgpICsgKDFMIDw8IDExKSkgPj4gMTIpICogIFwKKwkJCQkgKCgoeSkgKyAoMUwgPDwgMTUpKSA+PiAxNikpCisjZW5kaWYKKwogLyoKICAqIE5BTUU6CUlJSV9vdmVybGFwKCkKICAqIERFU0NSSVBUSU9OOglwZXJmb3JtIG92ZXJsYXAtYWRkIG9mIHdpbmRvd2VkIElNRENUIG91dHB1dHMKZGlmZiAtLWdpdCBhL3N5bnRoLmMgYi9zeW50aC5jCmluZGV4IDFkMjhkNDMuLmY0MmQ0OWIgMTAwNjQ0Ci0tLSBhL3N5bnRoLmMKKysrIGIvc3ludGguYwpAQCAtMjksMjAgKzI5LDYgQEAKICMgaW5jbHVkZSAiZnJhbWUuaCIKICMgaW5jbHVkZSAic3ludGguaCIKIAotLyoKLSAqIE5BTUU6CXN5bnRoLT5pbml0KCkKLSAqIERFU0NSSVBUSU9OOglpbml0aWFsaXplIHN5bnRoIHN0cnVjdAotICovCi12b2lkIG1hZF9zeW50aF9pbml0KHN0cnVjdCBtYWRfc3ludGggKnN5bnRoKQotewotICBtYWRfc3ludGhfbXV0ZShzeW50aCk7Ci0KLSAgc3ludGgtPnBoYXNlID0gMDsKLQotICBzeW50aC0+cGNtLnNhbXBsZXJhdGUgPSAwOwotICBzeW50aC0+cGNtLmNoYW5uZWxzICAgPSAwOwotICBzeW50aC0+cGNtLmxlbmd0aCAgICAgPSAwOwotfQogCiAvKgogICogTkFNRToJc3ludGgtPm11dGUoKQpAQCAtODgsNiArNzQsMTAgQEAgdm9pZCBtYWRfc3ludGhfbXV0ZShzdHJ1Y3QgbWFkX3N5bnRoICpzeW50aCkKIAogLyogRlBNX0RFRkFVTFQgd2l0aG91dCBPUFRfU1NPIHdpbGwgYWN0dWFsbHkgbG9zZSBhY2N1cmFjeSBhbmQgcGVyZm9ybWFuY2UgKi8KIAorIyBpZiBkZWZpbmVkKEZQTV9BVlIzMikKKyMgIGRlZmluZSBPUFRfU1NPCisjIGVuZGlmCisKICMgaWYgZGVmaW5lZChGUE1fREVGQVVMVCkgJiYgIWRlZmluZWQoT1BUX1NTTykKICMgIGRlZmluZSBPUFRfU1NPCiAjIGVuZGlmCkBAIC01MjIsOSArNTEyLDE1IEBAIHZvaWQgZGN0MzIobWFkX2ZpeGVkX3QgY29uc3QgaW5bMzJdLCB1bnNpZ25lZCBpbnQgc2xvdCwKICMgIGVuZGlmCiAjICBkZWZpbmUgTUwwKGhpLCBsbywgeCwgeSkJKChsbykgID0gKHgpICogKHkpKQogIyAgZGVmaW5lIE1MQShoaSwgbG8sIHgsIHkpCSgobG8pICs9ICh4KSAqICh5KSkKLSMgIGRlZmluZSBNTE4oaGksIGxvKQkJKChsbykgID0gLShsbykpCi0jICBkZWZpbmUgTUxaKGhpLCBsbykJCSgodm9pZCkgKGhpKSwgKG1hZF9maXhlZF90KSAobG8pKQotIyAgZGVmaW5lIFNISUZUKHgpCQkoKHgpID4+IDIpCisjICBpZiBkZWZpbmVkKEZQTV9BVlIzMikKKyMgICBkZWZpbmUgTUxOKGhpLCBsbykJCU1BRF9GX01MTigoaGkpLCAobG8pKQorIyAgIGRlZmluZSBNTFooaGksIGxvKQkJKGhpKQorIyAgIGRlZmluZSBTSElGVCh4KQkJKCh4KSA8PCAyKQorIyAgZWxzZQorIyAgIGRlZmluZSBNTE4oaGksIGxvKQkJKChsbykgID0gLShsbykpCisjICAgZGVmaW5lIE1MWihoaSwgbG8pCQkoKHZvaWQpIChoaSksIChtYWRfZml4ZWRfdCkgKGxvKSkKKyMgICBkZWZpbmUgU0hJRlQoeCkJCSgoeCkgPj4gMikKKyMgIGVuZGlmCiAjICBkZWZpbmUgUFJFU0hJRlQoeCkJCSgoTUFEX0YoeCkgKyAoMUwgPDwgMTMpKSA+PiAxNCkKICMgZWxzZQogIyAgZGVmaW5lIE1MMChoaSwgbG8sIHgsIHkpCU1BRF9GX01MMCgoaGkpLCAobG8pLCAoeCksICh5KSkKQEAgLTU0MSwxMSArNTM3LDU0IEBAIHZvaWQgZGN0MzIobWFkX2ZpeGVkX3QgY29uc3QgaW5bMzJdLCB1bnNpZ25lZCBpbnQgc2xvdCwKICMgIGVuZGlmCiAjIGVuZGlmCiAKKy8qCisgKiBOQU1FOglzeW50aC0+aW5pdCgpCisgKiBERVNDUklQVElPTjoJaW5pdGlhbGl6ZSBzeW50aCBzdHJ1Y3QKKyAqLworCisjaWZkZWYgRlBNX0FWUjMyCitzaG9ydCBEbW9kWzE3XVszM107CisjZW5kaWYKKwogc3RhdGljCisjaWZkZWYgRlBNX0FWUjMyCitzaG9ydCBjb25zdCBEWzE3XVszMl0gPSB7CisjZWxzZQogbWFkX2ZpeGVkX3QgY29uc3QgRFsxN11bMzJdID0geworI2VuZGlmCiAjIGluY2x1ZGUgIkQuZGF0IgogfTsKIAordm9pZCBtYWRfc3ludGhfaW5pdChzdHJ1Y3QgbWFkX3N5bnRoICpzeW50aCkKK3sKKworICBtYWRfc3ludGhfbXV0ZShzeW50aCk7CisKKyAgc3ludGgtPnBoYXNlID0gMDsKKworICBzeW50aC0+cGNtLnNhbXBsZXJhdGUgPSAwOworICBzeW50aC0+cGNtLmNoYW5uZWxzICAgPSAwOworICBzeW50aC0+cGNtLmxlbmd0aCAgICAgPSAwOworCisjaWZkZWYgRlBNX0FWUjMyCisgIHsKKyAgICBpbnQgaSwgajsKKyAgICBmb3IgKCBpID0gMDsgaSA8IDE3OyBpKysgKXsKKyAgICAgIGZvciAoIGogPSAwOyBqIDwgMzI7IGorKyApeworICAgICAgICBpZiAoIGogJiAxICl7CisgICAgICAgICAgRG1vZFtpXVsxNyArIChqID4+IDEpXT0gRFtpXVtqXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBEbW9kW2ldWyhqID4+IDEpXT0gRFtpXVtqXTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBEbW9kW2ldWzE2XT0gRG1vZFtpXVsxNis4XTsKKyAgICB9CisgIH0KKyNlbmRpZgorCit9CisKICMgaWYgZGVmaW5lZChBU09fU1lOVEgpCiB2b2lkIHN5bnRoX2Z1bGwoc3RydWN0IG1hZF9zeW50aCAqLCBzdHJ1Y3QgbWFkX2ZyYW1lIGNvbnN0ICosCiAJCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKQEAgLTU2MCw5ICs1OTksMTMgQEAgdm9pZCBzeW50aF9mdWxsKHN0cnVjdCBtYWRfc3ludGggKnN5bnRoLCBzdHJ1Y3QgbWFkX2ZyYW1lIGNvbnN0ICpmcmFtZSwKIHsKICAgdW5zaWduZWQgaW50IHBoYXNlLCBjaCwgcywgc2IsIHBlLCBwbzsKICAgbWFkX2ZpeGVkX3QgKnBjbTEsICpwY20yLCAoKmZpbHRlcilbMl1bMl1bMTZdWzhdOwotICBtYWRfZml4ZWRfdCBjb25zdCAoKnNic2FtcGxlKVszNl1bMzJdOworICBtYWRfZml4ZWRfdCAvKmNvbnN0Ki8gKCpzYnNhbXBsZSlbMzZdWzMyXTsKICAgcmVnaXN0ZXIgbWFkX2ZpeGVkX3QgKCpmZSlbOF0sICgqZngpWzhdLCAoKmZvKVs4XTsKKyNpZmRlZiBGUE1fQVZSMzIKKyAgcmVnaXN0ZXIgc2hvcnQgY29uc3QgKCpEcHRyKVszMl0sICpwdHI7CisjZWxzZQogICByZWdpc3RlciBtYWRfZml4ZWRfdCBjb25zdCAoKkRwdHIpWzMyXSwgKnB0cjsKKyNlbmRpZgogICByZWdpc3RlciBtYWRfZml4ZWQ2NGhpX3QgaGk7CiAgIHJlZ2lzdGVyIG1hZF9maXhlZDY0bG9fdCBsbzsKIApAQCAtNTczLDYgKzYxNiwyMCBAQCB2b2lkIHN5bnRoX2Z1bGwoc3RydWN0IG1hZF9zeW50aCAqc3ludGgsIHN0cnVjdCBtYWRfZnJhbWUgY29uc3QgKmZyYW1lLAogICAgIHBjbTEgICAgID0gc3ludGgtPnBjbS5zYW1wbGVzW2NoXTsKIAogICAgIGZvciAocyA9IDA7IHMgPCBuczsgKytzKSB7CisjICBpZmRlZiBGUE1fQVZSMzIKKy8qCisgIGludCBpOworICBmb3IgKCBpID0gMDsgaSA8IDMyOyBpKysgKXsKKyAgKCpzYnNhbXBsZSlbc11baV0gPSAoKCpzYnNhbXBsZSlbc11baV0gKyAoMSA8PCAxMykpICYgMHhGRkZGQzAwMDsKKyAgfQorKi8KKyAgICAgIGRjdDMyX2F2cjMyKCgqc2JzYW1wbGUpW3NdLCBwaGFzZSA+PiAxLAorCSAgICAoKmZpbHRlcilbMF1bcGhhc2UgJiAxXSwgKCpmaWx0ZXIpWzFdW3BoYXNlICYgMV0pOworICAgICAgLyogICAgICBwcmludGYoImRjdDMyOiAlZFxuIiwgR0VUX0NZQ0xFUyk7Ki8KKyAgICAgIHBjbTEgPSBzeW50aF9hdnIzMihwaGFzZSwgKG1hZF9maXhlZF90ICopZmlsdGVyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgcGNtMSwgKHNob3J0ICopJkRtb2RbMF0pOworICAgICAgLyogICAgICBwcmludGYoInN5bnRoX3dpbmRvdzogJWRcbiIsIEdFVF9DWUNMRVMpOyovCisjICBlbHNlCiAgICAgICBkY3QzMigoKnNic2FtcGxlKVtzXSwgcGhhc2UgPj4gMSwKIAkgICAgKCpmaWx0ZXIpWzBdW3BoYXNlICYgMV0sICgqZmlsdGVyKVsxXVtwaGFzZSAmIDFdKTsKIApAQCAtNjc5LDYgKzczNiw3IEBAIHZvaWQgc3ludGhfZnVsbChzdHJ1Y3QgbWFkX3N5bnRoICpzeW50aCwgc3RydWN0IG1hZF9mcmFtZSBjb25zdCAqZnJhbWUsCiAgICAgICBNTEEoaGksIGxvLCAoKmZvKVs3XSwgcHRyWyAyXSk7CiAKICAgICAgICpwY20xID0gU0hJRlQoLU1MWihoaSwgbG8pKTsKKyMgIGVuZGlmCiAgICAgICBwY20xICs9IDE2OwogCiAgICAgICBwaGFzZSA9IChwaGFzZSArIDEpICUgMTY7CmRpZmYgLS1naXQgYS9zeW50aF9hdnIzMi5TIGIvc3ludGhfYXZyMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDEwNzdiCi0tLSAvZGV2L251bGwKKysrIGIvc3ludGhfYXZyMzIuUwpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAgIE9wdGltaXplZCBmdW5jdGlvbiBmb3Igc3BlZWRpbmcgdXAgc3ludGhlc2lzIGZpbHRlcgorICAgaW4gTVBFRyBBdWRpbyBEZWNvZGluZy4KKyAgIENvcHlyaWdodCAyMDAzLTIwMDYgQXRtZWwgQ29ycG9yYXRpb24uCisKKyAgIFdyaXR0ZW4gYnkgUm9ubnkgUGVkZXJzZW4gYW5kIExhcnMgRXZlbiBBbG3lcywgQXRtZWwgTm9yd2F5CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gKi8KKworCisvKiAqKioqKioqKioqKioqKioqKgorICAgRGVmaW5pbmcgbWFjcm9zCisgICAqKioqKioqKioqKioqKioqKiAqLworCisJLm1hY3JvCXdpbmRvd18xCWYsIHB0ciwgYWNjLCBwdHJfb2Zmc2V0LCBtdWwsIHRtcDFfbG8sIHRtcDFfaGksIHRtcDJfbG8sIHRtcDJfaGksIHRtcDNfbG8sIHRtcDNfaGkKKwlsZC5kCQlcdG1wMV9sbywgXGZbMCo0XQkJCS8qIHRtcDEgPSB7IGZbMF0sIGZbMV0gfSAqLworCWxkLncJCVx0bXAyX2xvLCBccHRyWzAqMitccHRyX29mZnNldCoyXQkvKiB0bXAyX2xvID0geyBwdHJbMF0sIHB0clsxXSB9Ki8KKwlsZC5kCQlcdG1wM19sbywgXGZbNio0XQkJCS8qIHRtcDMgPSB7IGZbNl0sIGZbN10gfSAqLworCWxkLncJCVx0bXAyX2hpLCBccHRyWzYqMitccHRyX29mZnNldCoyXQkvKiB0bXAyX2hpID0geyBwdHJbNl0sIHB0cls3XSB9Ki8KKwkuaWYgXG11bAorCW11bHdoLmQJCVxhY2MsIFx0bXAxX2hpLCBcdG1wMl9sbzp0CQkvKiBmWzBdICogcHRyWzBdKi8KKwkuZWxzZQorCW1hY3doLmQJCVxhY2MsIFx0bXAxX2hpLCBcdG1wMl9sbzp0CQkvKiBmWzBdICogcHRyWzBdKi8KKwkuZW5kaWYKKwltYWN3aC5kCQlcYWNjLCBcdG1wM19sbywgXHRtcDJfbG86YgkJLyogZls3XSAqIHB0clsxXSovCisJbGQudwkJXHRtcDJfbG8sIFxwdHJbMioyK1xwdHJfb2Zmc2V0KjJdCS8qIHRtcDJfbG8gPSB7IHB0clsyXSwgcHRyWzNdIH0qLworCW1hY3doLmQJCVxhY2MsIFx0bXAxX2xvLCBcdG1wMl9oaTpiCQkvKiBmWzFdICogcHRyWzddKi8KKwlsZC5kCQlcdG1wMV9sbywgXGZbMio0XQkJCS8qIHRtcDEgPSB7IGZbMl0sIGZbM10gfSAqLworCisJbWFjd2guZAkJXGFjYywgXHRtcDNfaGksIFx0bXAyX2xvOnQJCS8qIGZbNl0gKiBwdHJbMl0qLworCW1hY3doLmQJCVxhY2MsIFx0bXAxX2hpLCBcdG1wMl9oaTp0CQkvKiBmWzJdICogcHRyWzZdKi8KKwlsZC5kCQlcdG1wM19sbywgXGZbNCo0XQkJCS8qIHRtcDMgPSB7IGZbNF0sIGZbNV0gfSAqLworCWxkLncJCVx0bXAyX2hpLCBccHRyWzQqMitccHRyX29mZnNldCoyXQkvKiB0bXAyX2hpID0geyBwdHJbNF0sIHB0cls1XSB9Ki8KKwltYWN3aC5kCQlcYWNjLCBcdG1wM19sbywgXHRtcDJfbG86YgkJLyogZls1XSAqIHB0clszXSovCisKKwltYWN3aC5kCQlcYWNjLCBcdG1wMV9sbywgXHRtcDJfaGk6YgkJLyogZlszXSAqIHB0cls1XSovCisJbWFjd2guZAkJXGFjYywgXHRtcDNfaGksIFx0bXAyX2hpOnQJCS8qIGZbNF0gKiBwdHJbNF0qLworCS5lbmRtCisKKwkubWFjcm8Jd2luZG93XzIJZiwgcHRyLCBhY2MsIHB0cl9vZmZzZXQsIG11bCwgdG1wMV9sbywgdG1wMV9oaSwgdG1wMl9sbywgdG1wMl9oaSwgdG1wM19sbywgdG1wM19oaQorCWxkLmQJCVx0bXAxX2xvLCBcZlswKjRdCQkJLyogdG1wMSA9IHsgZlswXSwgZlsxXSB9ICovCisJbGQudwkJXHRtcDJfbG8sIFxwdHJbNyoyK1xwdHJfb2Zmc2V0KjJdCS8qIHRtcDJfbG8gPSB7IHB0cls3XSwgcHRyWzhdIH0qLworCWxkLmQJCVx0bXAzX2xvLCBcZlsyKjRdCQkJLyogdG1wMyA9IHsgZlsyXSwgZlszXSB9ICovCisJbGQudwkJXHRtcDJfaGksIFxwdHJbOSoyK1xwdHJfb2Zmc2V0KjJdCS8qIHRtcDJfaGkgPSB7IHB0cls5XSwgcHRyWzEwXSB9Ki8KKwkuaWYgXG11bAorCW11bHdoLmQJCVxhY2MsIFx0bXAxX2hpLCBcdG1wMl9sbzp0CQkvKiBmWzBdICogcHRyWzddKi8KKwkuZWxzZQorCW1hY3doLmQJCVxhY2MsIFx0bXAxX2hpLCBcdG1wMl9sbzp0CQkvKiBmWzBdICogcHRyWzddKi8KKwkuZW5kaWYKKwltYWN3aC5kCQlcYWNjLCBcdG1wMV9sbywgXHRtcDJfbG86YgkJLyogZlsxXSAqIHB0cls4XSovCisKKwlsZC5kCQlcdG1wMV9sbywgXGZbNCo0XQkJCS8qIHRtcDEgPSB7IGZbNF0sIGZbNV0gfSAqLworCWxkLncJCVx0bXAyX2xvLCBccHRyWzExKjIrXHB0cl9vZmZzZXQqMl0JLyogdG1wMl9sbyA9IHsgcHRyWzExXSwgcHRyWzEyXSB9Ki8KKworCW1hY3doLmQJCVxhY2MsIFx0bXAzX2hpLCBcdG1wMl9oaTp0CQkvKiBmWzJdICogcHRyWzldKi8KKwltYWN3aC5kCQlcYWNjLCBcdG1wM19sbywgXHRtcDJfaGk6YgkJLyogZlszXSAqIHB0clsxMF0qLworCisJbGQuZAkJXHRtcDNfbG8sIFxmWzYqNF0JCQkvKiB0bXAzID0geyBmWzZdLCBmWzddIH0gKi8KKwlsZC53CQlcdG1wMl9oaSwgXHB0clsxMyoyK1xwdHJfb2Zmc2V0KjJdCS8qIHRtcDJfaGkgPSB7IHB0clsxM10sIHB0clsxNF0gfSovCisKKwltYWN3aC5kCQlcYWNjLCBcdG1wMV9oaSwgXHRtcDJfbG86dAkJLyogZls0XSAqIHB0clsxMV0qLworCW1hY3doLmQJCVxhY2MsIFx0bXAxX2xvLCBcdG1wMl9sbzpiCQkvKiBmWzVdICogcHRyWzEyXSovCisJbWFjd2guZAkJXGFjYywgXHRtcDNfaGksIFx0bXAyX2hpOnQJCS8qIGZbNl0gKiBwdHJbMTNdKi8KKwltYWN3aC5kCQlcYWNjLCBcdG1wM19sbywgXHRtcDJfaGk6YgkJLyogZls3XSAqIHB0clsxNF0qLworCS5lbmRtCisKKwkubWFjcm8Jc2NhbGUJcmVzLCBkX2xvLCBkX2hpCisJbHNsCQlcZF9oaSwgMgorCS5lbmRtCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioKKyAgIFN0YXJ0aW5nIG1haW4gZnVuY3Rpb24KKyAgICoqKioqKioqKioqKioqKioqKioqKiogKi8KKworLyogRnVuY3Rpb24gc3ludGhfYXZyMzIgaXMgY2FsbGVkIGZyb20gc3ludGguYyB3aXRoIGFyZ3VtZW50czoKKyAgICAgICAgICAgICBwaGFzZSwgZmlsdGVyLCAqcGNtMSwgJkRbMF0JCSovCisKKwkuZ2xvYmFsCXN5bnRoX2F2cjMyCitzeW50aF9hdnIzMjoKKwlwdXNobQkJcjAtcjcsIGxyCisJc3ViCQlzcCwgOAorCisJLyogUjEyID0gcGhhc2UsIFIxMSA9IGZpbHRlciwgUjEwID0gcGNtMSwgcjkgPSBEKi8KKwlibGQJCXIxMiwgMAorCWJyY2MJCXN5bnRoX2V2ZW4KKworCS8qIEZpbHRlciBmb3Igb2RkIHBoYXNlcyAqLworCisJLyoJZmUgPSAmKCpmaWx0ZXIpWzBdWzFdWzBdOworCQlmeCA9ICYoKmZpbHRlcilbMF1bMF1bMF07CisJCWZvID0gJigqZmlsdGVyKVsxXVswXVswXTsgKi8KKwlzdWIJCWxyIC8qZmUqLywgcjExLCAtMTYqOCo0CisJc3ViCQlyOCAvKmZvKi8sIHIxMSwgLTE2KjgqNCoyCisKKwkvKglwZSA9IHBoYXNlID4+IDE7ICovCisJbHNyCQlyMTIsIDEKKwlzdGRzcAkJc3BbNF0sIHIxMgorCS8qCXB0ciA9IChzaG9ydCBjb25zdCAqKURtb2QgKyBwZTsgKi8KKwlhZGQJCXIxMiwgcjksIHIxMiA8PCAxCisKKwkvKglNTDAoaGksIGxvLCAoKmZ4KVswXSwgcHRyWzAgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZ4KVsxXSwgcHRyWzcgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZ4KVsyXSwgcHRyWzYgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZ4KVszXSwgcHRyWzUgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZ4KVs0XSwgcHRyWzQgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZ4KVs1XSwgcHRyWzMgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZ4KVs2XSwgcHRyWzIgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZ4KVs3XSwgcHRyWzEgKyAxN10pOyAqLworCXdpbmRvd18xCXIxMS8qZngqLyxyMTIvKnB0ciovLHIwLyphY2MqLywxNy8qb2ZmKi8sMS8qbXVsKi8scjIscjMscjQscjUscjYscjcKKworICAgIC8qCQlNTE4oaGksIGxvKTsgKi8KKwluZWcJCXIwCisJYWNyCQlyMQorCW5lZwkJcjEKKworICAgIC8qCQlNTEEoaGksIGxvLCAoKmZlKVswXSwgcHRyWzBdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbMV0sIHB0cls3XSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzJdLCBwdHJbNl0pOworICAgICAgICAgICAgICAgIE1MQShoaSwgbG8sICgqZmUpWzNdLCBwdHJbNV0pOworICAgICAgICAgICAgICAgIE1MQShoaSwgbG8sICgqZmUpWzRdLCBwdHJbNF0pOworICAgICAgICAgICAgICAgIE1MQShoaSwgbG8sICgqZmUpWzVdLCBwdHJbM10pOworICAgICAgICAgICAgICAgIE1MQShoaSwgbG8sICgqZmUpWzZdLCBwdHJbMl0pOworICAgICAgICAgICAgICAgIE1MQShoaSwgbG8sICgqZmUpWzddLCBwdHJbMV0pOyAqLworCXdpbmRvd18xCWxyLypmZSovLHIxMi8qcHRyKi8scjAvKmFjYyovLDAvKm9mZiovLDAvKm1hYyovLHIyLHIzLHI0LHI1LHI2LHI3CisKKyAgICAvKgkJKnBjbTErKyA9IFNISUZUKE1MWihoaSwgbG8pKTsKKworCQlwY20yID0gcGNtMSArIDMxOyAqLworCXNjYWxlCQlyMSwgcjAsIHIxCisJc3QudwkJcjEwLypwY21fMSovKyssIHIxCisJc3ViCQlyMTEvKnBjbTIqLywgcjEwLCAtNCozMQorCisgICAgLyoJCWZvciAoc2IgPSAxOyBzYiA8IDE2OyArK3NiKSB7ICovCisJbW92IAkJcjIsIDE1CisJc3Rkc3AJCXNwWzBdLCByMgorb2RkX2xvb3A6CisgICAgLyoJCSsrZmU7CisJCXB0ciArPSAzMzsgKi8KKwlzdWIJCWxyIC8qZmUqLywgLTgqNAorCXN1YgkJcjEyLCAtMzMqMgorCisgICAgLyoJCU1MMChoaSwgbG8sICgqZm8pWzBdLCBwdHJbMCArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzFdLCBwdHJbNyArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzJdLCBwdHJbNiArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzNdLCBwdHJbNSArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzRdLCBwdHJbNCArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzVdLCBwdHJbMyArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzZdLCBwdHJbMiArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzddLCBwdHJbMSArIDE3XSk7ICovCisJd2luZG93XzEJcjgvKmZvKi8scjEyLypwdHIqLyxyMC8qYWNjKi8sMTcvKm9mZiovLDEvKm11bCovLHIyLHIzLHI0LHI1LHI2LHI3CisgICAgLyoJCU1MTihoaSwgbG8pOyAqLworCisJbmVnCQlyMAorCWFjcgkJcjEKKwluZWcJCXIxCisKKyAgICAvKgkJTUxBKGhpLCBsbywgKCpmZSlbN10sIHB0clsxXSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzZdLCBwdHJbMl0pOworCQlNTEEoaGksIGxvLCAoKmZlKVs1XSwgcHRyWzNdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbNF0sIHB0cls0XSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzNdLCBwdHJbNV0pOworCQlNTEEoaGksIGxvLCAoKmZlKVsyXSwgcHRyWzZdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbMV0sIHB0cls3XSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzBdLCBwdHJbMF0pOyAqLworCXdpbmRvd18xCWxyLypmZSovLHIxMi8qcHRyKi8scjAvKmFjYyovLDAvKm9mZiovLDAvKm1hYyovLHIyLHIzLHI0LHI1LHI2LHI3CisKKyAgICAvKglwdHIgLT0gMipwZTsgKi8KKwlsZGRzcAkJcjIsIHNwWzRdCisKKyAgICAvKgkJKnBjbTErKyA9IFNISUZUKE1MWihoaSwgbG8pKTsgKi8KKworCXNjYWxlCQlyMSwgcjAsIHIxCisJc3ViCQlyMTIvKnB0ciovLCByMTIsIHIyLypwZSovPDwgMgorCXN0LncJCXIxMC8qcGNtXzEqLysrLCByMQorCisKKyAgICAvKgkJTUwwKGhpLCBsbywgKCpmZSlbMF0sIHB0cls3ICArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzFdLCBwdHJbOCAgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZlKVsyXSwgcHRyWzkgICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbM10sIHB0clsxMCArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzRdLCBwdHJbMTEgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZlKVs1XSwgcHRyWzEyICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbNl0sIHB0clsxMyArIDE3XSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzddLCBwdHJbMTQgKyAxN10pOyAqLworCXdpbmRvd18yCWxyLypmZSovLHIxMi8qcHRyKi8scjAvKmFjYyovLDE3LypvZmYqLywxLyptdWwqLyxyMixyMyxyNCxyNSxyNixyNworICAgIC8qCQlNTEEoaGksIGxvLCAoKmZvKVs3XSwgcHRyWzE0XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzZdLCBwdHJbMTNdKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbNV0sIHB0clsxMl0pOworCQlNTEEoaGksIGxvLCAoKmZvKVs0XSwgcHRyWzExXSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzNdLCBwdHJbMTBdKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbMl0sIHB0cls5XSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzFdLCBwdHJbOF0pOworCQlNTEEoaGksIGxvLCAoKmZvKVswXSwgcHRyWzddKTsgKi8KKwl3aW5kb3dfMglyOC8qZm8qLyxyMTIvKnB0ciovLHIwLyphY2MqLywwLypvZmYqLywwLyptYWMqLyxyMixyMyxyNCxyNSxyNixyNworCisKKyAgICAvKgkJKnBjbTItLSA9IFNISUZUKE1MWihoaSwgbG8pKTsgKi8KKwlsZGRzcAkJcjMsIHNwWzRdCisJbGRkc3AJCXIyLCBzcFswXQorCXNjYWxlCQlyMSwgcjAsIHIxCisJc3QudwkJLS1yMTEvKnBjbV8yKi8sIHIxCisKKyAgICAvKgkJcHRyICs9IDIqcGU7ICovCisJYWRkCQlyMTIvKnB0ciovLCByMTIsIHIzLypwZSovPDwgMgorCisgICAgLyoJCSsrZm87CisJCX0gKi8KKwlzdWIJCXI4LypmbyovLCAtOCo0CisKKwlzdWIJCXIyLCAxCisJc3Rkc3AJCXNwWzBdLCByMgorCWJybmUJCW9kZF9sb29wCisKKyAgICAvKgkJcHRyICs9IDMzOyAqLworCXN1YgkJcjEyLypwdHIqLywgLTMzKjIKKworICAgIC8qCQlNTDAoaGksIGxvLCAoKmZvKVswXSwgcHRyWzAgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVsxXSwgcHRyWzcgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVsyXSwgcHRyWzYgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVszXSwgcHRyWzUgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs0XSwgcHRyWzQgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs1XSwgcHRyWzMgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs2XSwgcHRyWzIgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs3XSwgcHRyWzEgKyAxN10pOyAqLworCXdpbmRvd18xCXI4LypmbyovLHIxMi8qcHRyKi8scjAvKmFjYyovLDE3LypvZmYqLywxLyptdWwqLyxyMixyMyxyNCxyNSxyNixyNworCisJcmptcAkJc3ludGhfZW5kCitzeW50aF9ldmVuOgorCS8qIEZpbHRlciBmb3IgZXZlbiBwaGFzZXMgKi8KKworCS8qCWZlID0gJigqZmlsdGVyKVswXVswXVswXTsKKwkJZnggPSAmKCpmaWx0ZXIpWzBdWzFdWzBdOworCQlmbyA9ICYoKmZpbHRlcilbMV1bMV1bMF07ICovCisJc3ViCQlsciAvKmZ4Ki8sIHIxMSwgLTE2KjgqNAorCXN1YgkJcjggLypmbyovLCByMTEsIC0oMTYqOCo0KjIgKyAxNio4KjQpCisKKwkvKglwbyA9ICgocGhhc2UgLSAxKSAmIDB4RikgPj4gMTsgKi8KKwlzdWIJCXIxMiwgMQorCWFuZGwJCXIxMiwgMHhlLCBDT0gKKwlzdGRzcAkJc3BbNF0sIHIxMgorCS8qCXB0ciA9IChzaG9ydCBjb25zdCAqKURtb2QgKyBwbzsgKi8KKwlhZGQJCXIxMiwgcjksIHIxMgorCisJLyoJTUwwKGhpLCBsbywgKCpmeClbMF0sIHB0clswICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmeClbMV0sIHB0cls3ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmeClbMl0sIHB0cls2ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmeClbM10sIHB0cls1ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmeClbNF0sIHB0cls0ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmeClbNV0sIHB0clszICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmeClbNl0sIHB0clsyICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmeClbN10sIHB0clsxICsgMTddKTsgKi8KKwl3aW5kb3dfMQlsci8qZngqLyxyMTIvKnB0ciovLHIwLyphY2MqLywxNy8qb2ZmKi8sMS8qbXVsKi8scjIscjMscjQscjUscjYscjcKKworICAgIC8qCQlNTE4oaGksIGxvKTsgKi8KKwluZWcJCXIwCisJYWNyCQlyMQorCW5lZwkJcjEKKworICAgIC8qCQlNTEEoaGksIGxvLCAoKmZlKVswXSwgcHRyWzAgKyAxXSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzFdLCBwdHJbNyArIDFdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbMl0sIHB0cls2ICsgMV0pOworICAgICAgICAgICAgICAgIE1MQShoaSwgbG8sICgqZmUpWzNdLCBwdHJbNSArIDFdKTsKKyAgICAgICAgICAgICAgICBNTEEoaGksIGxvLCAoKmZlKVs0XSwgcHRyWzQgKyAxXSk7CisgICAgICAgICAgICAgICAgTUxBKGhpLCBsbywgKCpmZSlbNV0sIHB0clszICsgMV0pOworICAgICAgICAgICAgICAgIE1MQShoaSwgbG8sICgqZmUpWzZdLCBwdHJbMiArIDFdKTsKKyAgICAgICAgICAgICAgICBNTEEoaGksIGxvLCAoKmZlKVs3XSwgcHRyWzEgKyAxXSk7ICovCisJd2luZG93XzEJcjExLypmZSovLHIxMi8qcHRyKi8scjAvKmFjYyovLDEvKm9mZiovLDAvKm1hYyovLHIyLHIzLHI0LHI1LHI2LHI3CisKKyAgICAvKgkJKnBjbTErKyA9IFNISUZUKE1MWihoaSwgbG8pKTsKKworCQlwY20yID0gcGNtMSArIDMxOyAqLworCXNjYWxlCQlyMSwgcjAsIHIxCisJc3QudwkJcjEwLypwY21fMSovKyssIHIxCisJc3ViCQlsci8qcGNtMiovLCByMTAsIC00KjMxCisKKyAgICAvKgkJZm9yIChzYiA9IDE7IHNiIDwgMTY7ICsrc2IpIHsgKi8KKwltb3YgCQlyMiwgMTUKKwlzdGRzcAkJc3BbMF0sIHIyCitldmVuX2xvb3A6CisgICAgLyoJCSsrZmU7CisJCXB0ciArPSAzMzsgKi8KKwlzdWIJCXIxMSAvKmZlKi8sIC04KjQKKwlzdWIJCXIxMiwgLTMzKjIKKworICAgIC8qCQlNTDAoaGksIGxvLCAoKmZvKVswXSwgcHRyWzAgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVsxXSwgcHRyWzcgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVsyXSwgcHRyWzYgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVszXSwgcHRyWzUgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs0XSwgcHRyWzQgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs1XSwgcHRyWzMgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs2XSwgcHRyWzIgKyAxN10pOworCQlNTEEoaGksIGxvLCAoKmZvKVs3XSwgcHRyWzEgKyAxN10pOyAqLworCXdpbmRvd18xCXI4LypmbyovLHIxMi8qcHRyKi8scjAvKmFjYyovLDE3LypvZmYqLywxLyptdWwqLyxyMixyMyxyNCxyNSxyNixyNworICAgIC8qCQlNTE4oaGksIGxvKTsgKi8KKwluZWcJCXIwCisJYWNyCQlyMQorCW5lZwkJcjEKKworICAgIC8qCQlNTEEoaGksIGxvLCAoKmZlKVs3XSwgcHRyWzEgKyAxXSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzZdLCBwdHJbMiArIDFdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbNV0sIHB0clszICsgMV0pOworCQlNTEEoaGksIGxvLCAoKmZlKVs0XSwgcHRyWzQgKyAxXSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzNdLCBwdHJbNSArIDFdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbMl0sIHB0cls2ICsgMV0pOworCQlNTEEoaGksIGxvLCAoKmZlKVsxXSwgcHRyWzcgKyAxXSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzBdLCBwdHJbMCArIDFdKTsgKi8KKwl3aW5kb3dfMQlyMTEvKmZlKi8scjEyLypwdHIqLyxyMC8qYWNjKi8sMS8qb2ZmKi8sMC8qbWFjKi8scjIscjMscjQscjUscjYscjcKKworICAgIC8qCQkqcGNtMSsrID0gU0hJRlQoTUxaKGhpLCBsbykpOyAqLworCWxkZHNwCQlyMiwgc3BbNF0KKwlzY2FsZQkJcjEsIHIwLCByMQorICAgIC8qCXB0ciAtPSAyKnBvOyAqLworCXN1YgkJcjEyLypwdHIqLywgcjEyLCByMi8qcG8qLzw8IDEKKwlzdC53CQlyMTAvKnBjbV8xKi8rKywgcjEKKworCisgICAgLyoJCU1MMChoaSwgbG8sICgqZmUpWzBdLCBwdHJbNyAgKyAxNyAtIDFdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbMV0sIHB0cls4ICArIDE3IC0gMV0pOworCQlNTEEoaGksIGxvLCAoKmZlKVsyXSwgcHRyWzkgICsgMTcgLSAxXSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzNdLCBwdHJbMTAgKyAxNyAtIDFdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbNF0sIHB0clsxMSArIDE3IC0gMV0pOworCQlNTEEoaGksIGxvLCAoKmZlKVs1XSwgcHRyWzEyICsgMTcgLSAxXSk7CisJCU1MQShoaSwgbG8sICgqZmUpWzZdLCBwdHJbMTMgKyAxNyAtIDFdKTsKKwkJTUxBKGhpLCBsbywgKCpmZSlbN10sIHB0clsxNCArIDE3IC0gMV0pOyAqLworCXdpbmRvd18yCXIxMS8qZmUqLyxyMTIvKnB0ciovLHIwLyphY2MqLywxNi8qb2ZmKi8sMS8qbXVsKi8scjIscjMscjQscjUscjYscjcKKyAgICAvKgkJTUxBKGhpLCBsbywgKCpmbylbN10sIHB0clsxNF0pOworCQlNTEEoaGksIGxvLCAoKmZvKVs2XSwgcHRyWzEzXSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzVdLCBwdHJbMTJdKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbNF0sIHB0clsxMV0pOworCQlNTEEoaGksIGxvLCAoKmZvKVszXSwgcHRyWzEwXSk7CisJCU1MQShoaSwgbG8sICgqZm8pWzJdLCBwdHJbOV0pOworCQlNTEEoaGksIGxvLCAoKmZvKVsxXSwgcHRyWzhdKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbMF0sIHB0cls3XSk7ICovCisJd2luZG93XzIJcjgvKmZvKi8scjEyLypwdHIqLyxyMC8qYWNjKi8sMC8qb2ZmKi8sMC8qbWFjKi8scjIscjMscjQscjUscjYscjcKKworCisgICAgLyoJCSpwY20yLS0gPSBTSElGVChNTFooaGksIGxvKSk7ICovCisJbGRkc3AJCXIzLCBzcFs0XQorCWxkZHNwCQlyMiwgc3BbMF0KKwlzY2FsZQkJcjEsIHIwLCByMQorCXN0LncJCS0tbHIvKnBjbV8yKi8sIHIxCisKKyAgICAvKgkJcHRyICs9IDIqcG87ICovCisJYWRkCQlyMTIvKnB0ciovLCByMTIsIHIzLypwbyovPDwgMQorCisgICAgLyoJCSsrZm87CisJCX0gKi8KKwlzdWIJCXI4LypmbyovLCAtOCo0CisKKwlzdWIJCXIyLCAxCisJc3Rkc3AJCXNwWzBdLCByMgorCWJybmUJCWV2ZW5fbG9vcAorCisgICAgLyoJCXB0ciArPSAzMzsgKi8KKwlzdWIJCXIxMi8qcHRyKi8sIC0zMyoyCisKKyAgICAvKgkJTUwwKGhpLCBsbywgKCpmbylbMF0sIHB0clswICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbMV0sIHB0cls3ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbMl0sIHB0cls2ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbM10sIHB0cls1ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbNF0sIHB0cls0ICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbNV0sIHB0clszICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbNl0sIHB0clsyICsgMTddKTsKKwkJTUxBKGhpLCBsbywgKCpmbylbN10sIHB0clsxICsgMTddKTsgKi8KKwl3aW5kb3dfMQlyOC8qZm8qLyxyMTIvKnB0ciovLHIwLyphY2MqLywxNy8qb2ZmKi8sMS8qbXVsKi8scjIscjMscjQscjUscjYscjcKKworCisKK3N5bnRoX2VuZDoKKyAgIC8qCQkqcGNtMSA9IFNISUZUKC1NTFooaGksIGxvKSk7ICovCisJc2NhbGUJCXIxLCByMCwgcjEKKwluZWcJCXIxCisJc3QudwkJcjEwLypwY21fMSovLCByMQorCisJbW92CQlyMTIsIHIxMAorCXN1YgkJc3AsIC04CisJcG9wbQkJcjAtcjcsIHBjCisKKworCisKKwo=