Name: series-workflow5dkvd Phase: Succeeded StartedAt: 2026-08-26 16:20:21 +0000 UTC FinishedAt: 2026-08-26 20:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[0] Phase: Succeeded StartedAt: 2026-08-26 16:20:21 +0000 UTC FinishedAt: 2026-08-26 16:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 16:20:21 +0000 UTC FinishedAt: 2026-08-26 16:24:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP" ], "series_id": "01fc7aa0-e180-45df-90b5-3e349208cb8c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vfs_coredump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHB1cmVseSByZW1vdmVzIHRoZSBTUFUgY29yZWR1bXAgc3VwcG9ydCBmcm9tIHRoZSBQb3dlclBDIENlbGwgYXJjaGl0ZWN0dXJlLiBObyBuZXcgY29kZSBpcyBhZGRlZCwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVuIGR1bXBpbmcgY29yZSBvZiBwcm9jZXNzZXMgd2l0aCBzaGFyZWQgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU1ZTZmMzExM2Y2NWI5NTZiNGFiMDk5MTYwN2NiMmI4NDY2YjJiZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjoyMTozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMTYwLDcgJiM0MzsxNjAsNiBAQCBjb25maWcgUFBDXG4gXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cbiBcdHNlbGVjdCBBUkNIX0hBU19WRFNPX0FSQ0hfREFUQVxuIFx0c2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4tXHRzZWxlY3QgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFUyAgICAgICAgaWYgU1BVX0JBU0VcbiBcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbiBcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVx0aWYgUFBDX1JBRElYX01NVVxuIFx0c2VsZWN0IEFSQ0hfTUlHSFRfSEFWRV9QQ19QQVJQT1JUXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXG5pbmRleCBiYjRiOTQ0NDRkM2U4Li41ZGM4YzQ5MjNlYjFkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcbkBAIC0xMjMsMTIgJiM0MzsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0KDB4N2ZmIFx1MDAzZVx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkgOiBcXFxuIFx0KDB4M2ZmZmYgXHUwMDNlXHUwMDNlIChQQUdFX1NISUZUIC0gMTIpKSlcbiBcbi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFXG4tLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFLiBOb3RlIG5hbWUgaXMgXCYjMzQ7U1BVL1x1MDAzY2ZkXHUwMDNlL1x1MDAzY2ZpbGVuYW1lXHUwMDNlXCYjMzQ7LiAqL1xuLSNkZWZpbmUgTlRfU1BVXHRcdDFcbi1cbi0jZW5kaWYgLyogQ09ORklHX1NQVV9CQVNFICovXG4tXG4gI2lmZGVmIENPTkZJR19QUEM2NFxuIFxuICNkZWZpbmUgZ2V0X2NhY2hlX2dlb21ldHJ5KGxldmVsKSBcXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxuaW5kZXggOTZhZDQ1MTBjODk1NC4uNzE1MjI4NWI2MjY4ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oXG5AQCAtMjEwLDE1ICYjNDM7MjEwLDEyIEBAIGV4dGVybiBsb25nIHNwdV9zeXNfY2FsbGJhY2soc3RydWN0IHNwdV9zeXNjYWxsX2Jsb2NrICpzKTtcbiBcbiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqL1xuIHN0cnVjdCBmaWxlO1xuLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4gc3RydWN0IHNwdWZzX2NhbGxzIHtcbiBcdGxvbmcgKCpjcmVhdGVfdGhyZWFkKShjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBmaWxlICpuZWlnaGJvcik7XG4gXHRsb25nICgqc3B1X3J1bikoc3RydWN0IGZpbGUgKmZpbHAsIF9fdTMyIF9fdXNlciAqdW5wYyxcbiBcdFx0XHRcdFx0XHRfX3UzMiBfX3VzZXIgKnVzdGF0dXMpO1xuLVx0aW50ICgqY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSkodm9pZCk7XG4tXHRpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4gXHR2b2lkICgqbm90aWZ5X3NwdXNfYWN0aXZlKSh2b2lkKTtcbiBcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuaW5kZXggZGI2NWJmY2QxZTc0OS4uNmJkMjY4MTVjMzMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuQEAgLTEwLDcgJiM0MzsxMCw2IEBAIGNvbmZpZyBTUFVfRlNcbiBcdHRyaXN0YXRlIFwmIzM0O1NQVSBmaWxlIHN5c3RlbVwmIzM0O1xuIFx0ZGVmYXVsdCBtXG4gXHRkZXBlbmRzIG9uIFBQQ19DRUxMXG4tXHRkZXBlbmRzIG9uIENPUkVEVU1QXG4gXHRzZWxlY3QgU1BVX0JBU0VcbiBcdGhlbHBcbiBcdCAgVGhlIFNQVSBmaWxlIHN5c3RlbSBpcyB1c2VkIHRvIGFjY2VzcyBTeW5lcmdpc3RpYyBQcm9jZXNzaW5nXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG5pbmRleCAwMDA4OTRlMDdiMDI3Li44YmU4MTIwN2U4ODZhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmNcbkBAIC04OCwyNiAmIzQzOzg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUzKHNwdV9ydW4saW50LCBmZCwgX191MzIgX191c2VyICosIHVucGMsIF9fdTMyIF9fdXNlciAqLCB1c3RhdHVzKVxuIFx0cmV0dXJuIGNhbGxzLVx1MDAzZXNwdV9ydW4oZmRfZmlsZShhcmcpLCB1bnBjLCB1c3RhdHVzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTtcbi19XG4tXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pO1xuLX1cbi0jZW5kaWZcbi1cbiB2b2lkIG5vdGlmeV9zcHVzX2FjdGl2ZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzcHVmc19jYWxscyAqY2FsbHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG5pbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbkBAIC00LDcgJiM0Mzs0LDYgQEAgb2JqLSQoQ09ORklHX1NQVV9GUykgJiM0Mzs9IHNwdWZzLm9cbiBzcHVmcy15ICYjNDM7PSBpbm9kZS5vIGZpbGUubyBjb250ZXh0Lm8gc3lzY2FsbHMub1xuIHNwdWZzLXkgJiM0Mzs9IHNjaGVkLm8gYmFja2luZ19vcHMubyBod19vcHMubyBydW4ubyBnYW5nLm9cbiBzcHVmcy15ICYjNDM7PSBzd2l0Y2gubyBmYXVsdC5vIGxzY3NhX2FsbG9jLm9cbi1zcHVmcy0kKENPTkZJR19DT1JFRFVNUCkgJiM0Mzs9IGNvcmVkdW1wLm9cbiBcbiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzXG4gQ0ZMQUdTX3NjaGVkLm8gOj0gLUkkKHNyYylcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDMwMWVlN2Q4YjdkZjAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwxODMgJiM0MzswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qXG4tICogU1BVIGNvcmUgZHVtcCBjb2RlXG4tICpcbi0gKiAoQykgQ29weXJpZ2h0IDIwMDYgSUJNIENvcnAuXG4tICpcbi0gKiBBdXRob3I6IER3YXluZSBHcmFudCBNY0Nvbm5lbGwgXHUwMDNjZGVjaW1hbEB1cy5pYm0uY29tXHUwMDNlXG4tICovXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZWxmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9mZHRhYmxlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY29yZWR1bXAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuLVxuLSNpbmNsdWRlIFwmIzM0O3NwdWZzLmhcJiMzNDtcbi1cbi1zdGF0aWMgaW50IHNwdWZzX2N0eF9ub3RlX3NpemUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBkZmQpXG4te1xuLVx0aW50IGksIHN6LCB0b3RhbCA9IDA7XG4tXHRjaGFyICpuYW1lO1xuLVx0Y2hhciBmdWxsbmFtZVs4MF07XG4tXG4tXHRmb3IgKGkgPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUgIT0gTlVMTDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bmFtZSA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZTtcbi1cdFx0c3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7XG4tXG4tXHRcdHNwcmludGYoZnVsbG5hbWUsIFwmIzM0O1NQVS8lZC8lc1wmIzM0OywgZGZkLCBuYW1lKTtcbi1cbi1cdFx0dG90YWwgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpO1xuLVx0XHR0b3RhbCAmIzQzOz0gcm91bmR1cChzdHJsZW4oZnVsbG5hbWUpICYjNDM7IDEsIDQpO1xuLVx0XHR0b3RhbCAmIzQzOz0gcm91bmR1cChzeiwgNCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgbWF0Y2hfY29udGV4dChjb25zdCB2b2lkICp2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpZiAoZmlsZS1cdTAwM2VmX29wICE9IFx1MDAyNnNwdWZzX2NvbnRleHRfZm9wcylcbi1cdFx0cmV0dXJuIDA7XG4tXHRjdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLVx1MDAzZWlfY3R4O1xuLVx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1BVX0NSRUFURV9OT1NDSEVEKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBmZCAmIzQzOyAxO1xuLX1cbi1cbi0vKlxuLSAqIFRoZSBhZGRpdGlvbmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBub3RlcyBmb3IgQ2VsbCBhcmUgdmFyaW91c1xuLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0LlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHNlZXNcbi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnNcbi0gKiBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgdGhlbSB3aXRob3V0IG5lZWRpbmcgdG8gYWN0dWFsbHlcbi0gKiBvcGVuIHRoZSBmaWxlcy5cbi0gKi9cbi0vKlxuLSAqIGRlc2NyaXB0b3IgdGFibGUgaXMgbm90IHNoYXJlZCwgc28gZmlsZXMgY2FuJiMzOTt0IGNoYW5nZSBvciBnbyBhd2F5LlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmNvcmVkdW1wX25leHRfY29udGV4dChpbnQgKmZkKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4ID0gTlVMTDtcbi1cdHN0cnVjdCBmaWxlICpmaWxlO1xuLVx0aW50IG4gPSBpdGVyYXRlX2ZkKGN1cnJlbnQtXHUwMDNlZmlsZXMsICpmZCwgbWF0Y2hfY29udGV4dCwgTlVMTCk7XG4tXHRpZiAoIW4pXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0KmZkID0gbiAtIDE7XG4tXG4tXHRmaWxlID0gZmdldF9yYXcoKmZkKTtcbi1cdGlmIChmaWxlKSB7XG4tXHRcdGN0eCA9IFNQVUZTX0koZmlsZV9pbm9kZShmaWxlKSktXHUwMDNlaV9jdHg7XG4tXHRcdGdldF9zcHVfY29udGV4dChjdHgpO1xuLVx0XHRmcHV0KGZpbGUpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGN0eDtcbi19XG4tXG4taW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbi17XG4tXHRzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eDtcbi1cdGludCBzaXplID0gMCwgcmMsIGZkO1xuLVxuLVx0ZmQgPSAwO1xuLVx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XG4tXHRcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0cHV0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0cmMgPSBzcHVmc19jdHhfbm90ZV9zaXplKGN0eCwgZmQpO1xuLVx0XHRzcHVfcmVsZWFzZV9zYXZlZChjdHgpO1xuLVx0XHRpZiAocmMgXHUwMDNjIDApIHtcbi1cdFx0XHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRzaXplICYjNDM7PSByYztcbi1cbi1cdFx0Lyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqL1xuLVx0XHRmZCYjNDM7JiM0Mzs7XG4tXHRcdHB1dF9zcHVfY29udGV4dChjdHgpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHNpemU7XG4tfVxuLVxuLXN0YXRpYyBpbnQgc3B1ZnNfYXJjaF93cml0ZV9ub3RlKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBpbnQgaSxcbi1cdFx0XHRcdCAgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgaW50IGRmZClcbi17XG4tXHRzaXplX3Qgc3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7XG4tXHRjaGFyIGZ1bGxuYW1lWzgwXTtcbi1cdHN0cnVjdCBlbGZfbm90ZSBlbjtcbi1cdGludCByZXQ7XG4tXG4tXHRzcHJpbnRmKGZ1bGxuYW1lLCBcJiMzNDtTUFUvJWQvJXNcJiMzNDssIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTtcbi1cdGVuLm5fbmFtZXN6ID0gc3RybGVuKGZ1bGxuYW1lKSAmIzQzOyAxO1xuLVx0ZW4ubl9kZXNjc3ogPSBzejtcbi1cdGVuLm5fdHlwZSA9IE5UX1NQVTtcbi1cbi1cdGlmICghZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmVuLCBzaXplb2YoZW4pKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBmdWxsbmFtZSwgZW4ubl9uYW1lc3opKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdGlmICghZHVtcF9hbGlnbihjcHJtLCA0KSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXG4tXHRpZiAoc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5kdW1wKSB7XG4tXHRcdHJldCA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcChjdHgsIGNwcm0pO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRjaGFyIGJ1ZlszMl07XG4tXG4tXHRcdHJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OzB4JS4xNmxseFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7XG4tXHRcdGlmIChyZXQgXHUwMDNlPSBzaXplb2YoYnVmKSlcbi1cdFx0XHRyZXR1cm4gc2l6ZW9mKGJ1Zik7XG4tXG4tXHRcdC8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqL1xuLVx0XHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCAmIzQzOyAxKSlcbi1cdFx0XHRyZXR1cm4gLUVJTztcbi1cdH1cbi1cbi1cdGR1bXBfc2tpcF90byhjcHJtLCByb3VuZHVwKGNwcm0tXHUwMDNlcG9zIC0gcmV0ICYjNDM7IHN6LCA0KSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4taW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpbnQgZmQsIGosIHJjO1xuLVxuLVx0ZmQgPSAwO1xuLVx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XG4tXHRcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHJldHVybiByYztcbi1cbi1cdFx0Zm9yIChqID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtqXS5uYW1lICE9IE5VTEw7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0cmMgPSBzcHVmc19hcmNoX3dyaXRlX25vdGUoY3R4LCBqLCBjcHJtLCBmZCk7XG4tXHRcdFx0aWYgKHJjKSB7XG4tXHRcdFx0XHRzcHVfcmVsZWFzZV9zYXZlZChjdHgpO1xuLVx0XHRcdFx0cmV0dXJuIHJjO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuLVx0XHRzcHVfcmVsZWFzZV9zYXZlZChjdHgpO1xuLVxuLVx0XHQvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovXG4tXHRcdGZkJiM0MzsmIzQzOztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuaW5kZXggZGU3NDk0NzQ4ZmVjZC4uOThjNDdiYWZhZjY3OCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbkBAIC05LDcgJiM0Mzs5LDYgQEBcbiBcbiAjdW5kZWYgREVCVUdcbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEzMCwxNCAmIzQzOzEyOSw2IEBAIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2F0dHJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kdW1wX2VtaXQoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdm9pZCAqYnVmLFxuLVx0XHRzaXplX3Qgc2l6ZSlcbi17XG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdHJldHVybiBzaXplO1xuLX1cbi1cbiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdClcdFxcXG4gc3RhdGljIGludCBfX2ZvcHMgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTE4MCwxMiAmIzQzOzE3MSw2IEBAIHNwdWZzX21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90XG4tc3B1ZnNfbWVtX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXHUwMDNlb3BzLVx1MDAzZWdldF9scyhjdHgpLCBMU19TSVpFKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19tZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0XHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcbkBAIC00NjYsMTMgJiM0Mzs0NTEsNiBAQCBzcHVmc19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Rcbi1zcHVmc19yZWdzX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWdwcnMsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWdwcnMpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19yZWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcbkBAIC01MjMsMTMgJiM0Mzs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdFxuLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX2ZwY3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsXG4gXHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKiBwb3MpXG5AQCAtOTUzLDE1ICYjNDM7OTI0LDYgQEAgc3B1ZnNfc2lnbmFsMV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDFfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIWN0eC1cdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbM10pXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1szXSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMV9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBsZW4pXG4ge1xuQEAgLTEwODYsMTUgJiM0MzsxMDQ4LDYgQEAgc3B1ZnNfc2lnbmFsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDJfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIWN0eC1cdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbNF0pXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1s0XSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzRdKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMl9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBsZW4pXG4ge1xuQEAgLTE5MjQsMTUgJiM0MzsxODc3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY2Fwc19mb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweDAwMDBmZikpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByb2IucHVfbWJfUixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EucHJvYi5wdV9tYl9SKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX21ib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4ge1xuQEAgLTE5NjIsMTUgJiM0MzsxOTA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWJveF9pbmZvX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweGZmMDAwMCkpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjAwNSwxMyAmIzQzOzE5NDAsNiBAQCBzdGF0aWMgc2l6ZV90IHNwdWZzX3dib3hfaW5mb19jbnQoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gKDQgLSAoKGN0eC1cdTAwM2Vjc2EucHJvYi5tYl9zdGF0X1IgXHUwMDI2IDB4MDBmZjAwKSBcdTAwM2VcdTAwM2UgOCkpICogc2l6ZW9mKHUzMik7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3dib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2Y3R4LVx1MDAzZWNzYS5zcHVfbWFpbGJveF9kYXRhLFxuLVx0XHRcdHNwdWZzX3dib3hfaW5mb19jbnQoY3R4KSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3dib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4ge1xuQEAgLTIwNTksMTUgJiM0MzsxOTg3LDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X2RtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHN0cnVjdCBzcHVfZG1hX2luZm8gaW5mbztcbi1cbi1cdHNwdWZzX2dldF9kbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMTEyLDE1ICYjNDM7MjAzMSw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87XG4tXG4tXHRzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjU4MCwyNyAmIzQzOzI0OTAsMyBAQCBjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXSA9IHtcbiBcdHsgXCYjMzQ7LmN0eFwmIzM0OywgXHUwMDI2c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sXG4gXHR7fSxcbiB9O1xuLVxuLWNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0ge1xuLVx0eyBcJiMzNDtyZWdzXCYjMzQ7LCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sXG4tXHR7IFwmIzM0O2ZwY3JcJiMzNDssIHNwdWZzX2ZwY3JfZHVtcCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4KSB9LFxuLVx0eyBcJiMzNDtsc2xyXCYjMzQ7LCBOVUxMLCBzcHVmc19sc2xyX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7ZGVjclwmIzM0OywgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sXG4tXHR7IFwmIzM0O2RlY3Jfc3RhdHVzXCYjMzQ7LCBOVUxMLCBzcHVmc19kZWNyX3N0YXR1c19nZXQsIDE5IH0sXG4tXHR7IFwmIzM0O21lbVwmIzM0Oywgc3B1ZnNfbWVtX2R1bXAsIE5VTEwsIExTX1NJWkUsIH0sXG4tXHR7IFwmIzM0O3NpZ25hbDFcJiMzNDssIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCYjMzQ7c2lnbmFsMV90eXBlXCYjMzQ7LCBOVUxMLCBzcHVmc19zaWduYWwxX3R5cGVfZ2V0LCAxOSB9LFxuLVx0eyBcJiMzNDtzaWduYWwyXCYjMzQ7LCBzcHVmc19zaWduYWwyX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwmIzM0O3NpZ25hbDJfdHlwZVwmIzM0OywgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7ZXZlbnRfbWFza1wmIzM0OywgTlVMTCwgc3B1ZnNfZXZlbnRfbWFza19nZXQsIDE5IH0sXG4tXHR7IFwmIzM0O2V2ZW50X3N0YXR1c1wmIzM0OywgTlVMTCwgc3B1ZnNfZXZlbnRfc3RhdHVzX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7bWJveF9pbmZvXCYjMzQ7LCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCYjMzQ7aWJveF9pbmZvXCYjMzQ7LCBzcHVmc19pYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCYjMzQ7d2JveF9pbmZvXCYjMzQ7LCBzcHVmc193Ym94X2luZm9fZHVtcCwgTlVMTCwgNCAqIHNpemVvZih1MzIpfSxcbi1cdHsgXCYjMzQ7ZG1hX2luZm9cJiMzNDssIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sXG4tXHR7IFwmIzM0O3Byb3h5ZG1hX2luZm9cJiMzNDssIHNwdWZzX3Byb3h5ZG1hX2luZm9fZHVtcCxcbi1cdFx0XHQgICBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9wcm94eWRtYV9pbmZvKX0sXG4tXHR7IFwmIzM0O29iamVjdC1pZFwmIzM0OywgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7bnBjXCYjMzQ7LCBOVUxMLCBzcHVmc19ucGNfZ2V0LCAxOSB9LFxuLVx0eyBOVUxMIH0sXG4tfTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5pbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5AQCAtMjMyLDEzICYjNDM7MjMyLDkgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdO1xuIFxuIC8qIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uICovXG4gZXh0ZXJuIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxscztcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIGxvbmcgc3B1ZnNfcnVuX3NwdShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgdTMyICpucGMsIHUzMiAqc3RhdHVzKTtcbiBsb25nIHNwdWZzX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGF0aCAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzLFxuIFx0XHRcdHVtb2RlX3QgbW9kZSwgc3RydWN0IGZpbGUgKmZpbHApO1xuLS8qIEVMRiBjb3JlZHVtcCBjYWxsYmFja3MgZm9yIHdyaXRpbmcgU1BVIEVMRiBub3RlcyAqL1xuLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTtcbi1leHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NvbnRleHRfZm9wcztcbiBcbkBAIC0zMzUsMTQgJiM0MzszMzEsNiBAQCB2b2lkIHNwdWZzX3N0b3BfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgaXJxKTtcbiB2b2lkIHNwdWZzX21mY19jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUpO1xuIHZvaWQgc3B1ZnNfZG1hX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSwgaW50IHR5cGUpO1xuIFxuLXN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIge1xuLVx0Y2hhciAqbmFtZTtcbi1cdHNzaXplX3QgKCpkdW1wKShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4tXHR1NjQgKCpnZXQpKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KTtcbi1cdHNpemVfdCBzaXplO1xuLX07XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdO1xuLVxuIGV4dGVybiBpbnQgc3B1X2luaXRfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7XG4gZXh0ZXJuIHZvaWQgc3B1X2ZpbmlfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7XG4gZXh0ZXJuIGludCBzcHVfc2F2ZShzdHJ1Y3Qgc3B1X3N0YXRlICpwcmV2LCBzdHJ1Y3Qgc3B1ICpzcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmNcbmluZGV4IGVhNGJhMWI2Y2U2YTkuLmI2ZGUzNzE1MGU3MzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmNcbkBAIC04Miw4ICYjNDM7ODIsNCBAQCBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgc3B1ZnNfY2FsbHMgPSB7XG4gXHQuc3B1X3J1biA9IGRvX3NwdV9ydW4sXG4gXHQubm90aWZ5X3NwdXNfYWN0aXZlID0gZG9fbm90aWZ5X3NwdXNfYWN0aXZlLFxuIFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUgPSBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplLFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmNcbmluZGV4IDA2ZDBkZjEwNTM4MjMuLmRiMzJiYjQwYTg2NzAgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfZWxmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9lbGYuY1xuQEAgLTIwMjksNyAmIzQzOzIwMjksNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdHtcbiBcdFx0c2l6ZV90IHN6ID0gaW5mby5zaXplO1xuIFxuLVx0XHQvKiBGb3IgY2VsbCBzcHVmcyBhbmQgeDg2IHhzdGF0ZSAqL1xuJiM0MztcdFx0LyogRm9yIHg4NiB4c3RhdGUgKi9cbiBcdFx0c3ogJiM0Mzs9IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7XG4gXG4gXHRcdHBoZHI0bm90ZSA9IGttYWxsb2Nfb2JqKCpwaGRyNG5vdGUpO1xuQEAgLTIwOTMsNyAmIzQzOzIwOTMsNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdGlmICghd3JpdGVfbm90ZV9pbmZvKFx1MDAyNmluZm8sIGNwcm0pKVxuIFx0XHRnb3RvIGVuZF9jb3JlZHVtcDtcbiBcbi1cdC8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovXG4mIzQzO1x0LyogRm9yIHg4NiB4c3RhdGUgKi9cbiBcdGlmIChlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoY3BybSkpXG4gXHRcdGdvdG8gZW5kX2NvcmVkdW1wO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBhYzNjZDc0ODA4YzY0Li5hNDlmMmZkNmJlMjgwIDEwMDY0NFxuLS0tIGEvZnMvY29yZWR1bXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29yZWR1bXAuY1xuQEAgLTExMTgsMTEgJiM0MzsxMTE4LDYgQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovXG4tXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXG4tXHRpZiAodW5zaGFyZV9maWxlcygpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRpZiAoKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX0tFUk5FTCkgXHUwMDI2XHUwMDI2ICFjb3JlZHVtcF93cml0ZShjbiwgY3BybSwgYmluZm10KSlcbiBcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT1JFRFVNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQsIHdoaWNoIGlzIG9ic29sZXRlIGFuZCB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBIb3dldmVyLCBpdCBhbHNvIHJlbW92ZXMgdGhlIGB1bnNoYXJlX2ZpbGVzKClgIGNhbGwgZnJvbSB0aGUgZ2VuZXJpYyBgZG9fY29yZWR1bXAoKWAgZnVuY3Rpb24gaW4gYGZzL2NvcmVkdW1wLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgaG93IGZpbGUgZGVzY3JpcHRvciB0YWJsZXMgYXJlIGhhbmRsZWQgZHVyaW5nIGEgY29yZWR1bXAgKHRoZXkgYXJlIG5vIGxvbmdlciB1bnNoYXJlZCBpZiBzaGFyZWQgdmlhIENMT05FX0ZJTEVTKS4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGluIFFFTVUgYW5kIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgd2hlbiBkdW1waW5nIGNvcmUgb2YgcHJvY2Vzc2VzIHdpdGggc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NWU2ZjMxMTNmNjViOTU2YjRhYjA5OTE2MDdjYjJiODQ2NmIyYmRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTY6MjE6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDI1ODBlMjdlNDMyODcuLjQwYzg3NGZlMmY1M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0xNjAsNyAmIzQzOzE2MCw2IEBAIGNvbmZpZyBQUEMKIAlzZWxlY3QgQVJDSF9IQVNfVUJTQU4KIAlzZWxlY3QgQVJDSF9IQVNfVkRTT19BUkNIX0RBVEEKIAlzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcKLQlzZWxlY3QgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFUyAgICAgICAgaWYgU1BVX0JBU0UKIAlzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLCiAJc2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFCWlmIFBQQ19SQURJWF9NTVUKIAlzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBiYjRiOTQ0NDRkM2U4Li41ZGM4YzQ5MjNlYjFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMjMsMTIgJiM0MzsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCSgweDdmZiAmZ3Q7Jmd0OyAoUEFHRV9TSElGVCAtIDEyKSkgOiBcCiAJKDB4M2ZmZmYgJmd0OyZndDsgKFBBR0VfU0hJRlQgLSAxMikpKQogCi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFCi0vKiBOb3RlcyB1c2VkIGluIEVUX0NPUkUuIE5vdGUgbmFtZSBpcyAmIzM0O1NQVS8mbHQ7ZmQmZ3Q7LyZsdDtmaWxlbmFtZSZndDsmIzM0Oy4gKi8KLSNkZWZpbmUgTlRfU1BVCQkxCi0KLSNlbmRpZiAvKiBDT05GSUdfU1BVX0JBU0UgKi8KLQogI2lmZGVmIENPTkZJR19QUEM2NAogCiAjZGVmaW5lIGdldF9jYWNoZV9nZW9tZXRyeShsZXZlbCkgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oCmluZGV4IDk2YWQ0NTEwYzg5NTQuLjcxNTIyODViNjI2OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmgKQEAgLTIxMCwxNSAmIzQzOzIxMCwxMiBAQCBleHRlcm4gbG9uZyBzcHVfc3lzX2NhbGxiYWNrKHN0cnVjdCBzcHVfc3lzY2FsbF9ibG9jayAqcyk7CiAKIC8qIHN5c2NhbGxzIGltcGxlbWVudGVkIGluIHNwdWZzICovCiBzdHJ1Y3QgZmlsZTsKLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7CiBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgewogCWxvbmcgKCpjcmVhdGVfdGhyZWFkKShjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwKIAkJCQkJdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsCiAJCQkJCXN0cnVjdCBmaWxlICpuZWlnaGJvcik7CiAJbG9uZyAoKnNwdV9ydW4pKHN0cnVjdCBmaWxlICpmaWxwLCBfX3UzMiBfX3VzZXIgKnVucGMsCiAJCQkJCQlfX3UzMiBfX3VzZXIgKnVzdGF0dXMpOwotCWludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUpKHZvaWQpOwotCWludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTsKIAl2b2lkICgqbm90aWZ5X3NwdXNfYWN0aXZlKSh2b2lkKTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCmluZGV4IGRiNjViZmNkMWU3NDkuLjZiZDI2ODE1YzMzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCkBAIC0xMCw3ICYjNDM7MTAsNiBAQCBjb25maWcgU1BVX0ZTCiAJdHJpc3RhdGUgJiMzNDtTUFUgZmlsZSBzeXN0ZW0mIzM0OwogCWRlZmF1bHQgbQogCWRlcGVuZHMgb24gUFBDX0NFTEwKLQlkZXBlbmRzIG9uIENPUkVEVU1QCiAJc2VsZWN0IFNQVV9CQVNFCiAJaGVscAogCSAgVGhlIFNQVSBmaWxlIHN5c3RlbSBpcyB1c2VkIHRvIGFjY2VzcyBTeW5lcmdpc3RpYyBQcm9jZXNzaW5nCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMKaW5kZXggMDAwODk0ZTA3YjAyNy4uOGJlODEyMDdlODg2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuYwpAQCAtODgsMjYgJiM0Mzs4OCw2IEBAIFNZU0NBTExfREVGSU5FMyhzcHVfcnVuLGludCwgZmQsIF9fdTMyIF9fdXNlciAqLCB1bnBjLCBfX3UzMiBfX3VzZXIgKiwgdXN0YXR1cykKIAlyZXR1cm4gY2FsbHMtJmd0O3NwdV9ydW4oZmRfZmlsZShhcmcpLCB1bnBjLCB1c3RhdHVzKTsKIH0KIAotI2lmZGVmIENPTkZJR19DT1JFRFVNUAotaW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpCi17Ci0JQ0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpOwotCWlmICghY2FsbHMpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGNhbGxzLSZndDtjb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7Ci19Ci0KLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlDTEFTUyhzcHVmc19jYWxscywgY2FsbHMpKCk7Ci0JaWYgKCFjYWxscykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gY2FsbHMtJmd0O2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pOwotfQotI2VuZGlmCi0KIHZvaWQgbm90aWZ5X3NwdXNfYWN0aXZlKHZvaWQpCiB7CiAJc3RydWN0IHNwdWZzX2NhbGxzICpjYWxsczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZQppbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlCkBAIC00LDcgJiM0Mzs0LDYgQEAgb2JqLSQoQ09ORklHX1NQVV9GUykgJiM0Mzs9IHNwdWZzLm8KIHNwdWZzLXkgJiM0Mzs9IGlub2RlLm8gZmlsZS5vIGNvbnRleHQubyBzeXNjYWxscy5vCiBzcHVmcy15ICYjNDM7PSBzY2hlZC5vIGJhY2tpbmdfb3BzLm8gaHdfb3BzLm8gcnVuLm8gZ2FuZy5vCiBzcHVmcy15ICYjNDM7PSBzd2l0Y2gubyBmYXVsdC5vIGxzY3NhX2FsbG9jLm8KLXNwdWZzLSQoQ09ORklHX0NPUkVEVU1QKSAmIzQzOz0gY29yZWR1bXAubwogCiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzCiBDRkxBR1Nfc2NoZWQubyA6PSAtSSQoc3JjKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxZWU3ZDhiN2RmMC4uMDAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDE4MyAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8qCi0gKiBTUFUgY29yZSBkdW1wIGNvZGUKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDYgSUJNIENvcnAuCi0gKgotICogQXV0aG9yOiBEd2F5bmUgR3JhbnQgTWNDb25uZWxsICZsdDtkZWNpbWFsQHVzLmlibS5jb20mZ3Q7Ci0gKi8KLQotI2luY2x1ZGUgJmx0O2xpbnV4L2VsZi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9mZHRhYmxlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc3lzY2FsbHMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9jb3JlZHVtcC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2JpbmZtdHMuaCZndDsKLQotI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKLQotI2luY2x1ZGUgJiMzNDtzcHVmcy5oJiMzNDsKLQotc3RhdGljIGludCBzcHVmc19jdHhfbm90ZV9zaXplKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBpbnQgZGZkKQotewotCWludCBpLCBzeiwgdG90YWwgPSAwOwotCWNoYXIgKm5hbWU7Ci0JY2hhciBmdWxsbmFtZVs4MF07Ci0KLQlmb3IgKGkgPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUgIT0gTlVMTDsgaSYjNDM7JiM0MzspIHsKLQkJbmFtZSA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZTsKLQkJc3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7Ci0KLQkJc3ByaW50ZihmdWxsbmFtZSwgJiMzNDtTUFUvJWQvJXMmIzM0OywgZGZkLCBuYW1lKTsKLQotCQl0b3RhbCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7Ci0JCXRvdGFsICYjNDM7PSByb3VuZHVwKHN0cmxlbihmdWxsbmFtZSkgJiM0MzsgMSwgNCk7Ci0JCXRvdGFsICYjNDM7PSByb3VuZHVwKHN6LCA0KTsKLQl9Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLXN0YXRpYyBpbnQgbWF0Y2hfY29udGV4dChjb25zdCB2b2lkICp2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmQpCi17Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHg7Ci0JaWYgKGZpbGUtJmd0O2Zfb3AgIT0gJmFtcDtzcHVmc19jb250ZXh0X2ZvcHMpCi0JCXJldHVybiAwOwotCWN0eCA9IFNQVUZTX0koZmlsZV9pbm9kZShmaWxlKSktJmd0O2lfY3R4OwotCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNQVV9DUkVBVEVfTk9TQ0hFRCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGZkICYjNDM7IDE7Ci19Ci0KLS8qCi0gKiBUaGUgYWRkaXRpb25hbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbm90ZXMgZm9yIENlbGwgYXJlIHZhcmlvdXMKLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBzZWVzCi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnMKLSAqIGludGVybmFsIGZ1bmN0aW9uYWxpdHkgdG8gZHVtcCB0aGVtIHdpdGhvdXQgbmVlZGluZyB0byBhY3R1YWxseQotICogb3BlbiB0aGUgZmlsZXMuCi0gKi8KLS8qCi0gKiBkZXNjcmlwdG9yIHRhYmxlIGlzIG5vdCBzaGFyZWQsIHNvIGZpbGVzIGNhbiYjMzk7dCBjaGFuZ2Ugb3IgZ28gYXdheS4KLSAqLwotc3RhdGljIHN0cnVjdCBzcHVfY29udGV4dCAqY29yZWR1bXBfbmV4dF9jb250ZXh0KGludCAqZmQpCi17Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHggPSBOVUxMOwotCXN0cnVjdCBmaWxlICpmaWxlOwotCWludCBuID0gaXRlcmF0ZV9mZChjdXJyZW50LSZndDtmaWxlcywgKmZkLCBtYXRjaF9jb250ZXh0LCBOVUxMKTsKLQlpZiAoIW4pCi0JCXJldHVybiBOVUxMOwotCSpmZCA9IG4gLSAxOwotCi0JZmlsZSA9IGZnZXRfcmF3KCpmZCk7Ci0JaWYgKGZpbGUpIHsKLQkJY3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS0mZ3Q7aV9jdHg7Ci0JCWdldF9zcHVfY29udGV4dChjdHgpOwotCQlmcHV0KGZpbGUpOwotCX0KLQotCXJldHVybiBjdHg7Ci19Ci0KLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpCi17Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHg7Ci0JaW50IHNpemUgPSAwLCByYywgZmQ7Ci0KLQlmZCA9IDA7Ci0Jd2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoJmFtcDtmZCkpICE9IE5VTEwpIHsKLQkJcmMgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwotCQlpZiAocmMpIHsKLQkJCXB1dF9zcHVfY29udGV4dChjdHgpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlyYyA9IHNwdWZzX2N0eF9ub3RlX3NpemUoY3R4LCBmZCk7Ci0JCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7Ci0JCWlmIChyYyAmbHQ7IDApIHsKLQkJCXB1dF9zcHVfY29udGV4dChjdHgpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzaXplICYjNDM7PSByYzsKLQotCQkvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovCi0JCWZkJiM0MzsmIzQzOzsKLQkJcHV0X3NwdV9jb250ZXh0KGN0eCk7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBpbnQgc3B1ZnNfYXJjaF93cml0ZV9ub3RlKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBpbnQgaSwKLQkJCQkgIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIGludCBkZmQpCi17Ci0Jc2l6ZV90IHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplOwotCWNoYXIgZnVsbG5hbWVbODBdOwotCXN0cnVjdCBlbGZfbm90ZSBlbjsKLQlpbnQgcmV0OwotCi0Jc3ByaW50ZihmdWxsbmFtZSwgJiMzNDtTUFUvJWQvJXMmIzM0OywgZGZkLCBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUpOwotCWVuLm5fbmFtZXN6ID0gc3RybGVuKGZ1bGxuYW1lKSAmIzQzOyAxOwotCWVuLm5fZGVzY3N6ID0gc3o7Ci0JZW4ubl90eXBlID0gTlRfU1BVOwotCi0JaWYgKCFkdW1wX2VtaXQoY3BybSwgJmFtcDtlbiwgc2l6ZW9mKGVuKSkpCi0JCXJldHVybiAtRUlPOwotCWlmICghZHVtcF9lbWl0KGNwcm0sIGZ1bGxuYW1lLCBlbi5uX25hbWVzeikpCi0JCXJldHVybiAtRUlPOwotCWlmICghZHVtcF9hbGlnbihjcHJtLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5kdW1wKSB7Ci0JCXJldCA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcChjdHgsIGNwcm0pOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7Ci0JfSBlbHNlIHsKLQkJY2hhciBidWZbMzJdOwotCi0JCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7MHglLjE2bGx4JiMzNDssCi0JCQkgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7Ci0JCWlmIChyZXQgJmd0Oz0gc2l6ZW9mKGJ1ZikpCi0JCQlyZXR1cm4gc2l6ZW9mKGJ1Zik7Ci0KLQkJLyogY291bnQgdHJhaWxpbmcgdGhlIE5VTEw6ICovCi0JCWlmICghZHVtcF9lbWl0KGNwcm0sIGJ1ZiwgcmV0ICYjNDM7IDEpKQotCQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZHVtcF9za2lwX3RvKGNwcm0sIHJvdW5kdXAoY3BybS0mZ3Q7cG9zIC0gcmV0ICYjNDM7IHN6LCA0KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OwotCWludCBmZCwgaiwgcmM7Ci0KLQlmZCA9IDA7Ci0Jd2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoJmFtcDtmZCkpICE9IE5VTEwpIHsKLQkJcmMgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJZm9yIChqID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtqXS5uYW1lICE9IE5VTEw7IGomIzQzOyYjNDM7KSB7Ci0JCQlyYyA9IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShjdHgsIGosIGNwcm0sIGZkKTsKLQkJCWlmIChyYykgewotCQkJCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7Ci0JCQkJcmV0dXJuIHJjOwotCQkJfQotCQl9Ci0KLQkJc3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTsKLQotCQkvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovCi0JCWZkJiM0MzsmIzQzOzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCmluZGV4IGRlNzQ5NDc0OGZlY2QuLjk4YzQ3YmFmYWY2NzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwpAQCAtOSw3ICYjNDM7OSw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSAmbHQ7bGludXgvY29yZWR1bXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzAsMTQgJiM0MzsxMjksNiBAQCBzdGF0aWMgc3NpemVfdCBzcHVmc19hdHRyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNwdWZzX2R1bXBfZW1pdChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLCB2b2lkICpidWYsCi0JCXNpemVfdCBzaXplKQotewotCWlmICghZHVtcF9lbWl0KGNwcm0sIGJ1Ziwgc2l6ZSkpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiBzaXplOwotfQotCiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdCkJXAogc3RhdGljIGludCBfX2ZvcHMgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCVwKIHsJCQkJCQkJCQlcCkBAIC0xODAsMTIgJiM0MzsxNzEsNiBAQCBzcHVmc19tZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNwdWZzX21lbV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgY3R4LSZndDtvcHMtJmd0O2dldF9scyhjdHgpLCBMU19TSVpFKTsKLX0KLQogc3RhdGljIHNzaXplX3QKIHNwdWZzX21lbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJCXNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcykKQEAgLTQ2NiwxMyAmIzQzOzQ1MSw2IEBAIHNwdWZzX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNwdWZzX3JlZ3NfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC0mZ3Q7Y3NhLmxzY3NhLSZndDtncHJzLAotCQkJICAgICAgIHNpemVvZihjdHgtJmd0O2NzYS5sc2NzYS0mZ3Q7Z3BycykpOwotfQotCiBzdGF0aWMgc3NpemVfdAogc3B1ZnNfcmVnc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCkBAIC01MjMsMTMgJiM0Mzs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7CiAJLmxsc2VlayAgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAotc3RhdGljIHNzaXplX3QKLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2EubHNjc2EtJmd0O2ZwY3IsCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLmxzY3NhLSZndDtmcGNyKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90CiBzcHVmc19mcGNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLAogCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICogcG9zKQpAQCAtOTUzLDE1ICYjNDM7OTI0LDYgQEAgc3B1ZnNfc2lnbmFsMV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19zaWduYWwxX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCFjdHgtJmd0O2NzYS5zcHVfY2hubGNudF9SV1szXSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1szXSwKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2Euc3B1X2NobmxkYXRhX1JXWzNdKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMV9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLAogCQkJc2l6ZV90IGxlbikKIHsKQEAgLTEwODYsMTUgJiM0MzsxMDQ4LDYgQEAgc3B1ZnNfc2lnbmFsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19zaWduYWwyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCFjdHgtJmd0O2NzYS5zcHVfY2hubGNudF9SV1s0XSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1s0XSwKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2Euc3B1X2NobmxkYXRhX1JXWzRdKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMl9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLAogCQkJc2l6ZV90IGxlbikKIHsKQEAgLTE5MjQsMTUgJiM0MzsxODc3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY2Fwc19mb3BzID0gewogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlpZiAoIShjdHgtJmd0O2NzYS5wcm9iLm1iX3N0YXRfUiAmYW1wOyAweDAwMDBmZikpCi0JCXJldHVybiAwOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtjdHgtJmd0O2NzYS5wcm9iLnB1X21iX1IsCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnByb2IucHVfbWJfUikpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTE5NjIsMTUgJiM0MzsxOTA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWJveF9pbmZvX2ZvcHMgPSB7CiAJLmxsc2VlayAgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCEoY3R4LSZndDtjc2EucHJvYi5tYl9zdGF0X1IgJmFtcDsgMHhmZjAwMDApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2EucHJpdjIucHVpbnRfbWJfUiwKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2EucHJpdjIucHVpbnRfbWJfUikpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTIwMDUsMTMgJiM0MzsxOTQwLDYgQEAgc3RhdGljIHNpemVfdCBzcHVmc193Ym94X2luZm9fY250KHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQogCXJldHVybiAoNCAtICgoY3R4LSZndDtjc2EucHJvYi5tYl9zdGF0X1IgJmFtcDsgMHgwMGZmMDApICZndDsmZ3Q7IDgpKSAqIHNpemVvZih1MzIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2Euc3B1X21haWxib3hfZGF0YSwKLQkJCXNwdWZzX3dib3hfaW5mb19jbnQoY3R4KSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3dib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKQogewpAQCAtMjA1OSwxNSAmIzQzOzE5ODcsNiBAQCBzdGF0aWMgdm9pZCBzcHVmc19nZXRfZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCiAJfQogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXN0cnVjdCBzcHVfZG1hX2luZm8gaW5mbzsKLQotCXNwdWZzX2dldF9kbWFfaW5mbyhjdHgsICZhbXA7aW5mbyk7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2luZm8sIHNpemVvZihpbmZvKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2RtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTIxMTIsMTUgJiM0MzsyMDMxLDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X3Byb3h5ZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCiAJfQogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0Jc3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87Ci0KLQlzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsICZhbXA7aW5mbyk7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2luZm8sIHNpemVvZihpbmZvKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3Byb3h5ZG1hX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTI1ODAsMjcgJiM0MzsyNDkwLDMgQEAgY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7CiAJeyAmIzM0Oy5jdHgmIzM0OywgJmFtcDtzcHVmc19jdHhfZm9wcywgMDQ0NCwgfSwKIAl7fSwKIH07Ci0KLWNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0gewotCXsgJiMzNDtyZWdzJiMzNDssIHNwdWZzX3JlZ3NfZHVtcCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4WzEyOF0pfSwKLQl7ICYjMzQ7ZnBjciYjMzQ7LCBzcHVmc19mcGNyX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSwKLQl7ICYjMzQ7bHNsciYjMzQ7LCBOVUxMLCBzcHVmc19sc2xyX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZGVjciYjMzQ7LCBOVUxMLCBzcHVmc19kZWNyX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZGVjcl9zdGF0dXMmIzM0OywgTlVMTCwgc3B1ZnNfZGVjcl9zdGF0dXNfZ2V0LCAxOSB9LAotCXsgJiMzNDttZW0mIzM0Oywgc3B1ZnNfbWVtX2R1bXAsIE5VTEwsIExTX1NJWkUsIH0sCi0JeyAmIzM0O3NpZ25hbDEmIzM0Oywgc3B1ZnNfc2lnbmFsMV9kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDtzaWduYWwxX3R5cGUmIzM0OywgTlVMTCwgc3B1ZnNfc2lnbmFsMV90eXBlX2dldCwgMTkgfSwKLQl7ICYjMzQ7c2lnbmFsMiYjMzQ7LCBzcHVmc19zaWduYWwyX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sCi0JeyAmIzM0O3NpZ25hbDJfdHlwZSYjMzQ7LCBOVUxMLCBzcHVmc19zaWduYWwyX3R5cGVfZ2V0LCAxOSB9LAotCXsgJiMzNDtldmVudF9tYXNrJiMzNDssIE5VTEwsIHNwdWZzX2V2ZW50X21hc2tfZ2V0LCAxOSB9LAotCXsgJiMzNDtldmVudF9zdGF0dXMmIzM0OywgTlVMTCwgc3B1ZnNfZXZlbnRfc3RhdHVzX2dldCwgMTkgfSwKLQl7ICYjMzQ7bWJveF9pbmZvJiMzNDssIHNwdWZzX21ib3hfaW5mb19kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDtpYm94X2luZm8mIzM0Oywgc3B1ZnNfaWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sCi0JeyAmIzM0O3dib3hfaW5mbyYjMzQ7LCBzcHVmc193Ym94X2luZm9fZHVtcCwgTlVMTCwgNCAqIHNpemVvZih1MzIpfSwKLQl7ICYjMzQ7ZG1hX2luZm8mIzM0Oywgc3B1ZnNfZG1hX2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfZG1hX2luZm8pfSwKLQl7ICYjMzQ7cHJveHlkbWFfaW5mbyYjMzQ7LCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAsCi0JCQkgICBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9wcm94eWRtYV9pbmZvKX0sCi0JeyAmIzM0O29iamVjdC1pZCYjMzQ7LCBOVUxMLCBzcHVmc19vYmplY3RfaWRfZ2V0LCAxOSB9LAotCXsgJiMzNDtucGMmIzM0OywgTlVMTCwgc3B1ZnNfbnBjX2dldCwgMTkgfSwKLQl7IE5VTEwgfSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCmluZGV4IGQzMzc4N2M1N2MzOWEuLjYxMmI1MDc1ZDBlY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCkBAIC0yMzIsMTMgJiM0MzsyMzIsOSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107CiAKIC8qIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uICovCiBleHRlcm4gc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzOwotc3RydWN0IGNvcmVkdW1wX3BhcmFtczsKIGxvbmcgc3B1ZnNfcnVuX3NwdShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgdTMyICpucGMsIHUzMiAqc3RhdHVzKTsKIGxvbmcgc3B1ZnNfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYXRoICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJCQl1bW9kZV90IG1vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKLS8qIEVMRiBjb3JlZHVtcCBjYWxsYmFja3MgZm9yIHdyaXRpbmcgU1BVIEVMRiBub3RlcyAqLwotZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpOwotZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY29udGV4dF9mb3BzOwogCkBAIC0zMzUsMTQgJiM0MzszMzEsNiBAQCB2b2lkIHNwdWZzX3N0b3BfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgaXJxKTsKIHZvaWQgc3B1ZnNfbWZjX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSk7CiB2b2lkIHNwdWZzX2RtYV9jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUsIGludCB0eXBlKTsKIAotc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciB7Ci0JY2hhciAqbmFtZTsKLQlzc2l6ZV90ICgqZHVtcCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwotCXU2NCAoKmdldCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpOwotCXNpemVfdCBzaXplOwotfTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXTsKLQogZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKIGV4dGVybiB2b2lkIHNwdV9maW5pX2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpOwogZXh0ZXJuIGludCBzcHVfc2F2ZShzdHJ1Y3Qgc3B1X3N0YXRlICpwcmV2LCBzdHJ1Y3Qgc3B1ICpzcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwppbmRleCBlYTRiYTFiNmNlNmE5Li5iNmRlMzcxNTBlNzM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwpAQCAtODIsOCAmIzQzOzgyLDQgQEAgc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzID0gewogCS5zcHVfcnVuID0gZG9fc3B1X3J1biwKIAkubm90aWZ5X3NwdXNfYWN0aXZlID0gZG9fbm90aWZ5X3NwdXNfYWN0aXZlLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAotI2lmZGVmIENPTkZJR19DT1JFRFVNUAotCS5jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSwKLQkuY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUgPSBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSwKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCAwNmQwZGYxMDUzODIzLi5kYjMyYmI0MGE4NjcwIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X2VsZi5jCkBAIC0yMDI5LDcgJiM0MzsyMDI5LDcgQEAgc3RhdGljIGludCBlbGZfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCiAJewogCQlzaXplX3Qgc3ogPSBpbmZvLnNpemU7CiAKLQkJLyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi8KJiM0MzsJCS8qIEZvciB4ODYgeHN0YXRlICovCiAJCXN6ICYjNDM7PSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpOwogCiAJCXBoZHI0bm90ZSA9IGttYWxsb2Nfb2JqKCpwaGRyNG5vdGUpOwpAQCAtMjA5Myw3ICYjNDM7MjA5Myw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQogCWlmICghd3JpdGVfbm90ZV9pbmZvKCZhbXA7aW5mbywgY3BybSkpCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCi0JLyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi8KJiM0MzsJLyogRm9yIHg4NiB4c3RhdGUgKi8KIAlpZiAoZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIApkaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmMKaW5kZXggYWMzY2Q3NDgwOGM2NC4uYTQ5ZjJmZDZiZTI4MCAxMDA2NDQKLS0tIGEvZnMvY29yZWR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jCkBAIC0xMTE4LDExICYjNDM7MTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLAogCWlmIChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9SRUpFQ1QpCiAJCXJldHVybjsKIAotCS8qIGdldCB1cyBhbiB1bnNoYXJlZCBkZXNjcmlwdG9yIHRhYmxlOyBhbG1vc3QgYWx3YXlzIGEgbm8tb3AgKi8KLQkvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovCi0JaWYgKHVuc2hhcmVfZmlsZXMoKSkKLQkJcmV0dXJuOwotCiAJaWYgKChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9LRVJORUwpICZhbXA7JmFtcDsgIWNvcmVkdW1wX3dyaXRlKGNuLCBjcHJtLCBiaW5mbXQpKQogCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZXNzZW50aWFsbHkgY2xlYW5zIHVwIHNvbWUgZGVhZCBjb2RlIHJlbGF0ZWQgdG8gdGhlIFN5bmVyZ2lzdGljIFByb2Nlc3NpbmcgVW5pdCAoU1BVKSBvbiB0aGUgUG93ZXJQQyBDZWxsIHBsYXRmb3JtLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBTUFUgY29yZWR1bXAgY29kZSBhbmQsIGltcG9ydGFudGx5LCB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCB3aXRoaW4gdGhlIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSZW1vdmFsPyBIbW0sIHByb2JhYmx5IG5vdCB3b3J0aCBhIGRlZXAgZGl2ZSBmb3IgZnV6emluZywgdXN1YWxseS4mIzM0OyBCdXQgbGV0JiMzOTtzIGRpZyBkZWVwZXIuCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgdW5zaGFyZV9maWxlcygpYCByZW1vdmFsIGZyb20gYGRvX2NvcmVkdW1wKClgLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYW5kIHRoYXQgYWx3YXlzIGdldHMgbXkgYXR0ZW50aW9uLiBJbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgaXQgd2FzIHByb2JhYmx5IG9ubHkgYSBDZWxsIHNwZWNpZmljIGNoYW5nZSwgaG93ZXZlciwgaXQgaXMgaW4gYGZzL2NvcmVkdW1wLmNgLiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIHRoaXMuIFRoZSBjb21tZW50IG1lbnRpb25zIENlbGwgU1BVcyBzcGVjaWZpY2FsbHksIGJ1dCB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGJyb2FkZXIuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgdGhpcyBjaGFuZ2UgKmFjdHVhbGx5KiB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgY2FsbCB0byBgdW5zaGFyZV9maWxlcygpYCwgd2hpY2ggbWVhbnMsIHdoZW4gdGhlIGNvcmUgaXMgZHVtcGVkLCB0aGUgZmlsZXMgYXJlICpubyBsb25nZXIqIHVuc2hhcmVkLiBXaGlsZSBhIGxvdCBvZiB0aGUgY29kZSBiZWluZyByZW1vdmVkIGlzIG9uIGFuIG9ic29sZXRlIGFyY2hpdGVjdHVyZSwgdGhpcyBjb3VsZCBzdGlsbCBsZWFkIHRvIGEgc2VjdXJpdHkgY29uY2Vybi4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZCBpbiBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBJZiBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCwgb3IgaXMgZGVwcmVjYXRlZCBvciBpbXBvc3NpYmxlIHRvIHJlcGxpY2F0ZSwgdGhlbiBpdCBtYXkgbm90IGJlIHdvcnRoIGZ1enppbmcuIEkgYmVsaWV2ZSBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSB0aGUgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIFNQVXMsIHdoaWNoIG1lYW5zLCB0aGUgY29kZSBpcyBsaWtlbHkgZGVhZCBpbiBtb2Rlcm4gc3lzdGVtcy4KCkJ1dCB0aGVuIEkgaGFkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7CgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcyB0byBgZnMvY29yZWR1bXAuY2AsIGxldCYjMzk7cyBzZWU6CgpgYGBjCkBAIC0xMTE4LDExICYjNDM7MTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLAogCWlmIChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9SRUpFQ1QpCiAJCXJldHVybjsKIAotCS8qIGdldCB1cyBhbiB1bnNoYXJlZCBkZXNjcmlwdG9yIHRhYmxlOyBhbG1vc3QgYWx3YXlzIGEgbm8tb3AgKi8KLQkvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovCi0JaWYgKHVuc2hhcmVfZmlsZXMoKSkKLQkJcmV0dXJuOwotCiAJaWYgKChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9LRVJORUwpICZhbXA7JmFtcDsgIWNvcmVkdW1wX3dyaXRlKGNuLCBjcHJtLCBiaW5mbXQpKQogCQlyZXR1cm47CiBgYGAKCk9rLCBjb25maXJtZWQsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgc2VlbXMgbGlrZSB0aGUgZmlsZXMgYXJlIG5vIGxvbmdlciB1bnNoYXJlZCB3aGVuIGBkb19jb3JlZHVtcGAgaXMgY2FsbGVkLCBpbiAqYW55KiBhcmNoaXRlY3R1cmUuIFRoaXMgY291bGQgbGVhZCB0byBhIGJ1ZyBpZiBzb21ldGhpbmcgZWxzZSByZWxpZXMgb24gdGhpcyBiZWhhdmlvci4gQnV0IGl0ICp3YXMqIGFkZGVkIHNwZWNpZmljYWxseSBmb3IgQ2VsbCBTUFUuIAoKVWx0aW1hdGVseSwgdGhpcyBpcyBhIGhhcmQgY2FsbC4gTXkgaW5zdGluY3Qgc2F5cyB0aGlzIGlzIGxpa2VseSBhIHJlbW92YWwgb2YgYW4gb2Jzb2xldGUgY2FsbCwgYnV0IEkgY2FuJiMzOTt0IGlnbm9yZSB0aGUgY29yZSBmdW5jdGlvbiBjaGFuZ2UuIEJ1dCBJIHN1c3BlY3QgdGhlIGNhbGwgd2FzIG5vdCBiZWluZyB1c2VkLiBJdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIHRoaXMgY2hhbmdlIGZ1cnRoZXIgZm9yIHBvc3NpYmxlIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fY29yZWR1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb3JlZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvcmVkdW1wLmM9MTA3NT1zdGF0aWMgaW5saW5lIGJvb2wgY29yZWR1bXBfc2tpcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtMTA4Ni1cbmZzL2NvcmVkdW1wLmM6MTA4NzpzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbmZzL2NvcmVkdW1wLmMtMTA4OC1cdFx0XHRzaXplX3QgKiphcmd2LCBpbnQgKmFyZ2MsIGNvbnN0IHN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdClcbi0tXG5mcy9jb3JlZHVtcC5jPTExNTE9dm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbylcbi0tXG5mcy9jb3JlZHVtcC5jLTExODktXHRzY29wZWRfd2l0aF9jcmVkcyhjcmVkKVxuZnMvY29yZWR1bXAuYzoxMTkwOlx0XHRkb19jb3JlZHVtcChcdTAwMjZjbiwgXHUwMDI2Y3BybSwgXHUwMDI2YXJndiwgXHUwMDI2YXJnYywgYmluZm10KTtcbmZzL2NvcmVkdW1wLmMtMTE5MS1cdGNvcmVkdW1wX2NsZWFudXAoXHUwMDI2Y24sIFx1MDAyNmNwcm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvcmVkdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggcmVtb3ZlcyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGlzIHdvcnRoIGZ1enppbmc/JiMzNDsgVGhlIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQgcmVtb3ZhbCBpcyBhbG1vc3QgaXJyZWxldmFudCBzaW5jZSB0aGF0IGFyY2hpdGVjdHVyZSBpcyBwcmV0dHkgbXVjaCBkZWFkIGFuZCBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIHJlbW92YWwgb2YgdGhhdCBgdW5zaGFyZV9maWxlcygpYCBjYWxsIHdpdGhpbiBgZG9fY29yZWR1bXAoKWAuCgpJbml0aWFsbHksIEkgZmlndXJlZCBmdXp6aW5nIGBkb19jb3JlZHVtcGAgKmNvdWxkKiBiZSB1c2VmdWwsIGJ1dCB0aGUgcmVtb3ZlZCBmdW5jdGlvbiBzZWVtZWQgdG8gYmUgYSBuZWFyIG5vLW9wLiBUaGVuIEkgcmVtZW1iZXJlZCwgYHVuc2hhcmVfZmlsZXMoKWAgYWN0dWFsbHkgbWFuYWdlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLiBJZiB0aGUgdGFibGUgaXMgc2hhcmVkLCBpdCAqY3JlYXRlcyBhIG5ldyBvbmUqLCBvdGhlcndpc2UgZG9lcyBub3RoaW5nLiBTbywgcmVtb3ZpbmcgaXQgbWVhbnMgdGhlIGNvcmVkdW1wIHByb2Nlc3Mgbm93ICpzaGFyZXMqIGl0cyBmaWxlIGRlc2NyaXB0b3IgdGFibGUgd2l0aCBvdGhlciB0aHJlYWRzL3Byb2Nlc3NlcyBpZiBpdCB3YXMgc2hhcmVkLgoKTm93LCBjb3JlZHVtcHMgdXN1YWxseSBoYXBwZW4gYWZ0ZXIgYSBwcm9jZXNzIGNyYXNoZXMsIG9mdGVuIGFmdGVyIHRlcm1pbmF0aW5nIG90aGVyIHRocmVhZHMgb3IgYmVpbmcgaGl0IGJ5IGEgZmF0YWwgc2lnbmFsLiBTbywgSSBzZWUgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2NvcmVkdW1wLmNgLCB3aGljaCBtZWFucyBpdCYjMzk7cyAqcmVhY2hhYmxlKi4gQ3Jhc2hpbmcgYSBwcm9jZXNzIHRyaWdnZXJzIGBkb19jb3JlZHVtcGAsIG1ha2luZyBpdCByZWFjaGFibGUuCgpHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBpbXBhY3Qgb2YgdGhpcyByZW1vdmFsLiBUaGUgcHJvbXB0IHNheXMsICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLi4udXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgVGltZSB0byBnbyBkZWVwZXIgYW5kIGNoZWNrIGB1bnNoYXJlX2ZpbGVzYCBpbiBga2VybmVsL2ZvcmsuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaGFyZV9maWxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYz0zMzU0PVNZU0NBTExfREVGSU5FMSh1bnNoYXJlLCB1bnNpZ25lZCBsb25nLCB1bnNoYXJlX2ZsYWdzKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzM2NC1cbmtlcm5lbC9mb3JrLmM6MzM2NTppbnQgdW5zaGFyZV9maWxlcyh2b2lkKVxua2VybmVsL2ZvcmsuYy0zMzY2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjExNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb3JlIER1bXAgVnVsbmVyYWJpbGl0eSBDb25jZXJucyoqCgpPa2F5LCBzbyBgdW5zaGFyZV9maWxlc2AgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSByZW1vdmFsIG9mIHRoaXMgZnVuY3Rpb24gZnJvbSBgZG9fY29yZWR1bXBgIGlzIHJhaXNpbmcgc29tZSByZWQgZmxhZ3MgaW4gbXkgbWluZC4gVGhlIGNydXggb2YgaXQgaXMgdGhpczogaWYgYSBwcm9jZXNzIGlzIHNoYXJpbmcgaXRzIGZpbGUgZGVzY3JpcHRvciB0YWJsZSDigJMgc2F5LCB2aWEgYENMT05FX0ZJTEVTYCAqd2l0aG91dCogYENMT05FX1RIUkVBRGAg4oCTIGFuZCB0aGVuIGNyYXNoZXMsIHRoZSBjb3JlZHVtcCBwcm9jZXNzICp3b24mIzM5O3QqIHVuc2hhcmUgdGhvc2UgZmlsZXMuIFRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2UgaXMgdGhhdCB0aGUgY29yZWR1bXAgcHJvY2VzcyBjb3VsZCBpbmFkdmVydGVudGx5IG1vZGlmeSB0aGF0IHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGlmIGBkb19jb3JlZHVtcGAgaXRzZWxmLCBvcGVucyBhIHBpcGUgb3IgYSBmaWxlIHRvIHdyaXRlIHRoZSBjb3JlIGR1bXAsIGl0IHdvdWxkIGFkZCBhIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgc2hhcmVkIHRhYmxlLiBUaGlzIHdvdWxkIG1lYW4gdGhhdCBwcm9jZXNzZXMgc2hhcmluZyB0aGF0IHRhYmxlIGNvdWxkIHBvdGVudGlhbGx5IGhhdmUgYWNjZXNzIHRvIHRoaXMgaW5mb3JtYXRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgZG9fY29yZWR1bXBgIGlzIGluZGVlZCBvcGVuaW5nIHRoZXNlIGZpbGVzL3BpcGVzLiBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIHJpZ2h0IGF3YXkgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZV9vcGVuX3Jvb3R8ZmlscF9vcGVufGZpbGVfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvcmVkdW1wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTkwMi1cdFx0ICogSWYgaXQgZG9lc24mIzM5O3QgZXhpc3QsIHRoYXQmIzM5O3MgZmluZS4gSWYgdGhlcmUmIzM5O3Mgc29tZVxuZnMvY29yZWR1bXAuYzo5MDM6XHRcdCAqIG90aGVyIHByb2JsZW0sIHdlJiMzOTtsbCBjYXRjaCBpdCBhdCB0aGUgZmlscF9vcGVuKCkuXG5mcy9jb3JlZHVtcC5jLTkwNC1cdFx0ICovXG4tLVxuZnMvY29yZWR1bXAuYy05MjYtXHRcdHNjb3BlZF93aXRoX2luaXRfZnMoKVxuZnMvY29yZWR1bXAuYzo5Mjc6XHRcdFx0ZmlsZSA9IGZpbHBfb3Blbihjbi1cdTAwM2Vjb3JlbmFtZSwgb3Blbl9mbGFncywgMDYwMCk7XG5mcy9jb3JlZHVtcC5jLTkyOC1cdH0gZWxzZSB7XG5mcy9jb3JlZHVtcC5jOjkyOTpcdFx0ZmlsZSA9IGZpbHBfb3Blbihjbi1cdTAwM2Vjb3JlbmFtZSwgb3Blbl9mbGFncywgMDYwMCk7XG5mcy9jb3JlZHVtcC5jLTkzMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNvcmVkdW1wIEZpbGUgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBjb3JlZHVtcCBwcm9jZXNzLiBJIHJlbWVtYmVyIHRoYXQgYGZpbHBfb3BlbmAgaXMgZGVmaW5pdGVseSB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBnZW5lcmF0aW5nIGEgY29yZSBkdW1wLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBjb3JlZHVtcF9maWxlYC4gTm93LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhlIGNhbGwgY2hhaW4gaGVyZS4gSXMgYGNvcmVkdW1wX2ZpbGVgIHJlYWxseSBkaXJlY3RseSBjYWxsZWQgYnkgYGRvX2NvcmVkdW1wYD8gSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBpdCBpcywgYnV0IGdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbiBlcnJvciwgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGwgcmVsYXRpb25zaGlwIGJldHdlZW4gYGRvX2NvcmVkdW1wYCBhbmQgYGNvcmVkdW1wX2ZpbGVgIHNvIEkgY2FuIGNvbmZpcm0gbXkgbWVudGFsIG1vZGVsLiBUaGlzIGxldmVsIG9mIG1ldGljdWxvdXNuZXNzIGlzIGVzc2VudGlhbCBpbiBrZXJuZWwgZGVidWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlZHVtcF9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY29yZWR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb3JlZHVtcC5jPTg3Mj1zdGF0aWMgaW5saW5lIGJvb2wgY29yZWR1bXBfZm9yY2Vfc3VpZF9zYWZlKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4tLVxuZnMvY29yZWR1bXAuYy04NzctXG5mcy9jb3JlZHVtcC5jOjg3ODpzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuZnMvY29yZWR1bXAuYy04NzktXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbGludXhfYmluZm10ICpiaW5mbXQpXG4tLVxuZnMvY29yZWR1bXAuYz0xMDg3PXN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtMTA5OC1cdGNhc2UgQ09SRURVTVBfRklMRTpcbmZzL2NvcmVkdW1wLmM6MTA5OTpcdFx0aWYgKCFjb3JlZHVtcF9maWxlKGNuLCBjcHJtLCBiaW5mbXQpKVxuZnMvY29yZWR1bXAuYy0xMTAwLVx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyODYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGB1bnNoYXJlX2ZpbGVzKClgIFJlbW92YWwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBhYm91dCBgZmlscF9vcGVuYC4gSXQgKmRvZXNuJiMzOTt0KiBhY3R1YWxseSBwdXQgdGhlIGZpbGUgaW50byB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLiBJdCBqdXN0IGdpdmVzIHlvdSBhIGBzdHJ1Y3QgZmlsZSAqYC4gVGhhdCBtZWFucyBpdCBkb2VzbiYjMzk7dCB0b3VjaCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIGF0IGFsbC4gU28sIHRoZSBxdWVzdGlvbiBpczogd2h5IHdhcyBgdW5zaGFyZV9maWxlcygpYCBuZWVkZWQgaW4gdGhlIGZpcnN0IHBsYWNlPwoKVGhlIGNvbW1lbnQgbWVudGlvbmVkIHRoZSBDZWxsIFNQVSBjb3JlZHVtcCBjb2RlIGFuZCBob3cgaXQgcmVhZCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcy4gQWgsIHRoYXQmIzM5O3MgaXQhIGB1bnNoYXJlX2ZpbGVzKClgIHdhcyB0aGVyZSBiZWNhdXNlIHRoZSBjb3JlZHVtcCBjb2RlIHdhcyAqaXRlcmF0aW5nKiB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3JzIHRvIGZpbmQgYW5kIGR1bXAgU1BVIGNvbnRleHRzLiBJZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHdhcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMsIGl0ZXJhdGluZyBvdmVyIGl0IHdoaWxlIGFub3RoZXIgcHJvY2VzcyBtaWdodCBiZSBtb2RpZnlpbmcgaXQgY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBBIHN0YWJsZSBzbmFwc2hvdCB3YXMgbGlrZWx5IG5lY2Vzc2FyeSBmb3IgYSBjb25zaXN0ZW50IGNvcmVkdW1wLgoKTm93LCBzaW5jZSB0aGUgQ2VsbCBTUFUgY29yZWR1bXAgY29kZSBoYXMgYmVlbiByZW1vdmVkLCBgdW5zaGFyZV9maWxlcygpYCAqc2hvdWxkbiYjMzk7dCogYmUgbmVjZXNzYXJ5IGFueW1vcmUuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIElzIHRoaXMgd29ydGggZXhwbG9yaW5nIGZ1cnRoZXIgd2l0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgZG9fY29yZWR1bXBgLiBFdmVuIHRob3VnaCBpdCYjMzk7cyAmIzM0O2p1c3QmIzM0OyByZW1vdmluZyBgdW5zaGFyZV9maWxlcygpYCwgaXQgc3VidGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGRvX2NvcmVkdW1wYCwgZXNwZWNpYWxseSB3aGVuIGBDTE9ORV9GSUxFU2AgaXMgdXNlZCB3aXRob3V0IGBDTE9ORV9USFJFQURgLgoKSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19jb3JlZHVtcGAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoZSBlbnRyeSBwb2ludCBtdXN0IGJlIHRocm91Z2ggYHZmc19jb3JlZHVtcGAgb3IgYGNvcmVkdW1wX3Rhc2tfZXhpdGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gVGltZSB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgdmZzX2NvcmVkdW1wYCB0byBjb25maXJtIHRoaXMgaHVuY2ggYW5kIGVzdGFibGlzaCBhIGdvb2QgdGVzdGluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0PTU1Mz1kaWZmZXJlbnQgc2V0IG9mIGNyZWRlbnRpYWxzLiAgVGhpcyBpcyBkb25lIGluIHRoZSBmb2xsb3dpbmcgcGxhY2VzOlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1NS0gKiBgYHN5c19mYWNjZXNzYXQoKWBgLlxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NTU2OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1Ny0gKiBuZnM0cmVjb3Zlci5jLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD0yNTQ9Y29uc3TmjIfpkojkuIrmk43kvZzvvIzlm6DmraTkuI3pnIDopoHov5vooYznsbvlnovovazmjaLvvIzkvYbpnIDopoHkuLTml7bmlL7lvINjb25zdOmZkOWumu+8jOS7peS+v+iDveWkn+S/ruaUuVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzUtICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdDo0NzY6ICogYGB2ZnNfY29yZWR1bXAoKWBgLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTQ3Ny0gKiBuZnM0cmVjb3Zlci5jLlxuLS1cbmZzL2NvcmVkdW1wLmM9MTA4Nz1zdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTExNTAtXG5mcy9jb3JlZHVtcC5jOjExNTE6dm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbylcbmZzL2NvcmVkdW1wLmMtMTE1Mi17XG4tLVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oPTQ4PWludCBkdW1wX3VzZXJfcmFuZ2Uoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC00OS1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKTtcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaDo1MDpleHRlcm4gdm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNTEtXG4tLVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTY5LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKSB7fVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTcxLVxuLS1cbmtlcm5lbC9zaWduYWwuYz0yODAzPWJvb2wgZ2V0X3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcbi0tXG5rZXJuZWwvc2lnbmFsLmMtMzAyMy1cdFx0XHQgKi9cbmtlcm5lbC9zaWduYWwuYzozMDI0Olx0XHRcdHZmc19jb3JlZHVtcChcdTAwMjZrc2lnLVx1MDAzZWluZm8pO1xua2VybmVsL3NpZ25hbC5jLTMwMjUtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2ZnNfY29yZWR1bXBgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB2ZnNfY29yZWR1bXBgIGlzIHdoZXJlIHRoaXMgd2hvbGUgdGhpbmcga2lja3Mgb2ZmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBwcmltYXJ5IGZvY3VzLiBBbHJpZ2h0LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmZzX2NvcmVkdW1wYCBpcyBpbmRlZWQgYSBwdWJsaWMgQVBJIGVudHJ5IHBvaW50IGFuZCBub3Qgc29tZSBpbnRlcm5hbCwgc3RhdGljIGZ1bmN0aW9uIOKAkyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4gQnV0IGhvbGQgb24sIHRoZSBjYWxsIGdyYXBoIHNob3dzIGB2ZnNfY29yZWR1bXBgIGJlaW5nIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIERvZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEFoLCB5ZXMsIGl0IGFwcGVhcnMgYENPTkZJR19DT1JFRFVNUGAgaXMgYSBwcmVyZXF1aXNpdGUuIEdvb2QsIGdvb2QgLSBJJiMzOTttIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT1JFRFVNUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD0xNzE9Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuLS1cbmZzL0tjb25maWcuYmluZm10LTE4NC1cbmZzL0tjb25maWcuYmluZm10OjE4NTpjb25maWcgQ09SRURVTVBcbmZzL0tjb25maWcuYmluZm10LTE4Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBhYm91dCBgQ09SRURVTVBgLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBTUFUtc3BlY2lmaWMgY29yZWR1bXAgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggZnV6emluZz8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KClRoZSBwcm9tcHQgcHJvdmlkZXMgc29tZSBjbGVhciBndWlkZWxpbmVzOiBPbmx5IGNoYW5nZXMgdGhhdCBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHJlbW92ZXMgYSBjYWxsIHRvIGB1bnNoYXJlX2ZpbGVzKClgIGZyb20gYGRvX2NvcmVkdW1wKClgLiBUaGlzICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdzsgaXQmIzM5O3MgYSBmdW5jdGlvbiBjYWxsIHJlbW92YWwsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBDcnVjaWFsbHksIGFueSBwcm9jZXNzIGluIFFFTVUgY2FuIGdlbmVyYXRlIGEgY29yZSBkdW1wLCBzbyB0aGlzIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGF0IGNyaXRlcmlhLCB0aGlzIGxvb2tzIGxpa2UgYSBgV29ydGhGdXp6aW5nPXRydWVgIHNpdHVhdGlvbi4KCkhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jYCBhbmQgcmVsYXRlZCBjb2RlLiBUaGF0JiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYW5kIEkgd29uJiMzOTt0IGJlIGZ1enppbmcgQ2VsbC4gVGhlIHJlbW92YWwgb2YgYHVuc2hhcmVfZmlsZXMoKWAgb2NjdXJzIGluIGBmcy9jb3JlZHVtcC5jYCB3aGljaCBpcyBnZW5lcmljLiBUaGUgY29tbWVudCBjaGFuZ2UgaW4gYGZzL2JpbmZtdF9lbGYuY2AgaXMgY29zbWV0aWMsIGFuZCBpcnJlbGV2YW50IHRvIHRoZSBtYWluIGNoYW5nZS4gVGhlICpvbmx5KiByZWxldmFudCBmdW5jdGlvbmFsIGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiBgdW5zaGFyZV9maWxlcygpYC4KCk5vdywgZG9lcyBpdCAqcmVhbGx5KiBkZXNlcnZlIGZ1enppbmc/IFRoZSBwcm9tcHQgc2F5cywgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi51c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJdCAqZG9lcyogbW9kaWZ5IGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXQgaXMgZXhlY3V0ZWQuIFNvLCB5ZXMsIHRoZSBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYHZmc19jb3JlZHVtcGAuIFRoZSBgQ09SRURVTVBgIGNvbmZpZyBzaG91bGQgYmUgZW5hYmxlZC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjay4gV2hhdCYjMzk7cyB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIGB1bnNoYXJlX2ZpbGVzKClgPyBUaGUgZnVuY3Rpb24gdW5zaGFyZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gSWYgYSBwcm9jZXNzIGR1bXBzIGNvcmUsIHdoYXQgaGFwcGVucyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9ycyBhcmVuJiMzOTt0IHVuc2hhcmVkPyBDb3JlZHVtcCBzaG91bGRuJiMzOTt0IG1vZGlmeSB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIGRpcmVjdGx5LCBhdCBsZWFzdCBub3QgaW4gYW55IG9idmlvdXMgd2F5LiBXYWl0LCBkb2VzIGBkdW1wX2VtaXRgIHVzZSBhbnk/IE5vLCBpdCB3cml0ZXMgdG8gYGNwcm0tJmd0O2ZpbGVgLiBXaGF0IGFib3V0IHVzZXItbW9kZSBoZWxwZXJzPyBgZG9fY29yZWR1bXBgIGNhbiBwaXBlIHRoZSBjb3JlIGR1bXAgdG8gYSB1c2VyLW1vZGUgaGVscGVyLCBhbmQgdGhpcyB1c2VzIGBjYWxsX3VzZXJtb2RlaGVscGVyX3NldHVwYCBhbmQgYGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlY2AuIFN0aWxsLCB0aGVyZSBpcyBubyBtb2RpZmljYXRpb24gb2YgdGhlIGR1bXBpbmcgcHJvY2VzcyYjMzk7IGZpbGUgZGVzY3JpcHRvciB0YWJsZS4KClNvLCBpdCBzZWVtcyB0aGF0IGB1bnNoYXJlX2ZpbGVzKClgIHdhcyB0cnVseSBvbmx5IG5lZWRlZCBmb3IgQ2VsbCBTUFUsIHdoaWNoIGl0ZXJhdGVkIG92ZXIgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gVGhpcyByZW1vdmFsIGlzIGVzc2VudGlhbGx5IGEgY2xlYW4tdXAsIHdoaWNoIGlzIGdvb2QuIEJ1dCwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljLCB0aGUgcHJ1ZGVudCB0aGluZyB0byBkbyBpcyBtYXJrIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpKdXN0IG9uZSBmaW5hbCBxdWVzdGlvbjogSXMgdGhlcmUgYW55IG90aGVyIGFyY2hpdGVjdHVyZSB0aGF0IHJlbGllcyBvbiBgdW5zaGFyZV9maWxlcygpYCBkdXJpbmcgY29yZWR1bXA/IExldCYjMzk7cyB2ZXJpZnkgbm8gb3RoZXIgYXJjaGl0ZWN0dXJlIGltcGxlbWVudHMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgaXRlcmF0ZXMgb3ZlciB0aGUgZmlsZSBkZXNjcmlwdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTU5NT1jb25maWcgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFU1xuLS1cbmFyY2gvS2NvbmZpZy01OTktXHQgIGFyY2gtc3BlY2lmaWMgRUxGIG5vdGUgc2VjdGlvbiB0byBjb3JlIGZpbGVzLiBJdCBtdXN0IHByb3ZpZGUgdHdvXG5hcmNoL0tjb25maWc6NjAwOlx0ICBmdW5jdGlvbnM6IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCkgYW5kXG5hcmNoL0tjb25maWctNjAxLVx0ICBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoKSB3aGljaCBhcmUgaW52b2tlZCBieSB0aGUgRUxGIGNvcmVcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jPTE5NjY9aW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5NS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmM6MTk5NjppbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5Ny17XG4tLVxuZnMvYmluZm10X2VsZi5jPTE5OTA9c3RhdGljIGludCBlbGZfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4tLVxuZnMvYmluZm10X2VsZi5jLTIwMzItXHRcdC8qIEZvciB4ODYgeHN0YXRlICovXG5mcy9iaW5mbXRfZWxmLmM6MjAzMzpcdFx0c3ogJiM0Mzs9IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7XG5mcy9iaW5mbXRfZWxmLmMtMjAzNC1cbi0tXG5pbmNsdWRlL2xpbnV4L2VsZi5oPTY2PXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4tLVxuaW5jbHVkZS9saW51eC9lbGYuaC02OC0jaWZuZGVmIENPTkZJR19BUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTXG5pbmNsdWRlL2xpbnV4L2VsZi5oOjY5OnN0YXRpYyBpbmxpbmUgaW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZWxmLmgtNzAtc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZWxmLmgtNzEtI2Vsc2VcbmluY2x1ZGUvbGludXgvZWxmLmg6NzI6ZXh0ZXJuIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTtcbmluY2x1ZGUvbGludXgvZWxmLmgtNzMtZXh0ZXJuIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDExCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgeDg2IHhzdGF0ZSBhbmQgQ29yZSBEdW1wcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSB4ODYgeHN0YXRlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljYWxseSBpbmNsdWRlcyB0aGUgZnVuY3Rpb25zIGBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZWAgYW5kIGBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgc28gd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGNvcmUgZHVtcCBwcm9jZXNzLiYjMzQ7IEdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGRvaW5nIHRoYXQuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBpdGVyYXRlcyBvdmVyIGZpbGUgZGVzY3JpcHRvcnMgZHVyaW5nIHRoZSBjb3JlIGR1bXAgcHJvY2Vzcy4gVGhpcyB3b3VsZCBiZSBjcnVjaWFsIGluIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlIHhzdGF0ZSBkYXRhIGlzIGdldHRpbmcgd3JpdHRlbiBkaXJlY3RseSwgb3IgaW5kaXJlY3RseS4gVGhlIHdheSBpdCBoYW5kbGVzIGZpbGUgZGVzY3JpcHRvcnMgd291bGQgZGljdGF0ZSB0aGlzIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jPTE5NjY9aW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5NS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmM6MTk5NjppbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODEzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBDb3JlIER1bXAgTWV0YWRhdGEgaW4geDg2IEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyBvdXIgY29yZSBkdW1wcyBoYW5kbGUgZXh0ZW5kZWQgc3RhdGUgZGF0YS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCB2YXJpYWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQgaXRzIGZsb2F0aW5nLXBvaW50IHVuaXQgKEZQVSkgb3IgZXh0ZW5kZWQgc3RhdGUgKHhzdGF0ZSkgY29tcG9uZW50cywgd2hpY2ggYXJlIGNydWNpYWwgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHByb2Nlc3NvciBjb250ZXh0IGR1cmluZyBkZWJ1Z2dpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtdWNoIHNwYWNlIHdlIGFsbG9jYXRlIGZvciB0aGlzIGV4dHJhIGluZm9ybWF0aW9uLiBUaGlzIHdpbGwgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBjb3JlIGR1bXAgZmlsZXMsIGFuZCBob3cgbXVjaCBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgYW5hbHlzaXMgaW4gcG9zdC1tb3J0ZW0gZGVidWdnaW5nLiBLbm93aW5nIHRoaXMgY2FuIGhlbHAgd2hlbiBvcHRpbWl6aW5nIGNvcmUgZHVtcCBjcmVhdGlvbiwgb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIGxhcmdlIGNvcmUgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk5MDpcdFx0aWYgKChzaXplb2Yoc3RydWN0IHg4Nl94ZmVhdF9jb21wb25lbnQpICogbnVtX3JlY29yZHMpICE9IGVuLm5fZGVzY3N6KVxuMTk5MTpcdFx0XHRyZXR1cm4gMTtcbjE5OTI6XHRcbjE5OTM6XHRcdHJldHVybiAwO1xuMTk5NDpcdH1cbjE5OTU6XHRcbjE5OTY6XHRpbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbjE5OTc6XHR7XG4xOTk4Olx0XHRpbnQgc2l6ZTtcbjE5OTk6XHRcbjIwMDA6XHRcdGlmICghZnB1X3VzZXJfY2ZnLm1heF9mZWF0dXJlcylcbjIwMDE6XHRcdFx0cmV0dXJuIDA7XG4yMDAyOlx0XG4yMDAzOlx0XHQvKiAubm90ZSBoZWFkZXIgKi9cbjIwMDQ6XHRcdHNpemUgID0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7XG4yMDA1Olx0XHQvKiAgTmFtZSBwbHVzIGFsaWdubWVudCB0byA0IGJ5dGVzICovXG4yMDA2Olx0XHRzaXplICYjNDM7PSByb3VuZHVwKHNpemVvZihvd25lcl9uYW1lKSwgNCk7XG4yMDA3Olx0XHRzaXplICYjNDM7PSBnZXRfeHNhdmVfZGVzY19zaXplKCk7XG4yMDA4Olx0XG4yMDA5Olx0XHRyZXR1cm4gc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjYKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogNTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvcmUgRHVtcCBMb2dpYyBhbmQgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgbWVzcyBhcm91bmQgd2l0aCBpdGVyYXRpbmcgZmlsZSBkZXNjcmlwdG9ycywgaXQganVzdCBkdW1wcyBgeHN0YXRlYC4gVGhhdCBtZWFucyBgdW5zaGFyZV9maWxlcygpYCB3YXMgKm9ubHkqIG5lZWRlZCBmb3IgQ2VsbCBTUFUuIFJpZ2h0LCBzbyByZW1vdmluZyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHJpZ2h0LCBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gbXkgZm9jdXMgc3ltYm9scyBhcmUgc29saWQuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY29yZWR1bXBzLiBBIHF1aWNrIGNoZWNrIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIHNwZWNpZmljIG9yIGJldHRlciBmdW5jdGlvbiB0byB0YXJnZXQuLi5ub3BlLCBgZG9fY29yZWR1bXBgIGlzIHN0YXRpYywgc28gYHZmc19jb3JlZHVtcGAgaXMgdGhlIGV4cG9ydGVkIG9uZSBhbmQgdGhlIGJlc3Qgc3ltYm9sLgoKQW5kIHRoZSBjb25maWcsIGBDT1JFRFVNUGAsIHllcyBpdCYjMzk7cyBqdXN0IGBDT1JFRFVNUGAuIE5vIG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kIHRoZXJlLgoKUmlnaHQsIGxldCYjMzk7cyByZXZpZXcgdGhlICYjMzQ7d29ydGggZnV6emluZyYjMzQ7IGNyaXRlcmlhIGFnYWluLiBPa2F5LCBzbyB0aGUgY2hhbmdlIGlzIGluIGBmcy9jb3JlZHVtcC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gUUVNVS4gQW5kIHRoZSByZW1vdmFsIG9mIGB1bnNoYXJlX2ZpbGVzKClgICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdywgd2hpY2ggc2hvdWxkIG1ha2UgaXQgd29ydGh5IG9mIGZ1enppbmcuCgpXYWl0LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBDb3VsZCB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgcmVtb3ZhbCBiZSBjb25zaWRlcmVkIGEgZGVjb3JhdGl2ZSBjaGFuZ2UsIG9yIHNvbWV0aGluZyB0aGF0IGRvZXNuJiMzOTt0ICpmdW5jdGlvbmFsbHkqIGFsdGVyIGV4ZWN1dGlvbj8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBgdW5zaGFyZV9maWxlcygpYCBhbGxvY2F0ZXMgYSBuZXcgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIGlmIGl0JiMzOTtzIHNoYXJlZC4gUmVtb3ZpbmcgaXQgbWVhbnMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSAqcmVtYWlucyogc2hhcmVkLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT1JFRFVNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQsIHdoaWNoIGlzIG9ic29sZXRlIGFuZCB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBIb3dldmVyLCBpdCBhbHNvIHJlbW92ZXMgdGhlIGB1bnNoYXJlX2ZpbGVzKClgIGNhbGwgZnJvbSB0aGUgZ2VuZXJpYyBgZG9fY29yZWR1bXAoKWAgZnVuY3Rpb24gaW4gYGZzL2NvcmVkdW1wLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgaG93IGZpbGUgZGVzY3JpcHRvciB0YWJsZXMgYXJlIGhhbmRsZWQgZHVyaW5nIGEgY29yZWR1bXAgKHRoZXkgYXJlIG5vIGxvbmdlciB1bnNoYXJlZCBpZiBzaGFyZWQgdmlhIENMT05FX0ZJTEVTKS4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGluIFFFTVUgYW5kIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgd2hlbiBkdW1waW5nIGNvcmUgb2YgcHJvY2Vzc2VzIHdpdGggc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVuIGR1bXBpbmcgY29yZSBvZiBwcm9jZXNzZXMgd2l0aCBzaGFyZWQgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTVlNmYzMTEzZjY1Yjk1NmI0YWIwOTkxNjA3Y2IyYjg0NjZiMmJkYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE2OjIxOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTYwLDcgJiM0MzsxNjAsNiBAQCBjb25maWcgUFBDCiAJc2VsZWN0IEFSQ0hfSEFTX1VCU0FOCiAJc2VsZWN0IEFSQ0hfSEFTX1ZEU09fQVJDSF9EQVRBCiAJc2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCi0Jc2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFCiAJc2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSwogCXNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRQlpZiBQUENfUkFESVhfTU1VCiAJc2VsZWN0IEFSQ0hfTUlHSFRfSEFWRV9QQ19QQVJQT1JUCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYmI0Yjk0NDQ0ZDNlOC4uNWRjOGM0OTIzZWIxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTIzLDEyICYjNDM7MTIzLDYgQEAgZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKIAkoMHg3ZmYgJmd0OyZndDsgKFBBR0VfU0hJRlQgLSAxMikpIDogXAogCSgweDNmZmZmICZndDsmZ3Q7IChQQUdFX1NISUZUIC0gMTIpKSkKIAotI2lmZGVmIENPTkZJR19TUFVfQkFTRQotLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFLiBOb3RlIG5hbWUgaXMgJiMzNDtTUFUvJmx0O2ZkJmd0Oy8mbHQ7ZmlsZW5hbWUmZ3Q7JiMzNDsuICovCi0jZGVmaW5lIE5UX1NQVQkJMQotCi0jZW5kaWYgLyogQ09ORklHX1NQVV9CQVNFICovCi0KICNpZmRlZiBDT05GSUdfUFBDNjQKIAogI2RlZmluZSBnZXRfY2FjaGVfZ2VvbWV0cnkobGV2ZWwpIFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaAppbmRleCA5NmFkNDUxMGM4OTU0Li43MTUyMjg1YjYyNjhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oCkBAIC0yMTAsMTUgJiM0MzsyMTAsMTIgQEAgZXh0ZXJuIGxvbmcgc3B1X3N5c19jYWxsYmFjayhzdHJ1Y3Qgc3B1X3N5c2NhbGxfYmxvY2sgKnMpOwogCiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqLwogc3RydWN0IGZpbGU7Ci1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zOwogc3RydWN0IHNwdWZzX2NhbGxzIHsKIAlsb25nICgqY3JlYXRlX3RocmVhZCkoY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsCiAJCQkJCXVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBtb2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqbmVpZ2hib3IpOwogCWxvbmcgKCpzcHVfcnVuKShzdHJ1Y3QgZmlsZSAqZmlscCwgX191MzIgX191c2VyICp1bnBjLAogCQkJCQkJX191MzIgX191c2VyICp1c3RhdHVzKTsKLQlpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKSh2b2lkKTsKLQlpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAJdm9pZCAoKm5vdGlmeV9zcHVzX2FjdGl2ZSkodm9pZCk7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwppbmRleCBkYjY1YmZjZDFlNzQ5Li42YmQyNjgxNWMzMzEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAgY29uZmlnIFNQVV9GUwogCXRyaXN0YXRlICYjMzQ7U1BVIGZpbGUgc3lzdGVtJiMzNDsKIAlkZWZhdWx0IG0KIAlkZXBlbmRzIG9uIFBQQ19DRUxMCi0JZGVwZW5kcyBvbiBDT1JFRFVNUAogCXNlbGVjdCBTUFVfQkFTRQogCWhlbHAKIAkgIFRoZSBTUFUgZmlsZSBzeXN0ZW0gaXMgdXNlZCB0byBhY2Nlc3MgU3luZXJnaXN0aWMgUHJvY2Vzc2luZwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jCmluZGV4IDAwMDg5NGUwN2IwMjcuLjhiZTgxMjA3ZTg4NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMKQEAgLTg4LDI2ICYjNDM7ODgsNiBAQCBTWVNDQUxMX0RFRklORTMoc3B1X3J1bixpbnQsIGZkLCBfX3UzMiBfX3VzZXIgKiwgdW5wYywgX191MzIgX191c2VyICosIHVzdGF0dXMpCiAJcmV0dXJuIGNhbGxzLSZndDtzcHVfcnVuKGZkX2ZpbGUoYXJnKSwgdW5wYywgdXN0YXR1cyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ09SRURVTVAKLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKQotewotCUNMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTsKLQlpZiAoIWNhbGxzKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBjYWxscy0mZ3Q7Y29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpOwotfQotCi1pbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JQ0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpOwotCWlmICghY2FsbHMpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGNhbGxzLSZndDtjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKTsKLX0KLSNlbmRpZgotCiB2b2lkIG5vdGlmeV9zcHVzX2FjdGl2ZSh2b2lkKQogewogCXN0cnVjdCBzcHVmc19jYWxscyAqY2FsbHM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUKaW5kZXggNTJlNGM4MGVjOGQwMy4uNjAzMTlkNGZmMjVhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZQpAQCAtNCw3ICYjNDM7NCw2IEBAIG9iai0kKENPTkZJR19TUFVfRlMpICYjNDM7PSBzcHVmcy5vCiBzcHVmcy15ICYjNDM7PSBpbm9kZS5vIGZpbGUubyBjb250ZXh0Lm8gc3lzY2FsbHMubwogc3B1ZnMteSAmIzQzOz0gc2NoZWQubyBiYWNraW5nX29wcy5vIGh3X29wcy5vIHJ1bi5vIGdhbmcubwogc3B1ZnMteSAmIzQzOz0gc3dpdGNoLm8gZmF1bHQubyBsc2NzYV9hbGxvYy5vCi1zcHVmcy0kKENPTkZJR19DT1JFRFVNUCkgJiM0Mzs9IGNvcmVkdW1wLm8KIAogIyBtYWdpYyBmb3IgdGhlIHRyYWNlIGV2ZW50cwogQ0ZMQUdTX3NjaGVkLm8gOj0gLUkkKHNyYykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWVlN2Q4YjdkZjAuLjAwMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwxODMgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCi0vKgotICogU1BVIGNvcmUgZHVtcCBjb2RlCi0gKgotICogKEMpIENvcHlyaWdodCAyMDA2IElCTSBDb3JwLgotICoKLSAqIEF1dGhvcjogRHdheW5lIEdyYW50IE1jQ29ubmVsbCAmbHQ7ZGVjaW1hbEB1cy5pYm0uY29tJmd0OwotICovCi0KLSNpbmNsdWRlICZsdDtsaW51eC9lbGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZmR0YWJsZS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2NhbGxzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvY29yZWR1bXAuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRzLmgmZ3Q7Ci0KLSNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7Ci0KLSNpbmNsdWRlICYjMzQ7c3B1ZnMuaCYjMzQ7Ci0KLXN0YXRpYyBpbnQgc3B1ZnNfY3R4X25vdGVfc2l6ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGRmZCkKLXsKLQlpbnQgaSwgc3osIHRvdGFsID0gMDsKLQljaGFyICpuYW1lOwotCWNoYXIgZnVsbG5hbWVbODBdOwotCi0JZm9yIChpID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lICE9IE5VTEw7IGkmIzQzOyYjNDM7KSB7Ci0JCW5hbWUgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWU7Ci0JCXN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplOwotCi0JCXNwcmludGYoZnVsbG5hbWUsICYjMzQ7U1BVLyVkLyVzJiMzNDssIGRmZCwgbmFtZSk7Ci0KLQkJdG90YWwgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpOwotCQl0b3RhbCAmIzQzOz0gcm91bmR1cChzdHJsZW4oZnVsbG5hbWUpICYjNDM7IDEsIDQpOwotCQl0b3RhbCAmIzQzOz0gcm91bmR1cChzeiwgNCk7Ci0JfQotCi0JcmV0dXJuIHRvdGFsOwotfQotCi1zdGF0aWMgaW50IG1hdGNoX2NvbnRleHQoY29uc3Qgdm9pZCAqdiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZkKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OwotCWlmIChmaWxlLSZndDtmX29wICE9ICZhbXA7c3B1ZnNfY29udGV4dF9mb3BzKQotCQlyZXR1cm4gMDsKLQljdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLSZndDtpX2N0eDsKLQlpZiAoY3R4LSZndDtmbGFncyAmYW1wOyBTUFVfQ1JFQVRFX05PU0NIRUQpCi0JCXJldHVybiAwOwotCXJldHVybiBmZCAmIzQzOyAxOwotfQotCi0vKgotICogVGhlIGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5vdGVzIGZvciBDZWxsIGFyZSB2YXJpb3VzCi0gKiBjb250ZXh0IGZpbGVzIGluIHRoZSBzcHUgY29udGV4dC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBhbmQgc2VlcwotICogaWYgdGhleSBhcmUgYSBkaXJlY3RvcnkgaW4gc3B1ZnMuICBJbiB0aGF0IGNhc2Ugd2UgdXNlIHNwdWZzCi0gKiBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgdGhlbSB3aXRob3V0IG5lZWRpbmcgdG8gYWN0dWFsbHkKLSAqIG9wZW4gdGhlIGZpbGVzLgotICovCi0vKgotICogZGVzY3JpcHRvciB0YWJsZSBpcyBub3Qgc2hhcmVkLCBzbyBmaWxlcyBjYW4mIzM5O3QgY2hhbmdlIG9yIGdvIGF3YXkuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmNvcmVkdW1wX25leHRfY29udGV4dChpbnQgKmZkKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4ID0gTlVMTDsKLQlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlpbnQgbiA9IGl0ZXJhdGVfZmQoY3VycmVudC0mZ3Q7ZmlsZXMsICpmZCwgbWF0Y2hfY29udGV4dCwgTlVMTCk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gTlVMTDsKLQkqZmQgPSBuIC0gMTsKLQotCWZpbGUgPSBmZ2V0X3JhdygqZmQpOwotCWlmIChmaWxlKSB7Ci0JCWN0eCA9IFNQVUZTX0koZmlsZV9pbm9kZShmaWxlKSktJmd0O2lfY3R4OwotCQlnZXRfc3B1X2NvbnRleHQoY3R4KTsKLQkJZnB1dChmaWxlKTsKLQl9Ci0KLQlyZXR1cm4gY3R4OwotfQotCi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OwotCWludCBzaXplID0gMCwgcmMsIGZkOwotCi0JZmQgPSAwOwotCXdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KCZhbXA7ZmQpKSAhPSBOVUxMKSB7Ci0JCXJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTsKLQkJaWYgKHJjKSB7Ci0JCQlwdXRfc3B1X2NvbnRleHQoY3R4KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmMgPSBzcHVmc19jdHhfbm90ZV9zaXplKGN0eCwgZmQpOwotCQlzcHVfcmVsZWFzZV9zYXZlZChjdHgpOwotCQlpZiAocmMgJmx0OyAwKSB7Ci0JCQlwdXRfc3B1X2NvbnRleHQoY3R4KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc2l6ZSAmIzQzOz0gcmM7Ci0KLQkJLyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqLwotCQlmZCYjNDM7JiM0Mzs7Ci0JCXB1dF9zcHVfY29udGV4dChjdHgpOwotCX0KLQotCXJldHVybiBzaXplOwotfQotCi1zdGF0aWMgaW50IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGksCi0JCQkJICBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLCBpbnQgZGZkKQotewotCXNpemVfdCBzeiA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uc2l6ZTsKLQljaGFyIGZ1bGxuYW1lWzgwXTsKLQlzdHJ1Y3QgZWxmX25vdGUgZW47Ci0JaW50IHJldDsKLQotCXNwcmludGYoZnVsbG5hbWUsICYjMzQ7U1BVLyVkLyVzJiMzNDssIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTsKLQllbi5uX25hbWVzeiA9IHN0cmxlbihmdWxsbmFtZSkgJiM0MzsgMTsKLQllbi5uX2Rlc2NzeiA9IHN6OwotCWVuLm5fdHlwZSA9IE5UX1NQVTsKLQotCWlmICghZHVtcF9lbWl0KGNwcm0sICZhbXA7ZW4sIHNpemVvZihlbikpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoIWR1bXBfZW1pdChjcHJtLCBmdWxsbmFtZSwgZW4ubl9uYW1lc3opKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoIWR1bXBfYWxpZ24oY3BybSwgNCkpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcCkgewotCQlyZXQgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXAoY3R4LCBjcHJtKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwotCX0gZWxzZSB7Ci0JCWNoYXIgYnVmWzMyXTsKLQotCQlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OzB4JS4xNmxseCYjMzQ7LAotCQkJICAgICAgIHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZ2V0KGN0eCkpOwotCQlpZiAocmV0ICZndDs9IHNpemVvZihidWYpKQotCQkJcmV0dXJuIHNpemVvZihidWYpOwotCi0JCS8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqLwotCQlpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCAmIzQzOyAxKSkKLQkJCXJldHVybiAtRUlPOwotCX0KLQotCWR1bXBfc2tpcF90byhjcHJtLCByb3VuZHVwKGNwcm0tJmd0O3BvcyAtIHJldCAmIzQzOyBzeiwgNCkpOwotCXJldHVybiAwOwotfQotCi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eDsKLQlpbnQgZmQsIGosIHJjOwotCi0JZmQgPSAwOwotCXdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KCZhbXA7ZmQpKSAhPSBOVUxMKSB7Ci0JCXJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCi0JCWZvciAoaiA9IDA7IHNwdWZzX2NvcmVkdW1wX3JlYWRbal0ubmFtZSAhPSBOVUxMOyBqJiM0MzsmIzQzOykgewotCQkJcmMgPSBzcHVmc19hcmNoX3dyaXRlX25vdGUoY3R4LCBqLCBjcHJtLCBmZCk7Ci0JCQlpZiAocmMpIHsKLQkJCQlzcHVfcmVsZWFzZV9zYXZlZChjdHgpOwotCQkJCXJldHVybiByYzsKLQkJCX0KLQkJfQotCi0JCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7Ci0KLQkJLyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqLwotCQlmZCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCBkZTc0OTQ3NDhmZWNkLi45OGM0N2JhZmFmNjc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTksNyAmIzQzOzksNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgJmx0O2xpbnV4L2NvcmVkdW1wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb2N0bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwpAQCAtMTMwLDE0ICYjNDM7MTI5LDYgQEAgc3RhdGljIHNzaXplX3Qgc3B1ZnNfYXR0cl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19kdW1wX2VtaXQoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdm9pZCAqYnVmLAotCQlzaXplX3Qgc2l6ZSkKLXsKLQlpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHNpemUpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gc2l6ZTsKLX0KLQogI2RlZmluZSBERUZJTkVfU1BVRlNfU0lNUExFX0FUVFJJQlVURShfX2ZvcHMsIF9fZ2V0LCBfX3NldCwgX19mbXQpCVwKIHN0YXRpYyBpbnQgX19mb3BzICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQlcCiB7CQkJCQkJCQkJXApAQCAtMTgwLDEyICYjNDM7MTcxLDYgQEAgc3B1ZnNfbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zcHVmc19tZW1fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC0mZ3Q7b3BzLSZndDtnZXRfbHMoY3R4KSwgTFNfU0laRSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90CiBzcHVmc19tZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCkBAIC00NjYsMTMgJiM0Mzs0NTEsNiBAQCBzcHVmc19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zcHVmc19yZWdzX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtJmd0O2NzYS5sc2NzYS0mZ3Q7Z3BycywKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2EubHNjc2EtJmd0O2dwcnMpKTsKLX0KLQogc3RhdGljIHNzaXplX3QKIHNwdWZzX3JlZ3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQpAQCAtNTIzLDEzICYjNDM7NTAxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfcmVnc19mb3BzID0gewogCS5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci1zcHVmc19mcGNyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLmxzY3NhLSZndDtmcGNyLAotCQkJICAgICAgIHNpemVvZihjdHgtJmd0O2NzYS5sc2NzYS0mZ3Q7ZnBjcikpOwotfQotCiBzdGF0aWMgc3NpemVfdAogc3B1ZnNfZnBjcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKIAkJc2l6ZV90IHNpemUsIGxvZmZfdCAqIHBvcykKQEAgLTk1MywxNSAmIzQzOzkyNCw2IEBAIHNwdWZzX3NpZ25hbDFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCWlmICghY3R4LSZndDtjc2Euc3B1X2NobmxjbnRfUldbM10pCi0JCXJldHVybiAwOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtjdHgtJmd0O2NzYS5zcHVfY2hubGRhdGFfUldbM10sCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1szXSkpOwotfQotCiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDFfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBsZW4pCiB7CkBAIC0xMDg2LDE1ICYjNDM7MTA0OCw2IEBAIHNwdWZzX3NpZ25hbDJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMl9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCWlmICghY3R4LSZndDtjc2Euc3B1X2NobmxjbnRfUldbNF0pCi0JCXJldHVybiAwOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtjdHgtJmd0O2NzYS5zcHVfY2hubGRhdGFfUldbNF0sCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1s0XSkpOwotfQotCiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDJfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBsZW4pCiB7CkBAIC0xOTI0LDE1ICYjNDM7MTg3Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NhcHNfZm9wcyA9IHsKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfbWJveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCEoY3R4LSZndDtjc2EucHJvYi5tYl9zdGF0X1IgJmFtcDsgMHgwMDAwZmYpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2EucHJvYi5wdV9tYl9SLAotCQkJICAgICAgIHNpemVvZihjdHgtJmd0O2NzYS5wcm9iLnB1X21iX1IpKTsKLX0KLQogc3RhdGljIHNzaXplX3Qgc3B1ZnNfbWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0xOTYyLDE1ICYjNDM7MTkwNiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX21ib3hfaW5mb19mb3BzID0gewogCS5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNwdWZzX2lib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCWlmICghKGN0eC0mZ3Q7Y3NhLnByb2IubWJfc3RhdF9SICZhbXA7IDB4ZmYwMDAwKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnByaXYyLnB1aW50X21iX1IsCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnByaXYyLnB1aW50X21iX1IpKTsKLX0KLQogc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0yMDA1LDEzICYjNDM7MTk0MCw2IEBAIHN0YXRpYyBzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2NudChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCkKIAlyZXR1cm4gKDQgLSAoKGN0eC0mZ3Q7Y3NhLnByb2IubWJfc3RhdF9SICZhbXA7IDB4MDBmZjAwKSAmZ3Q7Jmd0OyA4KSkgKiBzaXplb2YodTMyKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnNwdV9tYWlsYm94X2RhdGEsCi0JCQlzcHVmc193Ym94X2luZm9fY250KGN0eCkpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTIwNTksMTUgJiM0MzsxOTg3LDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X2RtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAogCX0KIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlzdHJ1Y3Qgc3B1X2RtYV9pbmZvIGluZm87Ci0KLQlzcHVmc19nZXRfZG1hX2luZm8oY3R4LCAmYW1wO2luZm8pOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtpbmZvLCBzaXplb2YoaW5mbykpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0yMTEyLDE1ICYjNDM7MjAzMSw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAogCX0KIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfcHJveHlkbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXN0cnVjdCBzcHVfcHJveHlkbWFfaW5mbyBpbmZvOwotCi0Jc3B1ZnNfZ2V0X3Byb3h5ZG1hX2luZm8oY3R4LCAmYW1wO2luZm8pOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtpbmZvLCBzaXplb2YoaW5mbykpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0yNTgwLDI3ICYjNDM7MjQ5MCwzIEBAIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdID0gewogCXsgJiMzNDsuY3R4JiMzNDssICZhbXA7c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sCiAJe30sCiB9OwotCi1jb25zdCBzdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXSA9IHsKLQl7ICYjMzQ7cmVncyYjMzQ7LCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sCi0JeyAmIzM0O2ZwY3ImIzM0Oywgc3B1ZnNfZnBjcl9kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjgpIH0sCi0JeyAmIzM0O2xzbHImIzM0OywgTlVMTCwgc3B1ZnNfbHNscl9nZXQsIDE5IH0sCi0JeyAmIzM0O2RlY3ImIzM0OywgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sCi0JeyAmIzM0O2RlY3Jfc3RhdHVzJiMzNDssIE5VTEwsIHNwdWZzX2RlY3Jfc3RhdHVzX2dldCwgMTkgfSwKLQl7ICYjMzQ7bWVtJiMzNDssIHNwdWZzX21lbV9kdW1wLCBOVUxMLCBMU19TSVpFLCB9LAotCXsgJiMzNDtzaWduYWwxJiMzNDssIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSwKLQl7ICYjMzQ7c2lnbmFsMV90eXBlJiMzNDssIE5VTEwsIHNwdWZzX3NpZ25hbDFfdHlwZV9nZXQsIDE5IH0sCi0JeyAmIzM0O3NpZ25hbDImIzM0Oywgc3B1ZnNfc2lnbmFsMl9kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDtzaWduYWwyX3R5cGUmIzM0OywgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZXZlbnRfbWFzayYjMzQ7LCBOVUxMLCBzcHVmc19ldmVudF9tYXNrX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZXZlbnRfc3RhdHVzJiMzNDssIE5VTEwsIHNwdWZzX2V2ZW50X3N0YXR1c19nZXQsIDE5IH0sCi0JeyAmIzM0O21ib3hfaW5mbyYjMzQ7LCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSwKLQl7ICYjMzQ7aWJveF9pbmZvJiMzNDssIHNwdWZzX2lib3hfaW5mb19kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDt3Ym94X2luZm8mIzM0Oywgc3B1ZnNfd2JveF9pbmZvX2R1bXAsIE5VTEwsIDQgKiBzaXplb2YodTMyKX0sCi0JeyAmIzM0O2RtYV9pbmZvJiMzNDssIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sCi0JeyAmIzM0O3Byb3h5ZG1hX2luZm8mIzM0Oywgc3B1ZnNfcHJveHlkbWFfaW5mb19kdW1wLAotCQkJICAgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcHJveHlkbWFfaW5mbyl9LAotCXsgJiMzNDtvYmplY3QtaWQmIzM0OywgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSwKLQl7ICYjMzQ7bnBjJiMzNDssIE5VTEwsIHNwdWZzX25wY19nZXQsIDE5IH0sCi0JeyBOVUxMIH0sCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaAppbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaApAQCAtMjMyLDEzICYjNDM7MjMyLDkgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdOwogCiAvKiBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiAqLwogZXh0ZXJuIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxsczsKLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7CiBsb25nIHNwdWZzX3J1bl9zcHUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHUzMiAqbnBjLCB1MzIgKnN0YXR1cyk7CiBsb25nIHNwdWZzX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGF0aCAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci0vKiBFTEYgY29yZWR1bXAgY2FsbGJhY2tzIGZvciB3cml0aW5nIFNQVSBFTEYgbm90ZXMgKi8KLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTsKLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NvbnRleHRfZm9wczsKIApAQCAtMzM1LDE0ICYjNDM7MzMxLDYgQEAgdm9pZCBzcHVmc19zdG9wX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSwgaW50IGlycSk7CiB2b2lkIHNwdWZzX21mY19jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUpOwogdm9pZCBzcHVmc19kbWFfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgdHlwZSk7CiAKLXN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgewotCWNoYXIgKm5hbWU7Ci0Jc3NpemVfdCAoKmR1bXApKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTsKLQl1NjQgKCpnZXQpKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KTsKLQlzaXplX3Qgc2l6ZTsKLX07Ci1leHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107Ci0KIGV4dGVybiBpbnQgc3B1X2luaXRfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7CiBleHRlcm4gdm9pZCBzcHVfZmluaV9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKIGV4dGVybiBpbnQgc3B1X3NhdmUoc3RydWN0IHNwdV9zdGF0ZSAqcHJldiwgc3RydWN0IHNwdSAqc3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKaW5kZXggZWE0YmExYjZjZTZhOS4uYjZkZTM3MTUwZTczNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKQEAgLTgyLDggJiM0Mzs4Miw0IEBAIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxscyA9IHsKIAkuc3B1X3J1biA9IGRvX3NwdV9ydW4sCiAJLm5vdGlmeV9zcHVzX2FjdGl2ZSA9IGRvX25vdGlmeV9zcHVzX2FjdGl2ZSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLSNpZmRlZiBDT05GSUdfQ09SRURVTVAKLQkuY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSA9IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUsCi0JLmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsCi0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggMDZkMGRmMTA1MzgyMy4uZGIzMmJiNDBhODY3MCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMjAyOSw3ICYjNDM7MjAyOSw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQogCXsKIAkJc2l6ZV90IHN6ID0gaW5mby5zaXplOwogCi0JCS8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovCiYjNDM7CQkvKiBGb3IgeDg2IHhzdGF0ZSAqLwogCQlzeiAmIzQzOz0gZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTsKIAogCQlwaGRyNG5vdGUgPSBrbWFsbG9jX29iaigqcGhkcjRub3RlKTsKQEAgLTIwOTMsNyAmIzQzOzIwOTMsNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKIAlpZiAoIXdyaXRlX25vdGVfaW5mbygmYW1wO2luZm8sIGNwcm0pKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAotCS8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovCiYjNDM7CS8qIEZvciB4ODYgeHN0YXRlICovCiAJaWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKSkKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jCmluZGV4IGFjM2NkNzQ4MDhjNjQuLmE0OWYyZmQ2YmUyODAgMTAwNjQ0Ci0tLSBhL2ZzL2NvcmVkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29yZWR1bXAuYwpAQCAtMTExOCwxMSAmIzQzOzExMTgsNiBAQCBzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAlpZiAoY24tJmd0O21hc2sgJmFtcDsgQ09SRURVTVBfUkVKRUNUKQogCQlyZXR1cm47CiAKLQkvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovCi0JLyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqLwotCWlmICh1bnNoYXJlX2ZpbGVzKCkpCi0JCXJldHVybjsKLQogCWlmICgoY24tJmd0O21hc2sgJmFtcDsgQ09SRURVTVBfS0VSTkVMKSAmYW1wOyZhbXA7ICFjb3JlZHVtcF93cml0ZShjbiwgY3BybSwgYmluZm10KSkKIAkJcmV0dXJuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDAzCgkJCQkJCQlvdXRwdXQ6IDkyCgkJCQkJCQl0aG91Z2h0czogNzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFNQVSBDb3JlZHVtcCBSZW1vdmFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCBzZXJpZXMgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCAqcmVtb3ZhbCogb2YgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBTUFUgY29yZWR1bXAgc3VwcG9ydCBmcm9tIHRoZSBQb3dlclBDIENlbGwgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhIGNsZWFuLXVwLCBub3RoaW5nIG1vcmUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biBteSByZWFzb25pbmc6IHRoZSBwYXRjaCBpcyBkZWxldGluZyB0aGUgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jYCBmaWxlIGFuZCB0aGVuIHJlbW92aW5nIGFzc29jaWF0ZWQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGZyb20gYSB3aG9sZSBidW5jaCBvZiBvdGhlciBmaWxlczogYHNwdWZzLmhgLCBgZmlsZS5jYCwgYHN5c2NhbGxzLmNgLCBgc3B1X3N5c2NhbGxzLmNgLCBgc3B1LmhgLCBhbmQgYGVsZi5oYC4gVGhlcmUmIzM5O3MgYWxzbyBhIHJlbW92YWwgb2YgYSBjYWxsIHRvIGB1bnNoYXJlX2ZpbGVzKClgIGluIGBmcy9jb3JlZHVtcC5jYCB3aGljaCB3YXMgc3BlY2lmaWNhbGx5IGZvciB0aGF0IENlbGwgU1BVIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkuCgpJbXBvcnRhbnRseSwgKm5vdGhpbmcgbmV3KiBpcyBiZWluZyBhZGRlZC4gVGhlcmUmIzM5O3Mgbm8gbmV3IGNvZGUgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mbyBsZWFrcy4gQW5kIHRoZSBjb3JlZHVtcCBub3RlcyB3cml0aW5nLCBub3cgZ29uZSwgbWVhbnMgbGVzcyBkYXRhIGJlaW5nIHdyaXR0ZW4gdG8gY29yZWR1bXBzLCB3aGljaCBmdXJ0aGVyIGVsaW1pbmF0ZXMgYW55IHBvdGVudGlhbCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtpbmcuCgpUbyBzb2xpZGlmeSBteSB0aGlua2luZywgSSYjMzk7dmUgY2hlY2tlZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSByZW1vdmFsczoKCiogICBJdCByZW1vdmVzIGBzZWxlY3QgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFUyBpZiBTUFVfQkFTRWAgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4KKiAgIEl0IHJlbW92ZXMgYE5UX1NQVWAgZnJvbSBgZWxmLmhgCiogICBJdCByZW1vdmVzIGBjb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlYCBmcm9tIGBzcHVmc19jYWxsc2AgaW4gYHNwdS5oYAoqICAgSXQgcmVtb3ZlcyBgZGVwZW5kcyBvbiBDT1JFRFVNUGAgZnJvbSBgU1BVX0ZTYCBpbiBgS2NvbmZpZ2AKKiAgIEl0IHJlbW92ZXMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAgZnJvbSBgc3B1X3N5c2NhbGxzLmNgCiogICBJdCByZW1vdmVzIGBjb3JlZHVtcC5vYCBmcm9tIGBNYWtlZmlsZWAKKiAgIEl0IGRlbGV0ZXMgYGNvcmVkdW1wLmNgCiogICBJdCByZW1vdmVzIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb3JlZHVtcCBvcGVyYXRpb25zIGZyb20gYGZpbGUuY2AuCiogICBJdCByZW1vdmVzIGNvcmVkdW1wIHJlbGF0ZWQgZGVjbGFyYXRpb25zIGZyb20gYHNwdWZzLmhgLgoqICAgSXQgcmVtb3ZlcyBjb3JlZHVtcCBjYWxsYmFja3MgZnJvbSBgc3lzY2FsbHMuY2AuCiogICBJdCB1cGRhdGVzIGNvbW1lbnRzIGluIGBiaW5mbXRfZWxmLmNgCiogICBJdCByZW1vdmVzIGB1bnNoYXJlX2ZpbGVzKClgIGZyb20gYGNvcmVkdW1wLmNgLgoKQWdhaW4sIHRoZSBjb3JlIHBvaW50IGlzIHRoYXQgdGhpcyBpcyBhICpwdXJlbHkqIGEgcmVtb3ZhbCBwYXRjaC4gVGhlcmUgYXJlIG5vIG5ldyBmZWF0dXJlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIG5ldyBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBBbGwgdGhpcyBwYXRjaCBkb2VzIGlzIGNsZWFuIHVwIG9sZCwgdW51c2VkIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkgZm9yIFNQVS4KClNvLCBzdW1taW5nIGl0IHVwOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gdG8gZGVkaWNhdGUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdG8gdGhpczsgdGhlcmUgaXMgbm8gbmV3IGNvZGUgdG8gYXNzZXNzLiBJdCYjMzk7cyBhIHNpbXBsZSwgc2FmZSByZW1vdmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwdXJlbHkgcmVtb3ZlcyB0aGUgU1BVIGNvcmVkdW1wIHN1cHBvcnQgZnJvbSB0aGUgUG93ZXJQQyBDZWxsIGFyY2hpdGVjdHVyZS4gTm8gbmV3IGNvZGUgaXMgYWRkZWQsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMTozOS42MjE5OTU4OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3NDM0MzMzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09SRURVTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwdXJlbHkgcmVtb3ZlcyB0aGUgU1BVIGNvcmVkdW1wIHN1cHBvcnQgZnJvbSB0aGUgUG93ZXJQQyBDZWxsIGFyY2hpdGVjdHVyZS4gTm8gbmV3IGNvZGUgaXMgYWRkZWQsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIHdoZW4gZHVtcGluZyBjb3JlIG9mIHByb2Nlc3NlcyB3aXRoIHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMTozOS42MjIwMDAwNTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzM5MzE5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NWU2ZjMxMTNmNjViOTU2YjRhYjA5OTE2MDdjYjJiODQ2NmIyYmRhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE2OjIxOjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnXFxuKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcXG5AQCAtMTYwLDcgKzE2MCw2IEBAIGNvbmZpZyBQUENcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19WRFNPX0FSQ0hfREFUQVxcbiBcXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4tXFx0c2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFXFxuIFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4gXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFx0aWYgUFBDX1JBRElYX01NVVxcbiBcXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXFxuaW5kZXggYmI0Yjk0NDQ0ZDNlOC4uNWRjOGM0OTIzZWIxZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcXG5AQCAtMTIzLDEyICsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbiBcXHQoMHg3ZmYgXFx1MDAzZVxcdTAwM2UgKFBBR0VfU0hJRlQgLSAxMikpIDogXFxcXFxcbiBcXHQoMHgzZmZmZiBcXHUwMDNlXFx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkpXFxuIFxcbi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFXFxuLS8qIE5vdGVzIHVzZWQgaW4gRVRfQ09SRS4gTm90ZSBuYW1lIGlzIFxcXCJTUFUvXFx1MDAzY2ZkXFx1MDAzZS9cXHUwMDNjZmlsZW5hbWVcXHUwMDNlXFxcIi4gKi9cXG4tI2RlZmluZSBOVF9TUFVcXHRcXHQxXFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX1NQVV9CQVNFICovXFxuLVxcbiAjaWZkZWYgQ09ORklHX1BQQzY0XFxuIFxcbiAjZGVmaW5lIGdldF9jYWNoZV9nZW9tZXRyeShsZXZlbCkgXFxcXFxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcXG5pbmRleCA5NmFkNDUxMGM4OTU0Li43MTUyMjg1YjYyNjhmIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxcbkBAIC0yMTAsMTUgKzIxMCwxMiBAQCBleHRlcm4gbG9uZyBzcHVfc3lzX2NhbGxiYWNrKHN0cnVjdCBzcHVfc3lzY2FsbF9ibG9jayAqcyk7XFxuIFxcbiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqL1xcbiBzdHJ1Y3QgZmlsZTtcXG4tc3RydWN0IGNvcmVkdW1wX3BhcmFtcztcXG4gc3RydWN0IHNwdWZzX2NhbGxzIHtcXG4gXFx0bG9uZyAoKmNyZWF0ZV90aHJlYWQpKGNvbnN0IGNoYXIgX191c2VyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKm5laWdoYm9yKTtcXG4gXFx0bG9uZyAoKnNwdV9ydW4pKHN0cnVjdCBmaWxlICpmaWxwLCBfX3UzMiBfX3VzZXIgKnVucGMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdF9fdTMyIF9fdXNlciAqdXN0YXR1cyk7XFxuLVxcdGludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUpKHZvaWQpO1xcbi1cXHRpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XFxuIFxcdHZvaWQgKCpub3RpZnlfc3B1c19hY3RpdmUpKHZvaWQpO1xcbiBcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xcbmluZGV4IGRiNjViZmNkMWU3NDkuLjZiZDI2ODE1YzMzMTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWdcXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xcbkBAIC0xMCw3ICsxMCw2IEBAIGNvbmZpZyBTUFVfRlNcXG4gXFx0dHJpc3RhdGUgXFxcIlNQVSBmaWxlIHN5c3RlbVxcXCJcXG4gXFx0ZGVmYXVsdCBtXFxuIFxcdGRlcGVuZHMgb24gUFBDX0NFTExcXG4tXFx0ZGVwZW5kcyBvbiBDT1JFRFVNUFxcbiBcXHRzZWxlY3QgU1BVX0JBU0VcXG4gXFx0aGVscFxcbiBcXHQgIFRoZSBTUFUgZmlsZSBzeXN0ZW0gaXMgdXNlZCB0byBhY2Nlc3MgU3luZXJnaXN0aWMgUHJvY2Vzc2luZ1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmNcXG5pbmRleCAwMDA4OTRlMDdiMDI3Li44YmU4MTIwN2U4ODZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xcbkBAIC04OCwyNiArODgsNiBAQCBTWVNDQUxMX0RFRklORTMoc3B1X3J1bixpbnQsIGZkLCBfX3UzMiBfX3VzZXIgKiwgdW5wYywgX191MzIgX191c2VyICosIHVzdGF0dXMpXFxuIFxcdHJldHVybiBjYWxscy1cXHUwMDNlc3B1X3J1bihmZF9maWxlKGFyZyksIHVucGMsIHVzdGF0dXMpO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXFxuLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbi17XFxuLVxcdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcXG4tXFx0aWYgKCFjYWxscylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4gY2FsbHMtXFx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTtcXG4tfVxcbi1cXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcXG4tXFx0aWYgKCFjYWxscylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4gY2FsbHMtXFx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4gdm9pZCBub3RpZnlfc3B1c19hY3RpdmUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3B1ZnNfY2FsbHMgKmNhbGxzO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcXG5pbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZVxcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZVxcbkBAIC00LDcgKzQsNiBAQCBvYmotJChDT05GSUdfU1BVX0ZTKSArPSBzcHVmcy5vXFxuIHNwdWZzLXkgKz0gaW5vZGUubyBmaWxlLm8gY29udGV4dC5vIHN5c2NhbGxzLm9cXG4gc3B1ZnMteSArPSBzY2hlZC5vIGJhY2tpbmdfb3BzLm8gaHdfb3BzLm8gcnVuLm8gZ2FuZy5vXFxuIHNwdWZzLXkgKz0gc3dpdGNoLm8gZmF1bHQubyBsc2NzYV9hbGxvYy5vXFxuLXNwdWZzLSQoQ09ORklHX0NPUkVEVU1QKSArPSBjb3JlZHVtcC5vXFxuIFxcbiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzXFxuIENGTEFHU19zY2hlZC5vIDo9IC1JJChzcmMpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAzMDFlZTdkOGI3ZGYwLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMTgzICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4tLypcXG4tICogU1BVIGNvcmUgZHVtcCBjb2RlXFxuLSAqXFxuLSAqIChDKSBDb3B5cmlnaHQgMjAwNiBJQk0gQ29ycC5cXG4tICpcXG4tICogQXV0aG9yOiBEd2F5bmUgR3JhbnQgTWNDb25uZWxsIFxcdTAwM2NkZWNpbWFsQHVzLmlibS5jb21cXHUwMDNlXFxuLSAqL1xcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmR0YWJsZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbi1cXG4tI2luY2x1ZGUgXFxcInNwdWZzLmhcXFwiXFxuLVxcbi1zdGF0aWMgaW50IHNwdWZzX2N0eF9ub3RlX3NpemUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBkZmQpXFxuLXtcXG4tXFx0aW50IGksIHN6LCB0b3RhbCA9IDA7XFxuLVxcdGNoYXIgKm5hbWU7XFxuLVxcdGNoYXIgZnVsbG5hbWVbODBdO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lICE9IE5VTEw7IGkrKykge1xcbi1cXHRcXHRuYW1lID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lO1xcbi1cXHRcXHRzeiA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uc2l6ZTtcXG4tXFxuLVxcdFxcdHNwcmludGYoZnVsbG5hbWUsIFxcXCJTUFUvJWQvJXNcXFwiLCBkZmQsIG5hbWUpO1xcbi1cXG4tXFx0XFx0dG90YWwgKz0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7XFxuLVxcdFxcdHRvdGFsICs9IHJvdW5kdXAoc3RybGVuKGZ1bGxuYW1lKSArIDEsIDQpO1xcbi1cXHRcXHR0b3RhbCArPSByb3VuZHVwKHN6LCA0KTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHRvdGFsO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IG1hdGNoX2NvbnRleHQoY29uc3Qgdm9pZCAqdiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZkKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xcbi1cXHRpZiAoZmlsZS1cXHUwMDNlZl9vcCAhPSBcXHUwMDI2c3B1ZnNfY29udGV4dF9mb3BzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cXHUwMDNlaV9jdHg7XFxuLVxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1BVX0NSRUFURV9OT1NDSEVEKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGZkICsgMTtcXG4tfVxcbi1cXG4tLypcXG4tICogVGhlIGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5vdGVzIGZvciBDZWxsIGFyZSB2YXJpb3VzXFxuLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0Llxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBhbmQgc2Vlc1xcbi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnNcXG4tICogaW50ZXJuYWwgZnVuY3Rpb25hbGl0eSB0byBkdW1wIHRoZW0gd2l0aG91dCBuZWVkaW5nIHRvIGFjdHVhbGx5XFxuLSAqIG9wZW4gdGhlIGZpbGVzLlxcbi0gKi9cXG4tLypcXG4tICogZGVzY3JpcHRvciB0YWJsZSBpcyBub3Qgc2hhcmVkLCBzbyBmaWxlcyBjYW4ndCBjaGFuZ2Ugb3IgZ28gYXdheS5cXG4tICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmNvcmVkdW1wX25leHRfY29udGV4dChpbnQgKmZkKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4ID0gTlVMTDtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuLVxcdGludCBuID0gaXRlcmF0ZV9mZChjdXJyZW50LVxcdTAwM2VmaWxlcywgKmZkLCBtYXRjaF9jb250ZXh0LCBOVUxMKTtcXG4tXFx0aWYgKCFuKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0KmZkID0gbiAtIDE7XFxuLVxcbi1cXHRmaWxlID0gZmdldF9yYXcoKmZkKTtcXG4tXFx0aWYgKGZpbGUpIHtcXG4tXFx0XFx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cXHUwMDNlaV9jdHg7XFxuLVxcdFxcdGdldF9zcHVfY29udGV4dChjdHgpO1xcbi1cXHRcXHRmcHV0KGZpbGUpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gY3R4O1xcbi19XFxuLVxcbi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xcbi1cXHRpbnQgc2l6ZSA9IDAsIHJjLCBmZDtcXG4tXFxuLVxcdGZkID0gMDtcXG4tXFx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXFx1MDAyNmZkKSkgIT0gTlVMTCkge1xcbi1cXHRcXHRyYyA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7XFxuLVxcdFxcdGlmIChyYykge1xcbi1cXHRcXHRcXHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHJjID0gc3B1ZnNfY3R4X25vdGVfc2l6ZShjdHgsIGZkKTtcXG4tXFx0XFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcXG4tXFx0XFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNpemUgKz0gcmM7XFxuLVxcbi1cXHRcXHQvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovXFxuLVxcdFxcdGZkKys7XFxuLVxcdFxcdHB1dF9zcHVfY29udGV4dChjdHgpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gc2l6ZTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBzcHVmc19hcmNoX3dyaXRlX25vdGUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBpLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIGludCBkZmQpXFxuLXtcXG4tXFx0c2l6ZV90IHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplO1xcbi1cXHRjaGFyIGZ1bGxuYW1lWzgwXTtcXG4tXFx0c3RydWN0IGVsZl9ub3RlIGVuO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c3ByaW50ZihmdWxsbmFtZSwgXFxcIlNQVS8lZC8lc1xcXCIsIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTtcXG4tXFx0ZW4ubl9uYW1lc3ogPSBzdHJsZW4oZnVsbG5hbWUpICsgMTtcXG4tXFx0ZW4ubl9kZXNjc3ogPSBzejtcXG4tXFx0ZW4ubl90eXBlID0gTlRfU1BVO1xcbi1cXG4tXFx0aWYgKCFkdW1wX2VtaXQoY3BybSwgXFx1MDAyNmVuLCBzaXplb2YoZW4pKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdGlmICghZHVtcF9lbWl0KGNwcm0sIGZ1bGxuYW1lLCBlbi5uX25hbWVzeikpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRpZiAoIWR1bXBfYWxpZ24oY3BybSwgNCkpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbi1cXG4tXFx0aWYgKHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcCkge1xcbi1cXHRcXHRyZXQgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXAoY3R4LCBjcHJtKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGNoYXIgYnVmWzMyXTtcXG4tXFxuLVxcdFxcdHJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIweCUuMTZsbHhcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gc2l6ZW9mKGJ1ZikpXFxuLVxcdFxcdFxcdHJldHVybiBzaXplb2YoYnVmKTtcXG4tXFxuLVxcdFxcdC8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqL1xcbi1cXHRcXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCArIDEpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4tXFx0ZHVtcF9za2lwX3RvKGNwcm0sIHJvdW5kdXAoY3BybS1cXHUwMDNlcG9zIC0gcmV0ICsgc3osIDQpKTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xcbi1cXHRpbnQgZmQsIGosIHJjO1xcbi1cXG4tXFx0ZmQgPSAwO1xcbi1cXHR3aGlsZSAoKGN0eCA9IGNvcmVkdW1wX25leHRfY29udGV4dChcXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XFxuLVxcdFxcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcXG4tXFx0XFx0aWYgKHJjKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmM7XFxuLVxcbi1cXHRcXHRmb3IgKGogPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2pdLm5hbWUgIT0gTlVMTDsgaisrKSB7XFxuLVxcdFxcdFxcdHJjID0gc3B1ZnNfYXJjaF93cml0ZV9ub3RlKGN0eCwgaiwgY3BybSwgZmQpO1xcbi1cXHRcXHRcXHRpZiAocmMpIHtcXG4tXFx0XFx0XFx0XFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XFxuLVxcbi1cXHRcXHQvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovXFxuLVxcdFxcdGZkKys7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jXFxuaW5kZXggZGU3NDk0NzQ4ZmVjZC4uOThjNDdiYWZhZjY3OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xcbkBAIC05LDcgKzksNiBAQFxcbiBcXG4gI3VuZGVmIERFQlVHXFxuIFxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY29yZWR1bXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb2N0bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuQEAgLTEzMCwxNCArMTI5LDYgQEAgc3RhdGljIHNzaXplX3Qgc3B1ZnNfYXR0cl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZHVtcF9lbWl0KHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHZvaWQgKmJ1ZixcXG4tXFx0XFx0c2l6ZV90IHNpemUpXFxuLXtcXG4tXFx0aWYgKCFkdW1wX2VtaXQoY3BybSwgYnVmLCBzaXplKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdHJldHVybiBzaXplO1xcbi19XFxuLVxcbiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdClcXHRcXFxcXFxuIHN0YXRpYyBpbnQgX19mb3BzICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMTgwLDEyICsxNzEsNiBAQCBzcHVmc19tZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90XFxuLXNwdWZzX21lbV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgY3R4LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9scyhjdHgpLCBMU19TSVpFKTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3RcXG4gc3B1ZnNfbWVtX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdFxcdFxcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcXG5AQCAtNDY2LDEzICs0NTEsNiBAQCBzcHVmc19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3NpemVfdFxcbi1zcHVmc19yZWdzX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLXtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZ3BycyxcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZihjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZ3BycykpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdFxcbiBzcHVmc19yZWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcXG5AQCAtNTIzLDEzICs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7XFxuIFxcdC5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzc2l6ZV90XFxuLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFxcdTAwMjZjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZnBjcixcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZihjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZnBjcikpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdFxcbiBzcHVmc19mcGNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLFxcbiBcXHRcXHRzaXplX3Qgc2l6ZSwgbG9mZl90ICogcG9zKVxcbkBAIC05NTMsMTUgKzkyNCw2IEBAIHNwdWZzX3NpZ25hbDFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDFfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4tXFx0XFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRpZiAoIWN0eC1cXHUwMDNlY3NhLnNwdV9jaG5sY250X1JXWzNdKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2Y3R4LVxcdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdLFxcbi1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGN0eC1cXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1szXSkpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDFfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0c2l6ZV90IGxlbilcXG4ge1xcbkBAIC0xMDg2LDE1ICsxMDQ4LDYgQEAgc3B1ZnNfc2lnbmFsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMl9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxcbi1cXHRcXHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdGlmICghY3R4LVxcdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbNF0pXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFxcdTAwMjZjdHgtXFx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbNF0sXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoY3R4LVxcdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzRdKSk7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMl9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHRzaXplX3QgbGVuKVxcbiB7XFxuQEAgLTE5MjQsMTUgKzE4NzcsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19jYXBzX2ZvcHMgPSB7XFxuIFxcdC5yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX21ib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxcbi1cXHRcXHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdGlmICghKGN0eC1cXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFxcdTAwMjYgMHgwMDAwZmYpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2Y3R4LVxcdTAwM2Vjc2EucHJvYi5wdV9tYl9SLFxcbi1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGN0eC1cXHUwMDNlY3NhLnByb2IucHVfbWJfUikpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXFxuIHtcXG5AQCAtMTk2MiwxNSArMTkwNiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX21ib3hfaW5mb19mb3BzID0ge1xcbiBcXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIH07XFxuIFxcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4tXFx0XFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRpZiAoIShjdHgtXFx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcXHUwMDI2IDB4ZmYwMDAwKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXFx1MDAyNmN0eC1cXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoY3R4LVxcdTAwM2Vjc2EucHJpdjIucHVpbnRfbWJfUikpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXFxuIHtcXG5AQCAtMjAwNSwxMyArMTk0MCw2IEBAIHN0YXRpYyBzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2NudChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eClcXG4gXFx0cmV0dXJuICg0IC0gKChjdHgtXFx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcXHUwMDI2IDB4MDBmZjAwKSBcXHUwMDNlXFx1MDAzZSA4KSkgKiBzaXplb2YodTMyKTtcXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXFxuLVxcdFxcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLXtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2Y3R4LVxcdTAwM2Vjc2Euc3B1X21haWxib3hfZGF0YSxcXG4tXFx0XFx0XFx0c3B1ZnNfd2JveF9pbmZvX2NudChjdHgpKTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiB7XFxuQEAgLTIwNTksMTUgKzE5ODcsNiBAQCBzdGF0aWMgdm9pZCBzcHVmc19nZXRfZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4tXFx0XFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRzdHJ1Y3Qgc3B1X2RtYV9pbmZvIGluZm87XFxuLVxcbi1cXHRzcHVmc19nZXRfZG1hX2luZm8oY3R4LCBcXHUwMDI2aW5mbyk7XFxuLVxcdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSk7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2RtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdFxcdCAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiB7XFxuQEAgLTIxMTIsMTUgKzIwMzEsNiBAQCBzdGF0aWMgdm9pZCBzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXFxuLVxcdFxcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLXtcXG4tXFx0c3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87XFxuLVxcbi1cXHRzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsIFxcdTAwMjZpbmZvKTtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2aW5mbywgc2l6ZW9mKGluZm8pKTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfcHJveHlkbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG4ge1xcbkBAIC0yNTgwLDI3ICsyNDkwLDMgQEAgY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7XFxuIFxcdHsgXFxcIi5jdHhcXFwiLCBcXHUwMDI2c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sXFxuIFxcdHt9LFxcbiB9O1xcbi1cXG4tY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW10gPSB7XFxuLVxcdHsgXFxcInJlZ3NcXFwiLCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sXFxuLVxcdHsgXFxcImZwY3JcXFwiLCBzcHVmc19mcGNyX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSxcXG4tXFx0eyBcXFwibHNsclxcXCIsIE5VTEwsIHNwdWZzX2xzbHJfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJkZWNyXFxcIiwgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sXFxuLVxcdHsgXFxcImRlY3Jfc3RhdHVzXFxcIiwgTlVMTCwgc3B1ZnNfZGVjcl9zdGF0dXNfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJtZW1cXFwiLCBzcHVmc19tZW1fZHVtcCwgTlVMTCwgTFNfU0laRSwgfSxcXG4tXFx0eyBcXFwic2lnbmFsMVxcXCIsIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcXG4tXFx0eyBcXFwic2lnbmFsMV90eXBlXFxcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMV90eXBlX2dldCwgMTkgfSxcXG4tXFx0eyBcXFwic2lnbmFsMlxcXCIsIHNwdWZzX3NpZ25hbDJfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcXG4tXFx0eyBcXFwic2lnbmFsMl90eXBlXFxcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSxcXG4tXFx0eyBcXFwiZXZlbnRfbWFza1xcXCIsIE5VTEwsIHNwdWZzX2V2ZW50X21hc2tfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJldmVudF9zdGF0dXNcXFwiLCBOVUxMLCBzcHVmc19ldmVudF9zdGF0dXNfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJtYm94X2luZm9cXFwiLCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcXG4tXFx0eyBcXFwiaWJveF9pbmZvXFxcIiwgc3B1ZnNfaWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXFxuLVxcdHsgXFxcIndib3hfaW5mb1xcXCIsIHNwdWZzX3dib3hfaW5mb19kdW1wLCBOVUxMLCA0ICogc2l6ZW9mKHUzMil9LFxcbi1cXHR7IFxcXCJkbWFfaW5mb1xcXCIsIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sXFxuLVxcdHsgXFxcInByb3h5ZG1hX2luZm9cXFwiLCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAsXFxuLVxcdFxcdFxcdCAgIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3Byb3h5ZG1hX2luZm8pfSxcXG4tXFx0eyBcXFwib2JqZWN0LWlkXFxcIiwgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSxcXG4tXFx0eyBcXFwibnBjXFxcIiwgTlVMTCwgc3B1ZnNfbnBjX2dldCwgMTkgfSxcXG4tXFx0eyBOVUxMIH0sXFxuLX07XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcXG5pbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcXG5AQCAtMjMyLDEzICsyMzIsOSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107XFxuIFxcbiAvKiBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xcbiBleHRlcm4gc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzO1xcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xcbiBsb25nIHNwdWZzX3J1bl9zcHUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHUzMiAqbnBjLCB1MzIgKnN0YXR1cyk7XFxuIGxvbmcgc3B1ZnNfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYXRoICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuIFxcdFxcdFxcdHVtb2RlX3QgbW9kZSwgc3RydWN0IGZpbGUgKmZpbHApO1xcbi0vKiBFTEYgY29yZWR1bXAgY2FsbGJhY2tzIGZvciB3cml0aW5nIFNQVSBFTEYgbm90ZXMgKi9cXG4tZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpO1xcbi1leHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY29udGV4dF9mb3BzO1xcbiBcXG5AQCAtMzM1LDE0ICszMzEsNiBAQCB2b2lkIHNwdWZzX3N0b3BfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgaXJxKTtcXG4gdm9pZCBzcHVmc19tZmNfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1KTtcXG4gdm9pZCBzcHVmc19kbWFfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgdHlwZSk7XFxuIFxcbi1zdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHtcXG4tXFx0Y2hhciAqbmFtZTtcXG4tXFx0c3NpemVfdCAoKmR1bXApKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcXG4tXFx0dTY0ICgqZ2V0KShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCk7XFxuLVxcdHNpemVfdCBzaXplO1xcbi19O1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107XFxuLVxcbiBleHRlcm4gaW50IHNwdV9pbml0X2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpO1xcbiBleHRlcm4gdm9pZCBzcHVfZmluaV9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTtcXG4gZXh0ZXJuIGludCBzcHVfc2F2ZShzdHJ1Y3Qgc3B1X3N0YXRlICpwcmV2LCBzdHJ1Y3Qgc3B1ICpzcHUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXFxuaW5kZXggZWE0YmExYjZjZTZhOS4uYjZkZTM3MTUwZTczNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXFxuQEAgLTgyLDggKzgyLDQgQEAgc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzID0ge1xcbiBcXHQuc3B1X3J1biA9IGRvX3NwdV9ydW4sXFxuIFxcdC5ub3RpZnlfc3B1c19hY3RpdmUgPSBkb19ub3RpZnlfc3B1c19hY3RpdmUsXFxuIFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbi0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXFxuLVxcdC5jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSxcXG4tXFx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsXFxuLSNlbmRpZlxcbiB9O1xcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmNcXG5pbmRleCAwNmQwZGYxMDUzODIzLi5kYjMyYmI0MGE4NjcwIDEwMDY0NFxcbi0tLSBhL2ZzL2JpbmZtdF9lbGYuY1xcbisrKyBiL2ZzL2JpbmZtdF9lbGYuY1xcbkBAIC0yMDI5LDcgKzIwMjksNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4gXFx0e1xcbiBcXHRcXHRzaXplX3Qgc3ogPSBpbmZvLnNpemU7XFxuIFxcbi1cXHRcXHQvKiBGb3IgY2VsbCBzcHVmcyBhbmQgeDg2IHhzdGF0ZSAqL1xcbitcXHRcXHQvKiBGb3IgeDg2IHhzdGF0ZSAqL1xcbiBcXHRcXHRzeiArPSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xcbiBcXG4gXFx0XFx0cGhkcjRub3RlID0ga21hbGxvY19vYmooKnBoZHI0bm90ZSk7XFxuQEAgLTIwOTMsNyArMjA5Myw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbiBcXHRpZiAoIXdyaXRlX25vdGVfaW5mbyhcXHUwMDI2aW5mbywgY3BybSkpXFxuIFxcdFxcdGdvdG8gZW5kX2NvcmVkdW1wO1xcbiBcXG4tXFx0LyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi9cXG4rXFx0LyogRm9yIHg4NiB4c3RhdGUgKi9cXG4gXFx0aWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKSlcXG4gXFx0XFx0Z290byBlbmRfY29yZWR1bXA7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGFjM2NkNzQ4MDhjNjQuLmE0OWYyZmQ2YmUyODAgMTAwNjQ0XFxuLS0tIGEvZnMvY29yZWR1bXAuY1xcbisrKyBiL2ZzL2NvcmVkdW1wLmNcXG5AQCAtMTExOCwxMSArMTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbiBcXHRpZiAoY24tXFx1MDAzZW1hc2sgXFx1MDAyNiBDT1JFRFVNUF9SRUpFQ1QpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIGdldCB1cyBhbiB1bnNoYXJlZCBkZXNjcmlwdG9yIHRhYmxlOyBhbG1vc3QgYWx3YXlzIGEgbm8tb3AgKi9cXG4tXFx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xcbi1cXHRpZiAodW5zaGFyZV9maWxlcygpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRpZiAoKGNuLVxcdTAwM2VtYXNrIFxcdTAwMjYgQ09SRURVTVBfS0VSTkVMKSBcXHUwMDI2XFx1MDAyNiAhY29yZWR1bXBfd3JpdGUoY24sIGNwcm0sIGJpbmZtdCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIxOjQxLjI1NjU1NTM0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMjc5NjQ3MTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIHdoZW4gZHVtcGluZyBjb3JlIG9mIHByb2Nlc3NlcyB3aXRoIHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWU2ZjMxMTNmNjViOTU2YjRhYjA5OTE2MDdjYjJiODQ2NmIyYmRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6MjE6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMTYwLDcgKzE2MCw2IEBAIGNvbmZpZyBQUENcbiBcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuIFx0c2VsZWN0IEFSQ0hfSEFTX1ZEU09fQVJDSF9EQVRBXG4gXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbi1cdHNlbGVjdCBBUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTICAgICAgICBpZiBTUFVfQkFTRVxuIFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuIFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXHRpZiBQUENfUkFESVhfTU1VXG4gXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlRcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcbmluZGV4IGJiNGI5NDQ0NGQzZTguLjVkYzhjNDkyM2ViMWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaFxuQEAgLTEyMywxMiArMTIzLDYgQEAgZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiBcdCgweDdmZiBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgLSAxMikpIDogXFxcbiBcdCgweDNmZmZmIFx1MDAzZVx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkpXG4gXG4tI2lmZGVmIENPTkZJR19TUFVfQkFTRVxuLS8qIE5vdGVzIHVzZWQgaW4gRVRfQ09SRS4gTm90ZSBuYW1lIGlzIFwiU1BVL1x1MDAzY2ZkXHUwMDNlL1x1MDAzY2ZpbGVuYW1lXHUwMDNlXCIuICovXG4tI2RlZmluZSBOVF9TUFVcdFx0MVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfU1BVX0JBU0UgKi9cbi1cbiAjaWZkZWYgQ09ORklHX1BQQzY0XG4gXG4gI2RlZmluZSBnZXRfY2FjaGVfZ2VvbWV0cnkobGV2ZWwpIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oXG5pbmRleCA5NmFkNDUxMGM4OTU0Li43MTUyMjg1YjYyNjhmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcbkBAIC0yMTAsMTUgKzIxMCwxMiBAQCBleHRlcm4gbG9uZyBzcHVfc3lzX2NhbGxiYWNrKHN0cnVjdCBzcHVfc3lzY2FsbF9ibG9jayAqcyk7XG4gXG4gLyogc3lzY2FsbHMgaW1wbGVtZW50ZWQgaW4gc3B1ZnMgKi9cbiBzdHJ1Y3QgZmlsZTtcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIHN0cnVjdCBzcHVmc19jYWxscyB7XG4gXHRsb25nICgqY3JlYXRlX3RocmVhZCkoY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqbmVpZ2hib3IpO1xuIFx0bG9uZyAoKnNwdV9ydW4pKHN0cnVjdCBmaWxlICpmaWxwLCBfX3UzMiBfX3VzZXIgKnVucGMsXG4gXHRcdFx0XHRcdFx0X191MzIgX191c2VyICp1c3RhdHVzKTtcbi1cdGludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUpKHZvaWQpO1xuLVx0aW50ICgqY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUpKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuIFx0dm9pZCAoKm5vdGlmeV9zcHVzX2FjdGl2ZSkodm9pZCk7XG4gXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWdcbmluZGV4IGRiNjViZmNkMWU3NDkuLjZiZDI2ODE1YzMzMTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWdcbkBAIC0xMCw3ICsxMCw2IEBAIGNvbmZpZyBTUFVfRlNcbiBcdHRyaXN0YXRlIFwiU1BVIGZpbGUgc3lzdGVtXCJcbiBcdGRlZmF1bHQgbVxuIFx0ZGVwZW5kcyBvbiBQUENfQ0VMTFxuLVx0ZGVwZW5kcyBvbiBDT1JFRFVNUFxuIFx0c2VsZWN0IFNQVV9CQVNFXG4gXHRoZWxwXG4gXHQgIFRoZSBTUFUgZmlsZSBzeXN0ZW0gaXMgdXNlZCB0byBhY2Nlc3MgU3luZXJnaXN0aWMgUHJvY2Vzc2luZ1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xuaW5kZXggMDAwODk0ZTA3YjAyNy4uOGJlODEyMDdlODg2YSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG5AQCAtODgsMjYgKzg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUzKHNwdV9ydW4saW50LCBmZCwgX191MzIgX191c2VyICosIHVucGMsIF9fdTMyIF9fdXNlciAqLCB1c3RhdHVzKVxuIFx0cmV0dXJuIGNhbGxzLVx1MDAzZXNwdV9ydW4oZmRfZmlsZShhcmcpLCB1bnBjLCB1c3RhdHVzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTtcbi19XG4tXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pO1xuLX1cbi0jZW5kaWZcbi1cbiB2b2lkIG5vdGlmeV9zcHVzX2FjdGl2ZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzcHVmc19jYWxscyAqY2FsbHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG5pbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbkBAIC00LDcgKzQsNiBAQCBvYmotJChDT05GSUdfU1BVX0ZTKSArPSBzcHVmcy5vXG4gc3B1ZnMteSArPSBpbm9kZS5vIGZpbGUubyBjb250ZXh0Lm8gc3lzY2FsbHMub1xuIHNwdWZzLXkgKz0gc2NoZWQubyBiYWNraW5nX29wcy5vIGh3X29wcy5vIHJ1bi5vIGdhbmcub1xuIHNwdWZzLXkgKz0gc3dpdGNoLm8gZmF1bHQubyBsc2NzYV9hbGxvYy5vXG4tc3B1ZnMtJChDT05GSUdfQ09SRURVTVApICs9IGNvcmVkdW1wLm9cbiBcbiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzXG4gQ0ZMQUdTX3NjaGVkLm8gOj0gLUkkKHNyYylcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDMwMWVlN2Q4YjdkZjAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwxODMgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4tLypcbi0gKiBTUFUgY29yZSBkdW1wIGNvZGVcbi0gKlxuLSAqIChDKSBDb3B5cmlnaHQgMjAwNiBJQk0gQ29ycC5cbi0gKlxuLSAqIEF1dGhvcjogRHdheW5lIEdyYW50IE1jQ29ubmVsbCBcdTAwM2NkZWNpbWFsQHVzLmlibS5jb21cdTAwM2Vcbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZkdGFibGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXCJzcHVmcy5oXCJcbi1cbi1zdGF0aWMgaW50IHNwdWZzX2N0eF9ub3RlX3NpemUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBkZmQpXG4te1xuLVx0aW50IGksIHN6LCB0b3RhbCA9IDA7XG4tXHRjaGFyICpuYW1lO1xuLVx0Y2hhciBmdWxsbmFtZVs4MF07XG4tXG4tXHRmb3IgKGkgPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7XG4tXHRcdG5hbWUgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWU7XG4tXHRcdHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplO1xuLVxuLVx0XHRzcHJpbnRmKGZ1bGxuYW1lLCBcIlNQVS8lZC8lc1wiLCBkZmQsIG5hbWUpO1xuLVxuLVx0XHR0b3RhbCArPSBzaXplb2Yoc3RydWN0IGVsZl9ub3RlKTtcbi1cdFx0dG90YWwgKz0gcm91bmR1cChzdHJsZW4oZnVsbG5hbWUpICsgMSwgNCk7XG4tXHRcdHRvdGFsICs9IHJvdW5kdXAoc3osIDQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHRvdGFsO1xuLX1cbi1cbi1zdGF0aWMgaW50IG1hdGNoX2NvbnRleHQoY29uc3Qgdm9pZCAqdiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZkKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xuLVx0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZzcHVmc19jb250ZXh0X2ZvcHMpXG4tXHRcdHJldHVybiAwO1xuLVx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cdTAwM2VpX2N0eDtcbi1cdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IFNQVV9DUkVBVEVfTk9TQ0hFRClcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gZmQgKyAxO1xuLX1cbi1cbi0vKlxuLSAqIFRoZSBhZGRpdGlvbmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBub3RlcyBmb3IgQ2VsbCBhcmUgdmFyaW91c1xuLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0LlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHNlZXNcbi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnNcbi0gKiBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgdGhlbSB3aXRob3V0IG5lZWRpbmcgdG8gYWN0dWFsbHlcbi0gKiBvcGVuIHRoZSBmaWxlcy5cbi0gKi9cbi0vKlxuLSAqIGRlc2NyaXB0b3IgdGFibGUgaXMgbm90IHNoYXJlZCwgc28gZmlsZXMgY2FuJ3QgY2hhbmdlIG9yIGdvIGF3YXkuXG4tICovXG4tc3RhdGljIHN0cnVjdCBzcHVfY29udGV4dCAqY29yZWR1bXBfbmV4dF9jb250ZXh0KGludCAqZmQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHggPSBOVUxMO1xuLVx0c3RydWN0IGZpbGUgKmZpbGU7XG4tXHRpbnQgbiA9IGl0ZXJhdGVfZmQoY3VycmVudC1cdTAwM2VmaWxlcywgKmZkLCBtYXRjaF9jb250ZXh0LCBOVUxMKTtcbi1cdGlmICghbilcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHQqZmQgPSBuIC0gMTtcbi1cbi1cdGZpbGUgPSBmZ2V0X3JhdygqZmQpO1xuLVx0aWYgKGZpbGUpIHtcbi1cdFx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cdTAwM2VpX2N0eDtcbi1cdFx0Z2V0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHRcdGZwdXQoZmlsZSk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gY3R4O1xuLX1cbi1cbi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xuLVx0aW50IHNpemUgPSAwLCByYywgZmQ7XG4tXG4tXHRmZCA9IDA7XG4tXHR3aGlsZSAoKGN0eCA9IGNvcmVkdW1wX25leHRfY29udGV4dChcdTAwMjZmZCkpICE9IE5VTEwpIHtcbi1cdFx0cmMgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpO1xuLVx0XHRpZiAocmMpIHtcbi1cdFx0XHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRyYyA9IHNwdWZzX2N0eF9ub3RlX3NpemUoY3R4LCBmZCk7XG4tXHRcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XG4tXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuLVx0XHRcdHB1dF9zcHVfY29udGV4dChjdHgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdHNpemUgKz0gcmM7XG4tXG4tXHRcdC8qIHN0YXJ0IHNlYXJjaGluZyB0aGUgbmV4dCBmZCBuZXh0IHRpbWUgKi9cbi1cdFx0ZmQrKztcbi1cdFx0cHV0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc2l6ZTtcbi19XG4tXG4tc3RhdGljIGludCBzcHVmc19hcmNoX3dyaXRlX25vdGUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBpLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLCBpbnQgZGZkKVxuLXtcbi1cdHNpemVfdCBzeiA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uc2l6ZTtcbi1cdGNoYXIgZnVsbG5hbWVbODBdO1xuLVx0c3RydWN0IGVsZl9ub3RlIGVuO1xuLVx0aW50IHJldDtcbi1cbi1cdHNwcmludGYoZnVsbG5hbWUsIFwiU1BVLyVkLyVzXCIsIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTtcbi1cdGVuLm5fbmFtZXN6ID0gc3RybGVuKGZ1bGxuYW1lKSArIDE7XG4tXHRlbi5uX2Rlc2NzeiA9IHN6O1xuLVx0ZW4ubl90eXBlID0gTlRfU1BVO1xuLVxuLVx0aWYgKCFkdW1wX2VtaXQoY3BybSwgXHUwMDI2ZW4sIHNpemVvZihlbikpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdGlmICghZHVtcF9lbWl0KGNwcm0sIGZ1bGxuYW1lLCBlbi5uX25hbWVzeikpXG4tXHRcdHJldHVybiAtRUlPO1xuLVx0aWYgKCFkdW1wX2FsaWduKGNwcm0sIDQpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cbi1cdGlmIChzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXApIHtcbi1cdFx0cmV0ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5kdW1wKGN0eCwgY3BybSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdH0gZWxzZSB7XG4tXHRcdGNoYXIgYnVmWzMyXTtcbi1cbi1cdFx0cmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIweCUuMTZsbHhcIixcbi1cdFx0XHQgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7XG4tXHRcdGlmIChyZXQgXHUwMDNlPSBzaXplb2YoYnVmKSlcbi1cdFx0XHRyZXR1cm4gc2l6ZW9mKGJ1Zik7XG4tXG4tXHRcdC8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqL1xuLVx0XHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCArIDEpKVxuLVx0XHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuLVx0ZHVtcF9za2lwX3RvKGNwcm0sIHJvdW5kdXAoY3BybS1cdTAwM2Vwb3MgLSByZXQgKyBzeiwgNCkpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xuLVx0aW50IGZkLCBqLCByYztcbi1cbi1cdGZkID0gMDtcbi1cdHdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KFx1MDAyNmZkKSkgIT0gTlVMTCkge1xuLVx0XHRyYyA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRyZXR1cm4gcmM7XG4tXG4tXHRcdGZvciAoaiA9IDA7IHNwdWZzX2NvcmVkdW1wX3JlYWRbal0ubmFtZSAhPSBOVUxMOyBqKyspIHtcbi1cdFx0XHRyYyA9IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShjdHgsIGosIGNwcm0sIGZkKTtcbi1cdFx0XHRpZiAocmMpIHtcbi1cdFx0XHRcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XG4tXHRcdFx0XHRyZXR1cm4gcmM7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4tXHRcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XG4tXG4tXHRcdC8qIHN0YXJ0IHNlYXJjaGluZyB0aGUgbmV4dCBmZCBuZXh0IHRpbWUgKi9cbi1cdFx0ZmQrKztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuaW5kZXggZGU3NDk0NzQ4ZmVjZC4uOThjNDdiYWZhZjY3OCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbkBAIC05LDcgKzksNiBAQFxuIFxuICN1bmRlZiBERUJVR1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTMwLDE0ICsxMjksNiBAQCBzdGF0aWMgc3NpemVfdCBzcHVmc19hdHRyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZHVtcF9lbWl0KHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHZvaWQgKmJ1Zixcbi1cdFx0c2l6ZV90IHNpemUpXG4te1xuLVx0aWYgKCFkdW1wX2VtaXQoY3BybSwgYnVmLCBzaXplKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRyZXR1cm4gc2l6ZTtcbi19XG4tXG4gI2RlZmluZSBERUZJTkVfU1BVRlNfU0lNUExFX0FUVFJJQlVURShfX2ZvcHMsIF9fZ2V0LCBfX3NldCwgX19mbXQpXHRcXFxuIHN0YXRpYyBpbnQgX19mb3BzICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC0xODAsMTIgKzE3MSw2IEBAIHNwdWZzX21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90XG4tc3B1ZnNfbWVtX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXHUwMDNlb3BzLVx1MDAzZWdldF9scyhjdHgpLCBMU19TSVpFKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19tZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0XHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcbkBAIC00NjYsMTMgKzQ1MSw2IEBAIHNwdWZzX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdFxuLXNwdWZzX3JlZ3NfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZ3Bycyxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZ3BycykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX3JlZ3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0c2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKVxuQEAgLTUyMywxMyArNTAxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfcmVnc19mb3BzID0ge1xuIFx0Lmxsc2VlayAgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIH07XG4gXG4tc3RhdGljIHNzaXplX3Rcbi1zcHVmc19mcGNyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWZwY3IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWZwY3IpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19mcGNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgbG9mZl90ICogcG9zKVxuQEAgLTk1MywxNSArOTI0LDYgQEAgc3B1ZnNfc2lnbmFsMV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDFfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIWN0eC1cdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbM10pXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1szXSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMV9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBsZW4pXG4ge1xuQEAgLTEwODYsMTUgKzEwNDgsNiBAQCBzcHVmc19zaWduYWwyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMl9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdGlmICghY3R4LVx1MDAzZWNzYS5zcHVfY2hubGNudF9SV1s0XSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzRdLFxuLVx0XHRcdCAgICAgICBzaXplb2YoY3R4LVx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbNF0pKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgX19zcHVmc19zaWduYWwyX3JlYWQoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0c2l6ZV90IGxlbilcbiB7XG5AQCAtMTkyNCwxNSArMTg3Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NhcHNfZm9wcyA9IHtcbiBcdC5yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuIH07XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfbWJveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0aWYgKCEoY3R4LVx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcdTAwMjYgMHgwMDAwZmYpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2Y3R4LVx1MDAzZWNzYS5wcm9iLnB1X21iX1IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnByb2IucHVfbWJfUikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0xOTYyLDE1ICsxOTA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWJveF9pbmZvX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweGZmMDAwMCkpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjAwNSwxMyArMTk0MCw2IEBAIHN0YXRpYyBzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2NudChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eClcbiBcdHJldHVybiAoNCAtICgoY3R4LVx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcdTAwMjYgMHgwMGZmMDApIFx1MDAzZVx1MDAzZSA4KSkgKiBzaXplb2YodTMyKTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9tYWlsYm94X2RhdGEsXG4tXHRcdFx0c3B1ZnNfd2JveF9pbmZvX2NudChjdHgpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjA1OSwxNSArMTk4Nyw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9kbWFfaW5mbyhzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRzdHJ1Y3Qgc3B1X2RtYV9pbmZvIGluZm87XG4tXG4tXHRzcHVmc19nZXRfZG1hX2luZm8oY3R4LCBcdTAwMjZpbmZvKTtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2aW5mbywgc2l6ZW9mKGluZm8pKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHQgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjExMiwxNSArMjAzMSw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87XG4tXG4tXHRzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjU4MCwyNyArMjQ5MCwzIEBAIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdID0ge1xuIFx0eyBcIi5jdHhcIiwgXHUwMDI2c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sXG4gXHR7fSxcbiB9O1xuLVxuLWNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0ge1xuLVx0eyBcInJlZ3NcIiwgc3B1ZnNfcmVnc19kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjhbMTI4XSl9LFxuLVx0eyBcImZwY3JcIiwgc3B1ZnNfZnBjcl9kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjgpIH0sXG4tXHR7IFwibHNsclwiLCBOVUxMLCBzcHVmc19sc2xyX2dldCwgMTkgfSxcbi1cdHsgXCJkZWNyXCIsIE5VTEwsIHNwdWZzX2RlY3JfZ2V0LCAxOSB9LFxuLVx0eyBcImRlY3Jfc3RhdHVzXCIsIE5VTEwsIHNwdWZzX2RlY3Jfc3RhdHVzX2dldCwgMTkgfSxcbi1cdHsgXCJtZW1cIiwgc3B1ZnNfbWVtX2R1bXAsIE5VTEwsIExTX1NJWkUsIH0sXG4tXHR7IFwic2lnbmFsMVwiLCBzcHVmc19zaWduYWwxX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwic2lnbmFsMV90eXBlXCIsIE5VTEwsIHNwdWZzX3NpZ25hbDFfdHlwZV9nZXQsIDE5IH0sXG4tXHR7IFwic2lnbmFsMlwiLCBzcHVmc19zaWduYWwyX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwic2lnbmFsMl90eXBlXCIsIE5VTEwsIHNwdWZzX3NpZ25hbDJfdHlwZV9nZXQsIDE5IH0sXG4tXHR7IFwiZXZlbnRfbWFza1wiLCBOVUxMLCBzcHVmc19ldmVudF9tYXNrX2dldCwgMTkgfSxcbi1cdHsgXCJldmVudF9zdGF0dXNcIiwgTlVMTCwgc3B1ZnNfZXZlbnRfc3RhdHVzX2dldCwgMTkgfSxcbi1cdHsgXCJtYm94X2luZm9cIiwgc3B1ZnNfbWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwiaWJveF9pbmZvXCIsIHNwdWZzX2lib3hfaW5mb19kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LFxuLVx0eyBcIndib3hfaW5mb1wiLCBzcHVmc193Ym94X2luZm9fZHVtcCwgTlVMTCwgNCAqIHNpemVvZih1MzIpfSxcbi1cdHsgXCJkbWFfaW5mb1wiLCBzcHVmc19kbWFfaW5mb19kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9kbWFfaW5mbyl9LFxuLVx0eyBcInByb3h5ZG1hX2luZm9cIiwgc3B1ZnNfcHJveHlkbWFfaW5mb19kdW1wLFxuLVx0XHRcdCAgIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3Byb3h5ZG1hX2luZm8pfSxcbi1cdHsgXCJvYmplY3QtaWRcIiwgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSxcbi1cdHsgXCJucGNcIiwgTlVMTCwgc3B1ZnNfbnBjX2dldCwgMTkgfSxcbi1cdHsgTlVMTCB9LFxuLX07XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaFxuaW5kZXggZDMzNzg3YzU3YzM5YS4uNjEyYjUwNzVkMGVjYiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaFxuQEAgLTIzMiwxMyArMjMyLDkgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdO1xuIFxuIC8qIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uICovXG4gZXh0ZXJuIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxscztcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIGxvbmcgc3B1ZnNfcnVuX3NwdShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgdTMyICpucGMsIHUzMiAqc3RhdHVzKTtcbiBsb25nIHNwdWZzX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGF0aCAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzLFxuIFx0XHRcdHVtb2RlX3QgbW9kZSwgc3RydWN0IGZpbGUgKmZpbHApO1xuLS8qIEVMRiBjb3JlZHVtcCBjYWxsYmFja3MgZm9yIHdyaXRpbmcgU1BVIEVMRiBub3RlcyAqL1xuLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTtcbi1leHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NvbnRleHRfZm9wcztcbiBcbkBAIC0zMzUsMTQgKzMzMSw2IEBAIHZvaWQgc3B1ZnNfc3RvcF9jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUsIGludCBpcnEpO1xuIHZvaWQgc3B1ZnNfbWZjX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSk7XG4gdm9pZCBzcHVmc19kbWFfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgdHlwZSk7XG4gXG4tc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciB7XG4tXHRjaGFyICpuYW1lO1xuLVx0c3NpemVfdCAoKmR1bXApKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcbi1cdHU2NCAoKmdldCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpO1xuLVx0c2l6ZV90IHNpemU7XG4tfTtcbi1leHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107XG4tXG4gZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTtcbiBleHRlcm4gdm9pZCBzcHVfZmluaV9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTtcbiBleHRlcm4gaW50IHNwdV9zYXZlKHN0cnVjdCBzcHVfc3RhdGUgKnByZXYsIHN0cnVjdCBzcHUgKnNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xuaW5kZXggZWE0YmExYjZjZTZhOS4uYjZkZTM3MTUwZTczNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xuQEAgLTgyLDggKzgyLDQgQEAgc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzID0ge1xuIFx0LnNwdV9ydW4gPSBkb19zcHVfcnVuLFxuIFx0Lm5vdGlmeV9zcHVzX2FjdGl2ZSA9IGRvX25vdGlmeV9zcHVzX2FjdGl2ZSxcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuLSNpZmRlZiBDT05GSUdfQ09SRURVTVBcbi1cdC5jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSxcbi1cdC5jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSA9IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlLFxuLSNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jXG5pbmRleCAwNmQwZGYxMDUzODIzLi5kYjMyYmI0MGE4NjcwIDEwMDY0NFxuLS0tIGEvZnMvYmluZm10X2VsZi5jXG4rKysgYi9mcy9iaW5mbXRfZWxmLmNcbkBAIC0yMDI5LDcgKzIwMjksNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdHtcbiBcdFx0c2l6ZV90IHN6ID0gaW5mby5zaXplO1xuIFxuLVx0XHQvKiBGb3IgY2VsbCBzcHVmcyBhbmQgeDg2IHhzdGF0ZSAqL1xuK1x0XHQvKiBGb3IgeDg2IHhzdGF0ZSAqL1xuIFx0XHRzeiArPSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xuIFxuIFx0XHRwaGRyNG5vdGUgPSBrbWFsbG9jX29iaigqcGhkcjRub3RlKTtcbkBAIC0yMDkzLDcgKzIwOTMsNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdGlmICghd3JpdGVfbm90ZV9pbmZvKFx1MDAyNmluZm8sIGNwcm0pKVxuIFx0XHRnb3RvIGVuZF9jb3JlZHVtcDtcbiBcbi1cdC8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovXG4rXHQvKiBGb3IgeDg2IHhzdGF0ZSAqL1xuIFx0aWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKSlcbiBcdFx0Z290byBlbmRfY29yZWR1bXA7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmNcbmluZGV4IGFjM2NkNzQ4MDhjNjQuLmE0OWYyZmQ2YmUyODAgMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4rKysgYi9mcy9jb3JlZHVtcC5jXG5AQCAtMTExOCwxMSArMTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0aWYgKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX1JFSkVDVClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuLVx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuLVx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKChjbi1cdTAwM2VtYXNrIFx1MDAyNiBDT1JFRFVNUF9LRVJORUwpIFx1MDAyNlx1MDAyNiAhY29yZWR1bXBfd3JpdGUoY24sIGNwcm0sIGJpbmZtdCkpXG4gXHRcdHJldHVybjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIxOjQxLjI1NjU1NjcwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTc3Mzg0MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZXNzZW50aWFsbHkgY2xlYW5zIHVwIHNvbWUgZGVhZCBjb2RlIHJlbGF0ZWQgdG8gdGhlIFN5bmVyZ2lzdGljIFByb2Nlc3NpbmcgVW5pdCAoU1BVKSBvbiB0aGUgUG93ZXJQQyBDZWxsIHBsYXRmb3JtLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVtb3ZpbmcgdGhlIFNQVSBjb3JlZHVtcCBjb2RlIGFuZCwgaW1wb3J0YW50bHksIHRoZSBgdW5zaGFyZV9maWxlcygpYCBjYWxsIHdpdGhpbiB0aGUgYGRvX2NvcmVkdW1wKClgIGZ1bmN0aW9uIGluIGBmcy9jb3JlZHVtcC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJlbW92YWw/IEhtbSwgcHJvYmFibHkgbm90IHdvcnRoIGEgZGVlcCBkaXZlIGZvciBmdXp6aW5nLCB1c3VhbGx5LlwiIEJ1dCBsZXQncyBkaWcgZGVlcGVyLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgdW5zaGFyZV9maWxlcygpYCByZW1vdmFsIGZyb20gYGRvX2NvcmVkdW1wKClgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLCBhbmQgdGhhdCBhbHdheXMgZ2V0cyBteSBhdHRlbnRpb24uIEluaXRpYWxseSBJIHdhcyB0aGlua2luZyBpdCB3YXMgcHJvYmFibHkgb25seSBhIENlbGwgc3BlY2lmaWMgY2hhbmdlLCBob3dldmVyLCBpdCBpcyBpbiBgZnMvY29yZWR1bXAuY2AuIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcmlwcGxlIGVmZmVjdHMgb2YgdGhpcy4gVGhlIGNvbW1lbnQgbWVudGlvbnMgQ2VsbCBTUFVzIHNwZWNpZmljYWxseSwgYnV0IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgYnJvYWRlci5cblxuVGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoaXMgY2hhbmdlICphY3R1YWxseSogd29ydGggZnV6emluZz8gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGNhbGwgdG8gYHVuc2hhcmVfZmlsZXMoKWAsIHdoaWNoIG1lYW5zLCB3aGVuIHRoZSBjb3JlIGlzIGR1bXBlZCwgdGhlIGZpbGVzIGFyZSAqbm8gbG9uZ2VyKiB1bnNoYXJlZC4gV2hpbGUgYSBsb3Qgb2YgdGhlIGNvZGUgYmVpbmcgcmVtb3ZlZCBpcyBvbiBhbiBvYnNvbGV0ZSBhcmNoaXRlY3R1cmUsIHRoaXMgY291bGQgc3RpbGwgbGVhZCB0byBhIHNlY3VyaXR5IGNvbmNlcm4uXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZCBpbiBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBJZiBpdCdzIHNvbWV0aGluZyB0aGF0IGNhbid0IGJlIHJlYWNoZWQsIG9yIGlzIGRlcHJlY2F0ZWQgb3IgaW1wb3NzaWJsZSB0byByZXBsaWNhdGUsIHRoZW4gaXQgbWF5IG5vdCBiZSB3b3J0aCBmdXp6aW5nLiBJIGJlbGlldmUgUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgdGhlIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBTUFVzLCB3aGljaCBtZWFucywgdGhlIGNvZGUgaXMgbGlrZWx5IGRlYWQgaW4gbW9kZXJuIHN5c3RlbXMuXG5cbkJ1dCB0aGVuIEkgaGFkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjcml0ZXJpYTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIHRvIGBmcy9jb3JlZHVtcC5jYCwgbGV0J3Mgc2VlOlxuXG5gYGBjXG5AQCAtMTExOCwxMSArMTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0aWYgKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX1JFSkVDVClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuLVx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuLVx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKChjbi1cdTAwM2VtYXNrIFx1MDAyNiBDT1JFRFVNUF9LRVJORUwpIFx1MDAyNlx1MDAyNiAhY29yZWR1bXBfd3JpdGUoY24sIGNwcm0sIGJpbmZtdCkpXG4gXHRcdHJldHVybjtcbiBgYGBcblxuT2ssIGNvbmZpcm1lZCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIHRoZSBmaWxlcyBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIHdoZW4gYGRvX2NvcmVkdW1wYCBpcyBjYWxsZWQsIGluICphbnkqIGFyY2hpdGVjdHVyZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgYnVnIGlmIHNvbWV0aGluZyBlbHNlIHJlbGllcyBvbiB0aGlzIGJlaGF2aW9yLiBCdXQgaXQgKndhcyogYWRkZWQgc3BlY2lmaWNhbGx5IGZvciBDZWxsIFNQVS4gXG5cblVsdGltYXRlbHksIHRoaXMgaXMgYSBoYXJkIGNhbGwuIE15IGluc3RpbmN0IHNheXMgdGhpcyBpcyBsaWtlbHkgYSByZW1vdmFsIG9mIGFuIG9ic29sZXRlIGNhbGwsIGJ1dCBJIGNhbid0IGlnbm9yZSB0aGUgY29yZSBmdW5jdGlvbiBjaGFuZ2UuIEJ1dCBJIHN1c3BlY3QgdGhlIGNhbGwgd2FzIG5vdCBiZWluZyB1c2VkLiBJdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIHRoaXMgY2hhbmdlIGZ1cnRoZXIgZm9yIHBvc3NpYmxlIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjowNC4yMzM5NDM3NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NDQyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fY29yZWR1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29yZWR1bXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb3JlZHVtcC5jPTEwNzU9c3RhdGljIGlubGluZSBib29sIGNvcmVkdW1wX3NraXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtMTA4Ni1cXG5mcy9jb3JlZHVtcC5jOjEwODc6c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuZnMvY29yZWR1bXAuYy0xMDg4LVxcdFxcdFxcdHNpemVfdCAqKmFyZ3YsIGludCAqYXJnYywgY29uc3Qgc3RydWN0IGxpbnV4X2JpbmZtdCAqYmluZm10KVxcbi0tXFxuZnMvY29yZWR1bXAuYz0xMTUxPXZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTExODktXFx0c2NvcGVkX3dpdGhfY3JlZHMoY3JlZClcXG5mcy9jb3JlZHVtcC5jOjExOTA6XFx0XFx0ZG9fY29yZWR1bXAoXFx1MDAyNmNuLCBcXHUwMDI2Y3BybSwgXFx1MDAyNmFyZ3YsIFxcdTAwMjZhcmdjLCBiaW5mbXQpO1xcbmZzL2NvcmVkdW1wLmMtMTE5MS1cXHRjb3JlZHVtcF9jbGVhbnVwKFxcdTAwMjZjbiwgXFx1MDAyNmNwcm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjowNC4yODA1OTE1NThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjIxMzAzNTc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb3JlZHVtcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggcmVtb3ZlcyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIHdvcnRoIGZ1enppbmc/XCIgVGhlIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQgcmVtb3ZhbCBpcyBhbG1vc3QgaXJyZWxldmFudCBzaW5jZSB0aGF0IGFyY2hpdGVjdHVyZSBpcyBwcmV0dHkgbXVjaCBkZWFkIGFuZCBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIHJlbW92YWwgb2YgdGhhdCBgdW5zaGFyZV9maWxlcygpYCBjYWxsIHdpdGhpbiBgZG9fY29yZWR1bXAoKWAuXG5cbkluaXRpYWxseSwgSSBmaWd1cmVkIGZ1enppbmcgYGRvX2NvcmVkdW1wYCAqY291bGQqIGJlIHVzZWZ1bCwgYnV0IHRoZSByZW1vdmVkIGZ1bmN0aW9uIHNlZW1lZCB0byBiZSBhIG5lYXIgbm8tb3AuIFRoZW4gSSByZW1lbWJlcmVkLCBgdW5zaGFyZV9maWxlcygpYCBhY3R1YWxseSBtYW5hZ2VzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIElmIHRoZSB0YWJsZSBpcyBzaGFyZWQsIGl0ICpjcmVhdGVzIGEgbmV3IG9uZSosIG90aGVyd2lzZSBkb2VzIG5vdGhpbmcuIFNvLCByZW1vdmluZyBpdCBtZWFucyB0aGUgY29yZWR1bXAgcHJvY2VzcyBub3cgKnNoYXJlcyogaXRzIGZpbGUgZGVzY3JpcHRvciB0YWJsZSB3aXRoIG90aGVyIHRocmVhZHMvcHJvY2Vzc2VzIGlmIGl0IHdhcyBzaGFyZWQuXG5cbk5vdywgY29yZWR1bXBzIHVzdWFsbHkgaGFwcGVuIGFmdGVyIGEgcHJvY2VzcyBjcmFzaGVzLCBvZnRlbiBhZnRlciB0ZXJtaW5hdGluZyBvdGhlciB0aHJlYWRzIG9yIGJlaW5nIGhpdCBieSBhIGZhdGFsIHNpZ25hbC4gU28sIEkgc2VlIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGBmcy9jb3JlZHVtcC5jYCwgd2hpY2ggbWVhbnMgaXQncyAqcmVhY2hhYmxlKi4gQ3Jhc2hpbmcgYSBwcm9jZXNzIHRyaWdnZXJzIGBkb19jb3JlZHVtcGAsIG1ha2luZyBpdCByZWFjaGFibGUuXG5cbkdpdmVuIHRoYXQgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGFjdCBvZiB0aGlzIHJlbW92YWwuIFRoZSBwcm9tcHQgc2F5cywgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi51c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBUaW1lIHRvIGdvIGRlZXBlciBhbmQgY2hlY2sgYHVuc2hhcmVfZmlsZXNgIGluIGBrZXJuZWwvZm9yay5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjI6MjYuNDkzNjI5ODQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Mzk3NTgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNoYXJlX2ZpbGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mb3JrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2ZvcmsuYz0zMzU0PVNZU0NBTExfREVGSU5FMSh1bnNoYXJlLCB1bnNpZ25lZCBsb25nLCB1bnNoYXJlX2ZsYWdzKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMzY0LVxcbmtlcm5lbC9mb3JrLmM6MzM2NTppbnQgdW5zaGFyZV9maWxlcyh2b2lkKVxcbmtlcm5lbC9mb3JrLmMtMzM2Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIyOjI3LjM0NzYxNDA1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODI0OTA5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBEdW1wIFZ1bG5lcmFiaWxpdHkgQ29uY2VybnMqKlxuXG5Pa2F5LCBzbyBgdW5zaGFyZV9maWxlc2AgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSByZW1vdmFsIG9mIHRoaXMgZnVuY3Rpb24gZnJvbSBgZG9fY29yZWR1bXBgIGlzIHJhaXNpbmcgc29tZSByZWQgZmxhZ3MgaW4gbXkgbWluZC4gVGhlIGNydXggb2YgaXQgaXMgdGhpczogaWYgYSBwcm9jZXNzIGlzIHNoYXJpbmcgaXRzIGZpbGUgZGVzY3JpcHRvciB0YWJsZSDigJMgc2F5LCB2aWEgYENMT05FX0ZJTEVTYCAqd2l0aG91dCogYENMT05FX1RIUkVBRGAg4oCTIGFuZCB0aGVuIGNyYXNoZXMsIHRoZSBjb3JlZHVtcCBwcm9jZXNzICp3b24ndCogdW5zaGFyZSB0aG9zZSBmaWxlcy4gVGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZSBpcyB0aGF0IHRoZSBjb3JlZHVtcCBwcm9jZXNzIGNvdWxkIGluYWR2ZXJ0ZW50bHkgbW9kaWZ5IHRoYXQgc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaWYgYGRvX2NvcmVkdW1wYCBpdHNlbGYsIG9wZW5zIGEgcGlwZSBvciBhIGZpbGUgdG8gd3JpdGUgdGhlIGNvcmUgZHVtcCwgaXQgd291bGQgYWRkIGEgZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSBzaGFyZWQgdGFibGUuIFRoaXMgd291bGQgbWVhbiB0aGF0IHByb2Nlc3NlcyBzaGFyaW5nIHRoYXQgdGFibGUgY291bGQgcG90ZW50aWFsbHkgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBpbmZvcm1hdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGRvX2NvcmVkdW1wYCBpcyBpbmRlZWQgb3BlbmluZyB0aGVzZSBmaWxlcy9waXBlcy4gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiByaWdodCBhd2F5IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjozMy44MzAxMDczMDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0NjQyNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3Blbl9yb290fGZpbHBfb3BlbnxmaWxlX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29yZWR1bXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05MDItXFx0XFx0ICogSWYgaXQgZG9lc24ndCBleGlzdCwgdGhhdCdzIGZpbmUuIElmIHRoZXJlJ3Mgc29tZVxcbmZzL2NvcmVkdW1wLmM6OTAzOlxcdFxcdCAqIG90aGVyIHByb2JsZW0sIHdlJ2xsIGNhdGNoIGl0IGF0IHRoZSBmaWxwX29wZW4oKS5cXG5mcy9jb3JlZHVtcC5jLTkwNC1cXHRcXHQgKi9cXG4tLVxcbmZzL2NvcmVkdW1wLmMtOTI2LVxcdFxcdHNjb3BlZF93aXRoX2luaXRfZnMoKVxcbmZzL2NvcmVkdW1wLmM6OTI3OlxcdFxcdFxcdGZpbGUgPSBmaWxwX29wZW4oY24tXFx1MDAzZWNvcmVuYW1lLCBvcGVuX2ZsYWdzLCAwNjAwKTtcXG5mcy9jb3JlZHVtcC5jLTkyOC1cXHR9IGVsc2Uge1xcbmZzL2NvcmVkdW1wLmM6OTI5OlxcdFxcdGZpbGUgPSBmaWxwX29wZW4oY24tXFx1MDAzZWNvcmVuYW1lLCBvcGVuX2ZsYWdzLCAwNjAwKTtcXG5mcy9jb3JlZHVtcC5jLTkzMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIyOjM0LjI0NDc1Mzg3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjQxMjk1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipDb3JlZHVtcCBGaWxlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGNvcmVkdW1wIHByb2Nlc3MuIEkgcmVtZW1iZXIgdGhhdCBgZmlscF9vcGVuYCBpcyBkZWZpbml0ZWx5IHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGdlbmVyYXRpbmcgYSBjb3JlIGR1bXAuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsZWQgZnJvbSBgY29yZWR1bXBfZmlsZWAuIE5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIG9mIHRoZSBjYWxsIGNoYWluIGhlcmUuIElzIGBjb3JlZHVtcF9maWxlYCByZWFsbHkgZGlyZWN0bHkgY2FsbGVkIGJ5IGBkb19jb3JlZHVtcGA/IEknbSBwcmV0dHkgY2VydGFpbiBpdCBpcywgYnV0IGdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbiBlcnJvciwgaXQncyBhbHdheXMgYmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY2FsbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBgZG9fY29yZWR1bXBgIGFuZCBgY29yZWR1bXBfZmlsZWAgc28gSSBjYW4gY29uZmlybSBteSBtZW50YWwgbW9kZWwuIFRoaXMgbGV2ZWwgb2YgbWV0aWN1bG91c25lc3MgaXMgZXNzZW50aWFsIGluIGtlcm5lbCBkZWJ1Z2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjI6NDUuNDg2MDU0MjE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIzMzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlZHVtcF9maWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvcmVkdW1wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29yZWR1bXAuYz04NzI9c3RhdGljIGlubGluZSBib29sIGNvcmVkdW1wX2ZvcmNlX3N1aWRfc2FmZShjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi0tXFxuZnMvY29yZWR1bXAuYy04NzctXFxuZnMvY29yZWR1bXAuYzo4Nzg6c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG5mcy9jb3JlZHVtcC5jLTg3OS1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdClcXG4tLVxcbmZzL2NvcmVkdW1wLmM9MTA4Nz1zdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtMTA5OC1cXHRjYXNlIENPUkVEVU1QX0ZJTEU6XFxuZnMvY29yZWR1bXAuYzoxMDk5OlxcdFxcdGlmICghY29yZWR1bXBfZmlsZShjbiwgY3BybSwgYmluZm10KSlcXG5mcy9jb3JlZHVtcC5jLTExMDAtXFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjo0NS41MzEyOTAyMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM0MjM5OTc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgUmVtb3ZhbCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCByZWFsaXplZCBzb21ldGhpbmcgYWJvdXQgYGZpbHBfb3BlbmAuIEl0ICpkb2Vzbid0KiBhY3R1YWxseSBwdXQgdGhlIGZpbGUgaW50byB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLiBJdCBqdXN0IGdpdmVzIHlvdSBhIGBzdHJ1Y3QgZmlsZSAqYC4gVGhhdCBtZWFucyBpdCBkb2Vzbid0IHRvdWNoIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUgYXQgYWxsLiBTbywgdGhlIHF1ZXN0aW9uIGlzOiB3aHkgd2FzIGB1bnNoYXJlX2ZpbGVzKClgIG5lZWRlZCBpbiB0aGUgZmlyc3QgcGxhY2U/XG5cblRoZSBjb21tZW50IG1lbnRpb25lZCB0aGUgQ2VsbCBTUFUgY29yZWR1bXAgY29kZSBhbmQgaG93IGl0IHJlYWQgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuIEFoLCB0aGF0J3MgaXQhIGB1bnNoYXJlX2ZpbGVzKClgIHdhcyB0aGVyZSBiZWNhdXNlIHRoZSBjb3JlZHVtcCBjb2RlIHdhcyAqaXRlcmF0aW5nKiB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3JzIHRvIGZpbmQgYW5kIGR1bXAgU1BVIGNvbnRleHRzLiBJZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHdhcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMsIGl0ZXJhdGluZyBvdmVyIGl0IHdoaWxlIGFub3RoZXIgcHJvY2VzcyBtaWdodCBiZSBtb2RpZnlpbmcgaXQgY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBBIHN0YWJsZSBzbmFwc2hvdCB3YXMgbGlrZWx5IG5lY2Vzc2FyeSBmb3IgYSBjb25zaXN0ZW50IGNvcmVkdW1wLlxuXG5Ob3csIHNpbmNlIHRoZSBDZWxsIFNQVSBjb3JlZHVtcCBjb2RlIGhhcyBiZWVuIHJlbW92ZWQsIGB1bnNoYXJlX2ZpbGVzKClgICpzaG91bGRuJ3QqIGJlIG5lY2Vzc2FyeSBhbnltb3JlLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJcyB0aGlzIHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyIHdpdGggZnV6emluZz8gRGVmaW5pdGVseS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgZG9fY29yZWR1bXBgLiBFdmVuIHRob3VnaCBpdCdzIFwianVzdFwiIHJlbW92aW5nIGB1bnNoYXJlX2ZpbGVzKClgLCBpdCBzdWJ0bHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgZG9fY29yZWR1bXBgLCBlc3BlY2lhbGx5IHdoZW4gYENMT05FX0ZJTEVTYCBpcyB1c2VkIHdpdGhvdXQgYENMT05FX1RIUkVBRGAuXG5cbkknbGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19jb3JlZHVtcGAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gdGhlIGVudHJ5IHBvaW50IG11c3QgYmUgdGhyb3VnaCBgdmZzX2NvcmVkdW1wYCBvciBgY29yZWR1bXBfdGFza19leGl0YCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBUaW1lIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB2ZnNfY29yZWR1bXBgIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgZXN0YWJsaXNoIGEgZ29vZCB0ZXN0aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjo1NC44NzM2OTE5NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjA0MTMzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2NvcmVkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD01NTM9ZGlmZmVyZW50IHNldCBvZiBjcmVkZW50aWFscy4gIFRoaXMgaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1NS0gKiBgYHN5c19mYWNjZXNzYXQoKWBgLlxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0OjU1NjogKiBgYHZmc19jb3JlZHVtcCgpYGAuXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNTU3LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q9MjU0PWNvbnN05oyH6ZKI5LiK5pON5L2c77yM5Zug5q2k5LiN6ZyA6KaB6L+b6KGM57G75Z6L6L2s5o2i77yM5L2G6ZyA6KaB5Li05pe25pS+5byDY29uc3TpmZDlrprvvIzku6Xkvr/og73lpJ/kv67mlLlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzUtICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NDc2OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNDc3LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTEwODc9c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTExNTAtXFxuZnMvY29yZWR1bXAuYzoxMTUxOnZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuZnMvY29yZWR1bXAuYy0xMTUyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaD00OD1pbnQgZHVtcF91c2VyX3JhbmdlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTQ5LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oOjUwOmV4dGVybiB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKTtcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNjktI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKSB7fVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC03MS1cXG4tLVxcbmtlcm5lbC9zaWduYWwuYz0yODAzPWJvb2wgZ2V0X3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcXG4tLVxcbmtlcm5lbC9zaWduYWwuYy0zMDIzLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9zaWduYWwuYzozMDI0OlxcdFxcdFxcdHZmc19jb3JlZHVtcChcXHUwMDI2a3NpZy1cXHUwMDNlaW5mbyk7XFxua2VybmVsL3NpZ25hbC5jLTMwMjUtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjo1Ni40MzQxMTIxMjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyMzQwNzY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB2ZnNfY29yZWR1bXBgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHZmc19jb3JlZHVtcGAgaXMgd2hlcmUgdGhpcyB3aG9sZSB0aGluZyBraWNrcyBvZmYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHByaW1hcnkgZm9jdXMuIEFscmlnaHQsIEkndmUgY29uZmlybWVkIHRoYXQgYHZmc19jb3JlZHVtcGAgaXMgaW5kZWVkIGEgcHVibGljIEFQSSBlbnRyeSBwb2ludCBhbmQgbm90IHNvbWUgaW50ZXJuYWwsIHN0YXRpYyBmdW5jdGlvbiDigJMgZ29vZCwgdGhhdCdzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4gQnV0IGhvbGQgb24sIHRoZSBjYWxsIGdyYXBoIHNob3dzIGB2ZnNfY29yZWR1bXBgIGJlaW5nIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gTm93IHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBiZWluZyBpbnZva2VkLiBEb2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBoaW5nZSBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zPyBBaCwgeWVzLCBpdCBhcHBlYXJzIGBDT05GSUdfQ09SRURVTVBgIGlzIGEgcHJlcmVxdWlzaXRlLiBHb29kLCBnb29kIC0gSSdtIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTY5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6MDIuMjU3NTIyMDIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4MTY1NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT1JFRFVNUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTcxPWNvbmZpZyBCSU5GTVRfTUlTQ19CUEZcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE4NC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxODU6Y29uZmlnIENPUkVEVU1QXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTg2LVxcdGJvb2wgXFxcIkVuYWJsZSBjb3JlIGR1bXAgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjAzLjkxNTY5Mzc5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI4NDM3MjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQ29yZWR1bXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgYWJvdXQgYENPUkVEVU1QYC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHJlbW92YWwgb2YgU1BVLXNwZWNpZmljIGNvcmVkdW1wIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIHdvcnRoIGZ1enppbmc/XCIgTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuVGhlIHByb21wdCBwcm92aWRlcyBzb21lIGNsZWFyIGd1aWRlbGluZXM6IE9ubHkgY2hhbmdlcyB0aGF0IG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgcmVtb3ZlcyBhIGNhbGwgdG8gYHVuc2hhcmVfZmlsZXMoKWAgZnJvbSBgZG9fY29yZWR1bXAoKWAuIFRoaXMgKmRvZXMqIGFsdGVyIGV4ZWN1dGlvbiBmbG93OyBpdCdzIGEgZnVuY3Rpb24gY2FsbCByZW1vdmFsLCB3aGljaCBpcyBzaWduaWZpY2FudC4gQ3J1Y2lhbGx5LCBhbnkgcHJvY2VzcyBpbiBRRU1VIGNhbiBnZW5lcmF0ZSBhIGNvcmUgZHVtcCwgc28gdGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhhdCBjcml0ZXJpYSwgdGhpcyBsb29rcyBsaWtlIGEgYFdvcnRoRnV6emluZz10cnVlYCBzaXR1YXRpb24uXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jYCBhbmQgcmVsYXRlZCBjb2RlLiBUaGF0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhbmQgSSB3b24ndCBiZSBmdXp6aW5nIENlbGwuIFRoZSByZW1vdmFsIG9mIGB1bnNoYXJlX2ZpbGVzKClgIG9jY3VycyBpbiBgZnMvY29yZWR1bXAuY2Agd2hpY2ggaXMgZ2VuZXJpYy4gVGhlIGNvbW1lbnQgY2hhbmdlIGluIGBmcy9iaW5mbXRfZWxmLmNgIGlzIGNvc21ldGljLCBhbmQgaXJyZWxldmFudCB0byB0aGUgbWFpbiBjaGFuZ2UuIFRoZSAqb25seSogcmVsZXZhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgYHVuc2hhcmVfZmlsZXMoKWAuXG5cbk5vdywgZG9lcyBpdCAqcmVhbGx5KiBkZXNlcnZlIGZ1enppbmc/IFRoZSBwcm9tcHQgc2F5cywgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi51c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBJdCAqZG9lcyogbW9kaWZ5IGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXQgaXMgZXhlY3V0ZWQuIFNvLCB5ZXMsIHRoZSBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYHZmc19jb3JlZHVtcGAuIFRoZSBgQ09SRURVTVBgIGNvbmZpZyBzaG91bGQgYmUgZW5hYmxlZC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suIFdoYXQncyB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIGB1bnNoYXJlX2ZpbGVzKClgPyBUaGUgZnVuY3Rpb24gdW5zaGFyZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gSWYgYSBwcm9jZXNzIGR1bXBzIGNvcmUsIHdoYXQgaGFwcGVucyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9ycyBhcmVuJ3QgdW5zaGFyZWQ/IENvcmVkdW1wIHNob3VsZG4ndCBtb2RpZnkgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSBkaXJlY3RseSwgYXQgbGVhc3Qgbm90IGluIGFueSBvYnZpb3VzIHdheS4gV2FpdCwgZG9lcyBgZHVtcF9lbWl0YCB1c2UgYW55PyBObywgaXQgd3JpdGVzIHRvIGBjcHJtLVx1MDAzZWZpbGVgLiBXaGF0IGFib3V0IHVzZXItbW9kZSBoZWxwZXJzPyBgZG9fY29yZWR1bXBgIGNhbiBwaXBlIHRoZSBjb3JlIGR1bXAgdG8gYSB1c2VyLW1vZGUgaGVscGVyLCBhbmQgdGhpcyB1c2VzIGBjYWxsX3VzZXJtb2RlaGVscGVyX3NldHVwYCBhbmQgYGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlY2AuIFN0aWxsLCB0aGVyZSBpcyBubyBtb2RpZmljYXRpb24gb2YgdGhlIGR1bXBpbmcgcHJvY2VzcycgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLlxuXG5TbywgaXQgc2VlbXMgdGhhdCBgdW5zaGFyZV9maWxlcygpYCB3YXMgdHJ1bHkgb25seSBuZWVkZWQgZm9yIENlbGwgU1BVLCB3aGljaCBpdGVyYXRlZCBvdmVyIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIFRoaXMgcmVtb3ZhbCBpcyBlc3NlbnRpYWxseSBhIGNsZWFuLXVwLCB3aGljaCBpcyBnb29kLiBCdXQsIGdpdmVuIHRoYXQgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljLCB0aGUgcHJ1ZGVudCB0aGluZyB0byBkbyBpcyBtYXJrIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkp1c3Qgb25lIGZpbmFsIHF1ZXN0aW9uOiBJcyB0aGVyZSBhbnkgb3RoZXIgYXJjaGl0ZWN0dXJlIHRoYXQgcmVsaWVzIG9uIGB1bnNoYXJlX2ZpbGVzKClgIGR1cmluZyBjb3JlZHVtcD8gTGV0J3MgdmVyaWZ5IG5vIG90aGVyIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRzIGBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZWAgYW5kIGl0ZXJhdGVzIG92ZXIgdGhlIGZpbGUgZGVzY3JpcHRvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQ0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzoyMS4yMDAwNjgzOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTQ4NDcwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz01OTU9Y29uZmlnIEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVNcXG4tLVxcbmFyY2gvS2NvbmZpZy01OTktXFx0ICBhcmNoLXNwZWNpZmljIEVMRiBub3RlIHNlY3Rpb24gdG8gY29yZSBmaWxlcy4gSXQgbXVzdCBwcm92aWRlIHR3b1xcbmFyY2gvS2NvbmZpZzo2MDA6XFx0ICBmdW5jdGlvbnM6IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCkgYW5kXFxuYXJjaC9LY29uZmlnLTYwMS1cXHQgIGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSgpIHdoaWNoIGFyZSBpbnZva2VkIGJ5IHRoZSBFTEYgY29yZVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYz0xOTY2PWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5NS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jOjE5OTY6aW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpXFxuYXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYy0xOTk3LXtcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYz0xOTkwPXN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi0tXFxuZnMvYmluZm10X2VsZi5jLTIwMzItXFx0XFx0LyogRm9yIHg4NiB4c3RhdGUgKi9cXG5mcy9iaW5mbXRfZWxmLmM6MjAzMzpcXHRcXHRzeiArPSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xcbmZzL2JpbmZtdF9lbGYuYy0yMDM0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbGYuaD02Nj1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lbGYuaC02OC0jaWZuZGVmIENPTkZJR19BUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTXFxuaW5jbHVkZS9saW51eC9lbGYuaDo2OTpzdGF0aWMgaW5saW5lIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9lbGYuaC03MC1zdGF0aWMgaW5saW5lIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZWxmLmgtNzEtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2VsZi5oOjcyOmV4dGVybiBpbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZCk7XFxuaW5jbHVkZS9saW51eC9lbGYuaC03My1leHRlcm4gaW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6MjIuNzE0OTIxNTYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTQ0NDcyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgeDg2IHhzdGF0ZSBhbmQgQ29yZSBEdW1wcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIHg4NiB4c3RhdGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNhbGx5IGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAuIFRoYXQncyBpbnRlcmVzdGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIHNvIHdlJ3JlIGhhbmRsaW5nIHRoZSBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGNvcmUgZHVtcCBwcm9jZXNzLlwiIEdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgZG9pbmcgdGhhdC4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGl0ZXJhdGVzIG92ZXIgZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgdGhlIGNvcmUgZHVtcCBwcm9jZXNzLiBUaGlzIHdvdWxkIGJlIGNydWNpYWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgeHN0YXRlIGRhdGEgaXMgZ2V0dGluZyB3cml0dGVuIGRpcmVjdGx5LCBvciBpbmRpcmVjdGx5LiBUaGUgd2F5IGl0IGhhbmRsZXMgZmlsZSBkZXNjcmlwdG9ycyB3b3VsZCBkaWN0YXRlIHRoaXMgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzoyOS45MjkzNzEyMzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTkyNjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmM9MTk2Nj1pbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jLTE5OTUtXFxuYXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYzoxOTk2OmludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjMwLjY2NTMwMjM5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUwMzc0ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIENvcmUgRHVtcCBNZXRhZGF0YSBpbiB4ODYgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgb3VyIGNvcmUgZHVtcHMgaGFuZGxlIGV4dGVuZGVkIHN0YXRlIGRhdGEuIEknbSBmb2N1c2luZyBvbiB0aGUgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCB2YXJpYWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCBpdHMgZmxvYXRpbmctcG9pbnQgdW5pdCAoRlBVKSBvciBleHRlbmRlZCBzdGF0ZSAoeHN0YXRlKSBjb21wb25lbnRzLCB3aGljaCBhcmUgY3J1Y2lhbCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgcHJvY2Vzc29yIGNvbnRleHQgZHVyaW5nIGRlYnVnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11Y2ggc3BhY2Ugd2UgYWxsb2NhdGUgZm9yIHRoaXMgZXh0cmEgaW5mb3JtYXRpb24uIFRoaXMgd2lsbCBpbXBhY3QgdGhlIHNpemUgb2YgdGhlIGNvcmUgZHVtcCBmaWxlcywgYW5kIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlIGZvciBhbmFseXNpcyBpbiBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcuIEtub3dpbmcgdGhpcyBjYW4gaGVscCB3aGVuIG9wdGltaXppbmcgY29yZSBkdW1wIGNyZWF0aW9uLCBvciB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gbGFyZ2UgY29yZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MTMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzozNC44MTU2NzkzMDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MDpcXHRcXHRpZiAoKHNpemVvZihzdHJ1Y3QgeDg2X3hmZWF0X2NvbXBvbmVudCkgKiBudW1fcmVjb3JkcykgIT0gZW4ubl9kZXNjc3opXFxuMTk5MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4xOTkyOlxcdFxcbjE5OTM6XFx0XFx0cmV0dXJuIDA7XFxuMTk5NDpcXHR9XFxuMTk5NTpcXHRcXG4xOTk2OlxcdGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbjE5OTc6XFx0e1xcbjE5OTg6XFx0XFx0aW50IHNpemU7XFxuMTk5OTpcXHRcXG4yMDAwOlxcdFxcdGlmICghZnB1X3VzZXJfY2ZnLm1heF9mZWF0dXJlcylcXG4yMDAxOlxcdFxcdFxcdHJldHVybiAwO1xcbjIwMDI6XFx0XFxuMjAwMzpcXHRcXHQvKiAubm90ZSBoZWFkZXIgKi9cXG4yMDA0OlxcdFxcdHNpemUgID0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7XFxuMjAwNTpcXHRcXHQvKiAgTmFtZSBwbHVzIGFsaWdubWVudCB0byA0IGJ5dGVzICovXFxuMjAwNjpcXHRcXHRzaXplICs9IHJvdW5kdXAoc2l6ZW9mKG93bmVyX25hbWUpLCA0KTtcXG4yMDA3OlxcdFxcdHNpemUgKz0gZ2V0X3hzYXZlX2Rlc2Nfc2l6ZSgpO1xcbjIwMDg6XFx0XFxuMjAwOTpcXHRcXHRyZXR1cm4gc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6MzQuODE1Nzg4OTMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNjY1OTE4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBEdW1wIExvZ2ljIGFuZCBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGRvZXNuJ3QgbWVzcyBhcm91bmQgd2l0aCBpdGVyYXRpbmcgZmlsZSBkZXNjcmlwdG9ycywgaXQganVzdCBkdW1wcyBgeHN0YXRlYC4gVGhhdCBtZWFucyBgdW5zaGFyZV9maWxlcygpYCB3YXMgKm9ubHkqIG5lZWRlZCBmb3IgQ2VsbCBTUFUuIFJpZ2h0LCBzbyByZW1vdmluZyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHJpZ2h0LCBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gbXkgZm9jdXMgc3ltYm9scyBhcmUgc29saWQuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY29yZWR1bXBzLiBBIHF1aWNrIGNoZWNrIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMgb3IgYmV0dGVyIGZ1bmN0aW9uIHRvIHRhcmdldC4uLm5vcGUsIGBkb19jb3JlZHVtcGAgaXMgc3RhdGljLCBzbyBgdmZzX2NvcmVkdW1wYCBpcyB0aGUgZXhwb3J0ZWQgb25lIGFuZCB0aGUgYmVzdCBzeW1ib2wuXG5cbkFuZCB0aGUgY29uZmlnLCBgQ09SRURVTVBgLCB5ZXMgaXQncyBqdXN0IGBDT1JFRFVNUGAuIE5vIG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kIHRoZXJlLlxuXG5SaWdodCwgbGV0J3MgcmV2aWV3IHRoZSBcIndvcnRoIGZ1enppbmdcIiBjcml0ZXJpYSBhZ2Fpbi4gT2theSwgc28gdGhlIGNoYW5nZSBpcyBpbiBgZnMvY29yZWR1bXAuY2AsIHdoaWNoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUuIEFuZCB0aGUgcmVtb3ZhbCBvZiBgdW5zaGFyZV9maWxlcygpYCAqZG9lcyogYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHdoaWNoIHNob3VsZCBtYWtlIGl0IHdvcnRoeSBvZiBmdXp6aW5nLlxuXG5XYWl0LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBDb3VsZCB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgcmVtb3ZhbCBiZSBjb25zaWRlcmVkIGEgZGVjb3JhdGl2ZSBjaGFuZ2UsIG9yIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgKmZ1bmN0aW9uYWxseSogYWx0ZXIgZXhlY3V0aW9uPyBObywgdGhhdCdzIG5vdCByaWdodC4gYHVuc2hhcmVfZmlsZXMoKWAgYWxsb2NhdGVzIGEgbmV3IGZpbGUgZGVzY3JpcHRvciB0YWJsZSBpZiBpdCdzIHNoYXJlZC4gUmVtb3ZpbmcgaXQgbWVhbnMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSAqcmVtYWlucyogc2hhcmVkLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY2LCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjQzLjk4MjM4MjY2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjQxNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIHdoZW4gZHVtcGluZyBjb3JlIG9mIHByb2Nlc3NlcyB3aXRoIHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPUkVEVU1QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBDZWxsIFNQVSBjb3JlZHVtcCBzdXBwb3J0LCB3aGljaCBpcyBvYnNvbGV0ZSBhbmQgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4gSG93ZXZlciwgaXQgYWxzbyByZW1vdmVzIHRoZSBgdW5zaGFyZV9maWxlcygpYCBjYWxsIGZyb20gdGhlIGdlbmVyaWMgYGRvX2NvcmVkdW1wKClgIGZ1bmN0aW9uIGluIGBmcy9jb3JlZHVtcC5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIGhvdyBmaWxlIGRlc2NyaXB0b3IgdGFibGVzIGFyZSBoYW5kbGVkIGR1cmluZyBhIGNvcmVkdW1wICh0aGV5IGFyZSBubyBsb25nZXIgdW5zaGFyZWQgaWYgc2hhcmVkIHZpYSBDTE9ORV9GSUxFUykuIFRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpbiBRRU1VIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgd2hlbiBkdW1waW5nIGNvcmUgb2YgcHJvY2Vzc2VzIHdpdGggc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjQ0LjA1MzAyODc5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTIzOTIwMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzo0NC4wNTM0MTc5NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTYzMTE5OTkxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwdXJlbHkgcmVtb3ZlcyB0aGUgU1BVIGNvcmVkdW1wIHN1cHBvcnQgZnJvbSB0aGUgUG93ZXJQQyBDZWxsIGFyY2hpdGVjdHVyZS4gTm8gbmV3IGNvZGUgaXMgYWRkZWQsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU1ZTZmMzExM2Y2NWI5NTZiNGFiMDk5MTYwN2NiMmI4NDY2YjJiZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjoyMTozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcbmluZGV4IDI1ODBlMjdlNDMyODcuLjQwYzg3NGZlMmY1M2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xuKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcbkBAIC0xNjAsNyArMTYwLDYgQEAgY29uZmlnIFBQQ1xuIFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4gXHRzZWxlY3QgQVJDSF9IQVNfVkRTT19BUkNIX0RBVEFcbiBcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuLVx0c2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFXG4gXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4gXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcdGlmIFBQQ19SQURJWF9NTVVcbiBcdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaFxuaW5kZXggYmI0Yjk0NDQ0ZDNlOC4uNWRjOGM0OTIzZWIxZCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXG5AQCAtMTIzLDEyICsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0KDB4N2ZmIFx1MDAzZVx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkgOiBcXFxuIFx0KDB4M2ZmZmYgXHUwMDNlXHUwMDNlIChQQUdFX1NISUZUIC0gMTIpKSlcbiBcbi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFXG4tLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFLiBOb3RlIG5hbWUgaXMgXCJTUFUvXHUwMDNjZmRcdTAwM2UvXHUwMDNjZmlsZW5hbWVcdTAwM2VcIi4gKi9cbi0jZGVmaW5lIE5UX1NQVVx0XHQxXG4tXG4tI2VuZGlmIC8qIENPTkZJR19TUFVfQkFTRSAqL1xuLVxuICNpZmRlZiBDT05GSUdfUFBDNjRcbiBcbiAjZGVmaW5lIGdldF9jYWNoZV9nZW9tZXRyeShsZXZlbCkgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcbmluZGV4IDk2YWQ0NTEwYzg5NTQuLjcxNTIyODViNjI2OGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxuQEAgLTIxMCwxNSArMjEwLDEyIEBAIGV4dGVybiBsb25nIHNwdV9zeXNfY2FsbGJhY2soc3RydWN0IHNwdV9zeXNjYWxsX2Jsb2NrICpzKTtcbiBcbiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqL1xuIHN0cnVjdCBmaWxlO1xuLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4gc3RydWN0IHNwdWZzX2NhbGxzIHtcbiBcdGxvbmcgKCpjcmVhdGVfdGhyZWFkKShjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBmaWxlICpuZWlnaGJvcik7XG4gXHRsb25nICgqc3B1X3J1bikoc3RydWN0IGZpbGUgKmZpbHAsIF9fdTMyIF9fdXNlciAqdW5wYyxcbiBcdFx0XHRcdFx0XHRfX3UzMiBfX3VzZXIgKnVzdGF0dXMpO1xuLVx0aW50ICgqY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSkodm9pZCk7XG4tXHRpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4gXHR2b2lkICgqbm90aWZ5X3NwdXNfYWN0aXZlKSh2b2lkKTtcbiBcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuaW5kZXggZGI2NWJmY2QxZTc0OS4uNmJkMjY4MTVjMzMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuQEAgLTEwLDcgKzEwLDYgQEAgY29uZmlnIFNQVV9GU1xuIFx0dHJpc3RhdGUgXCJTUFUgZmlsZSBzeXN0ZW1cIlxuIFx0ZGVmYXVsdCBtXG4gXHRkZXBlbmRzIG9uIFBQQ19DRUxMXG4tXHRkZXBlbmRzIG9uIENPUkVEVU1QXG4gXHRzZWxlY3QgU1BVX0JBU0VcbiBcdGhlbHBcbiBcdCAgVGhlIFNQVSBmaWxlIHN5c3RlbSBpcyB1c2VkIHRvIGFjY2VzcyBTeW5lcmdpc3RpYyBQcm9jZXNzaW5nXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG5pbmRleCAwMDA4OTRlMDdiMDI3Li44YmU4MTIwN2U4ODZhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmNcbkBAIC04OCwyNiArODgsNiBAQCBTWVNDQUxMX0RFRklORTMoc3B1X3J1bixpbnQsIGZkLCBfX3UzMiBfX3VzZXIgKiwgdW5wYywgX191MzIgX191c2VyICosIHVzdGF0dXMpXG4gXHRyZXR1cm4gY2FsbHMtXHUwMDNlc3B1X3J1bihmZF9maWxlKGFyZyksIHVucGMsIHVzdGF0dXMpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpXG4te1xuLVx0Q0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpO1xuLVx0aWYgKCFjYWxscylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4gY2FsbHMtXHUwMDNlY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xuLX1cbi1cbi1pbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0Q0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpO1xuLVx0aWYgKCFjYWxscylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4gY2FsbHMtXHUwMDNlY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoY3BybSk7XG4tfVxuLSNlbmRpZlxuLVxuIHZvaWQgbm90aWZ5X3NwdXNfYWN0aXZlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHNwdWZzX2NhbGxzICpjYWxscztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbmluZGV4IDUyZTRjODBlYzhkMDMuLjYwMzE5ZDRmZjI1YTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZVxuQEAgLTQsNyArNCw2IEBAIG9iai0kKENPTkZJR19TUFVfRlMpICs9IHNwdWZzLm9cbiBzcHVmcy15ICs9IGlub2RlLm8gZmlsZS5vIGNvbnRleHQubyBzeXNjYWxscy5vXG4gc3B1ZnMteSArPSBzY2hlZC5vIGJhY2tpbmdfb3BzLm8gaHdfb3BzLm8gcnVuLm8gZ2FuZy5vXG4gc3B1ZnMteSArPSBzd2l0Y2gubyBmYXVsdC5vIGxzY3NhX2FsbG9jLm9cbi1zcHVmcy0kKENPTkZJR19DT1JFRFVNUCkgKz0gY29yZWR1bXAub1xuIFxuICMgbWFnaWMgZm9yIHRoZSB0cmFjZSBldmVudHNcbiBDRkxBR1Nfc2NoZWQubyA6PSAtSSQoc3JjKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMzAxZWU3ZDhiN2RmMC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDE4MyArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbi0vKlxuLSAqIFNQVSBjb3JlIGR1bXAgY29kZVxuLSAqXG4tICogKEMpIENvcHlyaWdodCAyMDA2IElCTSBDb3JwLlxuLSAqXG4tICogQXV0aG9yOiBEd2F5bmUgR3JhbnQgTWNDb25uZWxsIFx1MDAzY2RlY2ltYWxAdXMuaWJtLmNvbVx1MDAzZVxuLSAqL1xuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2VsZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZmR0YWJsZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRzLmhcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcInNwdWZzLmhcIlxuLVxuLXN0YXRpYyBpbnQgc3B1ZnNfY3R4X25vdGVfc2l6ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGRmZClcbi17XG4tXHRpbnQgaSwgc3osIHRvdGFsID0gMDtcbi1cdGNoYXIgKm5hbWU7XG4tXHRjaGFyIGZ1bGxuYW1lWzgwXTtcbi1cbi1cdGZvciAoaSA9IDA7IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHtcbi1cdFx0bmFtZSA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZTtcbi1cdFx0c3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7XG4tXG4tXHRcdHNwcmludGYoZnVsbG5hbWUsIFwiU1BVLyVkLyVzXCIsIGRmZCwgbmFtZSk7XG4tXG4tXHRcdHRvdGFsICs9IHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpO1xuLVx0XHR0b3RhbCArPSByb3VuZHVwKHN0cmxlbihmdWxsbmFtZSkgKyAxLCA0KTtcbi1cdFx0dG90YWwgKz0gcm91bmR1cChzeiwgNCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgbWF0Y2hfY29udGV4dChjb25zdCB2b2lkICp2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpZiAoZmlsZS1cdTAwM2VmX29wICE9IFx1MDAyNnNwdWZzX2NvbnRleHRfZm9wcylcbi1cdFx0cmV0dXJuIDA7XG4tXHRjdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLVx1MDAzZWlfY3R4O1xuLVx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1BVX0NSRUFURV9OT1NDSEVEKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBmZCArIDE7XG4tfVxuLVxuLS8qXG4tICogVGhlIGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5vdGVzIGZvciBDZWxsIGFyZSB2YXJpb3VzXG4tICogY29udGV4dCBmaWxlcyBpbiB0aGUgc3B1IGNvbnRleHQuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBhbmQgc2Vlc1xuLSAqIGlmIHRoZXkgYXJlIGEgZGlyZWN0b3J5IGluIHNwdWZzLiAgSW4gdGhhdCBjYXNlIHdlIHVzZSBzcHVmc1xuLSAqIGludGVybmFsIGZ1bmN0aW9uYWxpdHkgdG8gZHVtcCB0aGVtIHdpdGhvdXQgbmVlZGluZyB0byBhY3R1YWxseVxuLSAqIG9wZW4gdGhlIGZpbGVzLlxuLSAqL1xuLS8qXG4tICogZGVzY3JpcHRvciB0YWJsZSBpcyBub3Qgc2hhcmVkLCBzbyBmaWxlcyBjYW4ndCBjaGFuZ2Ugb3IgZ28gYXdheS5cbi0gKi9cbi1zdGF0aWMgc3RydWN0IHNwdV9jb250ZXh0ICpjb3JlZHVtcF9uZXh0X2NvbnRleHQoaW50ICpmZClcbi17XG4tXHRzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi1cdGludCBuID0gaXRlcmF0ZV9mZChjdXJyZW50LVx1MDAzZWZpbGVzLCAqZmQsIG1hdGNoX2NvbnRleHQsIE5VTEwpO1xuLVx0aWYgKCFuKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdCpmZCA9IG4gLSAxO1xuLVxuLVx0ZmlsZSA9IGZnZXRfcmF3KCpmZCk7XG4tXHRpZiAoZmlsZSkge1xuLVx0XHRjdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLVx1MDAzZWlfY3R4O1xuLVx0XHRnZXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdFx0ZnB1dChmaWxlKTtcbi1cdH1cbi1cbi1cdHJldHVybiBjdHg7XG4tfVxuLVxuLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpbnQgc2l6ZSA9IDAsIHJjLCBmZDtcbi1cbi1cdGZkID0gMDtcbi1cdHdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KFx1MDAyNmZkKSkgIT0gTlVMTCkge1xuLVx0XHRyYyA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7XG4tXHRcdGlmIChyYykge1xuLVx0XHRcdHB1dF9zcHVfY29udGV4dChjdHgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdHJjID0gc3B1ZnNfY3R4X25vdGVfc2l6ZShjdHgsIGZkKTtcbi1cdFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tXHRcdFx0cHV0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0c2l6ZSArPSByYztcbi1cbi1cdFx0Lyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqL1xuLVx0XHRmZCsrO1xuLVx0XHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdH1cbi1cbi1cdHJldHVybiBzaXplO1xuLX1cbi1cbi1zdGF0aWMgaW50IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGksXG4tXHRcdFx0XHQgIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIGludCBkZmQpXG4te1xuLVx0c2l6ZV90IHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplO1xuLVx0Y2hhciBmdWxsbmFtZVs4MF07XG4tXHRzdHJ1Y3QgZWxmX25vdGUgZW47XG4tXHRpbnQgcmV0O1xuLVxuLVx0c3ByaW50ZihmdWxsbmFtZSwgXCJTUFUvJWQvJXNcIiwgZGZkLCBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUpO1xuLVx0ZW4ubl9uYW1lc3ogPSBzdHJsZW4oZnVsbG5hbWUpICsgMTtcbi1cdGVuLm5fZGVzY3N6ID0gc3o7XG4tXHRlbi5uX3R5cGUgPSBOVF9TUFU7XG4tXG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBcdTAwMjZlbiwgc2l6ZW9mKGVuKSkpXG4tXHRcdHJldHVybiAtRUlPO1xuLVx0aWYgKCFkdW1wX2VtaXQoY3BybSwgZnVsbG5hbWUsIGVuLm5fbmFtZXN6KSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAoIWR1bXBfYWxpZ24oY3BybSwgNCkpXG4tXHRcdHJldHVybiAtRUlPO1xuLVxuLVx0aWYgKHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcCkge1xuLVx0XHRyZXQgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXAoY3R4LCBjcHJtKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fSBlbHNlIHtcbi1cdFx0Y2hhciBidWZbMzJdO1xuLVxuLVx0XHRyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIjB4JS4xNmxseFwiLFxuLVx0XHRcdCAgICAgICBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmdldChjdHgpKTtcbi1cdFx0aWYgKHJldCBcdTAwM2U9IHNpemVvZihidWYpKVxuLVx0XHRcdHJldHVybiBzaXplb2YoYnVmKTtcbi1cbi1cdFx0LyogY291bnQgdHJhaWxpbmcgdGhlIE5VTEw6ICovXG4tXHRcdGlmICghZHVtcF9lbWl0KGNwcm0sIGJ1ZiwgcmV0ICsgMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4tXHRkdW1wX3NraXBfdG8oY3BybSwgcm91bmR1cChjcHJtLVx1MDAzZXBvcyAtIHJldCArIHN6LCA0KSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4taW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpbnQgZmQsIGosIHJjO1xuLVxuLVx0ZmQgPSAwO1xuLVx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XG4tXHRcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHJldHVybiByYztcbi1cbi1cdFx0Zm9yIChqID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtqXS5uYW1lICE9IE5VTEw7IGorKykge1xuLVx0XHRcdHJjID0gc3B1ZnNfYXJjaF93cml0ZV9ub3RlKGN0eCwgaiwgY3BybSwgZmQpO1xuLVx0XHRcdGlmIChyYykge1xuLVx0XHRcdFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcbi1cdFx0XHRcdHJldHVybiByYztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbi1cdFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcbi1cbi1cdFx0Lyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqL1xuLVx0XHRmZCsrO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jXG5pbmRleCBkZTc0OTQ3NDhmZWNkLi45OGM0N2JhZmFmNjc4IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuQEAgLTksNyArOSw2IEBAXG4gXG4gI3VuZGVmIERFQlVHXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY29yZWR1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzAsMTQgKzEyOSw2IEBAIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2F0dHJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kdW1wX2VtaXQoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdm9pZCAqYnVmLFxuLVx0XHRzaXplX3Qgc2l6ZSlcbi17XG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdHJldHVybiBzaXplO1xuLX1cbi1cbiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdClcdFxcXG4gc3RhdGljIGludCBfX2ZvcHMgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTE4MCwxMiArMTcxLDYgQEAgc3B1ZnNfbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Rcbi1zcHVmc19tZW1fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC1cdTAwM2VvcHMtXHUwMDNlZ2V0X2xzKGN0eCksIExTX1NJWkUpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX21lbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRcdFx0c2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKVxuQEAgLTQ2NiwxMyArNDUxLDYgQEAgc3B1ZnNfcmVnc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90XG4tc3B1ZnNfcmVnc19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgY3R4LVx1MDAzZWNzYS5sc2NzYS1cdTAwM2VncHJzLFxuLVx0XHRcdCAgICAgICBzaXplb2YoY3R4LVx1MDAzZWNzYS5sc2NzYS1cdTAwM2VncHJzKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90XG4gc3B1ZnNfcmVnc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpXG5AQCAtNTIzLDEzICs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdFxuLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX2ZwY3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsXG4gXHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKiBwb3MpXG5AQCAtOTUzLDE1ICs5MjQsNiBAQCBzcHVmc19zaWduYWwxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdGlmICghY3R4LVx1MDAzZWNzYS5zcHVfY2hubGNudF9SV1szXSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdLFxuLVx0XHRcdCAgICAgICBzaXplb2YoY3R4LVx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbM10pKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgX19zcHVmc19zaWduYWwxX3JlYWQoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0c2l6ZV90IGxlbilcbiB7XG5AQCAtMTA4NiwxNSArMTA0OCw2IEBAIHNwdWZzX3NpZ25hbDJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19zaWduYWwyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0aWYgKCFjdHgtXHUwMDNlY3NhLnNwdV9jaG5sY250X1JXWzRdKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2Y3R4LVx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbNF0sXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1s0XSkpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDJfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRzaXplX3QgbGVuKVxuIHtcbkBAIC0xOTI0LDE1ICsxODc3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY2Fwc19mb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweDAwMDBmZikpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByb2IucHVfbWJfUixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EucHJvYi5wdV9tYl9SKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX21ib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4ge1xuQEAgLTE5NjIsMTUgKzE5MDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19tYm94X2luZm9fZm9wcyA9IHtcbiBcdC5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlayxcbiB9O1xuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX2lib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdGlmICghKGN0eC1cdTAwM2Vjc2EucHJvYi5tYl9zdGF0X1IgXHUwMDI2IDB4ZmYwMDAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2EucHJpdjIucHVpbnRfbWJfUixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EucHJpdjIucHVpbnRfbWJfUikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMDA1LDEzICsxOTQwLDYgQEAgc3RhdGljIHNpemVfdCBzcHVmc193Ym94X2luZm9fY250KHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KVxuIFx0cmV0dXJuICg0IC0gKChjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweDAwZmYwMCkgXHUwMDNlXHUwMDNlIDgpKSAqIHNpemVvZih1MzIpO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2Euc3B1X21haWxib3hfZGF0YSxcbi1cdFx0XHRzcHVmc193Ym94X2luZm9fY250KGN0eCkpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMDU5LDE1ICsxOTg3LDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X2RtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHN0cnVjdCBzcHVfZG1hX2luZm8gaW5mbztcbi1cbi1cdHNwdWZzX2dldF9kbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMTEyLDE1ICsyMDMxLDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X3Byb3h5ZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3Byb3h5ZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRzdHJ1Y3Qgc3B1X3Byb3h5ZG1hX2luZm8gaW5mbztcbi1cbi1cdHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKGN0eCwgXHUwMDI2aW5mbyk7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3Byb3h5ZG1hX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yNTgwLDI3ICsyNDkwLDMgQEAgY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7XG4gXHR7IFwiLmN0eFwiLCBcdTAwMjZzcHVmc19jdHhfZm9wcywgMDQ0NCwgfSxcbiBcdHt9LFxuIH07XG4tXG4tY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW10gPSB7XG4tXHR7IFwicmVnc1wiLCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sXG4tXHR7IFwiZnBjclwiLCBzcHVmc19mcGNyX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSxcbi1cdHsgXCJsc2xyXCIsIE5VTEwsIHNwdWZzX2xzbHJfZ2V0LCAxOSB9LFxuLVx0eyBcImRlY3JcIiwgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sXG4tXHR7IFwiZGVjcl9zdGF0dXNcIiwgTlVMTCwgc3B1ZnNfZGVjcl9zdGF0dXNfZ2V0LCAxOSB9LFxuLVx0eyBcIm1lbVwiLCBzcHVmc19tZW1fZHVtcCwgTlVMTCwgTFNfU0laRSwgfSxcbi1cdHsgXCJzaWduYWwxXCIsIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCJzaWduYWwxX3R5cGVcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMV90eXBlX2dldCwgMTkgfSxcbi1cdHsgXCJzaWduYWwyXCIsIHNwdWZzX3NpZ25hbDJfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCJzaWduYWwyX3R5cGVcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSxcbi1cdHsgXCJldmVudF9tYXNrXCIsIE5VTEwsIHNwdWZzX2V2ZW50X21hc2tfZ2V0LCAxOSB9LFxuLVx0eyBcImV2ZW50X3N0YXR1c1wiLCBOVUxMLCBzcHVmc19ldmVudF9zdGF0dXNfZ2V0LCAxOSB9LFxuLVx0eyBcIm1ib3hfaW5mb1wiLCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCJpYm94X2luZm9cIiwgc3B1ZnNfaWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwid2JveF9pbmZvXCIsIHNwdWZzX3dib3hfaW5mb19kdW1wLCBOVUxMLCA0ICogc2l6ZW9mKHUzMil9LFxuLVx0eyBcImRtYV9pbmZvXCIsIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sXG4tXHR7IFwicHJveHlkbWFfaW5mb1wiLCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAsXG4tXHRcdFx0ICAgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcHJveHlkbWFfaW5mbyl9LFxuLVx0eyBcIm9iamVjdC1pZFwiLCBOVUxMLCBzcHVmc19vYmplY3RfaWRfZ2V0LCAxOSB9LFxuLVx0eyBcIm5wY1wiLCBOVUxMLCBzcHVmc19ucGNfZ2V0LCAxOSB9LFxuLVx0eyBOVUxMIH0sXG4tfTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5pbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5AQCAtMjMyLDEzICsyMzIsOSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107XG4gXG4gLyogc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24gKi9cbiBleHRlcm4gc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzO1xuLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4gbG9uZyBzcHVmc19ydW5fc3B1KHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCB1MzIgKm5wYywgdTMyICpzdGF0dXMpO1xuIGxvbmcgc3B1ZnNfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYXRoICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4gXHRcdFx0dW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7XG4tLyogRUxGIGNvcmVkdW1wIGNhbGxiYWNrcyBmb3Igd3JpdGluZyBTUFUgRUxGIG5vdGVzICovXG4tZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpO1xuLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY29udGV4dF9mb3BzO1xuIFxuQEAgLTMzNSwxNCArMzMxLDYgQEAgdm9pZCBzcHVmc19zdG9wX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSwgaW50IGlycSk7XG4gdm9pZCBzcHVmc19tZmNfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1KTtcbiB2b2lkIHNwdWZzX2RtYV9jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUsIGludCB0eXBlKTtcbiBcbi1zdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHtcbi1cdGNoYXIgKm5hbWU7XG4tXHRzc2l6ZV90ICgqZHVtcCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuLVx0dTY0ICgqZ2V0KShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCk7XG4tXHRzaXplX3Qgc2l6ZTtcbi19O1xuLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXTtcbi1cbiBleHRlcm4gaW50IHNwdV9pbml0X2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpO1xuIGV4dGVybiB2b2lkIHNwdV9maW5pX2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpO1xuIGV4dGVybiBpbnQgc3B1X3NhdmUoc3RydWN0IHNwdV9zdGF0ZSAqcHJldiwgc3RydWN0IHNwdSAqc3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXG5pbmRleCBlYTRiYTFiNmNlNmE5Li5iNmRlMzcxNTBlNzM0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXG5AQCAtODIsOCArODIsNCBAQCBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgc3B1ZnNfY2FsbHMgPSB7XG4gXHQuc3B1X3J1biA9IGRvX3NwdV9ydW4sXG4gXHQubm90aWZ5X3NwdXNfYWN0aXZlID0gZG9fbm90aWZ5X3NwdXNfYWN0aXZlLFxuIFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUgPSBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplLFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmNcbmluZGV4IDA2ZDBkZjEwNTM4MjMuLmRiMzJiYjQwYTg2NzAgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfZWxmLmNcbisrKyBiL2ZzL2JpbmZtdF9lbGYuY1xuQEAgLTIwMjksNyArMjAyOSw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuIFx0e1xuIFx0XHRzaXplX3Qgc3ogPSBpbmZvLnNpemU7XG4gXG4tXHRcdC8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovXG4rXHRcdC8qIEZvciB4ODYgeHN0YXRlICovXG4gXHRcdHN6ICs9IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7XG4gXG4gXHRcdHBoZHI0bm90ZSA9IGttYWxsb2Nfb2JqKCpwaGRyNG5vdGUpO1xuQEAgLTIwOTMsNyArMjA5Myw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuIFx0aWYgKCF3cml0ZV9ub3RlX2luZm8oXHUwMDI2aW5mbywgY3BybSkpXG4gXHRcdGdvdG8gZW5kX2NvcmVkdW1wO1xuIFxuLVx0LyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi9cbitcdC8qIEZvciB4ODYgeHN0YXRlICovXG4gXHRpZiAoZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pKVxuIFx0XHRnb3RvIGVuZF9jb3JlZHVtcDtcbiBcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggYWMzY2Q3NDgwOGM2NC4uYTQ5ZjJmZDZiZTI4MCAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbisrKyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC0xMTE4LDExICsxMTE4LDYgQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovXG4tXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXG4tXHRpZiAodW5zaGFyZV9maWxlcygpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRpZiAoKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX0tFUk5FTCkgXHUwMDI2XHUwMDI2ICFjb3JlZHVtcF93cml0ZShjbiwgY3BybSwgYmluZm10KSlcbiBcdFx0cmV0dXJuO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6NDQuMDUzNDE4NzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzMTE5NzkzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogU1BVIENvcmVkdW1wIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCBzZXJpZXMgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0ICpyZW1vdmFsKiBvZiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIEl0J3MgYSBjbGVhbi11cCwgbm90aGluZyBtb3JlLlxuXG5MZXQncyBicmVhayBkb3duIG15IHJlYXNvbmluZzogdGhlIHBhdGNoIGlzIGRlbGV0aW5nIHRoZSBgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNgIGZpbGUgYW5kIHRoZW4gcmVtb3ZpbmcgYXNzb2NpYXRlZCBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgZnJvbSBhIHdob2xlIGJ1bmNoIG9mIG90aGVyIGZpbGVzOiBgc3B1ZnMuaGAsIGBmaWxlLmNgLCBgc3lzY2FsbHMuY2AsIGBzcHVfc3lzY2FsbHMuY2AsIGBzcHUuaGAsIGFuZCBgZWxmLmhgLiBUaGVyZSdzIGFsc28gYSByZW1vdmFsIG9mIGEgY2FsbCB0byBgdW5zaGFyZV9maWxlcygpYCBpbiBgZnMvY29yZWR1bXAuY2Agd2hpY2ggd2FzIHNwZWNpZmljYWxseSBmb3IgdGhhdCBDZWxsIFNQVSBjb3JlZHVtcCBmdW5jdGlvbmFsaXR5LlxuXG5JbXBvcnRhbnRseSwgKm5vdGhpbmcgbmV3KiBpcyBiZWluZyBhZGRlZC4gVGhlcmUncyBubyBuZXcgY29kZSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvIGxlYWtzLiBBbmQgdGhlIGNvcmVkdW1wIG5vdGVzIHdyaXRpbmcsIG5vdyBnb25lLCBtZWFucyBsZXNzIGRhdGEgYmVpbmcgd3JpdHRlbiB0byBjb3JlZHVtcHMsIHdoaWNoIGZ1cnRoZXIgZWxpbWluYXRlcyBhbnkgcG90ZW50aWFsIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2luZy5cblxuVG8gc29saWRpZnkgbXkgdGhpbmtpbmcsIEkndmUgY2hlY2tlZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSByZW1vdmFsczpcblxuKiAgIEl0IHJlbW92ZXMgYHNlbGVjdCBBUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTIGlmIFNQVV9CQVNFYCBpbiB0aGUgYEtjb25maWdgIGZpbGVzLlxuKiAgIEl0IHJlbW92ZXMgYE5UX1NQVWAgZnJvbSBgZWxmLmhgXG4qICAgSXQgcmVtb3ZlcyBgY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZWAgYW5kIGBjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAgZnJvbSBgc3B1ZnNfY2FsbHNgIGluIGBzcHUuaGBcbiogICBJdCByZW1vdmVzIGBkZXBlbmRzIG9uIENPUkVEVU1QYCBmcm9tIGBTUFVfRlNgIGluIGBLY29uZmlnYFxuKiAgIEl0IHJlbW92ZXMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAgZnJvbSBgc3B1X3N5c2NhbGxzLmNgXG4qICAgSXQgcmVtb3ZlcyBgY29yZWR1bXAub2AgZnJvbSBgTWFrZWZpbGVgXG4qICAgSXQgZGVsZXRlcyBgY29yZWR1bXAuY2BcbiogICBJdCByZW1vdmVzIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb3JlZHVtcCBvcGVyYXRpb25zIGZyb20gYGZpbGUuY2AuXG4qICAgSXQgcmVtb3ZlcyBjb3JlZHVtcCByZWxhdGVkIGRlY2xhcmF0aW9ucyBmcm9tIGBzcHVmcy5oYC5cbiogICBJdCByZW1vdmVzIGNvcmVkdW1wIGNhbGxiYWNrcyBmcm9tIGBzeXNjYWxscy5jYC5cbiogICBJdCB1cGRhdGVzIGNvbW1lbnRzIGluIGBiaW5mbXRfZWxmLmNgXG4qICAgSXQgcmVtb3ZlcyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBjb3JlZHVtcC5jYC5cblxuQWdhaW4sIHRoZSBjb3JlIHBvaW50IGlzIHRoYXQgdGhpcyBpcyBhICpwdXJlbHkqIGEgcmVtb3ZhbCBwYXRjaC4gVGhlcmUgYXJlIG5vIG5ldyBmZWF0dXJlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIG5ldyBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBBbGwgdGhpcyBwYXRjaCBkb2VzIGlzIGNsZWFuIHVwIG9sZCwgdW51c2VkIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkgZm9yIFNQVS5cblxuU28sIHN1bW1pbmcgaXQgdXA6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIGRvbid0IHNlZSBhbnkgcmVhc29uIHRvIGRlZGljYXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIHRvIHRoaXM7IHRoZXJlIGlzIG5vIG5ldyBjb2RlIHRvIGFzc2Vzcy4gSXQncyBhIHNpbXBsZSwgc2FmZSByZW1vdmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDAzLCJPdXRwdXRUb2tlbnMiOjkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjQ6MDAuMzY1NDAwOTk2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 16:20:21 +0000 UTC FinishedAt: 2026-08-26 16:24:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66498c75b4f8017f62d720d9b59675bdf3abce91", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP" ], "series_id": "01fc7aa0-e180-45df-90b5-3e349208cb8c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vfs_coredump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHB1cmVseSByZW1vdmVzIHRoZSBTUFUgY29yZWR1bXAgc3VwcG9ydCBmcm9tIHRoZSBQb3dlclBDIENlbGwgYXJjaGl0ZWN0dXJlLiBObyBuZXcgY29kZSBpcyBhZGRlZCwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIHNlbnQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgYXJlIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVuIGR1bXBpbmcgY29yZSBvZiBwcm9jZXNzZXMgd2l0aCBzaGFyZWQgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDU1ZTZmMzExM2Y2NWI5NTZiNGFiMDk5MTYwN2NiMmI4NDY2YjJiZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjoyMTozNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMTYwLDcgJiM0MzsxNjAsNiBAQCBjb25maWcgUFBDXG4gXHRzZWxlY3QgQVJDSF9IQVNfVUJTQU5cbiBcdHNlbGVjdCBBUkNIX0hBU19WRFNPX0FSQ0hfREFUQVxuIFx0c2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4tXHRzZWxlY3QgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFUyAgICAgICAgaWYgU1BVX0JBU0VcbiBcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcbiBcdHNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVx0aWYgUFBDX1JBRElYX01NVVxuIFx0c2VsZWN0IEFSQ0hfTUlHSFRfSEFWRV9QQ19QQVJQT1JUXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXG5pbmRleCBiYjRiOTQ0NDRkM2U4Li41ZGM4YzQ5MjNlYjFkIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcbkBAIC0xMjMsMTIgJiM0MzsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0KDB4N2ZmIFx1MDAzZVx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkgOiBcXFxuIFx0KDB4M2ZmZmYgXHUwMDNlXHUwMDNlIChQQUdFX1NISUZUIC0gMTIpKSlcbiBcbi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFXG4tLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFLiBOb3RlIG5hbWUgaXMgXCYjMzQ7U1BVL1x1MDAzY2ZkXHUwMDNlL1x1MDAzY2ZpbGVuYW1lXHUwMDNlXCYjMzQ7LiAqL1xuLSNkZWZpbmUgTlRfU1BVXHRcdDFcbi1cbi0jZW5kaWYgLyogQ09ORklHX1NQVV9CQVNFICovXG4tXG4gI2lmZGVmIENPTkZJR19QUEM2NFxuIFxuICNkZWZpbmUgZ2V0X2NhY2hlX2dlb21ldHJ5KGxldmVsKSBcXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxuaW5kZXggOTZhZDQ1MTBjODk1NC4uNzE1MjI4NWI2MjY4ZiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oXG5AQCAtMjEwLDE1ICYjNDM7MjEwLDEyIEBAIGV4dGVybiBsb25nIHNwdV9zeXNfY2FsbGJhY2soc3RydWN0IHNwdV9zeXNjYWxsX2Jsb2NrICpzKTtcbiBcbiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqL1xuIHN0cnVjdCBmaWxlO1xuLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4gc3RydWN0IHNwdWZzX2NhbGxzIHtcbiBcdGxvbmcgKCpjcmVhdGVfdGhyZWFkKShjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBmaWxlICpuZWlnaGJvcik7XG4gXHRsb25nICgqc3B1X3J1bikoc3RydWN0IGZpbGUgKmZpbHAsIF9fdTMyIF9fdXNlciAqdW5wYyxcbiBcdFx0XHRcdFx0XHRfX3UzMiBfX3VzZXIgKnVzdGF0dXMpO1xuLVx0aW50ICgqY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSkodm9pZCk7XG4tXHRpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4gXHR2b2lkICgqbm90aWZ5X3NwdXNfYWN0aXZlKSh2b2lkKTtcbiBcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuaW5kZXggZGI2NWJmY2QxZTc0OS4uNmJkMjY4MTVjMzMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuQEAgLTEwLDcgJiM0MzsxMCw2IEBAIGNvbmZpZyBTUFVfRlNcbiBcdHRyaXN0YXRlIFwmIzM0O1NQVSBmaWxlIHN5c3RlbVwmIzM0O1xuIFx0ZGVmYXVsdCBtXG4gXHRkZXBlbmRzIG9uIFBQQ19DRUxMXG4tXHRkZXBlbmRzIG9uIENPUkVEVU1QXG4gXHRzZWxlY3QgU1BVX0JBU0VcbiBcdGhlbHBcbiBcdCAgVGhlIFNQVSBmaWxlIHN5c3RlbSBpcyB1c2VkIHRvIGFjY2VzcyBTeW5lcmdpc3RpYyBQcm9jZXNzaW5nXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG5pbmRleCAwMDA4OTRlMDdiMDI3Li44YmU4MTIwN2U4ODZhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmNcbkBAIC04OCwyNiAmIzQzOzg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUzKHNwdV9ydW4saW50LCBmZCwgX191MzIgX191c2VyICosIHVucGMsIF9fdTMyIF9fdXNlciAqLCB1c3RhdHVzKVxuIFx0cmV0dXJuIGNhbGxzLVx1MDAzZXNwdV9ydW4oZmRfZmlsZShhcmcpLCB1bnBjLCB1c3RhdHVzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTtcbi19XG4tXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pO1xuLX1cbi0jZW5kaWZcbi1cbiB2b2lkIG5vdGlmeV9zcHVzX2FjdGl2ZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzcHVmc19jYWxscyAqY2FsbHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG5pbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbkBAIC00LDcgJiM0Mzs0LDYgQEAgb2JqLSQoQ09ORklHX1NQVV9GUykgJiM0Mzs9IHNwdWZzLm9cbiBzcHVmcy15ICYjNDM7PSBpbm9kZS5vIGZpbGUubyBjb250ZXh0Lm8gc3lzY2FsbHMub1xuIHNwdWZzLXkgJiM0Mzs9IHNjaGVkLm8gYmFja2luZ19vcHMubyBod19vcHMubyBydW4ubyBnYW5nLm9cbiBzcHVmcy15ICYjNDM7PSBzd2l0Y2gubyBmYXVsdC5vIGxzY3NhX2FsbG9jLm9cbi1zcHVmcy0kKENPTkZJR19DT1JFRFVNUCkgJiM0Mzs9IGNvcmVkdW1wLm9cbiBcbiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzXG4gQ0ZMQUdTX3NjaGVkLm8gOj0gLUkkKHNyYylcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDMwMWVlN2Q4YjdkZjAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSwxODMgJiM0MzswLDAgQEBcbi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuLS8qXG4tICogU1BVIGNvcmUgZHVtcCBjb2RlXG4tICpcbi0gKiAoQykgQ29weXJpZ2h0IDIwMDYgSUJNIENvcnAuXG4tICpcbi0gKiBBdXRob3I6IER3YXluZSBHcmFudCBNY0Nvbm5lbGwgXHUwMDNjZGVjaW1hbEB1cy5pYm0uY29tXHUwMDNlXG4tICovXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZWxmLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9mZHRhYmxlLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY29yZWR1bXAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuLVxuLSNpbmNsdWRlIFwmIzM0O3NwdWZzLmhcJiMzNDtcbi1cbi1zdGF0aWMgaW50IHNwdWZzX2N0eF9ub3RlX3NpemUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBkZmQpXG4te1xuLVx0aW50IGksIHN6LCB0b3RhbCA9IDA7XG4tXHRjaGFyICpuYW1lO1xuLVx0Y2hhciBmdWxsbmFtZVs4MF07XG4tXG4tXHRmb3IgKGkgPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUgIT0gTlVMTDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bmFtZSA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZTtcbi1cdFx0c3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7XG4tXG4tXHRcdHNwcmludGYoZnVsbG5hbWUsIFwmIzM0O1NQVS8lZC8lc1wmIzM0OywgZGZkLCBuYW1lKTtcbi1cbi1cdFx0dG90YWwgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpO1xuLVx0XHR0b3RhbCAmIzQzOz0gcm91bmR1cChzdHJsZW4oZnVsbG5hbWUpICYjNDM7IDEsIDQpO1xuLVx0XHR0b3RhbCAmIzQzOz0gcm91bmR1cChzeiwgNCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgbWF0Y2hfY29udGV4dChjb25zdCB2b2lkICp2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpZiAoZmlsZS1cdTAwM2VmX29wICE9IFx1MDAyNnNwdWZzX2NvbnRleHRfZm9wcylcbi1cdFx0cmV0dXJuIDA7XG4tXHRjdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLVx1MDAzZWlfY3R4O1xuLVx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1BVX0NSRUFURV9OT1NDSEVEKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBmZCAmIzQzOyAxO1xuLX1cbi1cbi0vKlxuLSAqIFRoZSBhZGRpdGlvbmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBub3RlcyBmb3IgQ2VsbCBhcmUgdmFyaW91c1xuLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0LlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHNlZXNcbi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnNcbi0gKiBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgdGhlbSB3aXRob3V0IG5lZWRpbmcgdG8gYWN0dWFsbHlcbi0gKiBvcGVuIHRoZSBmaWxlcy5cbi0gKi9cbi0vKlxuLSAqIGRlc2NyaXB0b3IgdGFibGUgaXMgbm90IHNoYXJlZCwgc28gZmlsZXMgY2FuJiMzOTt0IGNoYW5nZSBvciBnbyBhd2F5LlxuLSAqL1xuLXN0YXRpYyBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmNvcmVkdW1wX25leHRfY29udGV4dChpbnQgKmZkKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4ID0gTlVMTDtcbi1cdHN0cnVjdCBmaWxlICpmaWxlO1xuLVx0aW50IG4gPSBpdGVyYXRlX2ZkKGN1cnJlbnQtXHUwMDNlZmlsZXMsICpmZCwgbWF0Y2hfY29udGV4dCwgTlVMTCk7XG4tXHRpZiAoIW4pXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0KmZkID0gbiAtIDE7XG4tXG4tXHRmaWxlID0gZmdldF9yYXcoKmZkKTtcbi1cdGlmIChmaWxlKSB7XG4tXHRcdGN0eCA9IFNQVUZTX0koZmlsZV9pbm9kZShmaWxlKSktXHUwMDNlaV9jdHg7XG4tXHRcdGdldF9zcHVfY29udGV4dChjdHgpO1xuLVx0XHRmcHV0KGZpbGUpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIGN0eDtcbi19XG4tXG4taW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbi17XG4tXHRzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eDtcbi1cdGludCBzaXplID0gMCwgcmMsIGZkO1xuLVxuLVx0ZmQgPSAwO1xuLVx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XG4tXHRcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0cHV0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0cmMgPSBzcHVmc19jdHhfbm90ZV9zaXplKGN0eCwgZmQpO1xuLVx0XHRzcHVfcmVsZWFzZV9zYXZlZChjdHgpO1xuLVx0XHRpZiAocmMgXHUwMDNjIDApIHtcbi1cdFx0XHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRzaXplICYjNDM7PSByYztcbi1cbi1cdFx0Lyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqL1xuLVx0XHRmZCYjNDM7JiM0Mzs7XG4tXHRcdHB1dF9zcHVfY29udGV4dChjdHgpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHNpemU7XG4tfVxuLVxuLXN0YXRpYyBpbnQgc3B1ZnNfYXJjaF93cml0ZV9ub3RlKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBpbnQgaSxcbi1cdFx0XHRcdCAgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgaW50IGRmZClcbi17XG4tXHRzaXplX3Qgc3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7XG4tXHRjaGFyIGZ1bGxuYW1lWzgwXTtcbi1cdHN0cnVjdCBlbGZfbm90ZSBlbjtcbi1cdGludCByZXQ7XG4tXG4tXHRzcHJpbnRmKGZ1bGxuYW1lLCBcJiMzNDtTUFUvJWQvJXNcJiMzNDssIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTtcbi1cdGVuLm5fbmFtZXN6ID0gc3RybGVuKGZ1bGxuYW1lKSAmIzQzOyAxO1xuLVx0ZW4ubl9kZXNjc3ogPSBzejtcbi1cdGVuLm5fdHlwZSA9IE5UX1NQVTtcbi1cbi1cdGlmICghZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmVuLCBzaXplb2YoZW4pKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBmdWxsbmFtZSwgZW4ubl9uYW1lc3opKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdGlmICghZHVtcF9hbGlnbihjcHJtLCA0KSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXG4tXHRpZiAoc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5kdW1wKSB7XG4tXHRcdHJldCA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcChjdHgsIGNwcm0pO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRjaGFyIGJ1ZlszMl07XG4tXG4tXHRcdHJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OzB4JS4xNmxseFwmIzM0Oyxcbi1cdFx0XHQgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7XG4tXHRcdGlmIChyZXQgXHUwMDNlPSBzaXplb2YoYnVmKSlcbi1cdFx0XHRyZXR1cm4gc2l6ZW9mKGJ1Zik7XG4tXG4tXHRcdC8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqL1xuLVx0XHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCAmIzQzOyAxKSlcbi1cdFx0XHRyZXR1cm4gLUVJTztcbi1cdH1cbi1cbi1cdGR1bXBfc2tpcF90byhjcHJtLCByb3VuZHVwKGNwcm0tXHUwMDNlcG9zIC0gcmV0ICYjNDM7IHN6LCA0KSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4taW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpbnQgZmQsIGosIHJjO1xuLVxuLVx0ZmQgPSAwO1xuLVx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XG4tXHRcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHJldHVybiByYztcbi1cbi1cdFx0Zm9yIChqID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtqXS5uYW1lICE9IE5VTEw7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0cmMgPSBzcHVmc19hcmNoX3dyaXRlX25vdGUoY3R4LCBqLCBjcHJtLCBmZCk7XG4tXHRcdFx0aWYgKHJjKSB7XG4tXHRcdFx0XHRzcHVfcmVsZWFzZV9zYXZlZChjdHgpO1xuLVx0XHRcdFx0cmV0dXJuIHJjO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuLVx0XHRzcHVfcmVsZWFzZV9zYXZlZChjdHgpO1xuLVxuLVx0XHQvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovXG4tXHRcdGZkJiM0MzsmIzQzOztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuaW5kZXggZGU3NDk0NzQ4ZmVjZC4uOThjNDdiYWZhZjY3OCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbkBAIC05LDcgJiM0Mzs5LDYgQEBcbiBcbiAjdW5kZWYgREVCVUdcbiBcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuQEAgLTEzMCwxNCAmIzQzOzEyOSw2IEBAIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2F0dHJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kdW1wX2VtaXQoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdm9pZCAqYnVmLFxuLVx0XHRzaXplX3Qgc2l6ZSlcbi17XG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdHJldHVybiBzaXplO1xuLX1cbi1cbiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdClcdFxcXG4gc3RhdGljIGludCBfX2ZvcHMgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTE4MCwxMiAmIzQzOzE3MSw2IEBAIHNwdWZzX21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90XG4tc3B1ZnNfbWVtX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXHUwMDNlb3BzLVx1MDAzZWdldF9scyhjdHgpLCBMU19TSVpFKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19tZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0XHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcbkBAIC00NjYsMTMgJiM0Mzs0NTEsNiBAQCBzcHVmc19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Rcbi1zcHVmc19yZWdzX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWdwcnMsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWdwcnMpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19yZWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcbkBAIC01MjMsMTMgJiM0Mzs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdFxuLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX2ZwY3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsXG4gXHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKiBwb3MpXG5AQCAtOTUzLDE1ICYjNDM7OTI0LDYgQEAgc3B1ZnNfc2lnbmFsMV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDFfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIWN0eC1cdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbM10pXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1szXSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMV9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBsZW4pXG4ge1xuQEAgLTEwODYsMTUgJiM0MzsxMDQ4LDYgQEAgc3B1ZnNfc2lnbmFsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDJfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIWN0eC1cdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbNF0pXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1s0XSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzRdKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMl9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBsZW4pXG4ge1xuQEAgLTE5MjQsMTUgJiM0MzsxODc3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY2Fwc19mb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweDAwMDBmZikpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByb2IucHVfbWJfUixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EucHJvYi5wdV9tYl9SKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX21ib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4ge1xuQEAgLTE5NjIsMTUgJiM0MzsxOTA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWJveF9pbmZvX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweGZmMDAwMCkpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjAwNSwxMyAmIzQzOzE5NDAsNiBAQCBzdGF0aWMgc2l6ZV90IHNwdWZzX3dib3hfaW5mb19jbnQoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpXG4gXHRyZXR1cm4gKDQgLSAoKGN0eC1cdTAwM2Vjc2EucHJvYi5tYl9zdGF0X1IgXHUwMDI2IDB4MDBmZjAwKSBcdTAwM2VcdTAwM2UgOCkpICogc2l6ZW9mKHUzMik7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3dib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2Y3R4LVx1MDAzZWNzYS5zcHVfbWFpbGJveF9kYXRhLFxuLVx0XHRcdHNwdWZzX3dib3hfaW5mb19jbnQoY3R4KSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3dib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4ge1xuQEAgLTIwNTksMTUgJiM0MzsxOTg3LDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X2RtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHN0cnVjdCBzcHVfZG1hX2luZm8gaW5mbztcbi1cbi1cdHNwdWZzX2dldF9kbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMTEyLDE1ICYjNDM7MjAzMSw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87XG4tXG4tXHRzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjU4MCwyNyAmIzQzOzI0OTAsMyBAQCBjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXSA9IHtcbiBcdHsgXCYjMzQ7LmN0eFwmIzM0OywgXHUwMDI2c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sXG4gXHR7fSxcbiB9O1xuLVxuLWNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0ge1xuLVx0eyBcJiMzNDtyZWdzXCYjMzQ7LCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sXG4tXHR7IFwmIzM0O2ZwY3JcJiMzNDssIHNwdWZzX2ZwY3JfZHVtcCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4KSB9LFxuLVx0eyBcJiMzNDtsc2xyXCYjMzQ7LCBOVUxMLCBzcHVmc19sc2xyX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7ZGVjclwmIzM0OywgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sXG4tXHR7IFwmIzM0O2RlY3Jfc3RhdHVzXCYjMzQ7LCBOVUxMLCBzcHVmc19kZWNyX3N0YXR1c19nZXQsIDE5IH0sXG4tXHR7IFwmIzM0O21lbVwmIzM0Oywgc3B1ZnNfbWVtX2R1bXAsIE5VTEwsIExTX1NJWkUsIH0sXG4tXHR7IFwmIzM0O3NpZ25hbDFcJiMzNDssIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCYjMzQ7c2lnbmFsMV90eXBlXCYjMzQ7LCBOVUxMLCBzcHVmc19zaWduYWwxX3R5cGVfZ2V0LCAxOSB9LFxuLVx0eyBcJiMzNDtzaWduYWwyXCYjMzQ7LCBzcHVmc19zaWduYWwyX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwmIzM0O3NpZ25hbDJfdHlwZVwmIzM0OywgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7ZXZlbnRfbWFza1wmIzM0OywgTlVMTCwgc3B1ZnNfZXZlbnRfbWFza19nZXQsIDE5IH0sXG4tXHR7IFwmIzM0O2V2ZW50X3N0YXR1c1wmIzM0OywgTlVMTCwgc3B1ZnNfZXZlbnRfc3RhdHVzX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7bWJveF9pbmZvXCYjMzQ7LCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCYjMzQ7aWJveF9pbmZvXCYjMzQ7LCBzcHVmc19pYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCYjMzQ7d2JveF9pbmZvXCYjMzQ7LCBzcHVmc193Ym94X2luZm9fZHVtcCwgTlVMTCwgNCAqIHNpemVvZih1MzIpfSxcbi1cdHsgXCYjMzQ7ZG1hX2luZm9cJiMzNDssIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sXG4tXHR7IFwmIzM0O3Byb3h5ZG1hX2luZm9cJiMzNDssIHNwdWZzX3Byb3h5ZG1hX2luZm9fZHVtcCxcbi1cdFx0XHQgICBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9wcm94eWRtYV9pbmZvKX0sXG4tXHR7IFwmIzM0O29iamVjdC1pZFwmIzM0OywgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSxcbi1cdHsgXCYjMzQ7bnBjXCYjMzQ7LCBOVUxMLCBzcHVmc19ucGNfZ2V0LCAxOSB9LFxuLVx0eyBOVUxMIH0sXG4tfTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5pbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5AQCAtMjMyLDEzICYjNDM7MjMyLDkgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdO1xuIFxuIC8qIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uICovXG4gZXh0ZXJuIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxscztcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIGxvbmcgc3B1ZnNfcnVuX3NwdShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgdTMyICpucGMsIHUzMiAqc3RhdHVzKTtcbiBsb25nIHNwdWZzX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGF0aCAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzLFxuIFx0XHRcdHVtb2RlX3QgbW9kZSwgc3RydWN0IGZpbGUgKmZpbHApO1xuLS8qIEVMRiBjb3JlZHVtcCBjYWxsYmFja3MgZm9yIHdyaXRpbmcgU1BVIEVMRiBub3RlcyAqL1xuLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTtcbi1leHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NvbnRleHRfZm9wcztcbiBcbkBAIC0zMzUsMTQgJiM0MzszMzEsNiBAQCB2b2lkIHNwdWZzX3N0b3BfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgaXJxKTtcbiB2b2lkIHNwdWZzX21mY19jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUpO1xuIHZvaWQgc3B1ZnNfZG1hX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSwgaW50IHR5cGUpO1xuIFxuLXN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIge1xuLVx0Y2hhciAqbmFtZTtcbi1cdHNzaXplX3QgKCpkdW1wKShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4tXHR1NjQgKCpnZXQpKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KTtcbi1cdHNpemVfdCBzaXplO1xuLX07XG4tZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdO1xuLVxuIGV4dGVybiBpbnQgc3B1X2luaXRfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7XG4gZXh0ZXJuIHZvaWQgc3B1X2ZpbmlfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7XG4gZXh0ZXJuIGludCBzcHVfc2F2ZShzdHJ1Y3Qgc3B1X3N0YXRlICpwcmV2LCBzdHJ1Y3Qgc3B1ICpzcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmNcbmluZGV4IGVhNGJhMWI2Y2U2YTkuLmI2ZGUzNzE1MGU3MzQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmNcbkBAIC04Miw4ICYjNDM7ODIsNCBAQCBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgc3B1ZnNfY2FsbHMgPSB7XG4gXHQuc3B1X3J1biA9IGRvX3NwdV9ydW4sXG4gXHQubm90aWZ5X3NwdXNfYWN0aXZlID0gZG9fbm90aWZ5X3NwdXNfYWN0aXZlLFxuIFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUgPSBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplLFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmNcbmluZGV4IDA2ZDBkZjEwNTM4MjMuLmRiMzJiYjQwYTg2NzAgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfZWxmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9lbGYuY1xuQEAgLTIwMjksNyAmIzQzOzIwMjksNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdHtcbiBcdFx0c2l6ZV90IHN6ID0gaW5mby5zaXplO1xuIFxuLVx0XHQvKiBGb3IgY2VsbCBzcHVmcyBhbmQgeDg2IHhzdGF0ZSAqL1xuJiM0MztcdFx0LyogRm9yIHg4NiB4c3RhdGUgKi9cbiBcdFx0c3ogJiM0Mzs9IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7XG4gXG4gXHRcdHBoZHI0bm90ZSA9IGttYWxsb2Nfb2JqKCpwaGRyNG5vdGUpO1xuQEAgLTIwOTMsNyAmIzQzOzIwOTMsNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdGlmICghd3JpdGVfbm90ZV9pbmZvKFx1MDAyNmluZm8sIGNwcm0pKVxuIFx0XHRnb3RvIGVuZF9jb3JlZHVtcDtcbiBcbi1cdC8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovXG4mIzQzO1x0LyogRm9yIHg4NiB4c3RhdGUgKi9cbiBcdGlmIChlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoY3BybSkpXG4gXHRcdGdvdG8gZW5kX2NvcmVkdW1wO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jXG5pbmRleCBhYzNjZDc0ODA4YzY0Li5hNDlmMmZkNmJlMjgwIDEwMDY0NFxuLS0tIGEvZnMvY29yZWR1bXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29yZWR1bXAuY1xuQEAgLTExMTgsMTEgJiM0MzsxMTE4LDYgQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovXG4tXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXG4tXHRpZiAodW5zaGFyZV9maWxlcygpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRpZiAoKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX0tFUk5FTCkgXHUwMDI2XHUwMDI2ICFjb3JlZHVtcF93cml0ZShjbiwgY3BybSwgYmluZm10KSlcbiBcdFx0cmV0dXJuO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT1JFRFVNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQsIHdoaWNoIGlzIG9ic29sZXRlIGFuZCB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBIb3dldmVyLCBpdCBhbHNvIHJlbW92ZXMgdGhlIGB1bnNoYXJlX2ZpbGVzKClgIGNhbGwgZnJvbSB0aGUgZ2VuZXJpYyBgZG9fY29yZWR1bXAoKWAgZnVuY3Rpb24gaW4gYGZzL2NvcmVkdW1wLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgaG93IGZpbGUgZGVzY3JpcHRvciB0YWJsZXMgYXJlIGhhbmRsZWQgZHVyaW5nIGEgY29yZWR1bXAgKHRoZXkgYXJlIG5vIGxvbmdlciB1bnNoYXJlZCBpZiBzaGFyZWQgdmlhIENMT05FX0ZJTEVTKS4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGluIFFFTVUgYW5kIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgd2hlbiBkdW1waW5nIGNvcmUgb2YgcHJvY2Vzc2VzIHdpdGggc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1NWU2ZjMxMTNmNjViOTU2YjRhYjA5OTE2MDdjYjJiODQ2NmIyYmRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTY6MjE6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDI1ODBlMjdlNDMyODcuLjQwYzg3NGZlMmY1M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC0xNjAsNyAmIzQzOzE2MCw2IEBAIGNvbmZpZyBQUEMKIAlzZWxlY3QgQVJDSF9IQVNfVUJTQU4KIAlzZWxlY3QgQVJDSF9IQVNfVkRTT19BUkNIX0RBVEEKIAlzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEcKLQlzZWxlY3QgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFUyAgICAgICAgaWYgU1BVX0JBU0UKIAlzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLCiAJc2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFCWlmIFBQQ19SQURJWF9NTVUKIAlzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBiYjRiOTQ0NDRkM2U4Li41ZGM4YzQ5MjNlYjFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xMjMsMTIgJiM0MzsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAogCSgweDdmZiAmZ3Q7Jmd0OyAoUEFHRV9TSElGVCAtIDEyKSkgOiBcCiAJKDB4M2ZmZmYgJmd0OyZndDsgKFBBR0VfU0hJRlQgLSAxMikpKQogCi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFCi0vKiBOb3RlcyB1c2VkIGluIEVUX0NPUkUuIE5vdGUgbmFtZSBpcyAmIzM0O1NQVS8mbHQ7ZmQmZ3Q7LyZsdDtmaWxlbmFtZSZndDsmIzM0Oy4gKi8KLSNkZWZpbmUgTlRfU1BVCQkxCi0KLSNlbmRpZiAvKiBDT05GSUdfU1BVX0JBU0UgKi8KLQogI2lmZGVmIENPTkZJR19QUEM2NAogCiAjZGVmaW5lIGdldF9jYWNoZV9nZW9tZXRyeShsZXZlbCkgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oCmluZGV4IDk2YWQ0NTEwYzg5NTQuLjcxNTIyODViNjI2OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmgKQEAgLTIxMCwxNSAmIzQzOzIxMCwxMiBAQCBleHRlcm4gbG9uZyBzcHVfc3lzX2NhbGxiYWNrKHN0cnVjdCBzcHVfc3lzY2FsbF9ibG9jayAqcyk7CiAKIC8qIHN5c2NhbGxzIGltcGxlbWVudGVkIGluIHNwdWZzICovCiBzdHJ1Y3QgZmlsZTsKLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7CiBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgewogCWxvbmcgKCpjcmVhdGVfdGhyZWFkKShjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwKIAkJCQkJdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsCiAJCQkJCXN0cnVjdCBmaWxlICpuZWlnaGJvcik7CiAJbG9uZyAoKnNwdV9ydW4pKHN0cnVjdCBmaWxlICpmaWxwLCBfX3UzMiBfX3VzZXIgKnVucGMsCiAJCQkJCQlfX3UzMiBfX3VzZXIgKnVzdGF0dXMpOwotCWludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUpKHZvaWQpOwotCWludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTsKIAl2b2lkICgqbm90aWZ5X3NwdXNfYWN0aXZlKSh2b2lkKTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCmluZGV4IGRiNjViZmNkMWU3NDkuLjZiZDI2ODE1YzMzMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnCkBAIC0xMCw3ICYjNDM7MTAsNiBAQCBjb25maWcgU1BVX0ZTCiAJdHJpc3RhdGUgJiMzNDtTUFUgZmlsZSBzeXN0ZW0mIzM0OwogCWRlZmF1bHQgbQogCWRlcGVuZHMgb24gUFBDX0NFTEwKLQlkZXBlbmRzIG9uIENPUkVEVU1QCiAJc2VsZWN0IFNQVV9CQVNFCiAJaGVscAogCSAgVGhlIFNQVSBmaWxlIHN5c3RlbSBpcyB1c2VkIHRvIGFjY2VzcyBTeW5lcmdpc3RpYyBQcm9jZXNzaW5nCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMKaW5kZXggMDAwODk0ZTA3YjAyNy4uOGJlODEyMDdlODg2YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuYwpAQCAtODgsMjYgJiM0Mzs4OCw2IEBAIFNZU0NBTExfREVGSU5FMyhzcHVfcnVuLGludCwgZmQsIF9fdTMyIF9fdXNlciAqLCB1bnBjLCBfX3UzMiBfX3VzZXIgKiwgdXN0YXR1cykKIAlyZXR1cm4gY2FsbHMtJmd0O3NwdV9ydW4oZmRfZmlsZShhcmcpLCB1bnBjLCB1c3RhdHVzKTsKIH0KIAotI2lmZGVmIENPTkZJR19DT1JFRFVNUAotaW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpCi17Ci0JQ0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpOwotCWlmICghY2FsbHMpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGNhbGxzLSZndDtjb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7Ci19Ci0KLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlDTEFTUyhzcHVmc19jYWxscywgY2FsbHMpKCk7Ci0JaWYgKCFjYWxscykKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gY2FsbHMtJmd0O2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pOwotfQotI2VuZGlmCi0KIHZvaWQgbm90aWZ5X3NwdXNfYWN0aXZlKHZvaWQpCiB7CiAJc3RydWN0IHNwdWZzX2NhbGxzICpjYWxsczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZQppbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlCkBAIC00LDcgJiM0Mzs0LDYgQEAgb2JqLSQoQ09ORklHX1NQVV9GUykgJiM0Mzs9IHNwdWZzLm8KIHNwdWZzLXkgJiM0Mzs9IGlub2RlLm8gZmlsZS5vIGNvbnRleHQubyBzeXNjYWxscy5vCiBzcHVmcy15ICYjNDM7PSBzY2hlZC5vIGJhY2tpbmdfb3BzLm8gaHdfb3BzLm8gcnVuLm8gZ2FuZy5vCiBzcHVmcy15ICYjNDM7PSBzd2l0Y2gubyBmYXVsdC5vIGxzY3NhX2FsbG9jLm8KLXNwdWZzLSQoQ09ORklHX0NPUkVEVU1QKSAmIzQzOz0gY29yZWR1bXAubwogCiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzCiBDRkxBR1Nfc2NoZWQubyA6PSAtSSQoc3JjKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxZWU3ZDhiN2RmMC4uMDAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYwomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDE4MyAmIzQzOzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8qCi0gKiBTUFUgY29yZSBkdW1wIGNvZGUKLSAqCi0gKiAoQykgQ29weXJpZ2h0IDIwMDYgSUJNIENvcnAuCi0gKgotICogQXV0aG9yOiBEd2F5bmUgR3JhbnQgTWNDb25uZWxsICZsdDtkZWNpbWFsQHVzLmlibS5jb20mZ3Q7Ci0gKi8KLQotI2luY2x1ZGUgJmx0O2xpbnV4L2VsZi5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGUuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9mZHRhYmxlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9saXN0LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvc3lzY2FsbHMuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9jb3JlZHVtcC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2JpbmZtdHMuaCZndDsKLQotI2luY2x1ZGUgJmx0O2xpbnV4L3VhY2Nlc3MuaCZndDsKLQotI2luY2x1ZGUgJiMzNDtzcHVmcy5oJiMzNDsKLQotc3RhdGljIGludCBzcHVmc19jdHhfbm90ZV9zaXplKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBpbnQgZGZkKQotewotCWludCBpLCBzeiwgdG90YWwgPSAwOwotCWNoYXIgKm5hbWU7Ci0JY2hhciBmdWxsbmFtZVs4MF07Ci0KLQlmb3IgKGkgPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUgIT0gTlVMTDsgaSYjNDM7JiM0MzspIHsKLQkJbmFtZSA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZTsKLQkJc3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7Ci0KLQkJc3ByaW50ZihmdWxsbmFtZSwgJiMzNDtTUFUvJWQvJXMmIzM0OywgZGZkLCBuYW1lKTsKLQotCQl0b3RhbCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7Ci0JCXRvdGFsICYjNDM7PSByb3VuZHVwKHN0cmxlbihmdWxsbmFtZSkgJiM0MzsgMSwgNCk7Ci0JCXRvdGFsICYjNDM7PSByb3VuZHVwKHN6LCA0KTsKLQl9Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLXN0YXRpYyBpbnQgbWF0Y2hfY29udGV4dChjb25zdCB2b2lkICp2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmQpCi17Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHg7Ci0JaWYgKGZpbGUtJmd0O2Zfb3AgIT0gJmFtcDtzcHVmc19jb250ZXh0X2ZvcHMpCi0JCXJldHVybiAwOwotCWN0eCA9IFNQVUZTX0koZmlsZV9pbm9kZShmaWxlKSktJmd0O2lfY3R4OwotCWlmIChjdHgtJmd0O2ZsYWdzICZhbXA7IFNQVV9DUkVBVEVfTk9TQ0hFRCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIGZkICYjNDM7IDE7Ci19Ci0KLS8qCi0gKiBUaGUgYWRkaXRpb25hbCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbm90ZXMgZm9yIENlbGwgYXJlIHZhcmlvdXMKLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXRlcmF0ZXMgb3ZlciBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBzZWVzCi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnMKLSAqIGludGVybmFsIGZ1bmN0aW9uYWxpdHkgdG8gZHVtcCB0aGVtIHdpdGhvdXQgbmVlZGluZyB0byBhY3R1YWxseQotICogb3BlbiB0aGUgZmlsZXMuCi0gKi8KLS8qCi0gKiBkZXNjcmlwdG9yIHRhYmxlIGlzIG5vdCBzaGFyZWQsIHNvIGZpbGVzIGNhbiYjMzk7dCBjaGFuZ2Ugb3IgZ28gYXdheS4KLSAqLwotc3RhdGljIHN0cnVjdCBzcHVfY29udGV4dCAqY29yZWR1bXBfbmV4dF9jb250ZXh0KGludCAqZmQpCi17Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHggPSBOVUxMOwotCXN0cnVjdCBmaWxlICpmaWxlOwotCWludCBuID0gaXRlcmF0ZV9mZChjdXJyZW50LSZndDtmaWxlcywgKmZkLCBtYXRjaF9jb250ZXh0LCBOVUxMKTsKLQlpZiAoIW4pCi0JCXJldHVybiBOVUxMOwotCSpmZCA9IG4gLSAxOwotCi0JZmlsZSA9IGZnZXRfcmF3KCpmZCk7Ci0JaWYgKGZpbGUpIHsKLQkJY3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS0mZ3Q7aV9jdHg7Ci0JCWdldF9zcHVfY29udGV4dChjdHgpOwotCQlmcHV0KGZpbGUpOwotCX0KLQotCXJldHVybiBjdHg7Ci19Ci0KLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpCi17Ci0Jc3RydWN0IHNwdV9jb250ZXh0ICpjdHg7Ci0JaW50IHNpemUgPSAwLCByYywgZmQ7Ci0KLQlmZCA9IDA7Ci0Jd2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoJmFtcDtmZCkpICE9IE5VTEwpIHsKLQkJcmMgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwotCQlpZiAocmMpIHsKLQkJCXB1dF9zcHVfY29udGV4dChjdHgpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlyYyA9IHNwdWZzX2N0eF9ub3RlX3NpemUoY3R4LCBmZCk7Ci0JCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7Ci0JCWlmIChyYyAmbHQ7IDApIHsKLQkJCXB1dF9zcHVfY29udGV4dChjdHgpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzaXplICYjNDM7PSByYzsKLQotCQkvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovCi0JCWZkJiM0MzsmIzQzOzsKLQkJcHV0X3NwdV9jb250ZXh0KGN0eCk7Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KLXN0YXRpYyBpbnQgc3B1ZnNfYXJjaF93cml0ZV9ub3RlKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBpbnQgaSwKLQkJCQkgIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIGludCBkZmQpCi17Ci0Jc2l6ZV90IHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplOwotCWNoYXIgZnVsbG5hbWVbODBdOwotCXN0cnVjdCBlbGZfbm90ZSBlbjsKLQlpbnQgcmV0OwotCi0Jc3ByaW50ZihmdWxsbmFtZSwgJiMzNDtTUFUvJWQvJXMmIzM0OywgZGZkLCBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUpOwotCWVuLm5fbmFtZXN6ID0gc3RybGVuKGZ1bGxuYW1lKSAmIzQzOyAxOwotCWVuLm5fZGVzY3N6ID0gc3o7Ci0JZW4ubl90eXBlID0gTlRfU1BVOwotCi0JaWYgKCFkdW1wX2VtaXQoY3BybSwgJmFtcDtlbiwgc2l6ZW9mKGVuKSkpCi0JCXJldHVybiAtRUlPOwotCWlmICghZHVtcF9lbWl0KGNwcm0sIGZ1bGxuYW1lLCBlbi5uX25hbWVzeikpCi0JCXJldHVybiAtRUlPOwotCWlmICghZHVtcF9hbGlnbihjcHJtLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5kdW1wKSB7Ci0JCXJldCA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcChjdHgsIGNwcm0pOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7Ci0JfSBlbHNlIHsKLQkJY2hhciBidWZbMzJdOwotCi0JCXJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7MHglLjE2bGx4JiMzNDssCi0JCQkgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7Ci0JCWlmIChyZXQgJmd0Oz0gc2l6ZW9mKGJ1ZikpCi0JCQlyZXR1cm4gc2l6ZW9mKGJ1Zik7Ci0KLQkJLyogY291bnQgdHJhaWxpbmcgdGhlIE5VTEw6ICovCi0JCWlmICghZHVtcF9lbWl0KGNwcm0sIGJ1ZiwgcmV0ICYjNDM7IDEpKQotCQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JZHVtcF9za2lwX3RvKGNwcm0sIHJvdW5kdXAoY3BybS0mZ3Q7cG9zIC0gcmV0ICYjNDM7IHN6LCA0KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OwotCWludCBmZCwgaiwgcmM7Ci0KLQlmZCA9IDA7Ci0Jd2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoJmFtcDtmZCkpICE9IE5VTEwpIHsKLQkJcmMgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJZm9yIChqID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtqXS5uYW1lICE9IE5VTEw7IGomIzQzOyYjNDM7KSB7Ci0JCQlyYyA9IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShjdHgsIGosIGNwcm0sIGZkKTsKLQkJCWlmIChyYykgewotCQkJCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7Ci0JCQkJcmV0dXJuIHJjOwotCQkJfQotCQl9Ci0KLQkJc3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTsKLQotCQkvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovCi0JCWZkJiM0MzsmIzQzOzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCmluZGV4IGRlNzQ5NDc0OGZlY2QuLjk4YzQ3YmFmYWY2NzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwpAQCAtOSw3ICYjNDM7OSw2IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSAmbHQ7bGludXgvY29yZWR1bXAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXhwb3J0LmgmZ3Q7CkBAIC0xMzAsMTQgJiM0MzsxMjksNiBAQCBzdGF0aWMgc3NpemVfdCBzcHVmc19hdHRyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNwdWZzX2R1bXBfZW1pdChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLCB2b2lkICpidWYsCi0JCXNpemVfdCBzaXplKQotewotCWlmICghZHVtcF9lbWl0KGNwcm0sIGJ1Ziwgc2l6ZSkpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiBzaXplOwotfQotCiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdCkJXAogc3RhdGljIGludCBfX2ZvcHMgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCVwKIHsJCQkJCQkJCQlcCkBAIC0xODAsMTIgJiM0MzsxNzEsNiBAQCBzcHVmc19tZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNwdWZzX21lbV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgY3R4LSZndDtvcHMtJmd0O2dldF9scyhjdHgpLCBMU19TSVpFKTsKLX0KLQogc3RhdGljIHNzaXplX3QKIHNwdWZzX21lbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJCXNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcykKQEAgLTQ2NiwxMyAmIzQzOzQ1MSw2IEBAIHNwdWZzX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNwdWZzX3JlZ3NfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC0mZ3Q7Y3NhLmxzY3NhLSZndDtncHJzLAotCQkJICAgICAgIHNpemVvZihjdHgtJmd0O2NzYS5sc2NzYS0mZ3Q7Z3BycykpOwotfQotCiBzdGF0aWMgc3NpemVfdAogc3B1ZnNfcmVnc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCkBAIC01MjMsMTMgJiM0Mzs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7CiAJLmxsc2VlayAgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAotc3RhdGljIHNzaXplX3QKLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2EubHNjc2EtJmd0O2ZwY3IsCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLmxzY3NhLSZndDtmcGNyKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90CiBzcHVmc19mcGNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLAogCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICogcG9zKQpAQCAtOTUzLDE1ICYjNDM7OTI0LDYgQEAgc3B1ZnNfc2lnbmFsMV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19zaWduYWwxX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCFjdHgtJmd0O2NzYS5zcHVfY2hubGNudF9SV1szXSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1szXSwKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2Euc3B1X2NobmxkYXRhX1JXWzNdKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMV9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLAogCQkJc2l6ZV90IGxlbikKIHsKQEAgLTEwODYsMTUgJiM0MzsxMDQ4LDYgQEAgc3B1ZnNfc2lnbmFsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19zaWduYWwyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCFjdHgtJmd0O2NzYS5zcHVfY2hubGNudF9SV1s0XSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1s0XSwKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2Euc3B1X2NobmxkYXRhX1JXWzRdKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMl9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLAogCQkJc2l6ZV90IGxlbikKIHsKQEAgLTE5MjQsMTUgJiM0MzsxODc3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY2Fwc19mb3BzID0gewogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlpZiAoIShjdHgtJmd0O2NzYS5wcm9iLm1iX3N0YXRfUiAmYW1wOyAweDAwMDBmZikpCi0JCXJldHVybiAwOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtjdHgtJmd0O2NzYS5wcm9iLnB1X21iX1IsCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnByb2IucHVfbWJfUikpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTE5NjIsMTUgJiM0MzsxOTA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWJveF9pbmZvX2ZvcHMgPSB7CiAJLmxsc2VlayAgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCEoY3R4LSZndDtjc2EucHJvYi5tYl9zdGF0X1IgJmFtcDsgMHhmZjAwMDApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2EucHJpdjIucHVpbnRfbWJfUiwKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2EucHJpdjIucHVpbnRfbWJfUikpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTIwMDUsMTMgJiM0MzsxOTQwLDYgQEAgc3RhdGljIHNpemVfdCBzcHVmc193Ym94X2luZm9fY250KHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQogCXJldHVybiAoNCAtICgoY3R4LSZndDtjc2EucHJvYi5tYl9zdGF0X1IgJmFtcDsgMHgwMGZmMDApICZndDsmZ3Q7IDgpKSAqIHNpemVvZih1MzIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2Euc3B1X21haWxib3hfZGF0YSwKLQkJCXNwdWZzX3dib3hfaW5mb19jbnQoY3R4KSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3dib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKQogewpAQCAtMjA1OSwxNSAmIzQzOzE5ODcsNiBAQCBzdGF0aWMgdm9pZCBzcHVmc19nZXRfZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCiAJfQogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXN0cnVjdCBzcHVfZG1hX2luZm8gaW5mbzsKLQotCXNwdWZzX2dldF9kbWFfaW5mbyhjdHgsICZhbXA7aW5mbyk7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2luZm8sIHNpemVvZihpbmZvKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2RtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTIxMTIsMTUgJiM0MzsyMDMxLDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X3Byb3h5ZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCiAJfQogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0Jc3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87Ci0KLQlzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsICZhbXA7aW5mbyk7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2luZm8sIHNpemVvZihpbmZvKSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3Byb3h5ZG1hX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTI1ODAsMjcgJiM0MzsyNDkwLDMgQEAgY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7CiAJeyAmIzM0Oy5jdHgmIzM0OywgJmFtcDtzcHVmc19jdHhfZm9wcywgMDQ0NCwgfSwKIAl7fSwKIH07Ci0KLWNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0gewotCXsgJiMzNDtyZWdzJiMzNDssIHNwdWZzX3JlZ3NfZHVtcCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4WzEyOF0pfSwKLQl7ICYjMzQ7ZnBjciYjMzQ7LCBzcHVmc19mcGNyX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSwKLQl7ICYjMzQ7bHNsciYjMzQ7LCBOVUxMLCBzcHVmc19sc2xyX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZGVjciYjMzQ7LCBOVUxMLCBzcHVmc19kZWNyX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZGVjcl9zdGF0dXMmIzM0OywgTlVMTCwgc3B1ZnNfZGVjcl9zdGF0dXNfZ2V0LCAxOSB9LAotCXsgJiMzNDttZW0mIzM0Oywgc3B1ZnNfbWVtX2R1bXAsIE5VTEwsIExTX1NJWkUsIH0sCi0JeyAmIzM0O3NpZ25hbDEmIzM0Oywgc3B1ZnNfc2lnbmFsMV9kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDtzaWduYWwxX3R5cGUmIzM0OywgTlVMTCwgc3B1ZnNfc2lnbmFsMV90eXBlX2dldCwgMTkgfSwKLQl7ICYjMzQ7c2lnbmFsMiYjMzQ7LCBzcHVmc19zaWduYWwyX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sCi0JeyAmIzM0O3NpZ25hbDJfdHlwZSYjMzQ7LCBOVUxMLCBzcHVmc19zaWduYWwyX3R5cGVfZ2V0LCAxOSB9LAotCXsgJiMzNDtldmVudF9tYXNrJiMzNDssIE5VTEwsIHNwdWZzX2V2ZW50X21hc2tfZ2V0LCAxOSB9LAotCXsgJiMzNDtldmVudF9zdGF0dXMmIzM0OywgTlVMTCwgc3B1ZnNfZXZlbnRfc3RhdHVzX2dldCwgMTkgfSwKLQl7ICYjMzQ7bWJveF9pbmZvJiMzNDssIHNwdWZzX21ib3hfaW5mb19kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDtpYm94X2luZm8mIzM0Oywgc3B1ZnNfaWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sCi0JeyAmIzM0O3dib3hfaW5mbyYjMzQ7LCBzcHVmc193Ym94X2luZm9fZHVtcCwgTlVMTCwgNCAqIHNpemVvZih1MzIpfSwKLQl7ICYjMzQ7ZG1hX2luZm8mIzM0Oywgc3B1ZnNfZG1hX2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfZG1hX2luZm8pfSwKLQl7ICYjMzQ7cHJveHlkbWFfaW5mbyYjMzQ7LCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAsCi0JCQkgICBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9wcm94eWRtYV9pbmZvKX0sCi0JeyAmIzM0O29iamVjdC1pZCYjMzQ7LCBOVUxMLCBzcHVmc19vYmplY3RfaWRfZ2V0LCAxOSB9LAotCXsgJiMzNDtucGMmIzM0OywgTlVMTCwgc3B1ZnNfbnBjX2dldCwgMTkgfSwKLQl7IE5VTEwgfSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCmluZGV4IGQzMzc4N2M1N2MzOWEuLjYxMmI1MDc1ZDBlY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oCkBAIC0yMzIsMTMgJiM0MzsyMzIsOSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107CiAKIC8qIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uICovCiBleHRlcm4gc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzOwotc3RydWN0IGNvcmVkdW1wX3BhcmFtczsKIGxvbmcgc3B1ZnNfcnVuX3NwdShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgdTMyICpucGMsIHUzMiAqc3RhdHVzKTsKIGxvbmcgc3B1ZnNfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYXRoICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJCQl1bW9kZV90IG1vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKLS8qIEVMRiBjb3JlZHVtcCBjYWxsYmFja3MgZm9yIHdyaXRpbmcgU1BVIEVMRiBub3RlcyAqLwotZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpOwotZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY29udGV4dF9mb3BzOwogCkBAIC0zMzUsMTQgJiM0MzszMzEsNiBAQCB2b2lkIHNwdWZzX3N0b3BfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgaXJxKTsKIHZvaWQgc3B1ZnNfbWZjX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSk7CiB2b2lkIHNwdWZzX2RtYV9jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUsIGludCB0eXBlKTsKIAotc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciB7Ci0JY2hhciAqbmFtZTsKLQlzc2l6ZV90ICgqZHVtcCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pOwotCXU2NCAoKmdldCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpOwotCXNpemVfdCBzaXplOwotfTsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXTsKLQogZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKIGV4dGVybiB2b2lkIHNwdV9maW5pX2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpOwogZXh0ZXJuIGludCBzcHVfc2F2ZShzdHJ1Y3Qgc3B1X3N0YXRlICpwcmV2LCBzdHJ1Y3Qgc3B1ICpzcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwppbmRleCBlYTRiYTFiNmNlNmE5Li5iNmRlMzcxNTBlNzM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYwpAQCAtODIsOCAmIzQzOzgyLDQgQEAgc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzID0gewogCS5zcHVfcnVuID0gZG9fc3B1X3J1biwKIAkubm90aWZ5X3NwdXNfYWN0aXZlID0gZG9fbm90aWZ5X3NwdXNfYWN0aXZlLAogCS5vd25lciA9IFRISVNfTU9EVUxFLAotI2lmZGVmIENPTkZJR19DT1JFRFVNUAotCS5jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSwKLQkuY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUgPSBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSwKLSNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCAwNmQwZGYxMDUzODIzLi5kYjMyYmI0MGE4NjcwIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X2VsZi5jCkBAIC0yMDI5LDcgJiM0MzsyMDI5LDcgQEAgc3RhdGljIGludCBlbGZfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCiAJewogCQlzaXplX3Qgc3ogPSBpbmZvLnNpemU7CiAKLQkJLyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi8KJiM0MzsJCS8qIEZvciB4ODYgeHN0YXRlICovCiAJCXN6ICYjNDM7PSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpOwogCiAJCXBoZHI0bm90ZSA9IGttYWxsb2Nfb2JqKCpwaGRyNG5vdGUpOwpAQCAtMjA5Myw3ICYjNDM7MjA5Myw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQogCWlmICghd3JpdGVfbm90ZV9pbmZvKCZhbXA7aW5mbywgY3BybSkpCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCi0JLyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi8KJiM0MzsJLyogRm9yIHg4NiB4c3RhdGUgKi8KIAlpZiAoZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIApkaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmMKaW5kZXggYWMzY2Q3NDgwOGM2NC4uYTQ5ZjJmZDZiZTI4MCAxMDA2NDQKLS0tIGEvZnMvY29yZWR1bXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb3JlZHVtcC5jCkBAIC0xMTE4LDExICYjNDM7MTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLAogCWlmIChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9SRUpFQ1QpCiAJCXJldHVybjsKIAotCS8qIGdldCB1cyBhbiB1bnNoYXJlZCBkZXNjcmlwdG9yIHRhYmxlOyBhbG1vc3QgYWx3YXlzIGEgbm8tb3AgKi8KLQkvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovCi0JaWYgKHVuc2hhcmVfZmlsZXMoKSkKLQkJcmV0dXJuOwotCiAJaWYgKChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9LRVJORUwpICZhbXA7JmFtcDsgIWNvcmVkdW1wX3dyaXRlKGNuLCBjcHJtLCBiaW5mbXQpKQogCQlyZXR1cm47CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQwNgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IFdvcnRoIEZ1enppbmc/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZXNzZW50aWFsbHkgY2xlYW5zIHVwIHNvbWUgZGVhZCBjb2RlIHJlbGF0ZWQgdG8gdGhlIFN5bmVyZ2lzdGljIFByb2Nlc3NpbmcgVW5pdCAoU1BVKSBvbiB0aGUgUG93ZXJQQyBDZWxsIHBsYXRmb3JtLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlbW92aW5nIHRoZSBTUFUgY29yZWR1bXAgY29kZSBhbmQsIGltcG9ydGFudGx5LCB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCB3aXRoaW4gdGhlIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtSZW1vdmFsPyBIbW0sIHByb2JhYmx5IG5vdCB3b3J0aCBhIGRlZXAgZGl2ZSBmb3IgZnV6emluZywgdXN1YWxseS4mIzM0OyBCdXQgbGV0JiMzOTtzIGRpZyBkZWVwZXIuCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgdW5zaGFyZV9maWxlcygpYCByZW1vdmFsIGZyb20gYGRvX2NvcmVkdW1wKClgLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBmdW5jdGlvbiwgYW5kIHRoYXQgYWx3YXlzIGdldHMgbXkgYXR0ZW50aW9uLiBJbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgaXQgd2FzIHByb2JhYmx5IG9ubHkgYSBDZWxsIHNwZWNpZmljIGNoYW5nZSwgaG93ZXZlciwgaXQgaXMgaW4gYGZzL2NvcmVkdW1wLmNgLiBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIHRoaXMuIFRoZSBjb21tZW50IG1lbnRpb25zIENlbGwgU1BVcyBzcGVjaWZpY2FsbHksIGJ1dCB0aGUgZnVuY3Rpb24gaXRzZWxmIGlzIGJyb2FkZXIuCgpUaGUgcXVlc3Rpb24gYmVjb21lcywgaXMgdGhpcyBjaGFuZ2UgKmFjdHVhbGx5KiB3b3J0aCBmdXp6aW5nPyBUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgY2FsbCB0byBgdW5zaGFyZV9maWxlcygpYCwgd2hpY2ggbWVhbnMsIHdoZW4gdGhlIGNvcmUgaXMgZHVtcGVkLCB0aGUgZmlsZXMgYXJlICpubyBsb25nZXIqIHVuc2hhcmVkLiBXaGlsZSBhIGxvdCBvZiB0aGUgY29kZSBiZWluZyByZW1vdmVkIGlzIG9uIGFuIG9ic29sZXRlIGFyY2hpdGVjdHVyZSwgdGhpcyBjb3VsZCBzdGlsbCBsZWFkIHRvIGEgc2VjdXJpdHkgY29uY2Vybi4KCkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZCBpbiBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBJZiBpdCYjMzk7cyBzb21ldGhpbmcgdGhhdCBjYW4mIzM5O3QgYmUgcmVhY2hlZCwgb3IgaXMgZGVwcmVjYXRlZCBvciBpbXBvc3NpYmxlIHRvIHJlcGxpY2F0ZSwgdGhlbiBpdCBtYXkgbm90IGJlIHdvcnRoIGZ1enppbmcuIEkgYmVsaWV2ZSBRRU1VIGRvZXMgKm5vdCogZW11bGF0ZSB0aGUgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIFNQVXMsIHdoaWNoIG1lYW5zLCB0aGUgY29kZSBpcyBsaWtlbHkgZGVhZCBpbiBtb2Rlcm4gc3lzdGVtcy4KCkJ1dCB0aGVuIEkgaGFkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjcml0ZXJpYTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7CgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcyB0byBgZnMvY29yZWR1bXAuY2AsIGxldCYjMzk7cyBzZWU6CgpgYGBjCkBAIC0xMTE4LDExICYjNDM7MTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLAogCWlmIChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9SRUpFQ1QpCiAJCXJldHVybjsKIAotCS8qIGdldCB1cyBhbiB1bnNoYXJlZCBkZXNjcmlwdG9yIHRhYmxlOyBhbG1vc3QgYWx3YXlzIGEgbm8tb3AgKi8KLQkvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovCi0JaWYgKHVuc2hhcmVfZmlsZXMoKSkKLQkJcmV0dXJuOwotCiAJaWYgKChjbi0mZ3Q7bWFzayAmYW1wOyBDT1JFRFVNUF9LRVJORUwpICZhbXA7JmFtcDsgIWNvcmVkdW1wX3dyaXRlKGNuLCBjcHJtLCBiaW5mbXQpKQogCQlyZXR1cm47CiBgYGAKCk9rLCBjb25maXJtZWQsIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgc2VlbXMgbGlrZSB0aGUgZmlsZXMgYXJlIG5vIGxvbmdlciB1bnNoYXJlZCB3aGVuIGBkb19jb3JlZHVtcGAgaXMgY2FsbGVkLCBpbiAqYW55KiBhcmNoaXRlY3R1cmUuIFRoaXMgY291bGQgbGVhZCB0byBhIGJ1ZyBpZiBzb21ldGhpbmcgZWxzZSByZWxpZXMgb24gdGhpcyBiZWhhdmlvci4gQnV0IGl0ICp3YXMqIGFkZGVkIHNwZWNpZmljYWxseSBmb3IgQ2VsbCBTUFUuIAoKVWx0aW1hdGVseSwgdGhpcyBpcyBhIGhhcmQgY2FsbC4gTXkgaW5zdGluY3Qgc2F5cyB0aGlzIGlzIGxpa2VseSBhIHJlbW92YWwgb2YgYW4gb2Jzb2xldGUgY2FsbCwgYnV0IEkgY2FuJiMzOTt0IGlnbm9yZSB0aGUgY29yZSBmdW5jdGlvbiBjaGFuZ2UuIEJ1dCBJIHN1c3BlY3QgdGhlIGNhbGwgd2FzIG5vdCBiZWluZyB1c2VkLiBJdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIHRoaXMgY2hhbmdlIGZ1cnRoZXIgZm9yIHBvc3NpYmxlIGJ1Z3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fY29yZWR1bXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9jb3JlZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvcmVkdW1wLmM9MTA3NT1zdGF0aWMgaW5saW5lIGJvb2wgY29yZWR1bXBfc2tpcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtMTA4Ni1cbmZzL2NvcmVkdW1wLmM6MTA4NzpzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbmZzL2NvcmVkdW1wLmMtMTA4OC1cdFx0XHRzaXplX3QgKiphcmd2LCBpbnQgKmFyZ2MsIGNvbnN0IHN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdClcbi0tXG5mcy9jb3JlZHVtcC5jPTExNTE9dm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbylcbi0tXG5mcy9jb3JlZHVtcC5jLTExODktXHRzY29wZWRfd2l0aF9jcmVkcyhjcmVkKVxuZnMvY29yZWR1bXAuYzoxMTkwOlx0XHRkb19jb3JlZHVtcChcdTAwMjZjbiwgXHUwMDI2Y3BybSwgXHUwMDI2YXJndiwgXHUwMDI2YXJnYywgYmluZm10KTtcbmZzL2NvcmVkdW1wLmMtMTE5MS1cdGNvcmVkdW1wX2NsZWFudXAoXHUwMDI2Y24sIFx1MDAyNmNwcm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjk5CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvcmVkdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggcmVtb3ZlcyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgJiMzNDtJcyB0aGlzIHdvcnRoIGZ1enppbmc/JiMzNDsgVGhlIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQgcmVtb3ZhbCBpcyBhbG1vc3QgaXJyZWxldmFudCBzaW5jZSB0aGF0IGFyY2hpdGVjdHVyZSBpcyBwcmV0dHkgbXVjaCBkZWFkIGFuZCBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIHJlbW92YWwgb2YgdGhhdCBgdW5zaGFyZV9maWxlcygpYCBjYWxsIHdpdGhpbiBgZG9fY29yZWR1bXAoKWAuCgpJbml0aWFsbHksIEkgZmlndXJlZCBmdXp6aW5nIGBkb19jb3JlZHVtcGAgKmNvdWxkKiBiZSB1c2VmdWwsIGJ1dCB0aGUgcmVtb3ZlZCBmdW5jdGlvbiBzZWVtZWQgdG8gYmUgYSBuZWFyIG5vLW9wLiBUaGVuIEkgcmVtZW1iZXJlZCwgYHVuc2hhcmVfZmlsZXMoKWAgYWN0dWFsbHkgbWFuYWdlcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLiBJZiB0aGUgdGFibGUgaXMgc2hhcmVkLCBpdCAqY3JlYXRlcyBhIG5ldyBvbmUqLCBvdGhlcndpc2UgZG9lcyBub3RoaW5nLiBTbywgcmVtb3ZpbmcgaXQgbWVhbnMgdGhlIGNvcmVkdW1wIHByb2Nlc3Mgbm93ICpzaGFyZXMqIGl0cyBmaWxlIGRlc2NyaXB0b3IgdGFibGUgd2l0aCBvdGhlciB0aHJlYWRzL3Byb2Nlc3NlcyBpZiBpdCB3YXMgc2hhcmVkLgoKTm93LCBjb3JlZHVtcHMgdXN1YWxseSBoYXBwZW4gYWZ0ZXIgYSBwcm9jZXNzIGNyYXNoZXMsIG9mdGVuIGFmdGVyIHRlcm1pbmF0aW5nIG90aGVyIHRocmVhZHMgb3IgYmVpbmcgaGl0IGJ5IGEgZmF0YWwgc2lnbmFsLiBTbywgSSBzZWUgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgaW4gYGZzL2NvcmVkdW1wLmNgLCB3aGljaCBtZWFucyBpdCYjMzk7cyAqcmVhY2hhYmxlKi4gQ3Jhc2hpbmcgYSBwcm9jZXNzIHRyaWdnZXJzIGBkb19jb3JlZHVtcGAsIG1ha2luZyBpdCByZWFjaGFibGUuCgpHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgSSBuZWVkIHRvIGNoZWNrIHRoZSBleGFjdCBpbXBhY3Qgb2YgdGhpcyByZW1vdmFsLiBUaGUgcHJvbXB0IHNheXMsICYjMzQ7SWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLi4udXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuJiMzNDsgVGltZSB0byBnbyBkZWVwZXIgYW5kIGNoZWNrIGB1bnNoYXJlX2ZpbGVzYCBpbiBga2VybmVsL2ZvcmsuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaGFyZV9maWxlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2ZvcmsuYz0zMzU0PVNZU0NBTExfREVGSU5FMSh1bnNoYXJlLCB1bnNpZ25lZCBsb25nLCB1bnNoYXJlX2ZsYWdzKVxuLS1cbmtlcm5lbC9mb3JrLmMtMzM2NC1cbmtlcm5lbC9mb3JrLmM6MzM2NTppbnQgdW5zaGFyZV9maWxlcyh2b2lkKVxua2VybmVsL2ZvcmsuYy0zMzY2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjExNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb3JlIER1bXAgVnVsbmVyYWJpbGl0eSBDb25jZXJucyoqCgpPa2F5LCBzbyBgdW5zaGFyZV9maWxlc2AgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSByZW1vdmFsIG9mIHRoaXMgZnVuY3Rpb24gZnJvbSBgZG9fY29yZWR1bXBgIGlzIHJhaXNpbmcgc29tZSByZWQgZmxhZ3MgaW4gbXkgbWluZC4gVGhlIGNydXggb2YgaXQgaXMgdGhpczogaWYgYSBwcm9jZXNzIGlzIHNoYXJpbmcgaXRzIGZpbGUgZGVzY3JpcHRvciB0YWJsZSDigJMgc2F5LCB2aWEgYENMT05FX0ZJTEVTYCAqd2l0aG91dCogYENMT05FX1RIUkVBRGAg4oCTIGFuZCB0aGVuIGNyYXNoZXMsIHRoZSBjb3JlZHVtcCBwcm9jZXNzICp3b24mIzM5O3QqIHVuc2hhcmUgdGhvc2UgZmlsZXMuIFRoZSBwb3RlbnRpYWwgY29uc2VxdWVuY2UgaXMgdGhhdCB0aGUgY29yZWR1bXAgcHJvY2VzcyBjb3VsZCBpbmFkdmVydGVudGx5IG1vZGlmeSB0aGF0IHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGlmIGBkb19jb3JlZHVtcGAgaXRzZWxmLCBvcGVucyBhIHBpcGUgb3IgYSBmaWxlIHRvIHdyaXRlIHRoZSBjb3JlIGR1bXAsIGl0IHdvdWxkIGFkZCBhIGZpbGUgZGVzY3JpcHRvciB0byB0aGUgc2hhcmVkIHRhYmxlLiBUaGlzIHdvdWxkIG1lYW4gdGhhdCBwcm9jZXNzZXMgc2hhcmluZyB0aGF0IHRhYmxlIGNvdWxkIHBvdGVudGlhbGx5IGhhdmUgYWNjZXNzIHRvIHRoaXMgaW5mb3JtYXRpb24uCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgZG9fY29yZWR1bXBgIGlzIGluZGVlZCBvcGVuaW5nIHRoZXNlIGZpbGVzL3BpcGVzLiBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIHJpZ2h0IGF3YXkgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsZV9vcGVuX3Jvb3R8ZmlscF9vcGVufGZpbGVfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvcmVkdW1wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvY29yZWR1bXAuYz04Nzg9c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTkwMi1cdFx0ICogSWYgaXQgZG9lc24mIzM5O3QgZXhpc3QsIHRoYXQmIzM5O3MgZmluZS4gSWYgdGhlcmUmIzM5O3Mgc29tZVxuZnMvY29yZWR1bXAuYzo5MDM6XHRcdCAqIG90aGVyIHByb2JsZW0sIHdlJiMzOTtsbCBjYXRjaCBpdCBhdCB0aGUgZmlscF9vcGVuKCkuXG5mcy9jb3JlZHVtcC5jLTkwNC1cdFx0ICovXG4tLVxuZnMvY29yZWR1bXAuYy05MjYtXHRcdHNjb3BlZF93aXRoX2luaXRfZnMoKVxuZnMvY29yZWR1bXAuYzo5Mjc6XHRcdFx0ZmlsZSA9IGZpbHBfb3Blbihjbi1cdTAwM2Vjb3JlbmFtZSwgb3Blbl9mbGFncywgMDYwMCk7XG5mcy9jb3JlZHVtcC5jLTkyOC1cdH0gZWxzZSB7XG5mcy9jb3JlZHVtcC5jOjkyOTpcdFx0ZmlsZSA9IGZpbHBfb3Blbihjbi1cdTAwM2Vjb3JlbmFtZSwgb3Blbl9mbGFncywgMDYwMCk7XG5mcy9jb3JlZHVtcC5jLTkzMC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkNvcmVkdW1wIEZpbGUgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBjb3JlZHVtcCBwcm9jZXNzLiBJIHJlbWVtYmVyIHRoYXQgYGZpbHBfb3BlbmAgaXMgZGVmaW5pdGVseSB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBnZW5lcmF0aW5nIGEgY29yZSBkdW1wLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBjb3JlZHVtcF9maWxlYC4gTm93LCBJIG5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgb2YgdGhlIGNhbGwgY2hhaW4gaGVyZS4gSXMgYGNvcmVkdW1wX2ZpbGVgIHJlYWxseSBkaXJlY3RseSBjYWxsZWQgYnkgYGRvX2NvcmVkdW1wYD8gSSYjMzk7bSBwcmV0dHkgY2VydGFpbiBpdCBpcywgYnV0IGdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbiBlcnJvciwgaXQmIzM5O3MgYWx3YXlzIGJlc3QgdG8gZG91YmxlLWNoZWNrIHRoZSBjb2RlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhlIGNhbGwgcmVsYXRpb25zaGlwIGJldHdlZW4gYGRvX2NvcmVkdW1wYCBhbmQgYGNvcmVkdW1wX2ZpbGVgIHNvIEkgY2FuIGNvbmZpcm0gbXkgbWVudGFsIG1vZGVsLiBUaGlzIGxldmVsIG9mIG1ldGljdWxvdXNuZXNzIGlzIGVzc2VudGlhbCBpbiBrZXJuZWwgZGVidWdnaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlZHVtcF9maWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY29yZWR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb3JlZHVtcC5jPTg3Mj1zdGF0aWMgaW5saW5lIGJvb2wgY29yZWR1bXBfZm9yY2Vfc3VpZF9zYWZlKGNvbnN0IHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4tLVxuZnMvY29yZWR1bXAuYy04NzctXG5mcy9jb3JlZHVtcC5jOjg3ODpzdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuZnMvY29yZWR1bXAuYy04NzktXHRcdFx0ICBjb25zdCBzdHJ1Y3QgbGludXhfYmluZm10ICpiaW5mbXQpXG4tLVxuZnMvY29yZWR1bXAuYz0xMDg3PXN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtMTA5OC1cdGNhc2UgQ09SRURVTVBfRklMRTpcbmZzL2NvcmVkdW1wLmM6MTA5OTpcdFx0aWYgKCFjb3JlZHVtcF9maWxlKGNuLCBjcHJtLCBiaW5mbXQpKVxuZnMvY29yZWR1bXAuYy0xMTAwLVx0XHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyODYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGB1bnNoYXJlX2ZpbGVzKClgIFJlbW92YWwqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBhYm91dCBgZmlscF9vcGVuYC4gSXQgKmRvZXNuJiMzOTt0KiBhY3R1YWxseSBwdXQgdGhlIGZpbGUgaW50byB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLiBJdCBqdXN0IGdpdmVzIHlvdSBhIGBzdHJ1Y3QgZmlsZSAqYC4gVGhhdCBtZWFucyBpdCBkb2VzbiYjMzk7dCB0b3VjaCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIGF0IGFsbC4gU28sIHRoZSBxdWVzdGlvbiBpczogd2h5IHdhcyBgdW5zaGFyZV9maWxlcygpYCBuZWVkZWQgaW4gdGhlIGZpcnN0IHBsYWNlPwoKVGhlIGNvbW1lbnQgbWVudGlvbmVkIHRoZSBDZWxsIFNQVSBjb3JlZHVtcCBjb2RlIGFuZCBob3cgaXQgcmVhZCB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcy4gQWgsIHRoYXQmIzM5O3MgaXQhIGB1bnNoYXJlX2ZpbGVzKClgIHdhcyB0aGVyZSBiZWNhdXNlIHRoZSBjb3JlZHVtcCBjb2RlIHdhcyAqaXRlcmF0aW5nKiB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3JzIHRvIGZpbmQgYW5kIGR1bXAgU1BVIGNvbnRleHRzLiBJZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHdhcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMsIGl0ZXJhdGluZyBvdmVyIGl0IHdoaWxlIGFub3RoZXIgcHJvY2VzcyBtaWdodCBiZSBtb2RpZnlpbmcgaXQgY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBBIHN0YWJsZSBzbmFwc2hvdCB3YXMgbGlrZWx5IG5lY2Vzc2FyeSBmb3IgYSBjb25zaXN0ZW50IGNvcmVkdW1wLgoKTm93LCBzaW5jZSB0aGUgQ2VsbCBTUFUgY29yZWR1bXAgY29kZSBoYXMgYmVlbiByZW1vdmVkLCBgdW5zaGFyZV9maWxlcygpYCAqc2hvdWxkbiYjMzk7dCogYmUgbmVjZXNzYXJ5IGFueW1vcmUuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIElzIHRoaXMgd29ydGggZXhwbG9yaW5nIGZ1cnRoZXIgd2l0aCBmdXp6aW5nPyBEZWZpbml0ZWx5LiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgZG9fY29yZWR1bXBgLiBFdmVuIHRob3VnaCBpdCYjMzk7cyAmIzM0O2p1c3QmIzM0OyByZW1vdmluZyBgdW5zaGFyZV9maWxlcygpYCwgaXQgc3VidGx5IGFsdGVycyB0aGUgYmVoYXZpb3Igb2YgYGRvX2NvcmVkdW1wYCwgZXNwZWNpYWxseSB3aGVuIGBDTE9ORV9GSUxFU2AgaXMgdXNlZCB3aXRob3V0IGBDTE9ORV9USFJFQURgLgoKSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19jb3JlZHVtcGAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gSXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoZSBlbnRyeSBwb2ludCBtdXN0IGJlIHRocm91Z2ggYHZmc19jb3JlZHVtcGAgb3IgYGNvcmVkdW1wX3Rhc2tfZXhpdGAgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4gVGltZSB0byBjaGVjayB0aGUgY2FsbGVycyBvZiBgdmZzX2NvcmVkdW1wYCB0byBjb25maXJtIHRoaXMgaHVuY2ggYW5kIGVzdGFibGlzaCBhIGdvb2QgdGVzdGluZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0PTU1Mz1kaWZmZXJlbnQgc2V0IG9mIGNyZWRlbnRpYWxzLiAgVGhpcyBpcyBkb25lIGluIHRoZSBmb2xsb3dpbmcgcGxhY2VzOlxuLS1cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1NS0gKiBgYHN5c19mYWNjZXNzYXQoKWBgLlxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NTU2OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1Ny0gKiBuZnM0cmVjb3Zlci5jLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD0yNTQ9Y29uc3TmjIfpkojkuIrmk43kvZzvvIzlm6DmraTkuI3pnIDopoHov5vooYznsbvlnovovazmjaLvvIzkvYbpnIDopoHkuLTml7bmlL7lvINjb25zdOmZkOWumu+8jOS7peS+v+iDveWkn+S/ruaUuVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzUtICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdDo0NzY6ICogYGB2ZnNfY29yZWR1bXAoKWBgLlxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTQ3Ny0gKiBuZnM0cmVjb3Zlci5jLlxuLS1cbmZzL2NvcmVkdW1wLmM9MTA4Nz1zdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbi0tXG5mcy9jb3JlZHVtcC5jLTExNTAtXG5mcy9jb3JlZHVtcC5jOjExNTE6dm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbylcbmZzL2NvcmVkdW1wLmMtMTE1Mi17XG4tLVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oPTQ4PWludCBkdW1wX3VzZXJfcmFuZ2Uoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC00OS1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKTtcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaDo1MDpleHRlcm4gdm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbyk7XG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNTEtXG4tLVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTY5LSNlbHNlXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKSB7fVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTcxLVxuLS1cbmtlcm5lbC9zaWduYWwuYz0yODAzPWJvb2wgZ2V0X3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcbi0tXG5rZXJuZWwvc2lnbmFsLmMtMzAyMy1cdFx0XHQgKi9cbmtlcm5lbC9zaWduYWwuYzozMDI0Olx0XHRcdHZmc19jb3JlZHVtcChcdTAwMjZrc2lnLVx1MDAzZWluZm8pO1xua2VybmVsL3NpZ25hbC5jLTMwMjUtXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjkKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2ZnNfY29yZWR1bXBgIEZ1bmN0aW9uKioKCk9rYXksIHNvIGB2ZnNfY29yZWR1bXBgIGlzIHdoZXJlIHRoaXMgd2hvbGUgdGhpbmcga2lja3Mgb2ZmLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGlzIGZ1bmN0aW9uIGFzIHRoZSBwcmltYXJ5IGZvY3VzLiBBbHJpZ2h0LCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmZzX2NvcmVkdW1wYCBpcyBpbmRlZWQgYSBwdWJsaWMgQVBJIGVudHJ5IHBvaW50IGFuZCBub3Qgc29tZSBpbnRlcm5hbCwgc3RhdGljIGZ1bmN0aW9uIOKAkyBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4gQnV0IGhvbGQgb24sIHRoZSBjYWxsIGdyYXBoIHNob3dzIGB2ZnNfY29yZWR1bXBgIGJlaW5nIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0JiMzOTtzIGJlaW5nIGludm9rZWQuIERvZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGhpbmdlIG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEFoLCB5ZXMsIGl0IGFwcGVhcnMgYENPTkZJR19DT1JFRFVNUGAgaXMgYSBwcmVyZXF1aXNpdGUuIEdvb2QsIGdvb2QgLSBJJiMzOTttIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT1JFRFVNUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD0xNzE9Y29uZmlnIEJJTkZNVF9NSVNDX0JQRlxuLS1cbmZzL0tjb25maWcuYmluZm10LTE4NC1cbmZzL0tjb25maWcuYmluZm10OjE4NTpjb25maWcgQ09SRURVTVBcbmZzL0tjb25maWcuYmluZm10LTE4Ni1cdGJvb2wgXCYjMzQ7RW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk0NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBhYm91dCBgQ09SRURVTVBgLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgcmVtb3ZhbCBvZiBTUFUtc3BlY2lmaWMgY29yZWR1bXAgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggZnV6emluZz8mIzM0OyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KClRoZSBwcm9tcHQgcHJvdmlkZXMgc29tZSBjbGVhciBndWlkZWxpbmVzOiBPbmx5IGNoYW5nZXMgdGhhdCBtb2RpZnkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIGFyZSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IHJlbW92ZXMgYSBjYWxsIHRvIGB1bnNoYXJlX2ZpbGVzKClgIGZyb20gYGRvX2NvcmVkdW1wKClgLiBUaGlzICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdzsgaXQmIzM5O3MgYSBmdW5jdGlvbiBjYWxsIHJlbW92YWwsIHdoaWNoIGlzIHNpZ25pZmljYW50LiBDcnVjaWFsbHksIGFueSBwcm9jZXNzIGluIFFFTVUgY2FuIGdlbmVyYXRlIGEgY29yZSBkdW1wLCBzbyB0aGlzIGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGF0IGNyaXRlcmlhLCB0aGlzIGxvb2tzIGxpa2UgYSBgV29ydGhGdXp6aW5nPXRydWVgIHNpdHVhdGlvbi4KCkhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jYCBhbmQgcmVsYXRlZCBjb2RlLiBUaGF0JiMzOTtzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgYW5kIEkgd29uJiMzOTt0IGJlIGZ1enppbmcgQ2VsbC4gVGhlIHJlbW92YWwgb2YgYHVuc2hhcmVfZmlsZXMoKWAgb2NjdXJzIGluIGBmcy9jb3JlZHVtcC5jYCB3aGljaCBpcyBnZW5lcmljLiBUaGUgY29tbWVudCBjaGFuZ2UgaW4gYGZzL2JpbmZtdF9lbGYuY2AgaXMgY29zbWV0aWMsIGFuZCBpcnJlbGV2YW50IHRvIHRoZSBtYWluIGNoYW5nZS4gVGhlICpvbmx5KiByZWxldmFudCBmdW5jdGlvbmFsIGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiBgdW5zaGFyZV9maWxlcygpYC4KCk5vdywgZG9lcyBpdCAqcmVhbGx5KiBkZXNlcnZlIGZ1enppbmc/IFRoZSBwcm9tcHQgc2F5cywgJiMzNDtJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi51c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBJdCAqZG9lcyogbW9kaWZ5IGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXQgaXMgZXhlY3V0ZWQuIFNvLCB5ZXMsIHRoZSBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYHZmc19jb3JlZHVtcGAuIFRoZSBgQ09SRURVTVBgIGNvbmZpZyBzaG91bGQgYmUgZW5hYmxlZC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjay4gV2hhdCYjMzk7cyB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIGB1bnNoYXJlX2ZpbGVzKClgPyBUaGUgZnVuY3Rpb24gdW5zaGFyZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gSWYgYSBwcm9jZXNzIGR1bXBzIGNvcmUsIHdoYXQgaGFwcGVucyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9ycyBhcmVuJiMzOTt0IHVuc2hhcmVkPyBDb3JlZHVtcCBzaG91bGRuJiMzOTt0IG1vZGlmeSB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIGRpcmVjdGx5LCBhdCBsZWFzdCBub3QgaW4gYW55IG9idmlvdXMgd2F5LiBXYWl0LCBkb2VzIGBkdW1wX2VtaXRgIHVzZSBhbnk/IE5vLCBpdCB3cml0ZXMgdG8gYGNwcm0tJmd0O2ZpbGVgLiBXaGF0IGFib3V0IHVzZXItbW9kZSBoZWxwZXJzPyBgZG9fY29yZWR1bXBgIGNhbiBwaXBlIHRoZSBjb3JlIGR1bXAgdG8gYSB1c2VyLW1vZGUgaGVscGVyLCBhbmQgdGhpcyB1c2VzIGBjYWxsX3VzZXJtb2RlaGVscGVyX3NldHVwYCBhbmQgYGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlY2AuIFN0aWxsLCB0aGVyZSBpcyBubyBtb2RpZmljYXRpb24gb2YgdGhlIGR1bXBpbmcgcHJvY2VzcyYjMzk7IGZpbGUgZGVzY3JpcHRvciB0YWJsZS4KClNvLCBpdCBzZWVtcyB0aGF0IGB1bnNoYXJlX2ZpbGVzKClgIHdhcyB0cnVseSBvbmx5IG5lZWRlZCBmb3IgQ2VsbCBTUFUsIHdoaWNoIGl0ZXJhdGVkIG92ZXIgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gVGhpcyByZW1vdmFsIGlzIGVzc2VudGlhbGx5IGEgY2xlYW4tdXAsIHdoaWNoIGlzIGdvb2QuIEJ1dCwgZ2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljLCB0aGUgcHJ1ZGVudCB0aGluZyB0byBkbyBpcyBtYXJrIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuCgpKdXN0IG9uZSBmaW5hbCBxdWVzdGlvbjogSXMgdGhlcmUgYW55IG90aGVyIGFyY2hpdGVjdHVyZSB0aGF0IHJlbGllcyBvbiBgdW5zaGFyZV9maWxlcygpYCBkdXJpbmcgY29yZWR1bXA/IExldCYjMzk7cyB2ZXJpZnkgbm8gb3RoZXIgYXJjaGl0ZWN0dXJlIGltcGxlbWVudHMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgaXRlcmF0ZXMgb3ZlciB0aGUgZmlsZSBkZXNjcmlwdG9ycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTU5NT1jb25maWcgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFU1xuLS1cbmFyY2gvS2NvbmZpZy01OTktXHQgIGFyY2gtc3BlY2lmaWMgRUxGIG5vdGUgc2VjdGlvbiB0byBjb3JlIGZpbGVzLiBJdCBtdXN0IHByb3ZpZGUgdHdvXG5hcmNoL0tjb25maWc6NjAwOlx0ICBmdW5jdGlvbnM6IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCkgYW5kXG5hcmNoL0tjb25maWctNjAxLVx0ICBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoKSB3aGljaCBhcmUgaW52b2tlZCBieSB0aGUgRUxGIGNvcmVcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jPTE5NjY9aW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5NS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmM6MTk5NjppbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5Ny17XG4tLVxuZnMvYmluZm10X2VsZi5jPTE5OTA9c3RhdGljIGludCBlbGZfY29yZV9kdW1wKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4tLVxuZnMvYmluZm10X2VsZi5jLTIwMzItXHRcdC8qIEZvciB4ODYgeHN0YXRlICovXG5mcy9iaW5mbXRfZWxmLmM6MjAzMzpcdFx0c3ogJiM0Mzs9IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7XG5mcy9iaW5mbXRfZWxmLmMtMjAzNC1cbi0tXG5pbmNsdWRlL2xpbnV4L2VsZi5oPTY2PXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4tLVxuaW5jbHVkZS9saW51eC9lbGYuaC02OC0jaWZuZGVmIENPTkZJR19BUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTXG5pbmNsdWRlL2xpbnV4L2VsZi5oOjY5OnN0YXRpYyBpbmxpbmUgaW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZWxmLmgtNzAtc3RhdGljIGlubGluZSBpbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pIHsgcmV0dXJuIDA7IH1cbmluY2x1ZGUvbGludXgvZWxmLmgtNzEtI2Vsc2VcbmluY2x1ZGUvbGludXgvZWxmLmg6NzI6ZXh0ZXJuIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTtcbmluY2x1ZGUvbGludXgvZWxmLmgtNzMtZXh0ZXJuIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDExCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgeDg2IHhzdGF0ZSBhbmQgQ29yZSBEdW1wcyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSB4ODYgeHN0YXRlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljYWxseSBpbmNsdWRlcyB0aGUgZnVuY3Rpb25zIGBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZWAgYW5kIGBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgc28gd2UmIzM5O3JlIGhhbmRsaW5nIHRoZSBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGNvcmUgZHVtcCBwcm9jZXNzLiYjMzQ7IEdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0JiMzOTtzIGRvaW5nIHRoYXQuIE15IG5leHQgc3RlcCwgbmF0dXJhbGx5LCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpbXBsZW1lbnRhdGlvbiBpdGVyYXRlcyBvdmVyIGZpbGUgZGVzY3JpcHRvcnMgZHVyaW5nIHRoZSBjb3JlIGR1bXAgcHJvY2Vzcy4gVGhpcyB3b3VsZCBiZSBjcnVjaWFsIGluIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgZGF0YSBmbG93IGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlIHhzdGF0ZSBkYXRhIGlzIGdldHRpbmcgd3JpdHRlbiBkaXJlY3RseSwgb3IgaW5kaXJlY3RseS4gVGhlIHdheSBpdCBoYW5kbGVzIGZpbGUgZGVzY3JpcHRvcnMgd291bGQgZGljdGF0ZSB0aGlzIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jPTE5NjY9aW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5NS1cbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmM6MTk5NjppbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODEzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBDb3JlIER1bXAgTWV0YWRhdGEgaW4geDg2IEFyY2hpdGVjdHVyZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIGhvdyBvdXIgY29yZSBkdW1wcyBoYW5kbGUgZXh0ZW5kZWQgc3RhdGUgZGF0YS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCB2YXJpYWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgeDg2IGFyY2hpdGVjdHVyZSBhbmQgaXRzIGZsb2F0aW5nLXBvaW50IHVuaXQgKEZQVSkgb3IgZXh0ZW5kZWQgc3RhdGUgKHhzdGF0ZSkgY29tcG9uZW50cywgd2hpY2ggYXJlIGNydWNpYWwgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHByb2Nlc3NvciBjb250ZXh0IGR1cmluZyBkZWJ1Z2dpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBtdWNoIHNwYWNlIHdlIGFsbG9jYXRlIGZvciB0aGlzIGV4dHJhIGluZm9ybWF0aW9uLiBUaGlzIHdpbGwgaW1wYWN0IHRoZSBzaXplIG9mIHRoZSBjb3JlIGR1bXAgZmlsZXMsIGFuZCBob3cgbXVjaCBkYXRhIGlzIGF2YWlsYWJsZSBmb3IgYW5hbHlzaXMgaW4gcG9zdC1tb3J0ZW0gZGVidWdnaW5nLiBLbm93aW5nIHRoaXMgY2FuIGhlbHAgd2hlbiBvcHRpbWl6aW5nIGNvcmUgZHVtcCBjcmVhdGlvbiwgb3IgdHJvdWJsZXNob290aW5nIGlzc3VlcyByZWxhdGVkIHRvIGxhcmdlIGNvcmUgZmlsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk5MDpcdFx0aWYgKChzaXplb2Yoc3RydWN0IHg4Nl94ZmVhdF9jb21wb25lbnQpICogbnVtX3JlY29yZHMpICE9IGVuLm5fZGVzY3N6KVxuMTk5MTpcdFx0XHRyZXR1cm4gMTtcbjE5OTI6XHRcbjE5OTM6XHRcdHJldHVybiAwO1xuMTk5NDpcdH1cbjE5OTU6XHRcbjE5OTY6XHRpbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZClcbjE5OTc6XHR7XG4xOTk4Olx0XHRpbnQgc2l6ZTtcbjE5OTk6XHRcbjIwMDA6XHRcdGlmICghZnB1X3VzZXJfY2ZnLm1heF9mZWF0dXJlcylcbjIwMDE6XHRcdFx0cmV0dXJuIDA7XG4yMDAyOlx0XG4yMDAzOlx0XHQvKiAubm90ZSBoZWFkZXIgKi9cbjIwMDQ6XHRcdHNpemUgID0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7XG4yMDA1Olx0XHQvKiAgTmFtZSBwbHVzIGFsaWdubWVudCB0byA0IGJ5dGVzICovXG4yMDA2Olx0XHRzaXplICYjNDM7PSByb3VuZHVwKHNpemVvZihvd25lcl9uYW1lKSwgNCk7XG4yMDA3Olx0XHRzaXplICYjNDM7PSBnZXRfeHNhdmVfZGVzY19zaXplKCk7XG4yMDA4Olx0XG4yMDA5Olx0XHRyZXR1cm4gc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzNjYKCQkJCQkJCW91dHB1dDogMTY4CgkJCQkJCQl0aG91Z2h0czogNTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvcmUgRHVtcCBMb2dpYyBhbmQgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgbWVzcyBhcm91bmQgd2l0aCBpdGVyYXRpbmcgZmlsZSBkZXNjcmlwdG9ycywgaXQganVzdCBkdW1wcyBgeHN0YXRlYC4gVGhhdCBtZWFucyBgdW5zaGFyZV9maWxlcygpYCB3YXMgKm9ubHkqIG5lZWRlZCBmb3IgQ2VsbCBTUFUuIFJpZ2h0LCBzbyByZW1vdmluZyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHJpZ2h0LCBJJiMzOTtsbCByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gbXkgZm9jdXMgc3ltYm9scyBhcmUgc29saWQuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY29yZWR1bXBzLiBBIHF1aWNrIGNoZWNrIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYSBtb3JlIHNwZWNpZmljIG9yIGJldHRlciBmdW5jdGlvbiB0byB0YXJnZXQuLi5ub3BlLCBgZG9fY29yZWR1bXBgIGlzIHN0YXRpYywgc28gYHZmc19jb3JlZHVtcGAgaXMgdGhlIGV4cG9ydGVkIG9uZSBhbmQgdGhlIGJlc3Qgc3ltYm9sLgoKQW5kIHRoZSBjb25maWcsIGBDT1JFRFVNUGAsIHllcyBpdCYjMzk7cyBqdXN0IGBDT1JFRFVNUGAuIE5vIG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kIHRoZXJlLgoKUmlnaHQsIGxldCYjMzk7cyByZXZpZXcgdGhlICYjMzQ7d29ydGggZnV6emluZyYjMzQ7IGNyaXRlcmlhIGFnYWluLiBPa2F5LCBzbyB0aGUgY2hhbmdlIGlzIGluIGBmcy9jb3JlZHVtcC5jYCwgd2hpY2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gUUVNVS4gQW5kIHRoZSByZW1vdmFsIG9mIGB1bnNoYXJlX2ZpbGVzKClgICpkb2VzKiBhbHRlciBleGVjdXRpb24gZmxvdywgd2hpY2ggc2hvdWxkIG1ha2UgaXQgd29ydGh5IG9mIGZ1enppbmcuCgpXYWl0LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBDb3VsZCB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgcmVtb3ZhbCBiZSBjb25zaWRlcmVkIGEgZGVjb3JhdGl2ZSBjaGFuZ2UsIG9yIHNvbWV0aGluZyB0aGF0IGRvZXNuJiMzOTt0ICpmdW5jdGlvbmFsbHkqIGFsdGVyIGV4ZWN1dGlvbj8gTm8sIHRoYXQmIzM5O3Mgbm90IHJpZ2h0LiBgdW5zaGFyZV9maWxlcygpYCBhbGxvY2F0ZXMgYSBuZXcgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIGlmIGl0JiMzOTtzIHNoYXJlZC4gUmVtb3ZpbmcgaXQgbWVhbnMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSAqcmVtYWlucyogc2hhcmVkLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT1JFRFVNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQsIHdoaWNoIGlzIG9ic29sZXRlIGFuZCB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCBRRU1VLiBIb3dldmVyLCBpdCBhbHNvIHJlbW92ZXMgdGhlIGB1bnNoYXJlX2ZpbGVzKClgIGNhbGwgZnJvbSB0aGUgZ2VuZXJpYyBgZG9fY29yZWR1bXAoKWAgZnVuY3Rpb24gaW4gYGZzL2NvcmVkdW1wLmNgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBhbHRlcnMgaG93IGZpbGUgZGVzY3JpcHRvciB0YWJsZXMgYXJlIGhhbmRsZWQgZHVyaW5nIGEgY29yZWR1bXAgKHRoZXkgYXJlIG5vIGxvbmdlciB1bnNoYXJlZCBpZiBzaGFyZWQgdmlhIENMT05FX0ZJTEVTKS4gVGhpcyBjaGFuZ2UgaXMgcmVhY2hhYmxlIGluIFFFTVUgYW5kIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgd2hlbiBkdW1waW5nIGNvcmUgb2YgcHJvY2Vzc2VzIHdpdGggc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIG9yIHJhY2UgY29uZGl0aW9ucyB3aGVuIGR1bXBpbmcgY29yZSBvZiBwcm9jZXNzZXMgd2l0aCBzaGFyZWQgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTVlNmYzMTEzZjY1Yjk1NmI0YWIwOTkxNjA3Y2IyYjg0NjZiMmJkYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE2OjIxOjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMTYwLDcgJiM0MzsxNjAsNiBAQCBjb25maWcgUFBDCiAJc2VsZWN0IEFSQ0hfSEFTX1VCU0FOCiAJc2VsZWN0IEFSQ0hfSEFTX1ZEU09fQVJDSF9EQVRBCiAJc2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCi0Jc2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFCiAJc2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DSwogCXNlbGVjdCBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRQlpZiBQUENfUkFESVhfTU1VCiAJc2VsZWN0IEFSQ0hfTUlHSFRfSEFWRV9QQ19QQVJQT1JUCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYmI0Yjk0NDQ0ZDNlOC4uNWRjOGM0OTIzZWIxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMTIzLDEyICYjNDM7MTIzLDYgQEAgZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKIAkoMHg3ZmYgJmd0OyZndDsgKFBBR0VfU0hJRlQgLSAxMikpIDogXAogCSgweDNmZmZmICZndDsmZ3Q7IChQQUdFX1NISUZUIC0gMTIpKSkKIAotI2lmZGVmIENPTkZJR19TUFVfQkFTRQotLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFLiBOb3RlIG5hbWUgaXMgJiMzNDtTUFUvJmx0O2ZkJmd0Oy8mbHQ7ZmlsZW5hbWUmZ3Q7JiMzNDsuICovCi0jZGVmaW5lIE5UX1NQVQkJMQotCi0jZW5kaWYgLyogQ09ORklHX1NQVV9CQVNFICovCi0KICNpZmRlZiBDT05GSUdfUFBDNjQKIAogI2RlZmluZSBnZXRfY2FjaGVfZ2VvbWV0cnkobGV2ZWwpIFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaAppbmRleCA5NmFkNDUxMGM4OTU0Li43MTUyMjg1YjYyNjhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oCkBAIC0yMTAsMTUgJiM0MzsyMTAsMTIgQEAgZXh0ZXJuIGxvbmcgc3B1X3N5c19jYWxsYmFjayhzdHJ1Y3Qgc3B1X3N5c2NhbGxfYmxvY2sgKnMpOwogCiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqLwogc3RydWN0IGZpbGU7Ci1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zOwogc3RydWN0IHNwdWZzX2NhbGxzIHsKIAlsb25nICgqY3JlYXRlX3RocmVhZCkoY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsCiAJCQkJCXVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBtb2RlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqbmVpZ2hib3IpOwogCWxvbmcgKCpzcHVfcnVuKShzdHJ1Y3QgZmlsZSAqZmlscCwgX191MzIgX191c2VyICp1bnBjLAogCQkJCQkJX191MzIgX191c2VyICp1c3RhdHVzKTsKLQlpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKSh2b2lkKTsKLQlpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAJdm9pZCAoKm5vdGlmeV9zcHVzX2FjdGl2ZSkodm9pZCk7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwppbmRleCBkYjY1YmZjZDFlNzQ5Li42YmQyNjgxNWMzMzEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZwpAQCAtMTAsNyAmIzQzOzEwLDYgQEAgY29uZmlnIFNQVV9GUwogCXRyaXN0YXRlICYjMzQ7U1BVIGZpbGUgc3lzdGVtJiMzNDsKIAlkZWZhdWx0IG0KIAlkZXBlbmRzIG9uIFBQQ19DRUxMCi0JZGVwZW5kcyBvbiBDT1JFRFVNUAogCXNlbGVjdCBTUFVfQkFTRQogCWhlbHAKIAkgIFRoZSBTUFUgZmlsZSBzeXN0ZW0gaXMgdXNlZCB0byBhY2Nlc3MgU3luZXJnaXN0aWMgUHJvY2Vzc2luZwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jCmluZGV4IDAwMDg5NGUwN2IwMjcuLjhiZTgxMjA3ZTg4NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMKQEAgLTg4LDI2ICYjNDM7ODgsNiBAQCBTWVNDQUxMX0RFRklORTMoc3B1X3J1bixpbnQsIGZkLCBfX3UzMiBfX3VzZXIgKiwgdW5wYywgX191MzIgX191c2VyICosIHVzdGF0dXMpCiAJcmV0dXJuIGNhbGxzLSZndDtzcHVfcnVuKGZkX2ZpbGUoYXJnKSwgdW5wYywgdXN0YXR1cyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ09SRURVTVAKLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKQotewotCUNMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTsKLQlpZiAoIWNhbGxzKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBjYWxscy0mZ3Q7Y29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpOwotfQotCi1pbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JQ0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpOwotCWlmICghY2FsbHMpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIGNhbGxzLSZndDtjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKTsKLX0KLSNlbmRpZgotCiB2b2lkIG5vdGlmeV9zcHVzX2FjdGl2ZSh2b2lkKQogewogCXN0cnVjdCBzcHVmc19jYWxscyAqY2FsbHM7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUKaW5kZXggNTJlNGM4MGVjOGQwMy4uNjAzMTlkNGZmMjVhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZQpAQCAtNCw3ICYjNDM7NCw2IEBAIG9iai0kKENPTkZJR19TUFVfRlMpICYjNDM7PSBzcHVmcy5vCiBzcHVmcy15ICYjNDM7PSBpbm9kZS5vIGZpbGUubyBjb250ZXh0Lm8gc3lzY2FsbHMubwogc3B1ZnMteSAmIzQzOz0gc2NoZWQubyBiYWNraW5nX29wcy5vIGh3X29wcy5vIHJ1bi5vIGdhbmcubwogc3B1ZnMteSAmIzQzOz0gc3dpdGNoLm8gZmF1bHQubyBsc2NzYV9hbGxvYy5vCi1zcHVmcy0kKENPTkZJR19DT1JFRFVNUCkgJiM0Mzs9IGNvcmVkdW1wLm8KIAogIyBtYWdpYyBmb3IgdGhlIHRyYWNlIGV2ZW50cwogQ0ZMQUdTX3NjaGVkLm8gOj0gLUkkKHNyYykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWVlN2Q4YjdkZjAuLjAwMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbApAQCAtMSwxODMgJiM0MzswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCi0vKgotICogU1BVIGNvcmUgZHVtcCBjb2RlCi0gKgotICogKEMpIENvcHlyaWdodCAyMDA2IElCTSBDb3JwLgotICoKLSAqIEF1dGhvcjogRHdheW5lIEdyYW50IE1jQ29ubmVsbCAmbHQ7ZGVjaW1hbEB1cy5pYm0uY29tJmd0OwotICovCi0KLSNpbmNsdWRlICZsdDtsaW51eC9lbGYuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZmR0YWJsZS5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdC5oJmd0OwotI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2NhbGxzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvY29yZWR1bXAuaCZndDsKLSNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRzLmgmZ3Q7Ci0KLSNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7Ci0KLSNpbmNsdWRlICYjMzQ7c3B1ZnMuaCYjMzQ7Ci0KLXN0YXRpYyBpbnQgc3B1ZnNfY3R4X25vdGVfc2l6ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGRmZCkKLXsKLQlpbnQgaSwgc3osIHRvdGFsID0gMDsKLQljaGFyICpuYW1lOwotCWNoYXIgZnVsbG5hbWVbODBdOwotCi0JZm9yIChpID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lICE9IE5VTEw7IGkmIzQzOyYjNDM7KSB7Ci0JCW5hbWUgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWU7Ci0JCXN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplOwotCi0JCXNwcmludGYoZnVsbG5hbWUsICYjMzQ7U1BVLyVkLyVzJiMzNDssIGRmZCwgbmFtZSk7Ci0KLQkJdG90YWwgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpOwotCQl0b3RhbCAmIzQzOz0gcm91bmR1cChzdHJsZW4oZnVsbG5hbWUpICYjNDM7IDEsIDQpOwotCQl0b3RhbCAmIzQzOz0gcm91bmR1cChzeiwgNCk7Ci0JfQotCi0JcmV0dXJuIHRvdGFsOwotfQotCi1zdGF0aWMgaW50IG1hdGNoX2NvbnRleHQoY29uc3Qgdm9pZCAqdiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZkKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OwotCWlmIChmaWxlLSZndDtmX29wICE9ICZhbXA7c3B1ZnNfY29udGV4dF9mb3BzKQotCQlyZXR1cm4gMDsKLQljdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLSZndDtpX2N0eDsKLQlpZiAoY3R4LSZndDtmbGFncyAmYW1wOyBTUFVfQ1JFQVRFX05PU0NIRUQpCi0JCXJldHVybiAwOwotCXJldHVybiBmZCAmIzQzOyAxOwotfQotCi0vKgotICogVGhlIGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5vdGVzIGZvciBDZWxsIGFyZSB2YXJpb3VzCi0gKiBjb250ZXh0IGZpbGVzIGluIHRoZSBzcHUgY29udGV4dC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBhbmQgc2VlcwotICogaWYgdGhleSBhcmUgYSBkaXJlY3RvcnkgaW4gc3B1ZnMuICBJbiB0aGF0IGNhc2Ugd2UgdXNlIHNwdWZzCi0gKiBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgdGhlbSB3aXRob3V0IG5lZWRpbmcgdG8gYWN0dWFsbHkKLSAqIG9wZW4gdGhlIGZpbGVzLgotICovCi0vKgotICogZGVzY3JpcHRvciB0YWJsZSBpcyBub3Qgc2hhcmVkLCBzbyBmaWxlcyBjYW4mIzM5O3QgY2hhbmdlIG9yIGdvIGF3YXkuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmNvcmVkdW1wX25leHRfY29udGV4dChpbnQgKmZkKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4ID0gTlVMTDsKLQlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlpbnQgbiA9IGl0ZXJhdGVfZmQoY3VycmVudC0mZ3Q7ZmlsZXMsICpmZCwgbWF0Y2hfY29udGV4dCwgTlVMTCk7Ci0JaWYgKCFuKQotCQlyZXR1cm4gTlVMTDsKLQkqZmQgPSBuIC0gMTsKLQotCWZpbGUgPSBmZ2V0X3JhdygqZmQpOwotCWlmIChmaWxlKSB7Ci0JCWN0eCA9IFNQVUZTX0koZmlsZV9pbm9kZShmaWxlKSktJmd0O2lfY3R4OwotCQlnZXRfc3B1X2NvbnRleHQoY3R4KTsKLQkJZnB1dChmaWxlKTsKLQl9Ci0KLQlyZXR1cm4gY3R4OwotfQotCi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKQotewotCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4OwotCWludCBzaXplID0gMCwgcmMsIGZkOwotCi0JZmQgPSAwOwotCXdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KCZhbXA7ZmQpKSAhPSBOVUxMKSB7Ci0JCXJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTsKLQkJaWYgKHJjKSB7Ci0JCQlwdXRfc3B1X2NvbnRleHQoY3R4KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmMgPSBzcHVmc19jdHhfbm90ZV9zaXplKGN0eCwgZmQpOwotCQlzcHVfcmVsZWFzZV9zYXZlZChjdHgpOwotCQlpZiAocmMgJmx0OyAwKSB7Ci0JCQlwdXRfc3B1X2NvbnRleHQoY3R4KTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc2l6ZSAmIzQzOz0gcmM7Ci0KLQkJLyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqLwotCQlmZCYjNDM7JiM0Mzs7Ci0JCXB1dF9zcHVfY29udGV4dChjdHgpOwotCX0KLQotCXJldHVybiBzaXplOwotfQotCi1zdGF0aWMgaW50IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGksCi0JCQkJICBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLCBpbnQgZGZkKQotewotCXNpemVfdCBzeiA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uc2l6ZTsKLQljaGFyIGZ1bGxuYW1lWzgwXTsKLQlzdHJ1Y3QgZWxmX25vdGUgZW47Ci0JaW50IHJldDsKLQotCXNwcmludGYoZnVsbG5hbWUsICYjMzQ7U1BVLyVkLyVzJiMzNDssIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTsKLQllbi5uX25hbWVzeiA9IHN0cmxlbihmdWxsbmFtZSkgJiM0MzsgMTsKLQllbi5uX2Rlc2NzeiA9IHN6OwotCWVuLm5fdHlwZSA9IE5UX1NQVTsKLQotCWlmICghZHVtcF9lbWl0KGNwcm0sICZhbXA7ZW4sIHNpemVvZihlbikpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoIWR1bXBfZW1pdChjcHJtLCBmdWxsbmFtZSwgZW4ubl9uYW1lc3opKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoIWR1bXBfYWxpZ24oY3BybSwgNCkpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcCkgewotCQlyZXQgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXAoY3R4LCBjcHJtKTsKLQkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gcmV0OwotCX0gZWxzZSB7Ci0JCWNoYXIgYnVmWzMyXTsKLQotCQlyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OzB4JS4xNmxseCYjMzQ7LAotCQkJICAgICAgIHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZ2V0KGN0eCkpOwotCQlpZiAocmV0ICZndDs9IHNpemVvZihidWYpKQotCQkJcmV0dXJuIHNpemVvZihidWYpOwotCi0JCS8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqLwotCQlpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCAmIzQzOyAxKSkKLQkJCXJldHVybiAtRUlPOwotCX0KLQotCWR1bXBfc2tpcF90byhjcHJtLCByb3VuZHVwKGNwcm0tJmd0O3BvcyAtIHJldCAmIzQzOyBzeiwgNCkpOwotCXJldHVybiAwOwotfQotCi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eDsKLQlpbnQgZmQsIGosIHJjOwotCi0JZmQgPSAwOwotCXdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KCZhbXA7ZmQpKSAhPSBOVUxMKSB7Ci0JCXJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCi0JCWZvciAoaiA9IDA7IHNwdWZzX2NvcmVkdW1wX3JlYWRbal0ubmFtZSAhPSBOVUxMOyBqJiM0MzsmIzQzOykgewotCQkJcmMgPSBzcHVmc19hcmNoX3dyaXRlX25vdGUoY3R4LCBqLCBjcHJtLCBmZCk7Ci0JCQlpZiAocmMpIHsKLQkJCQlzcHVfcmVsZWFzZV9zYXZlZChjdHgpOwotCQkJCXJldHVybiByYzsKLQkJCX0KLQkJfQotCi0JCXNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7Ci0KLQkJLyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqLwotCQlmZCYjNDM7JiM0Mzs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCBkZTc0OTQ3NDhmZWNkLi45OGM0N2JhZmFmNjc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTksNyAmIzQzOzksNiBAQAogCiAjdW5kZWYgREVCVUcKIAotI2luY2x1ZGUgJmx0O2xpbnV4L2NvcmVkdW1wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb2N0bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwpAQCAtMTMwLDE0ICYjNDM7MTI5LDYgQEAgc3RhdGljIHNzaXplX3Qgc3B1ZnNfYXR0cl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzcHVmc19kdW1wX2VtaXQoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdm9pZCAqYnVmLAotCQlzaXplX3Qgc2l6ZSkKLXsKLQlpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHNpemUpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gc2l6ZTsKLX0KLQogI2RlZmluZSBERUZJTkVfU1BVRlNfU0lNUExFX0FUVFJJQlVURShfX2ZvcHMsIF9fZ2V0LCBfX3NldCwgX19mbXQpCVwKIHN0YXRpYyBpbnQgX19mb3BzICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQlcCiB7CQkJCQkJCQkJXApAQCAtMTgwLDEyICYjNDM7MTcxLDYgQEAgc3B1ZnNfbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zcHVmc19tZW1fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC0mZ3Q7b3BzLSZndDtnZXRfbHMoY3R4KSwgTFNfU0laRSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90CiBzcHVmc19tZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCQlzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCkBAIC00NjYsMTMgJiM0Mzs0NTEsNiBAQCBzcHVmc19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1zcHVmc19yZWdzX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtJmd0O2NzYS5sc2NzYS0mZ3Q7Z3BycywKLQkJCSAgICAgICBzaXplb2YoY3R4LSZndDtjc2EubHNjc2EtJmd0O2dwcnMpKTsKLX0KLQogc3RhdGljIHNzaXplX3QKIHNwdWZzX3JlZ3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQpAQCAtNTIzLDEzICYjNDM7NTAxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfcmVnc19mb3BzID0gewogCS5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci1zcHVmc19mcGNyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLmxzY3NhLSZndDtmcGNyLAotCQkJICAgICAgIHNpemVvZihjdHgtJmd0O2NzYS5sc2NzYS0mZ3Q7ZnBjcikpOwotfQotCiBzdGF0aWMgc3NpemVfdAogc3B1ZnNfZnBjcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKIAkJc2l6ZV90IHNpemUsIGxvZmZfdCAqIHBvcykKQEAgLTk1MywxNSAmIzQzOzkyNCw2IEBAIHNwdWZzX3NpZ25hbDFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCWlmICghY3R4LSZndDtjc2Euc3B1X2NobmxjbnRfUldbM10pCi0JCXJldHVybiAwOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtjdHgtJmd0O2NzYS5zcHVfY2hubGRhdGFfUldbM10sCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1szXSkpOwotfQotCiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDFfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBsZW4pCiB7CkBAIC0xMDg2LDE1ICYjNDM7MTA0OCw2IEBAIHNwdWZzX3NpZ25hbDJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMl9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCWlmICghY3R4LSZndDtjc2Euc3B1X2NobmxjbnRfUldbNF0pCi0JCXJldHVybiAwOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtjdHgtJmd0O2NzYS5zcHVfY2hubGRhdGFfUldbNF0sCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnNwdV9jaG5sZGF0YV9SV1s0XSkpOwotfQotCiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDJfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCXNpemVfdCBsZW4pCiB7CkBAIC0xOTI0LDE1ICYjNDM7MTg3Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NhcHNfZm9wcyA9IHsKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfbWJveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JaWYgKCEoY3R4LSZndDtjc2EucHJvYi5tYl9zdGF0X1IgJmFtcDsgMHgwMDAwZmYpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sICZhbXA7Y3R4LSZndDtjc2EucHJvYi5wdV9tYl9SLAotCQkJICAgICAgIHNpemVvZihjdHgtJmd0O2NzYS5wcm9iLnB1X21iX1IpKTsKLX0KLQogc3RhdGljIHNzaXplX3Qgc3B1ZnNfbWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0xOTYyLDE1ICYjNDM7MTkwNiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX21ib3hfaW5mb19mb3BzID0gewogCS5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlaywKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHNwdWZzX2lib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCWlmICghKGN0eC0mZ3Q7Y3NhLnByb2IubWJfc3RhdF9SICZhbXA7IDB4ZmYwMDAwKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnByaXYyLnB1aW50X21iX1IsCi0JCQkgICAgICAgc2l6ZW9mKGN0eC0mZ3Q7Y3NhLnByaXYyLnB1aW50X21iX1IpKTsKLX0KLQogc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0yMDA1LDEzICYjNDM7MTk0MCw2IEBAIHN0YXRpYyBzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2NudChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCkKIAlyZXR1cm4gKDQgLSAoKGN0eC0mZ3Q7Y3NhLnByb2IubWJfc3RhdF9SICZhbXA7IDB4MDBmZjAwKSAmZ3Q7Jmd0OyA4KSkgKiBzaXplb2YodTMyKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsCi0JCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pCi17Ci0JcmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCAmYW1wO2N0eC0mZ3Q7Y3NhLnNwdV9tYWlsYm94X2RhdGEsCi0JCQlzcHVmc193Ym94X2luZm9fY250KGN0eCkpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcykKIHsKQEAgLTIwNTksMTUgJiM0MzsxOTg3LDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X2RtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAogCX0KIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwKLQkJc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKLXsKLQlzdHJ1Y3Qgc3B1X2RtYV9pbmZvIGluZm87Ci0KLQlzcHVmc19nZXRfZG1hX2luZm8oY3R4LCAmYW1wO2luZm8pOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtpbmZvLCBzaXplb2YoaW5mbykpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0yMTEyLDE1ICYjNDM7MjAzMSw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAogCX0KIH0KIAotc3RhdGljIHNzaXplX3Qgc3B1ZnNfcHJveHlkbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LAotCQlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQotewotCXN0cnVjdCBzcHVfcHJveHlkbWFfaW5mbyBpbmZvOwotCi0Jc3B1ZnNfZ2V0X3Byb3h5ZG1hX2luZm8oY3R4LCAmYW1wO2luZm8pOwotCXJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgJmFtcDtpbmZvLCBzaXplb2YoaW5mbykpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkJICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpCiB7CkBAIC0yNTgwLDI3ICYjNDM7MjQ5MCwzIEBAIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdID0gewogCXsgJiMzNDsuY3R4JiMzNDssICZhbXA7c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sCiAJe30sCiB9OwotCi1jb25zdCBzdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXSA9IHsKLQl7ICYjMzQ7cmVncyYjMzQ7LCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sCi0JeyAmIzM0O2ZwY3ImIzM0Oywgc3B1ZnNfZnBjcl9kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjgpIH0sCi0JeyAmIzM0O2xzbHImIzM0OywgTlVMTCwgc3B1ZnNfbHNscl9nZXQsIDE5IH0sCi0JeyAmIzM0O2RlY3ImIzM0OywgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sCi0JeyAmIzM0O2RlY3Jfc3RhdHVzJiMzNDssIE5VTEwsIHNwdWZzX2RlY3Jfc3RhdHVzX2dldCwgMTkgfSwKLQl7ICYjMzQ7bWVtJiMzNDssIHNwdWZzX21lbV9kdW1wLCBOVUxMLCBMU19TSVpFLCB9LAotCXsgJiMzNDtzaWduYWwxJiMzNDssIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSwKLQl7ICYjMzQ7c2lnbmFsMV90eXBlJiMzNDssIE5VTEwsIHNwdWZzX3NpZ25hbDFfdHlwZV9nZXQsIDE5IH0sCi0JeyAmIzM0O3NpZ25hbDImIzM0Oywgc3B1ZnNfc2lnbmFsMl9kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDtzaWduYWwyX3R5cGUmIzM0OywgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZXZlbnRfbWFzayYjMzQ7LCBOVUxMLCBzcHVmc19ldmVudF9tYXNrX2dldCwgMTkgfSwKLQl7ICYjMzQ7ZXZlbnRfc3RhdHVzJiMzNDssIE5VTEwsIHNwdWZzX2V2ZW50X3N0YXR1c19nZXQsIDE5IH0sCi0JeyAmIzM0O21ib3hfaW5mbyYjMzQ7LCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSwKLQl7ICYjMzQ7aWJveF9pbmZvJiMzNDssIHNwdWZzX2lib3hfaW5mb19kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LAotCXsgJiMzNDt3Ym94X2luZm8mIzM0Oywgc3B1ZnNfd2JveF9pbmZvX2R1bXAsIE5VTEwsIDQgKiBzaXplb2YodTMyKX0sCi0JeyAmIzM0O2RtYV9pbmZvJiMzNDssIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sCi0JeyAmIzM0O3Byb3h5ZG1hX2luZm8mIzM0Oywgc3B1ZnNfcHJveHlkbWFfaW5mb19kdW1wLAotCQkJICAgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcHJveHlkbWFfaW5mbyl9LAotCXsgJiMzNDtvYmplY3QtaWQmIzM0OywgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSwKLQl7ICYjMzQ7bnBjJiMzNDssIE5VTEwsIHNwdWZzX25wY19nZXQsIDE5IH0sCi0JeyBOVUxMIH0sCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaAppbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaApAQCAtMjMyLDEzICYjNDM7MjMyLDkgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdOwogCiAvKiBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiAqLwogZXh0ZXJuIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxsczsKLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7CiBsb25nIHNwdWZzX3J1bl9zcHUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHUzMiAqbnBjLCB1MzIgKnN0YXR1cyk7CiBsb25nIHNwdWZzX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGF0aCAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci0vKiBFTEYgY29yZWR1bXAgY2FsbGJhY2tzIGZvciB3cml0aW5nIFNQVSBFTEYgbm90ZXMgKi8KLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTsKLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NvbnRleHRfZm9wczsKIApAQCAtMzM1LDE0ICYjNDM7MzMxLDYgQEAgdm9pZCBzcHVmc19zdG9wX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSwgaW50IGlycSk7CiB2b2lkIHNwdWZzX21mY19jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUpOwogdm9pZCBzcHVmc19kbWFfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgdHlwZSk7CiAKLXN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgewotCWNoYXIgKm5hbWU7Ci0Jc3NpemVfdCAoKmR1bXApKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTsKLQl1NjQgKCpnZXQpKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KTsKLQlzaXplX3Qgc2l6ZTsKLX07Ci1leHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107Ci0KIGV4dGVybiBpbnQgc3B1X2luaXRfY3NhKHN0cnVjdCBzcHVfc3RhdGUgKmNzYSk7CiBleHRlcm4gdm9pZCBzcHVfZmluaV9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKIGV4dGVybiBpbnQgc3B1X3NhdmUoc3RydWN0IHNwdV9zdGF0ZSAqcHJldiwgc3RydWN0IHNwdSAqc3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKaW5kZXggZWE0YmExYjZjZTZhOS4uYjZkZTM3MTUwZTczNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMKQEAgLTgyLDggJiM0Mzs4Miw0IEBAIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxscyA9IHsKIAkuc3B1X3J1biA9IGRvX3NwdV9ydW4sCiAJLm5vdGlmeV9zcHVzX2FjdGl2ZSA9IGRvX25vdGlmeV9zcHVzX2FjdGl2ZSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLSNpZmRlZiBDT05GSUdfQ09SRURVTVAKLQkuY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSA9IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUsCi0JLmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsCi0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggMDZkMGRmMTA1MzgyMy4uZGIzMmJiNDBhODY3MCAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMjAyOSw3ICYjNDM7MjAyOSw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKQogCXsKIAkJc2l6ZV90IHN6ID0gaW5mby5zaXplOwogCi0JCS8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovCiYjNDM7CQkvKiBGb3IgeDg2IHhzdGF0ZSAqLwogCQlzeiAmIzQzOz0gZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTsKIAogCQlwaGRyNG5vdGUgPSBrbWFsbG9jX29iaigqcGhkcjRub3RlKTsKQEAgLTIwOTMsNyAmIzQzOzIwOTMsNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkKIAlpZiAoIXdyaXRlX25vdGVfaW5mbygmYW1wO2luZm8sIGNwcm0pKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAotCS8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovCiYjNDM7CS8qIEZvciB4ODYgeHN0YXRlICovCiAJaWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKSkKIAkJZ290byBlbmRfY29yZWR1bXA7CiAKZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jCmluZGV4IGFjM2NkNzQ4MDhjNjQuLmE0OWYyZmQ2YmUyODAgMTAwNjQ0Ci0tLSBhL2ZzL2NvcmVkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29yZWR1bXAuYwpAQCAtMTExOCwxMSAmIzQzOzExMTgsNiBAQCBzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAlpZiAoY24tJmd0O21hc2sgJmFtcDsgQ09SRURVTVBfUkVKRUNUKQogCQlyZXR1cm47CiAKLQkvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovCi0JLyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqLwotCWlmICh1bnNoYXJlX2ZpbGVzKCkpCi0JCXJldHVybjsKLQogCWlmICgoY24tJmd0O21hc2sgJmFtcDsgQ09SRURVTVBfS0VSTkVMKSAmYW1wOyZhbXA7ICFjb3JlZHVtcF93cml0ZShjbiwgY3BybSwgYmluZm10KSkKIAkJcmV0dXJuOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDAzCgkJCQkJCQlvdXRwdXQ6IDkyCgkJCQkJCQl0aG91Z2h0czogNzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IFNQVSBDb3JlZHVtcCBSZW1vdmFsKioKCk9rYXksIHNvIEkmIzM5O3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCBzZXJpZXMgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gVGhlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCAqcmVtb3ZhbCogb2YgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBTUFUgY29yZWR1bXAgc3VwcG9ydCBmcm9tIHRoZSBQb3dlclBDIENlbGwgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBhIGNsZWFuLXVwLCBub3RoaW5nIG1vcmUuCgpMZXQmIzM5O3MgYnJlYWsgZG93biBteSByZWFzb25pbmc6IHRoZSBwYXRjaCBpcyBkZWxldGluZyB0aGUgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jYCBmaWxlIGFuZCB0aGVuIHJlbW92aW5nIGFzc29jaWF0ZWQgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIGZyb20gYSB3aG9sZSBidW5jaCBvZiBvdGhlciBmaWxlczogYHNwdWZzLmhgLCBgZmlsZS5jYCwgYHN5c2NhbGxzLmNgLCBgc3B1X3N5c2NhbGxzLmNgLCBgc3B1LmhgLCBhbmQgYGVsZi5oYC4gVGhlcmUmIzM5O3MgYWxzbyBhIHJlbW92YWwgb2YgYSBjYWxsIHRvIGB1bnNoYXJlX2ZpbGVzKClgIGluIGBmcy9jb3JlZHVtcC5jYCB3aGljaCB3YXMgc3BlY2lmaWNhbGx5IGZvciB0aGF0IENlbGwgU1BVIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkuCgpJbXBvcnRhbnRseSwgKm5vdGhpbmcgbmV3KiBpcyBiZWluZyBhZGRlZC4gVGhlcmUmIzM5O3Mgbm8gbmV3IGNvZGUgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mbyBsZWFrcy4gQW5kIHRoZSBjb3JlZHVtcCBub3RlcyB3cml0aW5nLCBub3cgZ29uZSwgbWVhbnMgbGVzcyBkYXRhIGJlaW5nIHdyaXR0ZW4gdG8gY29yZWR1bXBzLCB3aGljaCBmdXJ0aGVyIGVsaW1pbmF0ZXMgYW55IHBvdGVudGlhbCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtpbmcuCgpUbyBzb2xpZGlmeSBteSB0aGlua2luZywgSSYjMzk7dmUgY2hlY2tlZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSByZW1vdmFsczoKCiogICBJdCByZW1vdmVzIGBzZWxlY3QgQVJDSF9IQVZFX0VYVFJBX0VMRl9OT1RFUyBpZiBTUFVfQkFTRWAgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4KKiAgIEl0IHJlbW92ZXMgYE5UX1NQVWAgZnJvbSBgZWxmLmhgCiogICBJdCByZW1vdmVzIGBjb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlYCBmcm9tIGBzcHVmc19jYWxsc2AgaW4gYHNwdS5oYAoqICAgSXQgcmVtb3ZlcyBgZGVwZW5kcyBvbiBDT1JFRFVNUGAgZnJvbSBgU1BVX0ZTYCBpbiBgS2NvbmZpZ2AKKiAgIEl0IHJlbW92ZXMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAgZnJvbSBgc3B1X3N5c2NhbGxzLmNgCiogICBJdCByZW1vdmVzIGBjb3JlZHVtcC5vYCBmcm9tIGBNYWtlZmlsZWAKKiAgIEl0IGRlbGV0ZXMgYGNvcmVkdW1wLmNgCiogICBJdCByZW1vdmVzIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb3JlZHVtcCBvcGVyYXRpb25zIGZyb20gYGZpbGUuY2AuCiogICBJdCByZW1vdmVzIGNvcmVkdW1wIHJlbGF0ZWQgZGVjbGFyYXRpb25zIGZyb20gYHNwdWZzLmhgLgoqICAgSXQgcmVtb3ZlcyBjb3JlZHVtcCBjYWxsYmFja3MgZnJvbSBgc3lzY2FsbHMuY2AuCiogICBJdCB1cGRhdGVzIGNvbW1lbnRzIGluIGBiaW5mbXRfZWxmLmNgCiogICBJdCByZW1vdmVzIGB1bnNoYXJlX2ZpbGVzKClgIGZyb20gYGNvcmVkdW1wLmNgLgoKQWdhaW4sIHRoZSBjb3JlIHBvaW50IGlzIHRoYXQgdGhpcyBpcyBhICpwdXJlbHkqIGEgcmVtb3ZhbCBwYXRjaC4gVGhlcmUgYXJlIG5vIG5ldyBmZWF0dXJlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIG5ldyBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBBbGwgdGhpcyBwYXRjaCBkb2VzIGlzIGNsZWFuIHVwIG9sZCwgdW51c2VkIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkgZm9yIFNQVS4KClNvLCBzdW1taW5nIGl0IHVwOiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBkb24mIzM5O3Qgc2VlIGFueSByZWFzb24gdG8gZGVkaWNhdGUgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdG8gdGhpczsgdGhlcmUgaXMgbm8gbmV3IGNvZGUgdG8gYXNzZXNzLiBJdCYjMzk7cyBhIHNpbXBsZSwgc2FmZSByZW1vdmFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBwdXJlbHkgcmVtb3ZlcyB0aGUgU1BVIGNvcmVkdW1wIHN1cHBvcnQgZnJvbSB0aGUgUG93ZXJQQyBDZWxsIGFyY2hpdGVjdHVyZS4gTm8gbmV3IGNvZGUgaXMgYWRkZWQsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMTozOS42MjE5OTU4OTNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3NDM0MzMzMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09SRURVTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwdXJlbHkgcmVtb3ZlcyB0aGUgU1BVIGNvcmVkdW1wIHN1cHBvcnQgZnJvbSB0aGUgUG93ZXJQQyBDZWxsIGFyY2hpdGVjdHVyZS4gTm8gbmV3IGNvZGUgaXMgYWRkZWQsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIHdoZW4gZHVtcGluZyBjb3JlIG9mIHByb2Nlc3NlcyB3aXRoIHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMTozOS42MjIwMDAwNTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzM5MzE5NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NWU2ZjMxMTNmNjViOTU2YjRhYjA5OTE2MDdjYjJiODQ2NmIyYmRhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE2OjIxOjM3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnXFxuKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcXG5AQCAtMTYwLDcgKzE2MCw2IEBAIGNvbmZpZyBQUENcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19WRFNPX0FSQ0hfREFUQVxcbiBcXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4tXFx0c2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFXFxuIFxcdHNlbGVjdCBBUkNIX0tFRVBfTUVNQkxPQ0tcXG4gXFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXFx0aWYgUFBDX1JBRElYX01NVVxcbiBcXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlRcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXFxuaW5kZXggYmI0Yjk0NDQ0ZDNlOC4uNWRjOGM0OTIzZWIxZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcXG5AQCAtMTIzLDEyICsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxcbiBcXHQoMHg3ZmYgXFx1MDAzZVxcdTAwM2UgKFBBR0VfU0hJRlQgLSAxMikpIDogXFxcXFxcbiBcXHQoMHgzZmZmZiBcXHUwMDNlXFx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkpXFxuIFxcbi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFXFxuLS8qIE5vdGVzIHVzZWQgaW4gRVRfQ09SRS4gTm90ZSBuYW1lIGlzIFxcXCJTUFUvXFx1MDAzY2ZkXFx1MDAzZS9cXHUwMDNjZmlsZW5hbWVcXHUwMDNlXFxcIi4gKi9cXG4tI2RlZmluZSBOVF9TUFVcXHRcXHQxXFxuLVxcbi0jZW5kaWYgLyogQ09ORklHX1NQVV9CQVNFICovXFxuLVxcbiAjaWZkZWYgQ09ORklHX1BQQzY0XFxuIFxcbiAjZGVmaW5lIGdldF9jYWNoZV9nZW9tZXRyeShsZXZlbCkgXFxcXFxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcXG5pbmRleCA5NmFkNDUxMGM4OTU0Li43MTUyMjg1YjYyNjhmIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxcbkBAIC0yMTAsMTUgKzIxMCwxMiBAQCBleHRlcm4gbG9uZyBzcHVfc3lzX2NhbGxiYWNrKHN0cnVjdCBzcHVfc3lzY2FsbF9ibG9jayAqcyk7XFxuIFxcbiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqL1xcbiBzdHJ1Y3QgZmlsZTtcXG4tc3RydWN0IGNvcmVkdW1wX3BhcmFtcztcXG4gc3RydWN0IHNwdWZzX2NhbGxzIHtcXG4gXFx0bG9uZyAoKmNyZWF0ZV90aHJlYWQpKGNvbnN0IGNoYXIgX191c2VyICpuYW1lLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKm5laWdoYm9yKTtcXG4gXFx0bG9uZyAoKnNwdV9ydW4pKHN0cnVjdCBmaWxlICpmaWxwLCBfX3UzMiBfX3VzZXIgKnVucGMsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdF9fdTMyIF9fdXNlciAqdXN0YXR1cyk7XFxuLVxcdGludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUpKHZvaWQpO1xcbi1cXHRpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XFxuIFxcdHZvaWQgKCpub3RpZnlfc3B1c19hY3RpdmUpKHZvaWQpO1xcbiBcXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xcbmluZGV4IGRiNjViZmNkMWU3NDkuLjZiZDI2ODE1YzMzMTAgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWdcXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xcbkBAIC0xMCw3ICsxMCw2IEBAIGNvbmZpZyBTUFVfRlNcXG4gXFx0dHJpc3RhdGUgXFxcIlNQVSBmaWxlIHN5c3RlbVxcXCJcXG4gXFx0ZGVmYXVsdCBtXFxuIFxcdGRlcGVuZHMgb24gUFBDX0NFTExcXG4tXFx0ZGVwZW5kcyBvbiBDT1JFRFVNUFxcbiBcXHRzZWxlY3QgU1BVX0JBU0VcXG4gXFx0aGVscFxcbiBcXHQgIFRoZSBTUFUgZmlsZSBzeXN0ZW0gaXMgdXNlZCB0byBhY2Nlc3MgU3luZXJnaXN0aWMgUHJvY2Vzc2luZ1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmNcXG5pbmRleCAwMDA4OTRlMDdiMDI3Li44YmU4MTIwN2U4ODZhIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xcbkBAIC04OCwyNiArODgsNiBAQCBTWVNDQUxMX0RFRklORTMoc3B1X3J1bixpbnQsIGZkLCBfX3UzMiBfX3VzZXIgKiwgdW5wYywgX191MzIgX191c2VyICosIHVzdGF0dXMpXFxuIFxcdHJldHVybiBjYWxscy1cXHUwMDNlc3B1X3J1bihmZF9maWxlKGFyZyksIHVucGMsIHVzdGF0dXMpO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXFxuLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbi17XFxuLVxcdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcXG4tXFx0aWYgKCFjYWxscylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4gY2FsbHMtXFx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTtcXG4tfVxcbi1cXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcXG4tXFx0aWYgKCFjYWxscylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRyZXR1cm4gY2FsbHMtXFx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4gdm9pZCBub3RpZnlfc3B1c19hY3RpdmUodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc3B1ZnNfY2FsbHMgKmNhbGxzO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcXG5pbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZVxcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZVxcbkBAIC00LDcgKzQsNiBAQCBvYmotJChDT05GSUdfU1BVX0ZTKSArPSBzcHVmcy5vXFxuIHNwdWZzLXkgKz0gaW5vZGUubyBmaWxlLm8gY29udGV4dC5vIHN5c2NhbGxzLm9cXG4gc3B1ZnMteSArPSBzY2hlZC5vIGJhY2tpbmdfb3BzLm8gaHdfb3BzLm8gcnVuLm8gZ2FuZy5vXFxuIHNwdWZzLXkgKz0gc3dpdGNoLm8gZmF1bHQubyBsc2NzYV9hbGxvYy5vXFxuLXNwdWZzLSQoQ09ORklHX0NPUkVEVU1QKSArPSBjb3JlZHVtcC5vXFxuIFxcbiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzXFxuIENGTEFHU19zY2hlZC5vIDo9IC1JJChzcmMpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAzMDFlZTdkOGI3ZGYwLi4wMDAwMDAwMDAwMDAwXFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcXG4rKysgL2Rldi9udWxsXFxuQEAgLTEsMTgzICswLDAgQEBcXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4tLypcXG4tICogU1BVIGNvcmUgZHVtcCBjb2RlXFxuLSAqXFxuLSAqIChDKSBDb3B5cmlnaHQgMjAwNiBJQk0gQ29ycC5cXG4tICpcXG4tICogQXV0aG9yOiBEd2F5bmUgR3JhbnQgTWNDb25uZWxsIFxcdTAwM2NkZWNpbWFsQHVzLmlibS5jb21cXHUwMDNlXFxuLSAqL1xcbi1cXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZi5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZmR0YWJsZS5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvZnMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuLVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbi1cXG4tI2luY2x1ZGUgXFxcInNwdWZzLmhcXFwiXFxuLVxcbi1zdGF0aWMgaW50IHNwdWZzX2N0eF9ub3RlX3NpemUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBkZmQpXFxuLXtcXG4tXFx0aW50IGksIHN6LCB0b3RhbCA9IDA7XFxuLVxcdGNoYXIgKm5hbWU7XFxuLVxcdGNoYXIgZnVsbG5hbWVbODBdO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lICE9IE5VTEw7IGkrKykge1xcbi1cXHRcXHRuYW1lID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lO1xcbi1cXHRcXHRzeiA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uc2l6ZTtcXG4tXFxuLVxcdFxcdHNwcmludGYoZnVsbG5hbWUsIFxcXCJTUFUvJWQvJXNcXFwiLCBkZmQsIG5hbWUpO1xcbi1cXG4tXFx0XFx0dG90YWwgKz0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7XFxuLVxcdFxcdHRvdGFsICs9IHJvdW5kdXAoc3RybGVuKGZ1bGxuYW1lKSArIDEsIDQpO1xcbi1cXHRcXHR0b3RhbCArPSByb3VuZHVwKHN6LCA0KTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHRvdGFsO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IG1hdGNoX2NvbnRleHQoY29uc3Qgdm9pZCAqdiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZkKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xcbi1cXHRpZiAoZmlsZS1cXHUwMDNlZl9vcCAhPSBcXHUwMDI2c3B1ZnNfY29udGV4dF9mb3BzKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cXHUwMDNlaV9jdHg7XFxuLVxcdGlmIChjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU1BVX0NSRUFURV9OT1NDSEVEKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIGZkICsgMTtcXG4tfVxcbi1cXG4tLypcXG4tICogVGhlIGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5vdGVzIGZvciBDZWxsIGFyZSB2YXJpb3VzXFxuLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0Llxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBhbmQgc2Vlc1xcbi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnNcXG4tICogaW50ZXJuYWwgZnVuY3Rpb25hbGl0eSB0byBkdW1wIHRoZW0gd2l0aG91dCBuZWVkaW5nIHRvIGFjdHVhbGx5XFxuLSAqIG9wZW4gdGhlIGZpbGVzLlxcbi0gKi9cXG4tLypcXG4tICogZGVzY3JpcHRvciB0YWJsZSBpcyBub3Qgc2hhcmVkLCBzbyBmaWxlcyBjYW4ndCBjaGFuZ2Ugb3IgZ28gYXdheS5cXG4tICovXFxuLXN0YXRpYyBzdHJ1Y3Qgc3B1X2NvbnRleHQgKmNvcmVkdW1wX25leHRfY29udGV4dChpbnQgKmZkKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4ID0gTlVMTDtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGU7XFxuLVxcdGludCBuID0gaXRlcmF0ZV9mZChjdXJyZW50LVxcdTAwM2VmaWxlcywgKmZkLCBtYXRjaF9jb250ZXh0LCBOVUxMKTtcXG4tXFx0aWYgKCFuKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0KmZkID0gbiAtIDE7XFxuLVxcbi1cXHRmaWxlID0gZmdldF9yYXcoKmZkKTtcXG4tXFx0aWYgKGZpbGUpIHtcXG4tXFx0XFx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cXHUwMDNlaV9jdHg7XFxuLVxcdFxcdGdldF9zcHVfY29udGV4dChjdHgpO1xcbi1cXHRcXHRmcHV0KGZpbGUpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gY3R4O1xcbi19XFxuLVxcbi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xcbi1cXHRpbnQgc2l6ZSA9IDAsIHJjLCBmZDtcXG4tXFxuLVxcdGZkID0gMDtcXG4tXFx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXFx1MDAyNmZkKSkgIT0gTlVMTCkge1xcbi1cXHRcXHRyYyA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7XFxuLVxcdFxcdGlmIChyYykge1xcbi1cXHRcXHRcXHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHJjID0gc3B1ZnNfY3R4X25vdGVfc2l6ZShjdHgsIGZkKTtcXG4tXFx0XFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcXG4tXFx0XFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRcXHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNpemUgKz0gcmM7XFxuLVxcbi1cXHRcXHQvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovXFxuLVxcdFxcdGZkKys7XFxuLVxcdFxcdHB1dF9zcHVfY29udGV4dChjdHgpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gc2l6ZTtcXG4tfVxcbi1cXG4tc3RhdGljIGludCBzcHVmc19hcmNoX3dyaXRlX25vdGUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBpLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIGludCBkZmQpXFxuLXtcXG4tXFx0c2l6ZV90IHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplO1xcbi1cXHRjaGFyIGZ1bGxuYW1lWzgwXTtcXG4tXFx0c3RydWN0IGVsZl9ub3RlIGVuO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0c3ByaW50ZihmdWxsbmFtZSwgXFxcIlNQVS8lZC8lc1xcXCIsIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTtcXG4tXFx0ZW4ubl9uYW1lc3ogPSBzdHJsZW4oZnVsbG5hbWUpICsgMTtcXG4tXFx0ZW4ubl9kZXNjc3ogPSBzejtcXG4tXFx0ZW4ubl90eXBlID0gTlRfU1BVO1xcbi1cXG4tXFx0aWYgKCFkdW1wX2VtaXQoY3BybSwgXFx1MDAyNmVuLCBzaXplb2YoZW4pKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdGlmICghZHVtcF9lbWl0KGNwcm0sIGZ1bGxuYW1lLCBlbi5uX25hbWVzeikpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRpZiAoIWR1bXBfYWxpZ24oY3BybSwgNCkpXFxuLVxcdFxcdHJldHVybiAtRUlPO1xcbi1cXG4tXFx0aWYgKHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcCkge1xcbi1cXHRcXHRyZXQgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXAoY3R4LCBjcHJtKTtcXG4tXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGNoYXIgYnVmWzMyXTtcXG4tXFxuLVxcdFxcdHJldCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIweCUuMTZsbHhcXFwiLFxcbi1cXHRcXHRcXHQgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7XFxuLVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gc2l6ZW9mKGJ1ZikpXFxuLVxcdFxcdFxcdHJldHVybiBzaXplb2YoYnVmKTtcXG4tXFxuLVxcdFxcdC8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqL1xcbi1cXHRcXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCArIDEpKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4tXFx0ZHVtcF9za2lwX3RvKGNwcm0sIHJvdW5kdXAoY3BybS1cXHUwMDNlcG9zIC0gcmV0ICsgc3osIDQpKTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xcbi1cXHRpbnQgZmQsIGosIHJjO1xcbi1cXG4tXFx0ZmQgPSAwO1xcbi1cXHR3aGlsZSAoKGN0eCA9IGNvcmVkdW1wX25leHRfY29udGV4dChcXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XFxuLVxcdFxcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcXG4tXFx0XFx0aWYgKHJjKVxcbi1cXHRcXHRcXHRyZXR1cm4gcmM7XFxuLVxcbi1cXHRcXHRmb3IgKGogPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2pdLm5hbWUgIT0gTlVMTDsgaisrKSB7XFxuLVxcdFxcdFxcdHJjID0gc3B1ZnNfYXJjaF93cml0ZV9ub3RlKGN0eCwgaiwgY3BybSwgZmQpO1xcbi1cXHRcXHRcXHRpZiAocmMpIHtcXG4tXFx0XFx0XFx0XFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIHJjO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XFxuLVxcbi1cXHRcXHQvKiBzdGFydCBzZWFyY2hpbmcgdGhlIG5leHQgZmQgbmV4dCB0aW1lICovXFxuLVxcdFxcdGZkKys7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jXFxuaW5kZXggZGU3NDk0NzQ4ZmVjZC4uOThjNDdiYWZhZjY3OCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jXFxuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xcbkBAIC05LDcgKzksNiBAQFxcbiBcXG4gI3VuZGVmIERFQlVHXFxuIFxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvY29yZWR1bXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb2N0bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuQEAgLTEzMCwxNCArMTI5LDYgQEAgc3RhdGljIHNzaXplX3Qgc3B1ZnNfYXR0cl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZHVtcF9lbWl0KHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHZvaWQgKmJ1ZixcXG4tXFx0XFx0c2l6ZV90IHNpemUpXFxuLXtcXG4tXFx0aWYgKCFkdW1wX2VtaXQoY3BybSwgYnVmLCBzaXplKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU87XFxuLVxcdHJldHVybiBzaXplO1xcbi19XFxuLVxcbiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdClcXHRcXFxcXFxuIHN0YXRpYyBpbnQgX19mb3BzICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcdFxcXFxcXG4ge1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5AQCAtMTgwLDEyICsxNzEsNiBAQCBzcHVmc19tZW1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90XFxuLXNwdWZzX21lbV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgY3R4LVxcdTAwM2VvcHMtXFx1MDAzZWdldF9scyhjdHgpLCBMU19TSVpFKTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3RcXG4gc3B1ZnNfbWVtX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdFxcdFxcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcXG5AQCAtNDY2LDEzICs0NTEsNiBAQCBzcHVmc19yZWdzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3NpemVfdFxcbi1zcHVmc19yZWdzX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLXtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZ3BycyxcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZihjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZ3BycykpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdFxcbiBzcHVmc19yZWdzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcXG5AQCAtNTIzLDEzICs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7XFxuIFxcdC5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzc2l6ZV90XFxuLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFxcdTAwMjZjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZnBjcixcXG4tXFx0XFx0XFx0ICAgICAgIHNpemVvZihjdHgtXFx1MDAzZWNzYS5sc2NzYS1cXHUwMDNlZnBjcikpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdFxcbiBzcHVmc19mcGNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLFxcbiBcXHRcXHRzaXplX3Qgc2l6ZSwgbG9mZl90ICogcG9zKVxcbkBAIC05NTMsMTUgKzkyNCw2IEBAIHNwdWZzX3NpZ25hbDFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDFfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4tXFx0XFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRpZiAoIWN0eC1cXHUwMDNlY3NhLnNwdV9jaG5sY250X1JXWzNdKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2Y3R4LVxcdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdLFxcbi1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGN0eC1cXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1szXSkpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDFfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0c2l6ZV90IGxlbilcXG4ge1xcbkBAIC0xMDg2LDE1ICsxMDQ4LDYgQEAgc3B1ZnNfc2lnbmFsMl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMl9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxcbi1cXHRcXHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdGlmICghY3R4LVxcdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbNF0pXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFxcdTAwMjZjdHgtXFx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbNF0sXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoY3R4LVxcdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzRdKSk7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMl9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHRzaXplX3QgbGVuKVxcbiB7XFxuQEAgLTE5MjQsMTUgKzE4NzcsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19jYXBzX2ZvcHMgPSB7XFxuIFxcdC5yZWxlYXNlXFx0PSBzaW5nbGVfcmVsZWFzZSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX21ib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxcbi1cXHRcXHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi17XFxuLVxcdGlmICghKGN0eC1cXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFxcdTAwMjYgMHgwMDAwZmYpKVxcbi1cXHRcXHRyZXR1cm4gMDtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2Y3R4LVxcdTAwM2Vjc2EucHJvYi5wdV9tYl9SLFxcbi1cXHRcXHRcXHQgICAgICAgc2l6ZW9mKGN0eC1cXHUwMDNlY3NhLnByb2IucHVfbWJfUikpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXFxuIHtcXG5AQCAtMTk2MiwxNSArMTkwNiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX21ib3hfaW5mb19mb3BzID0ge1xcbiBcXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuIH07XFxuIFxcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4tXFx0XFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRpZiAoIShjdHgtXFx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcXHUwMDI2IDB4ZmYwMDAwKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXFx1MDAyNmN0eC1cXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IsXFxuLVxcdFxcdFxcdCAgICAgICBzaXplb2YoY3R4LVxcdTAwM2Vjc2EucHJpdjIucHVpbnRfbWJfUikpO1xcbi19XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG4gXFx0XFx0XFx0XFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXFxuIHtcXG5AQCAtMjAwNSwxMyArMTk0MCw2IEBAIHN0YXRpYyBzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2NudChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eClcXG4gXFx0cmV0dXJuICg0IC0gKChjdHgtXFx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcXHUwMDI2IDB4MDBmZjAwKSBcXHUwMDNlXFx1MDAzZSA4KSkgKiBzaXplb2YodTMyKTtcXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXFxuLVxcdFxcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLXtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2Y3R4LVxcdTAwM2Vjc2Euc3B1X21haWxib3hfZGF0YSxcXG4tXFx0XFx0XFx0c3B1ZnNfd2JveF9pbmZvX2NudChjdHgpKTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdFxcdFxcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiB7XFxuQEAgLTIwNTksMTUgKzE5ODcsNiBAQCBzdGF0aWMgdm9pZCBzcHVmc19nZXRfZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4tXFx0XFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4te1xcbi1cXHRzdHJ1Y3Qgc3B1X2RtYV9pbmZvIGluZm87XFxuLVxcbi1cXHRzcHVmc19nZXRfZG1hX2luZm8oY3R4LCBcXHUwMDI2aW5mbyk7XFxuLVxcdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSk7XFxuLX1cXG4tXFxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2RtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXFxuIFxcdFxcdFxcdCAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxcbiB7XFxuQEAgLTIxMTIsMTUgKzIwMzEsNiBAQCBzdGF0aWMgdm9pZCBzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXFxuLVxcdFxcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLXtcXG4tXFx0c3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87XFxuLVxcbi1cXHRzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsIFxcdTAwMjZpbmZvKTtcXG4tXFx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcXHUwMDI2aW5mbywgc2l6ZW9mKGluZm8pKTtcXG4tfVxcbi1cXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfcHJveHlkbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxcbiBcXHRcXHRcXHRcXHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcXG4ge1xcbkBAIC0yNTgwLDI3ICsyNDkwLDMgQEAgY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7XFxuIFxcdHsgXFxcIi5jdHhcXFwiLCBcXHUwMDI2c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sXFxuIFxcdHt9LFxcbiB9O1xcbi1cXG4tY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW10gPSB7XFxuLVxcdHsgXFxcInJlZ3NcXFwiLCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sXFxuLVxcdHsgXFxcImZwY3JcXFwiLCBzcHVmc19mcGNyX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSxcXG4tXFx0eyBcXFwibHNsclxcXCIsIE5VTEwsIHNwdWZzX2xzbHJfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJkZWNyXFxcIiwgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sXFxuLVxcdHsgXFxcImRlY3Jfc3RhdHVzXFxcIiwgTlVMTCwgc3B1ZnNfZGVjcl9zdGF0dXNfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJtZW1cXFwiLCBzcHVmc19tZW1fZHVtcCwgTlVMTCwgTFNfU0laRSwgfSxcXG4tXFx0eyBcXFwic2lnbmFsMVxcXCIsIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcXG4tXFx0eyBcXFwic2lnbmFsMV90eXBlXFxcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMV90eXBlX2dldCwgMTkgfSxcXG4tXFx0eyBcXFwic2lnbmFsMlxcXCIsIHNwdWZzX3NpZ25hbDJfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcXG4tXFx0eyBcXFwic2lnbmFsMl90eXBlXFxcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSxcXG4tXFx0eyBcXFwiZXZlbnRfbWFza1xcXCIsIE5VTEwsIHNwdWZzX2V2ZW50X21hc2tfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJldmVudF9zdGF0dXNcXFwiLCBOVUxMLCBzcHVmc19ldmVudF9zdGF0dXNfZ2V0LCAxOSB9LFxcbi1cXHR7IFxcXCJtYm94X2luZm9cXFwiLCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcXG4tXFx0eyBcXFwiaWJveF9pbmZvXFxcIiwgc3B1ZnNfaWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXFxuLVxcdHsgXFxcIndib3hfaW5mb1xcXCIsIHNwdWZzX3dib3hfaW5mb19kdW1wLCBOVUxMLCA0ICogc2l6ZW9mKHUzMil9LFxcbi1cXHR7IFxcXCJkbWFfaW5mb1xcXCIsIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sXFxuLVxcdHsgXFxcInByb3h5ZG1hX2luZm9cXFwiLCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAsXFxuLVxcdFxcdFxcdCAgIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3Byb3h5ZG1hX2luZm8pfSxcXG4tXFx0eyBcXFwib2JqZWN0LWlkXFxcIiwgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSxcXG4tXFx0eyBcXFwibnBjXFxcIiwgTlVMTCwgc3B1ZnNfbnBjX2dldCwgMTkgfSxcXG4tXFx0eyBOVUxMIH0sXFxuLX07XFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcXG5pbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcXG5AQCAtMjMyLDEzICsyMzIsOSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107XFxuIFxcbiAvKiBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbiAqL1xcbiBleHRlcm4gc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzO1xcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xcbiBsb25nIHNwdWZzX3J1bl9zcHUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHUzMiAqbnBjLCB1MzIgKnN0YXR1cyk7XFxuIGxvbmcgc3B1ZnNfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYXRoICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuIFxcdFxcdFxcdHVtb2RlX3QgbW9kZSwgc3RydWN0IGZpbGUgKmZpbHApO1xcbi0vKiBFTEYgY29yZWR1bXAgY2FsbGJhY2tzIGZvciB3cml0aW5nIFNQVSBFTEYgbm90ZXMgKi9cXG4tZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpO1xcbi1leHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY29udGV4dF9mb3BzO1xcbiBcXG5AQCAtMzM1LDE0ICszMzEsNiBAQCB2b2lkIHNwdWZzX3N0b3BfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgaXJxKTtcXG4gdm9pZCBzcHVmc19tZmNfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1KTtcXG4gdm9pZCBzcHVmc19kbWFfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgdHlwZSk7XFxuIFxcbi1zdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHtcXG4tXFx0Y2hhciAqbmFtZTtcXG4tXFx0c3NpemVfdCAoKmR1bXApKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcXG4tXFx0dTY0ICgqZ2V0KShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCk7XFxuLVxcdHNpemVfdCBzaXplO1xcbi19O1xcbi1leHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107XFxuLVxcbiBleHRlcm4gaW50IHNwdV9pbml0X2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpO1xcbiBleHRlcm4gdm9pZCBzcHVfZmluaV9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTtcXG4gZXh0ZXJuIGludCBzcHVfc2F2ZShzdHJ1Y3Qgc3B1X3N0YXRlICpwcmV2LCBzdHJ1Y3Qgc3B1ICpzcHUpO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXFxuaW5kZXggZWE0YmExYjZjZTZhOS4uYjZkZTM3MTUwZTczNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXFxuQEAgLTgyLDggKzgyLDQgQEAgc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzID0ge1xcbiBcXHQuc3B1X3J1biA9IGRvX3NwdV9ydW4sXFxuIFxcdC5ub3RpZnlfc3B1c19hY3RpdmUgPSBkb19ub3RpZnlfc3B1c19hY3RpdmUsXFxuIFxcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbi0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXFxuLVxcdC5jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSxcXG4tXFx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsXFxuLSNlbmRpZlxcbiB9O1xcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmNcXG5pbmRleCAwNmQwZGYxMDUzODIzLi5kYjMyYmI0MGE4NjcwIDEwMDY0NFxcbi0tLSBhL2ZzL2JpbmZtdF9lbGYuY1xcbisrKyBiL2ZzL2JpbmZtdF9lbGYuY1xcbkBAIC0yMDI5LDcgKzIwMjksNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4gXFx0e1xcbiBcXHRcXHRzaXplX3Qgc3ogPSBpbmZvLnNpemU7XFxuIFxcbi1cXHRcXHQvKiBGb3IgY2VsbCBzcHVmcyBhbmQgeDg2IHhzdGF0ZSAqL1xcbitcXHRcXHQvKiBGb3IgeDg2IHhzdGF0ZSAqL1xcbiBcXHRcXHRzeiArPSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xcbiBcXG4gXFx0XFx0cGhkcjRub3RlID0ga21hbGxvY19vYmooKnBoZHI0bm90ZSk7XFxuQEAgLTIwOTMsNyArMjA5Myw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbiBcXHRpZiAoIXdyaXRlX25vdGVfaW5mbyhcXHUwMDI2aW5mbywgY3BybSkpXFxuIFxcdFxcdGdvdG8gZW5kX2NvcmVkdW1wO1xcbiBcXG4tXFx0LyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi9cXG4rXFx0LyogRm9yIHg4NiB4c3RhdGUgKi9cXG4gXFx0aWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKSlcXG4gXFx0XFx0Z290byBlbmRfY29yZWR1bXA7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGFjM2NkNzQ4MDhjNjQuLmE0OWYyZmQ2YmUyODAgMTAwNjQ0XFxuLS0tIGEvZnMvY29yZWR1bXAuY1xcbisrKyBiL2ZzL2NvcmVkdW1wLmNcXG5AQCAtMTExOCwxMSArMTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbiBcXHRpZiAoY24tXFx1MDAzZW1hc2sgXFx1MDAyNiBDT1JFRFVNUF9SRUpFQ1QpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIGdldCB1cyBhbiB1bnNoYXJlZCBkZXNjcmlwdG9yIHRhYmxlOyBhbG1vc3QgYWx3YXlzIGEgbm8tb3AgKi9cXG4tXFx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xcbi1cXHRpZiAodW5zaGFyZV9maWxlcygpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbiBcXHRpZiAoKGNuLVxcdTAwM2VtYXNrIFxcdTAwMjYgQ09SRURVTVBfS0VSTkVMKSBcXHUwMDI2XFx1MDAyNiAhY29yZWR1bXBfd3JpdGUoY24sIGNwcm0sIGJpbmZtdCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIxOjQxLjI1NjU1NTM0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMjc5NjQ3MTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIHdoZW4gZHVtcGluZyBjb3JlIG9mIHByb2Nlc3NlcyB3aXRoIHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1NWU2ZjMxMTNmNjViOTU2YjRhYjA5OTE2MDdjYjJiODQ2NmIyYmRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTY6MjE6MzcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5pbmRleCAyNTgwZTI3ZTQzMjg3Li40MGM4NzRmZTJmNTNhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWdcbisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnXG5AQCAtMTYwLDcgKzE2MCw2IEBAIGNvbmZpZyBQUENcbiBcdHNlbGVjdCBBUkNIX0hBU19VQlNBTlxuIFx0c2VsZWN0IEFSQ0hfSEFTX1ZEU09fQVJDSF9EQVRBXG4gXHRzZWxlY3QgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbi1cdHNlbGVjdCBBUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTICAgICAgICBpZiBTUFVfQkFTRVxuIFx0c2VsZWN0IEFSQ0hfS0VFUF9NRU1CTE9DS1xuIFx0c2VsZWN0IEFSQ0hfTUhQX01FTU1BUF9PTl9NRU1PUllfRU5BQkxFXHRpZiBQUENfUkFESVhfTU1VXG4gXHRzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlRcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcbmluZGV4IGJiNGI5NDQ0NGQzZTguLjVkYzhjNDkyM2ViMWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaFxuQEAgLTEyMywxMiArMTIzLDYgQEAgZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcbiBcdCgweDdmZiBcdTAwM2VcdTAwM2UgKFBBR0VfU0hJRlQgLSAxMikpIDogXFxcbiBcdCgweDNmZmZmIFx1MDAzZVx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkpXG4gXG4tI2lmZGVmIENPTkZJR19TUFVfQkFTRVxuLS8qIE5vdGVzIHVzZWQgaW4gRVRfQ09SRS4gTm90ZSBuYW1lIGlzIFwiU1BVL1x1MDAzY2ZkXHUwMDNlL1x1MDAzY2ZpbGVuYW1lXHUwMDNlXCIuICovXG4tI2RlZmluZSBOVF9TUFVcdFx0MVxuLVxuLSNlbmRpZiAvKiBDT05GSUdfU1BVX0JBU0UgKi9cbi1cbiAjaWZkZWYgQ09ORklHX1BQQzY0XG4gXG4gI2RlZmluZSBnZXRfY2FjaGVfZ2VvbWV0cnkobGV2ZWwpIFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oXG5pbmRleCA5NmFkNDUxMGM4OTU0Li43MTUyMjg1YjYyNjhmIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwdS5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcbkBAIC0yMTAsMTUgKzIxMCwxMiBAQCBleHRlcm4gbG9uZyBzcHVfc3lzX2NhbGxiYWNrKHN0cnVjdCBzcHVfc3lzY2FsbF9ibG9jayAqcyk7XG4gXG4gLyogc3lzY2FsbHMgaW1wbGVtZW50ZWQgaW4gc3B1ZnMgKi9cbiBzdHJ1Y3QgZmlsZTtcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIHN0cnVjdCBzcHVmc19jYWxscyB7XG4gXHRsb25nICgqY3JlYXRlX3RocmVhZCkoY29uc3QgY2hhciBfX3VzZXIgKm5hbWUsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqbmVpZ2hib3IpO1xuIFx0bG9uZyAoKnNwdV9ydW4pKHN0cnVjdCBmaWxlICpmaWxwLCBfX3UzMiBfX3VzZXIgKnVucGMsXG4gXHRcdFx0XHRcdFx0X191MzIgX191c2VyICp1c3RhdHVzKTtcbi1cdGludCAoKmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUpKHZvaWQpO1xuLVx0aW50ICgqY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUpKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuIFx0dm9pZCAoKm5vdGlmeV9zcHVzX2FjdGl2ZSkodm9pZCk7XG4gXHRzdHJ1Y3QgbW9kdWxlICpvd25lcjtcbiB9O1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWdcbmluZGV4IGRiNjViZmNkMWU3NDkuLjZiZDI2ODE1YzMzMTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWdcbkBAIC0xMCw3ICsxMCw2IEBAIGNvbmZpZyBTUFVfRlNcbiBcdHRyaXN0YXRlIFwiU1BVIGZpbGUgc3lzdGVtXCJcbiBcdGRlZmF1bHQgbVxuIFx0ZGVwZW5kcyBvbiBQUENfQ0VMTFxuLVx0ZGVwZW5kcyBvbiBDT1JFRFVNUFxuIFx0c2VsZWN0IFNQVV9CQVNFXG4gXHRoZWxwXG4gXHQgIFRoZSBTUFUgZmlsZSBzeXN0ZW0gaXMgdXNlZCB0byBhY2Nlc3MgU3luZXJnaXN0aWMgUHJvY2Vzc2luZ1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xuaW5kZXggMDAwODk0ZTA3YjAyNy4uOGJlODEyMDdlODg2YSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfc3lzY2FsbHMuY1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG5AQCAtODgsMjYgKzg4LDYgQEAgU1lTQ0FMTF9ERUZJTkUzKHNwdV9ydW4saW50LCBmZCwgX191MzIgX191c2VyICosIHVucGMsIF9fdTMyIF9fdXNlciAqLCB1c3RhdHVzKVxuIFx0cmV0dXJuIGNhbGxzLVx1MDAzZXNwdV9ydW4oZmRfZmlsZShhcmcpLCB1bnBjLCB1c3RhdHVzKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTtcbi19XG4tXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdENMQVNTKHNwdWZzX2NhbGxzLCBjYWxscykoKTtcbi1cdGlmICghY2FsbHMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0cmV0dXJuIGNhbGxzLVx1MDAzZWNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pO1xuLX1cbi0jZW5kaWZcbi1cbiB2b2lkIG5vdGlmeV9zcHVzX2FjdGl2ZSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzcHVmc19jYWxscyAqY2FsbHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG5pbmRleCA1MmU0YzgwZWM4ZDAzLi42MDMxOWQ0ZmYyNWE2IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL01ha2VmaWxlXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbkBAIC00LDcgKzQsNiBAQCBvYmotJChDT05GSUdfU1BVX0ZTKSArPSBzcHVmcy5vXG4gc3B1ZnMteSArPSBpbm9kZS5vIGZpbGUubyBjb250ZXh0Lm8gc3lzY2FsbHMub1xuIHNwdWZzLXkgKz0gc2NoZWQubyBiYWNraW5nX29wcy5vIGh3X29wcy5vIHJ1bi5vIGdhbmcub1xuIHNwdWZzLXkgKz0gc3dpdGNoLm8gZmF1bHQubyBsc2NzYV9hbGxvYy5vXG4tc3B1ZnMtJChDT05GSUdfQ09SRURVTVApICs9IGNvcmVkdW1wLm9cbiBcbiAjIG1hZ2ljIGZvciB0aGUgdHJhY2UgZXZlbnRzXG4gQ0ZMQUdTX3NjaGVkLm8gOj0gLUkkKHNyYylcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29yZWR1bXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDMwMWVlN2Q4YjdkZjAuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jXG4rKysgL2Rldi9udWxsXG5AQCAtMSwxODMgKzAsMCBAQFxuLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4tLypcbi0gKiBTUFUgY29yZSBkdW1wIGNvZGVcbi0gKlxuLSAqIChDKSBDb3B5cmlnaHQgMjAwNiBJQk0gQ29ycC5cbi0gKlxuLSAqIEF1dGhvcjogRHdheW5lIEdyYW50IE1jQ29ubmVsbCBcdTAwM2NkZWNpbWFsQHVzLmlibS5jb21cdTAwM2Vcbi0gKi9cbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZkdGFibGUuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9jb3JlZHVtcC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10cy5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4tXG4tI2luY2x1ZGUgXCJzcHVmcy5oXCJcbi1cbi1zdGF0aWMgaW50IHNwdWZzX2N0eF9ub3RlX3NpemUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBkZmQpXG4te1xuLVx0aW50IGksIHN6LCB0b3RhbCA9IDA7XG4tXHRjaGFyICpuYW1lO1xuLVx0Y2hhciBmdWxsbmFtZVs4MF07XG4tXG4tXHRmb3IgKGkgPSAwOyBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7XG4tXHRcdG5hbWUgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWU7XG4tXHRcdHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplO1xuLVxuLVx0XHRzcHJpbnRmKGZ1bGxuYW1lLCBcIlNQVS8lZC8lc1wiLCBkZmQsIG5hbWUpO1xuLVxuLVx0XHR0b3RhbCArPSBzaXplb2Yoc3RydWN0IGVsZl9ub3RlKTtcbi1cdFx0dG90YWwgKz0gcm91bmR1cChzdHJsZW4oZnVsbG5hbWUpICsgMSwgNCk7XG4tXHRcdHRvdGFsICs9IHJvdW5kdXAoc3osIDQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHRvdGFsO1xuLX1cbi1cbi1zdGF0aWMgaW50IG1hdGNoX2NvbnRleHQoY29uc3Qgdm9pZCAqdiwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGZkKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xuLVx0aWYgKGZpbGUtXHUwMDNlZl9vcCAhPSBcdTAwMjZzcHVmc19jb250ZXh0X2ZvcHMpXG4tXHRcdHJldHVybiAwO1xuLVx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cdTAwM2VpX2N0eDtcbi1cdGlmIChjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IFNQVV9DUkVBVEVfTk9TQ0hFRClcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gZmQgKyAxO1xuLX1cbi1cbi0vKlxuLSAqIFRoZSBhZGRpdGlvbmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBub3RlcyBmb3IgQ2VsbCBhcmUgdmFyaW91c1xuLSAqIGNvbnRleHQgZmlsZXMgaW4gdGhlIHNwdSBjb250ZXh0LlxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgYW5kIHNlZXNcbi0gKiBpZiB0aGV5IGFyZSBhIGRpcmVjdG9yeSBpbiBzcHVmcy4gIEluIHRoYXQgY2FzZSB3ZSB1c2Ugc3B1ZnNcbi0gKiBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IHRvIGR1bXAgdGhlbSB3aXRob3V0IG5lZWRpbmcgdG8gYWN0dWFsbHlcbi0gKiBvcGVuIHRoZSBmaWxlcy5cbi0gKi9cbi0vKlxuLSAqIGRlc2NyaXB0b3IgdGFibGUgaXMgbm90IHNoYXJlZCwgc28gZmlsZXMgY2FuJ3QgY2hhbmdlIG9yIGdvIGF3YXkuXG4tICovXG4tc3RhdGljIHN0cnVjdCBzcHVfY29udGV4dCAqY29yZWR1bXBfbmV4dF9jb250ZXh0KGludCAqZmQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHggPSBOVUxMO1xuLVx0c3RydWN0IGZpbGUgKmZpbGU7XG4tXHRpbnQgbiA9IGl0ZXJhdGVfZmQoY3VycmVudC1cdTAwM2VmaWxlcywgKmZkLCBtYXRjaF9jb250ZXh0LCBOVUxMKTtcbi1cdGlmICghbilcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXHQqZmQgPSBuIC0gMTtcbi1cbi1cdGZpbGUgPSBmZ2V0X3JhdygqZmQpO1xuLVx0aWYgKGZpbGUpIHtcbi1cdFx0Y3R4ID0gU1BVRlNfSShmaWxlX2lub2RlKGZpbGUpKS1cdTAwM2VpX2N0eDtcbi1cdFx0Z2V0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHRcdGZwdXQoZmlsZSk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gY3R4O1xuLX1cbi1cbi1pbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xuLVx0aW50IHNpemUgPSAwLCByYywgZmQ7XG4tXG4tXHRmZCA9IDA7XG4tXHR3aGlsZSAoKGN0eCA9IGNvcmVkdW1wX25leHRfY29udGV4dChcdTAwMjZmZCkpICE9IE5VTEwpIHtcbi1cdFx0cmMgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpO1xuLVx0XHRpZiAocmMpIHtcbi1cdFx0XHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVxuLVx0XHRyYyA9IHNwdWZzX2N0eF9ub3RlX3NpemUoY3R4LCBmZCk7XG4tXHRcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XG4tXHRcdGlmIChyYyBcdTAwM2MgMCkge1xuLVx0XHRcdHB1dF9zcHVfY29udGV4dChjdHgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdHNpemUgKz0gcmM7XG4tXG4tXHRcdC8qIHN0YXJ0IHNlYXJjaGluZyB0aGUgbmV4dCBmZCBuZXh0IHRpbWUgKi9cbi1cdFx0ZmQrKztcbi1cdFx0cHV0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc2l6ZTtcbi19XG4tXG4tc3RhdGljIGludCBzcHVmc19hcmNoX3dyaXRlX25vdGUoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGludCBpLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLCBpbnQgZGZkKVxuLXtcbi1cdHNpemVfdCBzeiA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uc2l6ZTtcbi1cdGNoYXIgZnVsbG5hbWVbODBdO1xuLVx0c3RydWN0IGVsZl9ub3RlIGVuO1xuLVx0aW50IHJldDtcbi1cbi1cdHNwcmludGYoZnVsbG5hbWUsIFwiU1BVLyVkLyVzXCIsIGRmZCwgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5uYW1lKTtcbi1cdGVuLm5fbmFtZXN6ID0gc3RybGVuKGZ1bGxuYW1lKSArIDE7XG4tXHRlbi5uX2Rlc2NzeiA9IHN6O1xuLVx0ZW4ubl90eXBlID0gTlRfU1BVO1xuLVxuLVx0aWYgKCFkdW1wX2VtaXQoY3BybSwgXHUwMDI2ZW4sIHNpemVvZihlbikpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdGlmICghZHVtcF9lbWl0KGNwcm0sIGZ1bGxuYW1lLCBlbi5uX25hbWVzeikpXG4tXHRcdHJldHVybiAtRUlPO1xuLVx0aWYgKCFkdW1wX2FsaWduKGNwcm0sIDQpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cbi1cdGlmIChzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXApIHtcbi1cdFx0cmV0ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5kdW1wKGN0eCwgY3BybSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cdH0gZWxzZSB7XG4tXHRcdGNoYXIgYnVmWzMyXTtcbi1cbi1cdFx0cmV0ID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIweCUuMTZsbHhcIixcbi1cdFx0XHQgICAgICAgc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5nZXQoY3R4KSk7XG4tXHRcdGlmIChyZXQgXHUwMDNlPSBzaXplb2YoYnVmKSlcbi1cdFx0XHRyZXR1cm4gc2l6ZW9mKGJ1Zik7XG4tXG4tXHRcdC8qIGNvdW50IHRyYWlsaW5nIHRoZSBOVUxMOiAqL1xuLVx0XHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHJldCArIDEpKVxuLVx0XHRcdHJldHVybiAtRUlPO1xuLVx0fVxuLVxuLVx0ZHVtcF9za2lwX3RvKGNwcm0sIHJvdW5kdXAoY3BybS1cdTAwM2Vwb3MgLSByZXQgKyBzeiwgNCkpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHN0cnVjdCBzcHVfY29udGV4dCAqY3R4O1xuLVx0aW50IGZkLCBqLCByYztcbi1cbi1cdGZkID0gMDtcbi1cdHdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KFx1MDAyNmZkKSkgIT0gTlVMTCkge1xuLVx0XHRyYyA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7XG4tXHRcdGlmIChyYylcbi1cdFx0XHRyZXR1cm4gcmM7XG4tXG4tXHRcdGZvciAoaiA9IDA7IHNwdWZzX2NvcmVkdW1wX3JlYWRbal0ubmFtZSAhPSBOVUxMOyBqKyspIHtcbi1cdFx0XHRyYyA9IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShjdHgsIGosIGNwcm0sIGZkKTtcbi1cdFx0XHRpZiAocmMpIHtcbi1cdFx0XHRcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XG4tXHRcdFx0XHRyZXR1cm4gcmM7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXG4tXHRcdHNwdV9yZWxlYXNlX3NhdmVkKGN0eCk7XG4tXG4tXHRcdC8qIHN0YXJ0IHNlYXJjaGluZyB0aGUgbmV4dCBmZCBuZXh0IHRpbWUgKi9cbi1cdFx0ZmQrKztcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLX1cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuaW5kZXggZGU3NDk0NzQ4ZmVjZC4uOThjNDdiYWZhZjY3OCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmNcbkBAIC05LDcgKzksNiBAQFxuIFxuICN1bmRlZiBERUJVR1xuIFxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9jdGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG5AQCAtMTMwLDE0ICsxMjksNiBAQCBzdGF0aWMgc3NpemVfdCBzcHVmc19hdHRyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZHVtcF9lbWl0KHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHZvaWQgKmJ1Zixcbi1cdFx0c2l6ZV90IHNpemUpXG4te1xuLVx0aWYgKCFkdW1wX2VtaXQoY3BybSwgYnVmLCBzaXplKSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRyZXR1cm4gc2l6ZTtcbi19XG4tXG4gI2RlZmluZSBERUZJTkVfU1BVRlNfU0lNUExFX0FUVFJJQlVURShfX2ZvcHMsIF9fZ2V0LCBfX3NldCwgX19mbXQpXHRcXFxuIHN0YXRpYyBpbnQgX19mb3BzICMjIF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVx0XFxcbiB7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbkBAIC0xODAsMTIgKzE3MSw2IEBAIHNwdWZzX21lbV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90XG4tc3B1ZnNfbWVtX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBjdHgtXHUwMDNlb3BzLVx1MDAzZWdldF9scyhjdHgpLCBMU19TSVpFKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19tZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0XHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKnBvcylcbkBAIC00NjYsMTMgKzQ1MSw2IEBAIHNwdWZzX3JlZ3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdFxuLXNwdWZzX3JlZ3NfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZ3Bycyxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZ3BycykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX3JlZ3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcbiBcdFx0c2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKVxuQEAgLTUyMywxMyArNTAxLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfcmVnc19mb3BzID0ge1xuIFx0Lmxsc2VlayAgPSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIH07XG4gXG4tc3RhdGljIHNzaXplX3Rcbi1zcHVmc19mcGNyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWZwY3IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLmxzY3NhLVx1MDAzZWZwY3IpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3RcbiBzcHVmc19mcGNyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICogYnVmZmVyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgbG9mZl90ICogcG9zKVxuQEAgLTk1MywxNSArOTI0LDYgQEAgc3B1ZnNfc2lnbmFsMV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3NpZ25hbDFfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIWN0eC1cdTAwM2Vjc2Euc3B1X2NobmxjbnRfUldbM10pXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1szXSxcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IF9fc3B1ZnNfc2lnbmFsMV9yZWFkKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdHNpemVfdCBsZW4pXG4ge1xuQEAgLTEwODYsMTUgKzEwNDgsNiBAQCBzcHVmc19zaWduYWwyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMl9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdGlmICghY3R4LVx1MDAzZWNzYS5zcHVfY2hubGNudF9SV1s0XSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzRdLFxuLVx0XHRcdCAgICAgICBzaXplb2YoY3R4LVx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbNF0pKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgX19zcHVmc19zaWduYWwyX3JlYWQoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0c2l6ZV90IGxlbilcbiB7XG5AQCAtMTkyNCwxNSArMTg3Nyw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NhcHNfZm9wcyA9IHtcbiBcdC5yZWxlYXNlXHQ9IHNpbmdsZV9yZWxlYXNlLFxuIH07XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfbWJveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0aWYgKCEoY3R4LVx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcdTAwMjYgMHgwMDAwZmYpKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2Y3R4LVx1MDAzZWNzYS5wcm9iLnB1X21iX1IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnByb2IucHVfbWJfUikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0xOTYyLDE1ICsxOTA2LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfbWJveF9pbmZvX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweGZmMDAwMCkpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IsXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnByaXYyLnB1aW50X21iX1IpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfaWJveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjAwNSwxMyArMTk0MCw2IEBAIHN0YXRpYyBzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2NudChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eClcbiBcdHJldHVybiAoNCAtICgoY3R4LVx1MDAzZWNzYS5wcm9iLm1iX3N0YXRfUiBcdTAwMjYgMHgwMGZmMDApIFx1MDAzZVx1MDAzZSA4KSkgKiBzaXplb2YodTMyKTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnNwdV9tYWlsYm94X2RhdGEsXG4tXHRcdFx0c3B1ZnNfd2JveF9pbmZvX2NudChjdHgpKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfd2JveF9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjA1OSwxNSArMTk4Nyw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9kbWFfaW5mbyhzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRzdHJ1Y3Qgc3B1X2RtYV9pbmZvIGluZm87XG4tXG4tXHRzcHVmc19nZXRfZG1hX2luZm8oY3R4LCBcdTAwMjZpbmZvKTtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2aW5mbywgc2l6ZW9mKGluZm8pKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3Qgc3B1ZnNfZG1hX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHQgICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjExMiwxNSArMjAzMSw2IEBAIHN0YXRpYyB2b2lkIHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9wcm94eWRtYV9pbmZvIGluZm87XG4tXG4tXHRzcHVmc19nZXRfcHJveHlkbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19wcm94eWRtYV9pbmZvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0XHQgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBvcylcbiB7XG5AQCAtMjU4MCwyNyArMjQ5MCwzIEBAIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdID0ge1xuIFx0eyBcIi5jdHhcIiwgXHUwMDI2c3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sXG4gXHR7fSxcbiB9O1xuLVxuLWNvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0ge1xuLVx0eyBcInJlZ3NcIiwgc3B1ZnNfcmVnc19kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjhbMTI4XSl9LFxuLVx0eyBcImZwY3JcIiwgc3B1ZnNfZnBjcl9kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9yZWcxMjgpIH0sXG4tXHR7IFwibHNsclwiLCBOVUxMLCBzcHVmc19sc2xyX2dldCwgMTkgfSxcbi1cdHsgXCJkZWNyXCIsIE5VTEwsIHNwdWZzX2RlY3JfZ2V0LCAxOSB9LFxuLVx0eyBcImRlY3Jfc3RhdHVzXCIsIE5VTEwsIHNwdWZzX2RlY3Jfc3RhdHVzX2dldCwgMTkgfSxcbi1cdHsgXCJtZW1cIiwgc3B1ZnNfbWVtX2R1bXAsIE5VTEwsIExTX1NJWkUsIH0sXG4tXHR7IFwic2lnbmFsMVwiLCBzcHVmc19zaWduYWwxX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwic2lnbmFsMV90eXBlXCIsIE5VTEwsIHNwdWZzX3NpZ25hbDFfdHlwZV9nZXQsIDE5IH0sXG4tXHR7IFwic2lnbmFsMlwiLCBzcHVmc19zaWduYWwyX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwic2lnbmFsMl90eXBlXCIsIE5VTEwsIHNwdWZzX3NpZ25hbDJfdHlwZV9nZXQsIDE5IH0sXG4tXHR7IFwiZXZlbnRfbWFza1wiLCBOVUxMLCBzcHVmc19ldmVudF9tYXNrX2dldCwgMTkgfSxcbi1cdHsgXCJldmVudF9zdGF0dXNcIiwgTlVMTCwgc3B1ZnNfZXZlbnRfc3RhdHVzX2dldCwgMTkgfSxcbi1cdHsgXCJtYm94X2luZm9cIiwgc3B1ZnNfbWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwiaWJveF9pbmZvXCIsIHNwdWZzX2lib3hfaW5mb19kdW1wLCBOVUxMLCBzaXplb2YodTMyKSB9LFxuLVx0eyBcIndib3hfaW5mb1wiLCBzcHVmc193Ym94X2luZm9fZHVtcCwgTlVMTCwgNCAqIHNpemVvZih1MzIpfSxcbi1cdHsgXCJkbWFfaW5mb1wiLCBzcHVmc19kbWFfaW5mb19kdW1wLCBOVUxMLCBzaXplb2Yoc3RydWN0IHNwdV9kbWFfaW5mbyl9LFxuLVx0eyBcInByb3h5ZG1hX2luZm9cIiwgc3B1ZnNfcHJveHlkbWFfaW5mb19kdW1wLFxuLVx0XHRcdCAgIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3Byb3h5ZG1hX2luZm8pfSxcbi1cdHsgXCJvYmplY3QtaWRcIiwgTlVMTCwgc3B1ZnNfb2JqZWN0X2lkX2dldCwgMTkgfSxcbi1cdHsgXCJucGNcIiwgTlVMTCwgc3B1ZnNfbnBjX2dldCwgMTkgfSxcbi1cdHsgTlVMTCB9LFxuLX07XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaFxuaW5kZXggZDMzNzg3YzU3YzM5YS4uNjEyYjUwNzVkMGVjYiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaFxuQEAgLTIzMiwxMyArMjMyLDkgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdO1xuIFxuIC8qIHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uICovXG4gZXh0ZXJuIHN0cnVjdCBzcHVmc19jYWxscyBzcHVmc19jYWxscztcbi1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xuIGxvbmcgc3B1ZnNfcnVuX3NwdShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgdTMyICpucGMsIHUzMiAqc3RhdHVzKTtcbiBsb25nIHNwdWZzX2NyZWF0ZShjb25zdCBzdHJ1Y3QgcGF0aCAqbmQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW5zaWduZWQgaW50IGZsYWdzLFxuIFx0XHRcdHVtb2RlX3QgbW9kZSwgc3RydWN0IGZpbGUgKmZpbHApO1xuLS8qIEVMRiBjb3JlZHVtcCBjYWxsYmFja3MgZm9yIHdyaXRpbmcgU1BVIEVMRiBub3RlcyAqL1xuLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKTtcbi1leHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNwdWZzX2NvbnRleHRfZm9wcztcbiBcbkBAIC0zMzUsMTQgKzMzMSw2IEBAIHZvaWQgc3B1ZnNfc3RvcF9jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUsIGludCBpcnEpO1xuIHZvaWQgc3B1ZnNfbWZjX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSk7XG4gdm9pZCBzcHVmc19kbWFfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1LCBpbnQgdHlwZSk7XG4gXG4tc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciB7XG4tXHRjaGFyICpuYW1lO1xuLVx0c3NpemVfdCAoKmR1bXApKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcbi1cdHU2NCAoKmdldCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgpO1xuLVx0c2l6ZV90IHNpemU7XG4tfTtcbi1leHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107XG4tXG4gZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTtcbiBleHRlcm4gdm9pZCBzcHVfZmluaV9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTtcbiBleHRlcm4gaW50IHNwdV9zYXZlKHN0cnVjdCBzcHVfc3RhdGUgKnByZXYsIHN0cnVjdCBzcHUgKnNwdSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xuaW5kZXggZWE0YmExYjZjZTZhOS4uYjZkZTM3MTUwZTczNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuY1xuQEAgLTgyLDggKzgyLDQgQEAgc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzID0ge1xuIFx0LnNwdV9ydW4gPSBkb19zcHVfcnVuLFxuIFx0Lm5vdGlmeV9zcHVzX2FjdGl2ZSA9IGRvX25vdGlmeV9zcHVzX2FjdGl2ZSxcbiBcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuLSNpZmRlZiBDT05GSUdfQ09SRURVTVBcbi1cdC5jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSxcbi1cdC5jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSA9IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlLFxuLSNlbmRpZlxuIH07XG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jXG5pbmRleCAwNmQwZGYxMDUzODIzLi5kYjMyYmI0MGE4NjcwIDEwMDY0NFxuLS0tIGEvZnMvYmluZm10X2VsZi5jXG4rKysgYi9mcy9iaW5mbXRfZWxmLmNcbkBAIC0yMDI5LDcgKzIwMjksNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdHtcbiBcdFx0c2l6ZV90IHN6ID0gaW5mby5zaXplO1xuIFxuLVx0XHQvKiBGb3IgY2VsbCBzcHVmcyBhbmQgeDg2IHhzdGF0ZSAqL1xuK1x0XHQvKiBGb3IgeDg2IHhzdGF0ZSAqL1xuIFx0XHRzeiArPSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xuIFxuIFx0XHRwaGRyNG5vdGUgPSBrbWFsbG9jX29iaigqcGhkcjRub3RlKTtcbkBAIC0yMDkzLDcgKzIwOTMsNyBAQCBzdGF0aWMgaW50IGVsZl9jb3JlX2R1bXAoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbiBcdGlmICghd3JpdGVfbm90ZV9pbmZvKFx1MDAyNmluZm8sIGNwcm0pKVxuIFx0XHRnb3RvIGVuZF9jb3JlZHVtcDtcbiBcbi1cdC8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovXG4rXHQvKiBGb3IgeDg2IHhzdGF0ZSAqL1xuIFx0aWYgKGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShjcHJtKSlcbiBcdFx0Z290byBlbmRfY29yZWR1bXA7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvY29yZWR1bXAuYyBiL2ZzL2NvcmVkdW1wLmNcbmluZGV4IGFjM2NkNzQ4MDhjNjQuLmE0OWYyZmQ2YmUyODAgMTAwNjQ0XG4tLS0gYS9mcy9jb3JlZHVtcC5jXG4rKysgYi9mcy9jb3JlZHVtcC5jXG5AQCAtMTExOCwxMSArMTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0aWYgKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX1JFSkVDVClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuLVx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuLVx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKChjbi1cdTAwM2VtYXNrIFx1MDAyNiBDT1JFRFVNUF9LRVJORUwpIFx1MDAyNlx1MDAyNiAhY29yZWR1bXBfd3JpdGUoY24sIGNwcm0sIGJpbmZtdCkpXG4gXHRcdHJldHVybjtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIxOjQxLjI1NjU1NjcwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyOTc3Mzg0MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogV29ydGggRnV6emluZz8qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgZXNzZW50aWFsbHkgY2xlYW5zIHVwIHNvbWUgZGVhZCBjb2RlIHJlbGF0ZWQgdG8gdGhlIFN5bmVyZ2lzdGljIFByb2Nlc3NpbmcgVW5pdCAoU1BVKSBvbiB0aGUgUG93ZXJQQyBDZWxsIHBsYXRmb3JtLiBTcGVjaWZpY2FsbHksIGl0J3MgcmVtb3ZpbmcgdGhlIFNQVSBjb3JlZHVtcCBjb2RlIGFuZCwgaW1wb3J0YW50bHksIHRoZSBgdW5zaGFyZV9maWxlcygpYCBjYWxsIHdpdGhpbiB0aGUgYGRvX2NvcmVkdW1wKClgIGZ1bmN0aW9uIGluIGBmcy9jb3JlZHVtcC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJlbW92YWw/IEhtbSwgcHJvYmFibHkgbm90IHdvcnRoIGEgZGVlcCBkaXZlIGZvciBmdXp6aW5nLCB1c3VhbGx5LlwiIEJ1dCBsZXQncyBkaWcgZGVlcGVyLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoZSBgdW5zaGFyZV9maWxlcygpYCByZW1vdmFsIGZyb20gYGRvX2NvcmVkdW1wKClgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGZ1bmN0aW9uLCBhbmQgdGhhdCBhbHdheXMgZ2V0cyBteSBhdHRlbnRpb24uIEluaXRpYWxseSBJIHdhcyB0aGlua2luZyBpdCB3YXMgcHJvYmFibHkgb25seSBhIENlbGwgc3BlY2lmaWMgY2hhbmdlLCBob3dldmVyLCBpdCBpcyBpbiBgZnMvY29yZWR1bXAuY2AuIEkgaGF2ZSB0byBjb25zaWRlciB0aGUgcmlwcGxlIGVmZmVjdHMgb2YgdGhpcy4gVGhlIGNvbW1lbnQgbWVudGlvbnMgQ2VsbCBTUFVzIHNwZWNpZmljYWxseSwgYnV0IHRoZSBmdW5jdGlvbiBpdHNlbGYgaXMgYnJvYWRlci5cblxuVGhlIHF1ZXN0aW9uIGJlY29tZXMsIGlzIHRoaXMgY2hhbmdlICphY3R1YWxseSogd29ydGggZnV6emluZz8gVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGNhbGwgdG8gYHVuc2hhcmVfZmlsZXMoKWAsIHdoaWNoIG1lYW5zLCB3aGVuIHRoZSBjb3JlIGlzIGR1bXBlZCwgdGhlIGZpbGVzIGFyZSAqbm8gbG9uZ2VyKiB1bnNoYXJlZC4gV2hpbGUgYSBsb3Qgb2YgdGhlIGNvZGUgYmVpbmcgcmVtb3ZlZCBpcyBvbiBhbiBvYnNvbGV0ZSBhcmNoaXRlY3R1cmUsIHRoaXMgY291bGQgc3RpbGwgbGVhZCB0byBhIHNlY3VyaXR5IGNvbmNlcm4uXG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGlzIHN1cHBvcnRlZCBpbiBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQgbGlrZSBRRU1VLiBJZiBpdCdzIHNvbWV0aGluZyB0aGF0IGNhbid0IGJlIHJlYWNoZWQsIG9yIGlzIGRlcHJlY2F0ZWQgb3IgaW1wb3NzaWJsZSB0byByZXBsaWNhdGUsIHRoZW4gaXQgbWF5IG5vdCBiZSB3b3J0aCBmdXp6aW5nLiBJIGJlbGlldmUgUUVNVSBkb2VzICpub3QqIGVtdWxhdGUgdGhlIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBTUFVzLCB3aGljaCBtZWFucywgdGhlIGNvZGUgaXMgbGlrZWx5IGRlYWQgaW4gbW9kZXJuIHN5c3RlbXMuXG5cbkJ1dCB0aGVuIEkgaGFkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjcml0ZXJpYTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLlwiXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBjaGFuZ2VzIHRvIGBmcy9jb3JlZHVtcC5jYCwgbGV0J3Mgc2VlOlxuXG5gYGBjXG5AQCAtMTExOCwxMSArMTExOCw2IEBAIHN0YXRpYyB2b2lkIGRvX2NvcmVkdW1wKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuIFx0aWYgKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX1JFSkVDVClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuLVx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuLVx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0aWYgKChjbi1cdTAwM2VtYXNrIFx1MDAyNiBDT1JFRFVNUF9LRVJORUwpIFx1MDAyNlx1MDAyNiAhY29yZWR1bXBfd3JpdGUoY24sIGNwcm0sIGJpbmZtdCkpXG4gXHRcdHJldHVybjtcbiBgYGBcblxuT2ssIGNvbmZpcm1lZCwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIHRoZSBmaWxlcyBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIHdoZW4gYGRvX2NvcmVkdW1wYCBpcyBjYWxsZWQsIGluICphbnkqIGFyY2hpdGVjdHVyZS4gVGhpcyBjb3VsZCBsZWFkIHRvIGEgYnVnIGlmIHNvbWV0aGluZyBlbHNlIHJlbGllcyBvbiB0aGlzIGJlaGF2aW9yLiBCdXQgaXQgKndhcyogYWRkZWQgc3BlY2lmaWNhbGx5IGZvciBDZWxsIFNQVS4gXG5cblVsdGltYXRlbHksIHRoaXMgaXMgYSBoYXJkIGNhbGwuIE15IGluc3RpbmN0IHNheXMgdGhpcyBpcyBsaWtlbHkgYSByZW1vdmFsIG9mIGFuIG9ic29sZXRlIGNhbGwsIGJ1dCBJIGNhbid0IGlnbm9yZSB0aGUgY29yZSBmdW5jdGlvbiBjaGFuZ2UuIEJ1dCBJIHN1c3BlY3QgdGhlIGNhbGwgd2FzIG5vdCBiZWluZyB1c2VkLiBJdCBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIHRoaXMgY2hhbmdlIGZ1cnRoZXIgZm9yIHBvc3NpYmxlIGJ1Z3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MDYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjowNC4yMzM5NDM3NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NDQyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG9fY29yZWR1bXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29yZWR1bXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb3JlZHVtcC5jPTEwNzU9c3RhdGljIGlubGluZSBib29sIGNvcmVkdW1wX3NraXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtMTA4Ni1cXG5mcy9jb3JlZHVtcC5jOjEwODc6c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuZnMvY29yZWR1bXAuYy0xMDg4LVxcdFxcdFxcdHNpemVfdCAqKmFyZ3YsIGludCAqYXJnYywgY29uc3Qgc3RydWN0IGxpbnV4X2JpbmZtdCAqYmluZm10KVxcbi0tXFxuZnMvY29yZWR1bXAuYz0xMTUxPXZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTExODktXFx0c2NvcGVkX3dpdGhfY3JlZHMoY3JlZClcXG5mcy9jb3JlZHVtcC5jOjExOTA6XFx0XFx0ZG9fY29yZWR1bXAoXFx1MDAyNmNuLCBcXHUwMDI2Y3BybSwgXFx1MDAyNmFyZ3YsIFxcdTAwMjZhcmdjLCBiaW5mbXQpO1xcbmZzL2NvcmVkdW1wLmMtMTE5MS1cXHRjb3JlZHVtcF9jbGVhbnVwKFxcdTAwMjZjbiwgXFx1MDAyNmNwcm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjowNC4yODA1OTE1NThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjIxMzAzNTc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb3JlZHVtcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggcmVtb3ZlcyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJJcyB0aGlzIHdvcnRoIGZ1enppbmc/XCIgVGhlIENlbGwgU1BVIGNvcmVkdW1wIHN1cHBvcnQgcmVtb3ZhbCBpcyBhbG1vc3QgaXJyZWxldmFudCBzaW5jZSB0aGF0IGFyY2hpdGVjdHVyZSBpcyBwcmV0dHkgbXVjaCBkZWFkIGFuZCBub3Qgc3RhbmRhcmQgUUVNVSBtYXRlcmlhbC4gVGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIgaXMgdGhlIHJlbW92YWwgb2YgdGhhdCBgdW5zaGFyZV9maWxlcygpYCBjYWxsIHdpdGhpbiBgZG9fY29yZWR1bXAoKWAuXG5cbkluaXRpYWxseSwgSSBmaWd1cmVkIGZ1enppbmcgYGRvX2NvcmVkdW1wYCAqY291bGQqIGJlIHVzZWZ1bCwgYnV0IHRoZSByZW1vdmVkIGZ1bmN0aW9uIHNlZW1lZCB0byBiZSBhIG5lYXIgbm8tb3AuIFRoZW4gSSByZW1lbWJlcmVkLCBgdW5zaGFyZV9maWxlcygpYCBhY3R1YWxseSBtYW5hZ2VzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIElmIHRoZSB0YWJsZSBpcyBzaGFyZWQsIGl0ICpjcmVhdGVzIGEgbmV3IG9uZSosIG90aGVyd2lzZSBkb2VzIG5vdGhpbmcuIFNvLCByZW1vdmluZyBpdCBtZWFucyB0aGUgY29yZWR1bXAgcHJvY2VzcyBub3cgKnNoYXJlcyogaXRzIGZpbGUgZGVzY3JpcHRvciB0YWJsZSB3aXRoIG90aGVyIHRocmVhZHMvcHJvY2Vzc2VzIGlmIGl0IHdhcyBzaGFyZWQuXG5cbk5vdywgY29yZWR1bXBzIHVzdWFsbHkgaGFwcGVuIGFmdGVyIGEgcHJvY2VzcyBjcmFzaGVzLCBvZnRlbiBhZnRlciB0ZXJtaW5hdGluZyBvdGhlciB0aHJlYWRzIG9yIGJlaW5nIGhpdCBieSBhIGZhdGFsIHNpZ25hbC4gU28sIEkgc2VlIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGluIGBmcy9jb3JlZHVtcC5jYCwgd2hpY2ggbWVhbnMgaXQncyAqcmVhY2hhYmxlKi4gQ3Jhc2hpbmcgYSBwcm9jZXNzIHRyaWdnZXJzIGBkb19jb3JlZHVtcGAsIG1ha2luZyBpdCByZWFjaGFibGUuXG5cbkdpdmVuIHRoYXQgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGV4YWN0IGltcGFjdCBvZiB0aGlzIHJlbW92YWwuIFRoZSBwcm9tcHQgc2F5cywgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi51c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBUaW1lIHRvIGdvIGRlZXBlciBhbmQgY2hlY2sgYHVuc2hhcmVfZmlsZXNgIGluIGBrZXJuZWwvZm9yay5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjI6MjYuNDkzNjI5ODQyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Mzk3NTgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNoYXJlX2ZpbGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9mb3JrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2ZvcmsuYz0zMzU0PVNZU0NBTExfREVGSU5FMSh1bnNoYXJlLCB1bnNpZ25lZCBsb25nLCB1bnNoYXJlX2ZsYWdzKVxcbi0tXFxua2VybmVsL2ZvcmsuYy0zMzY0LVxcbmtlcm5lbC9mb3JrLmM6MzM2NTppbnQgdW5zaGFyZV9maWxlcyh2b2lkKVxcbmtlcm5lbC9mb3JrLmMtMzM2Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIyOjI3LjM0NzYxNDA1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODI0OTA5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBEdW1wIFZ1bG5lcmFiaWxpdHkgQ29uY2VybnMqKlxuXG5Pa2F5LCBzbyBgdW5zaGFyZV9maWxlc2AgaXMgYSBsZWdpdGltYXRlIGZ1bmN0aW9uLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSByZW1vdmFsIG9mIHRoaXMgZnVuY3Rpb24gZnJvbSBgZG9fY29yZWR1bXBgIGlzIHJhaXNpbmcgc29tZSByZWQgZmxhZ3MgaW4gbXkgbWluZC4gVGhlIGNydXggb2YgaXQgaXMgdGhpczogaWYgYSBwcm9jZXNzIGlzIHNoYXJpbmcgaXRzIGZpbGUgZGVzY3JpcHRvciB0YWJsZSDigJMgc2F5LCB2aWEgYENMT05FX0ZJTEVTYCAqd2l0aG91dCogYENMT05FX1RIUkVBRGAg4oCTIGFuZCB0aGVuIGNyYXNoZXMsIHRoZSBjb3JlZHVtcCBwcm9jZXNzICp3b24ndCogdW5zaGFyZSB0aG9zZSBmaWxlcy4gVGhlIHBvdGVudGlhbCBjb25zZXF1ZW5jZSBpcyB0aGF0IHRoZSBjb3JlZHVtcCBwcm9jZXNzIGNvdWxkIGluYWR2ZXJ0ZW50bHkgbW9kaWZ5IHRoYXQgc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgaWYgYGRvX2NvcmVkdW1wYCBpdHNlbGYsIG9wZW5zIGEgcGlwZSBvciBhIGZpbGUgdG8gd3JpdGUgdGhlIGNvcmUgZHVtcCwgaXQgd291bGQgYWRkIGEgZmlsZSBkZXNjcmlwdG9yIHRvIHRoZSBzaGFyZWQgdGFibGUuIFRoaXMgd291bGQgbWVhbiB0aGF0IHByb2Nlc3NlcyBzaGFyaW5nIHRoYXQgdGFibGUgY291bGQgcG90ZW50aWFsbHkgaGF2ZSBhY2Nlc3MgdG8gdGhpcyBpbmZvcm1hdGlvbi5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGRvX2NvcmVkdW1wYCBpcyBpbmRlZWQgb3BlbmluZyB0aGVzZSBmaWxlcy9waXBlcy4gSSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiByaWdodCBhd2F5IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjExNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjozMy44MzAxMDczMDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE0NjQyNzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3Blbl9yb290fGZpbHBfb3BlbnxmaWxlX29wZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29yZWR1bXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb3JlZHVtcC5jPTg3OD1zdGF0aWMgYm9vbCBjb3JlZHVtcF9maWxlKHN0cnVjdCBjb3JlX25hbWUgKmNuLCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxcbi0tXFxuZnMvY29yZWR1bXAuYy05MDItXFx0XFx0ICogSWYgaXQgZG9lc24ndCBleGlzdCwgdGhhdCdzIGZpbmUuIElmIHRoZXJlJ3Mgc29tZVxcbmZzL2NvcmVkdW1wLmM6OTAzOlxcdFxcdCAqIG90aGVyIHByb2JsZW0sIHdlJ2xsIGNhdGNoIGl0IGF0IHRoZSBmaWxwX29wZW4oKS5cXG5mcy9jb3JlZHVtcC5jLTkwNC1cXHRcXHQgKi9cXG4tLVxcbmZzL2NvcmVkdW1wLmMtOTI2LVxcdFxcdHNjb3BlZF93aXRoX2luaXRfZnMoKVxcbmZzL2NvcmVkdW1wLmM6OTI3OlxcdFxcdFxcdGZpbGUgPSBmaWxwX29wZW4oY24tXFx1MDAzZWNvcmVuYW1lLCBvcGVuX2ZsYWdzLCAwNjAwKTtcXG5mcy9jb3JlZHVtcC5jLTkyOC1cXHR9IGVsc2Uge1xcbmZzL2NvcmVkdW1wLmM6OTI5OlxcdFxcdGZpbGUgPSBmaWxwX29wZW4oY24tXFx1MDAzZWNvcmVuYW1lLCBvcGVuX2ZsYWdzLCAwNjAwKTtcXG5mcy9jb3JlZHVtcC5jLTkzMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIyOjM0LjI0NDc1Mzg3MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMjQxMjk1NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipDb3JlZHVtcCBGaWxlIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGNvcmVkdW1wIHByb2Nlc3MuIEkgcmVtZW1iZXIgdGhhdCBgZmlscF9vcGVuYCBpcyBkZWZpbml0ZWx5IHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGdlbmVyYXRpbmcgYSBjb3JlIGR1bXAuIFNwZWNpZmljYWxseSwgaXQncyBjYWxsZWQgZnJvbSBgY29yZWR1bXBfZmlsZWAuIE5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIG9mIHRoZSBjYWxsIGNoYWluIGhlcmUuIElzIGBjb3JlZHVtcF9maWxlYCByZWFsbHkgZGlyZWN0bHkgY2FsbGVkIGJ5IGBkb19jb3JlZHVtcGA/IEknbSBwcmV0dHkgY2VydGFpbiBpdCBpcywgYnV0IGdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLCBhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbiBlcnJvciwgaXQncyBhbHdheXMgYmVzdCB0byBkb3VibGUtY2hlY2sgdGhlIGNvZGUuIExldCBtZSBxdWlja2x5IHZlcmlmeSB0aGUgY2FsbCByZWxhdGlvbnNoaXAgYmV0d2VlbiBgZG9fY29yZWR1bXBgIGFuZCBgY29yZWR1bXBfZmlsZWAgc28gSSBjYW4gY29uZmlybSBteSBtZW50YWwgbW9kZWwuIFRoaXMgbGV2ZWwgb2YgbWV0aWN1bG91c25lc3MgaXMgZXNzZW50aWFsIGluIGtlcm5lbCBkZWJ1Z2dpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNzkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjI6NDUuNDg2MDU0MjE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIzMzcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3JlZHVtcF9maWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvcmVkdW1wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29yZWR1bXAuYz04NzI9c3RhdGljIGlubGluZSBib29sIGNvcmVkdW1wX2ZvcmNlX3N1aWRfc2FmZShjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi0tXFxuZnMvY29yZWR1bXAuYy04NzctXFxuZnMvY29yZWR1bXAuYzo4Nzg6c3RhdGljIGJvb2wgY29yZWR1bXBfZmlsZShzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG5mcy9jb3JlZHVtcC5jLTg3OS1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdClcXG4tLVxcbmZzL2NvcmVkdW1wLmM9MTA4Nz1zdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtMTA5OC1cXHRjYXNlIENPUkVEVU1QX0ZJTEU6XFxuZnMvY29yZWR1bXAuYzoxMDk5OlxcdFxcdGlmICghY29yZWR1bXBfZmlsZShjbiwgY3BybSwgYmluZm10KSlcXG5mcy9jb3JlZHVtcC5jLTExMDAtXFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjo0NS41MzEyOTAyMzZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM0MjM5OTc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgUmVtb3ZhbCoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkganVzdCByZWFsaXplZCBzb21ldGhpbmcgYWJvdXQgYGZpbHBfb3BlbmAuIEl0ICpkb2Vzbid0KiBhY3R1YWxseSBwdXQgdGhlIGZpbGUgaW50byB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLiBJdCBqdXN0IGdpdmVzIHlvdSBhIGBzdHJ1Y3QgZmlsZSAqYC4gVGhhdCBtZWFucyBpdCBkb2Vzbid0IHRvdWNoIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUgYXQgYWxsLiBTbywgdGhlIHF1ZXN0aW9uIGlzOiB3aHkgd2FzIGB1bnNoYXJlX2ZpbGVzKClgIG5lZWRlZCBpbiB0aGUgZmlyc3QgcGxhY2U/XG5cblRoZSBjb21tZW50IG1lbnRpb25lZCB0aGUgQ2VsbCBTUFUgY29yZWR1bXAgY29kZSBhbmQgaG93IGl0IHJlYWQgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuIEFoLCB0aGF0J3MgaXQhIGB1bnNoYXJlX2ZpbGVzKClgIHdhcyB0aGVyZSBiZWNhdXNlIHRoZSBjb3JlZHVtcCBjb2RlIHdhcyAqaXRlcmF0aW5nKiB0aHJvdWdoIHRoZSBmaWxlIGRlc2NyaXB0b3JzIHRvIGZpbmQgYW5kIGR1bXAgU1BVIGNvbnRleHRzLiBJZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIHdhcyBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMsIGl0ZXJhdGluZyBvdmVyIGl0IHdoaWxlIGFub3RoZXIgcHJvY2VzcyBtaWdodCBiZSBtb2RpZnlpbmcgaXQgY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB1bnByZWRpY3RhYmxlIGJlaGF2aW9yLiBBIHN0YWJsZSBzbmFwc2hvdCB3YXMgbGlrZWx5IG5lY2Vzc2FyeSBmb3IgYSBjb25zaXN0ZW50IGNvcmVkdW1wLlxuXG5Ob3csIHNpbmNlIHRoZSBDZWxsIFNQVSBjb3JlZHVtcCBjb2RlIGhhcyBiZWVuIHJlbW92ZWQsIGB1bnNoYXJlX2ZpbGVzKClgICpzaG91bGRuJ3QqIGJlIG5lY2Vzc2FyeSBhbnltb3JlLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJcyB0aGlzIHdvcnRoIGV4cGxvcmluZyBmdXJ0aGVyIHdpdGggZnV6emluZz8gRGVmaW5pdGVseS4gSXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBgZG9fY29yZWR1bXBgLiBFdmVuIHRob3VnaCBpdCdzIFwianVzdFwiIHJlbW92aW5nIGB1bnNoYXJlX2ZpbGVzKClgLCBpdCBzdWJ0bHkgYWx0ZXJzIHRoZSBiZWhhdmlvciBvZiBgZG9fY29yZWR1bXBgLCBlc3BlY2lhbGx5IHdoZW4gYENMT05FX0ZJTEVTYCBpcyB1c2VkIHdpdGhvdXQgYENMT05FX1RIUkVBRGAuXG5cbkknbGwgbmVlZCB0byBjb25maXJtIGlmIGBkb19jb3JlZHVtcGAgaXMgYSBnb29kIGZvY3VzIHN5bWJvbC4gSXQncyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gdGhlIGVudHJ5IHBvaW50IG11c3QgYmUgdGhyb3VnaCBgdmZzX2NvcmVkdW1wYCBvciBgY29yZWR1bXBfdGFza19leGl0YCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBUaW1lIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGB2ZnNfY29yZWR1bXBgIHRvIGNvbmZpcm0gdGhpcyBodW5jaCBhbmQgZXN0YWJsaXNoIGEgZ29vZCB0ZXN0aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI4NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjo1NC44NzM2OTE5NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjA0MTMzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2NvcmVkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD01NTM9ZGlmZmVyZW50IHNldCBvZiBjcmVkZW50aWFscy4gIFRoaXMgaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1NS0gKiBgYHN5c19mYWNjZXNzYXQoKWBgLlxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0OjU1NjogKiBgYHZmc19jb3JlZHVtcCgpYGAuXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNTU3LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q9MjU0PWNvbnN05oyH6ZKI5LiK5pON5L2c77yM5Zug5q2k5LiN6ZyA6KaB6L+b6KGM57G75Z6L6L2s5o2i77yM5L2G6ZyA6KaB5Li05pe25pS+5byDY29uc3TpmZDlrprvvIzku6Xkvr/og73lpJ/kv67mlLlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzUtICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NDc2OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNDc3LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTEwODc9c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTExNTAtXFxuZnMvY29yZWR1bXAuYzoxMTUxOnZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuZnMvY29yZWR1bXAuYy0xMTUyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaD00OD1pbnQgZHVtcF91c2VyX3JhbmdlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTQ5LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oOjUwOmV4dGVybiB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKTtcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNjktI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKSB7fVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC03MS1cXG4tLVxcbmtlcm5lbC9zaWduYWwuYz0yODAzPWJvb2wgZ2V0X3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcXG4tLVxcbmtlcm5lbC9zaWduYWwuYy0zMDIzLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9zaWduYWwuYzozMDI0OlxcdFxcdFxcdHZmc19jb3JlZHVtcChcXHUwMDI2a3NpZy1cXHUwMDNlaW5mbyk7XFxua2VybmVsL3NpZ25hbC5jLTMwMjUtXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMjo1Ni40MzQxMTIxMjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgyMzQwNzY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB2ZnNfY29yZWR1bXBgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHZmc19jb3JlZHVtcGAgaXMgd2hlcmUgdGhpcyB3aG9sZSB0aGluZyBraWNrcyBvZmYuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHByaW1hcnkgZm9jdXMuIEFscmlnaHQsIEkndmUgY29uZmlybWVkIHRoYXQgYHZmc19jb3JlZHVtcGAgaXMgaW5kZWVkIGEgcHVibGljIEFQSSBlbnRyeSBwb2ludCBhbmQgbm90IHNvbWUgaW50ZXJuYWwsIHN0YXRpYyBmdW5jdGlvbiDigJMgZ29vZCwgdGhhdCdzIHdoYXQgSSBuZWVkZWQgdG8gY29uZmlybS4gQnV0IGhvbGQgb24sIHRoZSBjYWxsIGdyYXBoIHNob3dzIGB2ZnNfY29yZWR1bXBgIGJlaW5nIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gTm93IHRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBiZWluZyBpbnZva2VkLiBEb2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBoaW5nZSBvbiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zPyBBaCwgeWVzLCBpdCBhcHBlYXJzIGBDT05GSUdfQ09SRURVTVBgIGlzIGEgcHJlcmVxdWlzaXRlLiBHb29kLCBnb29kIC0gSSdtIGdldHRpbmcgYSBjbGVhcmVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTY5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6MDIuMjU3NTIyMDIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjU4MTY1NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT1JFRFVNUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTcxPWNvbmZpZyBCSU5GTVRfTUlTQ19CUEZcXG4tLVxcbmZzL0tjb25maWcuYmluZm10LTE4NC1cXG5mcy9LY29uZmlnLmJpbmZtdDoxODU6Y29uZmlnIENPUkVEVU1QXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTg2LVxcdGJvb2wgXFxcIkVuYWJsZSBjb3JlIGR1bXAgc3VwcG9ydFxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjAzLjkxNTY5Mzc5N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzI4NDM3MjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQ29yZWR1bXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcGF0Y2ggaXMgYWJvdXQgYENPUkVEVU1QYC4gVGhlIGtleSBjaGFuZ2Ugc2VlbXMgdG8gYmUgdGhlIHJlbW92YWwgb2YgU1BVLXNwZWNpZmljIGNvcmVkdW1wIGNvZGUuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJJcyB0aGlzIHdvcnRoIGZ1enppbmc/XCIgTGV0J3MgYnJlYWsgaXQgZG93bi5cblxuVGhlIHByb21wdCBwcm92aWRlcyBzb21lIGNsZWFyIGd1aWRlbGluZXM6IE9ubHkgY2hhbmdlcyB0aGF0IG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgYXJlIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgcmVtb3ZlcyBhIGNhbGwgdG8gYHVuc2hhcmVfZmlsZXMoKWAgZnJvbSBgZG9fY29yZWR1bXAoKWAuIFRoaXMgKmRvZXMqIGFsdGVyIGV4ZWN1dGlvbiBmbG93OyBpdCdzIGEgZnVuY3Rpb24gY2FsbCByZW1vdmFsLCB3aGljaCBpcyBzaWduaWZpY2FudC4gQ3J1Y2lhbGx5LCBhbnkgcHJvY2VzcyBpbiBRRU1VIGNhbiBnZW5lcmF0ZSBhIGNvcmUgZHVtcCwgc28gdGhpcyBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXJlZm9yZSwgYmFzZWQgb24gdGhhdCBjcml0ZXJpYSwgdGhpcyBsb29rcyBsaWtlIGEgYFdvcnRoRnV6emluZz10cnVlYCBzaXR1YXRpb24uXG5cbkhvd2V2ZXIsIHRoZSBwYXRjaCBhbHNvIHJlbW92ZXMgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jYCBhbmQgcmVsYXRlZCBjb2RlLiBUaGF0J3MgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLCBhbmQgSSB3b24ndCBiZSBmdXp6aW5nIENlbGwuIFRoZSByZW1vdmFsIG9mIGB1bnNoYXJlX2ZpbGVzKClgIG9jY3VycyBpbiBgZnMvY29yZWR1bXAuY2Agd2hpY2ggaXMgZ2VuZXJpYy4gVGhlIGNvbW1lbnQgY2hhbmdlIGluIGBmcy9iaW5mbXRfZWxmLmNgIGlzIGNvc21ldGljLCBhbmQgaXJyZWxldmFudCB0byB0aGUgbWFpbiBjaGFuZ2UuIFRoZSAqb25seSogcmVsZXZhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgYHVuc2hhcmVfZmlsZXMoKWAuXG5cbk5vdywgZG9lcyBpdCAqcmVhbGx5KiBkZXNlcnZlIGZ1enppbmc/IFRoZSBwcm9tcHQgc2F5cywgXCJJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuLi51c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cIiBJdCAqZG9lcyogbW9kaWZ5IGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXQgaXMgZXhlY3V0ZWQuIFNvLCB5ZXMsIHRoZSBhbnN3ZXIgaXMgYFdvcnRoRnV6emluZz10cnVlYC4gVGhlIGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYHZmc19jb3JlZHVtcGAuIFRoZSBgQ09SRURVTVBgIGNvbmZpZyBzaG91bGQgYmUgZW5hYmxlZC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suIFdoYXQncyB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIGB1bnNoYXJlX2ZpbGVzKClgPyBUaGUgZnVuY3Rpb24gdW5zaGFyZXMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZS4gSWYgYSBwcm9jZXNzIGR1bXBzIGNvcmUsIHdoYXQgaGFwcGVucyBpZiB0aGUgZmlsZSBkZXNjcmlwdG9ycyBhcmVuJ3QgdW5zaGFyZWQ/IENvcmVkdW1wIHNob3VsZG4ndCBtb2RpZnkgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSBkaXJlY3RseSwgYXQgbGVhc3Qgbm90IGluIGFueSBvYnZpb3VzIHdheS4gV2FpdCwgZG9lcyBgZHVtcF9lbWl0YCB1c2UgYW55PyBObywgaXQgd3JpdGVzIHRvIGBjcHJtLVx1MDAzZWZpbGVgLiBXaGF0IGFib3V0IHVzZXItbW9kZSBoZWxwZXJzPyBgZG9fY29yZWR1bXBgIGNhbiBwaXBlIHRoZSBjb3JlIGR1bXAgdG8gYSB1c2VyLW1vZGUgaGVscGVyLCBhbmQgdGhpcyB1c2VzIGBjYWxsX3VzZXJtb2RlaGVscGVyX3NldHVwYCBhbmQgYGNhbGxfdXNlcm1vZGVoZWxwZXJfZXhlY2AuIFN0aWxsLCB0aGVyZSBpcyBubyBtb2RpZmljYXRpb24gb2YgdGhlIGR1bXBpbmcgcHJvY2VzcycgZmlsZSBkZXNjcmlwdG9yIHRhYmxlLlxuXG5TbywgaXQgc2VlbXMgdGhhdCBgdW5zaGFyZV9maWxlcygpYCB3YXMgdHJ1bHkgb25seSBuZWVkZWQgZm9yIENlbGwgU1BVLCB3aGljaCBpdGVyYXRlZCBvdmVyIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUuIFRoaXMgcmVtb3ZhbCBpcyBlc3NlbnRpYWxseSBhIGNsZWFuLXVwLCB3aGljaCBpcyBnb29kLiBCdXQsIGdpdmVuIHRoYXQgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljLCB0aGUgcHJ1ZGVudCB0aGluZyB0byBkbyBpcyBtYXJrIGl0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkp1c3Qgb25lIGZpbmFsIHF1ZXN0aW9uOiBJcyB0aGVyZSBhbnkgb3RoZXIgYXJjaGl0ZWN0dXJlIHRoYXQgcmVsaWVzIG9uIGB1bnNoYXJlX2ZpbGVzKClgIGR1cmluZyBjb3JlZHVtcD8gTGV0J3MgdmVyaWZ5IG5vIG90aGVyIGFyY2hpdGVjdHVyZSBpbXBsZW1lbnRzIGBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZWAgYW5kIGl0ZXJhdGVzIG92ZXIgdGhlIGZpbGUgZGVzY3JpcHRvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQ0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzoyMS4yMDAwNjgzOTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTQ4NDcwODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvS2NvbmZpZz01OTU9Y29uZmlnIEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVNcXG4tLVxcbmFyY2gvS2NvbmZpZy01OTktXFx0ICBhcmNoLXNwZWNpZmljIEVMRiBub3RlIHNlY3Rpb24gdG8gY29yZSBmaWxlcy4gSXQgbXVzdCBwcm92aWRlIHR3b1xcbmFyY2gvS2NvbmZpZzo2MDA6XFx0ICBmdW5jdGlvbnM6IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCkgYW5kXFxuYXJjaC9LY29uZmlnLTYwMS1cXHQgIGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSgpIHdoaWNoIGFyZSBpbnZva2VkIGJ5IHRoZSBFTEYgY29yZVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYz0xOTY2PWludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5NS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jOjE5OTY6aW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpXFxuYXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYy0xOTk3LXtcXG4tLVxcbmZzL2JpbmZtdF9lbGYuYz0xOTkwPXN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxcbi0tXFxuZnMvYmluZm10X2VsZi5jLTIwMzItXFx0XFx0LyogRm9yIHg4NiB4c3RhdGUgKi9cXG5mcy9iaW5mbXRfZWxmLmM6MjAzMzpcXHRcXHRzeiArPSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xcbmZzL2JpbmZtdF9lbGYuYy0yMDM0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9lbGYuaD02Nj1zdHJ1Y3QgY29yZWR1bXBfcGFyYW1zO1xcbi0tXFxuaW5jbHVkZS9saW51eC9lbGYuaC02OC0jaWZuZGVmIENPTkZJR19BUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTXFxuaW5jbHVkZS9saW51eC9lbGYuaDo2OTpzdGF0aWMgaW5saW5lIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKSB7IHJldHVybiAwOyB9XFxuaW5jbHVkZS9saW51eC9lbGYuaC03MC1zdGF0aWMgaW5saW5lIGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvZWxmLmgtNzEtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2VsZi5oOjcyOmV4dGVybiBpbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUodm9pZCk7XFxuaW5jbHVkZS9saW51eC9lbGYuaC03My1leHRlcm4gaW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZShzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6MjIuNzE0OTIxNTYxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyMTQ0NDcyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgeDg2IHhzdGF0ZSBhbmQgQ29yZSBEdW1wcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIHg4NiB4c3RhdGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWNhbGx5IGluY2x1ZGVzIHRoZSBmdW5jdGlvbnMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAuIFRoYXQncyBpbnRlcmVzdGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiUmlnaHQsIHNvIHdlJ3JlIGhhbmRsaW5nIHRoZSBleHRlbmRlZCBzdGF0ZSBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGNvcmUgZHVtcCBwcm9jZXNzLlwiIEdpdmVuIHRoYXQsIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGl0J3MgZG9pbmcgdGhhdC4gTXkgbmV4dCBzdGVwLCBuYXR1cmFsbHksIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGltcGxlbWVudGF0aW9uIGl0ZXJhdGVzIG92ZXIgZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgdGhlIGNvcmUgZHVtcCBwcm9jZXNzLiBUaGlzIHdvdWxkIGJlIGNydWNpYWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgYW5kIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgeHN0YXRlIGRhdGEgaXMgZ2V0dGluZyB3cml0dGVuIGRpcmVjdGx5LCBvciBpbmRpcmVjdGx5LiBUaGUgd2F5IGl0IGhhbmRsZXMgZmlsZSBkZXNjcmlwdG9ycyB3b3VsZCBkaWN0YXRlIHRoaXMgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MTEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzoyOS45MjkzNzEyMzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczNTkyNjc0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmM9MTk2Nj1pbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnB1L3hzdGF0ZS5jLTE5OTUtXFxuYXJjaC94ODYva2VybmVsL2ZwdS94c3RhdGUuYzoxOTk2OmludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmMtMTk5Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjMwLjY2NTMwMjM5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUwMzc0ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIENvcmUgRHVtcCBNZXRhZGF0YSBpbiB4ODYgQXJjaGl0ZWN0dXJlKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBob3cgb3VyIGNvcmUgZHVtcHMgaGFuZGxlIGV4dGVuZGVkIHN0YXRlIGRhdGEuIEknbSBmb2N1c2luZyBvbiB0aGUgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCB2YXJpYWJsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmNgIGZpbGUuIFRoaXMgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGFuZCBpdHMgZmxvYXRpbmctcG9pbnQgdW5pdCAoRlBVKSBvciBleHRlbmRlZCBzdGF0ZSAoeHN0YXRlKSBjb21wb25lbnRzLCB3aGljaCBhcmUgY3J1Y2lhbCBmb3Igc2F2aW5nIGFuZCByZXN0b3JpbmcgcHJvY2Vzc29yIGNvbnRleHQgZHVyaW5nIGRlYnVnZ2luZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IG11Y2ggc3BhY2Ugd2UgYWxsb2NhdGUgZm9yIHRoaXMgZXh0cmEgaW5mb3JtYXRpb24uIFRoaXMgd2lsbCBpbXBhY3QgdGhlIHNpemUgb2YgdGhlIGNvcmUgZHVtcCBmaWxlcywgYW5kIGhvdyBtdWNoIGRhdGEgaXMgYXZhaWxhYmxlIGZvciBhbmFseXNpcyBpbiBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcuIEtub3dpbmcgdGhpcyBjYW4gaGVscCB3aGVuIG9wdGltaXppbmcgY29yZSBkdW1wIGNyZWF0aW9uLCBvciB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gbGFyZ2UgY29yZSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MTMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzozNC44MTU2NzkzMDNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9mcHUveHN0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk5MDpcXHRcXHRpZiAoKHNpemVvZihzdHJ1Y3QgeDg2X3hmZWF0X2NvbXBvbmVudCkgKiBudW1fcmVjb3JkcykgIT0gZW4ubl9kZXNjc3opXFxuMTk5MTpcXHRcXHRcXHRyZXR1cm4gMTtcXG4xOTkyOlxcdFxcbjE5OTM6XFx0XFx0cmV0dXJuIDA7XFxuMTk5NDpcXHR9XFxuMTk5NTpcXHRcXG4xOTk2OlxcdGludCBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSh2b2lkKVxcbjE5OTc6XFx0e1xcbjE5OTg6XFx0XFx0aW50IHNpemU7XFxuMTk5OTpcXHRcXG4yMDAwOlxcdFxcdGlmICghZnB1X3VzZXJfY2ZnLm1heF9mZWF0dXJlcylcXG4yMDAxOlxcdFxcdFxcdHJldHVybiAwO1xcbjIwMDI6XFx0XFxuMjAwMzpcXHRcXHQvKiAubm90ZSBoZWFkZXIgKi9cXG4yMDA0OlxcdFxcdHNpemUgID0gc2l6ZW9mKHN0cnVjdCBlbGZfbm90ZSk7XFxuMjAwNTpcXHRcXHQvKiAgTmFtZSBwbHVzIGFsaWdubWVudCB0byA0IGJ5dGVzICovXFxuMjAwNjpcXHRcXHRzaXplICs9IHJvdW5kdXAoc2l6ZW9mKG93bmVyX25hbWUpLCA0KTtcXG4yMDA3OlxcdFxcdHNpemUgKz0gZ2V0X3hzYXZlX2Rlc2Nfc2l6ZSgpO1xcbjIwMDg6XFx0XFxuMjAwOTpcXHRcXHRyZXR1cm4gc2l6ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6MzQuODE1Nzg4OTMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkxNjY1OTE4MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBEdW1wIExvZ2ljIGFuZCBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGRvZXNuJ3QgbWVzcyBhcm91bmQgd2l0aCBpdGVyYXRpbmcgZmlsZSBkZXNjcmlwdG9ycywgaXQganVzdCBkdW1wcyBgeHN0YXRlYC4gVGhhdCBtZWFucyBgdW5zaGFyZV9maWxlcygpYCB3YXMgKm9ubHkqIG5lZWRlZCBmb3IgQ2VsbCBTUFUuIFJpZ2h0LCBzbyByZW1vdmluZyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBkb19jb3JlZHVtcCgpYCBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UuIE15IGluaXRpYWwgaW5zdGluY3Qgd2FzIHJpZ2h0LCBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gbXkgZm9jdXMgc3ltYm9scyBhcmUgc29saWQuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgY29yZWR1bXBzLiBBIHF1aWNrIGNoZWNrIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUncyBhIG1vcmUgc3BlY2lmaWMgb3IgYmV0dGVyIGZ1bmN0aW9uIHRvIHRhcmdldC4uLm5vcGUsIGBkb19jb3JlZHVtcGAgaXMgc3RhdGljLCBzbyBgdmZzX2NvcmVkdW1wYCBpcyB0aGUgZXhwb3J0ZWQgb25lIGFuZCB0aGUgYmVzdCBzeW1ib2wuXG5cbkFuZCB0aGUgY29uZmlnLCBgQ09SRURVTVBgLCB5ZXMgaXQncyBqdXN0IGBDT1JFRFVNUGAuIE5vIG90aGVyIGNvbmZpZ3MgaW52b2x2ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uYWxpdHkuIEFsbCBnb29kIHRoZXJlLlxuXG5SaWdodCwgbGV0J3MgcmV2aWV3IHRoZSBcIndvcnRoIGZ1enppbmdcIiBjcml0ZXJpYSBhZ2Fpbi4gT2theSwgc28gdGhlIGNoYW5nZSBpcyBpbiBgZnMvY29yZWR1bXAuY2AsIHdoaWNoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUuIEFuZCB0aGUgcmVtb3ZhbCBvZiBgdW5zaGFyZV9maWxlcygpYCAqZG9lcyogYWx0ZXIgZXhlY3V0aW9uIGZsb3csIHdoaWNoIHNob3VsZCBtYWtlIGl0IHdvcnRoeSBvZiBmdXp6aW5nLlxuXG5XYWl0LCBJIGhhdmUgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBDb3VsZCB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgcmVtb3ZhbCBiZSBjb25zaWRlcmVkIGEgZGVjb3JhdGl2ZSBjaGFuZ2UsIG9yIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgKmZ1bmN0aW9uYWxseSogYWx0ZXIgZXhlY3V0aW9uPyBObywgdGhhdCdzIG5vdCByaWdodC4gYHVuc2hhcmVfZmlsZXMoKWAgYWxsb2NhdGVzIGEgbmV3IGZpbGUgZGVzY3JpcHRvciB0YWJsZSBpZiBpdCdzIHNoYXJlZC4gUmVtb3ZpbmcgaXQgbWVhbnMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZSAqcmVtYWlucyogc2hhcmVkLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuT2theSwgSSdtIGNvbmZpZGVudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MzY2LCJPdXRwdXRUb2tlbnMiOjE2OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjQzLjk4MjM4MjY2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjQxNTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgQ2VsbCBTUFUgY29yZWR1bXAgc3VwcG9ydCwgd2hpY2ggaXMgb2Jzb2xldGUgYW5kIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIFFFTVUuIEhvd2V2ZXIsIGl0IGFsc28gcmVtb3ZlcyB0aGUgYHVuc2hhcmVfZmlsZXMoKWAgY2FsbCBmcm9tIHRoZSBnZW5lcmljIGBkb19jb3JlZHVtcCgpYCBmdW5jdGlvbiBpbiBgZnMvY29yZWR1bXAuY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGFsdGVycyBob3cgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyBhcmUgaGFuZGxlZCBkdXJpbmcgYSBjb3JlZHVtcCAodGhleSBhcmUgbm8gbG9uZ2VyIHVuc2hhcmVkIGlmIHNoYXJlZCB2aWEgQ0xPTkVfRklMRVMpLiBUaGlzIGNoYW5nZSBpcyByZWFjaGFibGUgaW4gUUVNVSBhbmQgd29ydGggZnV6emluZyB0byBlbnN1cmUgaXQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMgb3IgcmFjZSBjb25kaXRpb25zIHdoZW4gZHVtcGluZyBjb3JlIG9mIHByb2Nlc3NlcyB3aXRoIHNoYXJlZCBmaWxlIGRlc2NyaXB0b3IgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPUkVEVU1QXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBDZWxsIFNQVSBjb3JlZHVtcCBzdXBwb3J0LCB3aGljaCBpcyBvYnNvbGV0ZSBhbmQgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgUUVNVS4gSG93ZXZlciwgaXQgYWxzbyByZW1vdmVzIHRoZSBgdW5zaGFyZV9maWxlcygpYCBjYWxsIGZyb20gdGhlIGdlbmVyaWMgYGRvX2NvcmVkdW1wKClgIGZ1bmN0aW9uIGluIGBmcy9jb3JlZHVtcC5jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgYWx0ZXJzIGhvdyBmaWxlIGRlc2NyaXB0b3IgdGFibGVzIGFyZSBoYW5kbGVkIGR1cmluZyBhIGNvcmVkdW1wICh0aGV5IGFyZSBubyBsb25nZXIgdW5zaGFyZWQgaWYgc2hhcmVkIHZpYSBDTE9ORV9GSUxFUykuIFRoaXMgY2hhbmdlIGlzIHJlYWNoYWJsZSBpbiBRRU1VIGFuZCB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBpdCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciByYWNlIGNvbmRpdGlvbnMgd2hlbiBkdW1waW5nIGNvcmUgb2YgcHJvY2Vzc2VzIHdpdGggc2hhcmVkIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE2OjIzOjQ0LjA1MzAyODc5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMTIzOTIwMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNjoyMzo0NC4wNTM0MTc5NTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTYzMTE5OTkxNDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBwdXJlbHkgcmVtb3ZlcyB0aGUgU1BVIGNvcmVkdW1wIHN1cHBvcnQgZnJvbSB0aGUgUG93ZXJQQyBDZWxsIGFyY2hpdGVjdHVyZS4gTm8gbmV3IGNvZGUgaXMgYWRkZWQsIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBzZW50IHRvIHVzZXIgc3BhY2UsIGFuZCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDU1ZTZmMzExM2Y2NWI5NTZiNGFiMDk5MTYwN2NiMmI4NDY2YjJiZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNjoyMTozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcbmluZGV4IDI1ODBlMjdlNDMyODcuLjQwYzg3NGZlMmY1M2EgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZ1xuKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWdcbkBAIC0xNjAsNyArMTYwLDYgQEAgY29uZmlnIFBQQ1xuIFx0c2VsZWN0IEFSQ0hfSEFTX1VCU0FOXG4gXHRzZWxlY3QgQVJDSF9IQVNfVkRTT19BUkNIX0RBVEFcbiBcdHNlbGVjdCBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuLVx0c2VsZWN0IEFSQ0hfSEFWRV9FWFRSQV9FTEZfTk9URVMgICAgICAgIGlmIFNQVV9CQVNFXG4gXHRzZWxlY3QgQVJDSF9LRUVQX01FTUJMT0NLXG4gXHRzZWxlY3QgQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcdGlmIFBQQ19SQURJWF9NTVVcbiBcdHNlbGVjdCBBUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaFxuaW5kZXggYmI0Yjk0NDQ0ZDNlOC4uNWRjOGM0OTIzZWIxZCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oXG5AQCAtMTIzLDEyICsxMjMsNiBAQCBleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuIFx0KDB4N2ZmIFx1MDAzZVx1MDAzZSAoUEFHRV9TSElGVCAtIDEyKSkgOiBcXFxuIFx0KDB4M2ZmZmYgXHUwMDNlXHUwMDNlIChQQUdFX1NISUZUIC0gMTIpKSlcbiBcbi0jaWZkZWYgQ09ORklHX1NQVV9CQVNFXG4tLyogTm90ZXMgdXNlZCBpbiBFVF9DT1JFLiBOb3RlIG5hbWUgaXMgXCJTUFUvXHUwMDNjZmRcdTAwM2UvXHUwMDNjZmlsZW5hbWVcdTAwM2VcIi4gKi9cbi0jZGVmaW5lIE5UX1NQVVx0XHQxXG4tXG4tI2VuZGlmIC8qIENPTkZJR19TUFVfQkFTRSAqL1xuLVxuICNpZmRlZiBDT05GSUdfUFBDNjRcbiBcbiAjZGVmaW5lIGdldF9jYWNoZV9nZW9tZXRyeShsZXZlbCkgXFxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcbmluZGV4IDk2YWQ0NTEwYzg5NTQuLjcxNTIyODViNjI2OGYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1LmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHUuaFxuQEAgLTIxMCwxNSArMjEwLDEyIEBAIGV4dGVybiBsb25nIHNwdV9zeXNfY2FsbGJhY2soc3RydWN0IHNwdV9zeXNjYWxsX2Jsb2NrICpzKTtcbiBcbiAvKiBzeXNjYWxscyBpbXBsZW1lbnRlZCBpbiBzcHVmcyAqL1xuIHN0cnVjdCBmaWxlO1xuLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4gc3RydWN0IHNwdWZzX2NhbGxzIHtcbiBcdGxvbmcgKCpjcmVhdGVfdGhyZWFkKShjb25zdCBjaGFyIF9fdXNlciAqbmFtZSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0XHRcdHN0cnVjdCBmaWxlICpuZWlnaGJvcik7XG4gXHRsb25nICgqc3B1X3J1bikoc3RydWN0IGZpbGUgKmZpbHAsIF9fdTMyIF9fdXNlciAqdW5wYyxcbiBcdFx0XHRcdFx0XHRfX3UzMiBfX3VzZXIgKnVzdGF0dXMpO1xuLVx0aW50ICgqY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSkodm9pZCk7XG4tXHRpbnQgKCpjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZSkoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4gXHR2b2lkICgqbm90aWZ5X3NwdXNfYWN0aXZlKSh2b2lkKTtcbiBcdHN0cnVjdCBtb2R1bGUgKm93bmVyO1xuIH07XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuaW5kZXggZGI2NWJmY2QxZTc0OS4uNmJkMjY4MTVjMzMxMCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvS2NvbmZpZ1xuQEAgLTEwLDcgKzEwLDYgQEAgY29uZmlnIFNQVV9GU1xuIFx0dHJpc3RhdGUgXCJTUFUgZmlsZSBzeXN0ZW1cIlxuIFx0ZGVmYXVsdCBtXG4gXHRkZXBlbmRzIG9uIFBQQ19DRUxMXG4tXHRkZXBlbmRzIG9uIENPUkVEVU1QXG4gXHRzZWxlY3QgU1BVX0JBU0VcbiBcdGhlbHBcbiBcdCAgVGhlIFNQVSBmaWxlIHN5c3RlbSBpcyB1c2VkIHRvIGFjY2VzcyBTeW5lcmdpc3RpYyBQcm9jZXNzaW5nXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG5pbmRleCAwMDA4OTRlMDdiMDI3Li44YmU4MTIwN2U4ODZhIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9zeXNjYWxscy5jXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X3N5c2NhbGxzLmNcbkBAIC04OCwyNiArODgsNiBAQCBTWVNDQUxMX0RFRklORTMoc3B1X3J1bixpbnQsIGZkLCBfX3UzMiBfX3VzZXIgKiwgdW5wYywgX191MzIgX191c2VyICosIHVzdGF0dXMpXG4gXHRyZXR1cm4gY2FsbHMtXHUwMDNlc3B1X3J1bihmZF9maWxlKGFyZyksIHVucGMsIHVzdGF0dXMpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0NPUkVEVU1QXG4taW50IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpXG4te1xuLVx0Q0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpO1xuLVx0aWYgKCFjYWxscylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4gY2FsbHMtXHUwMDNlY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpO1xuLX1cbi1cbi1pbnQgZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0Q0xBU1Moc3B1ZnNfY2FsbHMsIGNhbGxzKSgpO1xuLVx0aWYgKCFjYWxscylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRyZXR1cm4gY2FsbHMtXHUwMDNlY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoY3BybSk7XG4tfVxuLSNlbmRpZlxuLVxuIHZvaWQgbm90aWZ5X3NwdXNfYWN0aXZlKHZvaWQpXG4ge1xuIFx0c3RydWN0IHNwdWZzX2NhbGxzICpjYWxscztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbmluZGV4IDUyZTRjODBlYzhkMDMuLjYwMzE5ZDRmZjI1YTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvTWFrZWZpbGVcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9NYWtlZmlsZVxuQEAgLTQsNyArNCw2IEBAIG9iai0kKENPTkZJR19TUFVfRlMpICs9IHNwdWZzLm9cbiBzcHVmcy15ICs9IGlub2RlLm8gZmlsZS5vIGNvbnRleHQubyBzeXNjYWxscy5vXG4gc3B1ZnMteSArPSBzY2hlZC5vIGJhY2tpbmdfb3BzLm8gaHdfb3BzLm8gcnVuLm8gZ2FuZy5vXG4gc3B1ZnMteSArPSBzd2l0Y2gubyBmYXVsdC5vIGxzY3NhX2FsbG9jLm9cbi1zcHVmcy0kKENPTkZJR19DT1JFRFVNUCkgKz0gY29yZWR1bXAub1xuIFxuICMgbWFnaWMgZm9yIHRoZSB0cmFjZSBldmVudHNcbiBDRkxBR1Nfc2NoZWQubyA6PSAtSSQoc3JjKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb3JlZHVtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMzAxZWU3ZDhiN2RmMC4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNcbisrKyAvZGV2L251bGxcbkBAIC0xLDE4MyArMCwwIEBAXG4tLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbi0vKlxuLSAqIFNQVSBjb3JlIGR1bXAgY29kZVxuLSAqXG4tICogKEMpIENvcHlyaWdodCAyMDA2IElCTSBDb3JwLlxuLSAqXG4tICogQXV0aG9yOiBEd2F5bmUgR3JhbnQgTWNDb25uZWxsIFx1MDAzY2RlY2ltYWxAdXMuaWJtLmNvbVx1MDAzZVxuLSAqL1xuLVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2VsZi5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZmR0YWJsZS5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvbGlzdC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvcmVkdW1wLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRzLmhcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2Vcbi1cbi0jaW5jbHVkZSBcInNwdWZzLmhcIlxuLVxuLXN0YXRpYyBpbnQgc3B1ZnNfY3R4X25vdGVfc2l6ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGRmZClcbi17XG4tXHRpbnQgaSwgc3osIHRvdGFsID0gMDtcbi1cdGNoYXIgKm5hbWU7XG4tXHRjaGFyIGZ1bGxuYW1lWzgwXTtcbi1cbi1cdGZvciAoaSA9IDA7IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHtcbi1cdFx0bmFtZSA9IHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0ubmFtZTtcbi1cdFx0c3ogPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLnNpemU7XG4tXG4tXHRcdHNwcmludGYoZnVsbG5hbWUsIFwiU1BVLyVkLyVzXCIsIGRmZCwgbmFtZSk7XG4tXG4tXHRcdHRvdGFsICs9IHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpO1xuLVx0XHR0b3RhbCArPSByb3VuZHVwKHN0cmxlbihmdWxsbmFtZSkgKyAxLCA0KTtcbi1cdFx0dG90YWwgKz0gcm91bmR1cChzeiwgNCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gdG90YWw7XG4tfVxuLVxuLXN0YXRpYyBpbnQgbWF0Y2hfY29udGV4dChjb25zdCB2b2lkICp2LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgZmQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpZiAoZmlsZS1cdTAwM2VmX29wICE9IFx1MDAyNnNwdWZzX2NvbnRleHRfZm9wcylcbi1cdFx0cmV0dXJuIDA7XG4tXHRjdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLVx1MDAzZWlfY3R4O1xuLVx0aWYgKGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgU1BVX0NSRUFURV9OT1NDSEVEKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBmZCArIDE7XG4tfVxuLVxuLS8qXG4tICogVGhlIGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG5vdGVzIGZvciBDZWxsIGFyZSB2YXJpb3VzXG4tICogY29udGV4dCBmaWxlcyBpbiB0aGUgc3B1IGNvbnRleHQuXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGl0ZXJhdGVzIG92ZXIgYWxsIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyBhbmQgc2Vlc1xuLSAqIGlmIHRoZXkgYXJlIGEgZGlyZWN0b3J5IGluIHNwdWZzLiAgSW4gdGhhdCBjYXNlIHdlIHVzZSBzcHVmc1xuLSAqIGludGVybmFsIGZ1bmN0aW9uYWxpdHkgdG8gZHVtcCB0aGVtIHdpdGhvdXQgbmVlZGluZyB0byBhY3R1YWxseVxuLSAqIG9wZW4gdGhlIGZpbGVzLlxuLSAqL1xuLS8qXG4tICogZGVzY3JpcHRvciB0YWJsZSBpcyBub3Qgc2hhcmVkLCBzbyBmaWxlcyBjYW4ndCBjaGFuZ2Ugb3IgZ28gYXdheS5cbi0gKi9cbi1zdGF0aWMgc3RydWN0IHNwdV9jb250ZXh0ICpjb3JlZHVtcF9uZXh0X2NvbnRleHQoaW50ICpmZClcbi17XG4tXHRzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCA9IE5VTEw7XG4tXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi1cdGludCBuID0gaXRlcmF0ZV9mZChjdXJyZW50LVx1MDAzZWZpbGVzLCAqZmQsIG1hdGNoX2NvbnRleHQsIE5VTEwpO1xuLVx0aWYgKCFuKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdCpmZCA9IG4gLSAxO1xuLVxuLVx0ZmlsZSA9IGZnZXRfcmF3KCpmZCk7XG4tXHRpZiAoZmlsZSkge1xuLVx0XHRjdHggPSBTUFVGU19JKGZpbGVfaW5vZGUoZmlsZSkpLVx1MDAzZWlfY3R4O1xuLVx0XHRnZXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdFx0ZnB1dChmaWxlKTtcbi1cdH1cbi1cbi1cdHJldHVybiBjdHg7XG4tfVxuLVxuLWludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpbnQgc2l6ZSA9IDAsIHJjLCBmZDtcbi1cbi1cdGZkID0gMDtcbi1cdHdoaWxlICgoY3R4ID0gY29yZWR1bXBfbmV4dF9jb250ZXh0KFx1MDAyNmZkKSkgIT0gTlVMTCkge1xuLVx0XHRyYyA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7XG4tXHRcdGlmIChyYykge1xuLVx0XHRcdHB1dF9zcHVfY29udGV4dChjdHgpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdHJjID0gc3B1ZnNfY3R4X25vdGVfc2l6ZShjdHgsIGZkKTtcbi1cdFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjIFx1MDAzYyAwKSB7XG4tXHRcdFx0cHV0X3NwdV9jb250ZXh0KGN0eCk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdH1cbi1cbi1cdFx0c2l6ZSArPSByYztcbi1cbi1cdFx0Lyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqL1xuLVx0XHRmZCsrO1xuLVx0XHRwdXRfc3B1X2NvbnRleHQoY3R4KTtcbi1cdH1cbi1cbi1cdHJldHVybiBzaXplO1xuLX1cbi1cbi1zdGF0aWMgaW50IHNwdWZzX2FyY2hfd3JpdGVfbm90ZShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgaW50IGksXG4tXHRcdFx0XHQgIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIGludCBkZmQpXG4te1xuLVx0c2l6ZV90IHN6ID0gc3B1ZnNfY29yZWR1bXBfcmVhZFtpXS5zaXplO1xuLVx0Y2hhciBmdWxsbmFtZVs4MF07XG4tXHRzdHJ1Y3QgZWxmX25vdGUgZW47XG4tXHRpbnQgcmV0O1xuLVxuLVx0c3ByaW50ZihmdWxsbmFtZSwgXCJTUFUvJWQvJXNcIiwgZGZkLCBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLm5hbWUpO1xuLVx0ZW4ubl9uYW1lc3ogPSBzdHJsZW4oZnVsbG5hbWUpICsgMTtcbi1cdGVuLm5fZGVzY3N6ID0gc3o7XG4tXHRlbi5uX3R5cGUgPSBOVF9TUFU7XG4tXG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBcdTAwMjZlbiwgc2l6ZW9mKGVuKSkpXG4tXHRcdHJldHVybiAtRUlPO1xuLVx0aWYgKCFkdW1wX2VtaXQoY3BybSwgZnVsbG5hbWUsIGVuLm5fbmFtZXN6KSlcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHRpZiAoIWR1bXBfYWxpZ24oY3BybSwgNCkpXG4tXHRcdHJldHVybiAtRUlPO1xuLVxuLVx0aWYgKHNwdWZzX2NvcmVkdW1wX3JlYWRbaV0uZHVtcCkge1xuLVx0XHRyZXQgPSBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmR1bXAoY3R4LCBjcHJtKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVx0fSBlbHNlIHtcbi1cdFx0Y2hhciBidWZbMzJdO1xuLVxuLVx0XHRyZXQgPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIjB4JS4xNmxseFwiLFxuLVx0XHRcdCAgICAgICBzcHVmc19jb3JlZHVtcF9yZWFkW2ldLmdldChjdHgpKTtcbi1cdFx0aWYgKHJldCBcdTAwM2U9IHNpemVvZihidWYpKVxuLVx0XHRcdHJldHVybiBzaXplb2YoYnVmKTtcbi1cbi1cdFx0LyogY291bnQgdHJhaWxpbmcgdGhlIE5VTEw6ICovXG4tXHRcdGlmICghZHVtcF9lbWl0KGNwcm0sIGJ1ZiwgcmV0ICsgMSkpXG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4tXHRkdW1wX3NraXBfdG8oY3BybSwgcm91bmR1cChjcHJtLVx1MDAzZXBvcyAtIHJldCArIHN6LCA0KSk7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4taW50IHNwdWZzX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0c3RydWN0IHNwdV9jb250ZXh0ICpjdHg7XG4tXHRpbnQgZmQsIGosIHJjO1xuLVxuLVx0ZmQgPSAwO1xuLVx0d2hpbGUgKChjdHggPSBjb3JlZHVtcF9uZXh0X2NvbnRleHQoXHUwMDI2ZmQpKSAhPSBOVUxMKSB7XG4tXHRcdHJjID0gc3B1X2FjcXVpcmVfc2F2ZWQoY3R4KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHJldHVybiByYztcbi1cbi1cdFx0Zm9yIChqID0gMDsgc3B1ZnNfY29yZWR1bXBfcmVhZFtqXS5uYW1lICE9IE5VTEw7IGorKykge1xuLVx0XHRcdHJjID0gc3B1ZnNfYXJjaF93cml0ZV9ub3RlKGN0eCwgaiwgY3BybSwgZmQpO1xuLVx0XHRcdGlmIChyYykge1xuLVx0XHRcdFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcbi1cdFx0XHRcdHJldHVybiByYztcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbi1cdFx0c3B1X3JlbGVhc2Vfc2F2ZWQoY3R4KTtcbi1cbi1cdFx0Lyogc3RhcnQgc2VhcmNoaW5nIHRoZSBuZXh0IGZkIG5leHQgdGltZSAqL1xuLVx0XHRmZCsrO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tfVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jXG5pbmRleCBkZTc0OTQ3NDhmZWNkLi45OGM0N2JhZmFmNjc4IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuY1xuQEAgLTksNyArOSw2IEBAXG4gXG4gI3VuZGVmIERFQlVHXG4gXG4tI2luY2x1ZGUgXHUwMDNjbGludXgvY29yZWR1bXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb2N0bC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbkBAIC0xMzAsMTQgKzEyOSw2IEBAIHN0YXRpYyBzc2l6ZV90IHNwdWZzX2F0dHJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kdW1wX2VtaXQoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwgdm9pZCAqYnVmLFxuLVx0XHRzaXplX3Qgc2l6ZSlcbi17XG4tXHRpZiAoIWR1bXBfZW1pdChjcHJtLCBidWYsIHNpemUpKVxuLVx0XHRyZXR1cm4gLUVJTztcbi1cdHJldHVybiBzaXplO1xuLX1cbi1cbiAjZGVmaW5lIERFRklORV9TUFVGU19TSU1QTEVfQVRUUklCVVRFKF9fZm9wcywgX19nZXQsIF9fc2V0LCBfX2ZtdClcdFxcXG4gc3RhdGljIGludCBfX2ZvcHMgIyMgX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXHRcXFxuIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuQEAgLTE4MCwxMiArMTcxLDYgQEAgc3B1ZnNfbWVtX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Rcbi1zcHVmc19tZW1fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIGN0eC1cdTAwM2VvcHMtXHUwMDNlZ2V0X2xzKGN0eCksIExTX1NJWkUpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX21lbV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRcdFx0c2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKVxuQEAgLTQ2NiwxMyArNDUxLDYgQEAgc3B1ZnNfcmVnc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90XG4tc3B1ZnNfcmVnc19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgY3R4LVx1MDAzZWNzYS5sc2NzYS1cdTAwM2VncHJzLFxuLVx0XHRcdCAgICAgICBzaXplb2YoY3R4LVx1MDAzZWNzYS5sc2NzYS1cdTAwM2VncHJzKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90XG4gc3B1ZnNfcmVnc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpXG5AQCAtNTIzLDEzICs1MDEsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19yZWdzX2ZvcHMgPSB7XG4gXHQubGxzZWVrICA9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdFxuLXNwdWZzX2ZwY3JfZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EubHNjc2EtXHUwMDNlZnBjcikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdFxuIHNwdWZzX2ZwY3JfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsXG4gXHRcdHNpemVfdCBzaXplLCBsb2ZmX3QgKiBwb3MpXG5AQCAtOTUzLDE1ICs5MjQsNiBAQCBzcHVmc19zaWduYWwxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3Qgc3B1ZnNfc2lnbmFsMV9kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdGlmICghY3R4LVx1MDAzZWNzYS5zcHVfY2hubGNudF9SV1szXSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2Euc3B1X2NobmxkYXRhX1JXWzNdLFxuLVx0XHRcdCAgICAgICBzaXplb2YoY3R4LVx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbM10pKTtcbi19XG4tXG4gc3RhdGljIHNzaXplX3QgX19zcHVmc19zaWduYWwxX3JlYWQoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIGNoYXIgX191c2VyICpidWYsXG4gXHRcdFx0c2l6ZV90IGxlbilcbiB7XG5AQCAtMTA4NiwxNSArMTA0OCw2IEBAIHNwdWZzX3NpZ25hbDJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19zaWduYWwyX2R1bXAoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4tXHRcdHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pXG4te1xuLVx0aWYgKCFjdHgtXHUwMDNlY3NhLnNwdV9jaG5sY250X1JXWzRdKVxuLVx0XHRyZXR1cm4gMDtcbi1cdHJldHVybiBzcHVmc19kdW1wX2VtaXQoY3BybSwgXHUwMDI2Y3R4LVx1MDAzZWNzYS5zcHVfY2hubGRhdGFfUldbNF0sXG4tXHRcdFx0ICAgICAgIHNpemVvZihjdHgtXHUwMDNlY3NhLnNwdV9jaG5sZGF0YV9SV1s0XSkpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBfX3NwdWZzX3NpZ25hbDJfcmVhZChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRzaXplX3QgbGVuKVxuIHtcbkBAIC0xOTI0LDE1ICsxODc3LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY2Fwc19mb3BzID0ge1xuIFx0LnJlbGVhc2VcdD0gc2luZ2xlX3JlbGVhc2UsXG4gfTtcbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19tYm94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRpZiAoIShjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweDAwMDBmZikpXG4tXHRcdHJldHVybiAwO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZjdHgtXHUwMDNlY3NhLnByb2IucHVfbWJfUixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EucHJvYi5wdV9tYl9SKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX21ib3hfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdFx0ICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwb3MpXG4ge1xuQEAgLTE5NjIsMTUgKzE5MDYsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcHVmc19tYm94X2luZm9fZm9wcyA9IHtcbiBcdC5sbHNlZWsgID0gZ2VuZXJpY19maWxlX2xsc2VlayxcbiB9O1xuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX2lib3hfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdGlmICghKGN0eC1cdTAwM2Vjc2EucHJvYi5tYl9zdGF0X1IgXHUwMDI2IDB4ZmYwMDAwKSlcbi1cdFx0cmV0dXJuIDA7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2EucHJpdjIucHVpbnRfbWJfUixcbi1cdFx0XHQgICAgICAgc2l6ZW9mKGN0eC1cdTAwM2Vjc2EucHJpdjIucHVpbnRfbWJfUikpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19pYm94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMDA1LDEzICsxOTQwLDYgQEAgc3RhdGljIHNpemVfdCBzcHVmc193Ym94X2luZm9fY250KHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KVxuIFx0cmV0dXJuICg0IC0gKChjdHgtXHUwMDNlY3NhLnByb2IubWJfc3RhdF9SIFx1MDAyNiAweDAwZmYwMCkgXHUwMDNlXHUwMDNlIDgpKSAqIHNpemVvZih1MzIpO1xuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmN0eC1cdTAwM2Vjc2Euc3B1X21haWxib3hfZGF0YSxcbi1cdFx0XHRzcHVmc193Ym94X2luZm9fY250KGN0eCkpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc193Ym94X2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMDU5LDE1ICsxOTg3LDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X2RtYV9pbmZvKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19kdW1wKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LFxuLVx0XHRzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuLXtcbi1cdHN0cnVjdCBzcHVfZG1hX2luZm8gaW5mbztcbi1cbi1cdHNwdWZzX2dldF9kbWFfaW5mbyhjdHgsIFx1MDAyNmluZm8pO1xuLVx0cmV0dXJuIHNwdWZzX2R1bXBfZW1pdChjcHJtLCBcdTAwMjZpbmZvLCBzaXplb2YoaW5mbykpO1xuLX1cbi1cbiBzdGF0aWMgc3NpemVfdCBzcHVmc19kbWFfaW5mb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLFxuIFx0XHRcdCAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yMTEyLDE1ICsyMDMxLDYgQEAgc3RhdGljIHZvaWQgc3B1ZnNfZ2V0X3Byb3h5ZG1hX2luZm8oc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IHNwdWZzX3Byb3h5ZG1hX2luZm9fZHVtcChzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCxcbi1cdFx0c3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSlcbi17XG4tXHRzdHJ1Y3Qgc3B1X3Byb3h5ZG1hX2luZm8gaW5mbztcbi1cbi1cdHNwdWZzX2dldF9wcm94eWRtYV9pbmZvKGN0eCwgXHUwMDI2aW5mbyk7XG4tXHRyZXR1cm4gc3B1ZnNfZHVtcF9lbWl0KGNwcm0sIFx1MDAyNmluZm8sIHNpemVvZihpbmZvKSk7XG4tfVxuLVxuIHN0YXRpYyBzc2l6ZV90IHNwdWZzX3Byb3h5ZG1hX2luZm9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcbiBcdFx0XHRcdCAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcG9zKVxuIHtcbkBAIC0yNTgwLDI3ICsyNDkwLDMgQEAgY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW10gPSB7XG4gXHR7IFwiLmN0eFwiLCBcdTAwMjZzcHVmc19jdHhfZm9wcywgMDQ0NCwgfSxcbiBcdHt9LFxuIH07XG4tXG4tY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW10gPSB7XG4tXHR7IFwicmVnc1wiLCBzcHVmc19yZWdzX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOFsxMjhdKX0sXG4tXHR7IFwiZnBjclwiLCBzcHVmc19mcGNyX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSxcbi1cdHsgXCJsc2xyXCIsIE5VTEwsIHNwdWZzX2xzbHJfZ2V0LCAxOSB9LFxuLVx0eyBcImRlY3JcIiwgTlVMTCwgc3B1ZnNfZGVjcl9nZXQsIDE5IH0sXG4tXHR7IFwiZGVjcl9zdGF0dXNcIiwgTlVMTCwgc3B1ZnNfZGVjcl9zdGF0dXNfZ2V0LCAxOSB9LFxuLVx0eyBcIm1lbVwiLCBzcHVmc19tZW1fZHVtcCwgTlVMTCwgTFNfU0laRSwgfSxcbi1cdHsgXCJzaWduYWwxXCIsIHNwdWZzX3NpZ25hbDFfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCJzaWduYWwxX3R5cGVcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMV90eXBlX2dldCwgMTkgfSxcbi1cdHsgXCJzaWduYWwyXCIsIHNwdWZzX3NpZ25hbDJfZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCJzaWduYWwyX3R5cGVcIiwgTlVMTCwgc3B1ZnNfc2lnbmFsMl90eXBlX2dldCwgMTkgfSxcbi1cdHsgXCJldmVudF9tYXNrXCIsIE5VTEwsIHNwdWZzX2V2ZW50X21hc2tfZ2V0LCAxOSB9LFxuLVx0eyBcImV2ZW50X3N0YXR1c1wiLCBOVUxMLCBzcHVmc19ldmVudF9zdGF0dXNfZ2V0LCAxOSB9LFxuLVx0eyBcIm1ib3hfaW5mb1wiLCBzcHVmc19tYm94X2luZm9fZHVtcCwgTlVMTCwgc2l6ZW9mKHUzMikgfSxcbi1cdHsgXCJpYm94X2luZm9cIiwgc3B1ZnNfaWJveF9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZih1MzIpIH0sXG4tXHR7IFwid2JveF9pbmZvXCIsIHNwdWZzX3dib3hfaW5mb19kdW1wLCBOVUxMLCA0ICogc2l6ZW9mKHUzMil9LFxuLVx0eyBcImRtYV9pbmZvXCIsIHNwdWZzX2RtYV9pbmZvX2R1bXAsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X2RtYV9pbmZvKX0sXG4tXHR7IFwicHJveHlkbWFfaW5mb1wiLCBzcHVmc19wcm94eWRtYV9pbmZvX2R1bXAsXG4tXHRcdFx0ICAgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcHJveHlkbWFfaW5mbyl9LFxuLVx0eyBcIm9iamVjdC1pZFwiLCBOVUxMLCBzcHVmc19vYmplY3RfaWRfZ2V0LCAxOSB9LFxuLVx0eyBcIm5wY1wiLCBOVUxMLCBzcHVmc19ucGNfZ2V0LCAxOSB9LFxuLVx0eyBOVUxMIH0sXG4tfTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3B1ZnMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5pbmRleCBkMzM3ODdjNTdjMzlhLi42MTJiNTA3NWQwZWNiIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oXG5AQCAtMjMyLDEzICsyMzIsOSBAQCBleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107XG4gXG4gLyogc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24gKi9cbiBleHRlcm4gc3RydWN0IHNwdWZzX2NhbGxzIHNwdWZzX2NhbGxzO1xuLXN0cnVjdCBjb3JlZHVtcF9wYXJhbXM7XG4gbG9uZyBzcHVmc19ydW5fc3B1KHN0cnVjdCBzcHVfY29udGV4dCAqY3R4LCB1MzIgKm5wYywgdTMyICpzdGF0dXMpO1xuIGxvbmcgc3B1ZnNfY3JlYXRlKGNvbnN0IHN0cnVjdCBwYXRoICpuZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4gXHRcdFx0dW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCk7XG4tLyogRUxGIGNvcmVkdW1wIGNhbGxiYWNrcyBmb3Igd3JpdGluZyBTUFUgRUxGIG5vdGVzICovXG4tZXh0ZXJuIGludCBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKHZvaWQpO1xuLWV4dGVybiBpbnQgc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUoc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3B1ZnNfY29udGV4dF9mb3BzO1xuIFxuQEAgLTMzNSwxNCArMzMxLDYgQEAgdm9pZCBzcHVmc19zdG9wX2NhbGxiYWNrKHN0cnVjdCBzcHUgKnNwdSwgaW50IGlycSk7XG4gdm9pZCBzcHVmc19tZmNfY2FsbGJhY2soc3RydWN0IHNwdSAqc3B1KTtcbiB2b2lkIHNwdWZzX2RtYV9jYWxsYmFjayhzdHJ1Y3Qgc3B1ICpzcHUsIGludCB0eXBlKTtcbiBcbi1zdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHtcbi1cdGNoYXIgKm5hbWU7XG4tXHRzc2l6ZV90ICgqZHVtcCkoc3RydWN0IHNwdV9jb250ZXh0ICpjdHgsIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0pO1xuLVx0dTY0ICgqZ2V0KShzdHJ1Y3Qgc3B1X2NvbnRleHQgKmN0eCk7XG4tXHRzaXplX3Qgc2l6ZTtcbi19O1xuLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXTtcbi1cbiBleHRlcm4gaW50IHNwdV9pbml0X2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpO1xuIGV4dGVybiB2b2lkIHNwdV9maW5pX2NzYShzdHJ1Y3Qgc3B1X3N0YXRlICpjc2EpO1xuIGV4dGVybiBpbnQgc3B1X3NhdmUoc3RydWN0IHNwdV9zdGF0ZSAqcHJldiwgc3RydWN0IHNwdSAqc3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvc3lzY2FsbHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXG5pbmRleCBlYTRiYTFiNmNlNmE5Li5iNmRlMzcxNTBlNzM0IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3N5c2NhbGxzLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zeXNjYWxscy5jXG5AQCAtODIsOCArODIsNCBAQCBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgc3B1ZnNfY2FsbHMgPSB7XG4gXHQuc3B1X3J1biA9IGRvX3NwdV9ydW4sXG4gXHQubm90aWZ5X3NwdXNfYWN0aXZlID0gZG9fbm90aWZ5X3NwdXNfYWN0aXZlLFxuIFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4tI2lmZGVmIENPTkZJR19DT1JFRFVNUFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUgPSBzcHVmc19jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplLFxuLVx0LmNvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlID0gc3B1ZnNfY29yZWR1bXBfZXh0cmFfbm90ZXNfd3JpdGUsXG4tI2VuZGlmXG4gfTtcbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmNcbmluZGV4IDA2ZDBkZjEwNTM4MjMuLmRiMzJiYjQwYTg2NzAgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfZWxmLmNcbisrKyBiL2ZzL2JpbmZtdF9lbGYuY1xuQEAgLTIwMjksNyArMjAyOSw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuIFx0e1xuIFx0XHRzaXplX3Qgc3ogPSBpbmZvLnNpemU7XG4gXG4tXHRcdC8qIEZvciBjZWxsIHNwdWZzIGFuZCB4ODYgeHN0YXRlICovXG4rXHRcdC8qIEZvciB4ODYgeHN0YXRlICovXG4gXHRcdHN6ICs9IGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplKCk7XG4gXG4gXHRcdHBoZHI0bm90ZSA9IGttYWxsb2Nfb2JqKCpwaGRyNG5vdGUpO1xuQEAgLTIwOTMsNyArMjA5Myw3IEBAIHN0YXRpYyBpbnQgZWxmX2NvcmVfZHVtcChzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtKVxuIFx0aWYgKCF3cml0ZV9ub3RlX2luZm8oXHUwMDI2aW5mbywgY3BybSkpXG4gXHRcdGdvdG8gZW5kX2NvcmVkdW1wO1xuIFxuLVx0LyogRm9yIGNlbGwgc3B1ZnMgYW5kIHg4NiB4c3RhdGUgKi9cbitcdC8qIEZvciB4ODYgeHN0YXRlICovXG4gXHRpZiAoZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3dyaXRlKGNwcm0pKVxuIFx0XHRnb3RvIGVuZF9jb3JlZHVtcDtcbiBcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggYWMzY2Q3NDgwOGM2NC4uYTQ5ZjJmZDZiZTI4MCAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbisrKyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC0xMTE4LDExICsxMTE4LDYgQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovXG4tXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXG4tXHRpZiAodW5zaGFyZV9maWxlcygpKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRpZiAoKGNuLVx1MDAzZW1hc2sgXHUwMDI2IENPUkVEVU1QX0tFUk5FTCkgXHUwMDI2XHUwMDI2ICFjb3JlZHVtcF93cml0ZShjbiwgY3BybSwgYmluZm10KSlcbiBcdFx0cmV0dXJuO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjM6NDQuMDUzNDE4NzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzMTE5NzkzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogU1BVIENvcmVkdW1wIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGp1c3QgcmV2aWV3ZWQgdGhpcyBwYXRjaCBzZXJpZXMgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGUgY2hhbmdlcyBhcmUgYWxsIGFib3V0ICpyZW1vdmFsKiBvZiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIEl0J3MgYSBjbGVhbi11cCwgbm90aGluZyBtb3JlLlxuXG5MZXQncyBicmVhayBkb3duIG15IHJlYXNvbmluZzogdGhlIHBhdGNoIGlzIGRlbGV0aW5nIHRoZSBgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvcmVkdW1wLmNgIGZpbGUgYW5kIHRoZW4gcmVtb3ZpbmcgYXNzb2NpYXRlZCBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMgZnJvbSBhIHdob2xlIGJ1bmNoIG9mIG90aGVyIGZpbGVzOiBgc3B1ZnMuaGAsIGBmaWxlLmNgLCBgc3lzY2FsbHMuY2AsIGBzcHVfc3lzY2FsbHMuY2AsIGBzcHUuaGAsIGFuZCBgZWxmLmhgLiBUaGVyZSdzIGFsc28gYSByZW1vdmFsIG9mIGEgY2FsbCB0byBgdW5zaGFyZV9maWxlcygpYCBpbiBgZnMvY29yZWR1bXAuY2Agd2hpY2ggd2FzIHNwZWNpZmljYWxseSBmb3IgdGhhdCBDZWxsIFNQVSBjb3JlZHVtcCBmdW5jdGlvbmFsaXR5LlxuXG5JbXBvcnRhbnRseSwgKm5vdGhpbmcgbmV3KiBpcyBiZWluZyBhZGRlZC4gVGhlcmUncyBubyBuZXcgY29kZSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvIGxlYWtzLiBBbmQgdGhlIGNvcmVkdW1wIG5vdGVzIHdyaXRpbmcsIG5vdyBnb25lLCBtZWFucyBsZXNzIGRhdGEgYmVpbmcgd3JpdHRlbiB0byBjb3JlZHVtcHMsIHdoaWNoIGZ1cnRoZXIgZWxpbWluYXRlcyBhbnkgcG90ZW50aWFsIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha2luZy5cblxuVG8gc29saWRpZnkgbXkgdGhpbmtpbmcsIEkndmUgY2hlY2tlZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSByZW1vdmFsczpcblxuKiAgIEl0IHJlbW92ZXMgYHNlbGVjdCBBUkNIX0hBVkVfRVhUUkFfRUxGX05PVEVTIGlmIFNQVV9CQVNFYCBpbiB0aGUgYEtjb25maWdgIGZpbGVzLlxuKiAgIEl0IHJlbW92ZXMgYE5UX1NQVWAgZnJvbSBgZWxmLmhgXG4qICAgSXQgcmVtb3ZlcyBgY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZWAgYW5kIGBjb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAgZnJvbSBgc3B1ZnNfY2FsbHNgIGluIGBzcHUuaGBcbiogICBJdCByZW1vdmVzIGBkZXBlbmRzIG9uIENPUkVEVU1QYCBmcm9tIGBTUFVfRlNgIGluIGBLY29uZmlnYFxuKiAgIEl0IHJlbW92ZXMgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc19zaXplYCBhbmQgYGVsZl9jb3JlZHVtcF9leHRyYV9ub3Rlc193cml0ZWAgZnJvbSBgc3B1X3N5c2NhbGxzLmNgXG4qICAgSXQgcmVtb3ZlcyBgY29yZWR1bXAub2AgZnJvbSBgTWFrZWZpbGVgXG4qICAgSXQgZGVsZXRlcyBgY29yZWR1bXAuY2BcbiogICBJdCByZW1vdmVzIGEgbG90IG9mIHRoZSBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb3JlZHVtcCBvcGVyYXRpb25zIGZyb20gYGZpbGUuY2AuXG4qICAgSXQgcmVtb3ZlcyBjb3JlZHVtcCByZWxhdGVkIGRlY2xhcmF0aW9ucyBmcm9tIGBzcHVmcy5oYC5cbiogICBJdCByZW1vdmVzIGNvcmVkdW1wIGNhbGxiYWNrcyBmcm9tIGBzeXNjYWxscy5jYC5cbiogICBJdCB1cGRhdGVzIGNvbW1lbnRzIGluIGBiaW5mbXRfZWxmLmNgXG4qICAgSXQgcmVtb3ZlcyBgdW5zaGFyZV9maWxlcygpYCBmcm9tIGBjb3JlZHVtcC5jYC5cblxuQWdhaW4sIHRoZSBjb3JlIHBvaW50IGlzIHRoYXQgdGhpcyBpcyBhICpwdXJlbHkqIGEgcmVtb3ZhbCBwYXRjaC4gVGhlcmUgYXJlIG5vIG5ldyBmZWF0dXJlcywgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgYW5kIG5vIG5ldyBkYXRhIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLiBBbGwgdGhpcyBwYXRjaCBkb2VzIGlzIGNsZWFuIHVwIG9sZCwgdW51c2VkIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkgZm9yIFNQVS5cblxuU28sIHN1bW1pbmcgaXQgdXA6IGBOZWVkc0tNU0FOID0gZmFsc2VgLiBJIGRvbid0IHNlZSBhbnkgcmVhc29uIHRvIGRlZGljYXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIHRvIHRoaXM7IHRoZXJlIGlzIG5vIG5ldyBjb2RlIHRvIGFzc2Vzcy4gSXQncyBhIHNpbXBsZSwgc2FmZSByZW1vdmFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDAzLCJPdXRwdXRUb2tlbnMiOjkyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzU4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTY6MjQ6MDAuMzY1NDAwOTk2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcHVyZWx5IHJlbW92ZXMgdGhlIFNQVSBjb3JlZHVtcCBzdXBwb3J0IGZyb20gdGhlIFBvd2VyUEMgQ2VsbCBhcmNoaXRlY3R1cmUuIE5vIG5ldyBjb2RlIGlzIGFkZGVkLCBubyBuZXcgc3RydWN0dXJlcyBhcmUgc2VudCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[1] Phase: Succeeded StartedAt: 2026-08-26 16:24:12 +0000 UTC FinishedAt: 2026-08-26 16:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 16:24:12 +0000 UTC FinishedAt: 2026-08-26 16:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2] Phase: Succeeded StartedAt: 2026-08-26 16:24:12 +0000 UTC FinishedAt: 2026-08-26 20:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 16:24:12 +0000 UTC FinishedAt: 2026-08-26 20:03:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 16:24:12 +0000 UTC FinishedAt: 2026-08-26 16:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 16:24:12 +0000 UTC FinishedAt: 2026-08-26 16:24:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-1788361764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 16:24:22 +0000 UTC FinishedAt: 2026-08-26 16:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 16:24:22 +0000 UTC FinishedAt: 2026-08-26 16:40:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e36b3def-1df7-4408-9177-79c60c614863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-1788361764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "eabadaa0-d08b-4ca4-a8cc-e42101f7dd59", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-3809988194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 16:24:22 +0000 UTC FinishedAt: 2026-08-26 16:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e36b3def-1df7-4408-9177-79c60c614863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-1788361764/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "eabadaa0-d08b-4ca4-a8cc-e42101f7dd59", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-3809988194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 16:40:21 +0000 UTC FinishedAt: 2026-08-26 16:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 16:40:21 +0000 UTC FinishedAt: 2026-08-26 16:40:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 16:40:21 +0000 UTC FinishedAt: 2026-08-26 16:40:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 16:40:21 +0000 UTC FinishedAt: 2026-08-26 16:40:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-515428131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 16:40:31 +0000 UTC FinishedAt: 2026-08-26 16:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 16:40:31 +0000 UTC FinishedAt: 2026-08-26 16:42:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eabadaa0-d08b-4ca4-a8cc-e42101f7dd59,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-3809988194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 16:42:41 +0000 UTC FinishedAt: 2026-08-26 16:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 16:42:41 +0000 UTC FinishedAt: 2026-08-26 16:42:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 16:42:41 +0000 UTC FinishedAt: 2026-08-26 16:58:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 16:42:41 +0000 UTC FinishedAt: 2026-08-26 16:58:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e36b3def-1df7-4408-9177-79c60c614863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-515428131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7df2337a-8968-457e-b599-72fb8c1cc407", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-1186190295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 16:42:41 +0000 UTC FinishedAt: 2026-08-26 16:58:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e36b3def-1df7-4408-9177-79c60c614863,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-515428131/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "7df2337a-8968-457e-b599-72fb8c1cc407", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-1186190295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 16:58:33 +0000 UTC FinishedAt: 2026-08-26 16:58:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 16:58:33 +0000 UTC FinishedAt: 2026-08-26 16:58:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 16:58:33 +0000 UTC FinishedAt: 2026-08-26 17:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 16:58:33 +0000 UTC FinishedAt: 2026-08-26 17:00:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7df2337a-8968-457e-b599-72fb8c1cc407,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-1186190295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 17:00:39 +0000 UTC FinishedAt: 2026-08-26 20:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 17:00:39 +0000 UTC FinishedAt: 2026-08-26 20:03:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*eabadaa0-d08b-4ca4-a8cc-e42101f7dd59,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7df2337a-8968-457e-b599-72fb8c1cc407,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-3809988194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-1186190295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 17:00:39 +0000 UTC FinishedAt: 2026-08-26 17:00:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 17:00:39 +0000 UTC FinishedAt: 2026-08-26 17:00:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-2857105980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 17:00:39 +0000 UTC FinishedAt: 2026-08-26 17:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 17:00:39 +0000 UTC FinishedAt: 2026-08-26 17:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 17:00:39 +0000 UTC FinishedAt: 2026-08-26 17:00:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 17:00:49 +0000 UTC FinishedAt: 2026-08-26 20:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5dkvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"66498c75b4f8017f62d720d9b59675bdf3abce91","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP"],"series_id":"01fc7aa0-e180-45df-90b5-3e349208cb8c","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 17:00:49 +0000 UTC FinishedAt: 2026-08-26 20:03:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*eabadaa0-d08b-4ca4-a8cc-e42101f7dd59,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7df2337a-8968-457e-b599-72fb8c1cc407,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-3809988194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-build-action-1186190295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5dkvd/series-workflow5dkvd-convert-artifact-2857105980/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}