ZGlmZiAtLWdpdCBhL2F1dG8vY2MvYmNjIGIvYXV0by9jYy9iY2MKaW5kZXggNGI4ODEyOS4uYWYxMDhiYiAxMDA2NDQKLS0tIGEvYXV0by9jYy9iY2MKKysrIGIvYXV0by9jYy9iY2MKQEAgLTIxLDYgKzIxLDExIEBACiAgICAgOzsKIGVzYWMKIAorIyBfX3N0ZGNhbGwKKyNDUFVfT1BUPSIkQ1BVX09QVCAtcHMiCisjIF9fZmFzdGNhbGwKK0NQVV9PUFQ9IiRDUFVfT1BUIC1wciIKKwogQ0ZMQUdTPSIkQ0ZMQUdTICRDUFVfT1BUIgogCiAjIG11bHRpdGhyZWFkZWQKZGlmZiAtLWdpdCBhL2F1dG8vY2MvbXN2YyBiL2F1dG8vY2MvbXN2YwppbmRleCAwZmExYTJjLi5kOTIwZWQwIDEwMDY0NAotLS0gYS9hdXRvL2NjL21zdmMKKysrIGIvYXV0by9jYy9tc3ZjCkBAIC0zNiw2ICszNiwxMiBAQAogICAgIDs7CiBlc2FjCiAKKyMgX19zdGRjYWxsCisjQ1BVX09QVD0iJENQVV9PUFQgLUd6IgorIyBfX2Zhc3RjYWxsCitDUFVfT1BUPSIkQ1BVX09QVCAtR3IiCisKKwogQ0ZMQUdTPSIkQ0ZMQUdTICRDUFVfT1BUIgogCiAKZGlmZiAtLWdpdCBhL2F1dG8vbGliL21kNS9tYWtlIGIvYXV0by9saWIvbWQ1L21ha2UKaW5kZXggOGJkY2EwYi4uMjIxODlkYSAxMDA2NDQKLS0tIGEvYXV0by9saWIvbWQ1L21ha2UKKysrIGIvYXV0by9saWIvbWQ1L21ha2UKQEAgLTYsMTcgKzYsMTcgQEAKIAogICAgIG1zdmMqKQogICAgICAgICBuZ3hfbWFrZWZpbGU9bWFrZWZpbGUubXN2YwotICAgICAgICBuZ3hfb3B0PSJDUFVfT1BUPSRDUFVfT1BUIExJQkM9JExJQkMgTUQ1X0FTTT0kTUQ1X0FTTSIKKyAgICAgICAgbmd4X29wdD0iQ1BVX09QVD1cIiRDUFVfT1BUXCIgTElCQz0kTElCQyBNRDVfQVNNPSRNRDVfQVNNIgogICAgIDs7CiAKICAgICBvd2MqKQogICAgICAgICBuZ3hfbWFrZWZpbGU9bWFrZWZpbGUub3djCi0gICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9JENQVV9PUFQiCisgICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9XCIkQ1BVX09QVFwiIgogICAgIDs7CiAKICAgICBiY2MpCiAgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5iY2MKLSAgICAgICAgbmd4X29wdD0iLURDUFVfT1BUPSRDUFVfT1BUIC1ETUQ1X0FTTT0kTUQ1X0FTTSIKKyAgICAgICAgbmd4X29wdD0iLURDUFVfT1BUPVwiJENQVV9PUFRcIiAtRE1ENV9BU009JE1ENV9BU00iCiAgICAgOzsKIAogZXNhYwpkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGNyZS9tYWtlIGIvYXV0by9saWIvcGNyZS9tYWtlCmluZGV4IDZiNTIzNTcuLmY1N2Y3ZDkgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3BjcmUvbWFrZQorKysgYi9hdXRvL2xpYi9wY3JlL21ha2UKQEAgLTYsMTcgKzYsMTcgQEAKIAogICAgIG1zdmMqKQogICAgICAgICBuZ3hfbWFrZWZpbGU9bWFrZWZpbGUubXN2YwotICAgICAgICBuZ3hfb3B0PSJDUFVfT1BUPSRDUFVfT1BUIExJQkM9JExJQkMiCisgICAgICAgIG5neF9vcHQ9IkNQVV9PUFQ9XCIkQ1BVX09QVFwiIExJQkM9JExJQkMiCiAgICAgOzsKIAogICAgIG93YyopCiAgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5vd2MKLSAgICAgICAgbmd4X29wdD0iQ1BVX09QVD0kQ1BVX09QVCIKKyAgICAgICAgbmd4X29wdD0iQ1BVX09QVD1cIiRDUFVfT1BUXCIiCiAgICAgOzsKIAogICAgIGJjYykKICAgICAgICAgbmd4X21ha2VmaWxlPW1ha2VmaWxlLmJjYwotICAgICAgICBuZ3hfb3B0PSItRENQVV9PUFQ9JENQVV9PUFQiCisgICAgICAgIG5neF9vcHQ9Ii1EQ1BVX09QVD1cIiRDUFVfT1BUXCIiCiAgICAgOzsKIAogZXNhYwpAQCAtMjYsNyArMjYsOSBAQAogCiAgICAgd2luMzIpCiAgICAgICAgIGNwIGF1dG8vbGliL3BjcmUvcGF0Y2gucGNyZS5pbiAkUENSRQorICAgICAgICBjcCBhdXRvL2xpYi9wY3JlL3BhdGNoLnBjcmUuaW4ub3djICRQQ1JFCiAgICAgICAgIGNwIGF1dG8vbGliL3BjcmUvcGF0Y2guY29uZmlnLmluICRQQ1JFCisgICAgICAgIGNwIGF1dG8vbGliL3BjcmUvcGF0Y2gucGNyZS5jICRQQ1JFCiAgICAgICAgIGNwIGF1dG8vbGliL3BjcmUvJG5neF9tYWtlZmlsZSAkUENSRQogCiAgICAgICAgIG5neF9wY3JlPWBlY2hvICRQQ1JFIHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYApkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGNyZS9tYWtlZmlsZS5iY2MgYi9hdXRvL2xpYi9wY3JlL21ha2VmaWxlLmJjYwppbmRleCA0MTE5NDUyLi5hMmRjNWZiIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9wY3JlL21ha2VmaWxlLmJjYworKysgYi9hdXRvL2xpYi9wY3JlL21ha2VmaWxlLmJjYwpAQCAtMTgsMyArMTgsNCBAQAogcGNyZS5oOgogCXBhdGNoIC1vIHBjcmUuaCBwY3JlLmluIHBhdGNoLnBjcmUuaW4KIAlwYXRjaCAtbyBjb25maWcuaCBjb25maWcuaW4gcGF0Y2guY29uZmlnLmluCisJcGF0Y2ggLW8gcGNyZS5jIHBjcmUuYyBwYXRjaC5wY3JlLmMKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3BjcmUvbWFrZWZpbGUubXN2YyBiL2F1dG8vbGliL3BjcmUvbWFrZWZpbGUubXN2YwppbmRleCA3YzYxZDMxLi40ZGE0ZTBjIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9wY3JlL21ha2VmaWxlLm1zdmMKKysrIGIvYXV0by9saWIvcGNyZS9tYWtlZmlsZS5tc3ZjCkBAIC0yMCwzICsyMCw0IEBACiBwY3JlLmg6CiAJcGF0Y2ggLW8gcGNyZS5oIHBjcmUuaW4gcGF0Y2gucGNyZS5pbgogCXBhdGNoIC1vIGNvbmZpZy5oIGNvbmZpZy5pbiBwYXRjaC5jb25maWcuaW4KKwlwYXRjaCAtbyBwY3JlLmMgcGNyZS5jIHBhdGNoLnBjcmUuYwpkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGNyZS9tYWtlZmlsZS5vd2MgYi9hdXRvL2xpYi9wY3JlL21ha2VmaWxlLm93YwppbmRleCAyMjdmZDkwLi44NDM5YzRjIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9wY3JlL21ha2VmaWxlLm93YworKysgYi9hdXRvL2xpYi9wY3JlL21ha2VmaWxlLm93YwpAQCAtMTUsNSArMTUsNSBAQAogCiAKIHBjcmUuaDoKLQlwYXRjaCAtbyBwY3JlLmggcGNyZS5pbiBwYXRjaC5wY3JlLmluCisJcGF0Y2ggLW8gcGNyZS5oIHBjcmUuaW4gcGF0Y2gucGNyZS5pbi5vd2MKIAlwYXRjaCAtbyBjb25maWcuaCBjb25maWcuaW4gcGF0Y2guY29uZmlnLmluCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9wY3JlL3BhdGNoLnBjcmUuYyBiL2F1dG8vbGliL3BjcmUvcGF0Y2gucGNyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTZiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvL2xpYi9wY3JlL3BhdGNoLnBjcmUuYwpAQCAtMCwwICsxLDEzIEBACistLS0gcGNyZS5jCVRodSBBdWcgMjEgMTQ6NDM6MDcgMjAwMworKysrIHBjcmUuYwlUdWUgTWFyIDIyIDEyOjU2OjU5IDIwMDUKK0BAIC0yNDYsOCArMjQ2LDggQEAKKyBleHRlcm4gIkMiIHZvaWQgICgqcGNyZV9mcmVlKSh2b2lkICopID0gZnJlZTsKKyBleHRlcm4gIkMiIGludCAgICgqcGNyZV9jYWxsb3V0KShwY3JlX2NhbGxvdXRfYmxvY2sgKikgPSBOVUxMOworICNlbHNlCistdm9pZCAqKCpwY3JlX21hbGxvYykoc2l6ZV90KSA9IG1hbGxvYzsKKy12b2lkICAoKnBjcmVfZnJlZSkodm9pZCAqKSA9IGZyZWU7Cisrdm9pZCAqKF9fY2RlY2wgKnBjcmVfbWFsbG9jKShzaXplX3QpID0gbWFsbG9jOworK3ZvaWQgIChfX2NkZWNsICpwY3JlX2ZyZWUpKHZvaWQgKikgPSBmcmVlOworIGludCAgICgqcGNyZV9jYWxsb3V0KShwY3JlX2NhbGxvdXRfYmxvY2sgKikgPSBOVUxMOworICNlbmRpZgorICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGNyZS9wYXRjaC5wY3JlLmluIGIvYXV0by9saWIvcGNyZS9wYXRjaC5wY3JlLmluCmluZGV4IGM0OWE2OGYuLjdhZTMyYTkgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3BjcmUvcGF0Y2gucGNyZS5pbgorKysgYi9hdXRvL2xpYi9wY3JlL3BhdGNoLnBjcmUuaW4KQEAgLTEsNSArMSw1IEBACiAtLS0gcGNyZS5pbglUaHUgQXVnIDIxIDE0OjQzOjA3IDIwMDMKLSsrKyBwY3JlLmluCVN1biBNYXIgIDcgMDI6MTA6MTEgMjAwNAorKysrIHBjcmUuaAlUdWUgTWFyIDIyIDEyOjU2OjU5IDIwMDUKIEBAIC0xMCw5ICsxMCw5IEBACiAgLyogVGhlIGZpbGUgcGNyZS5oIGlzIGJ1aWxkIGJ5ICJjb25maWd1cmUiLiBEbyBub3QgZWRpdCBpdDsgaW5zdGVhZAogIG1ha2UgY2hhbmdlcyB0byBwY3JlLmluLiAqLwpAQCAtMTMsMyArMTMsMTQgQEAKICAKICAvKiBXaW4zMiB1c2VzIERMTCBieSBkZWZhdWx0ICovCiAgCitAQCAtMTQzLDggKzE0Myw4IEBACisgaGF2ZSB0byBiZSBkaWZmZXJlbnQgYWdhaW4uICovCisgCisgI2lmbmRlZiBWUENPTVBBVAorLVBDUkVfREFUQV9TQ09QRSB2b2lkICooKnBjcmVfbWFsbG9jKShzaXplX3QpOworLVBDUkVfREFUQV9TQ09QRSB2b2lkICAoKnBjcmVfZnJlZSkodm9pZCAqKTsKKytQQ1JFX0RBVEFfU0NPUEUgdm9pZCAqKF9fY2RlY2wgKnBjcmVfbWFsbG9jKShzaXplX3QpOworK1BDUkVfREFUQV9TQ09QRSB2b2lkICAoX19jZGVjbCAqcGNyZV9mcmVlKSh2b2lkICopOworIFBDUkVfREFUQV9TQ09QRSBpbnQgICAoKnBjcmVfY2FsbG91dCkocGNyZV9jYWxsb3V0X2Jsb2NrICopOworICNlbHNlICAgLyogVlBDT01QQVQgKi8KKyBleHRlcm4gdm9pZCAqcGNyZV9tYWxsb2Moc2l6ZV90KTsKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3BjcmUvcGF0Y2gucGNyZS5pbi5vd2MgYi9hdXRvL2xpYi9wY3JlL3BhdGNoLnBjcmUuaW4ub3djCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZGJjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRvL2xpYi9wY3JlL3BhdGNoLnBjcmUuaW4ub3djCkBAIC0wLDAgKzEsMTUgQEAKKy0tLSBwY3JlLmluCVRodSBBdWcgMjEgMTQ6NDM6MDcgMjAwMworKysrIHBjcmUuaAlUdWUgTWFyIDIyIDEyOjU2OjU5IDIwMDUKK0BAIC0xMCw5ICsxMCw5IEBACisgLyogVGhlIGZpbGUgcGNyZS5oIGlzIGJ1aWxkIGJ5ICJjb25maWd1cmUiLiBEbyBub3QgZWRpdCBpdDsgaW5zdGVhZAorIG1ha2UgY2hhbmdlcyB0byBwY3JlLmluLiAqLworIAorLSNkZWZpbmUgUENSRV9NQUpPUiAgICAgICAgICBAUENSRV9NQUpPUkAKKy0jZGVmaW5lIFBDUkVfTUlOT1IgICAgICAgICAgQFBDUkVfTUlOT1JACistI2RlZmluZSBQQ1JFX0RBVEUgICAgICAgICAgIEBQQ1JFX0RBVEVACisrI2RlZmluZSBQQ1JFX01BSk9SICAgICAgICAgIDQKKysjZGVmaW5lIFBDUkVfTUlOT1IgICAgICAgICAgNAorKyNkZWZpbmUgUENSRV9EQVRFICAgICAgICAgICAyMS1BdWd1c3QtMjAwMworIAorIC8qIFdpbjMyIHVzZXMgRExMIGJ5IGRlZmF1bHQgKi8KKyAKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3psaWIvbWFrZSBiL2F1dG8vbGliL3psaWIvbWFrZQppbmRleCAxODU5YTM0Li43MTVkMmNmIDEwMDY0NAotLS0gYS9hdXRvL2xpYi96bGliL21ha2UKKysrIGIvYXV0by9saWIvemxpYi9tYWtlCkBAIC02LDE4ICs2LDE4IEBACiAKICAgICBtc3ZjKikKICAgICAgICAgbmd4X21ha2VmaWxlPW1ha2VmaWxlLm1zdmMKLSAgICAgICAgbmd4X29wdD0iQ1BVX09QVD0kQ1BVX09QVCBMSUJDPSRMSUJDIgorICAgICAgICBuZ3hfb3B0PSJDUFVfT1BUPVwiJENQVV9PUFRcIiBMSUJDPSRMSUJDIgogCiAgICAgOzsKIAogICAgIG93YyopCiAgICAgICAgIG5neF9tYWtlZmlsZT1tYWtlZmlsZS5vd2MKLSAgICAgICAgbmd4X29wdD0iQ1BVX09QVD0kQ1BVX09QVCIKKyAgICAgICAgbmd4X29wdD0iQ1BVX09QVD1cIiRDUFVfT1BUXCIiCiAgICAgOzsKIAogICAgIGJjYykKICAgICAgICAgbmd4X21ha2VmaWxlPW1ha2VmaWxlLmJjYwotICAgICAgICBuZ3hfb3B0PSItRENQVV9PUFQ9JENQVV9PUFQiCisgICAgICAgIG5neF9vcHQ9Ii1EQ1BVX09QVD1cIiRDUFVfT1BUXCIiCiAgICAgOzsKIAogZXNhYwpkaWZmIC0tZ2l0IGEvYXV0by9saWIvemxpYi9wYXRjaC56bGliLmggYi9hdXRvL2xpYi96bGliL3BhdGNoLnpsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjJmN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvYXV0by9saWIvemxpYi9wYXRjaC56bGliLmgKQEAgLTAsMCArMSwxMCBAQAorLS0tIHpsaWIuaAlUaHUgSnVsICA5IDIwOjA2OjU2IDE5OTgKKysrKyB6bGliLTEuMS4zL3psaWIuaAlUdWUgTWFyIDIyIDEzOjQxOjA0IDIwMDUKK0BAIC03MDksNyArNzA5LDYgQEAKKyAgICAoMCBpbiBjYXNlIG9mIGVycm9yKS4KKyAqLworIAorLVpFWFRFUk4gaW50IFpFWFBPUlRWQSAgIGd6cHJpbnRmIE9GKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKKyAvKgorICAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3MgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgorICAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgpkaWZmIC0tZ2l0IGEvYXV0by9tb2R1bGVzIGIvYXV0by9tb2R1bGVzCmluZGV4IDFmZTlhYzguLjRhYjI3MmUgMTAwNjQ0Ci0tLSBhL2F1dG8vbW9kdWxlcworKysgYi9hdXRvL21vZHVsZXMKQEAgLTEwNCw2ICsxMDQsMTQgQEAKIAogSFRUUF9NT0RVTEVTPSIkSFRUUF9NT0RVTEVTICRIVFRQX0lOREVYX01PRFVMRSIKIAoraWYgWyAkSFRUUF9BVVRIX0JBU0lDID0gWUVTIF07IHRoZW4KKyAgICBoYXZlPU5HWF9IVFRQX0FVVEhfQkFTSUMgLiBhdXRvL2hhdmUKKyAgICBoYXZlPU5HWF9DUllQVCAuIGF1dG8vaGF2ZQorICAgIEhUVFBfTU9EVUxFUz0iJEhUVFBfTU9EVUxFUyAkSFRUUF9BVVRIX0JBU0lDX01PRFVMRSIKKyAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfQVVUSF9CQVNJQ19TUkNTIgorICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkQ1JZUFRfTElCIgorZmkKKwogaWYgWyAkSFRUUF9BQ0NFU1MgPSBZRVMgXTsgdGhlbgogICAgIGhhdmU9TkdYX0hUVFBfQUNDRVNTIC4gYXV0by9oYXZlCiAgICAgSFRUUF9NT0RVTEVTPSIkSFRUUF9NT0RVTEVTICRIVFRQX0FDQ0VTU19NT0RVTEUiCmRpZmYgLS1naXQgYS9hdXRvL29wdGlvbnMgYi9hdXRvL29wdGlvbnMKaW5kZXggYTgxNDZkOS4uMmJkYjVkZiAxMDA2NDQKLS0tIGEvYXV0by9vcHRpb25zCisrKyBiL2F1dG8vb3B0aW9ucwpAQCAtNTAsNiArNTAsNyBAQAogSFRUUF9TU0w9Tk8KIEhUVFBfU1NJPVlFUwogSFRUUF9BQ0NFU1M9WUVTCitIVFRQX0FVVEhfQkFTSUM9WUVTCiBIVFRQX1VTRVJJRD1ZRVMKIEhUVFBfQVVUT0lOREVYPVlFUwogSFRUUF9TVEFUVVM9Tk8KQEAgLTEyNyw2ICsxMjgsNyBAQAogICAgICAgICAtLXdpdGhvdXQtaHR0cF9zc2lfbW9kdWxlKSAgICAgICBIVFRQX1NTST1OTyAgICAgICAgICAgICAgICA7OwogICAgICAgICAtLXdpdGhvdXQtaHR0cF91c2VyaWRfbW9kdWxlKSAgICBIVFRQX1VTRVJJRD1OTyAgICAgICAgICAgICA7OwogICAgICAgICAtLXdpdGhvdXQtaHR0cF9hY2Nlc3NfbW9kdWxlKSAgICBIVFRQX0FDQ0VTUz1OTyAgICAgICAgICAgICA7OworICAgICAgICAtLXdpdGhvdXQtaHR0cF9hdXRoX2Jhc2ljX21vZHVsZSkgSFRUUF9BVVRIX0JBU0lDPU5PICAgICAgICA7OwogICAgICAgICAtLXdpdGhvdXQtaHR0cF9hdXRvaW5kZXhfbW9kdWxlKSBIVFRQX0FVVE9JTkRFWD1OTyAgICAgICAgICA7OwogICAgICAgICAtLXdpdGhvdXQtaHR0cF9zdGF0dXNfbW9kdWxlKSAgICBIVFRQX1NUQVRVUz1OTyAgICAgICAgICAgICA7OwogICAgICAgICAtLXdpdGhvdXQtaHR0cF9nZW9fbW9kdWxlKSAgICAgICBIVFRQX0dFTz1OTyAgICAgICAgICAgICAgICA7OwpAQCAtMjA3LDYgKzIwOSw3IEBACiAgIC0td2l0aG91dC1odHRwX3NzaV9tb2R1bGUgICAgICAgICAgZGlzYWJsZSBuZ3hfaHR0cF9zc2lfbW9kdWxlCiAgIC0td2l0aG91dC1odHRwX3VzZXJpZF9tb2R1bGUgICAgICAgZGlzYWJsZSBuZ3hfaHR0cF91c2VyaWRfbW9kdWxlCiAgIC0td2l0aG91dC1odHRwX2FjY2Vzc19tb2R1bGUgICAgICAgZGlzYWJsZSBuZ3hfaHR0cF9hY2Nlc3NfbW9kdWxlCisgIC0td2l0aG91dC1odHRwX2F1dGhfYmFzaWNfbW9kdWxlICAgZGlzYWJsZSBuZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZQogICAtLXdpdGhvdXQtaHR0cF9hdXRvaW5kZXhfbW9kdWxlICAgIGRpc2FibGUgbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZQogICAtLXdpdGhvdXQtaHR0cF9nZW9fbW9kdWxlICAgICAgICAgIGRpc2FibGUgbmd4X2h0dHBfZ2VvX21vZHVsZQogICAtLXdpdGhvdXQtaHR0cF9yZXdyaXRlX21vZHVsZSAgICAgIGRpc2FibGUgbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUKZGlmZiAtLWdpdCBhL2F1dG8vb3MvY29uZiBiL2F1dG8vb3MvY29uZgppbmRleCA4YzQ3MzlmLi5iNDhiNjQwIDEwMDY0NAotLS0gYS9hdXRvL29zL2NvbmYKKysrIGIvYXV0by9vcy9jb25mCkBAIC0zOSw2ICszOSw3IEBACiAgICAgICAgIENPUkVfSU5DUz0iJFVOSVhfSU5DUyIKICAgICAgICAgQ09SRV9ERVBTPSIkVU5JWF9ERVBTICRQT1NJWF9ERVBTIgogICAgICAgICBDT1JFX1NSQ1M9IiRVTklYX1NSQ1MiCisgICAgICAgIENSWVBUX0xJQj0iLWxjcnlwdCIKICAgICA7OwogCiBlc2FjCmRpZmYgLS1naXQgYS9hdXRvL29zL2ZyZWVic2QgYi9hdXRvL29zL2ZyZWVic2QKaW5kZXggZGZiNTQ3Zi4uMTMzZjVmNSAxMDA2NDQKLS0tIGEvYXV0by9vcy9mcmVlYnNkCisrKyBiL2F1dG8vb3MvZnJlZWJzZApAQCAtMTQsNiArMTQsNyBAQAogQ09SRV9JTkNTPSIkVU5JWF9JTkNTIgogQ09SRV9ERVBTPSIkVU5JWF9ERVBTICRGUkVFQlNEX0RFUFMiCiBDT1JFX1NSQ1M9IiRVTklYX1NSQ1MgJEZSRUVCU0RfU1JDUyIKK0NSWVBUX0xJQj0iLWxjcnlwdCIKIAogbmd4X3NwYWNlcj0nCiAnCmRpZmYgLS1naXQgYS9hdXRvL29zL2xpbnV4IGIvYXV0by9vcy9saW51eAppbmRleCBhODNjMTgwLi44NGU0ZjY2IDEwMDY0NAotLS0gYS9hdXRvL29zL2xpbnV4CisrKyBiL2F1dG8vb3MvbGludXgKQEAgLTEzLDcgKzEzLDcgQEAKIENPUkVfSU5DUz0iJFVOSVhfSU5DUyIKIENPUkVfREVQUz0iJFVOSVhfREVQUyAkTElOVVhfREVQUyIKIENPUkVfU1JDUz0iJFVOSVhfU1JDUyAkTElOVVhfU1JDUyIKLUVWRU5UX01PRFVMRVM9IiRFVkVOVF9NT0RVTEVTIgorQ1JZUFRfTElCPSItbGNyeXB0IgogCiBuZ3hfc3BhY2VyPScKICcKZGlmZiAtLWdpdCBhL2F1dG8vb3Mvc29sYXJpcyBiL2F1dG8vb3Mvc29sYXJpcwppbmRleCAyMzQ4Yzg5Li42N2UwYThlIDEwMDY0NAotLS0gYS9hdXRvL29zL3NvbGFyaXMKKysrIGIvYXV0by9vcy9zb2xhcmlzCkBAIC0xMyw4ICsxMyw2IEBACiBDT1JFX0lOQ1M9IiRVTklYX0lOQ1MiCiBDT1JFX0RFUFM9IiRVTklYX0RFUFMgJFNPTEFSSVNfREVQUyIKIENPUkVfU1JDUz0iJFVOSVhfU1JDUyAkU09MQVJJU19TUkNTICIKLUVWRU5UX01PRFVMRVM9IiRFVkVOVF9NT0RVTEVTIgotCiBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgLWxzb2NrZXQgLWxuc2wgLWxydCIKIAogIyBTb2xhcmlzJ3MgbWFrZSBkb2VzIG5vdCBzdXBwb3J0IGEgYmxhbmsgbGluZSBiZXR3ZWVuIHRhcmdldCBhbmQgcnVsZXMKZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCAyODg0OTVmLi5mZDQ2ZWRkIDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0xMjMsNiArMTIzLDcgQEAKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF90aHJlYWQuaCBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfc29ja2V0LmggXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X29zLmggXAorICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3VzZXIuaCBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5oIgogCiBVTklYX1NSQ1M9IiRDT1JFX1NSQ1MgJEVWRU5UX1NSQ1MgXApAQCAtMTQyLDYgKzE0Myw3IEBACiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfZGFlbW9uLmMgXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3NldHByb2N0aXRsZS5jIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMgXAorICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3VzZXIuYyBcCiAgICAgICAgICAgICBzcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIgogCiBQT1NJWF9ERVBTPXNyYy9vcy91bml4L25neF9wb3NpeF9jb25maWcuaApAQCAtMTgwLDYgKzE4Miw3IEBACiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5oIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfc29ja2V0LmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9vcy5oIFwKKyAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfdXNlci5oIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfZ3VpLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9ndWlfcmVzb3VyY2VzLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmgiCkBAIC0xOTgsNiArMjAxLDcgQEAKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfd3NhcmVjdl9jaGFpbi5jIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfd2luMzJfaW5pdC5jIFwKKyAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfdXNlci5jIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfZ3VpLmMgXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmMgXAogICAgICAgICAgICAgc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jIgpAQCAtMjkwLDYgKzI5NCwxMCBAQAogSFRUUF9BQ0NFU1NfU1JDUz1zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2FjY2Vzc19tb2R1bGUuYwogCiAKK0hUVFBfQVVUSF9CQVNJQ19NT0RVTEU9bmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUKK0hUVFBfQVVUSF9CQVNJQ19TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYworCisKIEhUVFBfQVVUT0lOREVYX01PRFVMRT1uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlCiBIVFRQX0FVVE9JTkRFWF9TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jCiAKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggYTIxZGY4Ni4uNjZhYzFhNyAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw0MiBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4xLjI2IiBkYXRlPSIyMi4wMy4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgorzsXXxdLO2cUg09TSz8vJINrBx8/Mz9fLwSwg0MXSxcTBzs7ZxSDLzMnFztTPzSwg1MXQxdLYIMnHzs/SydLVxdTT0SDJCivawdDJ09nXwcDU09Eg1yBlcnJvcl9sb2cgzsEg1dLP187FIGluZm8uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgaW52YWxpZCBjbGllbnQgaGVhZGVyIGxpbmVzIGFyZSBub3cgaWdub3JlZCBhbmQgbG9nZ2VkIGF0IHRoZSBpbmZvIGxldmVsLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DSySDawdDJ08kgz9vJws/LINcgzM/HINrB0MnT2dfBxdTT0SDUwcsg1sUgyc3RIMjP09TBLCDQ0skgz8LSwd3FzsnJCivLIMvP1M/Sz83VLCDQ0s/J2s/bzMEgz9vJwsvBLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGhvc3QgbmFtZSBpcyBhbHNvIGxvZ2dlZCBpbiBlcnJvciBsb2cuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZSDJIMTJ0sXL1MnX2SBhdXRoX2Jhc2ljIMkKK2F1dGhfYmFzaWNfdXNlcl9maWxlLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlIG1vZHVsZSBhbmQgdGhlIGF1dGhfYmFzaWMgYW5kCithdXRoX2Jhc2ljX3VzZXJfZmlsZSBkaXJlY3RpdmVzLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMS4yNSIgZGF0ZT0iMTkuMDMuMjAwNSI+CiAKIDxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IGUyYTM1ZGMuLjA2ZWVkZDMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMTE5LDcgKzExOSw3IEBACiBuZ3hfdWludF90ICBuZ3hfbWF4X21vZHVsZTsKIAogCi1pbnQKK2ludCBuZ3hfY2RlY2wKIG1haW4oaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KQogewogICAgIG5neF9pbnRfdCAgICAgICAgIGk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCA1NGFmY2E5Li5kMDk3Y2Y3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuMjUiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjI3IgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9ORVdQSURfRVhUICAgICAiLm5ld2JpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwppbmRleCA2NTNmZjQ4Li5lODExOWZjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCkBAIC05LDYgKzksNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2NvbmZfaGFuZGxlcihuZ3hfY29uZl90ICpjZiwgbmd4X2ludF90IGxhc3QpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfY29uZl9yZWFkX3Rva2VuKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfY29uZl9pbmNsdWRlKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwogCiAKQEAgLTM1LDcgKzM2LDYgQEAKIH07CiAKIAotCiAvKiBUaGUgdGVuIGZpeGVkIGFyZ3VtZW50cyAqLwogCiBzdGF0aWMgaW50IGFyZ3VtZW50X251bWJlcltdID0gewpAQCAtNDksMTAgKzQ5LDkgQEAKICAgICBOR1hfQ09ORl9UQUtFNwogfTsKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfY29uZl9yZWFkX3Rva2VuKG5neF9jb25mX3QgKmNmKTsKIAotCi1jaGFyICpuZ3hfY29uZl9wYXJzZShuZ3hfY29uZl90ICpjZiwgbmd4X3N0cl90ICpmaWxlbmFtZSkKK2NoYXIgKgorbmd4X2NvbmZfcGFyc2Uobmd4X2NvbmZfdCAqY2YsIG5neF9zdHJfdCAqZmlsZW5hbWUpCiB7CiAgICAgY2hhciAgICAgICAgICAgICAqcnY7CiAgICAgbmd4X2ZkX3QgICAgICAgICAgZmQ7CkBAIC0xNzMsNyArMTcyLDggQEAKIH0KIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9jb25mX2hhbmRsZXIobmd4X2NvbmZfdCAqY2YsIG5neF9pbnRfdCBsYXN0KQorc3RhdGljIG5neF9pbnRfdAorbmd4X2NvbmZfaGFuZGxlcihuZ3hfY29uZl90ICpjZiwgbmd4X2ludF90IGxhc3QpCiB7CiAgICAgY2hhciAgICAgICAgICAgKnJ2OwogICAgIHZvaWQgICAgICAgICAgICpjb25mLCAqKmNvbmZwOwpAQCAtMzMxLDcgKzMzMSw4IEBACiB9CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfY29uZl9yZWFkX3Rva2VuKG5neF9jb25mX3QgKmNmKQorc3RhdGljIG5neF9pbnRfdAorbmd4X2NvbmZfcmVhZF90b2tlbihuZ3hfY29uZl90ICpjZikKIHsKICAgICB1X2NoYXIgICAgICAqc3RhcnQsIGNoLCAqc3JjLCAqZHN0OwogICAgIGludCAgICAgICAgICBsZW47CkBAIC01NzYsNyArNTc3LDggQEAKIH0KIAogCi1zdGF0aWMgY2hhciAqbmd4X2NvbmZfaW5jbHVkZShuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQorc3RhdGljIGNoYXIgKgorbmd4X2NvbmZfaW5jbHVkZShuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIG5neF9zdHJfdCAgKnZhbHVlLCBmaWxlOwogCkBAIC01OTMsNyArNTk1LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2NvbmZfZnVsbF9uYW1lKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X3N0cl90ICpuYW1lKQorbmd4X2ludF90CituZ3hfY29uZl9mdWxsX25hbWUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfc3RyX3QgKm5hbWUpCiB7CiAgICAgdV9jaGFyICAgICAqcDsKICAgICBuZ3hfc3RyX3QgICBvbGQ7CkBAIC02NDEsNyArNjQ0LDggQEAKIH0KIAogCi1uZ3hfb3Blbl9maWxlX3QgKm5neF9jb25mX29wZW5fZmlsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9zdHJfdCAqbmFtZSkKK25neF9vcGVuX2ZpbGVfdCAqCituZ3hfY29uZl9vcGVuX2ZpbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfc3RyX3QgKm5hbWUpCiB7CiAgICAgbmd4X3N0cl90ICAgICAgICAgZnVsbDsKICAgICBuZ3hfdWludF90ICAgICAgICBpOwpAQCAtNzAzLDggKzcwNyw5IEBACiB9CiAKIAotdm9pZCBuZ3hfY29uZl9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2NvbmZfdCAqY2YsIG5neF9lcnJfdCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmbXQsIC4uLikKK3ZvaWQgbmd4X2NkZWNsCituZ3hfY29uZl9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2NvbmZfdCAqY2YsIG5neF9lcnJfdCBlcnIsCisgICAgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdV9jaGFyICAgZXJyc3RyW05HWF9NQVhfQ09ORl9FUlJTVFJdLCAqYnVmLCAqbGFzdDsKICAgICB2YV9saXN0ICBhcmdzOwpAQCAtNzI5LDcgKzczNCw4IEBACiB9CiAKIAotY2hhciAqbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQorY2hhciAqCituZ3hfY29uZl9zZXRfZmxhZ19zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7CiAgICAgY2hhciAgKnAgPSBjb25mOwogCkBAIC03NjgsNyArNzc0LDggQEAKIH0KIAogCi1jaGFyICpuZ3hfY29uZl9zZXRfc3RyX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK2NoYXIgKgorbmd4X2NvbmZfc2V0X3N0cl9zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7CiAgICAgY2hhciAgKnAgPSBjb25mOwogCkBAIC03OTQsNyArODAxLDggQEAKIH0KIAogCi1jaGFyICpuZ3hfY29uZl9zZXRfbnVtX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK2NoYXIgKgorbmd4X2NvbmZfc2V0X251bV9zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7CiAgICAgY2hhciAgKnAgPSBjb25mOwogCkBAIC04MjQsNyArODMyLDggQEAKIH0KIAogCi1jaGFyICpuZ3hfY29uZl9zZXRfc2l6ZV9zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCitjaGFyICoKK25neF9jb25mX3NldF9zaXplX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKIHsKICAgICBjaGFyICAqcCA9IGNvbmY7CiAKQEAgLTg1NCw3ICs4NjMsOCBAQAogfQogCiAKLWNoYXIgKm5neF9jb25mX3NldF9tc2VjX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK2NoYXIgKgorbmd4X2NvbmZfc2V0X21zZWNfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGNoYXIgICpwID0gY29uZjsKIApAQCAtODg4LDcgKzg5OCw4IEBACiB9CiAKIAotY2hhciAqbmd4X2NvbmZfc2V0X3NlY19zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCitjaGFyICoKK25neF9jb25mX3NldF9zZWNfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGNoYXIgICpwID0gY29uZjsKIApAQCAtOTIyLDcgKzkzMyw4IEBACiB9CiAKIAotY2hhciAqbmd4X2NvbmZfc2V0X2J1ZnNfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQorY2hhciAqCituZ3hfY29uZl9zZXRfYnVmc19zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7CiAgICAgY2hhciAqcCA9IGNvbmY7CiAKQEAgLTk1MSw3ICs5NjMsOCBAQAogfQogCiAKLWNoYXIgKm5neF9jb25mX3NldF9lbnVtX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK2NoYXIgKgorbmd4X2NvbmZfc2V0X2VudW1fc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGNoYXIgICpwID0gY29uZjsKIApAQCAtOTg3LDcgKzEwMDAsOCBAQAogfQogCiAKLWNoYXIgKm5neF9jb25mX3NldF9iaXRtYXNrX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK2NoYXIgKgorbmd4X2NvbmZfc2V0X2JpdG1hc2tfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGNoYXIgICpwID0gY29uZjsKIApAQCAtMTAzMiwxMyArMTA0NiwxNSBAQAogfQogCiAKLWNoYXIgKm5neF9jb25mX3Vuc3VwcG9ydGVkKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCitjaGFyICoKK25neF9jb25mX3Vuc3VwcG9ydGVkKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7CiAgICAgcmV0dXJuICJ1bnN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIjsKIH0KIAogCi1jaGFyICpuZ3hfY29uZl9jaGVja19udW1fYm91bmRzKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQorY2hhciAqCituZ3hfY29uZl9jaGVja19udW1fYm91bmRzKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQogewogICAgIG5neF9jb25mX251bV9ib3VuZHNfdCAgKmJvdW5kcyA9IHBvc3Q7CiAgICAgbmd4X2ludF90ICAqbnAgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCmluZGV4IDhkY2RkNTQuLmQ1YTdhNjYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAKIHR5cGVkZWYgY2hhciAqKCpuZ3hfY29uZl9wb3N0X2hhbmRsZXJfcHQpIChuZ3hfY29uZl90ICpjZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCB2b2lkICpjb25mKTsKKyAgICB2b2lkICpkYXRhLCB2b2lkICpjb25mKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgcG9zdF9oYW5kbGVyOwpAQCAtMjc0LDggKzI3NCw4IEBACiAKIG5neF9pbnRfdCBuZ3hfY29uZl9mdWxsX25hbWUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfc3RyX3QgKm5hbWUpOwogbmd4X29wZW5fZmlsZV90ICpuZ3hfY29uZl9vcGVuX2ZpbGUobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfc3RyX3QgKm5hbWUpOwotdm9pZCBuZ3hfY29uZl9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2NvbmZfdCAqY2YsIG5neF9lcnJfdCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmbXQsIC4uLik7Cit2b2lkIG5neF9jZGVjbCBuZ3hfY29uZl9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2NvbmZfdCAqY2YsCisgICAgbmd4X2Vycl90IGVyciwgY2hhciAqZm10LCAuLi4pOwogCiAKIGNoYXIgKm5neF9jb25mX3NldF9mbGFnX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZmlnLmggYi9zcmMvY29yZS9uZ3hfY29uZmlnLmgKaW5kZXggYmMwMjQ0OS4uNjc1ZDQyNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCisrKyBiL3NyYy9jb3JlL25neF9jb25maWcuaApAQCAtNjMsNiArNjMsOSBAQAogI2RlZmluZSBOR1hfQ0hBTkdFQklOX1NJR05BTCAgICAgVVNSMgogI2VuZGlmCiAKKyNkZWZpbmUgbmd4X2NkZWNsCisjZGVmaW5lIG5neF9saWJjX2NkZWNsCisKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9sb2cuYyBiL3NyYy9jb3JlL25neF9sb2cuYwppbmRleCBhZGNjZDVlLi4xODFkMDU5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfbG9nLmMKKysrIGIvc3JjL2NvcmUvbmd4X2xvZy5jCkBAIC01OCwxMSArNTgsMTcgQEAKIAogCiAjaWYgKE5HWF9IQVZFX1ZBUklBRElDX01BQ1JPUykKLXZvaWQgbmd4X2xvZ19lcnJvcl9jb3JlKG5neF91aW50X3QgbGV2ZWwsIG5neF9sb2dfdCAqbG9nLCBuZ3hfZXJyX3QgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisKK3ZvaWQKK25neF9sb2dfZXJyb3JfY29yZShuZ3hfdWludF90IGxldmVsLCBuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKKyAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKwogI2Vsc2UKLXZvaWQgbmd4X2xvZ19lcnJvcl9jb3JlKG5neF91aW50X3QgbGV2ZWwsIG5neF9sb2dfdCAqbG9nLCBuZ3hfZXJyX3QgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCisKK3ZvaWQKK25neF9sb2dfZXJyb3JfY29yZShuZ3hfdWludF90IGxldmVsLCBuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKKyAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKKwogI2VuZGlmCiB7CiAjaWYgKE5HWF9IQVZFX1ZBUklBRElDX01BQ1JPUykKQEAgLTE0NCw3ICsxNTAsOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG5neF9sb2dfd3JpdGUobmd4X2xvZ190ICpsb2csIHVfY2hhciAqZXJyc3RyLCBzaXplX3QgbGVuKQorc3RhdGljIHZvaWQKK25neF9sb2dfd3JpdGUobmd4X2xvZ190ICpsb2csIHVfY2hhciAqZXJyc3RyLCBzaXplX3QgbGVuKQogewogI2lmIChOR1hfV0lOMzIpCiAgICAgdV9sb25nICB3cml0dGVuOwpAQCAtMTgwLDggKzE4Nyw5IEBACiAKICNpZiAhKE5HWF9IQVZFX1ZBUklBRElDX01BQ1JPUykKIAotdm9pZCBuZ3hfbG9nX2Vycm9yKG5neF91aW50X3QgbGV2ZWwsIG5neF9sb2dfdCAqbG9nLCBuZ3hfZXJyX3QgZXJyLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQordm9pZCBuZ3hfY2RlY2wKK25neF9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCisgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdmFfbGlzdCAgYXJnczsKIApAQCAtMTkzLDcgKzIwMSw4IEBACiB9CiAKIAotdm9pZCBuZ3hfbG9nX2RlYnVnX2NvcmUobmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQordm9pZCBuZ3hfY2RlY2wKK25neF9sb2dfZGVidWdfY29yZShuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdmFfbGlzdCAgYXJnczsKIApAQCAtMjA1LDcgKzIxNCw4IEBACiAjZW5kaWYKIAogCi1uZ3hfbG9nX3QgKm5neF9sb2dfaW5pdCh2b2lkKQorbmd4X2xvZ190ICoKK25neF9sb2dfaW5pdCh2b2lkKQogewogICAgIG5neF9sb2cuZmlsZSA9ICZuZ3hfc3RkZXJyOwogICAgIG5neF9sb2cubG9nX2xldmVsID0gTkdYX0xPR19OT1RJQ0U7CkBAIC0yNDAsNyArMjUwLDggQEAKIH0KIAogCi1uZ3hfbG9nX3QgKm5neF9sb2dfY3JlYXRlX2VycmxvZyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9hcnJheV90ICphcmdzKQorbmd4X2xvZ190ICoKK25neF9sb2dfY3JlYXRlX2VycmxvZyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9hcnJheV90ICphcmdzKQogewogICAgIG5neF9sb2dfdCAgKmxvZzsKICAgICBuZ3hfc3RyX3QgICp2YWx1ZSwgKm5hbWU7CkBAIC0yNjcsNyArMjc4LDggQEAKIH0KIAogCi1jaGFyICpuZ3hfc2V0X2Vycm9yX2xvZ19sZXZlbHMobmd4X2NvbmZfdCAqY2YsIG5neF9sb2dfdCAqbG9nKQorY2hhciAqCituZ3hfc2V0X2Vycm9yX2xvZ19sZXZlbHMobmd4X2NvbmZfdCAqY2YsIG5neF9sb2dfdCAqbG9nKQogewogICAgIG5neF91aW50X3QgICBpLCBuLCBkOwogICAgIG5neF9zdHJfdCAgICp2YWx1ZTsKQEAgLTMyMCw3ICszMzIsOCBAQAogfQogCiAKLXN0YXRpYyBjaGFyICpuZ3hfc2V0X2Vycm9yX2xvZyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQorc3RhdGljIGNoYXIgKgorbmd4X3NldF9lcnJvcl9sb2cobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKIHsKICAgICBuZ3hfc3RyX3QgICp2YWx1ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xvZy5oIGIvc3JjL2NvcmUvbmd4X2xvZy5oCmluZGV4IGFhZTkyZTcuLjU5NTJiNTIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9sb2cuaAorKysgYi9zcmMvY29yZS9uZ3hfbG9nLmgKQEAgLTEwMywxMSArMTAzLDEyIEBACiAKICNkZWZpbmUgTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TICAwCiAKLXZvaWQgbmd4X2xvZ19lcnJvcihuZ3hfdWludF90IGxldmVsLCBuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKK3ZvaWQgbmd4X2NkZWNsIG5neF9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pOwogdm9pZCBuZ3hfbG9nX2Vycm9yX2NvcmUobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwotdm9pZCBuZ3hfbG9nX2RlYnVnX2NvcmUobmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgbmd4X2NkZWNsIG5neF9sb2dfZGVidWdfY29yZShuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKKyAgICBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKIAogI2VuZGlmIC8qIFZBUklBRElDIE1BQ1JPUyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3JlZ2V4LmMgYi9zcmMvY29yZS9uZ3hfcmVnZXguYwppbmRleCAxMjU3OTk0Li5lZGEyNDNiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcmVnZXguYworKysgYi9zcmMvY29yZS9uZ3hfcmVnZXguYwpAQCAtOCwyMiArOCwyNCBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotc3RhdGljIHZvaWQgKm5neF9yZWdleF9tYWxsb2Moc2l6ZV90IHNpemUpOwotc3RhdGljIHZvaWQgbmd4X3JlZ2V4X2ZyZWUodm9pZCAqcCk7CitzdGF0aWMgdm9pZCAqIG5neF9saWJjX2NkZWNsIG5neF9yZWdleF9tYWxsb2Moc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgbmd4X2xpYmNfY2RlY2wgbmd4X3JlZ2V4X2ZyZWUodm9pZCAqcCk7CiAKIAogc3RhdGljIG5neF9wb29sX3QgICpuZ3hfcGNyZV9wb29sOwogCiAKLXZvaWQgbmd4X3JlZ2V4X2luaXQodm9pZCkKK3ZvaWQKK25neF9yZWdleF9pbml0KHZvaWQpCiB7CiAgICAgcGNyZV9tYWxsb2MgPSBuZ3hfcmVnZXhfbWFsbG9jOwogICAgIHBjcmVfZnJlZSA9IG5neF9yZWdleF9mcmVlOwogfQogCiAKLW5neF9yZWdleF90ICpuZ3hfcmVnZXhfY29tcGlsZShuZ3hfc3RyX3QgKnBhdHRlcm4sIG5neF9pbnRfdCBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wb29sX3QgKnBvb2wsIG5neF9zdHJfdCAqZXJyKQorbmd4X3JlZ2V4X3QgKgorbmd4X3JlZ2V4X2NvbXBpbGUobmd4X3N0cl90ICpwYXR0ZXJuLCBuZ3hfaW50X3Qgb3B0aW9ucywgbmd4X3Bvb2xfdCAqcG9vbCwKKyAgICBuZ3hfc3RyX3QgKmVycikKIHsKICAgICBpbnQgICAgICAgICAgICAgIGVycm9mZjsKICAgICBjb25zdCBjaGFyICAgICAgKmVycnN0cjsKQEAgLTc5LDcgKzgxLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X3JlZ2V4X2NhcHR1cmVfY291bnQobmd4X3JlZ2V4X3QgKnJlKQorbmd4X2ludF90CituZ3hfcmVnZXhfY2FwdHVyZV9jb3VudChuZ3hfcmVnZXhfdCAqcmUpCiB7CiAgICAgaW50ICByYywgbjsKIApAQCAtOTUsOCArOTgsOCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfcmVnZXhfZXhlYyhuZ3hfcmVnZXhfdCAqcmUsIG5neF9zdHJfdCAqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhcHR1cmVzLCBuZ3hfaW50X3Qgc2l6ZSkKK25neF9pbnRfdAorbmd4X3JlZ2V4X2V4ZWMobmd4X3JlZ2V4X3QgKnJlLCBuZ3hfc3RyX3QgKnMsIGludCAqY2FwdHVyZXMsIG5neF9pbnRfdCBzaXplKQogewogICAgIGludCAgcmM7CiAKQEAgLTExMSw3ICsxMTQsOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkICpuZ3hfcmVnZXhfbWFsbG9jKHNpemVfdCBzaXplKQorc3RhdGljIHZvaWQgKiBuZ3hfbGliY19jZGVjbAorbmd4X3JlZ2V4X21hbGxvYyhzaXplX3Qgc2l6ZSkKIHsKICAgICBuZ3hfcG9vbF90ICAgICAgKnBvb2w7CiAjaWYgKE5HWF9USFJFQURTKQpAQCAtMTM1LDcgKzEzOSw4IEBACiB9CiAKIAotc3RhdGljIHZvaWQgbmd4X3JlZ2V4X2ZyZWUodm9pZCAqcCkKK3N0YXRpYyB2b2lkIG5neF9saWJjX2NkZWNsCituZ3hfcmVnZXhfZnJlZSh2b2lkICpwKQogewogICAgIHJldHVybjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuYyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwppbmRleCBhMWY1OTNmLi44ZDY5YzFiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCkBAIC03NSw3ICs3NSw3IEBACiAgKi8KIAogCi11X2NoYXIgKgordV9jaGFyICogbmd4X2NkZWNsCiBuZ3hfc3ByaW50Zih1X2NoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgICAgdV9jaGFyICAgKnA7CkBAIC04OSw3ICs4OSw3IEBACiB9CiAKIAotdV9jaGFyICoKK3VfY2hhciAqIG5neF9jZGVjbAogbmd4X3NucHJpbnRmKHVfY2hhciAqYnVmLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgICB1X2NoYXIgICAqcDsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCAyNWIwNmIzLi4yNGEyMzc5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC03NCw4ICs3NCw4IEBACiAKIHVfY2hhciAqbmd4X2NweXN0cm4odV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgbik7CiB1X2NoYXIgKm5neF9wc3RyZHVwKG5neF9wb29sX3QgKnBvb2wsIG5neF9zdHJfdCAqc3JjKTsKLXVfY2hhciAqbmd4X3NwcmludGYodV9jaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLXVfY2hhciAqbmd4X3NucHJpbnRmKHVfY2hhciAqYnVmLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit1X2NoYXIgKiBuZ3hfY2RlY2wgbmd4X3NwcmludGYodV9jaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3VfY2hhciAqIG5neF9jZGVjbCBuZ3hfc25wcmludGYodV9jaGFyICpidWYsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIHVfY2hhciAqbmd4X3ZzbnByaW50Zih1X2NoYXIgKmJ1Ziwgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwogCiBuZ3hfaW50X3Qgbmd4X3JzdHJuY21wKHVfY2hhciAqczEsIHVfY2hhciAqczIsIHNpemVfdCBuKTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwppbmRleCAzNzFjNWM3Li4wZDEwYzRiIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCkBAIC04ODMsNyArODgzLDggQEAKICAgICAqZnAgPSAwOwogCiAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfV0FSTiwgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJcImFjY2VwdF9tdXRleFwiIGlzIG5vdCBzdXBwb3J0ZWQsIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIlwiYWNjZXB0X211dGV4XCIgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLCAiCisgICAgICAgICAgICAgICAgICAgICAgICJpZ25vcmVkIik7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwppbmRleCA4ZTJhMWVhLi45NDQxYzgyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCiAgICAgICAgIGlmICgqKCZjLT5sb2NrKSkgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlubG9jayBpbiBhY2NlcHQsIGZkOiUiLCBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlubG9jayBpbiBhY2NlcHQsIGZkOiVkIiwgcyk7CiAgICAgICAgICAgICBuZ3hfc3BpbmxvY2soJmMtPmxvY2ssIDEwMDApOwogICAgICAgICAgICAgbmd4X3VubG9jaygmYy0+bG9jayk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzMxNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jCkBAIC0wLDAgKzEsNDM2IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgorI2luY2x1ZGUgPG5neF9jb3JlLmg+CisjaW5jbHVkZSA8bmd4X2h0dHAuaD4KKworCisjZGVmaW5lIE5HWF9IVFRQX0FVVEhfQlVGX1NJWkUgIDIwNDgKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbmd4X3N0cl90ICBwYXNzd2Q7Cit9IG5neF9odHRwX2F1dGhfYmFzaWNfY3R4X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG5neF9zdHJfdCAgcmVhbG07CisgICAgbmd4X3N0cl90ICB1c2VyX2ZpbGU7Cit9IG5neF9odHRwX2F1dGhfYmFzaWNfbG9jX2NvbmZfdDsKKworCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dGhfYmFzaWNfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2NyeXB0X2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX2F1dGhfYmFzaWNfY3R4X3QgKmN0eCwgbmd4X3N0cl90ICpwYXNzd2QsIG5neF9zdHJfdCAqcmVhbG0pOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRoX2Jhc2ljX3NldF9yZWFsbShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X3N0cl90ICpyZWFsbSk7CitzdGF0aWMgdm9pZCBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2Nsb3NlKG5neF9maWxlX3QgKmZpbGUpOworc3RhdGljIHZvaWQgKm5neF9odHRwX2F1dGhfYmFzaWNfY3JlYXRlX2xvY19jb25mKG5neF9jb25mX3QgKmNmKTsKK3N0YXRpYyBjaGFyICpuZ3hfaHR0cF9hdXRoX2Jhc2ljX21lcmdlX2xvY19jb25mKG5neF9jb25mX3QgKmNmLAorICAgIHZvaWQgKnBhcmVudCwgdm9pZCAqY2hpbGQpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBjaGFyICpuZ3hfaHR0cF9hdXRoX2Jhc2ljKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKKworCitzdGF0aWMgbmd4X2NvbmZfcG9zdF9oYW5kbGVyX3B0ICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX3AgPSBuZ3hfaHR0cF9hdXRoX2Jhc2ljOworCitzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2h0dHBfYXV0aF9iYXNpY19jb21tYW5kc1tdID0geworCisgICAgeyBuZ3hfc3RyaW5nKCJhdXRoX2Jhc2ljIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9hdXRoX2Jhc2ljX2xvY19jb25mX3QsIHJlYWxtKSwKKyAgICAgICZuZ3hfaHR0cF9hdXRoX2Jhc2ljX3AgfSwKKworICAgIHsgbmd4X3N0cmluZygiYXV0aF9iYXNpY191c2VyX2ZpbGUiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9zdHJfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2F1dGhfYmFzaWNfbG9jX2NvbmZfdCwgdXNlcl9maWxlKSwKKyAgICAgIE5VTEwgfSwKKworICAgICAgbmd4X251bGxfY29tbWFuZAorfTsKKworCisKK25neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZV9jdHggPSB7CisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlIGNvbmYgKi8KKworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLworCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIHNlcnZlciBjb25maWd1cmF0aW9uICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KKworICAgIG5neF9odHRwX2F1dGhfYmFzaWNfY3JlYXRlX2xvY19jb25mLCAgIC8qIGNyZWF0ZSBsb2NhdGlvbiBjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfYXV0aF9iYXNpY19tZXJnZV9sb2NfY29uZiAgICAgLyogbWVyZ2UgbG9jYXRpb24gY29uZmlndXJhdGlvbiAqLworfTsKKworCituZ3hfbW9kdWxlX3QgIG5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlID0geworICAgIE5HWF9NT0RVTEUsCisgICAgJm5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlX2N0eCwgICAgICAgLyogbW9kdWxlIGNvbnRleHQgKi8KKyAgICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2NvbW1hbmRzLCAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLworICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCisgICAgbmd4X2h0dHBfYXV0aF9iYXNpY19pbml0LCAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KK307CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfYXV0aF9iYXNpY19oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3sKKyAgICBvZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgbjsKKyAgICBuZ3hfZmRfdCAgICAgICAgICAgICAgICAgICAgICAgICBmZDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICBhdXRoLCBlbmNvZGVkLCBwd2Q7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgaSwgbG9naW4sIGxlbiwgbGVmdCwgcGFzc3dkOworICAgIG5neF9maWxlX3QgICAgICAgICAgICAgICAgICAgICAgIGZpbGU7CisgICAgbmd4X2h0dHBfYXV0aF9iYXNpY19jdHhfdCAgICAgICAqY3R4OworICAgIG5neF9odHRwX2F1dGhfYmFzaWNfbG9jX2NvbmZfdCAgKmFsY2Y7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmW05HWF9IVFRQX0FVVEhfQlVGX1NJWkVdOworICAgIGVudW0geworICAgICAgICBzd19sb2dpbiwKKyAgICAgICAgc3dfcGFzc3dkLAorICAgICAgICBzd19za2lwCisgICAgfSBzdGF0ZTsKKworICAgIGFsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlKTsKKworICAgIGlmIChhbGNmLT5yZWFsbS5sZW4gPT0gMCB8fCBhbGNmLT51c2VyX2ZpbGUubGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLCBuZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZSk7CisKKyAgICBpZiAoY3R4KSB7CisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2NyeXB0X2hhbmRsZXIociwgY3R4LCAmY3R4LT5wYXNzd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFsY2YtPnJlYWxtKTsKKyAgICB9CisKKyAgICBpZiAoci0+aGVhZGVyc19pbi5hdXRob3JpemF0aW9uID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dGhfYmFzaWNfc2V0X3JlYWxtKHIsICZhbGNmLT5yZWFsbSk7CisgICAgfQorCisgICAgZW5jb2RlZCA9IHItPmhlYWRlcnNfaW4uYXV0aG9yaXphdGlvbi0+dmFsdWU7CisKKyAgICBpZiAoZW5jb2RlZC5sZW4gPCBzaXplb2YoIkJhc2ljICIpIC0gMQorICAgICAgICB8fCBuZ3hfc3RybmNhc2VjbXAoZW5jb2RlZC5kYXRhLCAiQmFzaWMgIiwgc2l6ZW9mKCJCYXNpYyAiKSAtIDEpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0aF9iYXNpY19zZXRfcmVhbG0ociwgJmFsY2YtPnJlYWxtKTsKKyAgICB9CisKKyAgICBlbmNvZGVkLmxlbiAtPSBzaXplb2YoIkJhc2ljICIpIC0gMTsKKyAgICBlbmNvZGVkLmRhdGEgKz0gc2l6ZW9mKCJCYXNpYyAiKSAtIDE7CisKKyAgICB3aGlsZSAoZW5jb2RlZC5sZW4gJiYgZW5jb2RlZC5kYXRhWzBdID09ICcgJykgeworICAgICAgICBlbmNvZGVkLmxlbi0tOworICAgICAgICBlbmNvZGVkLmRhdGErKzsKKyAgICB9CisKKyAgICBpZiAoZW5jb2RlZC5sZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0aF9iYXNpY19zZXRfcmVhbG0ociwgJmFsY2YtPnJlYWxtKTsKKyAgICB9CisKKyAgICBhdXRoLmxlbiA9IG5neF9iYXNlNjRfZGVjb2RlZF9sZW5ndGgoZW5jb2RlZC5sZW4pOworICAgIGF1dGguZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgYXV0aC5sZW4gKyAxKTsKKyAgICBpZiAoYXV0aC5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAobmd4X2RlY29kZV9iYXNlNjQoJmF1dGgsICZlbmNvZGVkKSAhPSBOR1hfT0spIHsKKyAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dGhfYmFzaWNfc2V0X3JlYWxtKHIsICZhbGNmLT5yZWFsbSk7CisgICAgfQorCisgICAgYXV0aC5kYXRhW2F1dGgubGVuXSA9ICdcMCc7CisKKyAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IGF1dGgubGVuOyBsZW4rKykgeworICAgICAgICBpZiAoYXV0aC5kYXRhW2xlbl0gPT0gJzonKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsZW4gPT0gYXV0aC5sZW4pIHsKKyAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dGhfYmFzaWNfc2V0X3JlYWxtKHIsICZhbGNmLT5yZWFsbSk7CisgICAgfQorCisgICAgci0+aGVhZGVyc19pbi51c2VyLmxlbiA9IGxlbjsKKyAgICByLT5oZWFkZXJzX2luLnVzZXIuZGF0YSA9IGF1dGguZGF0YTsKKyAgICByLT5oZWFkZXJzX2luLnBhc3N3ZC5sZW4gPSBhdXRoLmxlbiAtIGxlbiAtIDE7CisgICAgci0+aGVhZGVyc19pbi5wYXNzd2QuZGF0YSA9ICZhdXRoLmRhdGFbbGVuICsgMV07CisKKyAgICBmZCA9IG5neF9vcGVuX2ZpbGUoYWxjZi0+dXNlcl9maWxlLmRhdGEsIE5HWF9GSUxFX1JET05MWSwgTkdYX0ZJTEVfT1BFTik7CisKKyAgICBpZiAoZmQgPT0gTkdYX0lOVkFMSURfRklMRSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgYWxjZi0+dXNlcl9maWxlLmRhdGEpOworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgIH0KKworICAgIG5neF9tZW16ZXJvKCZmaWxlLCBzaXplb2Yobmd4X2ZpbGVfdCkpOworCisgICAgZmlsZS5mZCA9IGZkOworICAgIGZpbGUubmFtZSA9IGFsY2YtPnVzZXJfZmlsZTsKKyAgICBmaWxlLmxvZyA9IHItPmNvbm5lY3Rpb24tPmxvZzsKKworICAgIHN0YXRlID0gc3dfbG9naW47CisgICAgcGFzc3dkID0gMDsKKyAgICBsb2dpbiA9IDA7CisgICAgbGVmdCA9IDA7CisgICAgb2Zmc2V0ID0gMDsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBuID0gbmd4X3JlYWRfZmlsZSgmZmlsZSwgYnVmICsgbGVmdCwgTkdYX0hUVFBfQVVUSF9CVUZfU0laRSAtIGxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCk7CisKKyAgICAgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2Nsb3NlKCZmaWxlKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IGxlZnQ7IGkgPCBsZWZ0ICsgbjsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisKKyAgICAgICAgICAgIGNhc2Ugc3dfbG9naW46CisgICAgICAgICAgICAgICAgaWYgKGxvZ2luID09IDAgJiYgYnVmW2ldID09ICcjJykgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3NraXA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChidWZbaV0gIT0gYXV0aC5kYXRhW2xvZ2luXSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3NraXA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChsb2dpbiA9PSBsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19wYXNzd2Q7CisgICAgICAgICAgICAgICAgICAgIHBhc3N3ZCA9IGkgKyAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxvZ2luKys7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBzd19wYXNzd2Q6CisgICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSA9PSBMRiB8fCBidWZbaV0gPT0gQ1IgfHwgYnVmW2ldID09ICc6JykgeworICAgICAgICAgICAgICAgICAgICBidWZbaV0gPSAnXDAnOworCisgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2F1dGhfYmFzaWNfY2xvc2UoJmZpbGUpOworCisgICAgICAgICAgICAgICAgICAgIHB3ZC5sZW4gPSBpIC0gcGFzc3dkOworICAgICAgICAgICAgICAgICAgICBwd2QuZGF0YSA9ICZidWZbcGFzc3dkXTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0aF9iYXNpY19jcnlwdF9oYW5kbGVyKHIsIE5VTEwsICZwd2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFsY2YtPnJlYWxtKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBzd19za2lwOgorICAgICAgICAgICAgICAgIGlmIChidWZbaV0gPT0gTEYpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19sb2dpbjsKKyAgICAgICAgICAgICAgICAgICAgbG9naW4gPSAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0YXRlID09IHN3X3Bhc3N3ZCkgeworICAgICAgICAgICAgbGVmdCA9IGxlZnQgKyBuIC0gcGFzc3dkOworICAgICAgICAgICAgbmd4X21lbWNweShidWYsICZidWZbcGFzc3dkXSwgbGVmdCk7CisgICAgICAgICAgICBwYXNzd2QgPSAwOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZWZ0ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSBuOworICAgIH0KKworICAgIG5neF9odHRwX2F1dGhfYmFzaWNfY2xvc2UoJmZpbGUpOworCisgICAgcmV0dXJuIG5neF9odHRwX2F1dGhfYmFzaWNfc2V0X3JlYWxtKHIsICZhbGNmLT5yZWFsbSk7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfYXV0aF9iYXNpY19jcnlwdF9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2N0eF90ICpjdHgsIG5neF9zdHJfdCAqcGFzc3dkLCBuZ3hfc3RyX3QgKnJlYWxtKQoreworICAgIG5neF9pbnRfdCAgIHJjOworICAgIHVfY2hhciAgICAgKmVuY3J5cHRlZDsKKworICAgIHJjID0gbmd4X2NyeXB0KHItPnBvb2wsIHItPmhlYWRlcnNfaW4ucGFzc3dkLmRhdGEsIHBhc3N3ZC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAmZW5jcnlwdGVkKTsKKworICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgInJjOiAlZCB1c2VyOiBcIiVWXCIgc2FsdDogXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgIHJjLCAmci0+aGVhZGVyc19pbi51c2VyLCBwYXNzd2QtPmRhdGEpOworCisgICAgaWYgKHJjID09IE5HWF9PSykgeworICAgICAgICBpZiAobmd4X3N0cmNtcChlbmNyeXB0ZWQsIHBhc3N3ZC0+ZGF0YSkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiZW5jcnlwdGVkOiBcIiVzXCIiLCBlbmNyeXB0ZWQpOworCisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRoX2Jhc2ljX3NldF9yZWFsbShyLCByZWFsbSk7CisgICAgfQorCisgICAgaWYgKHJjID09IE5HWF9FUlJPUikgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgIH0KKworICAgIC8qIHJjID09IE5HWF9BR0FJTiAqLworCisgICAgaWYgKGN0eCA9PSBOVUxMKSB7CisgICAgICAgIGN0eCA9IG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX2F1dGhfYmFzaWNfY3R4X3QpKTsKKyAgICAgICAgaWYgKGN0eCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2h0dHBfc2V0X2N0eChyLCBjdHgsIG5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlKTsKKworICAgICAgICBjdHgtPnBhc3N3ZC5sZW4gPSBwYXNzd2QtPmxlbjsKKyAgICAgICAgcGFzc3dkLT5sZW4rKzsKKworICAgICAgICBjdHgtPnBhc3N3ZC5kYXRhID0gbmd4X3BzdHJkdXAoci0+cG9vbCwgcGFzc3dkKTsKKyAgICAgICAgaWYgKGN0eC0+cGFzc3dkLmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgLyogVE9ETzogYWRkIG11dGV4IGV2ZW50ICovCisKKyAgICByZXR1cm4gcmM7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfYXV0aF9iYXNpY19zZXRfcmVhbG0obmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfc3RyX3QgKnJlYWxtKQoreworICAgIHItPmhlYWRlcnNfb3V0Lnd3d19hdXRoZW50aWNhdGUgPSBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKTsKKyAgICBpZiAoci0+aGVhZGVyc19vdXQud3d3X2F1dGhlbnRpY2F0ZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgfQorCisgICAgci0+aGVhZGVyc19vdXQud3d3X2F1dGhlbnRpY2F0ZS0+a2V5LmxlbiA9IHNpemVvZigiV1dXLUF1dGhlbnRpY2F0ZSIpIC0gMTsKKyAgICByLT5oZWFkZXJzX291dC53d3dfYXV0aGVudGljYXRlLT5rZXkuZGF0YSA9ICh1X2NoYXIgKikgIldXVy1BdXRoZW50aWNhdGUiOworICAgIHItPmhlYWRlcnNfb3V0Lnd3d19hdXRoZW50aWNhdGUtPnZhbHVlID0gKnJlYWxtOworCisgICAgcmV0dXJuIE5HWF9IVFRQX1VOQVVUSE9SSVpFRDsKK30KKworc3RhdGljIHZvaWQKK25neF9odHRwX2F1dGhfYmFzaWNfY2xvc2Uobmd4X2ZpbGVfdCAqZmlsZSkKK3sKKyAgICBpZiAobmd4X2Nsb3NlX2ZpbGUoZmlsZS0+ZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgZmlsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBmaWxlLT5uYW1lLmRhdGEpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCAqCituZ3hfaHR0cF9hdXRoX2Jhc2ljX2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2xvY19jb25mX3QgICpjb25mOworCisgICAgY29uZiA9IG5neF9wY2FsbG9jKGNmLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfYXV0aF9iYXNpY19sb2NfY29uZl90KSk7CisgICAgaWYgKGNvbmYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIGNvbmY7Cit9CisKKworc3RhdGljIGNoYXIgKgorbmd4X2h0dHBfYXV0aF9iYXNpY19tZXJnZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCkKK3sKKyAgICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2xvY19jb25mX3QgICpwcmV2ID0gcGFyZW50OworICAgIG5neF9odHRwX2F1dGhfYmFzaWNfbG9jX2NvbmZfdCAgKmNvbmYgPSBjaGlsZDsKKworICAgIHNpemVfdCAgIGxlbjsKKyAgICB1X2NoYXIgICpyZWFsbSwgKnA7CisKKyAgICBpZiAoY29uZi0+cmVhbG0uZGF0YSkgeworICAgICAgICBpZiAoY29uZi0+cmVhbG0ubGVuKSB7CisgICAgICAgICAgICBsZW4gPSBzaXplb2YoIkJhc2ljIHJlYWxtPVwiIikgLSAxICsgY29uZi0+cmVhbG0ubGVuICsgMTsKKworICAgICAgICAgICAgcmVhbG0gPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCBsZW4pOworICAgICAgICAgICAgaWYgKHJlYWxtID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHJlYWxtLCAiQmFzaWMgcmVhbG09XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJCYXNpYyByZWFsbT1cIiIpIC0gMSk7CisgICAgICAgICAgICBwID0gbmd4X2NweW1lbShwLCBjb25mLT5yZWFsbS5kYXRhLCBjb25mLT5yZWFsbS5sZW4pOworICAgICAgICAgICAgKnAgPSAnIic7CisKKyAgICAgICAgICAgIGNvbmYtPnJlYWxtLmxlbiA9IGxlbjsKKyAgICAgICAgICAgIGNvbmYtPnJlYWxtLmRhdGEgPSByZWFsbTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uZi0+cmVhbG0gPSBwcmV2LT5yZWFsbTsKKyAgICB9CisKKworICAgIGlmIChjb25mLT51c2VyX2ZpbGUuZGF0YSkgeworICAgICAgICBpZiAobmd4X2NvbmZfZnVsbF9uYW1lKGNmLT5jeWNsZSwgJmNvbmYtPnVzZXJfZmlsZSkgIT0gTkdYX09LKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbmYtPnVzZXJfZmlsZSA9IHByZXYtPnVzZXJfZmlsZTsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfYXV0aF9iYXNpY19pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK3sKKyAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKKyAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKKworICAgIGNtY2YgPSBuZ3hfaHR0cF9jeWNsZV9nZXRfbW9kdWxlX21haW5fY29uZihjeWNsZSwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCisgICAgaCA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfQUNDRVNTX1BIQVNFXS5oYW5kbGVycyk7CisgICAgaWYgKGggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgICpoID0gbmd4X2h0dHBfYXV0aF9iYXNpY19oYW5kbGVyOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCitzdGF0aWMgY2hhciAqCituZ3hfaHR0cF9hdXRoX2Jhc2ljKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQoreworICAgIG5neF9zdHJfdCAgKnJlYWxtID0gZGF0YTsKKworICAgIGlmIChuZ3hfc3RyY21wKHJlYWxtLT5kYXRhLCAib2ZmIikgPT0gMCkgeworICAgICAgICByZWFsbS0+bGVuID0gMDsKKyAgICAgICAgcmVhbG0tPmRhdGEgPSAodV9jaGFyICopICIiOworICAgIH0KKworICAgIHJldHVybiBOR1hfQ09ORl9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKaW5kZXggYTdiOTk4Ni4uZmYxNjNlZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKQEAgLTM5LDcgKzM5LDggQEAKICNkZWZpbmUgTkdYX0hUVFBfQVVUT0lOREVYX05BTUVfTEVOICA1MAogCiAKLXN0YXRpYyBpbnQgbmd4X2h0dHBfYXV0b2luZGV4X2NtcF9lbnRyaWVzKGNvbnN0IHZvaWQgKm9uZSwgY29uc3Qgdm9pZCAqdHdvKTsKK3N0YXRpYyBpbnQgbmd4X2xpYmNfY2RlY2wgbmd4X2h0dHBfYXV0b2luZGV4X2NtcF9lbnRyaWVzKGNvbnN0IHZvaWQgKm9uZSwKKyAgICBjb25zdCB2b2lkICp0d28pOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3Iobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9kaXJfdCAqZGlyLCB1X2NoYXIgKm5hbWUpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRvaW5kZXhfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOwpAQCAtNDQ2LDcgKzQ0Nyw3IEBACiB9CiAKIAotc3RhdGljIGludAorc3RhdGljIGludCBuZ3hfbGliY19jZGVjbAogbmd4X2h0dHBfYXV0b2luZGV4X2NtcF9lbnRyaWVzKGNvbnN0IHZvaWQgKm9uZSwgY29uc3Qgdm9pZCAqdHdvKQogewogICAgIG5neF9odHRwX2F1dG9pbmRleF9lbnRyeV90ICpmaXJzdCA9IChuZ3hfaHR0cF9hdXRvaW5kZXhfZW50cnlfdCAqKSBvbmU7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKaW5kZXggYTVmOWEwMi4uOTg2MjE1YiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYwpAQCAtMTUzLDcgKzE1Myw5IEBACiB9OwogCiAKKyNpZiAoTkdYX1BDUkUpCiBzdGF0aWMgbmd4X3N0cl90IG5neF9odHRwX2Zhc3RjZ2lfdXJpID0gbmd4X3N0cmluZygiLyIpOworI2VuZGlmCiAKIAogc3RhdGljIG5neF9odHRwX2hlYWRlcl90IG5neF9odHRwX2Zhc3RjZ2lfaGVhZGVyc19pbltdID0gewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCmluZGV4IDYyZDQwYWMuLjQ4ODlmYmYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKQEAgLTYwNSw3ICs2MDUsNyBAQAogCiAgICAgdV9jaGFyICAqcCwgKm5ldzsKIAotICAgIGlmIChkb21haW4tPmxlbiA9PSA0ICYmIG5neF9zdHJjbXAoZG9tYWluLT5kYXRhLCAibm9uZSIpID09IDApIHsKKyAgICBpZiAobmd4X3N0cmNtcChkb21haW4tPmRhdGEsICJub25lIikgPT0gMCkgewogICAgICAgICBkb21haW4tPmxlbiA9IDA7CiAgICAgICAgIGRvbWFpbi0+ZGF0YSA9ICh1X2NoYXIgKikgIiI7CiAKQEAgLTY5MCw3ICs2OTAsNyBAQAogewogICAgIG5neF9zdHJfdCAgKnAzcCA9IGRhdGE7CiAKLSAgICBpZiAocDNwLT5sZW4gPT0gNCAmJiBuZ3hfc3RyY21wKHAzcC0+ZGF0YSwgIm5vbmUiKSA9PSAwKSB7CisgICAgaWYgKG5neF9zdHJjbXAocDNwLT5kYXRhLCAibm9uZSIpID09IDApIHsKICAgICAgICAgcDNwLT5sZW4gPSAwOwogICAgICAgICBwM3AtPmRhdGEgPSAodV9jaGFyICopICIiOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKaW5kZXggZWRhZDIyYy4uMmI3NmMxZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKQEAgLTM2Miw3ICszNjIsOSBAQAogfTsKIAogCisjaWYgKE5HWF9QQ1JFKQogc3RhdGljIG5neF9zdHJfdCBuZ3hfaHR0cF9wcm94eV91cmkgPSBuZ3hfc3RyaW5nKCIvIik7CisjZW5kaWYKIAogCiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Byb3h5X2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQpAQCAtODEyLDkgKzgxNCwxMSBAQAogICAgIHBlZXIgPSAmY3R4LT5wcm94eS0+dXBzdHJlYW0tPnBlZXI7CiAKICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgIiB3aGlsZSAlcywgY2xpZW50OiAlViwgVVJMOiAlViwgdXBzdHJlYW06IGh0dHA6Ly8lViVzJVYiLAorICAgICAgICAgICAgICAgICAgICAgIiB3aGlsZSAlcywgY2xpZW50OiAlViwgaG9zdDogJVYsIFVSTDogXCIlVlwiLCIKKyAgICAgICAgICAgICAgICAgICAgICIgdXBzdHJlYW06IGh0dHA6Ly8lViVzJVYiLAogICAgICAgICAgICAgICAgICAgICAgY3R4LT5wcm94eS0+YWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgJnItPmNvbm5lY3Rpb24tPmFkZHJfdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICZyLT5zZXJ2ZXJfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICZyLT51bnBhcnNlZF91cmksCiAgICAgICAgICAgICAgICAgICAgICAmcGVlci0+cGVlcnMtPnBlZXJbcGVlci0+Y3VyX3BlZXJdLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBjdHgtPnByb3h5LT5sY2YtPnVwc3RyZWFtLT51cmlfc2VwYXJhdG9yLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHAuYyBiL3NyYy9odHRwL25neF9odHRwLmMKaW5kZXggZTRjOGYyZS4uMmM5N2Q3MSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHAuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCkBAIC0xMSw3ICsxMSw4IEBACiAKIAogc3RhdGljIGNoYXIgKm5neF9odHRwX2Jsb2NrKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwotc3RhdGljIGludCBuZ3hfY21wX3NlcnZlcl9uYW1lcyhjb25zdCB2b2lkICpvbmUsIGNvbnN0IHZvaWQgKnR3byk7CitzdGF0aWMgaW50IG5neF9saWJjX2NkZWNsIG5neF9jbXBfc2VydmVyX25hbWVzKGNvbnN0IHZvaWQgKm9uZSwKKyAgICBjb25zdCB2b2lkICp0d28pOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hZGRfYWRkcmVzcyhuZ3hfY29uZl90ICpjZiwKICAgICBuZ3hfaHR0cF9pbl9wb3J0X3QgKmluX3BvcnQsIG5neF9odHRwX2xpc3Rlbl90ICpsc2NmLAogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAqY3NjZik7CkBAIC02ODcsNyArNjg4LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50CitzdGF0aWMgaW50IG5neF9saWJjX2NkZWNsCiBuZ3hfY21wX3NlcnZlcl9uYW1lcyhjb25zdCB2b2lkICpvbmUsIGNvbnN0IHZvaWQgKnR3bykKIHsKICAgICBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICpmaXJzdCA9IChuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICopIG9uZTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDYyMGQyZTkuLmQxYmYxMDQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMzUsNyArMzUsOCBAQAogICAgIHZvaWQgKmR1bW15KTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9jb3JlX2xvY2F0aW9uKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCiAgICAgdm9pZCAqZHVtbXkpOwotc3RhdGljIGludCBuZ3hfaHR0cF9jb3JlX2NtcF9sb2NhdGlvbnMoY29uc3Qgdm9pZCAqZmlyc3QsIGNvbnN0IHZvaWQgKnNlY29uZCk7CitzdGF0aWMgaW50IG5neF9saWJjX2NkZWNsIG5neF9odHRwX2NvcmVfY21wX2xvY2F0aW9ucyhjb25zdCB2b2lkICpmaXJzdCwKKyAgICBjb25zdCB2b2lkICpzZWNvbmQpOwogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfY29yZV90eXBlcyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAogICAgIHZvaWQgKmNvbmYpOwpAQCAtMTI1Nyw3ICsxMjU4LDcgQEAKIH0KIAogCi1zdGF0aWMgaW50CitzdGF0aWMgaW50IG5neF9saWJjX2NkZWNsCiBuZ3hfaHR0cF9jb3JlX2NtcF9sb2NhdGlvbnMoY29uc3Qgdm9pZCAqb25lLCBjb25zdCB2b2lkICp0d28pCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYwppbmRleCBhN2Q4ZmUzLi43ZjAzMWNmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKQEAgLTQ5Nyw5ICs0OTcsMTAgQEAKICAgICAgICAgc3dfc3BhY2VfYmVmb3JlX3ZhbHVlLAogICAgICAgICBzd192YWx1ZSwKICAgICAgICAgc3dfc3BhY2VfYWZ0ZXJfdmFsdWUsCisgICAgICAgIHN3X2lnbm9yZV9saW5lLAorICAgICAgICBzd19za2lwX2xpbmUsCiAgICAgICAgIHN3X2FsbW9zdF9kb25lLAotICAgICAgICBzd19oZWFkZXJfYWxtb3N0X2RvbmUsCi0gICAgICAgIHN3X2lnbm9yZV9saW5lCisgICAgICAgIHN3X2hlYWRlcl9hbG1vc3RfZG9uZQogICAgIH0gc3RhdGU7CiAKICAgICBzdGF0ZSA9IHItPnN0YXRlOwpAQCAtNTExLDYgKzUxMiw4IEBACiAKICAgICAgICAgLyogZmlyc3QgY2hhciAqLwogICAgICAgICBjYXNlIHN3X3N0YXJ0OgorICAgICAgICAgICAgci0+aW52YWxpZF9oZWFkZXIgPSAwOworCiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgICAgICBjYXNlIENSOgogICAgICAgICAgICAgICAgIHItPmhlYWRlcl9lbmQgPSBwOwpAQCAtNTI4LDcgKzUzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLScgfHwgY2ggPT0gJ18nIHx8IGNoID09ICd+JyB8fCBjaCA9PSAnLicpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIApAQCAtNTM2LDcgKzUzOSw5IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9QQVJTRV9JTlZBTElEX0hFQURFUjsKKyAgICAgICAgICAgICAgICByLT5pbnZhbGlkX2hlYWRlciA9IDE7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19za2lwX2xpbmU7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTU0LDcgKzU1OSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChjaCA9PSAnLScgfHwgY2ggPT0gJ18nIHx8IGNoID09ICd+JyB8fCBjaCA9PSAnLicpIHsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnLScpIHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNTcyLDcgKzU3Nyw5IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9QQVJTRV9JTlZBTElEX0hFQURFUjsKKyAgICAgICAgICAgIHItPmludmFsaWRfaGVhZGVyID0gMTsKKyAgICAgICAgICAgIHN0YXRlID0gc3dfc2tpcF9saW5lOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLyogc3BhY2UqIGJlZm9yZSBoZWFkZXIgdmFsdWUgKi8KICAgICAgICAgY2FzZSBzd19zcGFjZV9iZWZvcmVfdmFsdWU6CkBAIC02MzcsNiArNjQ0LDIxIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAvKiBza2lwIGhlYWRlciBsaW5lICovCisgICAgICAgIGNhc2Ugc3dfc2tpcF9saW5lOgorICAgICAgICAgICAgc3dpdGNoIChjaCkgeworICAgICAgICAgICAgY2FzZSBDUjoKKyAgICAgICAgICAgICAgICByLT5oZWFkZXJfZW5kID0gcDsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X2FsbW9zdF9kb25lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMRjoKKyAgICAgICAgICAgICAgICByLT5oZWFkZXJfZW5kID0gcDsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgLyogZW5kIG9mIGhlYWRlciBsaW5lICovCiAgICAgICAgIGNhc2Ugc3dfYWxtb3N0X2RvbmU6CiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggMzg3NmUzOS4uNDYxYzAyOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtNzIyLDYgKzcyMiw3IEBACiB7CiAgICAgc3NpemVfdCAgICAgICAgICAgICAgbjsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICByYywgcnYsIGk7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgaGVhZGVyOwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgKmgsICoqY29va2llOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgKmM7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAqcjsKQEAgLTc3MSw2ICs3NzIsMTkgQEAKIAogICAgICAgICBpZiAocmMgPT0gTkdYX09LKSB7CiAKKyAgICAgICAgICAgIGlmIChyLT5pbnZhbGlkX2hlYWRlcikgeworCisgICAgICAgICAgICAgICAgLyogdGhlcmUgd2FzIGVycm9yIHdoaWxlIGEgaGVhZGVyIGxpbmUgcGFyc2luZyAqLworCisgICAgICAgICAgICAgICAgaGVhZGVyLmxlbiA9IHItPmhlYWRlcl9lbmQgLSByLT5oZWFkZXJfbmFtZV9zdGFydDsKKyAgICAgICAgICAgICAgICBoZWFkZXIuZGF0YSA9IHItPmhlYWRlcl9uYW1lX3N0YXJ0OworCisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIHJldi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IGludmFsaWQgaGVhZGVyOiBcIiVWXCIsIGlnbm9yZWQsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoZWFkZXIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvKiBhIGhlYWRlciBsaW5lIGhhcyBiZWVuIHBhcnNlZCBzdWNjZXNzZnVsbHkgKi8KIAogICAgICAgICAgICAgci0+aGVhZGVyc19uKys7CkBAIC0yMzcxLDYgKzIzODUsMTEgQEAKIAogICAgIGxlbiAtPSBwIC0gYnVmOwogCisgICAgaWYgKGN0eC0+cmVxdWVzdC0+c2VydmVyX25hbWUuZGF0YSkgeworICAgICAgICBwID0gbmd4X3NucHJpbnRmKHAsIGxlbiwgIiwgaG9zdDogJVYiLCAmY3R4LT5yZXF1ZXN0LT5zZXJ2ZXJfbmFtZSk7CisgICAgICAgIGxlbiAtPSBwIC0gYnVmOworICAgIH0KKwogICAgIHAgPSBuZ3hfc25wcmludGYocCwgbGVuLCAiLCBVUkw6IFwiJVZcIiIsICZjdHgtPnJlcXVlc3QtPnVucGFyc2VkX3VyaSk7CiAKICAgICBpZiAoY3R4LT5yZXF1ZXN0LT5oZWFkZXJzX2luLnJlZmVyZXIgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCmluZGV4IDQxM2FmMmYuLmExZTlhZTUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKQEAgLTU1LDYgKzU1LDcgQEAKICNkZWZpbmUgTkdYX0hUVFBfTk9UX01PRElGSUVEICAgICAgICAgICAgICAzMDQKIAogI2RlZmluZSBOR1hfSFRUUF9CQURfUkVRVUVTVCAgICAgICAgICAgICAgIDQwMAorI2RlZmluZSBOR1hfSFRUUF9VTkFVVEhPUklaRUQgICAgICAgICAgICAgIDQwMQogI2RlZmluZSBOR1hfSFRUUF9GT1JCSURERU4gICAgICAgICAgICAgICAgIDQwMwogI2RlZmluZSBOR1hfSFRUUF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgIDQwNAogI2RlZmluZSBOR1hfSFRUUF9OT1RfQUxMT1dFRCAgICAgICAgICAgICAgIDQwNQpAQCAtMTU3LDYgKzE1OCw5IEBACiAgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAgKmFjY2VwdF9sYW5ndWFnZTsKICNlbmRpZgogCisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3ZDsKKwogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICAgICAgICBjb29raWVzOwogCiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfbmFtZV9sZW47CkBAIC0xOTQsNiArMTk4LDcgQEAKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqbGFzdF9tb2RpZmllZDsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqY29udGVudF9yYW5nZTsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqYWNjZXB0X3JhbmdlczsKKyAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqd3d3X2F1dGhlbnRpY2F0ZTsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqZXhwaXJlczsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqY2FjaGVfY29udHJvbDsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqZXRhZzsKQEAgLTMzNiw2ICszNDEsOCBAQAogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlfY2hhbmdlZDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlfY2hhbmdlczo0OwogCisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRfaGVhZGVyOjE7CisKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgbG93X2Nhc2VfZXh0ZW46MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX3RpbWVvdXRfc2V0OjE7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwppbmRleCA0NGRhNWYzLi4yY2NmNTFjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCkBAIC01Myw5ICs1Myw5IEBACiAKIHN0YXRpYyBjaGFyIGVycm9yXzQwMV9wYWdlW10gPQogIjxodG1sPiIgQ1JMRgotIjxoZWFkPjx0aXRsZT40MDEgVW5hdXRob3JpemVkPC90aXRsZT48L2hlYWQ+IiBDUkxGCisiPGhlYWQ+PHRpdGxlPjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkPC90aXRsZT48L2hlYWQ+IiBDUkxGCiAiPGJvZHkgYmdjb2xvcj1cIndoaXRlXCI+IiBDUkxGCi0iPGNlbnRlcj48aDE+NDAxIFVuYXV0aG9yaXplZDwvaDE+PC9jZW50ZXI+IiBDUkxGCisiPGNlbnRlcj48aDE+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L2gxPjwvY2VudGVyPiIgQ1JMRgogOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDMwNzZkZjcuLjA2MjRjMGYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMTE0OCw5ICsxMTQ4LDExIEBACiAgICAgcGVlciA9ICZ1LT5wZWVyOwogCiAgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICIgd2hpbGUgJXMsIGNsaWVudDogJVYsIFVSTDogJVYsIHVwc3RyZWFtOiAlViVWJXMlViIsCisgICAgICAgICAgICAgICAgICAgICAiIHdoaWxlICVzLCBjbGllbnQ6ICVWLCBob3N0OiAlViwgVVJMOiBcIiVWXCIsIgorICAgICAgICAgICAgICAgICAgICAgIiB1cHN0cmVhbTogJVYlViVzJVYiLAogICAgICAgICAgICAgICAgICAgICAgbG9nLT5hY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAmci0+Y29ubmVjdGlvbi0+YWRkcl90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgJnItPnNlcnZlcl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgJnItPnVucGFyc2VkX3VyaSwKICAgICAgICAgICAgICAgICAgICAgICZ1LT5zY2hlbWEsCiAgICAgICAgICAgICAgICAgICAgICAmcGVlci0+cGVlcnMtPnBlZXJbcGVlci0+Y3VyX3BlZXJdLm5hbWUsCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmggYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmgKaW5kZXggMzVlM2I4Yi4uMjlkOGFhZSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPG1hbGxvYy5oPiAgICAgICAgICAgICAvKiBtZW1hbGlnbigpICovCiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPGNyeXB0Lmg+CiAKIAogI2luY2x1ZGUgPG5neF9hdXRvX2NvbmZpZy5oPgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmggYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaAppbmRleCBkNjI5ZTA0Li4wODhmYmQwIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19jb25maWcuaApAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPHN5cy9zeXN0ZW1pbmZvLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+ICAgICAgICAgICAgIC8qIElPVl9NQVggKi8KICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGNyeXB0Lmg+CiAKICNpbmNsdWRlIDxuZ3hfYXV0b19jb25maWcuaD4KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3VzZXIuYyBiL3NyYy9vcy91bml4L25neF91c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUyZjc5NAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy91bml4L25neF91c2VyLmMKQEAgLTAsMCArMSw4OSBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorCisKKy8qCisgKiBTb2xhcmlzIGhhcyB0aHJlYWQtc2FmZSBjcnlwdCgpCisgKiBMaW51eCBoYXMgY3J5cHRfcigpOyAic3RydWN0IGNyeXB0X2RhdGEiIGlzIG1vcmUgdGhhbiAxMjhLCisgKiBGcmVlQlNEIG5lZWRzIHRoZSBtdXRleCB0byBwcm90ZWN0IGNyeXB0KCkKKyAqCisgKiBUT0RPOgorICogICAgIG5neF9jcnlwdF9pbml0KCkgdG8gaW5pdCBtdXRleAorICovCisKKworI2lmIChOR1hfQ1JZUFQpCisKKyNpZiAoTkdYX0xJTlVYKQorCituZ3hfaW50X3QKK25neF9jcnlwdChuZ3hfcG9vbF90ICpwb29sLCB1X2NoYXIgKmtleSwgdV9jaGFyICpzYWx0LCB1X2NoYXIgKiplbmNyeXB0ZWQpCit7CisgICAgY2hhciAgICAgICAgICAgICAgICp2YWx1ZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgIGxlbjsKKyAgICBzdHJ1Y3QgY3J5cHRfZGF0YSAgIGNkOworCisgICAgdmFsdWUgPSBjcnlwdF9yKChjaGFyICopIGtleSwgKGNoYXIgKikgc2FsdCwgJmNkKTsKKworICAgIGlmICh2YWx1ZSkgeworICAgICAgICBsZW4gPSBuZ3hfc3RybGVuKHZhbHVlKTsKKworICAgICAgICAqZW5jcnlwdGVkID0gbmd4X3BhbGxvYyhwb29sLCBsZW4pOworICAgICAgICBpZiAoKmVuY3J5cHRlZCkgeworICAgICAgICAgICAgbmd4X21lbWNweSgqZW5jcnlwdGVkLCB2YWx1ZSwgbGVuICsgMSk7CisgICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9FUlJPUjsKK30KKworI2Vsc2UKKworbmd4X2ludF90CituZ3hfY3J5cHQobmd4X3Bvb2xfdCAqcG9vbCwgdV9jaGFyICprZXksIHVfY2hhciAqc2FsdCwgdV9jaGFyICoqZW5jcnlwdGVkKQoreworICAgIGNoYXIgICAgICAgKnZhbHVlOworICAgIHNpemVfdCAgICAgIGxlbjsKKyAgICBuZ3hfaW50X3QgICByYzsKKworI2lmIChOR1hfVEhSRUFEUyAmJiBOR1hfTk9OUkVFTlRSQU5UX0NSWVBUKQorCisgICAgLyogY3J5cHQoKSBpcyBhIHRpbWUgY29uc3VtaW5nIGZ1bnRpb24sIHNvIHdlIG9ubHkgdHJ5IHRvIGxvY2sgKi8KKworICAgIGlmIChuZ3hfbXV0ZXhfdHJ5bG9jayhuZ3hfY3J5cHRfbXV0ZXgpICE9IE5HWF9PSykgeworICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgIH0KKworI2VuZGlmCisKKyAgICByYyA9IE5HWF9FUlJPUjsKKworICAgIHZhbHVlID0gY3J5cHQoKGNoYXIgKikga2V5LCAoY2hhciAqKSBzYWx0KTsKKworICAgIGlmICh2YWx1ZSkgeworICAgICAgICBsZW4gPSBuZ3hfc3RybGVuKHZhbHVlKTsKKworICAgICAgICAqZW5jcnlwdGVkID0gbmd4X3BhbGxvYyhwb29sLCBsZW4pOworICAgICAgICBpZiAoKmVuY3J5cHRlZCkgeworICAgICAgICAgICAgbmd4X21lbWNweSgqZW5jcnlwdGVkLCB2YWx1ZSwgbGVuICsgMSk7CisgICAgICAgICAgICByYyA9IE5HWF9PSzsKKyAgICAgICAgfQorICAgIH0KKworI2lmIChOR1hfVEhSRUFEUyAmJiBOR1hfTk9OUkVFTlRSQU5UX0NSWVBUKQorICAgIG5neF9tdXRleF91bmxvY2sobmd4X2NyeXB0X211dGV4KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJjOworfQorCisjZW5kaWYKKworI2VuZGlmIC8qIE5HWF9DUllQVCAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3VzZXIuaCBiL3NyYy9vcy91bml4L25neF91c2VyLmgKaW5kZXggZjkzOWI4NC4uYTI0YTY2YiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3VzZXIuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfdXNlci5oCkBAIC0xNiw0ICsxNiw5IEBACiB0eXBlZGVmIGdpZF90ICBuZ3hfZ2lkX3Q7CiAKIAorbmd4X2ludF90IG5neF9jcnlwdChuZ3hfcG9vbF90ICpwb29sLCB1X2NoYXIgKmtleSwgdV9jaGFyICpzYWx0LAorICAgIHVfY2hhciAqKmVuY3J5cHRlZCk7CisKKworCiAjZW5kaWYgLyogX05HWF9VU0VSX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2d1aS5jIGIvc3JjL29zL3dpbjMyL25neF9ndWkuYwppbmRleCA1NjczODIwLi4zNmQzYzQ5IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2d1aS5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZ3VpLmMKQEAgLTExLDggKzExLDggQEAKICNkZWZpbmUgTkdYX01BWF9URVhUICAgMjA0OAogCiAKLXZvaWQgbmd4X21lc3NhZ2VfYm94KGNoYXIgKnRpdGxlLCBuZ3hfdWludF90IHR5cGUsIG5neF9lcnJfdCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgbmd4X2NkZWNsIG5neF9tZXNzYWdlX2JveChjaGFyICp0aXRsZSwgbmd4X3VpbnRfdCB0eXBlLCBuZ3hfZXJyX3QgZXJyLAorICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICAgIHZhX2xpc3QgIGFyZ3M7CiAgICAgdV9jaGFyICAgdGV4dFtOR1hfTUFYX1RFWFRdLCAqcCwgKmxhc3Q7CkBAIC01OSw4ICs1OSw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9zeXN0ZW1fdHJheV9pY29uKEhXTkQgd2luZG93LCB1X2xvbmcgYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJQ09OIGljb24sIHVfY2hhciAqdGlwKQorbmd4X2ludF90CituZ3hfc3lzdGVtX3RyYXlfaWNvbihIV05EIHdpbmRvdywgdV9sb25nIGFjdGlvbiwgSElDT04gaWNvbiwgdV9jaGFyICp0aXApCiB7CiAgICAgTk9USUZZSUNPTkRBVEEgIG5pOwogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2d1aS5oIGIvc3JjL29zL3dpbjMyL25neF9ndWkuaAppbmRleCBlNDRlNmFhLi4wYmZmMjFjIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2d1aS5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZ3VpLmgKQEAgLTEzLDExICsxMywxMSBAQAogI2luY2x1ZGUgPG5neF9ndWlfcmVzb3VyY2VzLmg+CiAKIAotdm9pZCBuZ3hfbWVzc2FnZV9ib3goY2hhciAqdGl0bGUsIG5neF91aW50X3QgdHlwZSwgbmd4X2Vycl90IGVyciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgbmd4X2NkZWNsIG5neF9tZXNzYWdlX2JveChjaGFyICp0aXRsZSwgbmd4X3VpbnRfdCB0eXBlLCBuZ3hfZXJyX3QgZXJyLAorICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogbmd4X2ludF90IG5neF9zeXN0ZW1fdHJheV9pY29uKEhXTkQgd2luZG93LCB1X2xvbmcgYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJQ09OIGljb24sIHVfY2hhciAqdGlwKTsKKyAgICBISUNPTiBpY29uLCB1X2NoYXIgKnRpcCk7CiAKIAogI2VuZGlmIC8qIF9OR1hfR1VJX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3VzZXIuYyBiL3NyYy9vcy93aW4zMi9uZ3hfdXNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMDc2MDMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X3VzZXIuYwpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorCisKKyNpZiAoTkdYX0NSWVBUKQorCituZ3hfaW50X3QKK25neF9jcnlwdChuZ3hfcG9vbF90ICpwb29sLCB1X2NoYXIgKmtleSwgdV9jaGFyICpzYWx0LCB1X2NoYXIgKiplbmNyeXB0ZWQpCit7CisgICAgLyogU1RVQjogYSBwbGFpbiB0ZXh0IHBhc3N3b3JkICovCisKKyAgICAqZW5jcnlwdGVkID0ga2V5OworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworI2VuZGlmIC8qIE5HWF9DUllQVCAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF91c2VyLmggYi9zcmMvb3Mvd2luMzIvbmd4X3VzZXIuaAppbmRleCA0NTJkYWExLi42ZThjNThiIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3VzZXIuaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X3VzZXIuaApAQCAtMTcsNCArMTcsOCBAQAogI2RlZmluZSBuZ3hfZ2lkX3QgIG5neF9pbnRfdAogCiAKK25neF9pbnRfdCBuZ3hfY3J5cHQobmd4X3Bvb2xfdCAqcG9vbCwgdV9jaGFyICprZXksIHVfY2hhciAqc2FsdCwKKyAgICB1X2NoYXIgKiplbmNyeXB0ZWQpOworCisKICNlbmRpZiAvKiBfTkdYX1VTRVJfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmggYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCmluZGV4IDAyZDRkYjUuLmY0OWExNmMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaApAQCAtOTMsMTUgKzkzLDIzIEBACiAKIAogI2RlZmluZSBuZ3hfaW5saW5lICAgICAgICBfX2lubGluZQorI2RlZmluZSBuZ3hfY2RlY2wgICAgICAgICBfX2NkZWNsCiAKIAogI2lmZGVmIF9NU0NfVkVSCiB0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgIHVpbnQzMl90OwogdHlwZWRlZiBfX2ludDMyICAgICAgICAgICBpbnQzMl90OworI2RlZmluZSBuZ3hfbGliY19jZGVjbCAgICBfX2NkZWNsCiAKLSNlbHNlIC8qIF9fV0FUQ09NQ19fIGFuZCBfX0JPUkxBTkRDX18gKi8KKyNlbGlmIGRlZmluZWQgX19XQVRDT01DX18KIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgdWludDMyX3Q7CiB0eXBlZGVmIGludCAgICAgICAgICAgICAgIGludDMyX3Q7CisjZGVmaW5lIG5neF9saWJjX2NkZWNsCisKKyNlbHNlIC8qIF9fQk9STEFORENfXyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICB1aW50MzJfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgaW50MzJfdDsKKyNkZWZpbmUgbmd4X2xpYmNfY2RlY2wgICAgX19jZGVjbAogI2VuZGlmCiAKIHR5cGVkZWYgX19pbnQ2NCAgICAgICAgICAgaW50NjRfdDsK