Name: series-workflow29j4z Phase: Succeeded StartedAt: 2026-08-10 22:43:06 +0000 UTC FinishedAt: 2026-08-10 23:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[0] Phase: Succeeded StartedAt: 2026-08-10 22:43:06 +0000 UTC FinishedAt: 2026-08-10 22:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 22:43:06 +0000 UTC FinishedAt: 2026-08-10 22:47:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "aarch64_insn_gen_add_sub_extended_reg", "bpf_jit_supports_arena_args", "arch_prepare_bpf_trampoline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50cy4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBsb2dpYyB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbCYjMzk7cyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEYgYXJlbmEgYXJndW1lbnRzIGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gaGFuZGxlIGFyZW5hIGFyZ3VtZW50cywgd2hpY2ggYXJlIHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgYW5kIGV4ZWN1dGluZyBCUEYgcHJvZ3JhbXMgdGhhdCB1c2UgYXJlbmEgYXJndW1lbnRzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsL0JQRiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjI6NDU6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IDEwMDRlYjBiZWM2MTcuLmQ5Y2MyYWIxY2YwMTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5AQCAtMzAxLDkgJiM0MzszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiAgICAgICAgIH1cbiBcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4tYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4mIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXG4mIzQzO290aGVyd2lzZS4gVGhlIHByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEFcbiYjNDM7dmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuIFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5pbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xuIH07XG4gXG4mIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi9cbiYjNDM7ZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVEgsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVEIsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVFgsXG4mIzQzO307XG4mIzQzO1xuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sXG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcbkBAIC0zNzgsNiAmIzQzOzM5MCwxMCBAQCBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGQsXHQweDdGMjAwMDAwLCAweDBCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsXHQweDdGMjAwMDAwLCAweDJCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YixcdDB4N0YyMDAwMDAsIDB4NEIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3VicyxcdDB4N0YyMDAwMDAsIDB4NkIwMDAwMDApXG4mIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsXHQweDdGMjAwMDAwLCAweDBCMjAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcdDB4N0YyMDAwMDAsIDB4MkIyMDAwMDApXG4mIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1Yl9leHQsXHQweDdGMjAwMDAwLCAweDRCMjAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCxcdDB4N0YyMDAwMDAsIDB4NkIyMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcdDB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdixcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXG5AQCAtNjM3LDYgJiM0Mzs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0XHRcdCBpbnQgc2hpZnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4mIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbiYjNDM7XHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbmluZGV4IDM3Y2U3NWY3ZjFmMDguLmU3MGFjMDIzODUxNTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xuQEAgLTk4Niw2ICYjNDM7OTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVW5saWtlIHRoZSBzaGlmdGVkLXJlZ2lzdGVyIGZvcm0sIHJlZ2lzdGVyIDMxIGlzIG5vdCBYWlIgZXZlcnl3aGVyZSBoZXJlOlxuJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seVxuJiM0MzsgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy5cbiYjNDM7ICovXG4mIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbiYjNDM7XHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGluc247XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREOlxuJiM0MztcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUI6XG4mIzQzO1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzpcbiYjNDM7XHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUzpcbiYjNDM7XHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXG5cJiMzNDssIF9fZnVuY19fLCB0eXBlKTtcbiYjNDM7XHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh2YXJpYW50KSB7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XG4mIzQzO1x0XHRpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzOiB1bmtub3duIHZhcmlhbnQgZW5jb2RpbmcgJWRcXG5cJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTtcbiYjNDM7XHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNoaWZ0IFx1MDAzYyAwIHx8IHNoaWZ0IFx1MDAzZSA0KSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcXG5cJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7XG4mIzQzO1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JELCBpbnNuLCBkc3QpO1xuJiM0MztcbiYjNDM7XHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcbiYjNDM7XG4mIzQzO1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk0sIGluc24sIHJlZyk7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGlvbiBpbiBiaXRzIFsxNToxM10gYW5kIGltbTMgaW4gWzEyOjEwXSB0b2dldGhlciBmaWxsIElNTV82ICovXG4mIzQzO1x0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgKGV4dGVuZCBcdTAwM2NcdTAwM2MgMykgfCBzaGlmdCk7XG4mIzQzO31cbiYjNDM7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcbkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cbiAjZGVmaW5lIEE2NF9DTVAoc2YsIFJuLCBSbSkgQTY0X1NVQlMoc2YsIEE2NF9aUiwgUm4sIFJtKVxuIFxuJiM0MzsvKiBBZGQvc3VidHJhY3QgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xuJiM0MzsjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbiYjNDM7XHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG4mIzQzO1x0XHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxuJiM0MztcdFx0QUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKVxuJiM0MzsvKiBSZCA9IFJuICYjNDM7IChFWFQoUm0pIFx1MDAzY1x1MDAzYyBzaGlmdCkgKi9cbiYjNDM7I2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcbiYjNDM7XHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcbiYjNDM7LyogUmQgPSBSbiAmIzQzOyAodTMyKVJtICovXG4mIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApXG4mIzQzO1xuIC8qIERhdGEtcHJvY2Vzc2luZyAoMSBzb3VyY2UpICovXG4gI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFxcXG4gXHRBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDE0ZDI5N2ViYjk2Ny4uMWNkMzI3ZDIxM2UzNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTEyNDksNiAmIzQzOzEyNDksNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXG4mIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcbiYjNDM7ICoga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkXG4mIzQzOyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXHUwMDNlcHJvZywgaW5zbik7XG4mIzQzO1x0aWYgKCFmbSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSAmIzQzOyBpXTtcbiYjNDM7XHRcdHU4IGZsYWdzID0gZm0tXHUwMDNlYXJnX2ZsYWdzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuJiM0MztcdFx0XHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuJiM0MztcdFx0XHRlbWl0KEE2NF9NT1YoMCwgcmVnLCByZWcpLCBjdHgpO1xuJiM0MztcdFx0XHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbiYjNDM7XHRcdFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBKSVRzIGFuIGVCUEYgaW5zdHJ1Y3Rpb24uXG4gICogUmV0dXJuczpcbiAgKiAwICAtIHN1Y2Nlc3NmdWxseSBKSVRlZCBhbiA4LWJ5dGUgZUJQRiBpbnN0cnVjdGlvbi5cbkBAIC0xNjcxLDYgJiM0MzsxNzA4LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGN0eCwgaW5zbik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdFx0ZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTtcbiBcdFx0LypcbiBcdFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXG5AQCAtMjMzNSw2ICYjNDM7MjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpXG5AQCAtMjUwOCwzNCAmIzQzOzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheSBpbnRvXG4mIzQzOyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcbiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXG4mIzQzOyAqIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdCBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZVxuJiM0MzsgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcbiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG51bGxhYmxlKSB7XG4mIzQzO1x0XHRpZiAoZHN0ICE9IHNyYylcbiYjNDM7XHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcbiYjNDM7XHRcdC8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4mIzQzO1x0XHRlbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTtcbiYjNDM7XHRcdHNyYyA9IGRzdDtcbiYjNDM7XHR9XG4mIzQzO1x0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxuLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbi1cdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4pXG4mIzQzO1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuJiM0MztcdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgcmVnO1xuLVx0aW50IGRvZmY7XG4tXHRpbnQgc29mZjtcbi1cdGludCBzbG90cztcbiBcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcbiYjNDM7XHR1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdO1xuJiM0MztcdGludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzO1xuJiM0MztcbiYjNDM7XHQvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovXG4mIzQzO1x0aWYgKGFyZW5hX2Jhc2UpXG4mIzQzO1x0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbiBcbiBcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxuIFx0ICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxuIFx0ICovXG4tXHRmb3IgKHJlZyA9IDA7IHJlZyBcdTAwM2MgYS1cdTAwM2VyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7XG4tXHRcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cbi1cdFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcbi1cdFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxuLVx0XHQgICAgIGN0eCk7XG4tXHRcdGJhcmdzX29mZiAmIzQzOz0gODtcbiYjNDM7XHRmb3IgKGkgPSAwLCByZWcgPSAwOyBpIFx1MDAzYyBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSBcdTAwMjZcdTAwMjYgKG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRyk7XG4mIzQzO1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuJiM0MztcbiYjNDM7XHRcdHNsb3RzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4O1xuJiM0MztcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0aWYgKGZvcl9jYWxsX29yaWdpbikge1xuJiM0MztcdFx0XHRcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcbiYjNDM7XHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCByZWcsIG51bGxhYmxlLCBiYXNlX2xvKTtcbiYjNDM7XHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJlZyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGJhcmdzX29mZiAmIzQzOz0gODtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdHNvZmYgPSAzMjsgLyogb24gc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGZyb20gRlAgJiM0MzsgMzIgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXG4mIzQzO1x0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXG4mIzQzO1x0ICogcHJvbG9ndWUgc2F2ZXMgYm90aCB0aGUgcGFyZW50IChGUC94OSkgYW5kIHRoZSB0cmFjZWQgZnVuY3Rpb25cbiYjNDM7XHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzXG4mIzQzO1x0ICogY2FsbGJhY2sgaXMgY2FsbGVkIGluZGlyZWN0bHkgYW5kIG9ubHkgdGhlIEZQL0xSIGZyYW1lIGlzIHNhdmVkLCBzb1xuJiM0MztcdCAqIHRoZXkgc3RhcnQgYXQgRlAgJiM0MzsgMTYuXG4mIzQzO1x0ICovXG4mIzQzO1x0c29mZiA9IGlzX3N0cnVjdF9vcHMgPyAxNiA6IDMyO1xuIFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xuIFxuIFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cbiBcdGZvciAoaSA9IGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuJiM0MztcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4gXHRcdHNsb3RzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4O1xuIFx0XHQvKiB2ZXJpZmllciBlbnN1cmVzIGFyZ19zaXplIFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cbiBcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbkBAIC0yNTQ1LDYgJiM0MzsyNjM0LDggQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKHNsb3RzID09IDAgXHUwMDI2XHUwMDI2ICFmb3JfY2FsbF9vcmlnaW4pXG4gXHRcdFx0XHRjbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLVx1MDAzZWFyZ19zaXplW2ldICUgOCk7XG4mIzQzO1x0XHRcdGlmIChhcmVuYV9hcmcpXG4mIzQzO1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4gXHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcbiBcdFx0XHRzb2ZmICYjNDM7PSA4O1xuIFx0XHRcdGRvZmYgJiM0Mzs9IDg7XG5AQCAtMjYwNCw4ICYjNDM7MjY5NSwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmO1xuIFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcbiYjNDM7XHR1NjQgYXJlbmFfYmFzZTtcbiBcdHU2NCBmdW5jX21ldGE7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcbiYjNDM7XHQgKiBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHIGJlY2F1c2VcbiYjNDM7XHQgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpXG4mIzQzO1x0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxuJiM0MztcdCAqIG5ldmVyIGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIGNvbnZlcnRlZCBhcmd1bWVudHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbiYjNDM7XG4mIzQzO1x0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuJiM0MztcbiBcdC8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXVxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgRlAgICAgICAgICAgICAgICAgXVxuQEAgLTI3MjEsNyAmIzQzOzI4MjUsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdHN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7XG4gXG4gXHQvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqL1xuLVx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTtcbiYjNDM7XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xuIFxuIFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXG4gXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcbkBAIC0yNzY5LDggJiM0MzsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHR9XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuLVx0XHQvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi9cbi1cdFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpO1xuJiM0MztcdFx0LyogdGhlIG9yaWdpbmFsIGZ1bmMgdGFrZXMga2VybmVsIGFkZHJlc3NlcywgbmV2ZXIgY29udmVydGVkIG9uZXMgKi9cbiYjNDM7XHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcbiBcdFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXG4gXHRcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xuIFx0XHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC02LDcgJiM0Mzs2LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oXCYjMzQ7XG4gXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcbiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiAvKlxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXG5AQCAtMTExLDExICYjNDM7MTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZClcbiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbiB7XG4gXHQvKlxuLVx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuLVx0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXG4tXHQgKiBhcmd1bWVudHNcJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuJiM0MztcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgYW5kXG4mIzQzO1x0ICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0XG4mIzQzO1x0ICogYXJlbmEgYXJndW1lbnRzXCYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbiBcdCAqL1xuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9hcmdcJiMzNDspKVxuIFx0XHRhcmVuYV9hcmcoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2FyZ19mYWlsXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5pbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoO1xuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4ge1xuQEAgLTcwLDYgJiM0Mzs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuICAqL1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC0xMTEsNiAmIzQzOzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4ge1xuQEAgLTE0Miw2ICYjNDM7MTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIHtcbkBAIC0xNjksNiAmIzQzOzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTg5LDYgJiM0MzsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDthcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcJiMzNDspXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4ge1xuQEAgLTE5OCw2ICYjNDM7MjA0LDcgQEAgaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcJiMzNDspXG4gaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiB7XG5AQCAtMjEzLDYgJiM0MzsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2FyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcJiMzNDspXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4ge1xuQEAgLTIyMyw2ICYjNDM7MjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4gI2Vsc2VcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fZGVzY3JpcHRpb24oXCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCYjMzQ7KVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMzIsNiAmIzQzOzMyLDEwIEBAIF9faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcmRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0e3soYmx8bW92KVx0Lip9fVwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC00OCw2ICYjNDM7NTIsMTIgQEAgX19qaXRlZChcJiMzNDtcdHRlc3RsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRqZVx0TDBcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4gX19qaXRlZChcJiMzNDtMMDpcdGNhbGxxXHR7ey4qfX1cJiMzNDspXG4mIzQzO19fYXJjaF9hcm02NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdlx0dzAsIHcwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y2J6XHR3MCwgTDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O0wwOlx0e3suKn19XCYjMzQ7KVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbiB7XG5AQCAtNzIsNiAmIzQzOzgyLDE2IEBAIF9faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JXI4ZCwgJXI4ZFwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0amVcdEwwXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcjhcJiMzNDspXG4gX19qaXRlZChcJiMzNDtMMDpcdGNhbGxxXHR7ey4qfX1cJiMzNDspXG4mIzQzO19fYXJjaF9hcm02NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgxLCB4MjgsIHcxLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MiwgeDI4LCB3MiwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDMsIHgyOCwgdzMsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZcdHc0LCB3NFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNielx0dzQsIEwwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4NCwgeDI4LCB3NCwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtMMDpcdHt7Lip9fVwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTU5LDExICYjNDM7NTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90XCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdO1xuJiM0MztcbiYjNDM7XHRhcmVuYV90b3VjaCYjNDM7JiM0Mzs7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgMTYtYnl0ZSBzdHJ1Y3Qgb2NjdXBpZXMgY3R4WzBdIGFuZCBjdHhbMV0sIHNvIEBwdHIgaXMgYXJndW1lbnRcbiYjNDM7XHQgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHhbMF0gIT0gMTEgfHwgY3R4WzFdICE9IDIyKVxuJiM0MztcdFx0cmV0dXJuIDB4YmFkO1xuJiM0MztcdCpwdHIgJiM0Mzs9IDE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbiBcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbiYjNDM7XHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLFxuIH07XG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG5AQCAtMTA5LDYgJiM0MzsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KVxuIFx0aWYgKCp2YWwgIT0gNDQpXG4gXHRcdHJldHVybiA5O1xuIFxuJiM0MztcdC8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqL1xuJiM0MztcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDEwO1xuJiM0MztcdGlmICgqdmFsICE9IDQ1KVxuJiM0MztcdFx0cmV0dXJuIDExO1xuJiM0MztcbiBcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiAjZW5kaWZcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTQwMiwxMiAmIzQzOzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCxcbiYjNDM7XHRcdFx0XHRcdFx0ICB1NjQgKnB0cl9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4gXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4mIzQzO1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3QsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXG5AQCAtNDQxLDYgJiM0Mzs0NDgsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiBcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4gfVxuIFxuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtODUyLDYgJiM0Mzs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDMsNiAmIzQzOzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIH07XG4gXG4mIzQzOy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi9cbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIge1xuJiM0MztcdHU2NCBhO1xuJiM0MztcdHU2NCBiO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbkBAIC0xMTIsNiAmIzQzOzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHtcbiBcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4gXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuIFx0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4mIzQzO1x0LyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovXG4mIzQzO1x0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcbiB9O1xuIFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuJiM0MztpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDNjMDhjOWQ1MDU3OTBmM2E1YTcyYjZhMzVhMDg5NzIxYzE0ZmRlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDIyOjQ1OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKaW5kZXggMTAwNGViMGJlYzYxNy4uZDljYzJhYjFjZjAxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CkBAIC0zMDEsOSAmIzQzOzMwMSw5IEBAIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OgogICAgICAgICB9CiAKIENhbGxpbmcgc3VjaCBhIGtmdW5jIHJlcXVpcmVzIHRoZSBwcm9ncmFtIHRvIHVzZSBhbiBhcmVuYSBtYXAgYW5kIGEgSklUIHdpdGgKLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGUKLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzCi1ub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KJiM0MzthcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0IGFuZCBhcm02NCk7IHZlcmlmaWNhdGlvbiBmYWlscwomIzQzO290aGVyd2lzZS4gVGhlIHByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEKJiM0Mzt2YWx1ZSB0aGF0IGRvZXMgbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuCiAKIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWIKIGZ1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaAppbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaApAQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHsKIAlBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1MKIH07CiAKJiM0MzsvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7ZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgewomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVEIsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCwKJiM0Mzt9OwomIzQzOwogZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7CiAJQUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sCiAJQUFSQ0g2NF9JTlNOX01PVkVXSURFX0tFRVAsCkBAIC0zNzgsNiAmIzQzOzM5MCwxMCBAQCBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGQsCTB4N0YyMDAwMDAsIDB4MEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLAkweDdGMjAwMDAwLCAweDJCMDAwMDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLAkweDdGMjAwMDAwLCAweDRCMDAwMDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1Moc3VicywJMHg3RjIwMDAwMCwgMHg2QjAwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LAkweDdGMjAwMDAwLCAweDBCMjAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LAkweDdGMjAwMDAwLCAweDJCMjAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1Yl9leHQsCTB4N0YyMDAwMDAsIDB4NEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsCTB4N0YyMDAwMDAsIDB4NkIyMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtYWRkLAkweDdGRTA4MDAwLCAweDFCMDAwMDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YiwJMHg3RkUwODAwMCwgMHgxQjAwODAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsCTB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApCkBAIC02MzcsNiAmIzQzOzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCQkJIGludCBzaGlmdCwKIAkJCQkJIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKIAkJCQkJIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsCiYjNDM7CQkJCQkgIGludCBzaGlmdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7CiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmMKaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwpAQCAtOTg2LDYgJiM0Mzs5ODYsNjYgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiAJcmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6CiYjNDM7ICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHkKJiM0MzsgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy4KJiM0MzsgKi8KJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsCiYjNDM7CQkJCQkgIGludCBzaGlmdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CXUzMiBpbnNuOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUI6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOgomIzQzOwkJaW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3Vic19leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gYWRkL3N1YiBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB0eXBlKTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAodmFyaWFudCkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6CiYjNDM7CQlpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXByX2VycigmIzM0OyVzOiB1bmtub3duIHZhcmlhbnQgZW5jb2RpbmcgJWRcbiYjMzQ7LCBfX2Z1bmNfXywgdmFyaWFudCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2hpZnQgJmx0OyAwIHx8IHNoaWZ0ICZndDsgNCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcbiYjMzQ7LCBfX2Z1bmNfXywgc2hpZnQpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JOLCBpbnNuLCBzcmMpOwomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STSwgaW5zbiwgcmVnKTsKJiM0MzsKJiM0MzsJLyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi8KJiM0MzsJcmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwKJiM0MzsJCQkJCSAgICAgKGV4dGVuZCAmbHQ7Jmx0OyAzKSB8IHNoaWZ0KTsKJiM0Mzt9CiYjNDM7CiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmggYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaApAQCAtMjQzLDYgJiM0MzsyNDMsMTcgQEAKIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi8KICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pCiAKJiM0MzsvKiBBZGQvc3VidHJhY3QgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcCiYjNDM7CWFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXAomIzQzOwkJQUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXAomIzQzOwkJQUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKEVYVChSbSkgJmx0OyZsdDsgc2hpZnQpICovCiYjNDM7I2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXAomIzQzOwlBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERCkKJiM0MzsvKiBSZCA9IFJuICYjNDM7ICh1MzIpUm0gKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfVVhUVyhSZCwgUm4sIFJtKSBBNjRfQUREX0VYVCgxLCBSZCwgUm4sIFJtLCBVWFRXLCAwKQomIzQzOwogLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi8KICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcCiAJQTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkMTRkMjk3ZWJiOTY3Li4xY2QzMjdkMjEzZTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTI0OSw2ICYjNDM7MTI0OSw0MyBAQCBzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0CiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcywKJiM0MzsgKiB4TiA9IGtlcm5fdm1fc3RhcnQgJiM0MzsgKHUzMil4Tiwgd2l0aCB0aGUgYXJlbmEgYmFzZSByZWdpc3RlciBob2xkaW5nCiYjNDM7ICoga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkCiYjNDM7ICogb24gdGhlIHRydW5jYXRlZCB2YWx1ZSBhcyBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CWNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGN0eC0mZ3Q7cHJvZywgaW5zbik7CiYjNDM7CWlmICghZm0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgZm0tJmd0O25yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSAmIzQzOyBpXTsKJiM0MzsJCXU4IGZsYWdzID0gZm0tJmd0O2FyZ19mbGFnc1tpXTsKJiM0MzsKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWN0eC0mZ3Q7YXJlbmFfdm1fc3RhcnQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7CiYjNDM7CQkJLyogMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHMgKi8KJiM0MzsJCQllbWl0KEE2NF9NT1YoMCwgcmVnLCByZWcpLCBjdHgpOwomIzQzOwkJCS8qIHNraXAgdGhlIGFkZCBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqLwomIzQzOwkJCWVtaXQoQTY0X0NCWigwLCByZWcsIDIpLCBjdHgpOwomIzQzOwkJfQomIzQzOwkJZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi4KICAqIFJldHVybnM6CiAgKiAwICAtIHN1Y2Nlc3NmdWxseSBKSVRlZCBhbiA4LWJ5dGUgZUJQRiBpbnN0cnVjdGlvbi4KQEAgLTE2NzEsNiAmIzQzOzE3MDgsMTEgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJCQkgICAgJmFtcDtmdW5jX2FkZHIsICZhbXA7ZnVuY19hZGRyX2ZpeGVkKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKGluc24tJmd0O3NyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7CiYjNDM7CQkJcmV0ID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGN0eCwgaW5zbik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAJCWVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7CiAJCS8qCiAJCSAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZQpAQCAtMjMzNSw2ICYjNDM7MjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikKIHsKIAlpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKQpAQCAtMjUwOCwzNCAmIzQzOzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheSBpbnRvCiYjNDM7ICogdGhlIEJQRiBjdHgsIGRzdCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLCB3aXRoIEBiYXNlX2xvIGhvbGRpbmcgdGhlIGxvdwomIzQzOyAqIDMyIGJpdHMgb2Yga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbAomIzQzOyAqIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdCBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZQomIzQzOyAqIHVwcGVyIGhhbGYsIHNvIHRoZSBzdG9yZWQgdmFsdWUgc2F0aXNmaWVzIHRoZSBKSVQgaW52YXJpYW50IGZvciBhcmVuYQomIzQzOyAqIHBvaW50ZXIgcmVnaXN0ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfYXJlbmFfYXJnX2NvbnYoc3RydWN0IGppdF9jdHggKmN0eCwgdTggZHN0LCB1OCBzcmMsIGJvb2wgbnVsbGFibGUsIHU4IGJhc2VfbG8pCiYjNDM7ewomIzQzOwlpZiAobnVsbGFibGUpIHsKJiM0MzsJCWlmIChkc3QgIT0gc3JjKQomIzQzOwkJCWVtaXQoQTY0X01PVigxLCBkc3QsIHNyYyksIGN0eCk7CiYjNDM7CQkvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqLwomIzQzOwkJZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7CiYjNDM7CQlzcmMgPSBkc3Q7CiYjNDM7CX0KJiM0MzsJZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZiwKLQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSwKLQkJICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4pCiYjNDM7CQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAomIzQzOwkJICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpCiB7Ci0JaW50IGk7Ci0JaW50IHJlZzsKLQlpbnQgZG9mZjsKLQlpbnQgc29mZjsKLQlpbnQgc2xvdHM7CiAJdTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdOwomIzQzOwl1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdOwomIzQzOwlpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90czsKJiM0MzsKJiM0MzsJLyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqLwomIzQzOwlpZiAoYXJlbmFfYmFzZSkKJiM0MzsJCWVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpOwogCiAJLyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlCiAJICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvbgogCSAqLwotCWZvciAocmVnID0gMDsgcmVnICZsdDsgYS0mZ3Q7cmVnc19mb3JfYXJnczsgcmVnJiM0MzsmIzQzOykgewotCQllbWl0KGZvcl9jYWxsX29yaWdpbiA/Ci0JCSAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6Ci0JCSAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwKLQkJICAgICBjdHgpOwotCQliYXJnc19vZmYgJiM0Mzs9IDg7CiYjNDM7CWZvciAoaSA9IDAsIHJlZyA9IDA7IGkgJmx0OyBhLSZndDthcmdzX2luX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiYjNDM7CQlzbG90cyA9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDg7CiYjNDM7CQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKJiM0MzsJCQlpZiAoZm9yX2NhbGxfb3JpZ2luKSB7CiYjNDM7CQkJCWVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTsKJiM0MzsJCQl9IGVsc2UgaWYgKGFyZW5hX2FyZykgewomIzQzOwkJCQllbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCByZWcsIG51bGxhYmxlLCBiYXNlX2xvKTsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQkJcmVnJiM0MzsmIzQzOzsKJiM0MzsJCQliYXJnc19vZmYgJiM0Mzs9IDg7CiYjNDM7CQl9CiAJfQogCi0Jc29mZiA9IDMyOyAvKiBvbiBzdGFjayBhcmd1bWVudHMgc3RhcnQgZnJvbSBGUCAmIzQzOyAzMiAqLwomIzQzOwkvKgomIzQzOwkgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZQomIzQzOwkgKiBwcm9sb2d1ZS4gRW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCBmcm9tIGEgdHJhY2VkIGZ1bmN0aW9uLCB0aGUKJiM0MzsJICogcHJvbG9ndWUgc2F2ZXMgYm90aCB0aGUgcGFyZW50IChGUC94OSkgYW5kIHRoZSB0cmFjZWQgZnVuY3Rpb24KJiM0MzsJICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgJiM0MzsgMzIuIEEgc3RydWN0X29wcwomIzQzOwkgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvCiYjNDM7CSAqIHRoZXkgc3RhcnQgYXQgRlAgJiM0MzsgMTYuCiYjNDM7CSAqLwomIzQzOwlzb2ZmID0gaXNfc3RydWN0X29wcyA/IDE2IDogMzI7CiAJZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpOwogCiAJLyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi8KIAlmb3IgKGkgPSBhLSZndDthcmdzX2luX3JlZ3M7IGkgJmx0OyBtLSZndDtucl9hcmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYm9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlICZhbXA7JmFtcDsgKG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX0FSRU5BX0FSRyk7CiYjNDM7CQlib29sIG51bGxhYmxlID0gbS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHOwomIzQzOwogCQlzbG90cyA9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDg7CiAJCS8qIHZlcmlmaWVyIGVuc3VyZXMgYXJnX3NpemUgJmx0Oz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi8KIAkJd2hpbGUgKHNsb3RzLS0gJmd0OyAwKSB7CkBAIC0yNTQ1LDYgJiM0MzsyNjM0LDggQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsCiAJCQkgKi8KIAkJCWlmIChzbG90cyA9PSAwICZhbXA7JmFtcDsgIWZvcl9jYWxsX29yaWdpbikKIAkJCQljbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLSZndDthcmdfc2l6ZVtpXSAlIDgpOwomIzQzOwkJCWlmIChhcmVuYV9hcmcpCiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHRtcCwgbnVsbGFibGUsIGJhc2VfbG8pOwogCQkJZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTsKIAkJCXNvZmYgJiM0Mzs9IDg7CiAJCQlkb2ZmICYjNDM7PSA4OwpAQCAtMjYwNCw4ICYjNDM7MjY5NSwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKIAlib29sIGlzX3N0cnVjdF9vcHMgPSBpc19zdHJ1Y3Rfb3BzX3RyYW1wKGZlbnRyeSk7CiAJaW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQsIGNvb2tpZV9iYXJnc19vZmY7CiAJaW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTsKJiM0MzsJdTY0IGFyZW5hX2Jhc2U7CiAJdTY0IGZ1bmNfbWV0YTsKIAomIzQzOwkvKgomIzQzOwkgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHkKJiM0MzsJICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlCiYjNDM7CSAqIEBmdW5jX2FkZHIuIEFyZW5hIGNvbnZlcnNpb24gcmVsaWVzIG9uIHRoaXM6IGJwZl90cmFtcF9hcmVuYV9iYXNlKCkKJiM0MzsJICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZQomIzQzOwkgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLgomIzQzOwkgKi8KJiM0MzsJV0FSTl9PTl9PTkNFKChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICAoZmxhZ3MgJmFtcDsgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpOwomIzQzOwomIzQzOwlhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7CiYjNDM7CiAJLyogdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6CiAJICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXQogCSAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF0KQEAgLTI3MjEsNyAmIzQzOzI4MjUsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKIAlzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpOwogCiAJLyogc2F2ZSBhcmdzIGZvciBicGYgKi8KLQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UpOwomIzQzOwlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpOwogCiAJLyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovCiAJZW1pdChBNjRfU1RSNjRJKEE2NF9SKDE5KSwgQTY0X1NQLCByZWdzX29mZiksIGN0eCk7CkBAIC0yNzY5LDggJiM0MzsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJfQogCiAJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0NBTExfT1JJRykgewotCQkvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi8KLQkJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpOwomIzQzOwkJLyogdGhlIG9yaWdpbmFsIGZ1bmMgdGFrZXMga2VybmVsIGFkZHJlc3NlcywgbmV2ZXIgY29udmVydGVkIG9uZXMgKi8KJiM0MzsJCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTsKIAkJLyogY2FsbCBvcmlnaW5hbCBmdW5jICovCiAJCWVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpOwogCQllbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwppbmRleCA5NDBlYzJjZGEwZDUyLi43ZjlmNTRiYTNmYmU1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwpAQCAtNiw3ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmFfYXR0YWNoLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmgmIzM0OwogCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKQomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCiAvKgogICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmUKICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLgpAQCAtMTExLDExICYjNDM7MTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZCkKIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKQogewogCS8qCi0JICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LgotCSAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hCi0JICogYXJndW1lbnRzJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLgomIzQzOwkgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZAomIzQzOwkgKiBhcm02NCBvbmx5LiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydAomIzQzOwkgKiBhcmVuYSBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiAJICovCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKQomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9hcmcmIzM0OykpCiAJCWFyZW5hX2FyZygpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnX2ZhaWwmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCmluZGV4IGNkY2VhODg5ZGE1ODYuLmJmMGQzMDRlMGU1OWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQCB2b2xhdGlsZSB1NjQgc3Rhc2g7CiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiB7CkBAIC03MCw2ICYjNDM7NzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eCkKICAqLwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiB7CkBAIC0xMTEsNiAmIzQzOzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KQogewpAQCAtMTQyLDYgJiM0MzsxNDUsNyBAQCBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KQogewpAQCAtMTY5LDYgJiM0MzsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KQogewpAQCAtMTg5LDYgJiM0MzsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hJiMzNDspCiBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eCkKIHsKQEAgLTE5OCw2ICYjNDM7MjA0LDcgQEAgaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2lzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyJiMzNDspCiBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KQogewpAQCAtMjEzLDYgJiM0MzsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KQogCWRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVCkKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnQmIzM0OykKIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQogewpAQCAtMjIzLDYgJiM0MzsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKICNlbHNlCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2Rlc2NyaXB0aW9uKCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKQEAgLTMyLDYgJiM0MzszMiwxMCBAQCBfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQogX19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKIF9faml0ZWQoJiMzNDsuLi4mIzM0OykKIF9faml0ZWQoJiMzNDsJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgwLCB4MjgsIHcwLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owl7eyhibHxtb3YpCS4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eCkKIHsKQEAgLTQ4LDYgJiM0Mzs1MiwxMiBAQCBfX2ppdGVkKCYjMzQ7CXRlc3RsCSVlZGksICVlZGkmIzM0OykKIF9faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7TDA6CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdgl3MCwgdzAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNiegl3MCwgTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtMMDoJe3suKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eCkKIHsKQEAgLTcyLDYgJiM0Mzs4MiwxNiBAQCBfX2ppdGVkKCYjMzQ7CXRlc3RsCSVyOGQsICVyOGQmIzM0OykKIF9faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcjgmIzM0OykKIF9faml0ZWQoJiMzNDtMMDoJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgwLCB4MjgsIHcwLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDEsIHgyOCwgdzEsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MiwgeDI4LCB3MiwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgzLCB4MjgsIHczLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3YJdzQsIHc0JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljYnoJdzQsIEwwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDQsIHgyOCwgdzQsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7TDA6CXt7Lip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpCiB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwppbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTU5LDExICYjNDM7NTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90JiMzNDspCiYjNDM7aW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTsKJiM0MzsKJiM0MzsJYXJlbmFfdG91Y2gmIzQzOyYjNDM7OwomIzQzOwkvKgomIzQzOwkgKiBUaGUgMTYtYnl0ZSBzdHJ1Y3Qgb2NjdXBpZXMgY3R4WzBdIGFuZCBjdHhbMV0sIHNvIEBwdHIgaXMgYXJndW1lbnQKJiM0MzsJICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci4KJiM0MzsJICovCiYjNDM7CWlmIChjdHhbMF0gIT0gMTEgfHwgY3R4WzFdICE9IDIyKQomIzQzOwkJcmV0dXJuIDB4YmFkOwomIzQzOwkqcHRyICYjNDM7PSAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0gewogCS50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLAogCS50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLAogCS50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLAomIzQzOwkudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLAogfTsKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQpAQCAtMTA5LDYgJiM0MzsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KQogCWlmICgqdmFsICE9IDQ0KQogCQlyZXR1cm4gOTsKIAomIzQzOwkvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi8KJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIDEwOwomIzQzOwlpZiAoKnZhbCAhPSA0NSkKJiM0MzsJCXJldHVybiAxMTsKJiM0MzsKIAlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKICNlbmRpZgogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC00MDIsMTIgJiM0Mzs0MDIsMTkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdChzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLAomIzQzOwkJCQkJCSAgdTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHsKIAkudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLAogCS50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsCiAJLnRlc3RfYXJlbmEgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hLAogCS50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSwKIAkudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssCiYjNDM7CS50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LAogfTsKIAogc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKQpAQCAtNDQxLDYgJiM0Mzs0NDgsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSkKIAlyZXR1cm4gc3Rfb3BzMy0mZ3Q7dGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTsKIH0KIAomIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCA9IHsgLmEgPSAxMSwgLmIgPSAyMiB9OwomIzQzOwomIzQzOwlyZXR1cm4gc3Rfb3BzMy0mZ3Q7dGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHsKIAlpbnQgYTsKIH07CkBAIC04NTIsNiAmIzQzOzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAppbmRleCAzM2YyYWY1YjcwODU3Li4yMTBiOTE5MjkwY2MyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKQEAgLTEwMyw2ICYjNDM7MTAzLDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogfTsKIAomIzQzOy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi8KJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciB7CiYjNDM7CXU2NCBhOwomIzQzOwl1NjQgYjsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgewogCWludCAoKnRlc3RfMSkodm9pZCk7CiAJaW50ICgqdGVzdF8yKSh2b2lkKTsKQEAgLTExMiw2ICYjNDM7MTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgewogCS8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovCiAJaW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZiwKIAkJCQl1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTsKJiM0MzsJLyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovCiYjNDM7CWludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7CiB9OwogCiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3MgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggYzQzODNhY2I1M2MxMS4uN2Q4MTA3MGVlZmU3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC0xMjMsNiAmIzQzOzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwogaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwogaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwogCiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsCiAJCQkJX191MzIgYywgX191NjQgZCkgX19rc3ltOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEFyZW5hIEFyZ3VtZW50cyBpbiBBUk02NCBKSVQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBhcmVuYSBhcmd1bWVudCBzdXBwb3J0IHdpdGhpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcgYW5kIHBpbnBvaW50IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBgYXJjaC9hcm02NC9saWIvaW5zbi5jYCwgYW5kIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaGAsIGFuZCB0aGVyZSBhcmUgc29tZSB0ZXN0cyBhZGRlZCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuCgpUaGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AgYW5kIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgd2hpY2ggYXJlIGNhbGxlZCBkdXJpbmcgdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyBtYWtlcyBpdCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gdG8gc3BlY2lmaWMgZnVuY3Rpb25zLiBJbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBJIHNlZSBhIGZldyBvcHRpb25zOiBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgZ2VuZXJpYywgYW5kIGBidWlsZF9pbnNuYCBzZWVtcyB0b28gYnJvYWQuIEhvd2V2ZXIsIGBwcmVwYXJlX3RyYW1wb2xpbmVgIGlzIG1vZGlmaWVkIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIGFuZCB0aGVuIHRoZXJlIGFyZSB0aGUgc3RhdGljIGZ1bmN0aW9ucyBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBhbmQgYHNhdmVfYXJnc2AuCgpMb29raW5nIGF0IGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCBJIHNlZSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AuIEltcG9ydGFudGx5LCB0aGlzIG9uZSBpc24mIzM5O3Qgc3RhdGljLiBBZnRlciBhIHF1aWNrIHNjYW4gYmFjayBhdCBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBJIGFsc28gc2VlIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIG5ld2x5IGFkZGVkIGFuZCBub24tc3RhdGljLgoKT2theSwgdGhlIEpJVCBjb21waWxlciBmdW5jdGlvbnMgYXJlIG1vc3RseSBzdGF0aWMgaW50ZXJuYWxseSwgc28gdGhlIG1haW4gZW50cnkgcG9pbnRzIGFyZSBsaWtlbHkgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgY2FsbHMgYHByZXBhcmVfdHJhbXBvbGluZWAsIHNvIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuCgpCYXNlZCBvbiB0aGF0LCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgbG9va3MgbGlrZSBhIGdvb2QgZm9jdXMsIGFzIGl0JiMzOTtzIGEgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb24uIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGEgbmV3IGZ1bmN0aW9uIGFzIHdlbGwuIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19CUEZfSklUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgQ09ORklHX0FSTTY0YCBhcmUgcmVxdWlyZWQuCgpUbyBjb25maXJtIHRoZSBzY29wZSBvZiB0aGlzIG5ldyBmdW5jdGlvbiwgSSYjMzk7bGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24gb2YgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg9NjUwPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1NS1cdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oOjY1Njp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTctXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuLS1cbmFyY2gvYXJtNjQvbGliL2luc24uYz05MzE9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4tLVxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5My0gKi9cbmFyY2gvYXJtNjQvbGliL2luc24uYzo5OTQ6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5NS1cdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0Ny0jZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaDoyNDg6XHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ5LVx0XHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDg3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBCUEYgYXJlbmEgYXJndW1lbnQgc3VwcG9ydCB3aXRoaW4gdGhlIEFSTTY0IEpJVCBjb21waWxlci4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBgYXJjaC9hcm02NC9saWIvaW5zbi5jYC4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJJiMzOTtsbCB3YW50IHRvIGRpdmUgZGVlcCBpbnRvIHRoZWlyIGltcGxlbWVudGF0aW9ucyB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGFyZW5hIGFyZ3VtZW50cyB3aXRoaW4gdGhlIGluc3RydWN0aW9uIGdlbmVyYXRpb24gYW5kIGZlYXR1cmUgZGV0ZWN0aW9uLCByZXNwZWN0aXZlbHkuCgpBbmQgb2YgY291cnNlLCBnaXZlbiB0aGlzIGlzIGEgSklUIGNvbXBpbGVyIGNoYW5nZSwgZnV6emluZyBpcyBlc3NlbnRpYWwuIEFueSBjaGFuZ2UgbGlrZSB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlY29tbWVuZCBhcHByb3ByaWF0ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgpUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWF0dGVyIGhlcmUgYXJlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCwgY29uZmlybWluZyB0aGVzZSBhcmUgcHJlcmVxdWlzaXRlcyBmb3IgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhlIHRleHQgc2F5cyBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCBhcyBpdCBjYWxscyBgcHJlcGFyZV90cmFtcG9saW5lYCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjaGFuZ2VzIGNhc2NhZGUgdGhyb3VnaCB0aGUgdHJhbXBvbGluZSBzZXR1cC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBpZiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRyYW1wb2xpbmUgc2V0dXAgaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgYXJlbmEgYXJndW1lbnQgbWVjaGFuaXNtLgoKSW4gc3VtbWFyeSwgdGhpcyByZXF1aXJlcyBhIGNhcmVmdWwgcmV2aWV3IG9mIHRoZSBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgdGhlIGZlYXR1cmUgZGV0ZWN0aW9uIGxvZ2ljLCBhbmQgdGhlIHRyYW1wb2xpbmUgc2V0dXAsIHdpdGggYSBzdHJvbmcgZW1waGFzaXMgb24gZnV6emluZyB0byB2YWxpZGF0ZSB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yNjU2PXN0YXRpYyB2b2lkIHN0b3JlX2Z1bmNfbWV0YShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZilcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNjYxLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjY2MjovKiBCYXNlZCBvbiB0aGUgeDg2JiMzOTtzIGltcGxlbWVudGF0aW9uIG9mIGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY2My0gKlxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI5OTc9aW50IGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwMS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjMwMDI6aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDAzLVx0XHRcdFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNzQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQlBGIFRyYW1wb2xpbmUgYW5kIEpJVCBDb21waWxhdGlvbiBSZWFkaW5lc3MqKgoKQWxyaWdodCwgc28gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50LCBnb29kLiBUaGF0JiMzOTtzIG9uZSBrZXkgcGllY2UgaW4gcGxhY2UuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhpcyBpcyB0aGUgYmlnIG9uZSwgdGhlIGNvcmUgb2Ygd2hldGhlciB3ZSBjYW4gZXZlbiB0aGluayBhYm91dCBKSVQgY29tcGlsYXRpb24gZm9yIEJQRiBjb2RlIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBJZiB0aGF0IGZ1bmN0aW9uIGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZSwgd2XigJlyZSBpbiBhIG11Y2ggYmV0dGVyIHBvc2l0aW9uIHRvIHByb2NlZWQuIFdpdGhvdXQgaXQsIHdlJiMzOTtyZSBzdHVjayBpbnRlcnByZXRpbmcsIGFuZCB3ZSBhbGwga25vdyBob3cgdGhhdCBpbXBhY3RzIHBlcmZvcm1hbmNlLiBTbywgbGV04oCZcyBzZWUgaWYgdGhhdCBob29rIGlzIGF2YWlsYWJsZS4uLiB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTMzPXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEzOS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxNDA6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxNDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgbGF5IG91dCBteSB0aGlua2luZyBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBCUEYgYXJlbmEgc3R1ZmYuIEkmIzM5O3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGZlYXR1cmVzIHRoYXQgcmVsYXRlIGRpcmVjdGx5IHRvIHRoZSBhcmVuYSBmdW5jdGlvbmFsaXR5LgoKTm93LCBhcyBmb3IgdGhlIGNvbmZpZ3MsIEkmIzM5O20gcHJldHR5IHN1cmUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBpbnZvbHZlZCwgYXMgdGhleSBvZnRlbiBhcmUgd2l0aCBCUEYtcmVsYXRlZCBmZWF0dXJlcy4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBhcmVuYSBtZWNoYW5pc20gaXRzZWxmLgoKVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIEEgYGdyZXAgQVJFTkFgIHNlYXJjaCBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2Agc2hvdWxkIGdpdmUgbWUgYW55IGFyZW5hLXNwZWNpZmljIGNvbmZpZ3MgSSBtaWdodCBoYXZlIG92ZXJsb29rZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODg1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gdGFsa2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQVJFTkEgaW4gdGhlIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYEFSRU5BYCBpcyB1c2VkIHdpdGhpbiBvdXIgY29uZmlndXJhdGlvbiBlY29zeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgZmVhdHVyZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgbGl2ZXMuIE15IHRob3VnaHQgaXMgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgc3RyaW5nIGBBUkVOQWAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgbW92ZSDigJMgcXVpY2ssIGRpcnR5LCBidXQgb2Z0ZW4gaGlnaGx5IGVmZmVjdGl2ZSBmb3IgYW4gaW5pdGlhbCBleHBsb3JhdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIG1hcCBvZiB3aGVyZSBgQVJFTkFgIGlzIGRlZmluZWQsIHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiBpdCwgYW5kIGhvcGVmdWxseSBzb21lIGNvbnRleHQgYXJvdW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQVJFTkEsIGFuZCBJIGNhbiBzdGFydCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FSRU5BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiBteSBpbml0aWFsIGFzc3VtcHRpb24gYWJvdXQgYSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQlBGIGFyZW5hIG1pZ2h0IGJlIGluY29ycmVjdC4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGUgYXJlbmEmIzM5O3MgYmVoYXZpb3IgaXMgaW50ZXJ0d2luZWQgd2l0aCB0aGUgYnJvYWRlciBgQlBGX1NZU0NBTExgIG1lY2hhbmlzbSwgcmF0aGVyIHRoYW4gaGF2aW5nIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24uCgpUbyBjb25maXJtIHRoaXMgc3VzcGljaW9uLCBJIHNob3VsZCBpbW1lZGlhdGVseSBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBpbiBga2VybmVsL2JwZi9hcmVuYS5jYC4gSWYgdGhlIGFyZW5hIGhhcyBpdHMgb3duIGRlZGljYXRlZCBzb3VyY2UgZmlsZSwgdGhhdCB3b3VsZCBwcm92aWRlIGEgcHJldHR5IGRlZmluaXRpdmUgYW5zd2VyLCBhbmQgYSBwbGFjZSB0byBmaW5kIG1vcmUgaW5mb3JtYXRpb24sIG9uIHdoZXRoZXIgaXQmIzM5O3MgZ290IGEgdW5pcXVlIGNvbmZpZy4gSWYgaXQgZG9lc24mIzM5O3QgZXhpc3QsIHdlbGwgdGhlbiB0aGF0IG5hcnJvd3MgZG93biB0aGUgb3B0aW9ucyBzaWduaWZpY2FudGx5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTI5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTE2LS8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTc6ICogYnBmX2FyZW5hIGlzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGJldHdlZW4gYnBmIHByb2dyYW0gYW5kXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTgtICogdXNlciBzcGFjZSBwcm9jZXNzLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMi0gKiBrZXJuX3ZtX3N0YXJ0IGZmZmZjOTAwMDFlNjkwMDAgLy8gcGlja2VkIGJ5IGdldF92bV9hcmVhKClcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzogKiBGb3IgdXNlciBzcGFjZSBhbGwgcG9pbnRlcnMgd2l0aGluIHRoZSBhcmVuYSBhcmUgbm9ybWFsIDgtYnl0ZSBhZGRyZXNzZXMuXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjQtICogSW4gdGhpcyBleGFtcGxlIDdmN2QyNjIwMDAwMCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZSAocGdvZmY9MCkuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTMwLSAqXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzE6ICogQlBGIEpJVHMgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIGFjY2VzcyBhcmVuYTpcbmtlcm5lbC9icGYvYXJlbmEuYy0zMi0gKiAgIG1vdiBlYXgsIGVheCAgLy8gZWF4IGhhcyBsb3dlciAzMi1iaXQgb2YgdXNlciBwb2ludGVyXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTpzdHJ1Y3QgYnBmX2FyZW5hIHtcbmtlcm5lbC9icGYvYXJlbmEuYy01Mi1cdHN0cnVjdCBicGZfbWFwIG1hcDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTktXHRycXNwaW5sb2NrX3Qgc3BpbmxvY2s7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjA6XHQvKiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHBvcHVsYXRlZCBpbiB0aGUgYXJlbmEgKi9cbmtlcm5lbC9icGYvYXJlbmEuYy02MS1cdHU2NCBucl9wYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX2lycShzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NC1cbmtlcm5lbC9icGYvYXJlbmEuYzo3NTpzdHJ1Y3QgYXJlbmFfZnJlZV9zcGFuIHtcbmtlcm5lbC9icGYvYXJlbmEuYy03Ni1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTgwLVxua2VybmVsL2JwZi9hcmVuYS5jOjgxOnU2NCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODIte1xua2VybmVsL2JwZi9hcmVuYS5jOjgzOlx0cmV0dXJuIGFyZW5hID8gKHU2NCkgKGxvbmcpIGFyZW5hLVx1MDAzZWtlcm5fdm0tXHUwMDNlYWRkciAmIzQzOyBHVUFSRF9TWiAvIDIgOiAwO1xua2VybmVsL2JwZi9hcmVuYS5jLTg0LX1cbmtlcm5lbC9icGYvYXJlbmEuYy04NS1cbmtlcm5lbC9icGYvYXJlbmEuYzo4Njp1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxua2VybmVsL2JwZi9hcmVuYS5jLTg3LXtcbmtlcm5lbC9icGYvYXJlbmEuYzo4ODpcdHJldHVybiBhcmVuYSA/IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgOiAwO1xua2VybmVsL2JwZi9hcmVuYS5jLTg5LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTEtLyoqXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTI6ICogYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0IC0ga2Vybl92bV9zdGFydCBsb29rdXAgYnkgc3RydWN0IGJwZl9tYXAgKlxua2VybmVsL2JwZi9hcmVuYS5jLTkzLSAqIEBtYXA6IGEgQlBGX01BUF9UWVBFX0FSRU5BIG1hcFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05Ni0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo5Nzp1NjQgYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTgte1xua2VybmVsL2JwZi9hcmVuYS5jOjk5Olx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDAtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDItLyoqXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAzOiAqIGJwZl9wcm9nX2FyZW5hIC0gcmV0dXJuIHRoZSBicGZfbWFwIG9mIHRoZSBhcmVuYSByZWZlcmVuY2VkIGJ5IEBwcm9nXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA0LSAqIEBwcm9nOiBhIGxvYWRlZCBCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNS0gKlxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjogKiBUaGUgdmVyaWZpZXIgZW5mb3JjZXMgYXQgbW9zdCBvbmUgYXJlbmEgcGVyIHByb2dyYW0gYW5kIHN0b3JlcyBpdCBpblxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzogKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYS4gUmV0dXJuIHRoYXQgYXJlbmEmIzM5O3MgdW5kZXJseWluZyBicGZfbWFwLCBvciBOVUxMIGlmXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA4OiAqIEBwcm9nIGRvZXMgbm90IHJlZmVyZW5jZSBhbiBhcmVuYS5cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDktICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwOnN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExLXtcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTI6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMy1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMTQ6XHRyZXR1cm4gYXJlbmEgPyBcdTAwMjZhcmVuYS1cdTAwM2VtYXAgOiBOVUxMO1xua2VybmVsL2JwZi9hcmVuYS5jLTExNS19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE2LVxua2VybmVsL2JwZi9hcmVuYS5jOjExNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxua2VybmVsL2JwZi9hcmVuYS5jLTExOC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEyMS1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMjI6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3B1c2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxua2VybmVsL2JwZi9hcmVuYS5jLTEyMy17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEyNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMjc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BvcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxua2VybmVsL2JwZi9hcmVuYS5jLTEyOC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEzMS1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMzI6c3RhdGljIGxvbmcgYXJlbmFfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxua2VybmVsL2JwZi9hcmVuYS5jLTEzMy17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEzNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMzc6c3RhdGljIGludCBhcmVuYV9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQxLVxua2VybmVsL2JwZi9hcmVuYS5jOjE0MjpzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTE0My17XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTQ0Olx0cmV0dXJuICh1MzIpKHVhZGRyIC0gKHUzMilhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDUtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0xNDc9c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xua2VybmVsL2JwZi9hcmVuYS5jOjE0ODpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTE0OS1cdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTU0Olx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU1LVx0c3RydWN0IGxsaXN0X2hlYWQgKmZyZWVfcGFnZXM7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTE1OD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTE4NC1cdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvYXJlbmEuYzoxODU6XHRcdGlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLVx1MDAzZWFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg2LVx0XHRcdHJldHVybiAtRUJVU1k7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTE5Mi1cdCAqIFdpdGhvdXQgcHRlcF90cnlfc2V0KCkgdGhlcmUgaXMgbm8gYXRvbWljIGluc3RhbGxlciwgYnV0IHN1Y2ggYXJjaGVzXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTkzOlx0ICogYWxzbyBkbyBub3Qgd2lyZSB1cCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQoKSwgc28gbm8gc2NyYXRjaCBwYWdlXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTk0LVx0ICogaXMgZXZlciBpbnN0YWxsZWQgYW5kIHRoZSBzbG90IGlzIGFsd2F5cyBub25lIGhlcmUuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIwMC1cdGQtXHUwMDNlaSYjNDM7JiM0Mzs7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MjAxOlx0V1JJVEVfT05DRShkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLCBkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzICYjNDM7IDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTIwMi1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0yMTA9c3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIyOC1cdC8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjI5Olx0ICogU2tpcCB0aGUgcGVyLWFyZW5hIHNjcmF0Y2ggcGFnZS4gQSBrZXJuZWwgZmF1bHQgb24gYW4gdW5hbGxvY2F0ZWQgdWFkZHJcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xua2VybmVsL2JwZi9hcmVuYS5jLTIzMS1cdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cbmtlcm5lbC9icGYvYXJlbmEuYy0yMzItXHQgKi9cbmtlcm5lbC9icGYvYXJlbmEuYzoyMzM6XHRpZiAocGFnZSA9PSBkLVx1MDAzZWFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzQtXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMzYtXHRfX2xsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZXBjcF9sbGlzdCwgZC1cdTAwM2VmcmVlX3BhZ2VzKTtcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzc6XHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgLSAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzgtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjQxPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X3NjcmF0Y2hfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNTgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjU5OnN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxua2VybmVsL2JwZi9hcmVuYS5jLTI2MC17XG5rZXJuZWwvYnBmL2FyZW5hLmMtMjYxLVx0LyogUG9wdWxhdGUgaW50ZXJtZWRpYXRlcyBmb3IgdGhlIHJlY292ZXJ5IHJhbmdlICg0IEdpQiAmIzQzOyB1cHBlciBoYWxmLWd1YXJkKS4gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzoyNjI6XHRyZXR1cm4gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpLFxua2VybmVsL2JwZi9hcmVuYS5jLTI2My1cdFx0XHRcdCAgIFNaXzRHICYjNDM7IEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY1LVxua2VybmVsL2JwZi9hcmVuYS5jOjI2NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjcte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjktXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbmtlcm5lbC9icGYvYXJlbmEuYzoyNzA6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzEtXHR1NjQgdm1fcmFuZ2U7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI3My1cbmtlcm5lbC9icGYvYXJlbmEuYzoyNzQ6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmEoKSlcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzUtXHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjk5LVxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcdGFyZW5hID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqYXJlbmEpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMwMTpcdGlmICghYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAyLVx0XHRnb3RvIGVycjtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDMtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA0Olx0YXJlbmEtXHUwMDNla2Vybl92bSA9IGtlcm5fdm07XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA1Olx0YXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCA9IGF0dHItXHUwMDNlbWFwX2V4dHJhO1xua2VybmVsL2JwZi9hcmVuYS5jOjMwNjpcdGlmIChhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jOjMwNzpcdFx0YXJlbmEtXHUwMDNldXNlcl92bV9lbmQgPSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ICYjNDM7IHZtX3JhbmdlO1xua2VybmVsL2JwZi9hcmVuYS5jLTMwOC1cbmtlcm5lbC9icGYvYXJlbmEuYzozMDk6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZhcmVuYS1cdTAwM2V2bWFfbGlzdCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEwOlx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmFyZW5hLVx1MDAzZWZyZWVfc3BhbnMpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMxMTpcdGluaXRfaXJxX3dvcmsoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9pcnEsIGFyZW5hX2ZyZWVfaXJxKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTI6XHRJTklUX1dPUksoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV93b3JrLCBhcmVuYV9mcmVlX3dvcmtlcik7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEzOlx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIGF0dHIpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMxNC1cbmtlcm5lbC9icGYvYXJlbmEuYzozMTU6XHRlcnIgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMxNi1cdGlmIChlcnIpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzE3Olx0XHRnb3RvIGVycl9mcmVlX2FyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTMxOC1cbmtlcm5lbC9icGYvYXJlbmEuYzozMTk6XHRyYW5nZV90cmVlX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcdGVyciA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCAwLCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjEtXHRpZiAoZXJyKVxua2VybmVsL2JwZi9hcmVuYS5jLTMyMi1cdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMzpcdG11dGV4X2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzI0Olx0bXV0ZXhfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2V6YXBfbXV0ZXgpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyNTpcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyNjpcdGVyciA9IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI5LVxua2VybmVsL2JwZi9hcmVuYS5jOjMzMDpcdHJldHVybiBcdTAwMjZhcmVuYS1cdTAwM2VtYXA7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzMxLVxua2VybmVsL2JwZi9hcmVuYS5jLTMzMi1lcnJfZGVzdHJveV9ydDpcbmtlcm5lbC9icGYvYXJlbmEuYzozMzM6XHRyYW5nZV90cmVlX2Rlc3Ryb3koXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMzNC1lcnJfZnJlZV9zY3JhdGNoOlxua2VybmVsL2JwZi9hcmVuYS5jOjMzNTpcdF9fZnJlZV9wYWdlKGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM2OmVycl9mcmVlX2FyZW5hOlxua2VybmVsL2JwZi9hcmVuYS5jOjMzNzpcdGJwZl9tYXBfYXJlYV9mcmVlKGFyZW5hKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzgtZXJyOlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0zNDM9c3RhdGljIGludCBleGlzdGluZ19wYWdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ0LXtcbmtlcm5lbC9icGYvYXJlbmEuYzozNDU6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGRhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ2LVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM1Ni1cdCAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjM1NzpcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0zNTgtXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zNjAtXHQgKiBXZSBkbyBub3QgdXBkYXRlIHB0ZSBoZXJlOlxua2VybmVsL2JwZi9hcmVuYS5jOjM2MTpcdCAqIDEuIE5vYm9keSBzaG91bGQgYmUgYWNjZXNzaW5nIGJwZl9hcmVuYSYjMzk7cyByYW5nZSBvdXRzaWRlIG9mIGEga2VybmVsIGJ1Z1xua2VybmVsL2JwZi9hcmVuYS5jLTM2Mi1cdCAqIDIuIFRMQiBmbHVzaGluZyBpcyBiYXRjaGVkIG9yIGRlZmVycmVkLiBFdmVuIGlmIHdlIGNsZWFyIHB0ZSxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxua2VybmVsL2JwZi9hcmVuYS5jOjM3MDpzdGF0aWMgdm9pZCBhcmVuYV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTM3MS17XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcyOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTM3My1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzc2LVx0ICogbW1hcCgpIGhvbGRzIHZtX2ZpbGUgd2hpY2ggaG9sZHMgYnBmX21hcCByZWZjbnQuXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc3Olx0ICogbXVubWFwKCkgbXVzdCBoYXZlIGhhcHBlbmVkIG9uIHZtYSBmb2xsb3dlZCBieSBhcmVuYV92bV9jbG9zZSgpXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc4Olx0ICogd2hpY2ggd291bGQgY2xlYXIgYXJlbmEtXHUwMDNldm1hX2xpc3QuXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzc5LVx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzgwOlx0aWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZhcmVuYS1cdTAwM2V2bWFfbGlzdCkpKVxua2VybmVsL2JwZi9hcmVuYS5jLTM4MS1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zODMtXHQvKiBFbnN1cmUgbm8gcGVuZGluZyBkZWZlcnJlZCBmcmVlcyAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjM4NDpcdGlycV93b3JrX3N5bmMoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9pcnEpO1xua2VybmVsL2JwZi9hcmVuYS5jOjM4NTpcdGZsdXNoX3dvcmsoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV93b3JrKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zODYtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM5Mi1cdCAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjM5MzpcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKSxcbmtlcm5lbC9icGYvYXJlbmEuYzozOTQ6XHRcdFx0XHQgICAgIFNaXzRHICYjNDM7IEdVQVJEX1NaIC8gMiwgZXhpc3RpbmdfcGFnZV9jYiwgYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jOjM5NTpcdGZyZWVfdm1fYXJlYShhcmVuYS1cdTAwM2VrZXJuX3ZtKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozOTY6XHRyYW5nZV90cmVlX2Rlc3Ryb3koXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjM5NzpcdF9fZnJlZV9wYWdlKGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzk4Olx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTM5OS19XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDAwLVxua2VybmVsL2JwZi9hcmVuYS5jOjQwMTpzdGF0aWMgdm9pZCAqYXJlbmFfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbmtlcm5lbC9icGYvYXJlbmEuYy00MDIte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MDUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA2OnN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDA3LVx0XHRcdFx0ICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDEyOnN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE5LXtcbmtlcm5lbC9icGYvYXJlbmEuYzo0MjA6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDIxLVxua2VybmVsL2JwZi9hcmVuYS5jOjQyMjpcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cdTAwM2Vucl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDIzLX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDI1PXN0cnVjdCB2bWFfbGlzdCB7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQzMS1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MzI6c3RhdGljIGludCByZW1lbWJlcl92bWEoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9hcmVuYS5jLTQzMy17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Mi1cdHZtbC1cdTAwM2V6YXBfZ2VuID0gMDtcbmtlcm5lbC9icGYvYXJlbmEuYzo0NDM6XHRsaXN0X2FkZChcdTAwMjZ2bWwtXHUwMDNlaGVhZCwgXHUwMDI2YXJlbmEtXHUwMDNldm1hX2xpc3QpO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ0NC1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NDYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDQ3OnN0YXRpYyB2b2lkIGFyZW5hX3ZtX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDQ4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDUzLVxua2VybmVsL2JwZi9hcmVuYS5jOjQ1NDpzdGF0aWMgaW50IGFyZW5hX3ZtX21heV9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ1NS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ1OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0NTk6c3RhdGljIGludCBhcmVuYV92bV9tcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYzLVxua2VybmVsL2JwZi9hcmVuYS5jOjQ2NDpzdGF0aWMgdm9pZCBhcmVuYV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy00NjUte1xua2VybmVsL2JwZi9hcmVuYS5jLTQ2Ni1cdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NDY3Olx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ2OC1cdHN0cnVjdCB2bWFfbGlzdCAqdm1sID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDcxLVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL2FyZW5hLmM6NDcyOlx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFyZW5hLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ3My1cdC8qIHVwZGF0ZSBsaW5rIGxpc3QgdW5kZXIgbG9jayAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgxLVx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NDgyOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ4My1cdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0ODk6XHRrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkwLVx0a2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkxLVxua2VybmVsL2JwZi9hcmVuYS5jOjQ5MjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkzLVx0XHQvKlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDEtXHRpZiAocGFnZSkge1xua2VybmVsL2JwZi9hcmVuYS5jOjUwMjpcdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxua2VybmVsL2JwZi9hcmVuYS5jLTUwMy1cdFx0XHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA5Olx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MTAtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTExOlx0aWYgKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEyLVx0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MTQtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTE1Olx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MTYtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MTgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTE5Olx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCB9O1xua2VybmVsL2JwZi9hcmVuYS5jOjUyMDpcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTIxLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTIyLVx0aWYgKHJldCkge1xua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MjgtXHRpZiAocmV0KSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5Olx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXHRcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MzYtXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTM3Olx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTM4LVx0dm1mLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NDItb3V0X3NpZ3NlZ3Y6XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQzOlx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ0LVx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU0Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo1NDc6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ4Olx0Lm9wZW5cdFx0PSBhcmVuYV92bV9vcGVuLFxua2VybmVsL2JwZi9hcmVuYS5jOjU0OTpcdC5tYXlfc3BsaXRcdD0gYXJlbmFfdm1fbWF5X3NwbGl0LFxua2VybmVsL2JwZi9hcmVuYS5jOjU1MDpcdC5tcmVtYXBcdFx0PSBhcmVuYV92bV9tcmVtYXAsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUxOlx0LmNsb3NlXHRcdD0gYXJlbmFfdm1fY2xvc2UsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUyOlx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTUzLX07XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU0LVxua2VybmVsL2JwZi9hcmVuYS5jOjU1NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxua2VybmVsL2JwZi9hcmVuYS5jLTU1Ni1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU5LVx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xua2VybmVsL2JwZi9hcmVuYS5jOjU2MDpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01NjEtXHRsb25nIHJldDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTY3LVxua2VybmVsL2JwZi9hcmVuYS5jOjU2ODpcdC8qIGlmIHVzZXJfdm1fc3RhcnQgd2FzIHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTY5Olx0aWYgKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzA6XHRcdGlmIChsZW4gXHUwMDNlIGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbmtlcm5lbC9icGYvYXJlbmEuYy01NzEtXHRcdFx0cmV0dXJuIC1FMkJJRztcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzI6XHRcdGlmIChsZW4gIT0gYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTU3My1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzQ6XHRcdGlmIChhZGRyICE9IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTc1LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01ODItXHRcdHJldHVybiByZXQ7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTgzOlx0aWYgKFdBUk5fT05fT05DRShhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSlcbmtlcm5lbC9icGYvYXJlbmEuYy01ODQtXHRcdC8qIGNoZWNrcyBhdCBtYXAgY3JlYXRpb24gdGltZSBzaG91bGQgcHJldmVudCB0aGlzICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU4OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1ODk6c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy01OTAte1xua2VybmVsL2JwZi9hcmVuYS5jOjU5MTpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01OTItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTkzOlx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFyZW5hLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jOjU5NDpcdGlmIChhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0IFx1MDAyNlx1MDAyNiBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ICE9IHZtYS1cdTAwM2V2bV9zdGFydClcbmtlcm5lbC9icGYvYXJlbmEuYy01OTUtXHRcdC8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk2Olx0XHQgKiBJZiBtYXBfZXh0cmEgd2FzIG5vdCBzcGVjaWZpZWQgYXQgYXJlbmEgY3JlYXRpb24gdGltZSB0aGVuXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk3LVx0XHQgKiAxc3QgdXNlciBwcm9jZXNzIGNhbiBkbyBtbWFwKE5VTEwsIC4uLikgdG8gcGljayB1c2VyX3ZtX3N0YXJ0XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTYwNC1cbmtlcm5lbC9icGYvYXJlbmEuYzo2MDU6XHRpZiAoYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgXHUwMDI2XHUwMDI2IGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kICE9IHZtYS1cdTAwM2V2bV9lbmQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA2LVx0XHQvKiBhbGwgdXNlciBwcm9jZXNzZXMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUgb2YgbW1hcC1lZCByZWdpb24gKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjEyLVxua2VybmVsL2JwZi9hcmVuYS5jOjYxMzpcdGlmIChyZW1lbWJlcl92bWEoYXJlbmEsIHZtYSkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE0LVx0XHRyZXR1cm4gLUVOT01FTTtcbmtlcm5lbC9icGYvYXJlbmEuYy02MTUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjE2Olx0YXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTc6XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE4LVx0Lypcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIwLVx0ICogY2xlYXJzIFZNX01BWUVYRUMuIFNldCBWTV9ET05URVhQQU5EIHRvIGF2b2lkIHBvdGVudGlhbCBjaGFuZ2Vcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjE6XHQgKiBvZiB1c2VyX3ZtX3N0YXJ0LiBTZXQgVk1fRE9OVENPUFkgdG8gcHJldmVudCBhcmVuYSBWTUEgZnJvbVxua2VybmVsL2JwZi9hcmVuYS5jLTYyMi1cdCAqIGJlaW5nIGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzIG9uIGZvcmsuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTYyNC1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjI1Olx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmFyZW5hX3ZtX29wcztcbmtlcm5lbC9icGYvYXJlbmEuYy02MjYtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI4LVxua2VybmVsL2JwZi9hcmVuYS5jOjYyOTpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcbmtlcm5lbC9icGYvYXJlbmEuYy02MzAte1xua2VybmVsL2JwZi9hcmVuYS5jOjYzMTpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy02MzItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMzOlx0aWYgKCh1NjQpb2ZmIFx1MDAzZT0gYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTYzNC1cdFx0cmV0dXJuIC1FUkFOR0U7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM1Olx0KmltbSA9ICh1bnNpZ25lZCBsb25nKWFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM2LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTYzOC1cbmtlcm5lbC9icGYvYXJlbmEuYzo2Mzk6QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9hcmVuYV9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQwOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTY0MS1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XHQubWFwX2FsbG9jID0gYXJlbmFfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0MzpcdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0NDpcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcmVuYV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ1Olx0Lm1hcF9tbWFwID0gYXJlbmFfbWFwX21tYXAsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ2Olx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0NzpcdC5tYXBfZ2V0X25leHRfa2V5ID0gYXJlbmFfbWFwX2dldF9uZXh0X2tleSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDg6XHQubWFwX3B1c2hfZWxlbSA9IGFyZW5hX21hcF9wdXNoX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ5Olx0Lm1hcF9wZWVrX2VsZW0gPSBhcmVuYV9tYXBfcGVla19lbGVtLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MDpcdC5tYXBfcG9wX2VsZW0gPSBhcmVuYV9tYXBfcG9wX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlx0Lm1hcF9sb29rdXBfZWxlbSA9IGFyZW5hX21hcF9sb29rdXBfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTI6XHQubWFwX3VwZGF0ZV9lbGVtID0gYXJlbmFfbWFwX3VwZGF0ZV9lbGVtLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcdC5tYXBfZGVsZXRlX2VsZW0gPSBhcmVuYV9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU0Olx0Lm1hcF9jaGVja19idGYgPSBhcmVuYV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1NTpcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTY6XHQubWFwX2J0Zl9pZCA9IFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcbmtlcm5lbC9icGYvYXJlbmEuYy02NTctfTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NjctICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY4OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjktXHRcdFx0ICAgICAgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY3MS1cdC8qIHVzZXJfdm1fZW5kL3N0YXJ0IGFyZSBmaXhlZCBiZWZvcmUgYnBmIHByb2cgcnVucyAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjY3MjpcdGxvbmcgcGFnZV9jbnRfbWF4ID0gKGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjczOlx0dTY0IGtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTY3NC1cdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY5My1cdFx0XHRyZXR1cm4gMDtcbmtlcm5lbC9icGYvYXJlbmEuYzo2OTQ6XHRcdHBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgdWFkZHIpO1xua2VybmVsL2JwZi9hcmVuYS5jLTY5NS1cdFx0aWYgKHBnb2ZmIFx1MDAzZSBwYWdlX2NudF9tYXggLSBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk5LVxua2VybmVsL2JwZi9hcmVuYS5jOjcwMDpcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAxLVx0LyogQ2FwIGFsbG9jYXRpb24gc2l6ZSB0byBLTUFMTE9DX01BWF9DQUNIRV9TSVpFIHNvIGttYWxsb2Nfbm9sb2NrKCkgY2FuIHN1Y2NlZWQuICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTcwNy1cdH1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MDg6XHRkYXRhLmFyZW5hID0gYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA5LVx0ZGF0YS5wYWdlcyA9IHBhZ2VzO1xua2VybmVsL2JwZi9hcmVuYS5jLTcxMC1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MTE6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxua2VybmVsL2JwZi9hcmVuYS5jLTcxMi1cdFx0Z290byBvdXRfZnJlZV9wYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE0LVx0aWYgKHVhZGRyKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzE1Olx0XHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXHRcdGlmIChyZXQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE3LVx0XHRcdGdvdG8gb3V0X3VubG9ja19mcmVlX3BhZ2VzO1xua2VybmVsL2JwZi9hcmVuYS5jOjcxODpcdFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MTktXHR9IGVsc2Uge1xua2VybmVsL2JwZi9hcmVuYS5jOjcyMDpcdFx0cmV0ID0gcGdvZmYgPSByYW5nZV90cmVlX2ZpbmQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MjEtXHRcdGlmIChwZ29mZiBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIyOlx0XHRcdHJldCA9IHJhbmdlX3RyZWVfY2xlYXIoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzIzLVx0fVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MjctXHRyZW1haW5pbmcgPSBwYWdlX2NudDtcbmtlcm5lbC9icGYvYXJlbmEuYzo3Mjg6XHR1YWRkcjMyID0gKHUzMikoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCAmIzQzOyBwZ29mZiAqIFBBR0VfU0laRSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzI5LVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MzUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM2Olx0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgbm9kZV9pZCwgdGhpc19iYXRjaCwgcGFnZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jLTczNy1cdFx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYzLVx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICYjNDM7IHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY0Olx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY1LVx0a2ZyZWVfbm9sb2NrKHBhZ2VzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NjYtXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xua2VybmVsL2JwZi9hcmVuYS5jOjc2NzpcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICYjNDM7IHVhZGRyMzI7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY4LW91dDpcbmtlcm5lbC9icGYvYXJlbmEuYzo3Njk6XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzcwOlx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVx0aWYgKG1hcHBlZCkge1xua2VybmVsL2JwZi9hcmVuYS5jLTc3Mi1cdFx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICYjNDM7IHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzczOlx0XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc0LVx0fVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03NzYtb3V0X3VubG9ja19mcmVlX3BhZ2VzOlxua2VybmVsL2JwZi9hcmVuYS5jOjc3NzpcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc3OC1vdXRfZnJlZV9wYWdlczpcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzg4LSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjc4OTpzdGF0aWMgdm9pZCB6YXBfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzkwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzk4LVx0Lypcbmtlcm5lbC9icGYvYXJlbmEuYzo3OTk6XHQgKiBUYWtpbmcgbW1hcF9yZWFkX2xvY2soKSB1bmRlciBhcmVuYS1cdTAwM2Vsb2NrIHdvdWxkIGRlYWRsb2NrIGFnYWluc3Rcbmtlcm5lbC9icGYvYXJlbmEuYzo4MDA6XHQgKiBhcmVuYV92bV9jbG9zZSgpLCB3aGljaCBydW5zIHdpdGggbW1hcF93cml0ZV9sb2NrIGhlbGQgYW5kIHRoZW5cbmtlcm5lbC9icGYvYXJlbmEuYzo4MDE6XHQgKiBhY3F1aXJlcyBhcmVuYS1cdTAwM2Vsb2NrLiBEcm9wIGFyZW5hLVx1MDAzZWxvY2sgZm9yIG1tYXBfcmVhZF9sb2NrKCkuXG5rZXJuZWwvYnBmL2FyZW5hLmMtODAyLVx0ICpcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkJQRiBBcmVuYSAmYW1wOyBJbnN0cnVjdGlvbiBHZW5lcmF0aW9uIG9uIEFBcmNoNjQqKgoKUmlnaHQsIHNvIHRoZSBCUEYgYXJlbmEg4oCTIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uLCBhcyBleHBlY3RlZC4gTmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRlYWxpbmcgd2l0aCBzeXN0ZW0gY2FsbHMgYW5kIEJQRiBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYywgdGhlIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBmdW5jdGlvbi4gSXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlPyBJIHNlZW0gdG8gcmVtZW1iZXIgc2VlaW5nIGl0IGluIHRoZSBBQXJjaDY0IGFyY2hpdGVjdHVyZSBjb2RlLgoKTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpdHMgYWNjZXNzaWJpbGl0eS4gT2theSwgYSBxdWljayBncmVwIHJldmVhbHMgaXQmIzM5O3Mgc2l0dGluZyB0aGVyZSBpbiBgYXJjaC9hcm02NC9saWIvaW5zbi5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIEkgZXhwZWN0ZWQgaXQgdG8gYmUgYmFzZWQgb24gdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwuIEdvb2QsIGdvb2QuIE5vdyBJIGNhbiB3b3JrIHdpdGggdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCoqCgpSaWdodCwgc28gdGhpcyB0aGluZyBpc24mIzM5O3QgYSBzdGF0aWNhbGx5IGNvbXBpbGVkIGVsZW1lbnQsIHdoaWNoIGlzIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjay4gQnV0IGl0JiMzOTtzIGFsc28gbm90IGRpcmVjdGx5IGV4cG9ydGVkLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgdGhyb3dpbmcgbWUuIEhtbS4uLiBPa2F5LCB3aGVyZSBkaWQgSSBzZWUgaXQ/IEFoLCB5ZXMsIGl0IHdhcyBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCB3aGljaCBpcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjY1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIHNvbWV0aGluZyBpc24mIzM5O3QgcXVpdGUgcmlnaHQsIHNwZWNpZmljYWxseSB0aGF0IHdoYXRldmVyIEkmIzM5O20gZXhwZWN0aW5nIGlzbiYjMzk7dCBnZXR0aW5nIGV4cG9ydGVkLiBSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEl0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEJ1dCBob2xkIG9uLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgYSBmYWlybHkgZ2VuZXJpYyBuYW1lIOKAkyBtaWdodCBiZSB0b28gYnJvYWQgYSBzdGFydGluZyBwb2ludCBmb3IgbXkgcHVycG9zZXMuCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBzZWFyY2guIEluc3RlYWQgb2YgdGhhdCwgd2hhdCBhYm91dCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYD8gVGhhdCBzZWVtcyBsaWtlIGEgbW9yZSBmb2N1c2VkIHN5bWJvbCwgbW9yZSBsaWtlbHkgdG8gcHJvdmlkZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBhbmQgcGVyaGFwcyBzaGVkIGxpZ2h0IG9uIHdoeSBpdCBpcyBub3QgZXhwb3J0ZWQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYXJlbmEgYXJndW1lbnRzLCBzbyBJJiMzOTtsbCBzZWUgaWYgdGhhdCBvZmZlcnMgYSBjbGVhcmVyIHBhdGggdG8gdGhlIHJvb3QgY2F1c2UuIE9rYXksIHRoYXQgbWlnaHQgbm90IGJlIGl0LgoKQWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBleGFtaW5lIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCDigJMgdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIHRvbywgaWYgdGhlIHByZXZpb3VzIHBhdGggZG9lc24mIzM5O3QgeWllbGQgYW55dGhpbmcuIEZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbiBtaWdodCBnaXZlIG1lIHRoZSBncmFudWxhciBpbnNpZ2h0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB3aGF0ZXZlciBpdCBpcyBJIGFtIGV4cGVjdGluZyBpc24mIzM5O3Qgd29ya2luZyBhcyBJIGhhZCBob3BlZC4gT3Igd2hhdCBhYm91dCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYD8gVGhhdCBtaWdodCBiZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duLgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIGlmIHRoYXQgZnVuY3Rpb24gaXMgZXZlbiBiZWluZyB1c2VkIGFueXdoZXJlLiBIb3BlZnVsbHkgdGhhdCBsZWFkcyBtZSB0byBzb21lIGNsdWVzIGFzIHRvIHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgd3JvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMzc1PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM3OS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIzODA6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzODEte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MTQwPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNDQtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDE0NTpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNDYte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTIxNj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIxNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTIxOC1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI4Mj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1OS1cdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzYwOlx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjEtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg2ODQ9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODc3My1cdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODc3NDpcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3NzUtXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NTMKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBBcmVuYSBBcmd1bWVudCBTdXBwb3J0IGluIEFSTTY0IEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyB0aGUgdmVyaWZpZXIgY2FsbHMgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGFuZCB0aGVuIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucy4KCkkmIzM5O2xsIGNoZWNrIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGJ1dCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMgdGhleSB3b24mIzM5O3QgYmUgZXhwb3NlZC4gSG93ZXZlciwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIHZpc2libGUgYXMgYSBzeW1ib2wuIFRoYXQmIzM5O3MgZ29vZC4gQW5kIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGFsc28gdmlzaWJsZS4KClRoZXJlZm9yZSwgbXkgbGlzdCBvZiBrZXkgc3ltYm9scyB0byBjb25zaWRlciBhcmU6CgoqICAgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgCiogICBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYAoqICAgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAKCk5vdyBmb3IgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGluIHRoZSBwcm92aWRlZCB0ZXh0LCBhbmQgSSBuZWVkIHRvIGF2b2lkIHByZXBlbmRpbmcgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeC4KCkkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgZWFjaCBvZiB0aGUgdGhyZWUgc3ltYm9scyBhcmUgbm9uLXN0YXRpYzogYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AsIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgYXJlIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuCgpPa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgd2l0aGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYm90aCB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiBhbmQgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbi4gVGhpcyBjaGFuZ2UgYWxsb3dzIEJQRiBwcm9ncmFtcyB1c2luZyBhcmVuYSBhcmd1bWVudHMgdG8gYmUgbG9hZGVkIGFuZCBleGVjdXRlZC4gSXQgcmVwcmVzZW50cyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUga2VybmVsJiMzOTtzIGNvcmUgQlBGIGluZnJhc3RydWN0dXJlLCBzbyBpdCBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcuCgpJJiMzOTtsbCBwcm92aWRlIHRoZSByZXN1bHRzIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBUk02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyB0aGUgdHJhbXBvbGluZSBnZW5lcmF0aW9uIGxvZ2ljIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUga2VybmVsJiMzOTtzIEMgY29kZS4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChlLmcuLCBvdXQtb2YtYm91bmRzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMjI6NDU6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAppbmRleCAxMDA0ZWIwYmVjNjE3Li5kOWNjMmFiMWNmMDE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgIH0KIAogQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAotYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQotcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXMKLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzCiYjNDM7b3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQQomIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KIAogVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgogZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IGNjMDcwMmZhNjRhNzkuLjQ1NDhlODAxNTgwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC0yMDUsNiAmIzQzOzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgewogCUFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUwogfTsKIAomIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi8KJiM0MztlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7CiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVywKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLAomIzQzO307CiYjNDM7CiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHsKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTywKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCwKQEAgLTM3OCw2ICYjNDM7MzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCwJMHg3RjIwMDAwMCwgMHgwQjAwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsCTB4N0YyMDAwMDAsIDB4MkIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsCTB4N0YyMDAwMDAsIDB4NEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLAkweDdGMjAwMDAwLCAweDZCMDAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsCTB4N0YyMDAwMDAsIDB4MEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsCTB4N0YyMDAwMDAsIDB4MkIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCwJMHg3RjIwMDAwMCwgMHg0QjIwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCwJMHg3RjIwMDAwMCwgMHg2QjIwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsCTB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLAkweDdGRTA4MDAwLCAweDFCMDA4MDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdiwJMHg3RkUwRkMwMCwgMHgxQUMwMDgwMCkKQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LAogCQkJCQkgaW50IHNoaWZ0LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpOwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwppbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9saWIvaW5zbi5jCkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZToKJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seQomIzQzOyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLgomIzQzOyAqLwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJdTMyIGluc247CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwcl9lcnIoJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXG4mIzM0OywgX19mdW5jX18sIHR5cGUpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoICh2YXJpYW50KSB7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDoKJiM0MzsJCWluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGlmdCAmbHQ7IDAgfHwgc2hpZnQgJmd0OyA0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTsKJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpOwomIzQzOwomIzQzOwkvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqLwomIzQzOwlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLAomIzQzOwkJCQkJICAgICAoZXh0ZW5kICZsdDsmbHQ7IDMpIHwgc2hpZnQpOwomIzQzO30KJiM0MzsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaAppbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQAogLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqLwogI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSkKIAomIzQzOy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFwKJiM0MzsJYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpCiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSAmbHQ7Jmx0OyBzaGlmdCkgKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcCiYjNDM7CUE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApCiYjNDM7CiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqLwogI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFwKIAlBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGQxNGQyOTdlYmI5NjcuLjFjZDMyN2QyMTNlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjQ5LDYgJiM0MzsxMjQ5LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3QKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmcKJiM0MzsgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQKJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJY29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LSZndDtwcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICYjNDM7IGldOwomIzQzOwkJdTggZmxhZ3MgPSBmbS0mZ3Q7YXJnX2ZsYWdzW2ldOwomIzQzOwomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghY3R4LSZndDthcmVuYV92bV9zdGFydCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHsKJiM0MzsJCQkvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7CiYjNDM7CQkJLyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQkJZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7CiYjNDM7CQl9CiYjNDM7CQllbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLgogICogUmV0dXJuczoKICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLgpAQCAtMTY3MSw2ICYjNDM7MTcwOCwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQkJCSAgICAmYW1wO2Z1bmNfYWRkciwgJmFtcDtmdW5jX2FkZHJfZml4ZWQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQlyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTsKIAkJLyoKIAkJICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlCkBAIC0yMzM1LDYgJiM0MzsyMzc3LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpCkBAIC0yNTA4LDM0ICYjNDM7MjU1NSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG8KJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93CiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsCiYjNDM7ICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlCiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hCiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbykKJiM0Mzt7CiYjNDM7CWlmIChudWxsYWJsZSkgewomIzQzOwkJaWYgKGRzdCAhPSBzcmMpCiYjNDM7CQkJZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTsKJiM0MzsJCS8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQllbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTsKJiM0MzsJCXNyYyA9IGRzdDsKJiM0MzsJfQomIzQzOwllbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAotCQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbikKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsCiYjNDM7CQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSkKIHsKLQlpbnQgaTsKLQlpbnQgcmVnOwotCWludCBkb2ZmOwotCWludCBzb2ZmOwotCWludCBzbG90czsKIAl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07CiYjNDM7CXU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07CiYjNDM7CWludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzOwomIzQzOwomIzQzOwkvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovCiYjNDM7CWlmIChhcmVuYV9iYXNlKQomIzQzOwkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7CiAKIAkvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmUKIAkgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCiAJICovCi0JZm9yIChyZWcgPSAwOyByZWcgJmx0OyBhLSZndDtyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7Ci0JCWVtaXQoZm9yX2NhbGxfb3JpZ2luID8KLQkJICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDoKLQkJICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLAotCQkgICAgIGN0eCk7Ci0JCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJZm9yIChpID0gMCwgcmVnID0gMDsgaSAmbHQ7IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSAmYW1wOyZhbXA7IChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpOwomIzQzOwkJYm9vbCBudWxsYWJsZSA9IG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKJiM0MzsJCXdoaWxlIChzbG90cy0tICZndDsgMCkgewomIzQzOwkJCWlmIChmb3JfY2FsbF9vcmlnaW4pIHsKJiM0MzsJCQkJZW1pdChBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pOwomIzQzOwkJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0KJiM0MzsJCQlyZWcmIzQzOyYjNDM7OwomIzQzOwkJCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJCX0KIAl9CiAKLQlzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovCiYjNDM7CS8qCiYjNDM7CSAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lCiYjNDM7CSAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZQomIzQzOwkgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvbgomIzQzOwkgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc28KJiM0MzsJICogdGhleSBzdGFydCBhdCBGUCAmIzQzOyAxNi4KJiM0MzsJICovCiYjNDM7CXNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjsKIAlkb2ZmID0gKGZvcl9jYWxsX29yaWdpbiA/IG9hcmdzX29mZiA6IGJhcmdzX29mZik7CiAKIAkvKiBzYXZlIG9uIHN0YWNrIGFyZ3VtZW50cyAqLwogCWZvciAoaSA9IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiAJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKIAkJLyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSAmbHQ7PSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqLwogCQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKQEAgLTI1NDUsNiAmIzQzOzI2MzQsOCBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZiwKIAkJCSAqLwogCQkJaWYgKHNsb3RzID09IDAgJmFtcDsmYW1wOyAhZm9yX2NhbGxfb3JpZ2luKQogCQkJCWNsZWFyX2dhcmJhZ2UoY3R4LCB0bXAsIG0tJmd0O2FyZ19zaXplW2ldICUgOCk7CiYjNDM7CQkJaWYgKGFyZW5hX2FyZykKJiM0MzsJCQkJZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7CiAJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGRvZmYpLCBjdHgpOwogCQkJc29mZiAmIzQzOz0gODsKIAkJCWRvZmYgJiM0Mzs9IDg7CkBAIC0yNjA0LDggJiM0MzsyNjk1LDIxIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCWJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTsKIAlpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjsKIAlpbnQgZnNlc3Npb25fY250ID0gYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpOwomIzQzOwl1NjQgYXJlbmFfYmFzZTsKIAl1NjQgZnVuY19tZXRhOwogCiYjNDM7CS8qCiYjNDM7CSAqIEZfSU5ESVJFQ1QgaXMgb25seSBjb21wYXRpYmxlIHdpdGggRl9SRVRfRkVOVFJZX1JFVCwgaXQgaXMgZXhwbGljaXRseQomIzQzOwkgKiBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHIGJlY2F1c2UKJiM0MzsJICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKQomIzQzOwkgKiBvbmx5IHJldHVybnMgYSBiYXNlIGZvciB0aGUgaW5kaXJlY3QgdHJhbXBvbGluZSwgd2hpY2ggdGhlcmVmb3JlCiYjNDM7CSAqIG5ldmVyIGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIGNvbnZlcnRlZCBhcmd1bWVudHMuCiYjNDM7CSAqLwomIzQzOwlXQVJOX09OX09OQ0UoKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIChmbGFncyAmYW1wOyB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7CiYjNDM7CiYjNDM7CWFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTsKJiM0MzsKIAkvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDoKIAkgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdCiAJICogICAgICAgICAgICAgICAgICAgIFsgRlAgICAgICAgICAgICAgICAgXQpAQCAtMjcyMSw3ICYjNDM7MjgyNSw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCXN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7CiAKIAkvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqLwotCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7CiYjNDM7CXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSwgaXNfc3RydWN0X29wcywgYXJlbmFfYmFzZSk7CiAKIAkvKiBzYXZlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgKi8KIAllbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTsKQEAgLTI3NjksOCAmIzQzOzI4NzMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKIAl9CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7Ci0JCS8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqLwotCQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7CiYjNDM7CQkvKiB0aGUgb3JpZ2luYWwgZnVuYyB0YWtlcyBrZXJuZWwgYWRkcmVzc2VzLCBuZXZlciBjb252ZXJ0ZWQgb25lcyAqLwomIzQzOwkJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUsIGlzX3N0cnVjdF9vcHMsIDApOwogCQkvKiBjYWxsIG9yaWdpbmFsIGZ1bmMgKi8KIAkJZW1pdChBNjRfTERSNjRJKEE2NF9SKDEwKSwgQTY0X1NQLCByZXRhZGRyX29mZiksIGN0eCk7CiAJCWVtaXQoQTY0X0FEUihBNjRfTFIsIEFBUkNINjRfSU5TTl9TSVpFICogMiksIGN0eCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCkBAIC02LDcgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaCYjMzQ7CiAKLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKIC8qCiAgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZQogICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuCkBAIC0xMTEsMTEgJiM0MzsxMTEsMTEgQEAgc3RhdGljIHZvaWQgYXJlbmFfYXJnX2F0dGFjaCh2b2lkKQogdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpCiB7CiAJLyoKLQkgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuCi0JICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEKLQkgKiBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiYjNDM7CSAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgYW5kCiYjNDM7CSAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0CiYjNDM7CSAqIGFyZW5hIGFyZ3VtZW50cyYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC4KIAkgKi8KLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2FyZyYjMzQ7KSkKIAkJYXJlbmFfYXJnKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9hcmdfZmFpbCYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDsKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eCkKIHsKQEAgLTcwLDYgJiM0Mzs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQogICovCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eCkKIHsKQEAgLTExMSw2ICYjNDM7MTEzLDcgQEAgaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpCiB7CkBAIC0xNDIsNiAmIzQzOzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiB7CkBAIC0xNjksNiAmIzQzOzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KQogLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiB7CkBAIC0xODksNiAmIzQzOzE5NCw3IEBAIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmEmIzM0OykKIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQogewpAQCAtMTk4LDYgJiM0MzsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXImIzM0OykKIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpCiB7CkBAIC0yMTMsNiAmIzQzOzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpCiAJZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudCYjMzQ7KQogaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiB7CkBAIC0yMjMsNiAmIzQzOzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQogI2Vsc2UKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZGVzY3JpcHRpb24oJiMzNDthcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3QmIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwpAQCAtMzIsNiAmIzQzOzMyLDEwIEBAIF9faml0ZWQoJiMzNDsJbW92bAklZWRpLCAlZWRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQogX19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQogX19qaXRlZCgmIzM0OwljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXt7KGJsfG1vdikJLip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KQogewpAQCAtNDgsNiAmIzQzOzUyLDEyIEBAIF9faml0ZWQoJiMzNDsJdGVzdGwJJWVkaSwgJWVkaSYjMzQ7KQogX19qaXRlZCgmIzM0OwlqZQlMMCYjMzQ7KQogX19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKIF9faml0ZWQoJiMzNDtMMDoJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92CXcwLCB3MCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2J6CXcwLCBMMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgwLCB4MjgsIHcwLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgl7ey4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KQogewpAQCAtNzIsNiAmIzQzOzgyLDE2IEBAIF9faml0ZWQoJiMzNDsJdGVzdGwJJXI4ZCwgJXI4ZCYjMzQ7KQogX19qaXRlZCgmIzM0OwlqZQlMMCYjMzQ7KQogX19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyOCYjMzQ7KQogX19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MSwgeDI4LCB3MSwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgyLCB4MjgsIHcyLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDMsIHgyOCwgdzMsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdgl3NCwgdzQmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNiegl3NCwgTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4NCwgeDI4LCB3NCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtMMDoJe3suKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X2FyZ3M1KHZvaWQgKmN0eCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCmluZGV4IGJhMDRjNzNkOGQ5NjcuLjhhYTg2MzlkZjkxZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwpAQCAtNTksMTEgJiM0Mzs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYV9tdWx0aXNsb3QmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdOwomIzQzOwomIzQzOwlhcmVuYV90b3VjaCYjNDM7JiM0Mzs7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudAomIzQzOwkgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLgomIzQzOwkgKi8KJiM0MzsJaWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpCiYjNDM7CQlyZXR1cm4gMHhiYWQ7CiYjNDM7CSpwdHIgJiM0Mzs9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7CiAJLnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsCiAJLnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsCiAJLnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsCiYjNDM7CS50ZXN0X2FyZW5hX211bHRpc2xvdCA9ICh2b2lkICopdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IsCiB9OwogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCkBAIC0xMDksNiAmIzQzOzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpCiAJaWYgKCp2YWwgIT0gNDQpCiAJCXJldHVybiA5OwogCiYjNDM7CS8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqLwomIzQzOwlyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gMTA7CiYjNDM7CWlmICgqdmFsICE9IDQ1KQomIzQzOwkJcmV0dXJuIDExOwomIzQzOwogCWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwogI2VuZGlmCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTQwMiwxMiAmIzQzOzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsCiYjNDM7CQkJCQkJICB1NjQgKnB0cl9fYXJlbmEpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0gewogCS50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsCiAJLnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCwKIAkudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsCiAJLnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLAogCS50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjaywKJiM0MzsJLnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3QsCiB9OwogCiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpCkBAIC00NDEsNiAmIzQzOzQ0OCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKQogCXJldHVybiBzdF9vcHMzLSZndDt0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpOwogfQogCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07CiYjNDM7CiYjNDM7CXJldHVybiBzdF9vcHMzLSZndDt0ZXN0X2FyZW5hX211bHRpc2xvdChwLCBwdHJfX2FyZW5hKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYnRmX3R5cGVfdGFnXzEgewogCWludCBhOwogfTsKQEAgLTg1Miw2ICYjNDM7ODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaApAQCAtMTAzLDYgJiM0MzsxMDMsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIgewogCWludCAoKnRlc3RfMSkodm9pZCk7CiB9OwogCiYjNDM7LyogMTYgYnl0ZXMsIHNvIGl0IHRha2VzIHR3byBhcmd1bWVudCBzbG90cyB3aGVuIHBhc3NlZCBieSB2YWx1ZSAqLwomIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHsKJiM0MzsJdTY0IGE7CiYjNDM7CXU2NCBiOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIAlpbnQgKCp0ZXN0XzIpKHZvaWQpOwpAQCAtMTEyLDYgJiM0MzsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7CiAJLyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi8KIAlpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLAogCQkJCXU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpOwomIzQzOwkvKiBhIG11bHRpLXNsb3QgbGVhZGluZyBhcmcsIHNvIEBwdHIgaXMgbm90IGF0IHRoZSBzbG90IGl0cyBhcmcgaW5kZXggc3VnZ2VzdHMgKi8KJiM0MzsJaW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTsKIH07CiAKIHN0cnVjdCBzdF9vcHNfYXJncyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAppbmRleCBjNDM4M2FjYjUzYzExLi43ZDgxMDcwZWVmZTdmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKQEAgLTEyMyw2ICYjNDM7MTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltOwogaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoX191NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKJiM0MztpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiAKIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYiwKIAkJCQlfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMwoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiAxMDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQgb2YgQVJNNjQgQlBGIEpJVCBBcmVuYSBBcmd1bWVudCBTdXBwb3J0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgdG8gdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBpcyBtb2RpZnlpbmcgdGhlIEpJVCB0byBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGFyZW5hIHBvaW50ZXJzLiBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIGluc3RydWN0aW9uIGdlbmVyYXRpb24gKGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgKSBhbmQgYWRkaW5nIHRlc3RzLgoKSW5pdGlhbGx5LCBJIGxvb2tlZCBmb3IgdGhlIHR5cGljYWwgS01TQU4gcmVkIGZsYWdzOiBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIHZ1bG5lcmFiaWxpdGllcyBpbiBib3VuZHMgY2hlY2tpbmcuICBOb25lIG9mIHRob3NlIGFwcGx5IGRpcmVjdGx5LiAgVGhpcyBpcyBhbGwgYWJvdXQgbWFjaGluZSBjb2RlIGdlbmVyYXRpb24gd2l0aGluIHRoZSBKSVQuCgpUaGUgSklUIGl0c2VsZiBnZW5lcmF0ZXMgaW5zdHJ1Y3Rpb25zLCBzbyBhIGJ1ZyAqY291bGQqIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLCBidXQgdGhhdCYjMzk7cyBhIGdlbmVyYWwgSklUIGJ1Zywgbm90IG5lY2Vzc2FyaWx5IHNvbWV0aGluZyBLTVNBTiBpcyB0YWlsb3JlZCBmb3IgdW5sZXNzIHRoZSAqSklUKiBpdHNlbGYgdXNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBkdXJpbmcgY29tcGlsYXRpb24uICBJIGRpZCBhIHF1aWNrIHNjYW4gZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCB2YXJpYWJsZXMgbGlrZSBgdG1wYCwgYGJhc2VfbG9gLCBhbmQgYHNsb3RzYCwgYW5kIHRoZXkgYWxsIGFwcGVhciBpbml0aWFsaXplZC4KClNwZWNpZmljYWxseSwgSSBkb3ZlIGludG8gdGhlIGBzYXZlX2FyZ3NgIGZ1bmN0aW9uIGFuZCB0aGUgYGVtaXRfYXJlbmFfYXJnX2NvbnZgIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSB3ZXJlbiYjMzk7dCBzbmVha3kgdW5pbml0aWFsaXplZCByZWdpc3RlciB1c2VzLCBidXQgaXQmIzM5O3MganVzdCBnZW5lcmF0aW5nIGNvZGUgdGhhdCBzYXZlcyBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIG9yIHBlcmZvcm1zIGFuIGFkZHJlc3MgY29udmVyc2lvbiwgYW5kIG5vdGhpbmcgcG9pbnRzIHRvIGRpcmVjdCByaXNrcy4gIFRoZSBgY2xlYXJfZ2FyYmFnZWAgY2FsbCBmb3Igc3RhY2sgYXJndW1lbnRzIGlzIGV4aXN0aW5nIGNvZGUsIHNvIHRoYXQmIzM5O3Mgbm90IGEgbmV3IGNvbmNlcm4uCgpTbywgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgSklUJiMzOTtzIGNvZGUgZ2VuZXJhdGlvbiwgYnV0IGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gSSB0aGluayB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgaXRzZWxmIGlzIHNvdW5kIGFuZCBkb2VzbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50cy4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBsb2dpYyB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbCYjMzk7cyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBUk02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyB0aGUgdHJhbXBvbGluZSBnZW5lcmF0aW9uIGxvZ2ljIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUga2VybmVsJiMzOTtzIEMgY29kZS4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChlLmcuLCBvdXQtb2YtYm91bmRzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NTowMi42Mzg4MjcyNjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxMzUxMjE1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBhcmVuYSBhcmd1bWVudHMuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHRoZSB0cmFtcG9saW5lIGdlbmVyYXRpb24gbG9naWMgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBnZW5lcmF0aW5nIG1hY2hpbmUgY29kZSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBrZXJuZWwncyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRiBhcmVuYSBhcmd1bWVudHMgaW4gdGhlIEFSTTY0IEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBoYW5kbGUgYXJlbmEgYXJndW1lbnRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHVzZSBhcmVuYSBhcmd1bWVudHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwvQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDU6MDIuNjM4ODMyNTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTUyMDkzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDIyOjQ1OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuaW5kZXggMTAwNGViMGJlYzYxNy4uZDljYzJhYjFjZjAxOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbkBAIC0zMDEsOSArMzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XFxuICAgICAgICAgfVxcbiBcXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxcbi1hcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzIG90aGVyd2lzZS4gVGhlXFxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXFxuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxcbithcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0IGFuZCBhcm02NCk7IHZlcmlmaWNhdGlvbiBmYWlsc1xcbitvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXFxuK3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cXG4gXFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcXG5pbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcXG5AQCAtMjA1LDYgKzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUge1xcbiBcXHRBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1NcXG4gfTtcXG4gXFxuKy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi9cXG4rZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVEIsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCxcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVFgsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQixcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVFcsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCxcXG4rfTtcXG4rXFxuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xcbiBcXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTyxcXG4gXFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX0tFRVAsXFxuQEAgLTM3OCw2ICszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFxcdDB4N0YyMDAwMDAsIDB4MEIwMDAwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsXFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLFxcdDB4N0YyMDAwMDAsIDB4NEIwMDAwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXFx0MHg3RjIwMDAwMCwgMHg2QjAwMDAwMClcXG4rX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkX2V4dCxcXHQweDdGMjAwMDAwLCAweDBCMjAwMDAwKVxcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcXHQweDdGMjAwMDAwLCAweDJCMjAwMDAwKVxcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFxcdDB4N0YyMDAwMDAsIDB4NEIyMDAwMDApXFxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnNfZXh0LFxcdDB4N0YyMDAwMDAsIDB4NkIyMDAwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXFx0MHg3RkUwODAwMCwgMHgxQjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyh1ZGl2LFxcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXFxuQEAgLTYzNyw2ICs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuIFxcdFxcdFxcdFxcdFxcdCBpbnQgc2hpZnQsXFxuIFxcdFxcdFxcdFxcdFxcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXFxuIFxcdFxcdFxcdFxcdFxcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XFxuK3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbnQgc2hpZnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbiBcXHRcXHRcXHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXFxuaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmNcXG4rKysgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcXG5AQCAtOTg2LDYgKzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4gXFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6XFxuKyAqIGl0IGVuY29kZXMgU1AgZm9yIEBzcmMsIGFuZCBmb3IgQGRzdCB0b28gdW5sZXNzIEB0eXBlIHNldHMgdGhlIGZsYWdzLiBPbmx5XFxuKyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLlxcbisgKi9cXG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzaGlmdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpXFxuK3tcXG4rXFx0dTMyIGluc247XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6XFxuK1xcdFxcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxcbitcXHRcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzpcXG4rXFx0XFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkc19leHRfdmFsdWUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOlxcbitcXHRcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgdHlwZSk7XFxuK1xcdFxcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKHZhcmlhbnQpIHtcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XFxuK1xcdFxcdGluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHByX2VycihcXFwiJXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHZhcmlhbnQpO1xcbitcXHRcXHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNoaWZ0IFxcdTAwM2MgMCB8fCBzaGlmdCBcXHUwMDNlIDQpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHNoaWZ0KTtcXG4rXFx0XFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JELCBpbnNuLCBkc3QpO1xcbitcXG4rXFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7XFxuK1xcbitcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STSwgaW5zbiwgcmVnKTtcXG4rXFxuK1xcdC8qIG9wdGlvbiBpbiBiaXRzIFsxNToxM10gYW5kIGltbTMgaW4gWzEyOjEwXSB0b2dldGhlciBmaWxsIElNTV82ICovXFxuK1xcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgKGV4dGVuZCBcXHUwMDNjXFx1MDAzYyAzKSB8IHNoaWZ0KTtcXG4rfVxcbitcXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbiBcXHRcXHRcXHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcXG5AQCAtMjQzLDYgKzI0MywxNyBAQFxcbiAvKiBSbiAtIFJtOyBzZXQgY29uZGl0aW9uIGZsYWdzICovXFxuICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pXFxuIFxcbisvKiBBZGQvc3VidHJhY3QgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xcbisjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcXFxcbitcXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXFxcXG4rXFx0XFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcXFxcbitcXHRcXHRBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpXFxuKy8qIFJkID0gUm4gKyAoRVhUKFJtKSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgKi9cXG4rI2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcXFxcbitcXHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcXG4rLyogUmQgPSBSbiArICh1MzIpUm0gKi9cXG4rI2RlZmluZSBBNjRfQUREX1VYVFcoUmQsIFJuLCBSbSkgQTY0X0FERF9FWFQoMSwgUmQsIFJuLCBSbSwgVVhUVywgMClcXG4rXFxuIC8qIERhdGEtcHJvY2Vzc2luZyAoMSBzb3VyY2UpICovXFxuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxcXFxuIFxcdEE2NF9WQVJJQU5UKHNmKSwgQUFSQ0g2NF9JTlNOX0RBVEExXyMjdHlwZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IGQxNGQyOTdlYmI5NjcuLjFjZDMyN2QyMTNlMzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xMjQ5LDYgKzEyNDksNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxcbisgKiB4TiA9IGtlcm5fdm1fc3RhcnQgKyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcXG4rICoga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkXFxuKyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cXG4rICovXFxuK3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRjb25zdCB1OCBhcmVuYV92bV9iYXNlID0gYnBmMmE2NFtBUkVOQV9WTV9TVEFSVF07XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVxcdTAwM2Vwcm9nLCBpbnNuKTtcXG4rXFx0aWYgKCFmbSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBmbS1cXHUwMDNlbnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICsgaV07XFxuK1xcdFxcdHU4IGZsYWdzID0gZm0tXFx1MDAzZWFyZ19mbGFnc1tpXTtcXG4rXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVxcdTAwM2VhcmVuYV92bV9zdGFydCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcXG4rXFx0XFx0XFx0LyogMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHMgKi9cXG4rXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcXG4rXFx0XFx0XFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXFxuK1xcdFxcdFxcdGVtaXQoQTY0X0NCWigwLCByZWcsIDIpLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVtaXQoQTY0X0FERF9VWFRXKHJlZywgYXJlbmFfdm1fYmFzZSwgcmVnKSwgY3R4KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi5cXG4gICogUmV0dXJuczpcXG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXFxuQEAgLTE2NzEsNiArMTcwOCwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZnVuY19hZGRyLCBcXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xcbitcXHRcXHRcXHRyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXFxuQEAgLTIzMzUsNiArMjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpXFxuQEAgLTI1MDgsMzQgKzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xcbisgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XFxuKyAqIDMyIGJpdHMgb2Yga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbFxcbisgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcXG4rICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXFxuKyAqIHBvaW50ZXIgcmVnaXN0ZXJzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcXG4re1xcbitcXHRpZiAobnVsbGFibGUpIHtcXG4rXFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuK1xcdFxcdFxcdGVtaXQoQTY0X01PVigxLCBkc3QsIHNyYyksIGN0eCk7XFxuK1xcdFxcdC8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXFxuK1xcdFxcdGVtaXQoQTY0X0NCWigxLCBkc3QsIDIpLCBjdHgpO1xcbitcXHRcXHRzcmMgPSBkc3Q7XFxuK1xcdH1cXG4rXFx0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXFxuLVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcXG4tXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXFxuLVxcdFxcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxcbitcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxcbitcXHRcXHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSlcXG4ge1xcbi1cXHRpbnQgaTtcXG4tXFx0aW50IHJlZztcXG4tXFx0aW50IGRvZmY7XFxuLVxcdGludCBzb2ZmO1xcbi1cXHRpbnQgc2xvdHM7XFxuIFxcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcXG4rXFx0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcXG4rXFx0aW50IGksIHJlZywgZG9mZiwgc29mZiwgc2xvdHM7XFxuK1xcbitcXHQvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovXFxuK1xcdGlmIChhcmVuYV9iYXNlKVxcbitcXHRcXHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcXG4gXFxuIFxcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxcbiBcXHQgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXFxuIFxcdCAqL1xcbi1cXHRmb3IgKHJlZyA9IDA7IHJlZyBcXHUwMDNjIGEtXFx1MDAzZXJlZ3NfZm9yX2FyZ3M7IHJlZysrKSB7XFxuLVxcdFxcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cXG4tXFx0XFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcXG4tXFx0XFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxcbi1cXHRcXHQgICAgIGN0eCk7XFxuLVxcdFxcdGJhcmdzX29mZiArPSA4O1xcbitcXHRmb3IgKGkgPSAwLCByZWcgPSAwOyBpIFxcdTAwM2MgYS1cXHUwMDNlYXJnc19pbl9yZWdzOyBpKyspIHtcXG4rXFx0XFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFxcdTAwMjZcXHUwMDI2IChtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gXFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRyk7XFxuK1xcdFxcdGJvb2wgbnVsbGFibGUgPSBtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gXFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcXG4rXFxuK1xcdFxcdHNsb3RzID0gKG0tXFx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xcbitcXHRcXHR3aGlsZSAoc2xvdHMtLSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0aWYgKGZvcl9jYWxsX29yaWdpbikge1xcbitcXHRcXHRcXHRcXHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7XFxuK1xcdFxcdFxcdFxcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pO1xcbitcXHRcXHRcXHRcXHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZWcrKztcXG4rXFx0XFx0XFx0YmFyZ3Nfb2ZmICs9IDg7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0c29mZiA9IDMyOyAvKiBvbiBzdGFjayBhcmd1bWVudHMgc3RhcnQgZnJvbSBGUCArIDMyICovXFxuK1xcdC8qXFxuK1xcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXFxuK1xcdCAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZVxcbitcXHQgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvblxcbitcXHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCArIDMyLiBBIHN0cnVjdF9vcHNcXG4rXFx0ICogY2FsbGJhY2sgaXMgY2FsbGVkIGluZGlyZWN0bHkgYW5kIG9ubHkgdGhlIEZQL0xSIGZyYW1lIGlzIHNhdmVkLCBzb1xcbitcXHQgKiB0aGV5IHN0YXJ0IGF0IEZQICsgMTYuXFxuK1xcdCAqL1xcbitcXHRzb2ZmID0gaXNfc3RydWN0X29wcyA/IDE2IDogMzI7XFxuIFxcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcXG4gXFxuIFxcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXFxuIFxcdGZvciAoaSA9IGEtXFx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcXHUwMDNjIG0tXFx1MDAzZW5yX2FyZ3M7IGkrKykge1xcbitcXHRcXHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXFx1MDAyNlxcdTAwMjYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcXG4rXFx0XFx0Ym9vbCBudWxsYWJsZSA9IG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4gXFx0XFx0c2xvdHMgPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XFxuIFxcdFxcdC8qIHZlcmlmaWVyIGVuc3VyZXMgYXJnX3NpemUgXFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cXG4gXFx0XFx0d2hpbGUgKHNsb3RzLS0gXFx1MDAzZSAwKSB7XFxuQEAgLTI1NDUsNiArMjYzNCw4IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKHNsb3RzID09IDAgXFx1MDAyNlxcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcXG4gXFx0XFx0XFx0XFx0Y2xlYXJfZ2FyYmFnZShjdHgsIHRtcCwgbS1cXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcXG4rXFx0XFx0XFx0aWYgKGFyZW5hX2FyZylcXG4rXFx0XFx0XFx0XFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XFxuIFxcdFxcdFxcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7XFxuIFxcdFxcdFxcdHNvZmYgKz0gODtcXG4gXFx0XFx0XFx0ZG9mZiArPSA4O1xcbkBAIC0yNjA0LDggKzI2OTUsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuIFxcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcXG4gXFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQsIGNvb2tpZV9iYXJnc19vZmY7XFxuIFxcdGludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7XFxuK1xcdHU2NCBhcmVuYV9iYXNlO1xcbiBcXHR1NjQgZnVuY19tZXRhO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5XFxuK1xcdCAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZVxcbitcXHQgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpXFxuK1xcdCAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmVcXG4rXFx0ICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy5cXG4rXFx0ICovXFxuK1xcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAoZmxhZ3MgXFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XFxuK1xcbitcXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XFxuK1xcbiBcXHQvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDpcXG4gXFx0ICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXVxcbiBcXHQgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdXFxuQEAgLTI3MjEsNyArMjgyNSw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbiBcXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xcbiBcXG4gXFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cXG4tXFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTtcXG4rXFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTtcXG4gXFxuIFxcdC8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqL1xcbiBcXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcXG5AQCAtMjc2OSw4ICsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbi1cXHRcXHQvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi9cXG4tXFx0XFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpO1xcbitcXHRcXHQvKiB0aGUgb3JpZ2luYWwgZnVuYyB0YWtlcyBrZXJuZWwgYWRkcmVzc2VzLCBuZXZlciBjb252ZXJ0ZWQgb25lcyAqL1xcbitcXHRcXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7XFxuIFxcdFxcdC8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqL1xcbiBcXHRcXHRlbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTtcXG4gXFx0XFx0ZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC02LDcgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFxcXCJcXG4gXFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXFxuIC8qXFxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXFxuICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxcbkBAIC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpXFxuIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxcbiB7XFxuIFxcdC8qXFxuLVxcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cXG4tXFx0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxcbi1cXHQgKiBhcmd1bWVudHNcXFwiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cXG4rXFx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmRcXG4rXFx0ICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydFxcbitcXHQgKiBhcmVuYSBhcmd1bWVudHNcXFwiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cXG4gXFx0ICovXFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9hcmdcXFwiKSlcXG4gXFx0XFx0YXJlbmFfYXJnKCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9hcmdfZmFpbFxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuQEAgLTI3LDYgKzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoO1xcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxcbiB7XFxuQEAgLTcwLDYgKzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXFxuICAqL1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTExMSw2ICsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4gaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcXG4ge1xcbkBAIC0xNDIsNiArMTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcXG4ge1xcbkBAIC0xNjksNiArMTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXFxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcXG4ge1xcbkBAIC0xODksNiArMTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX2ZhaWx1cmUgX19tc2coXFxcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXCIpXFxuIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE5OCw2ICsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcXFwiKVxcbiBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTIxMyw2ICsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcXCIpXFxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTIyMyw2ICsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcXG4gI2Vsc2VcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19kZXNjcmlwdGlvbihcXFwiYXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcXG5pbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbkBAIC0zMiw2ICszMiwxMCBAQCBfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVkaSwgJWVkaVxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcmRpXFxcIilcXG4gX19qaXRlZChcXFwiLi4uXFxcIilcXG4gX19qaXRlZChcXFwiXFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX2FyY2hfYXJtNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDAsIHgyOCwgdzAsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHR7eyhibHxtb3YpXFx0Lip9fVxcXCIpXFxuIF9fc3VjY2Vzc1xcbiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTQ4LDYgKzUyLDEyIEBAIF9faml0ZWQoXFxcIlxcdHRlc3RsXFx0JWVkaSwgJWVkaVxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkaVxcXCIpXFxuIF9faml0ZWQoXFxcIkwwOlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19hcmNoX2FybTY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdlxcdHcwLCB3MFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNielxcdHcwLCBMMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgwLCB4MjgsIHcwLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiTDA6XFx0e3suKn19XFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcXG4ge1xcbkBAIC03Miw2ICs4MiwxNiBAQCBfX2ppdGVkKFxcXCJcXHR0ZXN0bFxcdCVyOGQsICVyOGRcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRqZVxcdEwwXFxcIilcXG4gX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyOFxcXCIpXFxuIF9faml0ZWQoXFxcIkwwOlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19hcmNoX2FybTY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgwLCB4MjgsIHcwLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDEsIHgyOCwgdzEsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4MiwgeDI4LCB3MiwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgzLCB4MjgsIHczLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92XFx0dzQsIHc0XFxcIilcXG4rX19qaXRlZChcXFwiXFx0Y2J6XFx0dzQsIEwwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDQsIHgyOCwgdzQsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJMMDpcXHR7ey4qfX1cXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC01OSwxMSArNTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9tdWx0aXNsb3RcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudFxcbitcXHQgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLlxcbitcXHQgKi9cXG4rXFx0aWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpXFxuK1xcdFxcdHJldHVybiAweGJhZDtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcXG4gXFx0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXFxuIFxcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxcbiBcXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcXG4rXFx0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYixcXG4gfTtcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuQEAgLTEwOSw2ICsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KVxcbiBcXHRpZiAoKnZhbCAhPSA0NClcXG4gXFx0XFx0cmV0dXJuIDk7XFxuIFxcbitcXHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KCh1NjQgKil2YWwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gMTA7XFxuK1xcdGlmICgqdmFsICE9IDQ1KVxcbitcXHRcXHRyZXR1cm4gMTE7XFxuK1xcbiBcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbkBAIC00MDIsMTIgKzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdTY0ICpwdHJfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xcbiBcXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxcbiBcXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxcbiBcXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXFxuIFxcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcXG4gXFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxcbitcXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCxcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcXG5AQCAtNDQxLDYgKzQ0OCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKVxcbiBcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcXG4gfVxcbiBcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCA9IHsgLmEgPSAxMSwgLmIgPSAyMiB9O1xcbitcXG4rXFx0cmV0dXJuIHN0X29wczMtXFx1MDAzZXRlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpO1xcbit9XFxuK1xcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYnRmX3R5cGVfdGFnXzEge1xcbiBcXHRpbnQgYTtcXG4gfTtcXG5AQCAtODUyLDYgKzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXG5AQCAtMTAzLDYgKzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XFxuIFxcdGludCAoKnRlc3RfMSkodm9pZCk7XFxuIH07XFxuIFxcbisvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovXFxuK3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcXG4rXFx0dTY0IGE7XFxuK1xcdHU2NCBiO1xcbit9O1xcbitcXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xcbiBcXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xcbiBcXHRpbnQgKCp0ZXN0XzIpKHZvaWQpO1xcbkBAIC0xMTIsNiArMTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xcbiBcXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xcbiBcXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxcbiBcXHRcXHRcXHRcXHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcXG4rXFx0LyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovXFxuK1xcdGludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcXG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XFxuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XFxuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gXFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcXG4gXFx0XFx0XFx0XFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NTowMy4xOTQ2NDY0NTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQ3NjM4MTQ2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjI6NDU6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggMTAwNGViMGJlYzYxNy4uZDljYzJhYjFjZjAxOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0zMDEsOSArMzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICB9XG4gXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbi1wcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXG4rb3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQVxuK3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cbiBcbiBUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuaW5kZXggY2MwNzAyZmE2NGE3OS4uNDU0OGU4MDE1ODA4ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuQEAgLTIwNSw2ICsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xuIH07XG4gXG4rLyogb3B0aW9uIGZpZWxkIG9mIGFkZC9zdWIgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xuK2VudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIHtcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCxcbit9O1xuK1xuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sXG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcbkBAIC0zNzgsNiArMzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCxcdDB4N0YyMDAwMDAsIDB4MEIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkcyxcdDB4N0YyMDAwMDAsIDB4MkIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLFx0MHg3RjIwMDAwMCwgMHg0QjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLFx0MHg3RjIwMDAwMCwgMHg2QjAwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFx0MHg3RjIwMDAwMCwgMHgwQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcdDB4N0YyMDAwMDAsIDB4MkIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCxcdDB4N0YyMDAwMDAsIDB4NEIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXHQweDdGMjAwMDAwLCAweDZCMjAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1zdWIsXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXHQweDdGRTBGQzAwLCAweDFBQzAwODAwKVxuQEAgLTYzNyw2ICs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0XHRcdCBpbnQgc2hpZnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxuK1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xuaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbGliL2luc24uY1xuKysrIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5AQCAtOTg2LDYgKzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sIHNoaWZ0KTtcbiB9XG4gXG4rLypcbisgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6XG4rICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcbisgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy5cbisgKi9cbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcbit7XG4rXHR1MzIgaW5zbjtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3ViX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHByX2VycihcIiVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHR5cGUpO1xuK1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbitcdH1cbitcbitcdHN3aXRjaCAodmFyaWFudCkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzY0QklUOlxuK1x0XHRpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdmFyaWFudCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aWYgKHNoaWZ0IFx1MDAzYyAwIHx8IHNoaWZ0IFx1MDAzZSA0KSB7XG4rXHRcdHByX2VycihcIiVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCBzaGlmdCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xuK1xuK1x0Lyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi9cbitcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXG4rXHRcdFx0XHRcdCAgICAgKGV4dGVuZCBcdTAwM2NcdTAwM2MgMykgfCBzaGlmdCk7XG4rfVxuK1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5AQCAtMjQzLDYgKzI0MywxNyBAQFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cbiAjZGVmaW5lIEE2NF9DTVAoc2YsIFJuLCBSbSkgQTY0X1NVQlMoc2YsIEE2NF9aUiwgUm4sIFJtKVxuIFxuKy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rI2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXG4rXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcbisvKiBSZCA9IFJuICsgKEVYVChSbSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSAqL1xuKyNkZWZpbmUgQTY0X0FERF9FWFQoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQpIFxcXG4rXHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcbisvKiBSZCA9IFJuICsgKHUzMilSbSAqL1xuKyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApXG4rXG4gLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi9cbiAjZGVmaW5lIEE2NF9EQVRBMShzZiwgUmQsIFJuLCB0eXBlKSBhYXJjaDY0X2luc25fZ2VuX2RhdGExKFJkLCBSbiwgXFxcbiBcdEE2NF9WQVJJQU5UKHNmKSwgQUFSQ0g2NF9JTlNOX0RBVEExXyMjdHlwZSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkMTRkMjk3ZWJiOTY3Li4xY2QzMjdkMjEzZTM0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTI0OSw2ICsxMjQ5LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3RcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcyxcbisgKiB4TiA9IGtlcm5fdm1fc3RhcnQgKyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcbisgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWRcbisgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuXG4rICovXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcbitcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4rXHRpbnQgaTtcbitcbitcdGZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGN0eC1cdTAwM2Vwcm9nLCBpbnNuKTtcbitcdGlmICghZm0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcbitcdFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgKyBpXTtcbitcdFx0dTggZmxhZ3MgPSBmbS1cdTAwM2VhcmdfZmxhZ3NbaV07XG4rXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cdTAwM2VhcmVuYV92bV9zdGFydCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcbitcdFx0XHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuK1x0XHRcdGVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7XG4rXHRcdFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4rXHRcdFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XG4rXHRcdH1cbitcdFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi5cbiAgKiBSZXR1cm5zOlxuICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLlxuQEAgLTE2NzEsNiArMTcwOCwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZ1bmNfYWRkcl9maXhlZCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0XHRlbWl0X2NhbGwoZnVuY19hZGRyLCBjdHgpO1xuIFx0XHQvKlxuIFx0XHQgKiBDYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKCkgaXMgZW1pdHRlZCBieSB0aGVcbkBAIC0yMzM1LDYgKzIzNzcsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0aWYgKCFhYXJjaDY0X2luc25fY29weShkc3QsIHNyYywgbGVuKSlcbkBAIC0yNTA4LDM0ICsyNTU1LDc2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2dhcmJhZ2Uoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJlZywgaW50IGVmZmVjdGl2ZV9ieXRlcylcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG9cbisgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XG4rICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXG4rICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlXG4rICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXG4rICogcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcbit7XG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKGRzdCAhPSBzcmMpXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcbitcdFx0Lyogc2tpcCB0aGUgc3VidHJhY3Rpb24gc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XG4rXHRcdHNyYyA9IGRzdDtcbitcdH1cbitcdGVtaXQoQTY0X1NVQigwLCBkc3QsIHNyYywgYmFzZV9sbyksIGN0eCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuLVx0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbilcbitcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbitcdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgcmVnO1xuLVx0aW50IGRvZmY7XG4tXHRpbnQgc29mZjtcbi1cdGludCBzbG90cztcbiBcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcbitcdHU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07XG4rXHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcbitcbitcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBiYXNlIHRha2UgcGFydCBpbiB0aGUgc3VidHJhY3Rpb24gKi9cbitcdGlmIChhcmVuYV9iYXNlKVxuK1x0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbiBcbiBcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxuIFx0ICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxuIFx0ICovXG4tXHRmb3IgKHJlZyA9IDA7IHJlZyBcdTAwM2MgYS1cdTAwM2VyZWdzX2Zvcl9hcmdzOyByZWcrKykge1xuLVx0XHRlbWl0KGZvcl9jYWxsX29yaWdpbiA/XG4tXHRcdCAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6XG4tXHRcdCAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSxcbi1cdFx0ICAgICBjdHgpO1xuLVx0XHRiYXJnc19vZmYgKz0gODtcbitcdGZvciAoaSA9IDAsIHJlZyA9IDA7IGkgXHUwMDNjIGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbitcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbitcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbitcdFx0XHRpZiAoZm9yX2NhbGxfb3JpZ2luKSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcbitcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pO1xuK1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fVxuK1x0XHRcdHJlZysrO1xuK1x0XHRcdGJhcmdzX29mZiArPSA4O1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICsgMzIgKi9cbitcdC8qXG4rXHQgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZVxuK1x0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXG4rXHQgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvblxuK1x0ICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgKyAzMi4gQSBzdHJ1Y3Rfb3BzXG4rXHQgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvXG4rXHQgKiB0aGV5IHN0YXJ0IGF0IEZQICsgMTYuXG4rXHQgKi9cbitcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcbiBcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXG4gXHRmb3IgKGkgPSBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbiBcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbiBcdFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcdTAwM2M9IDE2LCBzbyBzbG90cyBlcXVhbHMgMSBvciAyICovXG4gXHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG5AQCAtMjU0NSw2ICsyNjM0LDggQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKHNsb3RzID09IDAgXHUwMDI2XHUwMDI2ICFmb3JfY2FsbF9vcmlnaW4pXG4gXHRcdFx0XHRjbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLVx1MDAzZWFyZ19zaXplW2ldICUgOCk7XG4rXHRcdFx0aWYgKGFyZW5hX2FyZylcbitcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHRtcCwgbnVsbGFibGUsIGJhc2VfbG8pO1xuIFx0XHRcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7XG4gXHRcdFx0c29mZiArPSA4O1xuIFx0XHRcdGRvZmYgKz0gODtcbkBAIC0yNjA0LDggKzI2OTUsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRib29sIGlzX3N0cnVjdF9vcHMgPSBpc19zdHJ1Y3Rfb3BzX3RyYW1wKGZlbnRyeSk7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjtcbiBcdGludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7XG4rXHR1NjQgYXJlbmFfYmFzZTtcbiBcdHU2NCBmdW5jX21ldGE7XG4gXG4rXHQvKlxuK1x0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5XG4rXHQgKiBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHIGJlY2F1c2VcbitcdCAqIEBmdW5jX2FkZHIuIEFyZW5hIGNvbnZlcnNpb24gcmVsaWVzIG9uIHRoaXM6IGJwZl90cmFtcF9hcmVuYV9iYXNlKClcbitcdCAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmVcbitcdCAqIG5ldmVyIGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIGNvbnZlcnRlZCBhcmd1bWVudHMuXG4rXHQgKi9cbitcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbitcbitcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcbitcbiBcdC8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXVxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgRlAgICAgICAgICAgICAgICAgXVxuQEAgLTI3MjEsNyArMjgyNSw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0c3RvcmVfZnVuY19tZXRhKGN0eCwgZnVuY19tZXRhLCBmdW5jX21ldGFfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgYXJncyBmb3IgYnBmICovXG4tXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UpO1xuK1x0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTtcbiBcbiBcdC8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqL1xuIFx0ZW1pdChBNjRfU1RSNjRJKEE2NF9SKDE5KSwgQTY0X1NQLCByZWdzX29mZiksIGN0eCk7XG5AQCAtMjc2OSw4ICsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHR9XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuLVx0XHQvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi9cbi1cdFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpO1xuK1x0XHQvKiB0aGUgb3JpZ2luYWwgZnVuYyB0YWtlcyBrZXJuZWwgYWRkcmVzc2VzLCBuZXZlciBjb252ZXJ0ZWQgb25lcyAqL1xuK1x0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7XG4gXHRcdC8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqL1xuIFx0XHRlbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTtcbiBcdFx0ZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCA5NDBlYzJjZGEwZDUyLi43ZjlmNTRiYTNmYmU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5AQCAtNiw3ICs2LDcgQEBcbiAjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfYXR0YWNoLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oXCJcbiBcbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gLypcbiAgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZClcbiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbiB7XG4gXHQvKlxuLVx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuLVx0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcbi1cdCAqIGFyZ3VtZW50c1wiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbitcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgYW5kXG4rXHQgKiBhcm02NCBvbmx5LiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydFxuK1x0ICogYXJlbmEgYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuIFx0ICovXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcbisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9hcmdcIikpXG4gXHRcdGFyZW5hX2FyZygpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9hcmdfZmFpbFwiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5pbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5AQCAtMjcsNiArMjcsNyBAQCB2b2xhdGlsZSB1NjQgc3Rhc2g7XG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiB7XG5AQCAtNzAsNiArNzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiAgKi9cbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtMTExLDYgKzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4ge1xuQEAgLTE0Miw2ICsxNDUsNyBAQCBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXG4ge1xuQEAgLTE2OSw2ICsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4ge1xuQEAgLTE4OSw2ICsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVwiKVxuIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIHtcbkBAIC0xOTgsNiArMjA0LDcgQEAgaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclwiKVxuIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4ge1xuQEAgLTIxMyw2ICsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFwiKVxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuIHtcbkBAIC0yMjMsNiArMjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4gI2Vsc2VcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZGVzY3JpcHRpb24oXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTMyLDYgKzMyLDEwIEBAIF9faml0ZWQoXCJcdG1vdmxcdCVlZGksICVlZGlcIilcbiBfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4gX19qaXRlZChcIi4uLlwiKVxuIF9faml0ZWQoXCJcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wiKVxuK19faml0ZWQoXCJcdHt7KGJsfG1vdilcdC4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC00OCw2ICs1MiwxMiBAQCBfX2ppdGVkKFwiXHR0ZXN0bFx0JWVkaSwgJWVkaVwiKVxuIF9faml0ZWQoXCJcdGplXHRMMFwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbiBfX2ppdGVkKFwiTDA6XHRjYWxscVx0e3suKn19XCIpXG4rX19hcmNoX2FybTY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG1vdlx0dzAsIHcwXCIpXG4rX19qaXRlZChcIlx0Y2J6XHR3MCwgTDBcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIkwwOlx0e3suKn19XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxuIHtcbkBAIC03Miw2ICs4MiwxNiBAQCBfX2ppdGVkKFwiXHR0ZXN0bFx0JXI4ZCwgJXI4ZFwiKVxuIF9faml0ZWQoXCJcdGplXHRMMFwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyOFwiKVxuIF9faml0ZWQoXCJMMDpcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDEsIHgyOCwgdzEsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgyLCB4MjgsIHcyLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MywgeDI4LCB3MywgdXh0d1wiKVxuK19faml0ZWQoXCJcdG1vdlx0dzQsIHc0XCIpXG4rX19qaXRlZChcIlx0Y2J6XHR3NCwgTDBcIilcbitfX2ppdGVkKFwiXHRhZGRcdHg0LCB4MjgsIHc0LCB1eHR3XCIpXG4rX19qaXRlZChcIkwwOlx0e3suKn19XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC01OSwxMSArNTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwic3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdFwiKVxuK2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbit7XG4rXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdO1xuK1xuK1x0YXJlbmFfdG91Y2grKztcbitcdC8qXG4rXHQgKiBUaGUgMTYtYnl0ZSBzdHJ1Y3Qgb2NjdXBpZXMgY3R4WzBdIGFuZCBjdHhbMV0sIHNvIEBwdHIgaXMgYXJndW1lbnRcbitcdCAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuXG4rXHQgKi9cbitcdGlmIChjdHhbMF0gIT0gMTEgfHwgY3R4WzFdICE9IDIyKVxuK1x0XHRyZXR1cm4gMHhiYWQ7XG4rXHQqcHRyICs9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwiLnN0cnVjdF9vcHMubGlua1wiKVxuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4gXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcbiBcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4rXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLFxuIH07XG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuQEAgLTEwOSw2ICsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KVxuIFx0aWYgKCp2YWwgIT0gNDQpXG4gXHRcdHJldHVybiA5O1xuIFxuK1x0LyogYSBtdWx0aS1zbG90IGFyZyBwcmVjZWRlcyB0aGUgYXJlbmEgcG9pbnRlciBoZXJlICovXG4rXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gMTA7XG4rXHRpZiAoKnZhbCAhPSA0NSlcbitcdFx0cmV0dXJuIDExO1xuK1xuIFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuICNlbmRpZlxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IGE2MTMzZjc1MjFmMzQuLjkzNjZhM2M1NzhmMTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtNDAyLDEyICs0MDIsMTkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCxcbitcdFx0XHRcdFx0XHQgIHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHtcbiBcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXG4gXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxuIFx0LnRlc3RfYXJlbmEgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxuK1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3QsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXG5AQCAtNDQxLDYgKzQ0OCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKVxuIFx0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcbiB9XG4gXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCA9IHsgLmEgPSAxMSwgLmIgPSAyMiB9O1xuK1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7XG4rfVxuK1xuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XG4gXHRpbnQgYTtcbiB9O1xuQEAgLTg1Miw2ICs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5pbmRleCAzM2YyYWY1YjcwODU3Li4yMTBiOTE5MjkwY2MyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuQEAgLTEwMyw2ICsxMDMsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiB9O1xuIFxuKy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi9cbitzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciB7XG4rXHR1NjQgYTtcbitcdHU2NCBiO1xuK307XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG5AQCAtMTEyLDYgKzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHtcbiBcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4gXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuIFx0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4rXHQvKiBhIG11bHRpLXNsb3QgbGVhZGluZyBhcmcsIHNvIEBwdHIgaXMgbm90IGF0IHRoZSBzbG90IGl0cyBhcmcgaW5kZXggc3VnZ2VzdHMgKi9cbitcdGludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjNDM4M2FjYjUzYzExLi43ZDgxMDcwZWVmZTdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTEyMyw2ICsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsXG4gXHRcdFx0XHRfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NTowMy4xOTQ2NDc4NjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTIwNTkyMDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEFyZW5hIEFyZ3VtZW50cyBpbiBBUk02NCBKSVQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgd2l0aGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZyBhbmQgcGlucG9pbnQgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCBhbmQgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oYCwgYW5kIHRoZXJlIGFyZSBzb21lIHRlc3RzIGFkZGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC5cblxuVGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIHdoaWNoIGFyZSBjYWxsZWQgZHVyaW5nIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoaXMgbWFrZXMgaXQgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biB0byBzcGVjaWZpYyBmdW5jdGlvbnMuIEluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIEkgc2VlIGEgZmV3IG9wdGlvbnM6IGBicGZfaW50X2ppdF9jb21waWxlYCBsb29rcyBnZW5lcmljLCBhbmQgYGJ1aWxkX2luc25gIHNlZW1zIHRvbyBicm9hZC4gSG93ZXZlciwgYHByZXBhcmVfdHJhbXBvbGluZWAgaXMgbW9kaWZpZWQgdG8gaGFuZGxlIGFyZW5hIGFyZ3VtZW50cywgYW5kIHRoZW4gdGhlcmUgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGFuZCBgc2F2ZV9hcmdzYC5cblxuTG9va2luZyBhdCBgYXJjaC9hcm02NC9saWIvaW5zbi5jYCwgSSBzZWUgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgLiBJbXBvcnRhbnRseSwgdGhpcyBvbmUgaXNuJ3Qgc3RhdGljLiBBZnRlciBhIHF1aWNrIHNjYW4gYmFjayBhdCBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBJIGFsc28gc2VlIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIG5ld2x5IGFkZGVkIGFuZCBub24tc3RhdGljLlxuXG5Pa2F5LCB0aGUgSklUIGNvbXBpbGVyIGZ1bmN0aW9ucyBhcmUgbW9zdGx5IHN0YXRpYyBpbnRlcm5hbGx5LCBzbyB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGxpa2VseSBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBjYWxscyBgcHJlcGFyZV90cmFtcG9saW5lYCwgc28gdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy5cblxuQmFzZWQgb24gdGhhdCwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGxvb2tzIGxpa2UgYSBnb29kIGZvY3VzLCBhcyBpdCdzIGEgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb24uIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGEgbmV3IGZ1bmN0aW9uIGFzIHdlbGwuIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19CUEZfSklUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgQ09ORklHX0FSTTY0YCBhcmUgcmVxdWlyZWQuXG5cblRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgbmV3IGZ1bmN0aW9uLCBJJ2xsIHJ1biBhIHF1aWNrIGdyZXAgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NToxNC40MDA1NzA0MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjEzOTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oPTY1MD11MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1NS1cXHRcXHRcXHRcXHRcXHQgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oOjY1Njp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgtNjU3LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxcbi0tXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jPTkzMT11MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4tLVxcbmFyY2gvYXJtNjQvbGliL2luc24uYy05OTMtICovXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jOjk5NDp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5NS1cXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaC0yNDctI2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0Lmg6MjQ4OlxcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaC0yNDktXFx0XFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NToxNi4yNjI3MTY0MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE1MTAzODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIEJQRiBhcmVuYSBhcmd1bWVudCBzdXBwb3J0IHdpdGhpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBUaGF0J3MgYSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbi4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlIGtleSBtb2RpZmljYXRpb25zIGFyZSBjb25jZW50cmF0ZWQgaW4gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgYGFyY2gvYXJtNjQvbGliL2luc24uY2AuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJJ2xsIHdhbnQgdG8gZGl2ZSBkZWVwIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb25zIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyBhcmVuYSBhcmd1bWVudHMgd2l0aGluIHRoZSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGFuZCBmZWF0dXJlIGRldGVjdGlvbiwgcmVzcGVjdGl2ZWx5LlxuXG5BbmQgb2YgY291cnNlLCBnaXZlbiB0aGlzIGlzIGEgSklUIGNvbXBpbGVyIGNoYW5nZSwgZnV6emluZyBpcyBlc3NlbnRpYWwuIEFueSBjaGFuZ2UgbGlrZSB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gcmVjb21tZW5kIGFwcHJvcHJpYXRlIGZ1enppbmcgc3RyYXRlZ2llcy5cblxuVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1hdHRlciBoZXJlIGFyZSBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAsIGNvbmZpcm1pbmcgdGhlc2UgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhlIHRleHQgc2F5cyBpdCdzIGJlaW5nIG1vZGlmaWVkIGFzIGl0IGNhbGxzIGBwcmVwYXJlX3RyYW1wb2xpbmVgLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNoYW5nZXMgY2FzY2FkZSB0aHJvdWdoIHRoZSB0cmFtcG9saW5lIHNldHVwLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBpZiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRyYW1wb2xpbmUgc2V0dXAgaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgYXJlbmEgYXJndW1lbnQgbWVjaGFuaXNtLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHJlcXVpcmVzIGEgY2FyZWZ1bCByZXZpZXcgb2YgdGhlIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCB0aGUgZmVhdHVyZSBkZXRlY3Rpb24gbG9naWMsIGFuZCB0aGUgdHJhbXBvbGluZSBzZXR1cCwgd2l0aCBhIHN0cm9uZyBlbXBoYXNpcyBvbiBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NToyMi4yNzc4MjI1MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwNjM2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTY9c3RhdGljIHZvaWQgc3RvcmVfZnVuY19tZXRhKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY2MS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyNjYyOi8qIEJhc2VkIG9uIHRoZSB4ODYncyBpbXBsZW1lbnRhdGlvbiBvZiBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNjYzLSAqXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yOTk3PWludCBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwMS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzozMDAyOmludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMDMtXFx0XFx0XFx0XFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ1OjIyLjMyNzg5MDExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNjI3NTE5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEJQRiBUcmFtcG9saW5lIGFuZCBKSVQgQ29tcGlsYXRpb24gUmVhZGluZXNzKipcblxuQWxyaWdodCwgc28gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50LCBnb29kLiBUaGF0J3Mgb25lIGtleSBwaWVjZSBpbiBwbGFjZS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGlzIGlzIHRoZSBiaWcgb25lLCB0aGUgY29yZSBvZiB3aGV0aGVyIHdlIGNhbiBldmVuIHRoaW5rIGFib3V0IEpJVCBjb21waWxhdGlvbiBmb3IgQlBGIGNvZGUgb24gdGhpcyBhcmNoaXRlY3R1cmUuIElmIHRoYXQgZnVuY3Rpb24gZXhpc3RzIGFuZCBpcyBhY2Nlc3NpYmxlLCB3ZeKAmXJlIGluIGEgbXVjaCBiZXR0ZXIgcG9zaXRpb24gdG8gcHJvY2VlZC4gV2l0aG91dCBpdCwgd2UncmUgc3R1Y2sgaW50ZXJwcmV0aW5nLCBhbmQgd2UgYWxsIGtub3cgaG93IHRoYXQgaW1wYWN0cyBwZXJmb3JtYW5jZS4gU28sIGxldOKAmXMgc2VlIGlmIHRoYXQgaG9vayBpcyBhdmFpbGFibGUuLi4gdGhhdCdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA3NCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ1OjUwLjM5MDY0NTEyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA3NTc1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTMzPXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTM5LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxNDA6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDU6NTAuODIxNDA3NDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA4NDQ0MjA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGxheSBvdXQgbXkgdGhpbmtpbmcgaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHBpbiBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGIGFyZW5hIHN0dWZmLiBJJ3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGZlYXR1cmVzIHRoYXQgcmVsYXRlIGRpcmVjdGx5IHRvIHRoZSBhcmVuYSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGFzIGZvciB0aGUgY29uZmlncywgSSdtIHByZXR0eSBzdXJlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgaW52b2x2ZWQsIGFzIHRoZXkgb2Z0ZW4gYXJlIHdpdGggQlBGLXJlbGF0ZWQgZmVhdHVyZXMuIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBhcmVuYSBtZWNoYW5pc20gaXRzZWxmLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBBIGBncmVwIEFSRU5BYCBzZWFyY2ggaW4gYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIHNob3VsZCBnaXZlIG1lIGFueSBhcmVuYS1zcGVjaWZpYyBjb25maWdzIEkgbWlnaHQgaGF2ZSBvdmVybG9va2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ2NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjowNy45MDU4NTM2MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTg0NDMyNTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfQVJFTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjA5LjY2NDMwMzg4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIyMTczMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSB0YWxraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEFSRU5BIGluIHRoZSBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYEFSRU5BYCBpcyB1c2VkIHdpdGhpbiBvdXIgY29uZmlndXJhdGlvbiBlY29zeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBmZWF0dXJlIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyBsaXZlcy4gTXkgdGhvdWdodCBpcyB0byBydW4gYSBxdWljayBgZ3JlcGAgZm9yIHRoZSBzdHJpbmcgYEFSRU5BYC4gSXQncyBhIGZ1bmRhbWVudGFsIG1vdmUg4oCTIHF1aWNrLCBkaXJ0eSwgYnV0IG9mdGVuIGhpZ2hseSBlZmZlY3RpdmUgZm9yIGFuIGluaXRpYWwgZXhwbG9yYXRpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBtYXAgb2Ygd2hlcmUgYEFSRU5BYCBpcyBkZWZpbmVkLCB3aGljaCBmZWF0dXJlcyBkZXBlbmQgb24gaXQsIGFuZCBob3BlZnVsbHkgc29tZSBjb250ZXh0IGFyb3VuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQVJFTkEsIGFuZCBJIGNhbiBzdGFydCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg4NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjEzLjQ4NjQ3OTU2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNTA1MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSRU5BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MTMuNTM4NTM2NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MTkxMTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uIG15IGluaXRpYWwgYXNzdW1wdGlvbiBhYm91dCBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBCUEYgYXJlbmEgbWlnaHQgYmUgaW5jb3JyZWN0LiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGFyZW5hJ3MgYmVoYXZpb3IgaXMgaW50ZXJ0d2luZWQgd2l0aCB0aGUgYnJvYWRlciBgQlBGX1NZU0NBTExgIG1lY2hhbmlzbSwgcmF0aGVyIHRoYW4gaGF2aW5nIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24uXG5cblRvIGNvbmZpcm0gdGhpcyBzdXNwaWNpb24sIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBJZiB0aGUgYXJlbmEgaGFzIGl0cyBvd24gZGVkaWNhdGVkIHNvdXJjZSBmaWxlLCB0aGF0IHdvdWxkIHByb3ZpZGUgYSBwcmV0dHkgZGVmaW5pdGl2ZSBhbnN3ZXIsIGFuZCBhIHBsYWNlIHRvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiwgb24gd2hldGhlciBpdCdzIGdvdCBhIHVuaXF1ZSBjb25maWcuIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHdlbGwgdGhlbiB0aGF0IG5hcnJvd3MgZG93biB0aGUgb3B0aW9ucyBzaWduaWZpY2FudGx5LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MTcuMDgwNDUxODY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc1NDg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTYtLypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTc6ICogYnBmX2FyZW5hIGlzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGJldHdlZW4gYnBmIHByb2dyYW0gYW5kXFxua2VybmVsL2JwZi9hcmVuYS5jLTE4LSAqIHVzZXIgc3BhY2UgcHJvY2Vzcy5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMi0gKiBrZXJuX3ZtX3N0YXJ0IGZmZmZjOTAwMDFlNjkwMDAgLy8gcGlja2VkIGJ5IGdldF92bV9hcmVhKClcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjM6ICogRm9yIHVzZXIgc3BhY2UgYWxsIHBvaW50ZXJzIHdpdGhpbiB0aGUgYXJlbmEgYXJlIG5vcm1hbCA4LWJ5dGUgYWRkcmVzc2VzLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNC0gKiBJbiB0aGlzIGV4YW1wbGUgN2Y3ZDI2MjAwMDAwIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIChwZ29mZj0wKS5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMC0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMTogKiBCUEYgSklUcyBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gYWNjZXNzIGFyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMi0gKiAgIG1vdiBlYXgsIGVheCAgLy8gZWF4IGhhcyBsb3dlciAzMi1iaXQgb2YgdXNlciBwb2ludGVyXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTpzdHJ1Y3QgYnBmX2FyZW5hIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTItXFx0c3RydWN0IGJwZl9tYXAgbWFwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5LVxcdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjA6XFx0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxLVxcdHU2NCBucl9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9pcnEoc3RydWN0IGlycV93b3JrICppdyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3NTpzdHJ1Y3QgYXJlbmFfZnJlZV9zcGFuIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYtXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04MC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODE6dTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODIte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo4MzpcXHRyZXR1cm4gYXJlbmEgPyAodTY0KSAobG9uZykgYXJlbmEtXFx1MDAzZWtlcm5fdm0tXFx1MDAzZWFkZHIgKyBHVUFSRF9TWiAvIDIgOiAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy04NC19XFxua2VybmVsL2JwZi9hcmVuYS5jLTg1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4Njp1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy04Ny17XFxua2VybmVsL2JwZi9hcmVuYS5jOjg4OlxcdHJldHVybiBhcmVuYSA/IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0IDogMDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODktfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTkxLS8qKlxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MjogKiBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQgLSBrZXJuX3ZtX3N0YXJ0IGxvb2t1cCBieSBzdHJ1Y3QgYnBmX21hcCAqXFxua2VybmVsL2JwZi9hcmVuYS5jLTkzLSAqIEBtYXA6IGEgQlBGX01BUF9UWVBFX0FSRU5BIG1hcFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2LSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5Nzp1NjQgYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTk4LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTk6XFx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAwLX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDItLyoqXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwMzogKiBicGZfcHJvZ19hcmVuYSAtIHJldHVybiB0aGUgYnBmX21hcCBvZiB0aGUgYXJlbmEgcmVmZXJlbmNlZCBieSBAcHJvZ1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQtICogQHByb2c6IGEgbG9hZGVkIEJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNS0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDY6ICogVGhlIHZlcmlmaWVyIGVuZm9yY2VzIGF0IG1vc3Qgb25lIGFyZW5hIHBlciBwcm9ncmFtIGFuZCBzdG9yZXMgaXQgaW5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3OiAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEuIFJldHVybiB0aGF0IGFyZW5hJ3MgdW5kZXJseWluZyBicGZfbWFwLCBvciBOVUxMIGlmXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwODogKiBAcHJvZyBkb2VzIG5vdCByZWZlcmVuY2UgYW4gYXJlbmEuXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOS0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwOnN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjExMjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTExMy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTE0OlxcdHJldHVybiBhcmVuYSA/IFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwIDogTlVMTDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE1LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEyMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyMy17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMjc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BvcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEzMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTMyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMzLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjE0MjpzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDMte1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDQ6XFx0cmV0dXJuICh1MzIpKHVhZGRyIC0gKHUzMilhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQ1LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xNDc9c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDg6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTE0OS1cXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjE1NDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU1LVxcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1OD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxODU6XFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZWFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xODYtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTItXFx0ICogV2l0aG91dCBwdGVwX3RyeV9zZXQoKSB0aGVyZSBpcyBubyBhdG9taWMgaW5zdGFsbGVyLCBidXQgc3VjaCBhcmNoZXNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTkzOlxcdCAqIGFsc28gZG8gbm90IHdpcmUgdXAgYnBmX2FyZW5hX2hhbmRsZV9wYWdlX2ZhdWx0KCksIHNvIG5vIHNjcmF0Y2ggcGFnZVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTQtXFx0ICogaXMgZXZlciBpbnN0YWxsZWQgYW5kIHRoZSBzbG90IGlzIGFsd2F5cyBub25lIGhlcmUuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAwLVxcdGQtXFx1MDAzZWkrKztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjAxOlxcdFdSSVRFX09OQ0UoZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzLCBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMgKyAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAyLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMjgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjI5OlxcdCAqIFNraXAgdGhlIHBlci1hcmVuYSBzY3JhdGNoIHBhZ2UuIEEga2VybmVsIGZhdWx0IG9uIGFuIHVuYWxsb2NhdGVkIHVhZGRyXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzEtXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzItXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMzpcXHRpZiAocGFnZSA9PSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjM2LVxcdF9fbGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VwY3BfbGxpc3QsIGQtXFx1MDAzZWZyZWVfcGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzc6XFx0V1JJVEVfT05DRShkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMsIGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcyAtIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzgtXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjQxPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X3NjcmF0Y2hfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI1OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjU5OnN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjEtXFx0LyogUG9wdWxhdGUgaW50ZXJtZWRpYXRlcyBmb3IgdGhlIHJlY292ZXJ5IHJhbmdlICg0IEdpQiArIHVwcGVyIGhhbGYtZ3VhcmQpLiAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyNjI6XFx0cmV0dXJuIGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2My1cXHRcXHRcXHRcXHQgICBTWl80RyArIEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI2NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjktXFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XFxua2VybmVsL2JwZi9hcmVuYS5jOjI3MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjcxLVxcdHU2NCB2bV9yYW5nZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzMtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI3NDpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmEoKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc1LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcXHRhcmVuYSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmFyZW5hKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAxOlxcdGlmICghYXJlbmEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTMwMi1cXHRcXHRnb3RvIGVycjtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMDQ6XFx0YXJlbmEtXFx1MDAzZWtlcm5fdm0gPSBrZXJuX3ZtO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMDU6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSBhdHRyLVxcdTAwM2VtYXBfZXh0cmE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNjpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNzpcXHRcXHRhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgPSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHZtX3JhbmdlO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwOTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YXJlbmEtXFx1MDAzZXZtYV9saXN0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEwOlxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfc3BhbnMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMTE6XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfaXJxLCBhcmVuYV9mcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcXHRJTklUX1dPUksoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEzOlxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIGF0dHIpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNTpcXHRlcnIgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBOVU1BX05PX05PREUsIDEsIFxcdTAwMjZhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE2LVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNzpcXHRcXHRnb3RvIGVycl9mcmVlX2FyZW5hO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxOTpcXHRyYW5nZV90cmVlX2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcXHRlcnIgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCAwLCBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjItXFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjM6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjQ6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXphcF9tdXRleCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyNTpcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjY6XFx0ZXJyID0gcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzA6XFx0cmV0dXJuIFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzEtXFxua2VybmVsL2JwZi9hcmVuYS5jLTMzMi1lcnJfZGVzdHJveV9ydDpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzMzOlxcdHJhbmdlX3RyZWVfZGVzdHJveShcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzM0LWVycl9mcmVlX3NjcmF0Y2g6XFxua2VybmVsL2JwZi9hcmVuYS5jOjMzNTpcXHRfX2ZyZWVfcGFnZShhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM2OmVycl9mcmVlX2FyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzc6XFx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzgtZXJyOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ0LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzQ1OlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gZGF0YTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ2LVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1Ni1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzU3OlxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNjAtXFx0ICogV2UgZG8gbm90IHVwZGF0ZSBwdGUgaGVyZTpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzYxOlxcdCAqIDEuIE5vYm9keSBzaG91bGQgYmUgYWNjZXNzaW5nIGJwZl9hcmVuYSdzIHJhbmdlIG91dHNpZGUgb2YgYSBrZXJuZWwgYnVnXFxua2VybmVsL2JwZi9hcmVuYS5jLTM2Mi1cXHQgKiAyLiBUTEIgZmx1c2hpbmcgaXMgYmF0Y2hlZCBvciBkZWZlcnJlZC4gRXZlbiBpZiB3ZSBjbGVhciBwdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzA6c3RhdGljIHZvaWQgYXJlbmFfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzcxLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcyOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzczLVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM3Ni1cXHQgKiBtbWFwKCkgaG9sZHMgdm1fZmlsZSB3aGljaCBob2xkcyBicGZfbWFwIHJlZmNudC5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc3OlxcdCAqIG11bm1hcCgpIG11c3QgaGF2ZSBoYXBwZW5lZCBvbiB2bWEgZm9sbG93ZWQgYnkgYXJlbmFfdm1fY2xvc2UoKVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzg6XFx0ICogd2hpY2ggd291bGQgY2xlYXIgYXJlbmEtXFx1MDAzZXZtYV9saXN0Llxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNzktXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjM4MDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZhcmVuYS1cXHUwMDNldm1hX2xpc3QpKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzgxLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zODMtXFx0LyogRW5zdXJlIG5vIHBlbmRpbmcgZGVmZXJyZWQgZnJlZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg0OlxcdGlycV93b3JrX3N5bmMoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM4NTpcXHRmbHVzaF93b3JrKFxcdTAwMjZhcmVuYS1cXHUwMDNlZnJlZV93b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzg2LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM5Mi1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzkzOlxcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NDpcXHRcXHRcXHRcXHQgICAgIFNaXzRHICsgR1VBUkRfU1ogLyAyLCBleGlzdGluZ19wYWdlX2NiLCBhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NTpcXHRmcmVlX3ZtX2FyZWEoYXJlbmEtXFx1MDAzZWtlcm5fdm0pO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTY6XFx0cmFuZ2VfdHJlZV9kZXN0cm95KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTc6XFx0X19mcmVlX3BhZ2UoYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5ODpcXHRicGZfbWFwX2FyZWFfZnJlZShhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTM5OS19XFxua2VybmVsL2JwZi9hcmVuYS5jLTQwMC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDAxOnN0YXRpYyB2b2lkICphcmVuYV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDIte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA2OnN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNy1cXHRcXHRcXHRcXHQgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjQyMDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDIyOlxcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cXHUwMDNlbnJfcGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMy19XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDI1PXN0cnVjdCB2bWFfbGlzdCB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MzI6c3RhdGljIGludCByZW1lbWJlcl92bWEoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MzMte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Mi1cXHR2bWwtXFx1MDAzZXphcF9nZW4gPSAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo0NDM6XFx0bGlzdF9hZGQoXFx1MDAyNnZtbC1cXHUwMDNlaGVhZCwgXFx1MDAyNmFyZW5hLVxcdTAwM2V2bWFfbGlzdCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0NC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ0NzpzdGF0aWMgdm9pZCBhcmVuYV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDU0OnN0YXRpYyBpbnQgYXJlbmFfdm1fbWF5X3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1NS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NTk6c3RhdGljIGludCBhcmVuYV92bV9tcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NjQ6c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2NS17XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2Ni1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ2NzpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2OC1cXHRzdHJ1Y3Qgdm1hX2xpc3QgKnZtbCA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3MS1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ3MjpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDczLVxcdC8qIHVwZGF0ZSBsaW5rIGxpc3QgdW5kZXIgbG9jayAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00ODAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy00ODEtXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ4MjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDg5OlxcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkwLVxcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy00OTEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5MjpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ5My1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUwMS1cXHRpZiAocGFnZSkge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1MDI6XFx0XFx0aWYgKHBhZ2UgPT0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAzLVxcdFxcdFxcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjUwOTpcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTE6XFx0aWYgKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEyLVxcdFxcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTU6XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTk6XFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIwOlxcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMS1cXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcXHUwMDI2cGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5OlxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTM2LVxcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTM3OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUzOC1cXHR2bWYtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU0Mi1vdXRfc2lnc2VndjpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQzOlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU0NC1cXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ4OlxcdC5vcGVuXFx0XFx0PSBhcmVuYV92bV9vcGVuLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDk6XFx0Lm1heV9zcGxpdFxcdD0gYXJlbmFfdm1fbWF5X3NwbGl0LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTA6XFx0Lm1yZW1hcFxcdFxcdD0gYXJlbmFfdm1fbXJlbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTE6XFx0LmNsb3NlXFx0XFx0PSBhcmVuYV92bV9jbG9zZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUyOlxcdC5mYXVsdCAgICAgICAgICA9IGFyZW5hX3ZtX2ZhdWx0LFxcbmtlcm5lbC9icGYvYXJlbmEuYy01NTMtfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU5LVxcdHN0cnVjdCBicGZfbWFwICptYXAgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU2MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU2MS1cXHRsb25nIHJldDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NjctXFxua2VybmVsL2JwZi9hcmVuYS5jOjU2ODpcXHQvKiBpZiB1c2VyX3ZtX3N0YXJ0IHdhcyBzcGVjaWZpZWQgYXQgYXJlbmEgY3JlYXRpb24gdGltZSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1Njk6XFx0aWYgKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU3MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3MS1cXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzI6XFx0XFx0aWYgKGxlbiAhPSBhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTczLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzQ6XFx0XFx0aWYgKGFkZHIgIT0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODItXFx0XFx0cmV0dXJuIHJldDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTgzOlxcdGlmIChXQVJOX09OX09OQ0UoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODQtXFx0XFx0LyogY2hlY2tzIGF0IG1hcCBjcmVhdGlvbiB0aW1lIHNob3VsZCBwcmV2ZW50IHRoaXMgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU4OTpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTAte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTE6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01OTItXFxua2VybmVsL2JwZi9hcmVuYS5jOjU5MzpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk0OlxcdGlmIChhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCBcXHUwMDI2XFx1MDAyNiBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCAhPSB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTUtXFx0XFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk2OlxcdFxcdCAqIElmIG1hcF9leHRyYSB3YXMgbm90IHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lIHRoZW5cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk3LVxcdFxcdCAqIDFzdCB1c2VyIHByb2Nlc3MgY2FuIGRvIG1tYXAoTlVMTCwgLi4uKSB0byBwaWNrIHVzZXJfdm1fc3RhcnRcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MDQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYwNTpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIFxcdTAwMjZcXHUwMDI2IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAhPSB2bWEtXFx1MDAzZXZtX2VuZClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA2LVxcdFxcdC8qIGFsbCB1c2VyIHByb2Nlc3NlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBvZiBtbWFwLWVkIHJlZ2lvbiAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjEzOlxcdGlmIChyZW1lbWJlcl92bWEoYXJlbmEsIHZtYSkpXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTY6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTc6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYxOC1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYyMC1cXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjE6XFx0ICogb2YgdXNlcl92bV9zdGFydC4gU2V0IFZNX0RPTlRDT1BZIHRvIHByZXZlbnQgYXJlbmEgVk1BIGZyb21cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIyLVxcdCAqIGJlaW5nIGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzIG9uIGZvcmsuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI0LVxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYyNTpcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZhcmVuYV92bV9vcHM7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYyNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MjgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYyOTpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMwLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMxOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MzM6XFx0aWYgKCh1NjQpb2ZmIFxcdTAwM2U9IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzQtXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYzNTpcXHQqaW1tID0gKHVuc2lnbmVkIGxvbmcpYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYzNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYzOTpCVEZfSURfTElTVF9TSU5HTEUoYnBmX2FyZW5hX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9hcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQwOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NDEtXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XFx0Lm1hcF9hbGxvYyA9IGFyZW5hX21hcF9hbGxvYyxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQzOlxcdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDQ6XFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ1OlxcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDY6XFx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDc6XFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBhcmVuYV9tYXBfZ2V0X25leHRfa2V5LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDg6XFx0Lm1hcF9wdXNoX2VsZW0gPSBhcmVuYV9tYXBfcHVzaF9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDk6XFx0Lm1hcF9wZWVrX2VsZW0gPSBhcmVuYV9tYXBfcGVla19lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTA6XFx0Lm1hcF9wb3BfZWxlbSA9IGFyZW5hX21hcF9wb3BfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlxcdC5tYXBfbG9va3VwX2VsZW0gPSBhcmVuYV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MjpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYXJlbmFfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTM6XFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU0OlxcdC5tYXBfY2hlY2tfYnRmID0gYXJlbmFfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU1OlxcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU2OlxcdC5tYXBfYnRmX2lkID0gXFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU3LX07XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ny0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY4OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY5LVxcdFxcdFxcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY3MS1cXHQvKiB1c2VyX3ZtX2VuZC9zdGFydCBhcmUgZml4ZWQgYmVmb3JlIGJwZiBwcm9nIHJ1bnMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjcyOlxcdGxvbmcgcGFnZV9jbnRfbWF4ID0gKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XFx0dTY0IGtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NzQtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTMtXFx0XFx0XFx0cmV0dXJuIDA7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY5NDpcXHRcXHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHVhZGRyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk1LVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlIHBhZ2VfY250X21heCAtIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY5OS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzAwOlxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MDEtXFx0LyogQ2FwIGFsbG9jYXRpb24gc2l6ZSB0byBLTUFMTE9DX01BWF9DQUNIRV9TSVpFIHNvIGttYWxsb2Nfbm9sb2NrKCkgY2FuIHN1Y2NlZWQuICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA3LVxcdH1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzA4OlxcdGRhdGEuYXJlbmEgPSBhcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA5LVxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTE6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTItXFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXFx0aWYgKHVhZGRyKSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcXHRcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXFx0XFx0aWYgKHJldClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE3LVxcdFxcdFxcdGdvdG8gb3V0X3VubG9ja19mcmVlX3BhZ2VzO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTg6XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTktXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIwOlxcdFxcdHJldCA9IHBnb2ZmID0gcmFuZ2VfdHJlZV9maW5kKFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzIxLVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlPSAwKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjI6XFx0XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MjMtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTcyNy1cXHRyZW1haW5pbmcgPSBwYWdlX2NudDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI4OlxcdHVhZGRyMzIgPSAodTMyKShhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHBnb2ZmICogUEFHRV9TSVpFKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzI5LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM2OlxcdFxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIG5vZGVfaWQsIHRoaXNfYmF0Y2gsIHBhZ2VzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYzLVxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY0OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2NS1cXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NjYtXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY3OlxcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSArIHVhZGRyMzI7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1vdXQ6XFxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzA6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVxcdGlmIChtYXBwZWQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVxcdFxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzczOlxcdFxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc0LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NzYtb3V0X3VubG9ja19mcmVlX3BhZ2VzOlxcbmtlcm5lbC9icGYvYXJlbmEuYzo3Nzc6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc4LW91dF9mcmVlX3BhZ2VzOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc4OC0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzg5OnN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzkwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03OTgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzk5OlxcdCAqIFRha2luZyBtbWFwX3JlYWRfbG9jaygpIHVuZGVyIGFyZW5hLVxcdTAwM2Vsb2NrIHdvdWxkIGRlYWRsb2NrIGFnYWluc3RcXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODAwOlxcdCAqIGFyZW5hX3ZtX2Nsb3NlKCksIHdoaWNoIHJ1bnMgd2l0aCBtbWFwX3dyaXRlX2xvY2sgaGVsZCBhbmQgdGhlblxcbmtlcm5lbC9icGYvYXJlbmEuYzo4MDE6XFx0ICogYWNxdWlyZXMgYXJlbmEtXFx1MDAzZWxvY2suIERyb3AgYXJlbmEtXFx1MDAzZWxvY2sgZm9yIG1tYXBfcmVhZF9sb2NrKCkuXFxua2VybmVsL2JwZi9hcmVuYS5jLTgwMi1cXHQgKlxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjE3LjEyNzIxMTAwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIwNzI5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkJQRiBBcmVuYSBcdTAwMjYgSW5zdHJ1Y3Rpb24gR2VuZXJhdGlvbiBvbiBBQXJjaDY0KipcblxuUmlnaHQsIHNvIHRoZSBCUEYgYXJlbmEg4oCTIHRoYXQncyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkLiBOZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZGVhbGluZyB3aXRoIHN5c3RlbSBjYWxscyBhbmQgQlBGIGludGVyYWN0aW9ucy4gTGV0J3Mgc2VlLi4uIEknbSBjdXJpb3VzIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYywgdGhlIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBmdW5jdGlvbi4gSXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlPyBJIHNlZW0gdG8gcmVtZW1iZXIgc2VlaW5nIGl0IGluIHRoZSBBQXJjaDY0IGFyY2hpdGVjdHVyZSBjb2RlLlxuXG5MZXQgbWUgcXVpY2tseSBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5LiBPa2F5LCBhIHF1aWNrIGdyZXAgcmV2ZWFscyBpdCdzIHNpdHRpbmcgdGhlcmUgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlIGJhc2VkIG9uIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUga2VybmVsLiBHb29kLCBnb29kLiBOb3cgSSBjYW4gd29yayB3aXRoIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MjMuNDQ3OTQzMDUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI5NjQwNDUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiphYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjoyNS40Nzc1OTAzMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNTA1NzA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQqKlxuXG5SaWdodCwgc28gdGhpcyB0aGluZyBpc24ndCBhIHN0YXRpY2FsbHkgY29tcGlsZWQgZWxlbWVudCwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrLiBCdXQgaXQncyBhbHNvIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgdGhhdCdzIHdoYXQncyB0aHJvd2luZyBtZS4gSG1tLi4uIE9rYXksIHdoZXJlIGRpZCBJIHNlZSBpdD8gQWgsIHllcywgaXQgd2FzIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoIGlzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgaXQncyBhY3R1YWxseSBleHBvcnRlZC4gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjI5LjIwMjY0OTgyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NzY1MzExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjozMS4yODAzMTE3NjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4MDY2OTcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgc29tZXRoaW5nIGlzbid0IHF1aXRlIHJpZ2h0LCBzcGVjaWZpY2FsbHkgdGhhdCB3aGF0ZXZlciBJJ20gZXhwZWN0aW5nIGlzbid0IGdldHRpbmcgZXhwb3J0ZWQuIFJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBicGZfaW50X2ppdF9jb21waWxlYC4gSXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzLCBzbyB0aGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBCdXQgaG9sZCBvbiwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGEgZmFpcmx5IGdlbmVyaWMgbmFtZSDigJMgbWlnaHQgYmUgdG9vIGJyb2FkIGEgc3RhcnRpbmcgcG9pbnQgZm9yIG15IHB1cnBvc2VzLlxuXG5MZXQncyByZWZpbmUgdGhlIHNlYXJjaC4gSW5zdGVhZCBvZiB0aGF0LCB3aGF0IGFib3V0IGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgPyBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIGZvY3VzZWQgc3ltYm9sLCBtb3JlIGxpa2VseSB0byBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIGFuZCBwZXJoYXBzIHNoZWQgbGlnaHQgb24gd2h5IGl0IGlzIG5vdCBleHBvcnRlZC4gSXQncyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIGFyZW5hIGFyZ3VtZW50cywgc28gSSdsbCBzZWUgaWYgdGhhdCBvZmZlcnMgYSBjbGVhcmVyIHBhdGggdG8gdGhlIHJvb3QgY2F1c2UuIE9rYXksIHRoYXQgbWlnaHQgbm90IGJlIGl0LlxuXG5BbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGV4YW1pbmUgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIOKAkyB0aGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgdG9vLCBpZiB0aGUgcHJldmlvdXMgcGF0aCBkb2Vzbid0IHlpZWxkIGFueXRoaW5nLiBGb2N1c2luZyBvbiBhIHNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb24gbWlnaHQgZ2l2ZSBtZSB0aGUgZ3JhbnVsYXIgaW5zaWdodCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgd2hhdGV2ZXIgaXQgaXMgSSBhbSBleHBlY3RpbmcgaXNuJ3Qgd29ya2luZyBhcyBJIGhhZCBob3BlZC4gT3Igd2hhdCBhYm91dCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYD8gVGhhdCBtaWdodCBiZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duLlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgd2l0aCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHRvIHNlZSBpZiB0aGF0IGZ1bmN0aW9uIGlzIGV2ZW4gYmVpbmcgdXNlZCBhbnl3aGVyZS4gSG9wZWZ1bGx5IHRoYXQgbGVhZHMgbWUgdG8gc29tZSBjbHVlcyBhcyB0byB3aGVyZSB0aGluZ3MgYXJlIGdvaW5nIHdyb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY2NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjozNi43NjA5ODM5MDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjI2Nzg2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIzNzU9Ym9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzNzktXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjM4MDpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzODEte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTQxNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTQ0LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MTQ1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNDYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMjE2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIxNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMTgtYm9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMTAtXFxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEyLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI4Mj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzU5LVxcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzYwOlxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjEtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggYXJlbmEgcG9pbnRlciBhcmd1bWVudHNcXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg2ODQ9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NzczLVxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby1cXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODc3NDpcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Nzc1LVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MzguMjgzNjY4MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYwMzQwOTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCBpbiBBUk02NCBKSVQgQ29tcGlsZXIqKlxuXG5Pa2F5LCBzbyB0aGUgdmVyaWZpZXIgY2FsbHMgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHMgYW5kIHRoZW4gZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zLlxuXG5JJ2xsIGNoZWNrIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGJ1dCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMgdGhleSB3b24ndCBiZSBleHBvc2VkLiBIb3dldmVyLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgdmlzaWJsZSBhcyBhIHN5bWJvbC4gVGhhdCdzIGdvb2QuIEFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBhbHNvIHZpc2libGUuXG5cblRoZXJlZm9yZSwgbXkgbGlzdCBvZiBrZXkgc3ltYm9scyB0byBjb25zaWRlciBhcmU6XG5cbiogICBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2BcbiogICBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYFxuKiAgIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgXG5cbk5vdyBmb3IgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGluIHRoZSBwcm92aWRlZCB0ZXh0LCBhbmQgSSBuZWVkIHRvIGF2b2lkIHByZXBlbmRpbmcgdGhlIFwiQ09ORklHX1wiIHByZWZpeC5cblxuSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlIHRocmVlIHN5bWJvbHMgYXJlIG5vbi1zdGF0aWM6IGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGFyZSBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgd2l0aGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYm90aCB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiBhbmQgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbi4gVGhpcyBjaGFuZ2UgYWxsb3dzIEJQRiBwcm9ncmFtcyB1c2luZyBhcmVuYSBhcmd1bWVudHMgdG8gYmUgbG9hZGVkIGFuZCBleGVjdXRlZC4gSXQgcmVwcmVzZW50cyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUga2VybmVsJ3MgY29yZSBCUEYgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0IGRlZmluaXRlbHkgbmVlZHMgZnV6emluZy5cblxuSSdsbCBwcm92aWRlIHRoZSByZXN1bHRzIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTUzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0Njo0Ny44ODcwODA1ODNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3NzY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRiBhcmVuYSBhcmd1bWVudHMgaW4gdGhlIEFSTTY0IEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBoYW5kbGUgYXJlbmEgYXJndW1lbnRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHVzZSBhcmVuYSBhcmd1bWVudHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwvQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6NDcuOTU4NDY1MjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE1NDcyNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6NDcuOTU5MDg0MDgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0ODE0ODQ5NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50cy4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBsb2dpYyB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbCdzIEMgY29kZS4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChlLmcuLCBvdXQtb2YtYm91bmRzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAzYzA4YzlkNTA1NzkwZjNhNWE3MmI2YTM1YTA4OTcyMWMxNGZkZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMjo0NTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCAxMDA0ZWIwYmVjNjE3Li5kOWNjMmFiMWNmMDE4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTMwMSw5ICszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiAgICAgICAgIH1cbiBcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4tYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCBhbmQgYXJtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHNcbitvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXG4rdmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuIFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5pbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5AQCAtMjA1LDYgKzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTXG4gfTtcbiBcbisvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRYLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxuK307XG4rXG4gZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7XG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTyxcbiBcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9LRUVQLFxuQEAgLTM3OCw2ICszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXHQweDdGMjAwMDAwLCAweDRCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsXHQweDdGMjAwMDAwLCAweDBCMjAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LFx0MHg3RjIwMDAwMCwgMHgyQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFx0MHg3RjIwMDAwMCwgMHg0QjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCxcdDB4N0YyMDAwMDAsIDB4NkIyMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcdDB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdixcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXG5AQCAtNjM3LDYgKzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHRcdFx0IGludCBzaGlmdCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jXG4rKysgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbkBAIC05ODYsNiArOTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xuIH1cbiBcbisvKlxuKyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcbisgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seVxuKyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLlxuKyAqL1xuK3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbitcdFx0XHRcdFx0ICBpbnQgc2hpZnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKVxuK3tcbitcdHUzMiBpbnNuO1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gYWRkL3N1YiBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdHlwZSk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0c3dpdGNoICh2YXJpYW50KSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOlxuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XG4rXHRcdGluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwcl9lcnIoXCIlczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCB2YXJpYW50KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpZiAoc2hpZnQgXHUwMDNjIDAgfHwgc2hpZnQgXHUwMDNlIDQpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHNoaWZ0KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JOLCBpbnNuLCBzcmMpO1xuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk0sIGluc24sIHJlZyk7XG4rXG4rXHQvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqL1xuK1x0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcbitcdFx0XHRcdFx0ICAgICAoZXh0ZW5kIFx1MDAzY1x1MDAzYyAzKSB8IHNoaWZ0KTtcbit9XG4rXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcbkBAIC0yNDMsNiArMjQzLDE3IEBAXG4gLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqL1xuICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pXG4gXG4rLyogQWRkL3N1YnRyYWN0IChleHRlbmRlZCByZWdpc3RlcikgKi9cbisjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbitcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKVxuKy8qIFJkID0gUm4gKyAoRVhUKFJtKSBcdTAwM2NcdTAwM2Mgc2hpZnQpICovXG4rI2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcbitcdEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKVxuKy8qIFJkID0gUm4gKyAodTMyKVJtICovXG4rI2RlZmluZSBBNjRfQUREX1VYVFcoUmQsIFJuLCBSbSkgQTY0X0FERF9FWFQoMSwgUmQsIFJuLCBSbSwgVVhUVywgMClcbitcbiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqL1xuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxuIFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGQxNGQyOTdlYmI5NjcuLjFjZDMyN2QyMTNlMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjQ5LDYgKzEyNDksNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuKyAqIHhOID0ga2Vybl92bV9zdGFydCArICh1MzIpeE4sIHdpdGggdGhlIGFyZW5hIGJhc2UgcmVnaXN0ZXIgaG9sZGluZ1xuKyAqIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZFxuKyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0Y29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbitcdGludCBpO1xuK1xuK1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuK1x0aWYgKCFmbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkrKykge1xuK1x0XHRjb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSArIGldO1xuK1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuK1x0XHRcdC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcbitcdFx0XHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0XHRlbWl0KEE2NF9DQlooMCwgcmVnLCAyKSwgY3R4KTtcbitcdFx0fVxuK1x0XHRlbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxuICAqIFJldHVybnM6XG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXG5AQCAtMTY3MSw2ICsxNzA4LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuK1x0XHRcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7XG4gXHRcdC8qXG4gXHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuQEAgLTIzMzUsNiArMjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKVxuQEAgLTI1MDgsMzQgKzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xuKyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcbisgKiAzMiBiaXRzIG9mIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGxcbisgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcbisgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcbisgKiBwb2ludGVyIHJlZ2lzdGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxuK3tcbitcdGlmIChudWxsYWJsZSkge1xuK1x0XHRpZiAoZHN0ICE9IHNyYylcbitcdFx0XHRlbWl0KEE2NF9NT1YoMSwgZHN0LCBzcmMpLCBjdHgpO1xuK1x0XHQvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqL1xuK1x0XHRlbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTtcbitcdFx0c3JjID0gZHN0O1xuK1x0fVxuK1x0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG4tXHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuK1x0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSlcbiB7XG4tXHRpbnQgaTtcbi1cdGludCByZWc7XG4tXHRpbnQgZG9mZjtcbi1cdGludCBzb2ZmO1xuLVx0aW50IHNsb3RzO1xuIFx0dTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdO1xuK1x0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcbitcdGludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzO1xuK1xuK1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuK1x0aWYgKGFyZW5hX2Jhc2UpXG4rXHRcdGVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpO1xuIFxuIFx0Lyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlXG4gXHQgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXG4gXHQgKi9cbi1cdGZvciAocmVnID0gMDsgcmVnIFx1MDAzYyBhLVx1MDAzZXJlZ3NfZm9yX2FyZ3M7IHJlZysrKSB7XG4tXHRcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cbi1cdFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcbi1cdFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxuLVx0XHQgICAgIGN0eCk7XG4tXHRcdGJhcmdzX29mZiArPSA4O1xuK1x0Zm9yIChpID0gMCwgcmVnID0gMDsgaSBcdTAwM2MgYS1cdTAwM2VhcmdzX2luX3JlZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuK1x0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuK1x0XHR3aGlsZSAoc2xvdHMtLSBcdTAwM2UgMCkge1xuK1x0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbitcdFx0XHRcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9IGVsc2UgaWYgKGFyZW5hX2FyZykge1xuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9XG4rXHRcdFx0cmVnKys7XG4rXHRcdFx0YmFyZ3Nfb2ZmICs9IDg7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdHNvZmYgPSAzMjsgLyogb24gc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGZyb20gRlAgKyAzMiAqL1xuK1x0LypcbitcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXG4rXHQgKiBwcm9sb2d1ZS4gRW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCBmcm9tIGEgdHJhY2VkIGZ1bmN0aW9uLCB0aGVcbitcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXG4rXHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCArIDMyLiBBIHN0cnVjdF9vcHNcbitcdCAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc29cbitcdCAqIHRoZXkgc3RhcnQgYXQgRlAgKyAxNi5cbitcdCAqL1xuK1x0c29mZiA9IGlzX3N0cnVjdF9vcHMgPyAxNiA6IDMyO1xuIFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xuIFxuIFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cbiBcdGZvciAoaSA9IGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuIFx0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuIFx0XHQvKiB2ZXJpZmllciBlbnN1cmVzIGFyZ19zaXplIFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cbiBcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbkBAIC0yNTQ1LDYgKzI2MzQsOCBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoc2xvdHMgPT0gMCBcdTAwMjZcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcbiBcdFx0XHRcdGNsZWFyX2dhcmJhZ2UoY3R4LCB0bXAsIG0tXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcbitcdFx0XHRpZiAoYXJlbmFfYXJnKVxuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4gXHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcbiBcdFx0XHRzb2ZmICs9IDg7XG4gXHRcdFx0ZG9mZiArPSA4O1xuQEAgLTI2MDQsOCArMjY5NSwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmO1xuIFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcbitcdHU2NCBhcmVuYV9iYXNlO1xuIFx0dTY0IGZ1bmNfbWV0YTtcbiBcbitcdC8qXG4rXHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcbitcdCAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZVxuK1x0ICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKVxuK1x0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxuK1x0ICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy5cbitcdCAqL1xuK1x0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuK1xuK1x0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuK1xuIFx0LyogdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6XG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdXG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdXG5AQCAtMjcyMSw3ICsyODI1LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xuIFxuIFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cbi1cdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7XG4rXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xuIFxuIFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXG4gXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcbkBAIC0yNzY5LDggKzI4NzMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdH1cbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4tXHRcdC8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqL1xuLVx0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7XG4rXHRcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXG4rXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcbiBcdFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXG4gXHRcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xuIFx0XHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC02LDcgKzYsNyBAQFxuICNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXCJcbiAjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcIlxuIFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiAvKlxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXG5AQCAtMTExLDExICsxMTEsMTEgQEAgc3RhdGljIHZvaWQgYXJlbmFfYXJnX2F0dGFjaCh2b2lkKVxuIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxuIHtcbiBcdC8qXG4tXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXG4tXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuLVx0ICogYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuK1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmRcbitcdCAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0XG4rXHQgKiBhcmVuYSBhcmd1bWVudHNcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4gXHQgKi9cbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ1wiKSlcbiBcdFx0YXJlbmFfYXJnKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ19mYWlsXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbmluZGV4IGNkY2VhODg5ZGE1ODYuLmJmMGQzMDRlMGU1OWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0yNyw2ICsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuIHtcbkBAIC03MCw2ICs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuICAqL1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC0xMTEsNiArMTEzLDcgQEAgaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiB7XG5AQCAtMTQyLDYgKzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTY5LDYgKzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTg5LDYgKzE5NCw3IEBAIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCIpXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4ge1xuQEAgLTE5OCw2ICsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCIpXG4gaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiB7XG5AQCAtMjEzLDYgKzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCIpXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4ge1xuQEAgLTIyMyw2ICsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiAjZWxzZVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19kZXNjcmlwdGlvbihcImFyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMzIsNiArMzIsMTAgQEAgX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbiBfX2ppdGVkKFwiLi4uXCIpXG4gX19qaXRlZChcIlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0e3soYmx8bW92KVx0Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4ge1xuQEAgLTQ4LDYgKzUyLDEyIEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlZWRpLCAlZWRpXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuIF9faml0ZWQoXCJMMDpcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92XHR3MCwgdzBcIilcbitfX2ppdGVkKFwiXHRjYnpcdHcwLCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpXG4ge1xuQEAgLTcyLDYgKzgyLDE2IEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlcjhkLCAlcjhkXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXI4XCIpXG4gX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MSwgeDI4LCB3MSwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDIsIHgyOCwgdzIsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgzLCB4MjgsIHczLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0bW92XHR3NCwgdzRcIilcbitfX2ppdGVkKFwiXHRjYnpcdHc0LCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDQsIHgyOCwgdzQsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTU5LDExICs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90XCIpXG4raW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LypcbitcdCAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudFxuK1x0ICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci5cbitcdCAqL1xuK1x0aWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbiBcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbitcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9ICh2b2lkICopdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IsXG4gfTtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG5AQCAtMTA5LDYgKzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4gXHRpZiAoKnZhbCAhPSA0NClcbiBcdFx0cmV0dXJuIDk7XG4gXG4rXHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAxMDtcbitcdGlmICgqdmFsICE9IDQ1KVxuK1x0XHRyZXR1cm4gMTE7XG4rXG4gXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC00MDIsMTIgKzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdChzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLFxuK1x0XHRcdFx0XHRcdCAgdTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4gXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4rXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC00NDEsNiArNDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4gXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xuIH1cbiBcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XG4rXG4rXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX211bHRpc2xvdChwLCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtODUyLDYgKzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5AQCAtMTAzLDYgKzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIH07XG4gXG4rLyogMTYgYnl0ZXMsIHNvIGl0IHRha2VzIHR3byBhcmd1bWVudCBzbG90cyB3aGVuIHBhc3NlZCBieSB2YWx1ZSAqL1xuK3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcbitcdHU2NCBhO1xuK1x0dTY0IGI7XG4rfTtcbitcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbkBAIC0xMTIsNiArMTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiBcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXG4gXHRcdFx0XHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcbitcdC8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqL1xuK1x0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcbiB9O1xuIFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoX191NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjQ3Ljk1OTA4NTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODE0ODIxMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgQVJNNjQgQlBGIEpJVCBBcmVuYSBBcmd1bWVudCBTdXBwb3J0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYXJlbmEgYXJndW1lbnQgc3VwcG9ydCB0byB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHBhdGNoJ3MgY29yZSBpcyBtb2RpZnlpbmcgdGhlIEpJVCB0byBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGFyZW5hIHBvaW50ZXJzLiBJdCdzIGFsc28gdXBkYXRpbmcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiAoYGFyY2gvYXJtNjQvbGliL2luc24uY2ApIGFuZCBhZGRpbmcgdGVzdHMuXG5cbkluaXRpYWxseSwgSSBsb29rZWQgZm9yIHRoZSB0eXBpY2FsIEtNU0FOIHJlZCBmbGFnczoga2VybmVsIGRhdGEgc2VudCB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciB2dWxuZXJhYmlsaXRpZXMgaW4gYm91bmRzIGNoZWNraW5nLiAgTm9uZSBvZiB0aG9zZSBhcHBseSBkaXJlY3RseS4gIFRoaXMgaXMgYWxsIGFib3V0IG1hY2hpbmUgY29kZSBnZW5lcmF0aW9uIHdpdGhpbiB0aGUgSklULlxuXG5UaGUgSklUIGl0c2VsZiBnZW5lcmF0ZXMgaW5zdHJ1Y3Rpb25zLCBzbyBhIGJ1ZyAqY291bGQqIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLCBidXQgdGhhdCdzIGEgZ2VuZXJhbCBKSVQgYnVnLCBub3QgbmVjZXNzYXJpbHkgc29tZXRoaW5nIEtNU0FOIGlzIHRhaWxvcmVkIGZvciB1bmxlc3MgdGhlICpKSVQqIGl0c2VsZiB1c2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBjb21waWxhdGlvbi4gIEkgZGlkIGEgcXVpY2sgc2NhbiBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHZhcmlhYmxlcyBsaWtlIGB0bXBgLCBgYmFzZV9sb2AsIGFuZCBgc2xvdHNgLCBhbmQgdGhleSBhbGwgYXBwZWFyIGluaXRpYWxpemVkLlxuXG5TcGVjaWZpY2FsbHksIEkgZG92ZSBpbnRvIHRoZSBgc2F2ZV9hcmdzYCBmdW5jdGlvbiBhbmQgdGhlIGBlbWl0X2FyZW5hX2FyZ19jb252YCBmdW5jdGlvbiB0byBlbnN1cmUgdGhlcmUgd2VyZW4ndCBzbmVha3kgdW5pbml0aWFsaXplZCByZWdpc3RlciB1c2VzLCBidXQgaXQncyBqdXN0IGdlbmVyYXRpbmcgY29kZSB0aGF0IHNhdmVzIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgb3IgcGVyZm9ybXMgYW4gYWRkcmVzcyBjb252ZXJzaW9uLCBhbmQgbm90aGluZyBwb2ludHMgdG8gZGlyZWN0IHJpc2tzLiAgVGhlIGBjbGVhcl9nYXJiYWdlYCBjYWxsIGZvciBzdGFjayBhcmd1bWVudHMgaXMgZXhpc3RpbmcgY29kZSwgc28gdGhhdCdzIG5vdCBhIG5ldyBjb25jZXJuLlxuXG5TbywgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgSklUJ3MgY29kZSBnZW5lcmF0aW9uLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgb2YgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIEkgdGhpbmsgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGl0c2VsZiBpcyBzb3VuZCBhbmQgZG9lc24ndCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBJJ2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzIzLCJPdXRwdXRUb2tlbnMiOjE4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NzowMi43NzM5MDkwMTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBUk02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyB0aGUgdHJhbXBvbGluZSBnZW5lcmF0aW9uIGxvZ2ljIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUga2VybmVsJ3MgQyBjb2RlLiBBbnkgYnVncyBpbiB0aGUgSklUIGNvbXBpbGVyIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgb3IgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBhcmVuYSBhcmd1bWVudHMuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHRoZSB0cmFtcG9saW5lIGdlbmVyYXRpb24gbG9naWMgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBnZW5lcmF0aW5nIG1hY2hpbmUgY29kZSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBrZXJuZWwncyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow29j4z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 22:43:06 +0000 UTC FinishedAt: 2026-08-10 22:47:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_JIT", "BPF_SYSCALL" ], "series_id": "3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "aarch64_insn_gen_add_sub_extended_reg", "bpf_jit_supports_arena_args", "arch_prepare_bpf_trampoline" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9KSVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDssCiAgICAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7LAogICAgJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50cy4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBsb2dpYyB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbCYjMzk7cyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBCUEYgYXJlbmEgYXJndW1lbnRzIGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIuIEl0IG1vZGlmaWVzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGFuZCB0cmFtcG9saW5lIGdlbmVyYXRpb24gdG8gaGFuZGxlIGFyZW5hIGFyZ3VtZW50cywgd2hpY2ggYXJlIHJlYWNoYWJsZSB3aGVuIGxvYWRpbmcgYW5kIGV4ZWN1dGluZyBCUEYgcHJvZ3JhbXMgdGhhdCB1c2UgYXJlbmEgYXJndW1lbnRzLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUga2VybmVsL0JQRiBzdWJzeXN0ZW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjI6NDU6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbmluZGV4IDEwMDRlYjBiZWM2MTcuLmQ5Y2MyYWIxY2YwMTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5AQCAtMzAxLDkgJiM0MzszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiAgICAgICAgIH1cbiBcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4tYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4mIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXG4mIzQzO290aGVyd2lzZS4gVGhlIHByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEFcbiYjNDM7dmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuIFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5pbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5AQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xuIH07XG4gXG4mIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi9cbiYjNDM7ZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVEgsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVEIsXG4mIzQzO1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxuJiM0MztcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcbiYjNDM7XHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVFgsXG4mIzQzO307XG4mIzQzO1xuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sXG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcbkBAIC0zNzgsNiAmIzQzOzM5MCwxMCBAQCBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGQsXHQweDdGMjAwMDAwLCAweDBCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsXHQweDdGMjAwMDAwLCAweDJCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YixcdDB4N0YyMDAwMDAsIDB4NEIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3VicyxcdDB4N0YyMDAwMDAsIDB4NkIwMDAwMDApXG4mIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsXHQweDdGMjAwMDAwLCAweDBCMjAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcdDB4N0YyMDAwMDAsIDB4MkIyMDAwMDApXG4mIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1Yl9leHQsXHQweDdGMjAwMDAwLCAweDRCMjAwMDAwKVxuJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCxcdDB4N0YyMDAwMDAsIDB4NkIyMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcdDB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdixcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXG5AQCAtNjM3LDYgJiM0Mzs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0XHRcdCBpbnQgc2hpZnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4mIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbiYjNDM7XHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbmluZGV4IDM3Y2U3NWY3ZjFmMDguLmU3MGFjMDIzODUxNTMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xuQEAgLTk4Niw2ICYjNDM7OTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogVW5saWtlIHRoZSBzaGlmdGVkLXJlZ2lzdGVyIGZvcm0sIHJlZ2lzdGVyIDMxIGlzIG5vdCBYWlIgZXZlcnl3aGVyZSBoZXJlOlxuJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seVxuJiM0MzsgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy5cbiYjNDM7ICovXG4mIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbiYjNDM7XHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGluc247XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREOlxuJiM0MztcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUI6XG4mIzQzO1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzpcbiYjNDM7XHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUzpcbiYjNDM7XHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXG5cJiMzNDssIF9fZnVuY19fLCB0eXBlKTtcbiYjNDM7XHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh2YXJpYW50KSB7XG4mIzQzO1x0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XG4mIzQzO1x0XHRpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHJfZXJyKFwmIzM0OyVzOiB1bmtub3duIHZhcmlhbnQgZW5jb2RpbmcgJWRcXG5cJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTtcbiYjNDM7XHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNoaWZ0IFx1MDAzYyAwIHx8IHNoaWZ0IFx1MDAzZSA0KSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcXG5cJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7XG4mIzQzO1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JELCBpbnNuLCBkc3QpO1xuJiM0MztcbiYjNDM7XHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcbiYjNDM7XG4mIzQzO1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk0sIGluc24sIHJlZyk7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGlvbiBpbiBiaXRzIFsxNToxM10gYW5kIGltbTMgaW4gWzEyOjEwXSB0b2dldGhlciBmaWxsIElNTV82ICovXG4mIzQzO1x0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgKGV4dGVuZCBcdTAwM2NcdTAwM2MgMykgfCBzaGlmdCk7XG4mIzQzO31cbiYjNDM7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcbkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cbiAjZGVmaW5lIEE2NF9DTVAoc2YsIFJuLCBSbSkgQTY0X1NVQlMoc2YsIEE2NF9aUiwgUm4sIFJtKVxuIFxuJiM0MzsvKiBBZGQvc3VidHJhY3QgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xuJiM0MzsjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbiYjNDM7XHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG4mIzQzO1x0XHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxuJiM0MztcdFx0QUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKVxuJiM0MzsvKiBSZCA9IFJuICYjNDM7IChFWFQoUm0pIFx1MDAzY1x1MDAzYyBzaGlmdCkgKi9cbiYjNDM7I2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcbiYjNDM7XHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcbiYjNDM7LyogUmQgPSBSbiAmIzQzOyAodTMyKVJtICovXG4mIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApXG4mIzQzO1xuIC8qIERhdGEtcHJvY2Vzc2luZyAoMSBzb3VyY2UpICovXG4gI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFxcXG4gXHRBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuaW5kZXggZDE0ZDI5N2ViYjk2Ny4uMWNkMzI3ZDIxM2UzNCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuQEAgLTEyNDksNiAmIzQzOzEyNDksNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogUmViYXNlIHRoZSBfX2FyZW5hIGFyZ3Mgb2YgYSBrZnVuYyBjYWxsIHRvIGFyZW5hIGtlcm5lbCBhZGRyZXNzZXMsXG4mIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcbiYjNDM7ICoga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkXG4mIzQzOyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmbSA9IGJwZl9qaXRfZmluZF9rZnVuY19tb2RlbChjdHgtXHUwMDNlcHJvZywgaW5zbik7XG4mIzQzO1x0aWYgKCFmbSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRjb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSAmIzQzOyBpXTtcbiYjNDM7XHRcdHU4IGZsYWdzID0gZm0tXHUwMDNlYXJnX2ZsYWdzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuJiM0MztcdFx0XHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuJiM0MztcdFx0XHRlbWl0KEE2NF9NT1YoMCwgcmVnLCByZWcpLCBjdHgpO1xuJiM0MztcdFx0XHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbiYjNDM7XHRcdFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRlbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKiBKSVRzIGFuIGVCUEYgaW5zdHJ1Y3Rpb24uXG4gICogUmV0dXJuczpcbiAgKiAwICAtIHN1Y2Nlc3NmdWxseSBKSVRlZCBhbiA4LWJ5dGUgZUJQRiBpbnN0cnVjdGlvbi5cbkBAIC0xNjcxLDYgJiM0MzsxNzA4LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbiYjNDM7XHRcdFx0cmV0ID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGN0eCwgaW5zbik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiBcdFx0ZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTtcbiBcdFx0LypcbiBcdFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXG5AQCAtMjMzNSw2ICYjNDM7MjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxuIHtcbiBcdGlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpXG5AQCAtMjUwOCwzNCAmIzQzOzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxuIFx0fVxuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheSBpbnRvXG4mIzQzOyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcbiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXG4mIzQzOyAqIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdCBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZVxuJiM0MzsgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcbiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG51bGxhYmxlKSB7XG4mIzQzO1x0XHRpZiAoZHN0ICE9IHNyYylcbiYjNDM7XHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcbiYjNDM7XHRcdC8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4mIzQzO1x0XHRlbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTtcbiYjNDM7XHRcdHNyYyA9IGRzdDtcbiYjNDM7XHR9XG4mIzQzO1x0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLFxuLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbi1cdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4pXG4mIzQzO1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuJiM0MztcdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgcmVnO1xuLVx0aW50IGRvZmY7XG4tXHRpbnQgc29mZjtcbi1cdGludCBzbG90cztcbiBcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcbiYjNDM7XHR1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdO1xuJiM0MztcdGludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzO1xuJiM0MztcbiYjNDM7XHQvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovXG4mIzQzO1x0aWYgKGFyZW5hX2Jhc2UpXG4mIzQzO1x0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbiBcbiBcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxuIFx0ICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxuIFx0ICovXG4tXHRmb3IgKHJlZyA9IDA7IHJlZyBcdTAwM2MgYS1cdTAwM2VyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7XG4tXHRcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cbi1cdFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcbi1cdFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxuLVx0XHQgICAgIGN0eCk7XG4tXHRcdGJhcmdzX29mZiAmIzQzOz0gODtcbiYjNDM7XHRmb3IgKGkgPSAwLCByZWcgPSAwOyBpIFx1MDAzYyBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSBcdTAwMjZcdTAwMjYgKG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRyk7XG4mIzQzO1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuJiM0MztcbiYjNDM7XHRcdHNsb3RzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4O1xuJiM0MztcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0aWYgKGZvcl9jYWxsX29yaWdpbikge1xuJiM0MztcdFx0XHRcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcbiYjNDM7XHRcdFx0XHRlbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCByZWcsIG51bGxhYmxlLCBiYXNlX2xvKTtcbiYjNDM7XHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJlZyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdGJhcmdzX29mZiAmIzQzOz0gODtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbi1cdHNvZmYgPSAzMjsgLyogb24gc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGZyb20gRlAgJiM0MzsgMzIgKi9cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXG4mIzQzO1x0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXG4mIzQzO1x0ICogcHJvbG9ndWUgc2F2ZXMgYm90aCB0aGUgcGFyZW50IChGUC94OSkgYW5kIHRoZSB0cmFjZWQgZnVuY3Rpb25cbiYjNDM7XHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzXG4mIzQzO1x0ICogY2FsbGJhY2sgaXMgY2FsbGVkIGluZGlyZWN0bHkgYW5kIG9ubHkgdGhlIEZQL0xSIGZyYW1lIGlzIHNhdmVkLCBzb1xuJiM0MztcdCAqIHRoZXkgc3RhcnQgYXQgRlAgJiM0MzsgMTYuXG4mIzQzO1x0ICovXG4mIzQzO1x0c29mZiA9IGlzX3N0cnVjdF9vcHMgPyAxNiA6IDMyO1xuIFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xuIFxuIFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cbiBcdGZvciAoaSA9IGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuJiM0MztcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbiYjNDM7XG4gXHRcdHNsb3RzID0gKG0tXHUwMDNlYXJnX3NpemVbaV0gJiM0MzsgNykgLyA4O1xuIFx0XHQvKiB2ZXJpZmllciBlbnN1cmVzIGFyZ19zaXplIFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cbiBcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbkBAIC0yNTQ1LDYgJiM0MzsyNjM0LDggQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKHNsb3RzID09IDAgXHUwMDI2XHUwMDI2ICFmb3JfY2FsbF9vcmlnaW4pXG4gXHRcdFx0XHRjbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLVx1MDAzZWFyZ19zaXplW2ldICUgOCk7XG4mIzQzO1x0XHRcdGlmIChhcmVuYV9hcmcpXG4mIzQzO1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4gXHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcbiBcdFx0XHRzb2ZmICYjNDM7PSA4O1xuIFx0XHRcdGRvZmYgJiM0Mzs9IDg7XG5AQCAtMjYwNCw4ICYjNDM7MjY5NSwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmO1xuIFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcbiYjNDM7XHR1NjQgYXJlbmFfYmFzZTtcbiBcdHU2NCBmdW5jX21ldGE7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcbiYjNDM7XHQgKiBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHIGJlY2F1c2VcbiYjNDM7XHQgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpXG4mIzQzO1x0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxuJiM0MztcdCAqIG5ldmVyIGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIGNvbnZlcnRlZCBhcmd1bWVudHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbiYjNDM7XG4mIzQzO1x0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuJiM0MztcbiBcdC8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXVxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgRlAgICAgICAgICAgICAgICAgXVxuQEAgLTI3MjEsNyAmIzQzOzI4MjUsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdHN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7XG4gXG4gXHQvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqL1xuLVx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTtcbiYjNDM7XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xuIFxuIFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXG4gXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcbkBAIC0yNzY5LDggJiM0MzsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHR9XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuLVx0XHQvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi9cbi1cdFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpO1xuJiM0MztcdFx0LyogdGhlIG9yaWdpbmFsIGZ1bmMgdGFrZXMga2VybmVsIGFkZHJlc3NlcywgbmV2ZXIgY29udmVydGVkIG9uZXMgKi9cbiYjNDM7XHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcbiBcdFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXG4gXHRcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xuIFx0XHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC02LDcgJiM0Mzs2LDcgQEBcbiAjaW5jbHVkZSBcJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2F0dGFjaC5za2VsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oXCYjMzQ7XG4gXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcbiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiAvKlxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXG5AQCAtMTExLDExICYjNDM7MTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZClcbiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbiB7XG4gXHQvKlxuLVx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuLVx0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hXG4tXHQgKiBhcmd1bWVudHNcJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuJiM0MztcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgYW5kXG4mIzQzO1x0ICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0XG4mIzQzO1x0ICogYXJlbmEgYXJndW1lbnRzXCYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbiBcdCAqL1xuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4mIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDthcmVuYV9hcmdcJiMzNDspKVxuIFx0XHRhcmVuYV9hcmcoKTtcbiBcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2FyZW5hX2FyZ19mYWlsXCYjMzQ7KSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5pbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5AQCAtMjcsNiAmIzQzOzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoO1xuIFxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXG4ge1xuQEAgLTcwLDYgJiM0Mzs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuICAqL1xuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC0xMTEsNiAmIzQzOzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4ge1xuQEAgLTE0Miw2ICYjNDM7MTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIHtcbkBAIC0xNjksNiAmIzQzOzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTg5LDYgJiM0MzsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiBcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcJiMzNDthcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmFcJiMzNDspXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4ge1xuQEAgLTE5OCw2ICYjNDM7MjA0LDcgQEAgaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4gX19hcmNoX3g4Nl82NFxuJiM0MztfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcJiMzNDspXG4gaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiB7XG5AQCAtMjEzLDYgJiM0MzsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuIFNFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjRcbiYjNDM7X19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwmIzM0O2FyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnRcJiMzNDspXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4ge1xuQEAgLTIyMyw2ICYjNDM7MjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4gI2Vsc2VcbiBTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiBfX2FyY2hfeDg2XzY0XG4mIzQzO19fYXJjaF9hcm02NFxuIF9fZGVzY3JpcHRpb24oXCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XCYjMzQ7KVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMzIsNiAmIzQzOzMyLDEwIEBAIF9faml0ZWQoXCYjMzQ7XHRtb3ZsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcmRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7Li4uXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRjYWxscVx0e3suKn19XCYjMzQ7KVxuJiM0MztfX2FyY2hfYXJtNjRcbiYjNDM7X19qaXRlZChcJiMzNDsuLi5cJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0e3soYmx8bW92KVx0Lip9fVwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC00OCw2ICYjNDM7NTIsMTIgQEAgX19qaXRlZChcJiMzNDtcdHRlc3RsXHQlZWRpLCAlZWRpXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRqZVx0TDBcJiMzNDspXG4gX19qaXRlZChcJiMzNDtcdGFkZHFcdCVyMTIsICVyZGlcJiMzNDspXG4gX19qaXRlZChcJiMzNDtMMDpcdGNhbGxxXHR7ey4qfX1cJiMzNDspXG4mIzQzO19fYXJjaF9hcm02NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdG1vdlx0dzAsIHcwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0Y2J6XHR3MCwgTDBcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O0wwOlx0e3suKn19XCYjMzQ7KVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcbiB7XG5AQCAtNzIsNiAmIzQzOzgyLDE2IEBAIF9faml0ZWQoXCYjMzQ7XHR0ZXN0bFx0JXI4ZCwgJXI4ZFwmIzM0OylcbiBfX2ppdGVkKFwmIzM0O1x0amVcdEwwXCYjMzQ7KVxuIF9faml0ZWQoXCYjMzQ7XHRhZGRxXHQlcjEyLCAlcjhcJiMzNDspXG4gX19qaXRlZChcJiMzNDtMMDpcdGNhbGxxXHR7ey4qfX1cJiMzNDspXG4mIzQzO19fYXJjaF9hcm02NFxuJiM0MztfX2ppdGVkKFwmIzM0Oy4uLlwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRhZGRcdHgxLCB4MjgsIHcxLCB1eHR3XCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4MiwgeDI4LCB3MiwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGFkZFx0eDMsIHgyOCwgdzMsIHV4dHdcJiMzNDspXG4mIzQzO19faml0ZWQoXCYjMzQ7XHRtb3ZcdHc0LCB3NFwmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtcdGNielx0dzQsIEwwXCYjMzQ7KVxuJiM0MztfX2ppdGVkKFwmIzM0O1x0YWRkXHR4NCwgeDI4LCB3NCwgdXh0d1wmIzM0OylcbiYjNDM7X19qaXRlZChcJiMzNDtMMDpcdHt7Lip9fVwmIzM0OylcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTU5LDExICYjNDM7NTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO1NFQyhcJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90XCYjMzQ7KVxuJiM0MztpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdO1xuJiM0MztcbiYjNDM7XHRhcmVuYV90b3VjaCYjNDM7JiM0Mzs7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgMTYtYnl0ZSBzdHJ1Y3Qgb2NjdXBpZXMgY3R4WzBdIGFuZCBjdHhbMV0sIHNvIEBwdHIgaXMgYXJndW1lbnRcbiYjNDM7XHQgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjdHhbMF0gIT0gMTEgfHwgY3R4WzFdICE9IDIyKVxuJiM0MztcdFx0cmV0dXJuIDB4YmFkO1xuJiM0MztcdCpwdHIgJiM0Mzs9IDE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gU0VDKFwmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmtcJiMzNDspXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbiBcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbiYjNDM7XHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLFxuIH07XG4gXG4gU0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG5AQCAtMTA5LDYgJiM0MzsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KVxuIFx0aWYgKCp2YWwgIT0gNDQpXG4gXHRcdHJldHVybiA5O1xuIFxuJiM0MztcdC8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqL1xuJiM0MztcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIDEwO1xuJiM0MztcdGlmICgqdmFsICE9IDQ1KVxuJiM0MztcdFx0cmV0dXJuIDExO1xuJiM0MztcbiBcdGJwZl9hcmVuYV9mcmVlX3BhZ2VzKFx1MDAyNmFyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTtcbiAjZW5kaWZcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTQwMiwxMiAmIzQzOzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCxcbiYjNDM7XHRcdFx0XHRcdFx0ICB1NjQgKnB0cl9fYXJlbmEpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4gXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4mIzQzO1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3QsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXG5AQCAtNDQxLDYgJiM0Mzs0NDgsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSlcbiBcdHJldHVybiBzdF9vcHMzLVx1MDAzZXRlc3RfYXJlbmFfc3RhY2soMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgcHRyX19hcmVuYSk7XG4gfVxuIFxuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAgPSB7IC5hID0gMTEsIC5iID0gMjIgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtODUyLDYgJiM0Mzs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfcHV0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcylcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuaW5kZXggMzNmMmFmNWI3MDg1Ny4uMjEwYjkxOTI5MGNjMiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbkBAIC0xMDMsNiAmIzQzOzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIH07XG4gXG4mIzQzOy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi9cbiYjNDM7c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIge1xuJiM0MztcdHU2NCBhO1xuJiM0MztcdHU2NCBiO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbkBAIC0xMTIsNiAmIzQzOzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHtcbiBcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4gXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuIFx0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4mIzQzO1x0LyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovXG4mIzQzO1x0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcbiB9O1xuIFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMTIzLDYgJiM0MzsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuJiM0MztpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfdGVzdDEoc3RydWN0IHNvY2sgKnNrLCBfX3UzMiBhLCBfX3U2NCBiLFxuIFx0XHRcdFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDNjMDhjOWQ1MDU3OTBmM2E1YTcyYjZhMzVhMDg5NzIxYzE0ZmRlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDIyOjQ1OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdCBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKaW5kZXggMTAwNGViMGJlYzYxNy4uZDljYzJhYjFjZjAxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CkBAIC0zMDEsOSAmIzQzOzMwMSw5IEBAIEFuIGV4YW1wbGUgaXMgZ2l2ZW4gYmVsb3c6OgogICAgICAgICB9CiAKIENhbGxpbmcgc3VjaCBhIGtmdW5jIHJlcXVpcmVzIHRoZSBwcm9ncmFtIHRvIHVzZSBhbiBhcmVuYSBtYXAgYW5kIGEgSklUIHdpdGgKLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGUKLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzCi1ub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KJiM0MzthcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0IGFuZCBhcm02NCk7IHZlcmlmaWNhdGlvbiBmYWlscwomIzQzO290aGVyd2lzZS4gVGhlIHByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEKJiM0Mzt2YWx1ZSB0aGF0IGRvZXMgbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuCiAKIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWIKIGZ1bmN0aW9ucywgd2l0aCB0aGUgY29udmVyc2lvbiBydW5uaW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaAppbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaApAQCAtMjA1LDYgJiM0MzsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHsKIAlBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1MKIH07CiAKJiM0MzsvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7ZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgewomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVEIsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCwKJiM0Mzt9OwomIzQzOwogZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7CiAJQUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sCiAJQUFSQ0g2NF9JTlNOX01PVkVXSURFX0tFRVAsCkBAIC0zNzgsNiAmIzQzOzM5MCwxMCBAQCBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGQsCTB4N0YyMDAwMDAsIDB4MEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLAkweDdGMjAwMDAwLCAweDJCMDAwMDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLAkweDdGMjAwMDAwLCAweDRCMDAwMDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1Moc3VicywJMHg3RjIwMDAwMCwgMHg2QjAwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LAkweDdGMjAwMDAwLCAweDBCMjAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LAkweDdGMjAwMDAwLCAweDJCMjAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1Yl9leHQsCTB4N0YyMDAwMDAsIDB4NEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsCTB4N0YyMDAwMDAsIDB4NkIyMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtYWRkLAkweDdGRTA4MDAwLCAweDFCMDAwMDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YiwJMHg3RkUwODAwMCwgMHgxQjAwODAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsCTB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApCkBAIC02MzcsNiAmIzQzOzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCQkJIGludCBzaGlmdCwKIAkJCQkJIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKIAkJCQkJIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsCiYjNDM7CQkJCQkgIGludCBzaGlmdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7CiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmMKaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwpAQCAtOTg2LDYgJiM0Mzs5ODYsNjYgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiAJcmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6CiYjNDM7ICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHkKJiM0MzsgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy4KJiM0MzsgKi8KJiM0Mzt1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsCiYjNDM7CQkJCQkgIGludCBzaGlmdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSkKJiM0Mzt7CiYjNDM7CXUzMiBpbnNuOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUI6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOgomIzQzOwkJaW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3Vic19leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gYWRkL3N1YiBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB0eXBlKTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAodmFyaWFudCkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOgomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6CiYjNDM7CQlpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXByX2VycigmIzM0OyVzOiB1bmtub3duIHZhcmlhbnQgZW5jb2RpbmcgJWRcbiYjMzQ7LCBfX2Z1bmNfXywgdmFyaWFudCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2hpZnQgJmx0OyAwIHx8IHNoaWZ0ICZndDsgNCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcbiYjMzQ7LCBfX2Z1bmNfXywgc2hpZnQpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JOLCBpbnNuLCBzcmMpOwomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STSwgaW5zbiwgcmVnKTsKJiM0MzsKJiM0MzsJLyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi8KJiM0MzsJcmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwKJiM0MzsJCQkJCSAgICAgKGV4dGVuZCAmbHQ7Jmx0OyAzKSB8IHNoaWZ0KTsKJiM0Mzt9CiYjNDM7CiB1MzIgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsCiAJCQkgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmggYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaApAQCAtMjQzLDYgJiM0MzsyNDMsMTcgQEAKIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi8KICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pCiAKJiM0MzsvKiBBZGQvc3VidHJhY3QgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERFNVQl9FUkVHKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0LCB0eXBlKSBcCiYjNDM7CWFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXAomIzQzOwkJQUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXAomIzQzOwkJQUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKEVYVChSbSkgJmx0OyZsdDsgc2hpZnQpICovCiYjNDM7I2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXAomIzQzOwlBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERCkKJiM0MzsvKiBSZCA9IFJuICYjNDM7ICh1MzIpUm0gKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfVVhUVyhSZCwgUm4sIFJtKSBBNjRfQUREX0VYVCgxLCBSZCwgUm4sIFJtLCBVWFRXLCAwKQomIzQzOwogLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi8KICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcCiAJQTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwppbmRleCBkMTRkMjk3ZWJiOTY3Li4xY2QzMjdkMjEzZTM0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYwpAQCAtMTI0OSw2ICYjNDM7MTI0OSw0MyBAQCBzdGF0aWMgdm9pZCBlbWl0X3N0YWNrX2FyZ19zdG9yZV9pbW0oczMyIGltbSwgczE2IGJwZl9vZmYsIGNvbnN0IHU4IHRtcCwgc3RydWN0CiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcywKJiM0MzsgKiB4TiA9IGtlcm5fdm1fc3RhcnQgJiM0MzsgKHUzMil4Tiwgd2l0aCB0aGUgYXJlbmEgYmFzZSByZWdpc3RlciBob2xkaW5nCiYjNDM7ICoga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkCiYjNDM7ICogb24gdGhlIHRydW5jYXRlZCB2YWx1ZSBhcyBhcmVuYSBOVUxMIGlzIG9mZnNldCAwLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbikKJiM0Mzt7CiYjNDM7CWNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGN0eC0mZ3Q7cHJvZywgaW5zbik7CiYjNDM7CWlmICghZm0pCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbl90KGludCwgZm0tJmd0O25yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSAmIzQzOyBpXTsKJiM0MzsJCXU4IGZsYWdzID0gZm0tJmd0O2FyZ19mbGFnc1tpXTsKJiM0MzsKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoIWN0eC0mZ3Q7YXJlbmFfdm1fc3RhcnQpKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJaWYgKGZsYWdzICZhbXA7IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHKSB7CiYjNDM7CQkJLyogMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHMgKi8KJiM0MzsJCQllbWl0KEE2NF9NT1YoMCwgcmVnLCByZWcpLCBjdHgpOwomIzQzOwkJCS8qIHNraXAgdGhlIGFkZCBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqLwomIzQzOwkJCWVtaXQoQTY0X0NCWigwLCByZWcsIDIpLCBjdHgpOwomIzQzOwkJfQomIzQzOwkJZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi4KICAqIFJldHVybnM6CiAgKiAwICAtIHN1Y2Nlc3NmdWxseSBKSVRlZCBhbiA4LWJ5dGUgZUJQRiBpbnN0cnVjdGlvbi4KQEAgLTE2NzEsNiAmIzQzOzE3MDgsMTEgQEAgc3RhdGljIGludCBidWlsZF9pbnNuKGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBicGZfaW5zbgogCQkJCQkgICAgJmFtcDtmdW5jX2FkZHIsICZhbXA7ZnVuY19hZGRyX2ZpeGVkKTsKIAkJaWYgKHJldCAmbHQ7IDApCiAJCQlyZXR1cm4gcmV0OwomIzQzOwkJaWYgKGluc24tJmd0O3NyY19yZWcgPT0gQlBGX1BTRVVET19LRlVOQ19DQUxMKSB7CiYjNDM7CQkJcmV0ID0gZW1pdF9rZnVuY19hcmVuYV9hcmdzKGN0eCwgaW5zbik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiAJCWVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7CiAJCS8qCiAJCSAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZQpAQCAtMjMzNSw2ICYjNDM7MjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikKIHsKIAlpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKQpAQCAtMjUwOCwzNCAmIzQzOzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKQogCX0KIH0KIAomIzQzOy8qCiYjNDM7ICogQ29udmVydCBhbiBhcmVuYSBrZXJuZWwgYWRkcmVzcyBpbnRvIHRoZSBhcmVuYSBwb2ludGVyIGZvcm0gb24gaXRzIHdheSBpbnRvCiYjNDM7ICogdGhlIEJQRiBjdHgsIGRzdCA9ICh1MzIpKHNyYyAtIGtlcm5fdm1fc3RhcnQpLCB3aXRoIEBiYXNlX2xvIGhvbGRpbmcgdGhlIGxvdwomIzQzOyAqIDMyIGJpdHMgb2Yga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbAomIzQzOyAqIDY0LWJpdCBrZXJuZWwgcG9pbnRlci4gVGhlIDMyLWJpdCBzdWJ0cmFjdGlvbiBib3RoIHRydW5jYXRlcyBhbmQgY2xlYXJzIHRoZQomIzQzOyAqIHVwcGVyIGhhbGYsIHNvIHRoZSBzdG9yZWQgdmFsdWUgc2F0aXNmaWVzIHRoZSBKSVQgaW52YXJpYW50IGZvciBhcmVuYQomIzQzOyAqIHBvaW50ZXIgcmVnaXN0ZXJzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVtaXRfYXJlbmFfYXJnX2NvbnYoc3RydWN0IGppdF9jdHggKmN0eCwgdTggZHN0LCB1OCBzcmMsIGJvb2wgbnVsbGFibGUsIHU4IGJhc2VfbG8pCiYjNDM7ewomIzQzOwlpZiAobnVsbGFibGUpIHsKJiM0MzsJCWlmIChkc3QgIT0gc3JjKQomIzQzOwkJCWVtaXQoQTY0X01PVigxLCBkc3QsIHNyYyksIGN0eCk7CiYjNDM7CQkvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqLwomIzQzOwkJZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7CiYjNDM7CQlzcmMgPSBkc3Q7CiYjNDM7CX0KJiM0MzsJZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZiwKLQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSwKLQkJICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4pCiYjNDM7CQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAomIzQzOwkJICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpCiB7Ci0JaW50IGk7Ci0JaW50IHJlZzsKLQlpbnQgZG9mZjsKLQlpbnQgc29mZjsKLQlpbnQgc2xvdHM7CiAJdTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdOwomIzQzOwl1OCBiYXNlX2xvID0gYnBmMmE2NFtUTVBfUkVHXzJdOwomIzQzOwlpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90czsKJiM0MzsKJiM0MzsJLyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqLwomIzQzOwlpZiAoYXJlbmFfYmFzZSkKJiM0MzsJCWVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpOwogCiAJLyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlCiAJICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvbgogCSAqLwotCWZvciAocmVnID0gMDsgcmVnICZsdDsgYS0mZ3Q7cmVnc19mb3JfYXJnczsgcmVnJiM0MzsmIzQzOykgewotCQllbWl0KGZvcl9jYWxsX29yaWdpbiA/Ci0JCSAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6Ci0JCSAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwKLQkJICAgICBjdHgpOwotCQliYXJnc19vZmYgJiM0Mzs9IDg7CiYjNDM7CWZvciAoaSA9IDAsIHJlZyA9IDA7IGkgJmx0OyBhLSZndDthcmdzX2luX3JlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiYjNDM7CQlzbG90cyA9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDg7CiYjNDM7CQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKJiM0MzsJCQlpZiAoZm9yX2NhbGxfb3JpZ2luKSB7CiYjNDM7CQkJCWVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTsKJiM0MzsJCQl9IGVsc2UgaWYgKGFyZW5hX2FyZykgewomIzQzOwkJCQllbWl0X2FyZW5hX2FyZ19jb252KGN0eCwgdG1wLCByZWcsIG51bGxhYmxlLCBiYXNlX2xvKTsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCWVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTsKJiM0MzsJCQl9CiYjNDM7CQkJcmVnJiM0MzsmIzQzOzsKJiM0MzsJCQliYXJnc19vZmYgJiM0Mzs9IDg7CiYjNDM7CQl9CiAJfQogCi0Jc29mZiA9IDMyOyAvKiBvbiBzdGFjayBhcmd1bWVudHMgc3RhcnQgZnJvbSBGUCAmIzQzOyAzMiAqLwomIzQzOwkvKgomIzQzOwkgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZQomIzQzOwkgKiBwcm9sb2d1ZS4gRW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCBmcm9tIGEgdHJhY2VkIGZ1bmN0aW9uLCB0aGUKJiM0MzsJICogcHJvbG9ndWUgc2F2ZXMgYm90aCB0aGUgcGFyZW50IChGUC94OSkgYW5kIHRoZSB0cmFjZWQgZnVuY3Rpb24KJiM0MzsJICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgJiM0MzsgMzIuIEEgc3RydWN0X29wcwomIzQzOwkgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvCiYjNDM7CSAqIHRoZXkgc3RhcnQgYXQgRlAgJiM0MzsgMTYuCiYjNDM7CSAqLwomIzQzOwlzb2ZmID0gaXNfc3RydWN0X29wcyA/IDE2IDogMzI7CiAJZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpOwogCiAJLyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi8KIAlmb3IgKGkgPSBhLSZndDthcmdzX2luX3JlZ3M7IGkgJmx0OyBtLSZndDtucl9hcmdzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJYm9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlICZhbXA7JmFtcDsgKG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX0FSRU5BX0FSRyk7CiYjNDM7CQlib29sIG51bGxhYmxlID0gbS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHOwomIzQzOwogCQlzbG90cyA9IChtLSZndDthcmdfc2l6ZVtpXSAmIzQzOyA3KSAvIDg7CiAJCS8qIHZlcmlmaWVyIGVuc3VyZXMgYXJnX3NpemUgJmx0Oz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi8KIAkJd2hpbGUgKHNsb3RzLS0gJmd0OyAwKSB7CkBAIC0yNTQ1LDYgJiM0MzsyNjM0LDggQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsCiAJCQkgKi8KIAkJCWlmIChzbG90cyA9PSAwICZhbXA7JmFtcDsgIWZvcl9jYWxsX29yaWdpbikKIAkJCQljbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLSZndDthcmdfc2l6ZVtpXSAlIDgpOwomIzQzOwkJCWlmIChhcmVuYV9hcmcpCiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHRtcCwgbnVsbGFibGUsIGJhc2VfbG8pOwogCQkJZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTsKIAkJCXNvZmYgJiM0Mzs9IDg7CiAJCQlkb2ZmICYjNDM7PSA4OwpAQCAtMjYwNCw4ICYjNDM7MjY5NSwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKIAlib29sIGlzX3N0cnVjdF9vcHMgPSBpc19zdHJ1Y3Rfb3BzX3RyYW1wKGZlbnRyeSk7CiAJaW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQsIGNvb2tpZV9iYXJnc19vZmY7CiAJaW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTsKJiM0MzsJdTY0IGFyZW5hX2Jhc2U7CiAJdTY0IGZ1bmNfbWV0YTsKIAomIzQzOwkvKgomIzQzOwkgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHkKJiM0MzsJICogaW5jb21wYXRpYmxlIHdpdGggRl9DQUxMX09SSUcgfCBGX1NLSVBfRlJBTUUgfCBGX0lQX0FSRyBiZWNhdXNlCiYjNDM7CSAqIEBmdW5jX2FkZHIuIEFyZW5hIGNvbnZlcnNpb24gcmVsaWVzIG9uIHRoaXM6IGJwZl90cmFtcF9hcmVuYV9iYXNlKCkKJiM0MzsJICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZQomIzQzOwkgKiBuZXZlciBjYWxscyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gd2l0aCBjb252ZXJ0ZWQgYXJndW1lbnRzLgomIzQzOwkgKi8KJiM0MzsJV0FSTl9PTl9PTkNFKChmbGFncyAmYW1wOyBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICAoZmxhZ3MgJmFtcDsgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpOwomIzQzOwomIzQzOwlhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7CiYjNDM7CiAJLyogdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6CiAJICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXQogCSAqICAgICAgICAgICAgICAgICAgICBbIEZQICAgICAgICAgICAgICAgIF0KQEAgLTI3MjEsNyAmIzQzOzI4MjUsNyBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKIAlzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpOwogCiAJLyogc2F2ZSBhcmdzIGZvciBicGYgKi8KLQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UpOwomIzQzOwlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpOwogCiAJLyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovCiAJZW1pdChBNjRfU1RSNjRJKEE2NF9SKDE5KSwgQTY0X1NQLCByZWdzX29mZiksIGN0eCk7CkBAIC0yNzY5LDggJiM0MzsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sCiAJfQogCiAJaWYgKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0NBTExfT1JJRykgewotCQkvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi8KLQkJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpOwomIzQzOwkJLyogdGhlIG9yaWdpbmFsIGZ1bmMgdGFrZXMga2VybmVsIGFkZHJlc3NlcywgbmV2ZXIgY29udmVydGVkIG9uZXMgKi8KJiM0MzsJCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTsKIAkJLyogY2FsbCBvcmlnaW5hbCBmdW5jICovCiAJCWVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpOwogCQllbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwppbmRleCA5NDBlYzJjZGEwZDUyLi43ZjlmNTRiYTNmYmU1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYwpAQCAtNiw3ICYjNDM7Niw3IEBACiAjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmFfYXR0YWNoLnNrZWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmgmIzM0OwogCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKQomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCiAvKgogICogQXR0YWNoIGNhbGxiYWNrcyB3aXRoIF9fYXJlbmEgYW5kIF9fYXJlbmFfX251bGxhYmxlIGFyZ3VtZW50cyBhbmQgZHJpdmUKICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLgpAQCAtMTExLDExICYjNDM7MTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZCkKIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKQogewogCS8qCi0JICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LgotCSAqIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGFyZW5hCi0JICogYXJndW1lbnRzJiMzNDssIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLgomIzQzOwkgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IGFuZAomIzQzOwkgKiBhcm02NCBvbmx5LiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggJiMzNDtKSVQgZG9lcyBub3Qgc3VwcG9ydAomIzQzOwkgKiBhcmVuYSBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiAJICovCi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKQomIzQzOyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pCiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9hcmcmIzM0OykpCiAJCWFyZW5hX2FyZygpOwogCWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YXJlbmFfYXJnX2ZhaWwmIzM0OykpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCmluZGV4IGNkY2VhODg5ZGE1ODYuLmJmMGQzMDRlMGU1OWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jCkBAIC0yNyw2ICYjNDM7MjcsNyBAQCB2b2xhdGlsZSB1NjQgc3Rhc2g7CiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpCiB7CkBAIC03MCw2ICYjNDM7NzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eCkKICAqLwogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpCiB7CkBAIC0xMTEsNiAmIzQzOzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KQogewpAQCAtMTQyLDYgJiM0MzsxNDUsNyBAQCBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KQogewpAQCAtMTY5LDYgJiM0MzsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eCkKIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KQogewpAQCAtMTg5LDYgJiM0MzsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hJiMzNDspCiBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eCkKIHsKQEAgLTE5OCw2ICYjNDM7MjA0LDcgQEAgaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2lzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyJiMzNDspCiBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KQogewpAQCAtMjEzLDYgJiM0MzsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KQogCWRlZmluZWQoX19CUEZfRkVBVFVSRV9TVEFDS19BUkdVTUVOVCkKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZmFpbHVyZSBfX21zZygmIzM0O2FyZW5hIHBvaW50ZXIgY2Fubm90IGJlIGEgc3RhY2sgYXJndW1lbnQmIzM0OykKIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQogewpAQCAtMjIzLDYgJiM0MzsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eCkKICNlbHNlCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2Rlc2NyaXB0aW9uKCYjMzQ7YXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKQEAgLTMyLDYgJiM0MzszMiwxMCBAQCBfX2ppdGVkKCYjMzQ7CW1vdmwJJWVkaSwgJWVkaSYjMzQ7KQogX19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKIF9faml0ZWQoJiMzNDsuLi4mIzM0OykKIF9faml0ZWQoJiMzNDsJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgwLCB4MjgsIHcwLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owl7eyhibHxtb3YpCS4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfcmViYXNlKHZvaWQgKmN0eCkKIHsKQEAgLTQ4LDYgJiM0Mzs1MiwxMiBAQCBfX2ppdGVkKCYjMzQ7CXRlc3RsCSVlZGksICVlZGkmIzM0OykKIF9faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcmRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7TDA6CWNhbGxxCXt7Lip9fSYjMzQ7KQomIzQzO19fYXJjaF9hcm02NAomIzQzO19faml0ZWQoJiMzNDsuLi4mIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdgl3MCwgdzAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNiegl3MCwgTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MCwgeDI4LCB3MCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtMMDoJe3suKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eCkKIHsKQEAgLTcyLDYgJiM0Mzs4MiwxNiBAQCBfX2ppdGVkKCYjMzQ7CXRlc3RsCSVyOGQsICVyOGQmIzM0OykKIF9faml0ZWQoJiMzNDsJamUJTDAmIzM0OykKIF9faml0ZWQoJiMzNDsJYWRkcQklcjEyLCAlcjgmIzM0OykKIF9faml0ZWQoJiMzNDtMMDoJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgwLCB4MjgsIHcwLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDEsIHgyOCwgdzEsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MiwgeDI4LCB3MiwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgzLCB4MjgsIHczLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0Owltb3YJdzQsIHc0JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwljYnoJdzQsIEwwJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDQsIHgyOCwgdzQsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7TDA6CXt7Lip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpCiB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwppbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKQEAgLTU5LDExICYjNDM7NTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztTRUMoJiMzNDtzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90JiMzNDspCiYjNDM7aW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KQomIzQzO3sKJiM0MzsJdTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTsKJiM0MzsKJiM0MzsJYXJlbmFfdG91Y2gmIzQzOyYjNDM7OwomIzQzOwkvKgomIzQzOwkgKiBUaGUgMTYtYnl0ZSBzdHJ1Y3Qgb2NjdXBpZXMgY3R4WzBdIGFuZCBjdHhbMV0sIHNvIEBwdHIgaXMgYXJndW1lbnQKJiM0MzsJICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci4KJiM0MzsJICovCiYjNDM7CWlmIChjdHhbMF0gIT0gMTEgfHwgY3R4WzFdICE9IDIyKQomIzQzOwkJcmV0dXJuIDB4YmFkOwomIzQzOwkqcHRyICYjNDM7PSAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBTRUMoJiMzNDsuc3RydWN0X29wcy5saW5rJiMzNDspCiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB0ZXN0bW9kX2FyZW5hID0gewogCS50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLAogCS50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLAogCS50ZXN0X2FyZW5hX3N0YWNrID0gKHZvaWQgKil0ZXN0X2FyZW5hX3N0YWNrX2NiLAomIzQzOwkudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLAogfTsKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQpAQCAtMTA5LDYgJiM0MzsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KQogCWlmICgqdmFsICE9IDQ0KQogCQlyZXR1cm4gOTsKIAomIzQzOwkvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi8KJiM0MzsJcmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KCh1NjQgKil2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIDEwOwomIzQzOwlpZiAoKnZhbCAhPSA0NSkKJiM0MzsJCXJldHVybiAxMTsKJiM0MzsKIAlicGZfYXJlbmFfZnJlZV9wYWdlcygmYW1wO2FyZW5hLCAodm9pZCBfX2FyZW5hICopdmFsLCAxKTsKICNlbmRpZgogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC00MDIsMTIgJiM0Mzs0MDIsMTkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdChzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLAomIzQzOwkJCQkJCSAgdTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHsKIAkudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLAogCS50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsCiAJLnRlc3RfYXJlbmEgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hLAogCS50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSwKIAkudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssCiYjNDM7CS50ZXN0X2FyZW5hX211bHRpc2xvdCA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90LAogfTsKIAogc3RhdGljIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9zdHJ1Y3Rfb3BzMyh2b2lkKQpAQCAtNDQxLDYgJiM0Mzs0NDgsMTMgQEAgX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKHU2NCAqcHRyX19hcmVuYSkKIAlyZXR1cm4gc3Rfb3BzMy0mZ3Q7dGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTsKIH0KIAomIzQzO19fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QodTY0ICpwdHJfX2FyZW5hKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCA9IHsgLmEgPSAxMSwgLmIgPSAyMiB9OwomIzQzOwomIzQzOwlyZXR1cm4gc3Rfb3BzMy0mZ3Q7dGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7CiYjNDM7fQomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHsKIAlpbnQgYTsKIH07CkBAIC04NTIsNiAmIzQzOzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTsKIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaAppbmRleCAzM2YyYWY1YjcwODU3Li4yMTBiOTE5MjkwY2MyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKQEAgLTEwMyw2ICYjNDM7MTAzLDEyIEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMyIHsKIAlpbnQgKCp0ZXN0XzEpKHZvaWQpOwogfTsKIAomIzQzOy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi8KJiM0MztzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciB7CiYjNDM7CXU2NCBhOwomIzQzOwl1NjQgYjsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGJwZl90ZXN0bW9kX29wczMgewogCWludCAoKnRlc3RfMSkodm9pZCk7CiAJaW50ICgqdGVzdF8yKSh2b2lkKTsKQEAgLTExMiw2ICYjNDM7MTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgewogCS8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovCiAJaW50ICgqdGVzdF9hcmVuYV9zdGFjaykodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsIHU2NCBlLCB1NjQgZiwKIAkJCQl1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTsKJiM0MzsJLyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovCiYjNDM7CWludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7CiB9OwogCiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3MgewpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggYzQzODNhY2I1M2MxMS4uN2Q4MTA3MGVlZmU3ZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC0xMjMsNiAmIzQzOzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTsKIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYShfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwogaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltOwogaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiYjNDM7aW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltOwogCiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsCiAJCQkJX191MzIgYywgX191NjQgZCkgX19rc3ltOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyNgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEFyZW5hIEFyZ3VtZW50cyBpbiBBUk02NCBKSVQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIEJQRiBhcmVuYSBhcmd1bWVudCBzdXBwb3J0IHdpdGhpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcgYW5kIHBpbnBvaW50IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBgYXJjaC9hcm02NC9saWIvaW5zbi5jYCwgYW5kIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaGAsIGFuZCB0aGVyZSBhcmUgc29tZSB0ZXN0cyBhZGRlZCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL2AuCgpUaGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgYGVtaXRfa2Z1bmNfYXJlbmFfYXJnc2AgYW5kIGBlbWl0X2FyZW5hX2FyZ19jb252YCwgd2hpY2ggYXJlIGNhbGxlZCBkdXJpbmcgdGhlIEJQRiBKSVQgY29tcGlsYXRpb24gcHJvY2Vzcy4gVGhpcyBtYWtlcyBpdCBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gdG8gc3BlY2lmaWMgZnVuY3Rpb25zLiBJbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBJIHNlZSBhIGZldyBvcHRpb25zOiBgYnBmX2ludF9qaXRfY29tcGlsZWAgbG9va3MgZ2VuZXJpYywgYW5kIGBidWlsZF9pbnNuYCBzZWVtcyB0b28gYnJvYWQuIEhvd2V2ZXIsIGBwcmVwYXJlX3RyYW1wb2xpbmVgIGlzIG1vZGlmaWVkIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIGFuZCB0aGVuIHRoZXJlIGFyZSB0aGUgc3RhdGljIGZ1bmN0aW9ucyBgZW1pdF9rZnVuY19hcmVuYV9hcmdzYCwgYGVtaXRfYXJlbmFfYXJnX2NvbnZgLCBhbmQgYHNhdmVfYXJnc2AuCgpMb29raW5nIGF0IGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCBJIHNlZSBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AuIEltcG9ydGFudGx5LCB0aGlzIG9uZSBpc24mIzM5O3Qgc3RhdGljLiBBZnRlciBhIHF1aWNrIHNjYW4gYmFjayBhdCBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBJIGFsc28gc2VlIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIG5ld2x5IGFkZGVkIGFuZCBub24tc3RhdGljLgoKT2theSwgdGhlIEpJVCBjb21waWxlciBmdW5jdGlvbnMgYXJlIG1vc3RseSBzdGF0aWMgaW50ZXJuYWxseSwgc28gdGhlIG1haW4gZW50cnkgcG9pbnRzIGFyZSBsaWtlbHkgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgY2FsbHMgYHByZXBhcmVfdHJhbXBvbGluZWAsIHNvIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuCgpCYXNlZCBvbiB0aGF0LCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgbG9va3MgbGlrZSBhIGdvb2QgZm9jdXMsIGFzIGl0JiMzOTtzIGEgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb24uIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGEgbmV3IGZ1bmN0aW9uIGFzIHdlbGwuIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19CUEZfSklUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgQ09ORklHX0FSTTY0YCBhcmUgcmVxdWlyZWQuCgpUbyBjb25maXJtIHRoZSBzY29wZSBvZiB0aGlzIG5ldyBmdW5jdGlvbiwgSSYjMzk7bGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBsb2NhdGUgdGhlIGRlZmluaXRpb24gb2YgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmg9NjUwPXUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1NS1cdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oOjY1Njp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaC02NTctXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuLS1cbmFyY2gvYXJtNjQvbGliL2luc24uYz05MzE9dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4tLVxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5My0gKi9cbmFyY2gvYXJtNjQvbGliL2luc24uYzo5OTQ6dTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5NS1cdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oLTI0Ny0jZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaDoyNDg6XHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0LmgtMjQ5LVx0XHRBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDg3CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBCUEYgYXJlbmEgYXJndW1lbnQgc3VwcG9ydCB3aXRoaW4gdGhlIEFSTTY0IEpJVCBjb21waWxlci4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uLiBGcm9tIHdoYXQgSSBjYW4gZ2F0aGVyLCB0aGUga2V5IG1vZGlmaWNhdGlvbnMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgIGFuZCBgYXJjaC9hcm02NC9saWIvaW5zbi5jYC4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJJiMzOTtsbCB3YW50IHRvIGRpdmUgZGVlcCBpbnRvIHRoZWlyIGltcGxlbWVudGF0aW9ucyB0byBzZWUgaG93IHRoZXkmIzM5O3JlIGhhbmRsaW5nIGFyZW5hIGFyZ3VtZW50cyB3aXRoaW4gdGhlIGluc3RydWN0aW9uIGdlbmVyYXRpb24gYW5kIGZlYXR1cmUgZGV0ZWN0aW9uLCByZXNwZWN0aXZlbHkuCgpBbmQgb2YgY291cnNlLCBnaXZlbiB0aGlzIGlzIGEgSklUIGNvbXBpbGVyIGNoYW5nZSwgZnV6emluZyBpcyBlc3NlbnRpYWwuIEFueSBjaGFuZ2UgbGlrZSB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlY29tbWVuZCBhcHByb3ByaWF0ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuCgpUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWF0dGVyIGhlcmUgYXJlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCwgY29uZmlybWluZyB0aGVzZSBhcmUgcHJlcmVxdWlzaXRlcyBmb3IgdGhlIG5ldyBmdW5jdGlvbmFsaXR5LgoKSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhlIHRleHQgc2F5cyBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCBhcyBpdCBjYWxscyBgcHJlcGFyZV90cmFtcG9saW5lYCwgYW5kIEkgbmVlZCB0byBzZWUgaG93IHRoZSBjaGFuZ2VzIGNhc2NhZGUgdGhyb3VnaCB0aGUgdHJhbXBvbGluZSBzZXR1cC4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayBpZiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRyYW1wb2xpbmUgc2V0dXAgaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgYXJlbmEgYXJndW1lbnQgbWVjaGFuaXNtLgoKSW4gc3VtbWFyeSwgdGhpcyByZXF1aXJlcyBhIGNhcmVmdWwgcmV2aWV3IG9mIHRoZSBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiwgdGhlIGZlYXR1cmUgZGV0ZWN0aW9uIGxvZ2ljLCBhbmQgdGhlIHRyYW1wb2xpbmUgc2V0dXAsIHdpdGggYSBzdHJvbmcgZW1waGFzaXMgb24gZnV6emluZyB0byB2YWxpZGF0ZSB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yNjU2PXN0YXRpYyB2b2lkIHN0b3JlX2Z1bmNfbWV0YShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1NjQgZnVuY19tZXRhLCBpbnQgZnVuY19tZXRhX29mZilcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNjYxLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjY2MjovKiBCYXNlZCBvbiB0aGUgeDg2JiMzOTtzIGltcGxlbWVudGF0aW9uIG9mIGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZSgpLlxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY2My0gKlxuLS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI5OTc9aW50IGFyY2hfcHJvdGVjdF9icGZfdHJhbXBvbGluZSh2b2lkICppbWFnZSwgdW5zaWduZWQgaW50IHNpemUpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwMS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjMwMDI6aW50IGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZShzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwgdm9pZCAqcm9faW1hZ2UsXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0zMDAzLVx0XHRcdFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNzQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQlBGIFRyYW1wb2xpbmUgYW5kIEpJVCBDb21waWxhdGlvbiBSZWFkaW5lc3MqKgoKQWxyaWdodCwgc28gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50LCBnb29kLiBUaGF0JiMzOTtzIG9uZSBrZXkgcGllY2UgaW4gcGxhY2UuIE5vdywgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByZXNlbmNlIG9mIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhpcyBpcyB0aGUgYmlnIG9uZSwgdGhlIGNvcmUgb2Ygd2hldGhlciB3ZSBjYW4gZXZlbiB0aGluayBhYm91dCBKSVQgY29tcGlsYXRpb24gZm9yIEJQRiBjb2RlIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBJZiB0aGF0IGZ1bmN0aW9uIGV4aXN0cyBhbmQgaXMgYWNjZXNzaWJsZSwgd2XigJlyZSBpbiBhIG11Y2ggYmV0dGVyIHBvc2l0aW9uIHRvIHByb2NlZWQuIFdpdGhvdXQgaXQsIHdlJiMzOTtyZSBzdHVjayBpbnRlcnByZXRpbmcsIGFuZCB3ZSBhbGwga25vdyBob3cgdGhhdCBpbXBhY3RzIHBlcmZvcm1hbmNlLiBTbywgbGV04oCZcyBzZWUgaWYgdGhhdCBob29rIGlzIGF2YWlsYWJsZS4uLiB0aGF0JiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9pbnRfaml0X2NvbXBpbGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTMzPXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEzOS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxNDA6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxNDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgbGF5IG91dCBteSB0aGlua2luZyBoZXJlLgoKKipEZWNvbnN0cnVjdGluZyBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBCUEYgYXJlbmEgc3R1ZmYuIEkmIzM5O3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGZlYXR1cmVzIHRoYXQgcmVsYXRlIGRpcmVjdGx5IHRvIHRoZSBhcmVuYSBmdW5jdGlvbmFsaXR5LgoKTm93LCBhcyBmb3IgdGhlIGNvbmZpZ3MsIEkmIzM5O20gcHJldHR5IHN1cmUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSBpbnZvbHZlZCwgYXMgdGhleSBvZnRlbiBhcmUgd2l0aCBCUEYtcmVsYXRlZCBmZWF0dXJlcy4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBhcmVuYSBtZWNoYW5pc20gaXRzZWxmLgoKVGhlcmVmb3JlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIEEgYGdyZXAgQVJFTkFgIHNlYXJjaCBpbiBgaW5pdC9LY29uZmlnYCBhbmQgYGtlcm5lbC9icGYvS2NvbmZpZ2Agc2hvdWxkIGdpdmUgbWUgYW55IGFyZW5hLXNwZWNpZmljIGNvbmZpZ3MgSSBtaWdodCBoYXZlIG92ZXJsb29rZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODg1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gdGFsa2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgQVJFTkEgaW4gdGhlIENvbmZpZ3VyYXRpb24gU3BhY2UqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYEFSRU5BYCBpcyB1c2VkIHdpdGhpbiBvdXIgY29uZmlndXJhdGlvbiBlY29zeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgZmVhdHVyZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgbGl2ZXMuIE15IHRob3VnaHQgaXMgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciB0aGUgc3RyaW5nIGBBUkVOQWAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgbW92ZSDigJMgcXVpY2ssIGRpcnR5LCBidXQgb2Z0ZW4gaGlnaGx5IGVmZmVjdGl2ZSBmb3IgYW4gaW5pdGlhbCBleHBsb3JhdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIG1hcCBvZiB3aGVyZSBgQVJFTkFgIGlzIGRlZmluZWQsIHdoaWNoIGZlYXR1cmVzIGRlcGVuZCBvbiBpdCwgYW5kIGhvcGVmdWxseSBzb21lIGNvbnRleHQgYXJvdW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJdCYjMzk7cyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQVJFTkEsIGFuZCBJIGNhbiBzdGFydCBmcm9tIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FSRU5BJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMjIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLiBteSBpbml0aWFsIGFzc3VtcHRpb24gYWJvdXQgYSBzZXBhcmF0ZSBjb25maWd1cmF0aW9uIGZvciB0aGUgQlBGIGFyZW5hIG1pZ2h0IGJlIGluY29ycmVjdC4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCB0aGUgYXJlbmEmIzM5O3MgYmVoYXZpb3IgaXMgaW50ZXJ0d2luZWQgd2l0aCB0aGUgYnJvYWRlciBgQlBGX1NZU0NBTExgIG1lY2hhbmlzbSwgcmF0aGVyIHRoYW4gaGF2aW5nIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24uCgpUbyBjb25maXJtIHRoaXMgc3VzcGljaW9uLCBJIHNob3VsZCBpbW1lZGlhdGVseSBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpcyBpbiBga2VybmVsL2JwZi9hcmVuYS5jYC4gSWYgdGhlIGFyZW5hIGhhcyBpdHMgb3duIGRlZGljYXRlZCBzb3VyY2UgZmlsZSwgdGhhdCB3b3VsZCBwcm92aWRlIGEgcHJldHR5IGRlZmluaXRpdmUgYW5zd2VyLCBhbmQgYSBwbGFjZSB0byBmaW5kIG1vcmUgaW5mb3JtYXRpb24sIG9uIHdoZXRoZXIgaXQmIzM5O3MgZ290IGEgdW5pcXVlIGNvbmZpZy4gSWYgaXQgZG9lc24mIzM5O3QgZXhpc3QsIHdlbGwgdGhlbiB0aGF0IG5hcnJvd3MgZG93biB0aGUgb3B0aW9ucyBzaWduaWZpY2FudGx5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmVuYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMTI5IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5rZXJuZWwvYnBmL01ha2VmaWxlPTE5PWlmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR182NEJJVCkseXkpXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGFyZW5hLm8gcmFuZ2VfdHJlZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTE2LS8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTc6ICogYnBmX2FyZW5hIGlzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGJldHdlZW4gYnBmIHByb2dyYW0gYW5kXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTgtICogdXNlciBzcGFjZSBwcm9jZXNzLlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMi0gKiBrZXJuX3ZtX3N0YXJ0IGZmZmZjOTAwMDFlNjkwMDAgLy8gcGlja2VkIGJ5IGdldF92bV9hcmVhKClcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzogKiBGb3IgdXNlciBzcGFjZSBhbGwgcG9pbnRlcnMgd2l0aGluIHRoZSBhcmVuYSBhcmUgbm9ybWFsIDgtYnl0ZSBhZGRyZXNzZXMuXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjQtICogSW4gdGhpcyBleGFtcGxlIDdmN2QyNjIwMDAwMCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgcGFnZSAocGdvZmY9MCkuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTMwLSAqXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzE6ICogQlBGIEpJVHMgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIGFjY2VzcyBhcmVuYTpcbmtlcm5lbC9icGYvYXJlbmEuYy0zMi0gKiAgIG1vdiBlYXgsIGVheCAgLy8gZWF4IGhhcyBsb3dlciAzMi1iaXQgb2YgdXNlciBwb2ludGVyXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM5LSAqIGludG8ga2VybmVsIGFuZCB1c2VyIHZtYS5cbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xua2VybmVsL2JwZi9hcmVuYS5jLTQxLSAqIHdoaWNoIHdpbGwgaW5zZXJ0IGl0IGludG8ga2VybmVsIHZtX2FyZWEuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxua2VybmVsL2JwZi9hcmVuYS5jOjQ5OnN0YXRpYyB2b2lkIGFyZW5hX2ZyZWVfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQsIGJvb2wgc2xlZXBhYmxlKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1MTpzdHJ1Y3QgYnBmX2FyZW5hIHtcbmtlcm5lbC9icGYvYXJlbmEuYy01Mi1cdHN0cnVjdCBicGZfbWFwIG1hcDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTktXHRycXNwaW5sb2NrX3Qgc3BpbmxvY2s7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjA6XHQvKiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IHBvcHVsYXRlZCBpbiB0aGUgYXJlbmEgKi9cbmtlcm5lbC9icGYvYXJlbmEuYy02MS1cdHU2NCBucl9wYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcbmtlcm5lbC9icGYvYXJlbmEuYzo3MzpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX2lycShzdHJ1Y3QgaXJxX3dvcmsgKml3KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NC1cbmtlcm5lbC9icGYvYXJlbmEuYzo3NTpzdHJ1Y3QgYXJlbmFfZnJlZV9zcGFuIHtcbmtlcm5lbC9icGYvYXJlbmEuYy03Ni1cdHN0cnVjdCBsbGlzdF9ub2RlIG5vZGU7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTgwLVxua2VybmVsL2JwZi9hcmVuYS5jOjgxOnU2NCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtODIte1xua2VybmVsL2JwZi9hcmVuYS5jOjgzOlx0cmV0dXJuIGFyZW5hID8gKHU2NCkgKGxvbmcpIGFyZW5hLVx1MDAzZWtlcm5fdm0tXHUwMDNlYWRkciAmIzQzOyBHVUFSRF9TWiAvIDIgOiAwO1xua2VybmVsL2JwZi9hcmVuYS5jLTg0LX1cbmtlcm5lbC9icGYvYXJlbmEuYy04NS1cbmtlcm5lbC9icGYvYXJlbmEuYzo4Njp1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxua2VybmVsL2JwZi9hcmVuYS5jLTg3LXtcbmtlcm5lbC9icGYvYXJlbmEuYzo4ODpcdHJldHVybiBhcmVuYSA/IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQgOiAwO1xua2VybmVsL2JwZi9hcmVuYS5jLTg5LX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTEtLyoqXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTI6ICogYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0IC0ga2Vybl92bV9zdGFydCBsb29rdXAgYnkgc3RydWN0IGJwZl9tYXAgKlxua2VybmVsL2JwZi9hcmVuYS5jLTkzLSAqIEBtYXA6IGEgQlBGX01BUF9UWVBFX0FSRU5BIG1hcFxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy05Ni0gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzo5Nzp1NjQgYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtOTgte1xua2VybmVsL2JwZi9hcmVuYS5jOjk5Olx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDAtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDItLyoqXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTAzOiAqIGJwZl9wcm9nX2FyZW5hIC0gcmV0dXJuIHRoZSBicGZfbWFwIG9mIHRoZSBhcmVuYSByZWZlcmVuY2VkIGJ5IEBwcm9nXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTA0LSAqIEBwcm9nOiBhIGxvYWRlZCBCUEYgcHJvZ3JhbVxua2VybmVsL2JwZi9hcmVuYS5jLTEwNS0gKlxua2VybmVsL2JwZi9hcmVuYS5jOjEwNjogKiBUaGUgdmVyaWZpZXIgZW5mb3JjZXMgYXQgbW9zdCBvbmUgYXJlbmEgcGVyIHByb2dyYW0gYW5kIHN0b3JlcyBpdCBpblxua2VybmVsL2JwZi9hcmVuYS5jOjEwNzogKiBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhcmVuYS4gUmV0dXJuIHRoYXQgYXJlbmEmIzM5O3MgdW5kZXJseWluZyBicGZfbWFwLCBvciBOVUxMIGlmXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA4OiAqIEBwcm9nIGRvZXMgbm90IHJlZmVyZW5jZSBhbiBhcmVuYS5cbmtlcm5lbC9icGYvYXJlbmEuYy0xMDktICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwOnN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTExLXtcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTI6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IHByb2ctXHUwMDNlYXV4LVx1MDAzZWFyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTExMy1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMTQ6XHRyZXR1cm4gYXJlbmEgPyBcdTAwMjZhcmVuYS1cdTAwM2VtYXAgOiBOVUxMO1xua2VybmVsL2JwZi9hcmVuYS5jLTExNS19XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE2LVxua2VybmVsL2JwZi9hcmVuYS5jOjExNzpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcGVla19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxua2VybmVsL2JwZi9hcmVuYS5jLTExOC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEyMS1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMjI6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3B1c2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxua2VybmVsL2JwZi9hcmVuYS5jLTEyMy17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEyNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMjc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BvcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxua2VybmVsL2JwZi9hcmVuYS5jLTEyOC17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEzMS1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMzI6c3RhdGljIGxvbmcgYXJlbmFfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxua2VybmVsL2JwZi9hcmVuYS5jLTEzMy17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTEzNi1cbmtlcm5lbC9icGYvYXJlbmEuYzoxMzc6c3RhdGljIGludCBhcmVuYV9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQxLVxua2VybmVsL2JwZi9hcmVuYS5jOjE0MjpzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTE0My17XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTQ0Olx0cmV0dXJuICh1MzIpKHVhZGRyIC0gKHUzMilhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDUtfVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0xNDc9c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xua2VybmVsL2JwZi9hcmVuYS5jOjE0ODpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTE0OS1cdHN0cnVjdCBwYWdlICoqcGFnZXM7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MTU0Olx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU1LVx0c3RydWN0IGxsaXN0X2hlYWQgKmZyZWVfcGFnZXM7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jPTE1OD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTE4NC1cdFx0XHRjb250aW51ZTtcbmtlcm5lbC9icGYvYXJlbmEuYzoxODU6XHRcdGlmIChXQVJOX09OX09OQ0UocHRlX3BhZ2Uob2xkKSAhPSBkLVx1MDAzZWFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg2LVx0XHRcdHJldHVybiAtRUJVU1k7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTE5Mi1cdCAqIFdpdGhvdXQgcHRlcF90cnlfc2V0KCkgdGhlcmUgaXMgbm8gYXRvbWljIGluc3RhbGxlciwgYnV0IHN1Y2ggYXJjaGVzXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTkzOlx0ICogYWxzbyBkbyBub3Qgd2lyZSB1cCBicGZfYXJlbmFfaGFuZGxlX3BhZ2VfZmF1bHQoKSwgc28gbm8gc2NyYXRjaCBwYWdlXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTk0LVx0ICogaXMgZXZlciBpbnN0YWxsZWQgYW5kIHRoZSBzbG90IGlzIGFsd2F5cyBub25lIGhlcmUuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIwMC1cdGQtXHUwMDNlaSYjNDM7JiM0Mzs7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MjAxOlx0V1JJVEVfT05DRShkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzLCBkLVx1MDAzZWFyZW5hLVx1MDAzZW5yX3BhZ2VzICYjNDM7IDEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTIwMi1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0yMTA9c3RhdGljIGludCBhcHBseV9yYW5nZV9jbGVhcl9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTIyOC1cdC8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjI5Olx0ICogU2tpcCB0aGUgcGVyLWFyZW5hIHNjcmF0Y2ggcGFnZS4gQSBrZXJuZWwgZmF1bHQgb24gYW4gdW5hbGxvY2F0ZWQgdWFkZHJcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzA6XHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xua2VybmVsL2JwZi9hcmVuYS5jLTIzMS1cdCAqIGhlcmUuIFdpdGhvdXQgdGhlIHNraXAsIHNjcmF0Y2hfcGFnZSB3b3VsZCBiZSBmcmVlZC5cbmtlcm5lbC9icGYvYXJlbmEuYy0yMzItXHQgKi9cbmtlcm5lbC9icGYvYXJlbmEuYzoyMzM6XHRpZiAocGFnZSA9PSBkLVx1MDAzZWFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzQtXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yMzYtXHRfX2xsaXN0X2FkZChcdTAwMjZwYWdlLVx1MDAzZXBjcF9sbGlzdCwgZC1cdTAwM2VmcmVlX3BhZ2VzKTtcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzc6XHRXUklURV9PTkNFKGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMsIGQtXHUwMDNlYXJlbmEtXHUwMDNlbnJfcGFnZXMgLSAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzgtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjQxPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X3NjcmF0Y2hfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNTgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjU5OnN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxua2VybmVsL2JwZi9hcmVuYS5jLTI2MC17XG5rZXJuZWwvYnBmL2FyZW5hLmMtMjYxLVx0LyogUG9wdWxhdGUgaW50ZXJtZWRpYXRlcyBmb3IgdGhlIHJlY292ZXJ5IHJhbmdlICg0IEdpQiAmIzQzOyB1cHBlciBoYWxmLWd1YXJkKS4gKi9cbmtlcm5lbC9icGYvYXJlbmEuYzoyNjI6XHRyZXR1cm4gYXBwbHlfdG9fcGFnZV9yYW5nZShcdTAwMjZpbml0X21tLCBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpLFxua2VybmVsL2JwZi9hcmVuYS5jLTI2My1cdFx0XHRcdCAgIFNaXzRHICYjNDM7IEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY1LVxua2VybmVsL2JwZi9hcmVuYS5jOjI2NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjcte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0yNjktXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbmtlcm5lbC9icGYvYXJlbmEuYzoyNzA6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzEtXHR1NjQgdm1fcmFuZ2U7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTI3My1cbmtlcm5lbC9icGYvYXJlbmEuYzoyNzQ6XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmEoKSlcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzUtXHRcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjk5LVxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcdGFyZW5hID0gYnBmX21hcF9hcmVhX2FsbG9jKHNpemVvZigqYXJlbmEpLCBudW1hX25vZGUpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMwMTpcdGlmICghYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAyLVx0XHRnb3RvIGVycjtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDMtXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA0Olx0YXJlbmEtXHUwMDNla2Vybl92bSA9IGtlcm5fdm07XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzA1Olx0YXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCA9IGF0dHItXHUwMDNlbWFwX2V4dHJhO1xua2VybmVsL2JwZi9hcmVuYS5jOjMwNjpcdGlmIChhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jOjMwNzpcdFx0YXJlbmEtXHUwMDNldXNlcl92bV9lbmQgPSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ICYjNDM7IHZtX3JhbmdlO1xua2VybmVsL2JwZi9hcmVuYS5jLTMwOC1cbmtlcm5lbC9icGYvYXJlbmEuYzozMDk6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZhcmVuYS1cdTAwM2V2bWFfbGlzdCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEwOlx0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmFyZW5hLVx1MDAzZWZyZWVfc3BhbnMpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMxMTpcdGluaXRfaXJxX3dvcmsoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9pcnEsIGFyZW5hX2ZyZWVfaXJxKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozMTI6XHRJTklUX1dPUksoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV93b3JrLCBhcmVuYV9mcmVlX3dvcmtlcik7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEzOlx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIGF0dHIpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMxNC1cbmtlcm5lbC9icGYvYXJlbmEuYzozMTU6XHRlcnIgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgTlVNQV9OT19OT0RFLCAxLCBcdTAwMjZhcmVuYS1cdTAwM2VzY3JhdGNoX3BhZ2UpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMxNi1cdGlmIChlcnIpXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzE3Olx0XHRnb3RvIGVycl9mcmVlX2FyZW5hO1xua2VybmVsL2JwZi9hcmVuYS5jLTMxOC1cbmtlcm5lbC9icGYvYXJlbmEuYzozMTk6XHRyYW5nZV90cmVlX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcdGVyciA9IHJhbmdlX3RyZWVfc2V0KFx1MDAyNmFyZW5hLVx1MDAzZXJ0LCAwLCBhdHRyLVx1MDAzZW1heF9lbnRyaWVzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjEtXHRpZiAoZXJyKVxua2VybmVsL2JwZi9hcmVuYS5jLTMyMi1cdFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyMzpcdG11dGV4X2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlbG9jayk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzI0Olx0bXV0ZXhfaW5pdChcdTAwMjZhcmVuYS1cdTAwM2V6YXBfbXV0ZXgpO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyNTpcdHJhd19yZXNfc3Bpbl9sb2NrX2luaXQoXHUwMDI2YXJlbmEtXHUwMDNlc3BpbmxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jOjMyNjpcdGVyciA9IHBvcHVsYXRlX3BndGFibGVfZXhjZXB0X3B0ZShhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI3LVx0aWYgKGVycilcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI5LVxua2VybmVsL2JwZi9hcmVuYS5jOjMzMDpcdHJldHVybiBcdTAwMjZhcmVuYS1cdTAwM2VtYXA7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzMxLVxua2VybmVsL2JwZi9hcmVuYS5jLTMzMi1lcnJfZGVzdHJveV9ydDpcbmtlcm5lbC9icGYvYXJlbmEuYzozMzM6XHRyYW5nZV90cmVlX2Rlc3Ryb3koXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jLTMzNC1lcnJfZnJlZV9zY3JhdGNoOlxua2VybmVsL2JwZi9hcmVuYS5jOjMzNTpcdF9fZnJlZV9wYWdlKGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM2OmVycl9mcmVlX2FyZW5hOlxua2VybmVsL2JwZi9hcmVuYS5jOjMzNzpcdGJwZl9tYXBfYXJlYV9mcmVlKGFyZW5hKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzgtZXJyOlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYz0zNDM9c3RhdGljIGludCBleGlzdGluZ19wYWdlX2NiKHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ0LXtcbmtlcm5lbC9icGYvYXJlbmEuYzozNDU6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGRhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ2LVx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM1Ni1cdCAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjM1NzpcdGlmIChwYWdlID09IGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSlcbmtlcm5lbC9icGYvYXJlbmEuYy0zNTgtXHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zNjAtXHQgKiBXZSBkbyBub3QgdXBkYXRlIHB0ZSBoZXJlOlxua2VybmVsL2JwZi9hcmVuYS5jOjM2MTpcdCAqIDEuIE5vYm9keSBzaG91bGQgYmUgYWNjZXNzaW5nIGJwZl9hcmVuYSYjMzk7cyByYW5nZSBvdXRzaWRlIG9mIGEga2VybmVsIGJ1Z1xua2VybmVsL2JwZi9hcmVuYS5jLTM2Mi1cdCAqIDIuIFRMQiBmbHVzaGluZyBpcyBiYXRjaGVkIG9yIGRlZmVycmVkLiBFdmVuIGlmIHdlIGNsZWFyIHB0ZSxcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxua2VybmVsL2JwZi9hcmVuYS5jOjM3MDpzdGF0aWMgdm9pZCBhcmVuYV9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxua2VybmVsL2JwZi9hcmVuYS5jLTM3MS17XG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcyOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTM3My1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzc2LVx0ICogbW1hcCgpIGhvbGRzIHZtX2ZpbGUgd2hpY2ggaG9sZHMgYnBmX21hcCByZWZjbnQuXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc3Olx0ICogbXVubWFwKCkgbXVzdCBoYXZlIGhhcHBlbmVkIG9uIHZtYSBmb2xsb3dlZCBieSBhcmVuYV92bV9jbG9zZSgpXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc4Olx0ICogd2hpY2ggd291bGQgY2xlYXIgYXJlbmEtXHUwMDNldm1hX2xpc3QuXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzc5LVx0ICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzgwOlx0aWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZhcmVuYS1cdTAwM2V2bWFfbGlzdCkpKVxua2VybmVsL2JwZi9hcmVuYS5jLTM4MS1cdFx0cmV0dXJuO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy0zODMtXHQvKiBFbnN1cmUgbm8gcGVuZGluZyBkZWZlcnJlZCBmcmVlcyAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjM4NDpcdGlycV93b3JrX3N5bmMoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV9pcnEpO1xua2VybmVsL2JwZi9hcmVuYS5jOjM4NTpcdGZsdXNoX3dvcmsoXHUwMDI2YXJlbmEtXHUwMDNlZnJlZV93b3JrKTtcbmtlcm5lbC9icGYvYXJlbmEuYy0zODYtXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTM5Mi1cdCAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjM5MzpcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXHUwMDI2aW5pdF9tbSwgYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKSxcbmtlcm5lbC9icGYvYXJlbmEuYzozOTQ6XHRcdFx0XHQgICAgIFNaXzRHICYjNDM7IEdVQVJEX1NaIC8gMiwgZXhpc3RpbmdfcGFnZV9jYiwgYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jOjM5NTpcdGZyZWVfdm1fYXJlYShhcmVuYS1cdTAwM2VrZXJuX3ZtKTtcbmtlcm5lbC9icGYvYXJlbmEuYzozOTY6XHRyYW5nZV90cmVlX2Rlc3Ryb3koXHUwMDI2YXJlbmEtXHUwMDNlcnQpO1xua2VybmVsL2JwZi9hcmVuYS5jOjM5NzpcdF9fZnJlZV9wYWdlKGFyZW5hLVx1MDAzZXNjcmF0Y2hfcGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzk4Olx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTM5OS19XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDAwLVxua2VybmVsL2JwZi9hcmVuYS5jOjQwMTpzdGF0aWMgdm9pZCAqYXJlbmFfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbmtlcm5lbC9icGYvYXJlbmEuYy00MDIte1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MDUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA2OnN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDA3LVx0XHRcdFx0ICB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00MTEtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDEyOnN0YXRpYyBpbnQgYXJlbmFfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQxNy1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE5LXtcbmtlcm5lbC9icGYvYXJlbmEuYzo0MjA6XHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDIxLVxua2VybmVsL2JwZi9hcmVuYS5jOjQyMjpcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cdTAwM2Vucl9wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDIzLX1cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDI1PXN0cnVjdCB2bWFfbGlzdCB7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQzMS1cbmtlcm5lbC9icGYvYXJlbmEuYzo0MzI6c3RhdGljIGludCByZW1lbWJlcl92bWEoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxua2VybmVsL2JwZi9hcmVuYS5jLTQzMy17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Mi1cdHZtbC1cdTAwM2V6YXBfZ2VuID0gMDtcbmtlcm5lbC9icGYvYXJlbmEuYzo0NDM6XHRsaXN0X2FkZChcdTAwMjZ2bWwtXHUwMDNlaGVhZCwgXHUwMDI2YXJlbmEtXHUwMDNldm1hX2xpc3QpO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ0NC1cdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NDYtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDQ3OnN0YXRpYyB2b2lkIGFyZW5hX3ZtX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDQ4LXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDUzLVxua2VybmVsL2JwZi9hcmVuYS5jOjQ1NDpzdGF0aWMgaW50IGFyZW5hX3ZtX21heV9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ1NS17XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ1OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0NTk6c3RhdGljIGludCBhcmVuYV92bV9tcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYzLVxua2VybmVsL2JwZi9hcmVuYS5jOjQ2NDpzdGF0aWMgdm9pZCBhcmVuYV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy00NjUte1xua2VybmVsL2JwZi9hcmVuYS5jLTQ2Ni1cdHN0cnVjdCBicGZfbWFwICptYXAgPSB2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NDY3Olx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ2OC1cdHN0cnVjdCB2bWFfbGlzdCAqdm1sID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDcxLVx0XHRyZXR1cm47XG5rZXJuZWwvYnBmL2FyZW5hLmM6NDcyOlx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFyZW5hLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ3My1cdC8qIHVwZGF0ZSBsaW5rIGxpc3QgdW5kZXIgbG9jayAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy00NzgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4MC17XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDgxLVx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cdTAwM2V2bWEtXHUwMDNldm1fZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NDgyOlx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xua2VybmVsL2JwZi9hcmVuYS5jLTQ4My1cdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTQ4OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo0ODk6XHRrYmFzZSA9IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkwLVx0a2FkZHIgPSBrYmFzZSAmIzQzOyAodTMyKSh2bWYtXHUwMDNlYWRkcmVzcyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkxLVxua2VybmVsL2JwZi9hcmVuYS5jOjQ5MjpcdGlmIChyYXdfcmVzX3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncykpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkzLVx0XHQvKlxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDEtXHRpZiAocGFnZSkge1xua2VybmVsL2JwZi9hcmVuYS5jOjUwMjpcdFx0aWYgKHBhZ2UgPT0gYXJlbmEtXHUwMDNlc2NyYXRjaF9wYWdlKVxua2VybmVsL2JwZi9hcmVuYS5jLTUwMy1cdFx0XHQvKiBCUEYgdHJpZ2dlcmVkIHNjcmF0Y2ggaGVyZTsgZG9uJiMzOTt0IGxhenktYWxsb2Mgb3ZlciBpdCAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MDgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTA5Olx0YnBmX21hcF9tZW1jZ19lbnRlcihcdTAwMjZhcmVuYS1cdTAwM2VtYXAsIFx1MDAyNm9sZF9tZW1jZywgXHUwMDI2bmV3X21lbWNnKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MTAtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTExOlx0aWYgKGFyZW5hLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1NFR1ZfT05fRkFVTFQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEyLVx0XHQvKiBVc2VyIHNwYWNlIHJlcXVlc3RlZCB0byBzZWdmYXVsdCB3aGVuIHBhZ2UgaXMgbm90IGFsbG9jYXRlZCBieSBicGYgcHJvZyAqL1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MTQtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTE1Olx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MTYtXHRpZiAocmV0KVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MTgtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTE5Olx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFx1MDAyNnBhZ2UsIC5pID0gMCB9O1xua2VybmVsL2JwZi9hcmVuYS5jOjUyMDpcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTIxLVx0cmV0ID0gYnBmX21hcF9hbGxvY19wYWdlcyhtYXAsIE5VTUFfTk9fTk9ERSwgMSwgXHUwMDI2cGFnZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTIyLVx0aWYgKHJldCkge1xua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcdFx0cmFuZ2VfdHJlZV9zZXQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHZtZi1cdTAwM2VwZ29mZiwgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVx0XHRnb3RvIG91dF9zaWdzZWd2X21lbWNnO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MjgtXHRpZiAocmV0KSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5Olx0XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgdm1mLVx1MDAzZXBnb2ZmLCAxKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXHRcdGZyZWVfcGFnZXNfbm9sb2NrKHBhZ2UsIDApO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01MzYtXHRwYWdlX3JlZl9hZGQocGFnZSwgMSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTM3Olx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTM4LVx0dm1mLVx1MDAzZXBhZ2UgPSBwYWdlO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01NDItb3V0X3NpZ3NlZ3Y6XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQzOlx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTQ0LVx0cmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU0Ni1cbmtlcm5lbC9icGYvYXJlbmEuYzo1NDc6c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBhcmVuYV92bV9vcHMgPSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ4Olx0Lm9wZW5cdFx0PSBhcmVuYV92bV9vcGVuLFxua2VybmVsL2JwZi9hcmVuYS5jOjU0OTpcdC5tYXlfc3BsaXRcdD0gYXJlbmFfdm1fbWF5X3NwbGl0LFxua2VybmVsL2JwZi9hcmVuYS5jOjU1MDpcdC5tcmVtYXBcdFx0PSBhcmVuYV92bV9tcmVtYXAsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUxOlx0LmNsb3NlXHRcdD0gYXJlbmFfdm1fY2xvc2UsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUyOlx0LmZhdWx0ICAgICAgICAgID0gYXJlbmFfdm1fZmF1bHQsXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTUzLX07XG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU0LVxua2VybmVsL2JwZi9hcmVuYS5jOjU1NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBhcmVuYV9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxua2VybmVsL2JwZi9hcmVuYS5jLTU1Ni1cdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU5LVx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xua2VybmVsL2JwZi9hcmVuYS5jOjU2MDpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01NjEtXHRsb25nIHJldDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTY3LVxua2VybmVsL2JwZi9hcmVuYS5jOjU2ODpcdC8qIGlmIHVzZXJfdm1fc3RhcnQgd2FzIHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTY5Olx0aWYgKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpIHtcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzA6XHRcdGlmIChsZW4gXHUwMDNlIGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydClcbmtlcm5lbC9icGYvYXJlbmEuYy01NzEtXHRcdFx0cmV0dXJuIC1FMkJJRztcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzI6XHRcdGlmIChsZW4gIT0gYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTU3My1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzQ6XHRcdGlmIChhZGRyICE9IGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTc1LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy01ODItXHRcdHJldHVybiByZXQ7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NTgzOlx0aWYgKFdBUk5fT05fT05DRShhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KSlcbmtlcm5lbC9icGYvYXJlbmEuYy01ODQtXHRcdC8qIGNoZWNrcyBhdCBtYXAgY3JlYXRpb24gdGltZSBzaG91bGQgcHJldmVudCB0aGlzICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTU4OC1cbmtlcm5lbC9icGYvYXJlbmEuYzo1ODk6c3RhdGljIGludCBhcmVuYV9tYXBfbW1hcChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmtlcm5lbC9icGYvYXJlbmEuYy01OTAte1xua2VybmVsL2JwZi9hcmVuYS5jOjU5MTpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy01OTItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTkzOlx0Z3VhcmQobXV0ZXgpKFx1MDAyNmFyZW5hLVx1MDAzZWxvY2spO1xua2VybmVsL2JwZi9hcmVuYS5jOjU5NDpcdGlmIChhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0IFx1MDAyNlx1MDAyNiBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0ICE9IHZtYS1cdTAwM2V2bV9zdGFydClcbmtlcm5lbC9icGYvYXJlbmEuYy01OTUtXHRcdC8qXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk2Olx0XHQgKiBJZiBtYXBfZXh0cmEgd2FzIG5vdCBzcGVjaWZpZWQgYXQgYXJlbmEgY3JlYXRpb24gdGltZSB0aGVuXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk3LVx0XHQgKiAxc3QgdXNlciBwcm9jZXNzIGNhbiBkbyBtbWFwKE5VTEwsIC4uLikgdG8gcGljayB1c2VyX3ZtX3N0YXJ0XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTYwNC1cbmtlcm5lbC9icGYvYXJlbmEuYzo2MDU6XHRpZiAoYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgXHUwMDI2XHUwMDI2IGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kICE9IHZtYS1cdTAwM2V2bV9lbmQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA2LVx0XHQvKiBhbGwgdXNlciBwcm9jZXNzZXMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUgb2YgbW1hcC1lZCByZWdpb24gKi9cbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjEyLVxua2VybmVsL2JwZi9hcmVuYS5jOjYxMzpcdGlmIChyZW1lbWJlcl92bWEoYXJlbmEsIHZtYSkpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE0LVx0XHRyZXR1cm4gLUVOT01FTTtcbmtlcm5lbC9icGYvYXJlbmEuYy02MTUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjE2Olx0YXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTc6XHRhcmVuYS1cdTAwM2V1c2VyX3ZtX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE4LVx0Lypcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIwLVx0ICogY2xlYXJzIFZNX01BWUVYRUMuIFNldCBWTV9ET05URVhQQU5EIHRvIGF2b2lkIHBvdGVudGlhbCBjaGFuZ2Vcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjE6XHQgKiBvZiB1c2VyX3ZtX3N0YXJ0LiBTZXQgVk1fRE9OVENPUFkgdG8gcHJldmVudCBhcmVuYSBWTUEgZnJvbVxua2VybmVsL2JwZi9hcmVuYS5jLTYyMi1cdCAqIGJlaW5nIGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzIG9uIGZvcmsuXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTYyNC1cdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjI1Olx0dm1hLVx1MDAzZXZtX29wcyA9IFx1MDAyNmFyZW5hX3ZtX29wcztcbmtlcm5lbC9icGYvYXJlbmEuYy02MjYtXHRyZXR1cm4gMDtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI4LVxua2VybmVsL2JwZi9hcmVuYS5jOjYyOTpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcbmtlcm5lbC9icGYvYXJlbmEuYy02MzAte1xua2VybmVsL2JwZi9hcmVuYS5jOjYzMTpcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcbmtlcm5lbC9icGYvYXJlbmEuYy02MzItXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMzOlx0aWYgKCh1NjQpb2ZmIFx1MDAzZT0gYXJlbmEtXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cdTAwM2V1c2VyX3ZtX3N0YXJ0KVxua2VybmVsL2JwZi9hcmVuYS5jLTYzNC1cdFx0cmV0dXJuIC1FUkFOR0U7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjM1Olx0KmltbSA9ICh1bnNpZ25lZCBsb25nKWFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQ7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNjM2LVx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTYzOC1cbmtlcm5lbC9icGYvYXJlbmEuYzo2Mzk6QlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9hcmVuYV9tYXBfYnRmX2lkcywgc3RydWN0LCBicGZfYXJlbmEpXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQwOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9hcmVuYS5jLTY0MS1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XHQubWFwX2FsbG9jID0gYXJlbmFfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0MzpcdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0NDpcdC5tYXBfZGlyZWN0X3ZhbHVlX2FkZHIgPSBhcmVuYV9tYXBfZGlyZWN0X3ZhbHVlX2FkZHIsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ1Olx0Lm1hcF9tbWFwID0gYXJlbmFfbWFwX21tYXAsXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ2Olx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxua2VybmVsL2JwZi9hcmVuYS5jOjY0NzpcdC5tYXBfZ2V0X25leHRfa2V5ID0gYXJlbmFfbWFwX2dldF9uZXh0X2tleSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDg6XHQubWFwX3B1c2hfZWxlbSA9IGFyZW5hX21hcF9wdXNoX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ5Olx0Lm1hcF9wZWVrX2VsZW0gPSBhcmVuYV9tYXBfcGVla19lbGVtLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MDpcdC5tYXBfcG9wX2VsZW0gPSBhcmVuYV9tYXBfcG9wX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlx0Lm1hcF9sb29rdXBfZWxlbSA9IGFyZW5hX21hcF9sb29rdXBfZWxlbSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTI6XHQubWFwX3VwZGF0ZV9lbGVtID0gYXJlbmFfbWFwX3VwZGF0ZV9lbGVtLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MzpcdC5tYXBfZGVsZXRlX2VsZW0gPSBhcmVuYV9tYXBfZGVsZXRlX2VsZW0sXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU0Olx0Lm1hcF9jaGVja19idGYgPSBhcmVuYV9tYXBfY2hlY2tfYnRmLFxua2VybmVsL2JwZi9hcmVuYS5jOjY1NTpcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTY6XHQubWFwX2J0Zl9pZCA9IFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcbmtlcm5lbC9icGYvYXJlbmEuYy02NTctfTtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy02NjctICovXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY4OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcbmtlcm5lbC9icGYvYXJlbmEuYy02NjktXHRcdFx0ICAgICAgYm9vbCBzbGVlcGFibGUpXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY3MS1cdC8qIHVzZXJfdm1fZW5kL3N0YXJ0IGFyZSBmaXhlZCBiZWZvcmUgYnBmIHByb2cgcnVucyAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjY3MjpcdGxvbmcgcGFnZV9jbnRfbWF4ID0gKGFyZW5hLVx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NjczOlx0dTY0IGtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xua2VybmVsL2JwZi9hcmVuYS5jLTY3NC1cdHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2csICpvbGRfbWVtY2c7XG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTY5My1cdFx0XHRyZXR1cm4gMDtcbmtlcm5lbC9icGYvYXJlbmEuYzo2OTQ6XHRcdHBnb2ZmID0gY29tcHV0ZV9wZ29mZihhcmVuYSwgdWFkZHIpO1xua2VybmVsL2JwZi9hcmVuYS5jLTY5NS1cdFx0aWYgKHBnb2ZmIFx1MDAzZSBwYWdlX2NudF9tYXggLSBwYWdlX2NudClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk5LVxua2VybmVsL2JwZi9hcmVuYS5jOjcwMDpcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXHUwMDI2YXJlbmEtXHUwMDNlbWFwLCBcdTAwMjZvbGRfbWVtY2csIFx1MDAyNm5ld19tZW1jZyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzAxLVx0LyogQ2FwIGFsbG9jYXRpb24gc2l6ZSB0byBLTUFMTE9DX01BWF9DQUNIRV9TSVpFIHNvIGttYWxsb2Nfbm9sb2NrKCkgY2FuIHN1Y2NlZWQuICovXG4tLVxua2VybmVsL2JwZi9hcmVuYS5jLTcwNy1cdH1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MDg6XHRkYXRhLmFyZW5hID0gYXJlbmE7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA5LVx0ZGF0YS5wYWdlcyA9IHBhZ2VzO1xua2VybmVsL2JwZi9hcmVuYS5jLTcxMC1cbmtlcm5lbC9icGYvYXJlbmEuYzo3MTE6XHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxua2VybmVsL2JwZi9hcmVuYS5jLTcxMi1cdFx0Z290byBvdXRfZnJlZV9wYWdlcztcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE0LVx0aWYgKHVhZGRyKSB7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzE1Olx0XHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXHRcdGlmIChyZXQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE3LVx0XHRcdGdvdG8gb3V0X3VubG9ja19mcmVlX3BhZ2VzO1xua2VybmVsL2JwZi9hcmVuYS5jOjcxODpcdFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MTktXHR9IGVsc2Uge1xua2VybmVsL2JwZi9hcmVuYS5jOjcyMDpcdFx0cmV0ID0gcGdvZmYgPSByYW5nZV90cmVlX2ZpbmQoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBhZ2VfY250KTtcbmtlcm5lbC9icGYvYXJlbmEuYy03MjEtXHRcdGlmIChwZ29mZiBcdTAwM2U9IDApXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIyOlx0XHRcdHJldCA9IHJhbmdlX3RyZWVfY2xlYXIoXHUwMDI2YXJlbmEtXHUwMDNlcnQsIHBnb2ZmLCBwYWdlX2NudCk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzIzLVx0fVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MjctXHRyZW1haW5pbmcgPSBwYWdlX2NudDtcbmtlcm5lbC9icGYvYXJlbmEuYzo3Mjg6XHR1YWRkcjMyID0gKHUzMikoYXJlbmEtXHUwMDNldXNlcl92bV9zdGFydCAmIzQzOyBwZ29mZiAqIFBBR0VfU0laRSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzI5LVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03MzUtXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM2Olx0XHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLVx1MDAzZW1hcCwgbm9kZV9pZCwgdGhpc19iYXRjaCwgcGFnZXMpO1xua2VybmVsL2JwZi9hcmVuYS5jLTczNy1cdFx0aWYgKHJldClcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYzLVx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICYjNDM7IHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY0Olx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY1LVx0a2ZyZWVfbm9sb2NrKHBhZ2VzKTtcbmtlcm5lbC9icGYvYXJlbmEuYy03NjYtXHRicGZfbWFwX21lbWNnX2V4aXQob2xkX21lbWNnLCBuZXdfbWVtY2cpO1xua2VybmVsL2JwZi9hcmVuYS5jOjc2NzpcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVx1MDAzZXVzZXJfdm1fc3RhcnQpICYjNDM7IHVhZGRyMzI7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzY4LW91dDpcbmtlcm5lbC9icGYvYXJlbmEuYzo3Njk6XHRyYW5nZV90cmVlX3NldChcdTAwMjZhcmVuYS1cdTAwM2VydCwgcGdvZmYgJiM0MzsgbWFwcGVkLCBwYWdlX2NudCAtIG1hcHBlZCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzcwOlx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmFyZW5hLVx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVx0aWYgKG1hcHBlZCkge1xua2VybmVsL2JwZi9hcmVuYS5jLTc3Mi1cdFx0Zmx1c2hfdm1hcF9jYWNoZShrZXJuX3ZtX3N0YXJ0ICYjNDM7IHVhZGRyMzIsIG1hcHBlZCBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCk7XG5rZXJuZWwvYnBmL2FyZW5hLmM6NzczOlx0XHRhcmVuYV9mcmVlX3BhZ2VzKGFyZW5hLCB1YWRkcjMyLCBtYXBwZWQsIHNsZWVwYWJsZSk7XG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc0LVx0fVxuLS1cbmtlcm5lbC9icGYvYXJlbmEuYy03NzYtb3V0X3VubG9ja19mcmVlX3BhZ2VzOlxua2VybmVsL2JwZi9hcmVuYS5jOjc3NzpcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZhcmVuYS1cdTAwM2VzcGlubG9jaywgZmxhZ3MpO1xua2VybmVsL2JwZi9hcmVuYS5jLTc3OC1vdXRfZnJlZV9wYWdlczpcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzg4LSAqL1xua2VybmVsL2JwZi9hcmVuYS5jOjc4OTpzdGF0aWMgdm9pZCB6YXBfcGFnZXMoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIGxvbmcgdWFkZHIsIGxvbmcgcGFnZV9jbnQpXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzkwLXtcbi0tXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzk4LVx0Lypcbmtlcm5lbC9icGYvYXJlbmEuYzo3OTk6XHQgKiBUYWtpbmcgbW1hcF9yZWFkX2xvY2soKSB1bmRlciBhcmVuYS1cdTAwM2Vsb2NrIHdvdWxkIGRlYWRsb2NrIGFnYWluc3Rcbmtlcm5lbC9icGYvYXJlbmEuYzo4MDA6XHQgKiBhcmVuYV92bV9jbG9zZSgpLCB3aGljaCBydW5zIHdpdGggbW1hcF93cml0ZV9sb2NrIGhlbGQgYW5kIHRoZW5cbmtlcm5lbC9icGYvYXJlbmEuYzo4MDE6XHQgKiBhY3F1aXJlcyBhcmVuYS1cdTAwM2Vsb2NrLiBEcm9wIGFyZW5hLVx1MDAzZWxvY2sgZm9yIG1tYXBfcmVhZF9sb2NrKCkuXG5rZXJuZWwvYnBmL2FyZW5hLmMtODAyLVx0ICpcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkJQRiBBcmVuYSAmYW1wOyBJbnN0cnVjdGlvbiBHZW5lcmF0aW9uIG9uIEFBcmNoNjQqKgoKUmlnaHQsIHNvIHRoZSBCUEYgYXJlbmEg4oCTIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSB0aWVkIHRvIHRoZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBjb25maWd1cmF0aW9uLCBhcyBleHBlY3RlZC4gTmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCB3aGVuIGRlYWxpbmcgd2l0aCBzeXN0ZW0gY2FsbHMgYW5kIEJQRiBpbnRlcmFjdGlvbnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYywgdGhlIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBmdW5jdGlvbi4gSXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlPyBJIHNlZW0gdG8gcmVtZW1iZXIgc2VlaW5nIGl0IGluIHRoZSBBQXJjaDY0IGFyY2hpdGVjdHVyZSBjb2RlLgoKTGV0IG1lIHF1aWNrbHkgY29uZmlybSBpdHMgYWNjZXNzaWJpbGl0eS4gT2theSwgYSBxdWljayBncmVwIHJldmVhbHMgaXQmIzM5O3Mgc2l0dGluZyB0aGVyZSBpbiBgYXJjaC9hcm02NC9saWIvaW5zbi5jYC4gVGhhdCBmaWxlIGlzIHdoZXJlIEkgZXhwZWN0ZWQgaXQgdG8gYmUgYmFzZWQgb24gdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwuIEdvb2QsIGdvb2QuIE5vdyBJIGNhbiB3b3JrIHdpdGggdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc0MzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIEJQRiBKSVQgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCoqCgpSaWdodCwgc28gdGhpcyB0aGluZyBpc24mIzM5O3QgYSBzdGF0aWNhbGx5IGNvbXBpbGVkIGVsZW1lbnQsIHdoaWNoIGlzIHRoZSBmaXJzdCB0aGluZyB0byBjaGVjay4gQnV0IGl0JiMzOTtzIGFsc28gbm90IGRpcmVjdGx5IGV4cG9ydGVkLCB0aGF0JiMzOTtzIHdoYXQmIzM5O3MgdGhyb3dpbmcgbWUuIEhtbS4uLiBPa2F5LCB3aGVyZSBkaWQgSSBzZWUgaXQ/IEFoLCB5ZXMsIGl0IHdhcyBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCB3aGljaCBpcyB0aGUgQlBGIEpJVCBjb21waWxlciBmb3IgdGhlIEFSTTY0IGFyY2hpdGVjdHVyZS4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKmJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjY1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEpJVCBDb21waWxhdGlvbiBQYXRoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIHNvbWV0aGluZyBpc24mIzM5O3QgcXVpdGUgcmlnaHQsIHNwZWNpZmljYWxseSB0aGF0IHdoYXRldmVyIEkmIzM5O20gZXhwZWN0aW5nIGlzbiYjMzk7dCBnZXR0aW5nIGV4cG9ydGVkLiBSaWdodCwgdGltZSB0byBkaWcgZGVlcGVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSBgYnBmX2ludF9qaXRfY29tcGlsZWAuIEl0JiMzOTtzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuIEJ1dCBob2xkIG9uLCBgYnBmX2ludF9qaXRfY29tcGlsZWAgaXMgYSBmYWlybHkgZ2VuZXJpYyBuYW1lIOKAkyBtaWdodCBiZSB0b28gYnJvYWQgYSBzdGFydGluZyBwb2ludCBmb3IgbXkgcHVycG9zZXMuCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBzZWFyY2guIEluc3RlYWQgb2YgdGhhdCwgd2hhdCBhYm91dCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYD8gVGhhdCBzZWVtcyBsaWtlIGEgbW9yZSBmb2N1c2VkIHN5bWJvbCwgbW9yZSBsaWtlbHkgdG8gcHJvdmlkZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLCBhbmQgcGVyaGFwcyBzaGVkIGxpZ2h0IG9uIHdoeSBpdCBpcyBub3QgZXhwb3J0ZWQuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gYXJlbmEgYXJndW1lbnRzLCBzbyBJJiMzOTtsbCBzZWUgaWYgdGhhdCBvZmZlcnMgYSBjbGVhcmVyIHBhdGggdG8gdGhlIHJvb3QgY2F1c2UuIE9rYXksIHRoYXQgbWlnaHQgbm90IGJlIGl0LgoKQWx0ZXJuYXRpdmVseSwgSSBjb3VsZCBleGFtaW5lIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCDigJMgdGhhdCBzb3VuZHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIHRvbywgaWYgdGhlIHByZXZpb3VzIHBhdGggZG9lc24mIzM5O3QgeWllbGQgYW55dGhpbmcuIEZvY3VzaW5nIG9uIGEgc3BlY2lmaWMgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbiBtaWdodCBnaXZlIG1lIHRoZSBncmFudWxhciBpbnNpZ2h0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB3aGF0ZXZlciBpdCBpcyBJIGFtIGV4cGVjdGluZyBpc24mIzM5O3Qgd29ya2luZyBhcyBJIGhhZCBob3BlZC4gT3Igd2hhdCBhYm91dCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYD8gVGhhdCBtaWdodCBiZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duLgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgdG8gc2VlIGlmIHRoYXQgZnVuY3Rpb24gaXMgZXZlbiBiZWluZyB1c2VkIGFueXdoZXJlLiBIb3BlZnVsbHkgdGhhdCBsZWFkcyBtZSB0byBzb21lIGNsdWVzIGFzIHRvIHdoZXJlIHRoaW5ncyBhcmUgZ29pbmcgd3JvbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMzc1PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjM3OS1cbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIzODA6Ym9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzODEte1xuLS1cbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYz00MTQwPWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpXG4tLVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNDQtXG5hcmNoL3g4Ni9uZXQvYnBmX2ppdF9jb21wLmM6NDE0NTpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNDYte1xuLS1cbmluY2x1ZGUvbGludXgvZmlsdGVyLmg9MTIxNj1ib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIxNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcbmluY2x1ZGUvbGludXgvZmlsdGVyLmgtMTIxOC1ib29sIGJwZl9qaXRfc3VwcG9ydHNfZmFyX2tmdW5jX2NhbGwodm9pZCk7XG4tLVxua2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbi0tXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEwLVxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcbmtlcm5lbC9icGYvY29yZS5jLTMzMTIte1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI4Mj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTM1OS1cdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmddKSkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzYwOlx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjEtXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0IGtmdW5jICVzKCkgd2l0aCBhcmVuYSBwb2ludGVyIGFyZ3VtZW50c1xcblwmIzM0Oyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg2ODQ9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODc3My1cdFx0aWYgKGJhc2VfdHlwZShpbmZvLVx1MDAzZXJlZ190eXBlKSA9PSBQVFJfVE9fQVJFTkEpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODc3NDpcdFx0XHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg3NzUtXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxuXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjI6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NTMKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEJQRiBBcmVuYSBBcmd1bWVudCBTdXBwb3J0IGluIEFSTTY0IEpJVCBDb21waWxlcioqCgpPa2F5LCBzbyB0aGUgdmVyaWZpZXIgY2FsbHMgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQmIzM5O3Mgc2VlLi4uIEkgbmVlZCB0byBpZGVudGlmeSByZWxldmFudCBzeW1ib2xzIGFuZCB0aGVuIGRldGVybWluZSB0aGUgbmVjZXNzYXJ5IEtjb25maWcgb3B0aW9ucy4KCkkmIzM5O2xsIGNoZWNrIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGJ1dCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMgdGhleSB3b24mIzM5O3QgYmUgZXhwb3NlZC4gSG93ZXZlciwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIHZpc2libGUgYXMgYSBzeW1ib2wuIFRoYXQmIzM5O3MgZ29vZC4gQW5kIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgIGlzIGFsc28gdmlzaWJsZS4KClRoZXJlZm9yZSwgbXkgbGlzdCBvZiBrZXkgc3ltYm9scyB0byBjb25zaWRlciBhcmU6CgoqICAgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgCiogICBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYAoqICAgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAKCk5vdyBmb3IgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGluIHRoZSBwcm92aWRlZCB0ZXh0LCBhbmQgSSBuZWVkIHRvIGF2b2lkIHByZXBlbmRpbmcgdGhlICYjMzQ7Q09ORklHXyYjMzQ7IHByZWZpeC4KCkkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgZWFjaCBvZiB0aGUgdGhyZWUgc3ltYm9scyBhcmUgbm9uLXN0YXRpYzogYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGlzIGRlZmluZWQgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AsIGFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBhbmQgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AgYXJlIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuCgpPa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgd2l0aGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYm90aCB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiBhbmQgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbi4gVGhpcyBjaGFuZ2UgYWxsb3dzIEJQRiBwcm9ncmFtcyB1c2luZyBhcmVuYSBhcmd1bWVudHMgdG8gYmUgbG9hZGVkIGFuZCBleGVjdXRlZC4gSXQgcmVwcmVzZW50cyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUga2VybmVsJiMzOTtzIGNvcmUgQlBGIGluZnJhc3RydWN0dXJlLCBzbyBpdCBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcuCgpJJiMzOTtsbCBwcm92aWRlIHRoZSByZXN1bHRzIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfSklUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyYjMzQ7LAogICAgJiMzNDticGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3MmIzM0OywKICAgICYjMzQ7YXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIyOjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBUk02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyB0aGUgdHJhbXBvbGluZSBnZW5lcmF0aW9uIGxvZ2ljIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUga2VybmVsJiMzOTtzIEMgY29kZS4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChlLmcuLCBvdXQtb2YtYm91bmRzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMjI6NDU6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdAppbmRleCAxMDA0ZWIwYmVjNjE3Li5kOWNjMmFiMWNmMDE4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKQEAgLTMwMSw5ICYjNDM7MzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6CiAgICAgICAgIH0KIAogQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aAotYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZQotcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQSB2YWx1ZSB0aGF0IGRvZXMKLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLgomIzQzO2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzCiYjNDM7b3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQQomIzQzO3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy4KIAogVGhlIHN1ZmZpeGVzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBvbiB0aGUgYXJndW1lbnRzIG9mIHN0cnVjdF9vcHMgc3R1YgogZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCmluZGV4IGNjMDcwMmZhNjRhNzkuLjQ1NDhlODAxNTgwOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oCkBAIC0yMDUsNiAmIzQzOzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgewogCUFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHUwogfTsKIAomIzQzOy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi8KJiM0MztlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSB7CiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQiwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1VYVFcsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCwKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLAomIzQzOwlBQVJDSDY0X0lOU05fRVhURU5EX1NYVEgsCiYjNDM7CUFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVywKJiM0MzsJQUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLAomIzQzO307CiYjNDM7CiBlbnVtIGFhcmNoNjRfaW5zbl9tb3Zld2lkZV90eXBlIHsKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTywKIAlBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCwKQEAgLTM3OCw2ICYjNDM7MzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCwJMHg3RjIwMDAwMCwgMHgwQjAwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsCTB4N0YyMDAwMDAsIDB4MkIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsCTB4N0YyMDAwMDAsIDB4NEIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLAkweDdGMjAwMDAwLCAweDZCMDAwMDAwKQomIzQzO19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsCTB4N0YyMDAwMDAsIDB4MEIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkc19leHQsCTB4N0YyMDAwMDAsIDB4MkIyMDAwMDApCiYjNDM7X19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCwJMHg3RjIwMDAwMCwgMHg0QjIwMDAwMCkKJiM0MztfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCwJMHg3RjIwMDAwMCwgMHg2QjIwMDAwMCkKIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsCTB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApCiBfX0FBUkNINjRfSU5TTl9GVU5DUyhtc3ViLAkweDdGRTA4MDAwLCAweDFCMDA4MDAwKQogX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdiwJMHg3RkUwRkMwMCwgMHgxQUMwMDgwMCkKQEAgLTYzNyw2ICYjNDM7NjUzLDEzIEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LAogCQkJCQkgaW50IHNoaWZ0LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LAogCQkJCQkgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpOwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uYwppbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9saWIvaW5zbi5jCkBAIC05ODYsNiAmIzQzOzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLCBzaGlmdCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZToKJiM0MzsgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seQomIzQzOyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLgomIzQzOyAqLwomIzQzO3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKJiM0MzsJCQkJCSAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCwKJiM0MzsJCQkJCSAgaW50IHNoaWZ0LAomIzQzOwkJCQkJICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsCiYjNDM7CQkJCQkgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKQomIzQzO3sKJiM0MzsJdTMyIGluc247CiYjNDM7CiYjNDM7CXN3aXRjaCAodHlwZSkgewomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1Yl9leHRfdmFsdWUoKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzoKJiM0MzsJCWluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6CiYjNDM7CQlpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwcl9lcnIoJiMzNDslczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXG4mIzM0OywgX19mdW5jX18sIHR5cGUpOwomIzQzOwkJcmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoICh2YXJpYW50KSB7CiYjNDM7CWNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfMzJCSVQ6CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF82NEJJVDoKJiM0MzsJCWluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCB2YXJpYW50KTsKJiM0MzsJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaGlmdCAmbHQ7IDAgfHwgc2hpZnQgJmd0OyA0KSB7CiYjNDM7CQlwcl9lcnIoJiMzNDslczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxuJiMzNDssIF9fZnVuY19fLCBzaGlmdCk7CiYjNDM7CQlyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDsKJiM0MzsJfQomIzQzOwomIzQzOwlpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTsKJiM0MzsKJiM0MzsJaW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7CiYjNDM7CiYjNDM7CWluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpOwomIzQzOwomIzQzOwkvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqLwomIzQzOwlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV82LCBpbnNuLAomIzQzOwkJCQkJICAgICAoZXh0ZW5kICZsdDsmbHQ7IDMpIHwgc2hpZnQpOwomIzQzO30KJiM0MzsKIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCwKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYywKIAkJCSAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaAppbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oCkBAIC0yNDMsNiAmIzQzOzI0MywxNyBAQAogLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqLwogI2RlZmluZSBBNjRfQ01QKHNmLCBSbiwgUm0pIEE2NF9TVUJTKHNmLCBBNjRfWlIsIFJuLCBSbSkKIAomIzQzOy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovCiYjNDM7I2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFwKJiM0MzsJYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhSZCwgUm4sIFJtLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fRVhURU5EXyMjZXh0LCBzaGlmdCwgQTY0X1ZBUklBTlQoc2YpLCBcCiYjNDM7CQlBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpCiYjNDM7LyogUmQgPSBSbiAmIzQzOyAoRVhUKFJtKSAmbHQ7Jmx0OyBzaGlmdCkgKi8KJiM0MzsjZGVmaW5lIEE2NF9BRERfRVhUKHNmLCBSZCwgUm4sIFJtLCBleHQsIHNoaWZ0KSBcCiYjNDM7CUE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKQomIzQzOy8qIFJkID0gUm4gJiM0MzsgKHUzMilSbSAqLwomIzQzOyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApCiYjNDM7CiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqLwogI2RlZmluZSBBNjRfREFUQTEoc2YsIFJkLCBSbiwgdHlwZSkgYWFyY2g2NF9pbnNuX2dlbl9kYXRhMShSZCwgUm4sIFwKIAlBNjRfVkFSSUFOVChzZiksIEFBUkNINjRfSU5TTl9EQVRBMV8jI3R5cGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCmluZGV4IGQxNGQyOTdlYmI5NjcuLjFjZDMyN2QyMTNlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jCkBAIC0xMjQ5LDYgJiM0MzsxMjQ5LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3QKIAl9CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLAomIzQzOyAqIHhOID0ga2Vybl92bV9zdGFydCAmIzQzOyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmcKJiM0MzsgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWQKJiM0MzsgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKQomIzQzO3sKJiM0MzsJY29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKmZtOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LSZndDtwcm9nLCBpbnNuKTsKJiM0MzsJaWYgKCFmbSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbWluX3QoaW50LCBmbS0mZ3Q7bnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICYjNDM7IGldOwomIzQzOwkJdTggZmxhZ3MgPSBmbS0mZ3Q7YXJnX2ZsYWdzW2ldOwomIzQzOwomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRSghY3R4LSZndDthcmVuYV92bV9zdGFydCkpCiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CQlpZiAoZmxhZ3MgJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHsKJiM0MzsJCQkvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqLwomIzQzOwkJCWVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7CiYjNDM7CQkJLyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQkJZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7CiYjNDM7CQl9CiYjNDM7CQllbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLgogICogUmV0dXJuczoKICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLgpAQCAtMTY3MSw2ICYjNDM7MTcwOCwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuCiAJCQkJCSAgICAmYW1wO2Z1bmNfYWRkciwgJmFtcDtmdW5jX2FkZHJfZml4ZWQpOwogCQlpZiAocmV0ICZsdDsgMCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoaW5zbi0mZ3Q7c3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHsKJiM0MzsJCQlyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAkJZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTsKIAkJLyoKIAkJICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlCkBAIC0yMzM1LDYgJiM0MzsyMzc3LDExIEBAIGJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mztib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKQogewogCWlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpCkBAIC0yNTA4LDM0ICYjNDM7MjU1NSw3NiBAQCBzdGF0aWMgdm9pZCBjbGVhcl9nYXJiYWdlKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCByZWcsIGludCBlZmZlY3RpdmVfYnl0ZXMpCiAJfQogfQogCiYjNDM7LyoKJiM0MzsgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG8KJiM0MzsgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93CiYjNDM7ICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsCiYjNDM7ICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlCiYjNDM7ICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hCiYjNDM7ICogcG9pbnRlciByZWdpc3RlcnMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbykKJiM0Mzt7CiYjNDM7CWlmIChudWxsYWJsZSkgewomIzQzOwkJaWYgKGRzdCAhPSBzcmMpCiYjNDM7CQkJZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTsKJiM0MzsJCS8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovCiYjNDM7CQllbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTsKJiM0MzsJCXNyYyA9IGRzdDsKJiM0MzsJfQomIzQzOwllbWl0KEE2NF9TVUIoMCwgZHN0LCBzcmMsIGJhc2VfbG8pLCBjdHgpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLAotCQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbikKJiM0MzsJCSAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSwgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsCiYjNDM7CQkgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSkKIHsKLQlpbnQgaTsKLQlpbnQgcmVnOwotCWludCBkb2ZmOwotCWludCBzb2ZmOwotCWludCBzbG90czsKIAl1OCB0bXAgPSBicGYyYTY0W1RNUF9SRUdfMV07CiYjNDM7CXU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07CiYjNDM7CWludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzOwomIzQzOwomIzQzOwkvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovCiYjNDM7CWlmIChhcmVuYV9iYXNlKQomIzQzOwkJZW1pdF9hNjRfbW92X2koMCwgYmFzZV9sbywgKHMzMikodTMyKWFyZW5hX2Jhc2UsIGN0eCk7CiAKIAkvKiBzdG9yZSBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIGZvciB0aGUgYnBmIHByb2dyYW0sIG9yIHJlc3RvcmUKIAkgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uCiAJICovCi0JZm9yIChyZWcgPSAwOyByZWcgJmx0OyBhLSZndDtyZWdzX2Zvcl9hcmdzOyByZWcmIzQzOyYjNDM7KSB7Ci0JCWVtaXQoZm9yX2NhbGxfb3JpZ2luID8KLQkJICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDoKLQkJICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLAotCQkgICAgIGN0eCk7Ci0JCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJZm9yIChpID0gMCwgcmVnID0gMDsgaSAmbHQ7IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJvb2wgYXJlbmFfYXJnID0gYXJlbmFfYmFzZSAmYW1wOyZhbXA7IChtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpOwomIzQzOwkJYm9vbCBudWxsYWJsZSA9IG0tJmd0O2FyZ19mbGFnc1tpXSAmYW1wOyBCVEZfRk1PREVMX05VTExBQkxFX0FSRzsKJiM0MzsKJiM0MzsJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKJiM0MzsJCXdoaWxlIChzbG90cy0tICZndDsgMCkgewomIzQzOwkJCWlmIChmb3JfY2FsbF9vcmlnaW4pIHsKJiM0MzsJCQkJZW1pdChBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7CiYjNDM7CQkJCWVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pOwomIzQzOwkJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZW1pdChBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpOwomIzQzOwkJCX0KJiM0MzsJCQlyZWcmIzQzOyYjNDM7OwomIzQzOwkJCWJhcmdzX29mZiAmIzQzOz0gODsKJiM0MzsJCX0KIAl9CiAKLQlzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICYjNDM7IDMyICovCiYjNDM7CS8qCiYjNDM7CSAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lCiYjNDM7CSAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZQomIzQzOwkgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvbgomIzQzOwkgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCAmIzQzOyAzMi4gQSBzdHJ1Y3Rfb3BzCiYjNDM7CSAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc28KJiM0MzsJICogdGhleSBzdGFydCBhdCBGUCAmIzQzOyAxNi4KJiM0MzsJICovCiYjNDM7CXNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjsKIAlkb2ZmID0gKGZvcl9jYWxsX29yaWdpbiA/IG9hcmdzX29mZiA6IGJhcmdzX29mZik7CiAKIAkvKiBzYXZlIG9uIHN0YWNrIGFyZ3VtZW50cyAqLwogCWZvciAoaSA9IGEtJmd0O2FyZ3NfaW5fcmVnczsgaSAmbHQ7IG0tJmd0O25yX2FyZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgJmFtcDsmYW1wOyAobS0mZ3Q7YXJnX2ZsYWdzW2ldICZhbXA7IEJURl9GTU9ERUxfQVJFTkFfQVJHKTsKJiM0MzsJCWJvb2wgbnVsbGFibGUgPSBtLSZndDthcmdfZmxhZ3NbaV0gJmFtcDsgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkc7CiYjNDM7CiAJCXNsb3RzID0gKG0tJmd0O2FyZ19zaXplW2ldICYjNDM7IDcpIC8gODsKIAkJLyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSAmbHQ7PSAxNiwgc28gc2xvdHMgZXF1YWxzIDEgb3IgMiAqLwogCQl3aGlsZSAoc2xvdHMtLSAmZ3Q7IDApIHsKQEAgLTI1NDUsNiAmIzQzOzI2MzQsOCBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZiwKIAkJCSAqLwogCQkJaWYgKHNsb3RzID09IDAgJmFtcDsmYW1wOyAhZm9yX2NhbGxfb3JpZ2luKQogCQkJCWNsZWFyX2dhcmJhZ2UoY3R4LCB0bXAsIG0tJmd0O2FyZ19zaXplW2ldICUgOCk7CiYjNDM7CQkJaWYgKGFyZW5hX2FyZykKJiM0MzsJCQkJZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7CiAJCQllbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGRvZmYpLCBjdHgpOwogCQkJc29mZiAmIzQzOz0gODsKIAkJCWRvZmYgJiM0Mzs9IDg7CkBAIC0yNjA0LDggJiM0MzsyNjk1LDIxIEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCWJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTsKIAlpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjsKIAlpbnQgZnNlc3Npb25fY250ID0gYnBmX2ZzZXNzaW9uX2NudCh0bm9kZXMpOwomIzQzOwl1NjQgYXJlbmFfYmFzZTsKIAl1NjQgZnVuY19tZXRhOwogCiYjNDM7CS8qCiYjNDM7CSAqIEZfSU5ESVJFQ1QgaXMgb25seSBjb21wYXRpYmxlIHdpdGggRl9SRVRfRkVOVFJZX1JFVCwgaXQgaXMgZXhwbGljaXRseQomIzQzOwkgKiBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHIGJlY2F1c2UKJiM0MzsJICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKQomIzQzOwkgKiBvbmx5IHJldHVybnMgYSBiYXNlIGZvciB0aGUgaW5kaXJlY3QgdHJhbXBvbGluZSwgd2hpY2ggdGhlcmVmb3JlCiYjNDM7CSAqIG5ldmVyIGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIGNvbnZlcnRlZCBhcmd1bWVudHMuCiYjNDM7CSAqLwomIzQzOwlXQVJOX09OX09OQ0UoKGZsYWdzICZhbXA7IEJQRl9UUkFNUF9GX0lORElSRUNUKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIChmbGFncyAmYW1wOyB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7CiYjNDM7CiYjNDM7CWFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTsKJiM0MzsKIAkvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDoKIAkgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdCiAJICogICAgICAgICAgICAgICAgICAgIFsgRlAgICAgICAgICAgICAgICAgXQpAQCAtMjcyMSw3ICYjNDM7MjgyNSw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLAogCXN0b3JlX2Z1bmNfbWV0YShjdHgsIGZ1bmNfbWV0YSwgZnVuY19tZXRhX29mZik7CiAKIAkvKiBzYXZlIGFyZ3MgZm9yIGJwZiAqLwotCXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7CiYjNDM7CXNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSwgaXNfc3RydWN0X29wcywgYXJlbmFfYmFzZSk7CiAKIAkvKiBzYXZlIGNhbGxlZSBzYXZlZCByZWdpc3RlcnMgKi8KIAllbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTsKQEAgLTI3NjksOCAmIzQzOzI4NzMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSwKIAl9CiAKIAlpZiAoZmxhZ3MgJmFtcDsgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7Ci0JCS8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqLwotCQlzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7CiYjNDM7CQkvKiB0aGUgb3JpZ2luYWwgZnVuYyB0YWtlcyBrZXJuZWwgYWRkcmVzc2VzLCBuZXZlciBjb252ZXJ0ZWQgb25lcyAqLwomIzQzOwkJc2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUsIGlzX3N0cnVjdF9vcHMsIDApOwogCQkvKiBjYWxsIG9yaWdpbmFsIGZ1bmMgKi8KIAkJZW1pdChBNjRfTERSNjRJKEE2NF9SKDEwKSwgQTY0X1NQLCByZXRhZGRyX29mZiksIGN0eCk7CiAJCWVtaXQoQTY0X0FEUihBNjRfTFIsIEFBUkNINjRfSU5TTl9TSVpFICogMiksIGN0eCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jCkBAIC02LDcgJiM0Mzs2LDcgQEAKICNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7c3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaCYjMzQ7CiAKLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKIC8qCiAgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZQogICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuCkBAIC0xMTEsMTEgJiM0MzsxMTEsMTEgQEAgc3RhdGljIHZvaWQgYXJlbmFfYXJnX2F0dGFjaCh2b2lkKQogdm9pZCBzZXJpYWxfdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hKHZvaWQpCiB7CiAJLyoKLQkgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuCi0JICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoICYjMzQ7SklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEKLQkgKiBhcmd1bWVudHMmIzM0Oywgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuCiYjNDM7CSAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgYW5kCiYjNDM7CSAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCAmIzM0O0pJVCBkb2VzIG5vdCBzdXBwb3J0CiYjNDM7CSAqIGFyZW5hIGFyZ3VtZW50cyYjMzQ7LCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC4KIAkgKi8KLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pCiYjNDM7I2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXykKIAlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2FyZW5hX2FyZyYjMzQ7KSkKIAkJYXJlbmFfYXJnKCk7CiAJaWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoJiMzNDthcmVuYV9hcmdfZmFpbCYjMzQ7KSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmMKQEAgLTI3LDYgJiM0MzsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDsKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19zdWNjZXNzIF9fcmV0dmFsKDApCiBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eCkKIHsKQEAgLTcwLDYgJiM0Mzs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KQogICovCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eCkKIHsKQEAgLTExMSw2ICYjNDM7MTEzLDcgQEAgaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpCiB7CkBAIC0xNDIsNiAmIzQzOzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpCiAKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpCiB7CkBAIC0xNjksNiAmIzQzOzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KQogLyoga2VybmVsLXNpZGUgZmF1bHRzIG9uIHVucG9wdWxhdGVkIHBhZ2VzIHJlY292ZXIgdmlhIHRoZSBzY3JhdGNoIHBhZ2UgKi8KIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fc3VjY2VzcyBfX3JldHZhbCgwKQogaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpCiB7CkBAIC0xODksNiAmIzQzOzE5NCw3IEBAIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KQogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiBfX2FyY2hfeDg2XzY0CiYjNDM7X19hcmNoX2FybTY0CiBfX2ZhaWx1cmUgX19tc2coJiMzNDthcmVuYSBwb2ludGVyIHJlcXVpcmVzIGEgcHJvZ3JhbSB3aXRoIGFuIGFzc29jaWF0ZWQgYXJlbmEmIzM0OykKIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KQogewpAQCAtMTk4LDYgJiM0MzsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eCkKIAogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXImIzM0OykKIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpCiB7CkBAIC0yMTMsNiAmIzQzOzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpCiAJZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKQogU0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQogX19hcmNoX3g4Nl82NAomIzQzO19fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7YXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudCYjMzQ7KQogaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCiB7CkBAIC0yMjMsNiAmIzQzOzIzMSw3IEBAIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KQogI2Vsc2UKIFNFQygmIzM0O3N5c2NhbGwmIzM0OykKIF9fYXJjaF94ODZfNjQKJiM0MztfX2FyY2hfYXJtNjQKIF9fZGVzY3JpcHRpb24oJiMzNDthcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3QmIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMKaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYwpAQCAtMzIsNiAmIzQzOzMyLDEwIEBAIF9faml0ZWQoJiMzNDsJbW92bAklZWRpLCAlZWRpJiMzNDspCiBfX2ppdGVkKCYjMzQ7CWFkZHEJJXIxMiwgJXJkaSYjMzQ7KQogX19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQogX19qaXRlZCgmIzM0OwljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CXt7KGJsfG1vdikJLip9fSYjMzQ7KQogX19zdWNjZXNzCiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KQogewpAQCAtNDgsNiAmIzQzOzUyLDEyIEBAIF9faml0ZWQoJiMzNDsJdGVzdGwJJWVkaSwgJWVkaSYjMzQ7KQogX19qaXRlZCgmIzM0OwlqZQlMMCYjMzQ7KQogX19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyZGkmIzM0OykKIF9faml0ZWQoJiMzNDtMMDoJY2FsbHEJe3suKn19JiMzNDspCiYjNDM7X19hcmNoX2FybTY0CiYjNDM7X19qaXRlZCgmIzM0Oy4uLiYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJbW92CXcwLCB3MCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJY2J6CXcwLCBMMCYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgwLCB4MjgsIHcwLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0O0wwOgl7ey4qfX0mIzM0OykKIF9fc3VjY2VzcwogaW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KQogewpAQCAtNzIsNiAmIzQzOzgyLDE2IEBAIF9faml0ZWQoJiMzNDsJdGVzdGwJJXI4ZCwgJXI4ZCYjMzQ7KQogX19qaXRlZCgmIzM0OwlqZQlMMCYjMzQ7KQogX19qaXRlZCgmIzM0OwlhZGRxCSVyMTIsICVyOCYjMzQ7KQogX19qaXRlZCgmIzM0O0wwOgljYWxscQl7ey4qfX0mIzM0OykKJiM0MztfX2FyY2hfYXJtNjQKJiM0MztfX2ppdGVkKCYjMzQ7Li4uJiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDAsIHgyOCwgdzAsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4MSwgeDI4LCB3MSwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDsJYWRkCXgyLCB4MjgsIHcyLCB1eHR3JiMzNDspCiYjNDM7X19qaXRlZCgmIzM0OwlhZGQJeDMsIHgyOCwgdzMsIHV4dHcmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CW1vdgl3NCwgdzQmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWNiegl3NCwgTDAmIzM0OykKJiM0MztfX2ppdGVkKCYjMzQ7CWFkZAl4NCwgeDI4LCB3NCwgdXh0dyYjMzQ7KQomIzQzO19faml0ZWQoJiMzNDtMMDoJe3suKn19JiMzNDspCiBfX3N1Y2Nlc3MKIGludCBhcmVuYV9hcmdfaml0X2FyZ3M1KHZvaWQgKmN0eCkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jCmluZGV4IGJhMDRjNzNkOGQ5NjcuLjhhYTg2MzlkZjkxZjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuYwpAQCAtNTksMTEgJiM0Mzs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eCkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO1NFQygmIzM0O3N0cnVjdF9vcHMvdGVzdF9hcmVuYV9tdWx0aXNsb3QmIzM0OykKJiM0MztpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpCiYjNDM7ewomIzQzOwl1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdOwomIzQzOwomIzQzOwlhcmVuYV90b3VjaCYjNDM7JiM0Mzs7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudAomIzQzOwkgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLgomIzQzOwkgKi8KJiM0MzsJaWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpCiYjNDM7CQlyZXR1cm4gMHhiYWQ7CiYjNDM7CSpwdHIgJiM0Mzs9IDE7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIFNFQygmIzM0Oy5zdHJ1Y3Rfb3BzLmxpbmsmIzM0OykKIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7CiAJLnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsCiAJLnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsCiAJLnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsCiYjNDM7CS50ZXN0X2FyZW5hX211bHRpc2xvdCA9ICh2b2lkICopdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IsCiB9OwogCiBTRUMoJiMzNDtzeXNjYWxsJiMzNDspCkBAIC0xMDksNiAmIzQzOzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpCiAJaWYgKCp2YWwgIT0gNDQpCiAJCXJldHVybiA5OwogCiYjNDM7CS8qIGEgbXVsdGktc2xvdCBhcmcgcHJlY2VkZXMgdGhlIGFyZW5hIHBvaW50ZXIgaGVyZSAqLwomIzQzOwlyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gMTA7CiYjNDM7CWlmICgqdmFsICE9IDQ1KQomIzQzOwkJcmV0dXJuIDExOwomIzQzOwogCWJwZl9hcmVuYV9mcmVlX3BhZ2VzKCZhbXA7YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpOwogI2VuZGlmCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwppbmRleCBhNjEzM2Y3NTIxZjM0Li45MzY2YTNjNTc4ZjEzIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKQEAgLTQwMiwxMiAmIzQzOzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsCiYjNDM7CQkJCQkJICB1NjQgKnB0cl9fYXJlbmEpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0gewogCS50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsCiAJLnRlc3RfMiA9IGJwZl90ZXN0bW9kX3Rlc3RfNCwKIAkudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsCiAJLnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLAogCS50ZXN0X2FyZW5hX3N0YWNrID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9zdGFjaywKJiM0MzsJLnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3QsCiB9OwogCiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpCkBAIC00NDEsNiAmIzQzOzQ0OCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKQogCXJldHVybiBzdF9vcHMzLSZndDt0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpOwogfQogCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07CiYjNDM7CiYjNDM7CXJldHVybiBzdF9vcHMzLSZndDt0ZXN0X2FyZW5hX211bHRpc2xvdChwLCBwdHJfX2FyZW5hKTsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYnRmX3R5cGVfdGFnXzEgewogCWludCBhOwogfTsKQEAgLTg1Miw2ICYjNDM7ODY2LDcgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0XzIpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2spCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCkKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7CiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpOwogQlRGX0tGVU5DU19FTkQoYnBmX3Rlc3Rtb2RfY29tbW9uX2tmdW5jX2lkcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oCmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaApAQCAtMTAzLDYgJiM0MzsxMDMsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIgewogCWludCAoKnRlc3RfMSkodm9pZCk7CiB9OwogCiYjNDM7LyogMTYgYnl0ZXMsIHNvIGl0IHRha2VzIHR3byBhcmd1bWVudCBzbG90cyB3aGVuIHBhc3NlZCBieSB2YWx1ZSAqLwomIzQzO3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHsKJiM0MzsJdTY0IGE7CiYjNDM7CXU2NCBiOwomIzQzO307CiYjNDM7CiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7CiAJaW50ICgqdGVzdF8xKSh2b2lkKTsKIAlpbnQgKCp0ZXN0XzIpKHZvaWQpOwpAQCAtMTEyLDYgJiM0MzsxMTgsOCBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7CiAJLyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi8KIAlpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLAogCQkJCXU2NCBnLCB1NjQgaCwgdTY0ICpwdHIpOwomIzQzOwkvKiBhIG11bHRpLXNsb3QgbGVhZGluZyBhcmcsIHNvIEBwdHIgaXMgbm90IGF0IHRoZSBzbG90IGl0cyBhcmcgaW5kZXggc3VnZ2VzdHMgKi8KJiM0MzsJaW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTsKIH07CiAKIHN0cnVjdCBzdF9vcHNfYXJncyB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAppbmRleCBjNDM4M2FjYjUzYzExLi43ZDgxMDcwZWVmZTdmIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKQEAgLTEyMyw2ICYjNDM7MTIzLDcgQEAgdm9pZCBicGZfdGVzdG1vZF90ZXN0X21vZF9rZnVuYyhpbnQgaSkgX19rc3ltOwogaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoX191NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07CiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2soX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTsKJiM0MztpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07CiAKIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYiwKIAkJCQlfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMyMwoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiAxMDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQgb2YgQVJNNjQgQlBGIEpJVCBBcmVuYSBBcmd1bWVudCBTdXBwb3J0KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgdG8gdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyB0aGF0IEtNU0FOIHdvdWxkIGNhdGNoLiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBpcyBtb2RpZnlpbmcgdGhlIEpJVCB0byBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGFyZW5hIHBvaW50ZXJzLiBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIGluc3RydWN0aW9uIGdlbmVyYXRpb24gKGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgKSBhbmQgYWRkaW5nIHRlc3RzLgoKSW5pdGlhbGx5LCBJIGxvb2tlZCBmb3IgdGhlIHR5cGljYWwgS01TQU4gcmVkIGZsYWdzOiBrZXJuZWwgZGF0YSBzZW50IHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIG9yIHZ1bG5lcmFiaWxpdGllcyBpbiBib3VuZHMgY2hlY2tpbmcuICBOb25lIG9mIHRob3NlIGFwcGx5IGRpcmVjdGx5LiAgVGhpcyBpcyBhbGwgYWJvdXQgbWFjaGluZSBjb2RlIGdlbmVyYXRpb24gd2l0aGluIHRoZSBKSVQuCgpUaGUgSklUIGl0c2VsZiBnZW5lcmF0ZXMgaW5zdHJ1Y3Rpb25zLCBzbyBhIGJ1ZyAqY291bGQqIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLCBidXQgdGhhdCYjMzk7cyBhIGdlbmVyYWwgSklUIGJ1Zywgbm90IG5lY2Vzc2FyaWx5IHNvbWV0aGluZyBLTVNBTiBpcyB0YWlsb3JlZCBmb3IgdW5sZXNzIHRoZSAqSklUKiBpdHNlbGYgdXNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSBkdXJpbmcgY29tcGlsYXRpb24uICBJIGRpZCBhIHF1aWNrIHNjYW4gZm9yIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLCB2YXJpYWJsZXMgbGlrZSBgdG1wYCwgYGJhc2VfbG9gLCBhbmQgYHNsb3RzYCwgYW5kIHRoZXkgYWxsIGFwcGVhciBpbml0aWFsaXplZC4KClNwZWNpZmljYWxseSwgSSBkb3ZlIGludG8gdGhlIGBzYXZlX2FyZ3NgIGZ1bmN0aW9uIGFuZCB0aGUgYGVtaXRfYXJlbmFfYXJnX2NvbnZgIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGVyZSB3ZXJlbiYjMzk7dCBzbmVha3kgdW5pbml0aWFsaXplZCByZWdpc3RlciB1c2VzLCBidXQgaXQmIzM5O3MganVzdCBnZW5lcmF0aW5nIGNvZGUgdGhhdCBzYXZlcyBhcmd1bWVudHMgdG8gdGhlIHN0YWNrIG9yIHBlcmZvcm1zIGFuIGFkZHJlc3MgY29udmVyc2lvbiwgYW5kIG5vdGhpbmcgcG9pbnRzIHRvIGRpcmVjdCByaXNrcy4gIFRoZSBgY2xlYXJfZ2FyYmFnZWAgY2FsbCBmb3Igc3RhY2sgYXJndW1lbnRzIGlzIGV4aXN0aW5nIGNvZGUsIHNvIHRoYXQmIzM5O3Mgbm90IGEgbmV3IGNvbmNlcm4uCgpTbywgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgSklUJiMzOTtzIGNvZGUgZ2VuZXJhdGlvbiwgYnV0IGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaW50cm9kdWNlIGFueSBvZiB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdC4gSSB0aGluayB0aGUgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MgaXRzZWxmIGlzIHNvdW5kIGFuZCBkb2VzbiYjMzk7dCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50cy4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBsb2dpYyB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbCYjMzk7cyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBUk02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyB0aGUgdHJhbXBvbGluZSBnZW5lcmF0aW9uIGxvZ2ljIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUga2VybmVsJiMzOTtzIEMgY29kZS4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChlLmcuLCBvdXQtb2YtYm91bmRzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NTowMi42Mzg4MjcyNjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjAxMzUxMjE1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBhcmVuYSBhcmd1bWVudHMuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHRoZSB0cmFtcG9saW5lIGdlbmVyYXRpb24gbG9naWMgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBnZW5lcmF0aW5nIG1hY2hpbmUgY29kZSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBrZXJuZWwncyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRiBhcmVuYSBhcmd1bWVudHMgaW4gdGhlIEFSTTY0IEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBoYW5kbGUgYXJlbmEgYXJndW1lbnRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHVzZSBhcmVuYSBhcmd1bWVudHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwvQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDU6MDIuNjM4ODMyNTIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTUyMDkzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDEwIDIyOjQ1OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuaW5kZXggMTAwNGViMGJlYzYxNy4uZDljYzJhYjFjZjAxOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbkBAIC0zMDEsOSArMzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XFxuICAgICAgICAgfVxcbiBcXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxcbi1hcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzIG90aGVyd2lzZS4gVGhlXFxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXFxuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxcbithcmVuYSBhcmd1bWVudCBzdXBwb3J0IChjdXJyZW50bHkgeDg2LTY0IGFuZCBhcm02NCk7IHZlcmlmaWNhdGlvbiBmYWlsc1xcbitvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXFxuK3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cXG4gXFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcXG5pbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcXG5AQCAtMjA1LDYgKzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUge1xcbiBcXHRBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1NcXG4gfTtcXG4gXFxuKy8qIG9wdGlvbiBmaWVsZCBvZiBhZGQvc3ViIChleHRlbmRlZCByZWdpc3RlcikgKi9cXG4rZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVEIsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCxcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1VYVFgsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQixcXG4rXFx0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxcbitcXHRBQVJDSDY0X0lOU05fRVhURU5EX1NYVFcsXFxuK1xcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCxcXG4rfTtcXG4rXFxuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xcbiBcXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTyxcXG4gXFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX0tFRVAsXFxuQEAgLTM3OCw2ICszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFxcdDB4N0YyMDAwMDAsIDB4MEIwMDAwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHMsXFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLFxcdDB4N0YyMDAwMDAsIDB4NEIwMDAwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXFx0MHg3RjIwMDAwMCwgMHg2QjAwMDAwMClcXG4rX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkX2V4dCxcXHQweDdGMjAwMDAwLCAweDBCMjAwMDAwKVxcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcXHQweDdGMjAwMDAwLCAweDJCMjAwMDAwKVxcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFxcdDB4N0YyMDAwMDAsIDB4NEIyMDAwMDApXFxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnNfZXh0LFxcdDB4N0YyMDAwMDAsIDB4NkIyMDAwMDApXFxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXFx0MHg3RkUwODAwMCwgMHgxQjAwMDAwMClcXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyh1ZGl2LFxcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXFxuQEAgLTYzNyw2ICs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuIFxcdFxcdFxcdFxcdFxcdCBpbnQgc2hpZnQsXFxuIFxcdFxcdFxcdFxcdFxcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXFxuIFxcdFxcdFxcdFxcdFxcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XFxuK3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBpbnQgc2hpZnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbiBcXHRcXHRcXHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXFxuaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2xpYi9pbnNuLmNcXG4rKysgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcXG5AQCAtOTg2LDYgKzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4gXFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6XFxuKyAqIGl0IGVuY29kZXMgU1AgZm9yIEBzcmMsIGFuZCBmb3IgQGRzdCB0b28gdW5sZXNzIEB0eXBlIHNldHMgdGhlIGZsYWdzLiBPbmx5XFxuKyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLlxcbisgKi9cXG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBzaGlmdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpXFxuK3tcXG4rXFx0dTMyIGluc247XFxuK1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6XFxuK1xcdFxcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxcbitcXHRcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERF9TRVRGTEFHUzpcXG4rXFx0XFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkc19leHRfdmFsdWUoKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOlxcbitcXHRcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogdW5rbm93biBhZGQvc3ViIGVuY29kaW5nICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgdHlwZSk7XFxuK1xcdFxcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHRzd2l0Y2ggKHZhcmlhbnQpIHtcXG4rXFx0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XFxuK1xcdFxcdGluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHByX2VycihcXFwiJXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHZhcmlhbnQpO1xcbitcXHRcXHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNoaWZ0IFxcdTAwM2MgMCB8fCBzaGlmdCBcXHUwMDNlIDQpIHtcXG4rXFx0XFx0cHJfZXJyKFxcXCIlczogaW52YWxpZCBzaGlmdCBlbmNvZGluZyAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHNoaWZ0KTtcXG4rXFx0XFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XFxuK1xcdH1cXG4rXFxuK1xcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JELCBpbnNuLCBkc3QpO1xcbitcXG4rXFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk4sIGluc24sIHNyYyk7XFxuK1xcbitcXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STSwgaW5zbiwgcmVnKTtcXG4rXFxuK1xcdC8qIG9wdGlvbiBpbiBiaXRzIFsxNToxM10gYW5kIGltbTMgaW4gWzEyOjEwXSB0b2dldGhlciBmaWxsIElNTV82ICovXFxuK1xcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgKGV4dGVuZCBcXHUwMDNjXFx1MDAzYyAzKSB8IHNoaWZ0KTtcXG4rfVxcbitcXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxcbiBcXHRcXHRcXHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXFxuIFxcdFxcdFxcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcXG5AQCAtMjQzLDYgKzI0MywxNyBAQFxcbiAvKiBSbiAtIFJtOyBzZXQgY29uZGl0aW9uIGZsYWdzICovXFxuICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pXFxuIFxcbisvKiBBZGQvc3VidHJhY3QgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xcbisjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcXFxcbitcXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXFxcXG4rXFx0XFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcXFxcbitcXHRcXHRBQVJDSDY0X0lOU05fQURTQl8jI3R5cGUpXFxuKy8qIFJkID0gUm4gKyAoRVhUKFJtKSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgKi9cXG4rI2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcXFxcbitcXHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcXG4rLyogUmQgPSBSbiArICh1MzIpUm0gKi9cXG4rI2RlZmluZSBBNjRfQUREX1VYVFcoUmQsIFJuLCBSbSkgQTY0X0FERF9FWFQoMSwgUmQsIFJuLCBSbSwgVVhUVywgMClcXG4rXFxuIC8qIERhdGEtcHJvY2Vzc2luZyAoMSBzb3VyY2UpICovXFxuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxcXFxuIFxcdEE2NF9WQVJJQU5UKHNmKSwgQUFSQ0g2NF9JTlNOX0RBVEExXyMjdHlwZSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbmluZGV4IGQxNGQyOTdlYmI5NjcuLjFjZDMyN2QyMTNlMzQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xcbkBAIC0xMjQ5LDYgKzEyNDksNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxcbisgKiB4TiA9IGtlcm5fdm1fc3RhcnQgKyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcXG4rICoga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwgYnkgc2tpcHBpbmcgdGhlIGFkZCwgdGVzdGVkXFxuKyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cXG4rICovXFxuK3N0YXRpYyBpbnQgZW1pdF9rZnVuY19hcmVuYV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqaW5zbilcXG4re1xcbitcXHRjb25zdCB1OCBhcmVuYV92bV9iYXNlID0gYnBmMmE2NFtBUkVOQV9WTV9TVEFSVF07XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVxcdTAwM2Vwcm9nLCBpbnNuKTtcXG4rXFx0aWYgKCFmbSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbWluX3QoaW50LCBmbS1cXHUwMDNlbnJfYXJncywgTUFYX0JQRl9GVU5DX1JFR19BUkdTKTsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IHU4IHJlZyA9IGJwZjJhNjRbQlBGX1JFR18xICsgaV07XFxuK1xcdFxcdHU4IGZsYWdzID0gZm0tXFx1MDAzZWFyZ19mbGFnc1tpXTtcXG4rXFxuK1xcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVxcdTAwM2VhcmVuYV92bV9zdGFydCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcXG4rXFx0XFx0XFx0LyogMzItYml0IG1vdiBjbGVhcnMgdGhlIHVwcGVyIDMyIGJpdHMgKi9cXG4rXFx0XFx0XFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcXG4rXFx0XFx0XFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXFxuK1xcdFxcdFxcdGVtaXQoQTY0X0NCWigwLCByZWcsIDIpLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVtaXQoQTY0X0FERF9VWFRXKHJlZywgYXJlbmFfdm1fYmFzZSwgcmVnKSwgY3R4KTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi5cXG4gICogUmV0dXJuczpcXG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXFxuQEAgLTE2NzEsNiArMTcwOCwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZnVuY19hZGRyLCBcXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdGlmIChpbnNuLVxcdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xcbitcXHRcXHRcXHRyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4gXFx0XFx0ZW1pdF9jYWxsKGZ1bmNfYWRkciwgY3R4KTtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQ2FsbCB0byBhcmNoX2JwZl90aW1lZF9tYXlfZ290bygpIGlzIGVtaXR0ZWQgYnkgdGhlXFxuQEAgLTIzMzUsNiArMjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4rYm9vbCBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gdm9pZCAqYnBmX2FyY2hfdGV4dF9jb3B5KHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBzaXplX3QgbGVuKVxcbiB7XFxuIFxcdGlmICghYWFyY2g2NF9pbnNuX2NvcHkoZHN0LCBzcmMsIGxlbikpXFxuQEAgLTI1MDgsMzQgKzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxcbiBcXHR9XFxuIH1cXG4gXFxuKy8qXFxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xcbisgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XFxuKyAqIDMyIGJpdHMgb2Yga2Vybl92bV9zdGFydC4gQSBudWxsYWJsZSBhcmcgcHJlc2VydmVzIE5VTEwsIHRlc3RlZCBvbiB0aGUgZnVsbFxcbisgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcXG4rICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXFxuKyAqIHBvaW50ZXIgcmVnaXN0ZXJzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcXG4re1xcbitcXHRpZiAobnVsbGFibGUpIHtcXG4rXFx0XFx0aWYgKGRzdCAhPSBzcmMpXFxuK1xcdFxcdFxcdGVtaXQoQTY0X01PVigxLCBkc3QsIHNyYyksIGN0eCk7XFxuK1xcdFxcdC8qIHNraXAgdGhlIHN1YnRyYWN0aW9uIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXFxuK1xcdFxcdGVtaXQoQTY0X0NCWigxLCBkc3QsIDIpLCBjdHgpO1xcbitcXHRcXHRzcmMgPSBkc3Q7XFxuK1xcdH1cXG4rXFx0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXFxuLVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcXG4tXFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXFxuLVxcdFxcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxcbitcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxcbitcXHRcXHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSlcXG4ge1xcbi1cXHRpbnQgaTtcXG4tXFx0aW50IHJlZztcXG4tXFx0aW50IGRvZmY7XFxuLVxcdGludCBzb2ZmO1xcbi1cXHRpbnQgc2xvdHM7XFxuIFxcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcXG4rXFx0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcXG4rXFx0aW50IGksIHJlZywgZG9mZiwgc29mZiwgc2xvdHM7XFxuK1xcbitcXHQvKiBvbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmFzZSB0YWtlIHBhcnQgaW4gdGhlIHN1YnRyYWN0aW9uICovXFxuK1xcdGlmIChhcmVuYV9iYXNlKVxcbitcXHRcXHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcXG4gXFxuIFxcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxcbiBcXHQgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXFxuIFxcdCAqL1xcbi1cXHRmb3IgKHJlZyA9IDA7IHJlZyBcXHUwMDNjIGEtXFx1MDAzZXJlZ3NfZm9yX2FyZ3M7IHJlZysrKSB7XFxuLVxcdFxcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cXG4tXFx0XFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcXG4tXFx0XFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxcbi1cXHRcXHQgICAgIGN0eCk7XFxuLVxcdFxcdGJhcmdzX29mZiArPSA4O1xcbitcXHRmb3IgKGkgPSAwLCByZWcgPSAwOyBpIFxcdTAwM2MgYS1cXHUwMDNlYXJnc19pbl9yZWdzOyBpKyspIHtcXG4rXFx0XFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFxcdTAwMjZcXHUwMDI2IChtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gXFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRyk7XFxuK1xcdFxcdGJvb2wgbnVsbGFibGUgPSBtLVxcdTAwM2VhcmdfZmxhZ3NbaV0gXFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcXG4rXFxuK1xcdFxcdHNsb3RzID0gKG0tXFx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xcbitcXHRcXHR3aGlsZSAoc2xvdHMtLSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0aWYgKGZvcl9jYWxsX29yaWdpbikge1xcbitcXHRcXHRcXHRcXHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAoYXJlbmFfYXJnKSB7XFxuK1xcdFxcdFxcdFxcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pO1xcbitcXHRcXHRcXHRcXHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZWcrKztcXG4rXFx0XFx0XFx0YmFyZ3Nfb2ZmICs9IDg7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0c29mZiA9IDMyOyAvKiBvbiBzdGFjayBhcmd1bWVudHMgc3RhcnQgZnJvbSBGUCArIDMyICovXFxuK1xcdC8qXFxuK1xcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXFxuK1xcdCAqIHByb2xvZ3VlLiBFbnRlcmVkIHRocm91Z2ggdGhlIGZlbnRyeSBjYWxsIGZyb20gYSB0cmFjZWQgZnVuY3Rpb24sIHRoZVxcbitcXHQgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvblxcbitcXHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCArIDMyLiBBIHN0cnVjdF9vcHNcXG4rXFx0ICogY2FsbGJhY2sgaXMgY2FsbGVkIGluZGlyZWN0bHkgYW5kIG9ubHkgdGhlIEZQL0xSIGZyYW1lIGlzIHNhdmVkLCBzb1xcbitcXHQgKiB0aGV5IHN0YXJ0IGF0IEZQICsgMTYuXFxuK1xcdCAqL1xcbitcXHRzb2ZmID0gaXNfc3RydWN0X29wcyA/IDE2IDogMzI7XFxuIFxcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcXG4gXFxuIFxcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXFxuIFxcdGZvciAoaSA9IGEtXFx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcXHUwMDNjIG0tXFx1MDAzZW5yX2FyZ3M7IGkrKykge1xcbitcXHRcXHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXFx1MDAyNlxcdTAwMjYgKG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcXG4rXFx0XFx0Ym9vbCBudWxsYWJsZSA9IG0tXFx1MDAzZWFyZ19mbGFnc1tpXSBcXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xcbitcXG4gXFx0XFx0c2xvdHMgPSAobS1cXHUwMDNlYXJnX3NpemVbaV0gKyA3KSAvIDg7XFxuIFxcdFxcdC8qIHZlcmlmaWVyIGVuc3VyZXMgYXJnX3NpemUgXFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cXG4gXFx0XFx0d2hpbGUgKHNsb3RzLS0gXFx1MDAzZSAwKSB7XFxuQEAgLTI1NDUsNiArMjYzNCw4IEBAIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0aWYgKHNsb3RzID09IDAgXFx1MDAyNlxcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcXG4gXFx0XFx0XFx0XFx0Y2xlYXJfZ2FyYmFnZShjdHgsIHRtcCwgbS1cXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcXG4rXFx0XFx0XFx0aWYgKGFyZW5hX2FyZylcXG4rXFx0XFx0XFx0XFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XFxuIFxcdFxcdFxcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7XFxuIFxcdFxcdFxcdHNvZmYgKz0gODtcXG4gXFx0XFx0XFx0ZG9mZiArPSA4O1xcbkBAIC0yNjA0LDggKzI2OTUsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuIFxcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcXG4gXFx0aW50IGNvb2tpZV9vZmYsIGNvb2tpZV9jbnQsIGNvb2tpZV9iYXJnc19vZmY7XFxuIFxcdGludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7XFxuK1xcdHU2NCBhcmVuYV9iYXNlO1xcbiBcXHR1NjQgZnVuY19tZXRhO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5XFxuK1xcdCAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZVxcbitcXHQgKiBAZnVuY19hZGRyLiBBcmVuYSBjb252ZXJzaW9uIHJlbGllcyBvbiB0aGlzOiBicGZfdHJhbXBfYXJlbmFfYmFzZSgpXFxuK1xcdCAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmVcXG4rXFx0ICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy5cXG4rXFx0ICovXFxuK1xcdFdBUk5fT05fT05DRSgoZmxhZ3MgXFx1MDAyNiBCUEZfVFJBTVBfRl9JTkRJUkVDVCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAoZmxhZ3MgXFx1MDAyNiB+KEJQRl9UUkFNUF9GX0lORElSRUNUIHwgQlBGX1RSQU1QX0ZfUkVUX0ZFTlRSWV9SRVQpKSk7XFxuK1xcbitcXHRhcmVuYV9iYXNlID0gYnBmX3RyYW1wX2FyZW5hX2Jhc2UobSwgdG5vZGVzLCBmbGFncyk7XFxuK1xcbiBcXHQvKiB0cmFtcG9saW5lIHN0YWNrIGxheW91dDpcXG4gXFx0ICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXVxcbiBcXHQgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdXFxuQEAgLTI3MjEsNyArMjgyNSw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxcbiBcXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xcbiBcXG4gXFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cXG4tXFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlKTtcXG4rXFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTtcXG4gXFxuIFxcdC8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqL1xcbiBcXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcXG5AQCAtMjc2OSw4ICsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xcbi1cXHRcXHQvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi9cXG4tXFx0XFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpO1xcbitcXHRcXHQvKiB0aGUgb3JpZ2luYWwgZnVuYyB0YWtlcyBrZXJuZWwgYWRkcmVzc2VzLCBuZXZlciBjb252ZXJ0ZWQgb25lcyAqL1xcbitcXHRcXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7XFxuIFxcdFxcdC8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqL1xcbiBcXHRcXHRlbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTtcXG4gXFx0XFx0ZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC02LDcgKzYsNyBAQFxcbiAjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwic3RydWN0X29wc19hcmVuYV9mYWlsLnNrZWwuaFxcXCJcXG4gXFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXFxuIC8qXFxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXFxuICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxcbkBAIC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMgdm9pZCBhcmVuYV9hcmdfYXR0YWNoKHZvaWQpXFxuIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxcbiB7XFxuIFxcdC8qXFxuLVxcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgb25seS5cXG4tXFx0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxcbi1cXHQgKiBhcmd1bWVudHNcXFwiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cXG4rXFx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmRcXG4rXFx0ICogYXJtNjQgb25seS4gRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydFxcbitcXHQgKiBhcmVuYSBhcmd1bWVudHNcXFwiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cXG4gXFx0ICovXFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXFxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9hcmdcXFwiKSlcXG4gXFx0XFx0YXJlbmFfYXJnKCk7XFxuIFxcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJhcmVuYV9hcmdfZmFpbFxcXCIpKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuaW5kZXggY2RjZWE4ODlkYTU4Ni4uYmYwZDMwNGUwZTU5YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXFxuQEAgLTI3LDYgKzI3LDcgQEAgdm9sYXRpbGUgdTY0IHN0YXNoO1xcbiBcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxcbiB7XFxuQEAgLTcwLDYgKzcxLDcgQEAgaW50IGFyZW5hX2FyZ19mb3Jtcyh2b2lkICpjdHgpXFxuICAqL1xcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTExMSw2ICsxMTMsNyBAQCBpbnQgYXJlbmFfYXJnX3JlYmFzZSh2b2lkICpjdHgpXFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4gaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcXG4ge1xcbkBAIC0xNDIsNiArMTQ1LDcgQEAgaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcXG4ge1xcbkBAIC0xNjksNiArMTczLDcgQEAgaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXFxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcXG4ge1xcbkBAIC0xODksNiArMTk0LDcgQEAgaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXFxuIFxcbiBTRUMoXFxcInN5c2NhbGxcXFwiKVxcbiBfX2FyY2hfeDg2XzY0XFxuK19fYXJjaF9hcm02NFxcbiBfX2ZhaWx1cmUgX19tc2coXFxcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVxcXCIpXFxuIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTE5OCw2ICsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiaXMgbm90IGEgcG9pbnRlciB0byBhcmVuYSBvciBzY2FsYXJcXFwiKVxcbiBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTIxMyw2ICsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxcbiBcXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuIF9fYXJjaF94ODZfNjRcXG4rX19hcmNoX2FybTY0XFxuIF9fZmFpbHVyZSBfX21zZyhcXFwiYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFxcXCIpXFxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTIyMyw2ICsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcXG4gI2Vsc2VcXG4gU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4gX19hcmNoX3g4Nl82NFxcbitfX2FyY2hfYXJtNjRcXG4gX19kZXNjcmlwdGlvbihcXFwiYXJlbmFfYXJnX3N0YWNrOiBub3Qgc3VwcG9ydGVkLCBkdW1teSB0ZXN0XFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcXG5pbmRleCBjOWI5MTg2NjI2MTYyLi5iNWEwMWNiYzMzYTczIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xcbkBAIC0zMiw2ICszMiwxMCBAQCBfX2ppdGVkKFxcXCJcXHRtb3ZsXFx0JWVkaSwgJWVkaVxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGFkZHFcXHQlcjEyLCAlcmRpXFxcIilcXG4gX19qaXRlZChcXFwiLi4uXFxcIilcXG4gX19qaXRlZChcXFwiXFx0Y2FsbHFcXHR7ey4qfX1cXFwiKVxcbitfX2FyY2hfYXJtNjRcXG4rX19qaXRlZChcXFwiLi4uXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDAsIHgyOCwgdzAsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHR7eyhibHxtb3YpXFx0Lip9fVxcXCIpXFxuIF9fc3VjY2Vzc1xcbiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxcbiB7XFxuQEAgLTQ4LDYgKzUyLDEyIEBAIF9faml0ZWQoXFxcIlxcdHRlc3RsXFx0JWVkaSwgJWVkaVxcXCIpXFxuIF9faml0ZWQoXFxcIlxcdGplXFx0TDBcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRhZGRxXFx0JXIxMiwgJXJkaVxcXCIpXFxuIF9faml0ZWQoXFxcIkwwOlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19hcmNoX2FybTY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdG1vdlxcdHcwLCB3MFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGNielxcdHcwLCBMMFxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgwLCB4MjgsIHcwLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiTDA6XFx0e3suKn19XFxcIilcXG4gX19zdWNjZXNzXFxuIGludCBhcmVuYV9hcmdfaml0X251bGxhYmxlKHZvaWQgKmN0eClcXG4ge1xcbkBAIC03Miw2ICs4MiwxNiBAQCBfX2ppdGVkKFxcXCJcXHR0ZXN0bFxcdCVyOGQsICVyOGRcXFwiKVxcbiBfX2ppdGVkKFxcXCJcXHRqZVxcdEwwXFxcIilcXG4gX19qaXRlZChcXFwiXFx0YWRkcVxcdCVyMTIsICVyOFxcXCIpXFxuIF9faml0ZWQoXFxcIkwwOlxcdGNhbGxxXFx0e3suKn19XFxcIilcXG4rX19hcmNoX2FybTY0XFxuK19faml0ZWQoXFxcIi4uLlxcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgwLCB4MjgsIHcwLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDEsIHgyOCwgdzEsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJcXHRhZGRcXHR4MiwgeDI4LCB3MiwgdXh0d1xcXCIpXFxuK19faml0ZWQoXFxcIlxcdGFkZFxcdHgzLCB4MjgsIHczLCB1eHR3XFxcIilcXG4rX19qaXRlZChcXFwiXFx0bW92XFx0dzQsIHc0XFxcIilcXG4rX19qaXRlZChcXFwiXFx0Y2J6XFx0dzQsIEwwXFxcIilcXG4rX19qaXRlZChcXFwiXFx0YWRkXFx0eDQsIHgyOCwgdzQsIHV4dHdcXFwiKVxcbitfX2ppdGVkKFxcXCJMMDpcXHR7ey4qfX1cXFwiKVxcbiBfX3N1Y2Nlc3NcXG4gaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxcbiB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xcbkBAIC01OSwxMSArNTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitTRUMoXFxcInN0cnVjdF9vcHMvdGVzdF9hcmVuYV9tdWx0aXNsb3RcXFwiKVxcbitpbnQgdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXFxuK3tcXG4rXFx0dTY0IF9fYXJlbmEgKnB0ciA9ICh1NjQgX19hcmVuYSAqKWN0eFsyXTtcXG4rXFxuK1xcdGFyZW5hX3RvdWNoKys7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudFxcbitcXHQgKiBvbmUgYnV0IHNsb3QgdHdvLiBHZXR0aW5nIHRoYXQgd3JvbmcgaGFuZHMgdGhlIGNhbGxiYWNrIGEgc2NhbGFyLlxcbitcXHQgKi9cXG4rXFx0aWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpXFxuK1xcdFxcdHJldHVybiAweGJhZDtcXG4rXFx0KnB0ciArPSAxO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gU0VDKFxcXCIuc3RydWN0X29wcy5saW5rXFxcIilcXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcXG4gXFx0LnRlc3RfYXJlbmEgPSAodm9pZCAqKXRlc3RfYXJlbmFfY2IsXFxuIFxcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxcbiBcXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcXG4rXFx0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gKHZvaWQgKil0ZXN0X2FyZW5hX211bHRpc2xvdF9jYixcXG4gfTtcXG4gXFxuIFNFQyhcXFwic3lzY2FsbFxcXCIpXFxuQEAgLTEwOSw2ICsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KVxcbiBcXHRpZiAoKnZhbCAhPSA0NClcXG4gXFx0XFx0cmV0dXJuIDk7XFxuIFxcbitcXHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cXG4rXFx0cmV0ID0gYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KCh1NjQgKil2YWwpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gMTA7XFxuK1xcdGlmICgqdmFsICE9IDQ1KVxcbitcXHRcXHRyZXR1cm4gMTE7XFxuK1xcbiBcXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIDA7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbkBAIC00MDIsMTIgKzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgdTY0ICpwdHJfX2FyZW5hKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xcbiBcXHQudGVzdF8xID0gYnBmX3Rlc3Rtb2RfdGVzdF8zLFxcbiBcXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxcbiBcXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXFxuIFxcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9udWxsYWJsZSxcXG4gXFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxcbitcXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCxcXG4gfTtcXG4gXFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcXG5AQCAtNDQxLDYgKzQ0OCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKVxcbiBcXHRyZXR1cm4gc3Rfb3BzMy1cXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcXG4gfVxcbiBcXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCA9IHsgLmEgPSAxMSwgLmIgPSAyMiB9O1xcbitcXG4rXFx0cmV0dXJuIHN0X29wczMtXFx1MDAzZXRlc3RfYXJlbmFfbXVsdGlzbG90KHAsIHB0cl9fYXJlbmEpO1xcbit9XFxuK1xcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYnRmX3R5cGVfdGFnXzEge1xcbiBcXHRpbnQgYTtcXG4gfTtcXG5AQCAtODUyLDYgKzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZSlcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2dldF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcXG5AQCAtMTAzLDYgKzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XFxuIFxcdGludCAoKnRlc3RfMSkodm9pZCk7XFxuIH07XFxuIFxcbisvKiAxNiBieXRlcywgc28gaXQgdGFrZXMgdHdvIGFyZ3VtZW50IHNsb3RzIHdoZW4gcGFzc2VkIGJ5IHZhbHVlICovXFxuK3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcXG4rXFx0dTY0IGE7XFxuK1xcdHU2NCBiO1xcbit9O1xcbitcXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xcbiBcXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xcbiBcXHRpbnQgKCp0ZXN0XzIpKHZvaWQpO1xcbkBAIC0xMTIsNiArMTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xcbiBcXHQvKiBlbm91Z2ggbGVhZGluZyBhcmdzIHRvIGZvcmNlIEBwdHIgb250byB0aGUgc3RhY2sgb24geDg2IGFuZCBhcm02NCAqL1xcbiBcXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxcbiBcXHRcXHRcXHRcXHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcXG4rXFx0LyogYSBtdWx0aS1zbG90IGxlYWRpbmcgYXJnLCBzbyBAcHRyIGlzIG5vdCBhdCB0aGUgc2xvdCBpdHMgYXJnIGluZGV4IHN1Z2dlc3RzICovXFxuK1xcdGludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcXG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XFxuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9udWxsYWJsZShfX3U2NCAqcHRyX19hcmVuYV9fbnVsbGFibGUpIF9fa3N5bTtcXG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XFxuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcXG4gXFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcXG4gXFx0XFx0XFx0XFx0X191MzIgYywgX191NjQgZCkgX19rc3ltO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NTowMy4xOTQ2NDY0NTVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQ3NjM4MTQ2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwM2MwOGM5ZDUwNTc5MGYzYTVhNzJiNmEzNWEwODk3MjFjMTRmZGUxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjI6NDU6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggMTAwNGViMGJlYzYxNy4uZDljYzJhYjFjZjAxOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC0zMDEsOSArMzAxLDkgQEAgQW4gZXhhbXBsZSBpcyBnaXZlbiBiZWxvdzo6XG4gICAgICAgICB9XG4gXG4gQ2FsbGluZyBzdWNoIGEga2Z1bmMgcmVxdWlyZXMgdGhlIHByb2dyYW0gdG8gdXNlIGFuIGFyZW5hIG1hcCBhbmQgYSBKSVQgd2l0aFxuLWFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHMgb3RoZXJ3aXNlLiBUaGVcbi1wcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBIHZhbHVlIHRoYXQgZG9lc1xuLW5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuK2FyZW5hIGFyZ3VtZW50IHN1cHBvcnQgKGN1cnJlbnRseSB4ODYtNjQgYW5kIGFybTY0KTsgdmVyaWZpY2F0aW9uIGZhaWxzXG4rb3RoZXJ3aXNlLiBUaGUgcHJvZ3JhbSBjYW4gcGFzcyBhbnkgdmFsdWUgd2l0aG91dCBjb21wcm9taXNpbmcgdGhlIGtlcm5lbC4gQVxuK3ZhbHVlIHRoYXQgZG9lcyBub3QgcG9pbnQgaW50byB0aGUgYXJlbmEgaXMgYSBwcm9ncmFtIGJ1Zy5cbiBcbiBUaGUgc3VmZml4ZXMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIG9uIHRoZSBhcmd1bWVudHMgb2Ygc3RydWN0X29wcyBzdHViXG4gZnVuY3Rpb25zLCB3aXRoIHRoZSBjb252ZXJzaW9uIHJ1bm5pbmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi4gVGhlXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuaW5kZXggY2MwNzAyZmE2NGE3OS4uNDU0OGU4MDE1ODA4ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaFxuQEAgLTIwNSw2ICsyMDUsMTggQEAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHtcbiBcdEFBUkNINjRfSU5TTl9BRFNCX1NVQl9TRVRGTEFHU1xuIH07XG4gXG4rLyogb3B0aW9uIGZpZWxkIG9mIGFkZC9zdWIgKGV4dGVuZGVkIHJlZ2lzdGVyKSAqL1xuK2VudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIHtcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfVVhUWCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUQixcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUSCxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUVyxcbitcdEFBUkNINjRfSU5TTl9FWFRFTkRfU1hUWCxcbit9O1xuK1xuIGVudW0gYWFyY2g2NF9pbnNuX21vdmV3aWRlX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX01PVkVXSURFX1pFUk8sXG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfS0VFUCxcbkBAIC0zNzgsNiArMzkwLDEwIEBAIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZCxcdDB4N0YyMDAwMDAsIDB4MEIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkcyxcdDB4N0YyMDAwMDAsIDB4MkIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViLFx0MHg3RjIwMDAwMCwgMHg0QjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzLFx0MHg3RjIwMDAwMCwgMHg2QjAwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRfZXh0LFx0MHg3RjIwMDAwMCwgMHgwQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzX2V4dCxcdDB4N0YyMDAwMDAsIDB4MkIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3ViX2V4dCxcdDB4N0YyMDAwMDAsIDB4NEIyMDAwMDApXG4rX19BQVJDSDY0X0lOU05fRlVOQ1Moc3Vic19leHQsXHQweDdGMjAwMDAwLCAweDZCMjAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1hZGQsXHQweDdGRTA4MDAwLCAweDFCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKG1zdWIsXHQweDdGRTA4MDAwLCAweDFCMDA4MDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHVkaXYsXHQweDdGRTBGQzAwLCAweDFBQzAwODAwKVxuQEAgLTYzNyw2ICs2NTMsMTMgQEAgdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9zaGlmdGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4gXHRcdFx0XHRcdCBpbnQgc2hpZnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4gXHRcdFx0XHRcdCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4rdTMyIGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciByZWcsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUgZXh0ZW5kLFxuK1x0XHRcdFx0XHQgIGludCBzaGlmdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbGliL2luc24uYyBiL2FyY2gvYXJtNjQvbGliL2luc24uY1xuaW5kZXggMzdjZTc1ZjdmMWYwOC4uZTcwYWMwMjM4NTE1MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbGliL2luc24uY1xuKysrIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5AQCAtOTg2LDYgKzk4Niw2NiBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sIHNoaWZ0KTtcbiB9XG4gXG4rLypcbisgKiBVbmxpa2UgdGhlIHNoaWZ0ZWQtcmVnaXN0ZXIgZm9ybSwgcmVnaXN0ZXIgMzEgaXMgbm90IFhaUiBldmVyeXdoZXJlIGhlcmU6XG4rICogaXQgZW5jb2RlcyBTUCBmb3IgQHNyYywgYW5kIGZvciBAZHN0IHRvbyB1bmxlc3MgQHR5cGUgc2V0cyB0aGUgZmxhZ3MuIE9ubHlcbisgKiBAcmVnIGtlZXBzIHRoZSBYWlIgbWVhbmluZy5cbisgKi9cbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSlcbit7XG4rXHR1MzIgaW5zbjtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BREQ6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZF9leHRfdmFsdWUoKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX1NVQjpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfc3ViX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfQUREX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9hZGRzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJzX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHByX2VycihcIiVzOiB1bmtub3duIGFkZC9zdWIgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHR5cGUpO1xuK1x0XHRyZXR1cm4gQUFSQ0g2NF9CUkVBS19GQVVMVDtcbitcdH1cbitcbitcdHN3aXRjaCAodmFyaWFudCkge1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fVkFSSUFOVF8zMkJJVDpcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzY0QklUOlxuK1x0XHRpbnNuIHw9IEFBUkNINjRfSU5TTl9TRl9CSVQ7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gdmFyaWFudCBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdmFyaWFudCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aWYgKHNoaWZ0IFx1MDAzYyAwIHx8IHNoaWZ0IFx1MDAzZSA0KSB7XG4rXHRcdHByX2VycihcIiVzOiBpbnZhbGlkIHNoaWZ0IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCBzaGlmdCk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUkQsIGluc24sIGRzdCk7XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9STiwgaW5zbiwgc3JjKTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JNLCBpbnNuLCByZWcpO1xuK1xuK1x0Lyogb3B0aW9uIGluIGJpdHMgWzE1OjEzXSBhbmQgaW1tMyBpbiBbMTI6MTBdIHRvZ2V0aGVyIGZpbGwgSU1NXzYgKi9cbitcdHJldHVybiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzYsIGluc24sXG4rXHRcdFx0XHRcdCAgICAgKGV4dGVuZCBcdTAwM2NcdTAwM2MgMykgfCBzaGlmdCk7XG4rfVxuK1xuIHUzMiBhYXJjaDY0X2luc25fZ2VuX2RhdGExKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4gXHRcdFx0ICAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaCBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuaW5kZXggZDEzZGU0MjIyY2ZiNy4uYjJmZTZlNmRjZjQ0NyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaFxuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5AQCAtMjQzLDYgKzI0MywxNyBAQFxuIC8qIFJuIC0gUm07IHNldCBjb25kaXRpb24gZmxhZ3MgKi9cbiAjZGVmaW5lIEE2NF9DTVAoc2YsIFJuLCBSbSkgQTY0X1NVQlMoc2YsIEE2NF9aUiwgUm4sIFJtKVxuIFxuKy8qIEFkZC9zdWJ0cmFjdCAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rI2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXG4rXHRhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKFJkLCBSbiwgUm0sIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9FWFRFTkRfIyNleHQsIHNoaWZ0LCBBNjRfVkFSSUFOVChzZiksIFxcXG4rXHRcdEFBUkNINjRfSU5TTl9BRFNCXyMjdHlwZSlcbisvKiBSZCA9IFJuICsgKEVYVChSbSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSAqL1xuKyNkZWZpbmUgQTY0X0FERF9FWFQoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQpIFxcXG4rXHRBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIEFERClcbisvKiBSZCA9IFJuICsgKHUzMilSbSAqL1xuKyNkZWZpbmUgQTY0X0FERF9VWFRXKFJkLCBSbiwgUm0pIEE2NF9BRERfRVhUKDEsIFJkLCBSbiwgUm0sIFVYVFcsIDApXG4rXG4gLyogRGF0YS1wcm9jZXNzaW5nICgxIHNvdXJjZSkgKi9cbiAjZGVmaW5lIEE2NF9EQVRBMShzZiwgUmQsIFJuLCB0eXBlKSBhYXJjaDY0X2luc25fZ2VuX2RhdGExKFJkLCBSbiwgXFxcbiBcdEE2NF9WQVJJQU5UKHNmKSwgQUFSQ0g2NF9JTlNOX0RBVEExXyMjdHlwZSlcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5pbmRleCBkMTRkMjk3ZWJiOTY3Li4xY2QzMjdkMjEzZTM0IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbisrKyBiL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXG5AQCAtMTI0OSw2ICsxMjQ5LDQzIEBAIHN0YXRpYyB2b2lkIGVtaXRfc3RhY2tfYXJnX3N0b3JlX2ltbShzMzIgaW1tLCBzMTYgYnBmX29mZiwgY29uc3QgdTggdG1wLCBzdHJ1Y3RcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBSZWJhc2UgdGhlIF9fYXJlbmEgYXJncyBvZiBhIGtmdW5jIGNhbGwgdG8gYXJlbmEga2VybmVsIGFkZHJlc3NlcyxcbisgKiB4TiA9IGtlcm5fdm1fc3RhcnQgKyAodTMyKXhOLCB3aXRoIHRoZSBhcmVuYSBiYXNlIHJlZ2lzdGVyIGhvbGRpbmdcbisgKiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCBieSBza2lwcGluZyB0aGUgYWRkLCB0ZXN0ZWRcbisgKiBvbiB0aGUgdHJ1bmNhdGVkIHZhbHVlIGFzIGFyZW5hIE5VTEwgaXMgb2Zmc2V0IDAuXG4rICovXG4rc3RhdGljIGludCBlbWl0X2tmdW5jX2FyZW5hX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IGJwZl9pbnNuICppbnNuKVxuK3tcbitcdGNvbnN0IHU4IGFyZW5hX3ZtX2Jhc2UgPSBicGYyYTY0W0FSRU5BX1ZNX1NUQVJUXTtcbitcdGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqZm07XG4rXHRpbnQgaTtcbitcbitcdGZtID0gYnBmX2ppdF9maW5kX2tmdW5jX21vZGVsKGN0eC1cdTAwM2Vwcm9nLCBpbnNuKTtcbitcdGlmICghZm0pXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluX3QoaW50LCBmbS1cdTAwM2Vucl9hcmdzLCBNQVhfQlBGX0ZVTkNfUkVHX0FSR1MpOyBpKyspIHtcbitcdFx0Y29uc3QgdTggcmVnID0gYnBmMmE2NFtCUEZfUkVHXzEgKyBpXTtcbitcdFx0dTggZmxhZ3MgPSBmbS1cdTAwM2VhcmdfZmxhZ3NbaV07XG4rXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX0FSRU5BX0FSRykpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UoIWN0eC1cdTAwM2VhcmVuYV92bV9zdGFydCkpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQlRGX0ZNT0RFTF9OVUxMQUJMRV9BUkcpIHtcbitcdFx0XHQvKiAzMi1iaXQgbW92IGNsZWFycyB0aGUgdXBwZXIgMzIgYml0cyAqL1xuK1x0XHRcdGVtaXQoQTY0X01PVigwLCByZWcsIHJlZyksIGN0eCk7XG4rXHRcdFx0Lyogc2tpcCB0aGUgYWRkIHNvIHRoYXQgTlVMTCBzdGF5cyBOVUxMICovXG4rXHRcdFx0ZW1pdChBNjRfQ0JaKDAsIHJlZywgMiksIGN0eCk7XG4rXHRcdH1cbitcdFx0ZW1pdChBNjRfQUREX1VYVFcocmVnLCBhcmVuYV92bV9iYXNlLCByZWcpLCBjdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qIEpJVHMgYW4gZUJQRiBpbnN0cnVjdGlvbi5cbiAgKiBSZXR1cm5zOlxuICAqIDAgIC0gc3VjY2Vzc2Z1bGx5IEpJVGVkIGFuIDgtYnl0ZSBlQlBGIGluc3RydWN0aW9uLlxuQEAgLTE2NzEsNiArMTcwOCwxMSBAQCBzdGF0aWMgaW50IGJ1aWxkX2luc24oY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJwZl9pbnNuXG4gXHRcdFx0XHRcdCAgICBcdTAwMjZmdW5jX2FkZHIsIFx1MDAyNmZ1bmNfYWRkcl9maXhlZCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGluc24tXHUwMDNlc3JjX3JlZyA9PSBCUEZfUFNFVURPX0tGVU5DX0NBTEwpIHtcbitcdFx0XHRyZXQgPSBlbWl0X2tmdW5jX2FyZW5hX2FyZ3MoY3R4LCBpbnNuKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0XHRlbWl0X2NhbGwoZnVuY19hZGRyLCBjdHgpO1xuIFx0XHQvKlxuIFx0XHQgKiBDYWxsIHRvIGFyY2hfYnBmX3RpbWVkX21heV9nb3RvKCkgaXMgZW1pdHRlZCBieSB0aGVcbkBAIC0yMzM1LDYgKzIzNzcsMTEgQEAgYm9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiB2b2lkICpicGZfYXJjaF90ZXh0X2NvcHkodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pXG4ge1xuIFx0aWYgKCFhYXJjaDY0X2luc25fY29weShkc3QsIHNyYywgbGVuKSlcbkBAIC0yNTA4LDM0ICsyNTU1LDc2IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2dhcmJhZ2Uoc3RydWN0IGppdF9jdHggKmN0eCwgaW50IHJlZywgaW50IGVmZmVjdGl2ZV9ieXRlcylcbiBcdH1cbiB9XG4gXG4rLypcbisgKiBDb252ZXJ0IGFuIGFyZW5hIGtlcm5lbCBhZGRyZXNzIGludG8gdGhlIGFyZW5hIHBvaW50ZXIgZm9ybSBvbiBpdHMgd2F5IGludG9cbisgKiB0aGUgQlBGIGN0eCwgZHN0ID0gKHUzMikoc3JjIC0ga2Vybl92bV9zdGFydCksIHdpdGggQGJhc2VfbG8gaG9sZGluZyB0aGUgbG93XG4rICogMzIgYml0cyBvZiBrZXJuX3ZtX3N0YXJ0LiBBIG51bGxhYmxlIGFyZyBwcmVzZXJ2ZXMgTlVMTCwgdGVzdGVkIG9uIHRoZSBmdWxsXG4rICogNjQtYml0IGtlcm5lbCBwb2ludGVyLiBUaGUgMzItYml0IHN1YnRyYWN0aW9uIGJvdGggdHJ1bmNhdGVzIGFuZCBjbGVhcnMgdGhlXG4rICogdXBwZXIgaGFsZiwgc28gdGhlIHN0b3JlZCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIEpJVCBpbnZhcmlhbnQgZm9yIGFyZW5hXG4rICogcG9pbnRlciByZWdpc3RlcnMuXG4rICovXG4rc3RhdGljIHZvaWQgZW1pdF9hcmVuYV9hcmdfY29udihzdHJ1Y3Qgaml0X2N0eCAqY3R4LCB1OCBkc3QsIHU4IHNyYywgYm9vbCBudWxsYWJsZSwgdTggYmFzZV9sbylcbit7XG4rXHRpZiAobnVsbGFibGUpIHtcbitcdFx0aWYgKGRzdCAhPSBzcmMpXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDEsIGRzdCwgc3JjKSwgY3R4KTtcbitcdFx0Lyogc2tpcCB0aGUgc3VidHJhY3Rpb24gc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0ZW1pdChBNjRfQ0JaKDEsIGRzdCwgMiksIGN0eCk7XG4rXHRcdHNyYyA9IGRzdDtcbitcdH1cbitcdGVtaXQoQTY0X1NVQigwLCBkc3QsIHNyYywgYmFzZV9sbyksIGN0eCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNhdmVfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgYmFyZ3Nfb2ZmLCBpbnQgb2FyZ3Nfb2ZmLFxuLVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuLVx0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbilcbitcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICptLCBjb25zdCBzdHJ1Y3QgYXJnX2F1eCAqYSxcbitcdFx0ICAgICAgYm9vbCBmb3JfY2FsbF9vcmlnaW4sIGJvb2wgaXNfc3RydWN0X29wcywgdTY0IGFyZW5hX2Jhc2UpXG4ge1xuLVx0aW50IGk7XG4tXHRpbnQgcmVnO1xuLVx0aW50IGRvZmY7XG4tXHRpbnQgc29mZjtcbi1cdGludCBzbG90cztcbiBcdHU4IHRtcCA9IGJwZjJhNjRbVE1QX1JFR18xXTtcbitcdHU4IGJhc2VfbG8gPSBicGYyYTY0W1RNUF9SRUdfMl07XG4rXHRpbnQgaSwgcmVnLCBkb2ZmLCBzb2ZmLCBzbG90cztcbitcbitcdC8qIG9ubHkgdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBiYXNlIHRha2UgcGFydCBpbiB0aGUgc3VidHJhY3Rpb24gKi9cbitcdGlmIChhcmVuYV9iYXNlKVxuK1x0XHRlbWl0X2E2NF9tb3ZfaSgwLCBiYXNlX2xvLCAoczMyKSh1MzIpYXJlbmFfYmFzZSwgY3R4KTtcbiBcbiBcdC8qIHN0b3JlIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgZm9yIHRoZSBicGYgcHJvZ3JhbSwgb3IgcmVzdG9yZVxuIFx0ICogYXJndW1lbnRzIGZyb20gc3RhY2sgZm9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvblxuIFx0ICovXG4tXHRmb3IgKHJlZyA9IDA7IHJlZyBcdTAwM2MgYS1cdTAwM2VyZWdzX2Zvcl9hcmdzOyByZWcrKykge1xuLVx0XHRlbWl0KGZvcl9jYWxsX29yaWdpbiA/XG4tXHRcdCAgICAgQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSA6XG4tXHRcdCAgICAgQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSxcbi1cdFx0ICAgICBjdHgpO1xuLVx0XHRiYXJnc19vZmYgKz0gODtcbitcdGZvciAoaSA9IDAsIHJlZyA9IDA7IGkgXHUwMDNjIGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbitcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbitcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbitcdFx0XHRpZiAoZm9yX2NhbGxfb3JpZ2luKSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9MRFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIGlmIChhcmVuYV9hcmcpIHtcbitcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHJlZywgbnVsbGFibGUsIGJhc2VfbG8pO1xuK1x0XHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBiYXJnc19vZmYpLCBjdHgpO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkocmVnLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fVxuK1x0XHRcdHJlZysrO1xuK1x0XHRcdGJhcmdzX29mZiArPSA4O1xuK1x0XHR9XG4gXHR9XG4gXG4tXHRzb2ZmID0gMzI7IC8qIG9uIHN0YWNrIGFyZ3VtZW50cyBzdGFydCBmcm9tIEZQICsgMzIgKi9cbitcdC8qXG4rXHQgKiBPbi1zdGFjayBhcmd1bWVudHMgc3RhcnQgYWJvdmUgdGhlIGZyYW1lKHMpIHB1c2hlZCBieSB0aGUgdHJhbXBvbGluZVxuK1x0ICogcHJvbG9ndWUuIEVudGVyZWQgdGhyb3VnaCB0aGUgZmVudHJ5IGNhbGwgZnJvbSBhIHRyYWNlZCBmdW5jdGlvbiwgdGhlXG4rXHQgKiBwcm9sb2d1ZSBzYXZlcyBib3RoIHRoZSBwYXJlbnQgKEZQL3g5KSBhbmQgdGhlIHRyYWNlZCBmdW5jdGlvblxuK1x0ICogKEZQL0xSKSBmcmFtZXMsIHNvIHRoZSBhcmd1bWVudHMgc3RhcnQgYXQgRlAgKyAzMi4gQSBzdHJ1Y3Rfb3BzXG4rXHQgKiBjYWxsYmFjayBpcyBjYWxsZWQgaW5kaXJlY3RseSBhbmQgb25seSB0aGUgRlAvTFIgZnJhbWUgaXMgc2F2ZWQsIHNvXG4rXHQgKiB0aGV5IHN0YXJ0IGF0IEZQICsgMTYuXG4rXHQgKi9cbitcdHNvZmYgPSBpc19zdHJ1Y3Rfb3BzID8gMTYgOiAzMjtcbiBcdGRvZmYgPSAoZm9yX2NhbGxfb3JpZ2luID8gb2FyZ3Nfb2ZmIDogYmFyZ3Nfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgb24gc3RhY2sgYXJndW1lbnRzICovXG4gXHRmb3IgKGkgPSBhLVx1MDAzZWFyZ3NfaW5fcmVnczsgaSBcdTAwM2MgbS1cdTAwM2Vucl9hcmdzOyBpKyspIHtcbitcdFx0Ym9vbCBhcmVuYV9hcmcgPSBhcmVuYV9iYXNlIFx1MDAyNlx1MDAyNiAobS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKTtcbitcdFx0Ym9vbCBudWxsYWJsZSA9IG0tXHUwMDNlYXJnX2ZsYWdzW2ldIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRztcbitcbiBcdFx0c2xvdHMgPSAobS1cdTAwM2Vhcmdfc2l6ZVtpXSArIDcpIC8gODtcbiBcdFx0LyogdmVyaWZpZXIgZW5zdXJlcyBhcmdfc2l6ZSBcdTAwM2M9IDE2LCBzbyBzbG90cyBlcXVhbHMgMSBvciAyICovXG4gXHRcdHdoaWxlIChzbG90cy0tIFx1MDAzZSAwKSB7XG5AQCAtMjU0NSw2ICsyNjM0LDggQEAgc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4gXHRcdFx0ICovXG4gXHRcdFx0aWYgKHNsb3RzID09IDAgXHUwMDI2XHUwMDI2ICFmb3JfY2FsbF9vcmlnaW4pXG4gXHRcdFx0XHRjbGVhcl9nYXJiYWdlKGN0eCwgdG1wLCBtLVx1MDAzZWFyZ19zaXplW2ldICUgOCk7XG4rXHRcdFx0aWYgKGFyZW5hX2FyZylcbitcdFx0XHRcdGVtaXRfYXJlbmFfYXJnX2NvbnYoY3R4LCB0bXAsIHRtcCwgbnVsbGFibGUsIGJhc2VfbG8pO1xuIFx0XHRcdGVtaXQoQTY0X1NUUjY0SSh0bXAsIEE2NF9TUCwgZG9mZiksIGN0eCk7XG4gXHRcdFx0c29mZiArPSA4O1xuIFx0XHRcdGRvZmYgKz0gODtcbkBAIC0yNjA0LDggKzI2OTUsMjEgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRib29sIGlzX3N0cnVjdF9vcHMgPSBpc19zdHJ1Y3Rfb3BzX3RyYW1wKGZlbnRyeSk7XG4gXHRpbnQgY29va2llX29mZiwgY29va2llX2NudCwgY29va2llX2JhcmdzX29mZjtcbiBcdGludCBmc2Vzc2lvbl9jbnQgPSBicGZfZnNlc3Npb25fY250KHRub2Rlcyk7XG4rXHR1NjQgYXJlbmFfYmFzZTtcbiBcdHU2NCBmdW5jX21ldGE7XG4gXG4rXHQvKlxuK1x0ICogRl9JTkRJUkVDVCBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBGX1JFVF9GRU5UUllfUkVULCBpdCBpcyBleHBsaWNpdGx5XG4rXHQgKiBpbmNvbXBhdGlibGUgd2l0aCBGX0NBTExfT1JJRyB8IEZfU0tJUF9GUkFNRSB8IEZfSVBfQVJHIGJlY2F1c2VcbitcdCAqIEBmdW5jX2FkZHIuIEFyZW5hIGNvbnZlcnNpb24gcmVsaWVzIG9uIHRoaXM6IGJwZl90cmFtcF9hcmVuYV9iYXNlKClcbitcdCAqIG9ubHkgcmV0dXJucyBhIGJhc2UgZm9yIHRoZSBpbmRpcmVjdCB0cmFtcG9saW5lLCB3aGljaCB0aGVyZWZvcmVcbitcdCAqIG5ldmVyIGNhbGxzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB3aXRoIGNvbnZlcnRlZCBhcmd1bWVudHMuXG4rXHQgKi9cbitcdFdBUk5fT05fT05DRSgoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0lORElSRUNUKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICAoZmxhZ3MgXHUwMDI2IH4oQlBGX1RSQU1QX0ZfSU5ESVJFQ1QgfCBCUEZfVFJBTVBfRl9SRVRfRkVOVFJZX1JFVCkpKTtcbitcbitcdGFyZW5hX2Jhc2UgPSBicGZfdHJhbXBfYXJlbmFfYmFzZShtLCB0bm9kZXMsIGZsYWdzKTtcbitcbiBcdC8qIHRyYW1wb2xpbmUgc3RhY2sgbGF5b3V0OlxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgcGFyZW50IGlwICAgICAgICAgXVxuIFx0ICogICAgICAgICAgICAgICAgICAgIFsgRlAgICAgICAgICAgICAgICAgXVxuQEAgLTI3MjEsNyArMjgyNSw3IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV90cmFtcG9saW5lKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHN0cnVjdCBicGZfdHJhbXBfaW1hZ2UgKmltLFxuIFx0c3RvcmVfZnVuY19tZXRhKGN0eCwgZnVuY19tZXRhLCBmdW5jX21ldGFfb2ZmKTtcbiBcbiBcdC8qIHNhdmUgYXJncyBmb3IgYnBmICovXG4tXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UpO1xuK1x0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIGZhbHNlLCBpc19zdHJ1Y3Rfb3BzLCBhcmVuYV9iYXNlKTtcbiBcbiBcdC8qIHNhdmUgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyAqL1xuIFx0ZW1pdChBNjRfU1RSNjRJKEE2NF9SKDE5KSwgQTY0X1NQLCByZWdzX29mZiksIGN0eCk7XG5AQCAtMjc2OSw4ICsyODczLDggQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHR9XG4gXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9UUkFNUF9GX0NBTExfT1JJRykge1xuLVx0XHQvKiBzYXZlIGFyZ3MgZm9yIG9yaWdpbmFsIGZ1bmMgKi9cbi1cdFx0c2F2ZV9hcmdzKGN0eCwgYmFyZ3Nfb2ZmLCBvYXJnc19vZmYsIG0sIGEsIHRydWUpO1xuK1x0XHQvKiB0aGUgb3JpZ2luYWwgZnVuYyB0YWtlcyBrZXJuZWwgYWRkcmVzc2VzLCBuZXZlciBjb252ZXJ0ZWQgb25lcyAqL1xuK1x0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSwgaXNfc3RydWN0X29wcywgMCk7XG4gXHRcdC8qIGNhbGwgb3JpZ2luYWwgZnVuYyAqL1xuIFx0XHRlbWl0KEE2NF9MRFI2NEkoQTY0X1IoMTApLCBBNjRfU1AsIHJldGFkZHJfb2ZmKSwgY3R4KTtcbiBcdFx0ZW1pdChBNjRfQURSKEE2NF9MUiwgQUFSQ0g2NF9JTlNOX1NJWkUgKiAyKSwgY3R4KTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCA5NDBlYzJjZGEwZDUyLi43ZjlmNTRiYTNmYmU1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jXG5AQCAtNiw3ICs2LDcgQEBcbiAjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfYXR0YWNoLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJzdHJ1Y3Rfb3BzX2FyZW5hX2ZhaWwuc2tlbC5oXCJcbiBcbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gLypcbiAgKiBBdHRhY2ggY2FsbGJhY2tzIHdpdGggX19hcmVuYSBhbmQgX19hcmVuYV9fbnVsbGFibGUgYXJndW1lbnRzIGFuZCBkcml2ZVxuICAqIHRoZW0gdGhyb3VnaCB0aGUgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEqKCkga2Z1bmNzLlxuQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRpYyB2b2lkIGFyZW5hX2FyZ19hdHRhY2godm9pZClcbiB2b2lkIHNlcmlhbF90ZXN0X3N0cnVjdF9vcHNfYXJlbmEodm9pZClcbiB7XG4gXHQvKlxuLVx0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBvbmx5LlxuLVx0ICogRWxzZXdoZXJlIHZlcmlmaWNhdGlvbiBmYWlscyB3aXRoIFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmFcbi1cdCAqIGFyZ3VtZW50c1wiLCBzbyB0aGUgcHJvZ3JhbXMgY2Fubm90IGV2ZW4gbG9hZC5cbitcdCAqIEFyZW5hIHN0cnVjdF9vcHMgYXJndW1lbnRzIG5lZWQgSklUIHN1cHBvcnQsIGN1cnJlbnRseSB4ODYtNjQgYW5kXG4rXHQgKiBhcm02NCBvbmx5LiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydFxuK1x0ICogYXJlbmEgYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuIFx0ICovXG4tI2lmIGRlZmluZWQoX194ODZfNjRfXylcbisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9fYWFyY2g2NF9fKVxuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9hcmdcIikpXG4gXHRcdGFyZW5hX2FyZygpO1xuIFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCJhcmVuYV9hcmdfZmFpbFwiKSlcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5pbmRleCBjZGNlYTg4OWRhNTg2Li5iZjBkMzA0ZTBlNTljIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jXG5AQCAtMjcsNiArMjcsNyBAQCB2b2xhdGlsZSB1NjQgc3Rhc2g7XG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiB7XG5AQCAtNzAsNiArNzEsNyBAQCBpbnQgYXJlbmFfYXJnX2Zvcm1zKHZvaWQgKmN0eClcbiAgKi9cbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiB7XG5AQCAtMTExLDYgKzExMyw3IEBAIGludCBhcmVuYV9hcmdfcmViYXNlKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4ge1xuQEAgLTE0Miw2ICsxNDUsNyBAQCBpbnQgYXJlbmFfYXJnczUodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19taXhlZCh2b2lkICpjdHgpXG4ge1xuQEAgLTE2OSw2ICsxNzMsNyBAQCBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiAvKiBrZXJuZWwtc2lkZSBmYXVsdHMgb24gdW5wb3B1bGF0ZWQgcGFnZXMgcmVjb3ZlciB2aWEgdGhlIHNjcmF0Y2ggcGFnZSAqL1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ191bnBvcHVsYXRlZCh2b2lkICpjdHgpXG4ge1xuQEAgLTE4OSw2ICsxOTQsNyBAQCBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImFyZW5hIHBvaW50ZXIgcmVxdWlyZXMgYSBwcm9ncmFtIHdpdGggYW4gYXNzb2NpYXRlZCBhcmVuYVwiKVxuIGludCBhcmVuYV9hcmdfbm9fYXJlbmEodm9pZCAqY3R4KVxuIHtcbkBAIC0xOTgsNiArMjA0LDcgQEAgaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgYSBwb2ludGVyIHRvIGFyZW5hIG9yIHNjYWxhclwiKVxuIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4ge1xuQEAgLTIxMyw2ICsyMjAsNyBAQCBpbnQgYXJlbmFfYXJnX2JhZF9yZWcodm9pZCAqY3R4KVxuIFx0ZGVmaW5lZChfX0JQRl9GRUFUVVJFX1NUQUNLX0FSR1VNRU5UKVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciBjYW5ub3QgYmUgYSBzdGFjayBhcmd1bWVudFwiKVxuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuIHtcbkBAIC0yMjMsNiArMjMxLDcgQEAgaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4gI2Vsc2VcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZGVzY3JpcHRpb24oXCJhcmVuYV9hcmdfc3RhY2s6IG5vdCBzdXBwb3J0ZWQsIGR1bW15IHRlc3RcIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbmluZGV4IGM5YjkxODY2MjYxNjIuLmI1YTAxY2JjMzNhNzMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmNfaml0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuQEAgLTMyLDYgKzMyLDEwIEBAIF9faml0ZWQoXCJcdG1vdmxcdCVlZGksICVlZGlcIilcbiBfX2ppdGVkKFwiXHRhZGRxXHQlcjEyLCAlcmRpXCIpXG4gX19qaXRlZChcIi4uLlwiKVxuIF9faml0ZWQoXCJcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wiKVxuK19faml0ZWQoXCJcdHt7KGJsfG1vdilcdC4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC00OCw2ICs1MiwxMiBAQCBfX2ppdGVkKFwiXHR0ZXN0bFx0JWVkaSwgJWVkaVwiKVxuIF9faml0ZWQoXCJcdGplXHRMMFwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbiBfX2ppdGVkKFwiTDA6XHRjYWxscVx0e3suKn19XCIpXG4rX19hcmNoX2FybTY0XG4rX19qaXRlZChcIi4uLlwiKVxuK19faml0ZWQoXCJcdG1vdlx0dzAsIHcwXCIpXG4rX19qaXRlZChcIlx0Y2J6XHR3MCwgTDBcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIkwwOlx0e3suKn19XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfbnVsbGFibGUodm9pZCAqY3R4KVxuIHtcbkBAIC03Miw2ICs4MiwxNiBAQCBfX2ppdGVkKFwiXHR0ZXN0bFx0JXI4ZCwgJXI4ZFwiKVxuIF9faml0ZWQoXCJcdGplXHRMMFwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyOFwiKVxuIF9faml0ZWQoXCJMMDpcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MCwgeDI4LCB3MCwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDEsIHgyOCwgdzEsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgyLCB4MjgsIHcyLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MywgeDI4LCB3MywgdXh0d1wiKVxuK19faml0ZWQoXCJcdG1vdlx0dzQsIHc0XCIpXG4rX19qaXRlZChcIlx0Y2J6XHR3NCwgTDBcIilcbitfX2ppdGVkKFwiXHRhZGRcdHg0LCB4MjgsIHc0LCB1eHR3XCIpXG4rX19qaXRlZChcIkwwOlx0e3suKn19XCIpXG4gX19zdWNjZXNzXG4gaW50IGFyZW5hX2FyZ19qaXRfYXJnczUodm9pZCAqY3R4KVxuIHtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuaW5kZXggYmEwNGM3M2Q4ZDk2Ny4uOGFhODYzOWRmOTFmMCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC01OSwxMSArNTksMjggQEAgaW50IHRlc3RfYXJlbmFfc3RhY2tfY2IodW5zaWduZWQgbG9uZyBsb25nICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rU0VDKFwic3RydWN0X29wcy90ZXN0X2FyZW5hX211bHRpc2xvdFwiKVxuK2ludCB0ZXN0X2FyZW5hX211bHRpc2xvdF9jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbit7XG4rXHR1NjQgX19hcmVuYSAqcHRyID0gKHU2NCBfX2FyZW5hICopY3R4WzJdO1xuK1xuK1x0YXJlbmFfdG91Y2grKztcbitcdC8qXG4rXHQgKiBUaGUgMTYtYnl0ZSBzdHJ1Y3Qgb2NjdXBpZXMgY3R4WzBdIGFuZCBjdHhbMV0sIHNvIEBwdHIgaXMgYXJndW1lbnRcbitcdCAqIG9uZSBidXQgc2xvdCB0d28uIEdldHRpbmcgdGhhdCB3cm9uZyBoYW5kcyB0aGUgY2FsbGJhY2sgYSBzY2FsYXIuXG4rXHQgKi9cbitcdGlmIChjdHhbMF0gIT0gMTEgfHwgY3R4WzFdICE9IDIyKVxuK1x0XHRyZXR1cm4gMHhiYWQ7XG4rXHQqcHRyICs9IDE7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gU0VDKFwiLnN0cnVjdF9vcHMubGlua1wiKVxuIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHRlc3Rtb2RfYXJlbmEgPSB7XG4gXHQudGVzdF9hcmVuYSA9ICh2b2lkICopdGVzdF9hcmVuYV9jYixcbiBcdC50ZXN0X2FyZW5hX251bGxhYmxlID0gKHZvaWQgKil0ZXN0X2FyZW5hX251bGxhYmxlX2NiLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSAodm9pZCAqKXRlc3RfYXJlbmFfc3RhY2tfY2IsXG4rXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSAodm9pZCAqKXRlc3RfYXJlbmFfbXVsdGlzbG90X2NiLFxuIH07XG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuQEAgLTEwOSw2ICsxMjYsMTMgQEAgaW50IHRyaWdnZXIodm9pZCAqY3R4KVxuIFx0aWYgKCp2YWwgIT0gNDQpXG4gXHRcdHJldHVybiA5O1xuIFxuK1x0LyogYSBtdWx0aS1zbG90IGFyZyBwcmVjZWRlcyB0aGUgYXJlbmEgcG9pbnRlciBoZXJlICovXG4rXHRyZXQgPSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoKHU2NCAqKXZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gMTA7XG4rXHRpZiAoKnZhbCAhPSA0NSlcbitcdFx0cmV0dXJuIDExO1xuK1xuIFx0YnBmX2FyZW5hX2ZyZWVfcGFnZXMoXHUwMDI2YXJlbmEsICh2b2lkIF9fYXJlbmEgKil2YWwsIDEpO1xuICNlbmRpZlxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbmluZGV4IGE2MTMzZjc1MjFmMzQuLjkzNjZhM2M1NzhmMTMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5AQCAtNDAyLDEyICs0MDIsMTkgQEAgc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3Qoc3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCxcbitcdFx0XHRcdFx0XHQgIHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIF9fYnBmX3Rlc3Rtb2Rfb3BzMyA9IHtcbiBcdC50ZXN0XzEgPSBicGZfdGVzdG1vZF90ZXN0XzMsXG4gXHQudGVzdF8yID0gYnBmX3Rlc3Rtb2RfdGVzdF80LFxuIFx0LnRlc3RfYXJlbmEgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX251bGxhYmxlLFxuIFx0LnRlc3RfYXJlbmFfc3RhY2sgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX3N0YWNrLFxuK1x0LnRlc3RfYXJlbmFfbXVsdGlzbG90ID0gYnBmX3Rlc3Rtb2Rfb3BzM19fdGVzdF9hcmVuYV9tdWx0aXNsb3QsXG4gfTtcbiBcbiBzdGF0aWMgdm9pZCBicGZfdGVzdG1vZF90ZXN0X3N0cnVjdF9vcHMzKHZvaWQpXG5AQCAtNDQxLDYgKzQ0OCwxMyBAQCBfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfc3RhY2sodTY0ICpwdHJfX2FyZW5hKVxuIFx0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9zdGFjaygxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCBwdHJfX2FyZW5hKTtcbiB9XG4gXG4rX19icGZfa2Z1bmMgaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCh1NjQgKnB0cl9fYXJlbmEpXG4re1xuK1x0c3RydWN0IGJwZl90ZXN0bW9kX2FyZW5hX3BhaXIgcCA9IHsgLmEgPSAxMSwgLmIgPSAyMiB9O1xuK1xuK1x0cmV0dXJuIHN0X29wczMtXHUwMDNldGVzdF9hcmVuYV9tdWx0aXNsb3QocCwgcHRyX19hcmVuYSk7XG4rfVxuK1xuIHN0cnVjdCBicGZfdGVzdG1vZF9idGZfdHlwZV90YWdfMSB7XG4gXHRpbnQgYTtcbiB9O1xuQEAgLTg1Miw2ICs4NjYsNyBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfMilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjaylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfZ2V0X2RlZmF1bHRfdHJ1c3RlZF9wdHJfdGVzdCk7XG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19wdXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfS0ZVTkNTX0VORChicGZfdGVzdG1vZF9jb21tb25fa2Z1bmNfaWRzKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5pbmRleCAzM2YyYWY1YjcwODU3Li4yMTBiOTE5MjkwY2MyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaFxuQEAgLTEwMyw2ICsxMDMsMTIgQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczIge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiB9O1xuIFxuKy8qIDE2IGJ5dGVzLCBzbyBpdCB0YWtlcyB0d28gYXJndW1lbnQgc2xvdHMgd2hlbiBwYXNzZWQgYnkgdmFsdWUgKi9cbitzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciB7XG4rXHR1NjQgYTtcbitcdHU2NCBiO1xuK307XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0aW50ICgqdGVzdF8xKSh2b2lkKTtcbiBcdGludCAoKnRlc3RfMikodm9pZCk7XG5AQCAtMTEyLDYgKzExOCw4IEBAIHN0cnVjdCBicGZfdGVzdG1vZF9vcHMzIHtcbiBcdC8qIGVub3VnaCBsZWFkaW5nIGFyZ3MgdG8gZm9yY2UgQHB0ciBvbnRvIHRoZSBzdGFjayBvbiB4ODYgYW5kIGFybTY0ICovXG4gXHRpbnQgKCp0ZXN0X2FyZW5hX3N0YWNrKSh1NjQgYSwgdTY0IGIsIHU2NCBjLCB1NjQgZCwgdTY0IGUsIHU2NCBmLFxuIFx0XHRcdFx0dTY0IGcsIHU2NCBoLCB1NjQgKnB0cik7XG4rXHQvKiBhIG11bHRpLXNsb3QgbGVhZGluZyBhcmcsIHNvIEBwdHIgaXMgbm90IGF0IHRoZSBzbG90IGl0cyBhcmcgaW5kZXggc3VnZ2VzdHMgKi9cbitcdGludCAoKnRlc3RfYXJlbmFfbXVsdGlzbG90KShzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLCB1NjQgKnB0cik7XG4gfTtcbiBcbiBzdHJ1Y3Qgc3Rfb3BzX2FyZ3Mge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCBjNDM4M2FjYjUzYzExLi43ZDgxMDcwZWVmZTdmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTEyMyw2ICsxMjMsNyBAQCB2b2lkIGJwZl90ZXN0bW9kX3Rlc3RfbW9kX2tmdW5jKGludCBpKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX251bGxhYmxlKF9fdTY0ICpwdHJfX2FyZW5hX19udWxsYWJsZSkgX19rc3ltO1xuIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayhfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuK2ludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF90ZXN0MShzdHJ1Y3Qgc29jayAqc2ssIF9fdTMyIGEsIF9fdTY0IGIsXG4gXHRcdFx0XHRfX3UzMiBjLCBfX3U2NCBkKSBfX2tzeW07XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NTowMy4xOTQ2NDc4NjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTIwNTkyMDIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQlBGIEFyZW5hIEFyZ3VtZW50cyBpbiBBUk02NCBKSVQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgQlBGIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgd2l0aGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZyBhbmQgcGlucG9pbnQgdGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zLiBUaGUgY2hhbmdlcyBhcmUgY29uY2VudHJhdGVkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCBhbmQgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oYCwgYW5kIHRoZXJlIGFyZSBzb21lIHRlc3RzIGFkZGVkIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvYC5cblxuVGhlIGNvcmUgbG9naWMgcmV2b2x2ZXMgYXJvdW5kIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIHdoaWNoIGFyZSBjYWxsZWQgZHVyaW5nIHRoZSBCUEYgSklUIGNvbXBpbGF0aW9uIHByb2Nlc3MuIFRoaXMgbWFrZXMgaXQgZGVmaW5pdGVseSByZWFjaGFibGUgYW5kIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biB0byBzcGVjaWZpYyBmdW5jdGlvbnMuIEluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIEkgc2VlIGEgZmV3IG9wdGlvbnM6IGBicGZfaW50X2ppdF9jb21waWxlYCBsb29rcyBnZW5lcmljLCBhbmQgYGJ1aWxkX2luc25gIHNlZW1zIHRvbyBicm9hZC4gSG93ZXZlciwgYHByZXBhcmVfdHJhbXBvbGluZWAgaXMgbW9kaWZpZWQgdG8gaGFuZGxlIGFyZW5hIGFyZ3VtZW50cywgYW5kIHRoZW4gdGhlcmUgYXJlIHRoZSBzdGF0aWMgZnVuY3Rpb25zIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgLCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGFuZCBgc2F2ZV9hcmdzYC5cblxuTG9va2luZyBhdCBgYXJjaC9hcm02NC9saWIvaW5zbi5jYCwgSSBzZWUgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgLiBJbXBvcnRhbnRseSwgdGhpcyBvbmUgaXNuJ3Qgc3RhdGljLiBBZnRlciBhIHF1aWNrIHNjYW4gYmFjayBhdCBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLCBJIGFsc28gc2VlIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIG5ld2x5IGFkZGVkIGFuZCBub24tc3RhdGljLlxuXG5Pa2F5LCB0aGUgSklUIGNvbXBpbGVyIGZ1bmN0aW9ucyBhcmUgbW9zdGx5IHN0YXRpYyBpbnRlcm5hbGx5LCBzbyB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGxpa2VseSBgYnBmX2ludF9qaXRfY29tcGlsZWAgYW5kIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgLiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBjYWxscyBgcHJlcGFyZV90cmFtcG9saW5lYCwgc28gdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy5cblxuQmFzZWQgb24gdGhhdCwgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIGxvb2tzIGxpa2UgYSBnb29kIGZvY3VzLCBhcyBpdCdzIGEgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb24uIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGlzIGEgbmV3IGZ1bmN0aW9uIGFzIHdlbGwuIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucy4gYENPTkZJR19CUEZfSklUYCwgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBgQ09ORklHX0FSTTY0YCBhcmUgcmVxdWlyZWQuXG5cblRvIGNvbmZpcm0gdGhlIHNjb3BlIG9mIHRoaXMgbmV3IGZ1bmN0aW9uLCBJJ2xsIHJ1biBhIHF1aWNrIGdyZXAgdG8gbG9jYXRlIHRoZSBkZWZpbml0aW9uIG9mIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NToxNC40MDA1NzA0MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MjEzOTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oPTY1MD11MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oLTY1NS1cXHRcXHRcXHRcXHRcXHQgZW51bSBhYXJjaDY0X2luc25fYWRzYl90eXBlIHR5cGUpO1xcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oOjY1Njp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmgtNjU3LVxcdFxcdFxcdFxcdFxcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxcbi0tXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jPTkzMT11MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcXG4tLVxcbmFyY2gvYXJtNjQvbGliL2luc24uYy05OTMtICovXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jOjk5NDp1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXFxuYXJjaC9hcm02NC9saWIvaW5zbi5jLTk5NS1cXHRcXHRcXHRcXHRcXHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaC0yNDctI2RlZmluZSBBNjRfQUREU1VCX0VSRUcoc2YsIFJkLCBSbiwgUm0sIGV4dCwgc2hpZnQsIHR5cGUpIFxcXFxcXG5hcmNoL2FybTY0L25ldC9icGZfaml0Lmg6MjQ4OlxcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcXFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXQuaC0yNDktXFx0XFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NToxNi4yNjI3MTY0MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDE1MTAzODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IEJQRiBKSVQgQ29tcGlsZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIEJQRiBhcmVuYSBhcmd1bWVudCBzdXBwb3J0IHdpdGhpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBUaGF0J3MgYSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlLCB3aGljaCBtZWFucyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbi4gRnJvbSB3aGF0IEkgY2FuIGdhdGhlciwgdGhlIGtleSBtb2RpZmljYXRpb25zIGFyZSBjb25jZW50cmF0ZWQgaW4gYGFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jYCBhbmQgYGFyY2gvYXJtNjQvbGliL2luc24uY2AuXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLiBJJ2xsIHdhbnQgdG8gZGl2ZSBkZWVwIGludG8gdGhlaXIgaW1wbGVtZW50YXRpb25zIHRvIHNlZSBob3cgdGhleSdyZSBoYW5kbGluZyBhcmVuYSBhcmd1bWVudHMgd2l0aGluIHRoZSBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGFuZCBmZWF0dXJlIGRldGVjdGlvbiwgcmVzcGVjdGl2ZWx5LlxuXG5BbmQgb2YgY291cnNlLCBnaXZlbiB0aGlzIGlzIGEgSklUIGNvbXBpbGVyIGNoYW5nZSwgZnV6emluZyBpcyBlc3NlbnRpYWwuIEFueSBjaGFuZ2UgbGlrZSB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gcmVjb21tZW5kIGFwcHJvcHJpYXRlIGZ1enppbmcgc3RyYXRlZ2llcy5cblxuVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1hdHRlciBoZXJlIGFyZSBgQlBGX0pJVGAgYW5kIGBCUEZfU1lTQ0FMTGAsIGNvbmZpcm1pbmcgdGhlc2UgYXJlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS5cblxuSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYC4gVGhlIHRleHQgc2F5cyBpdCdzIGJlaW5nIG1vZGlmaWVkIGFzIGl0IGNhbGxzIGBwcmVwYXJlX3RyYW1wb2xpbmVgLCBhbmQgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGNoYW5nZXMgY2FzY2FkZSB0aHJvdWdoIHRoZSB0cmFtcG9saW5lIHNldHVwLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBpZiBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHRyYW1wb2xpbmUgc2V0dXAgaXMgaGFuZGxlZCBjb3JyZWN0bHkgYW5kIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgYXJlbmEgYXJndW1lbnQgbWVjaGFuaXNtLlxuXG5JbiBzdW1tYXJ5LCB0aGlzIHJlcXVpcmVzIGEgY2FyZWZ1bCByZXZpZXcgb2YgdGhlIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uLCB0aGUgZmVhdHVyZSBkZXRlY3Rpb24gbG9naWMsIGFuZCB0aGUgdHJhbXBvbGluZSBzZXR1cCwgd2l0aCBhIHN0cm9uZyBlbXBoYXNpcyBvbiBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NToyMi4yNzc4MjI1MTFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwNjM2NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTI2NTY9c3RhdGljIHZvaWQgc3RvcmVfZnVuY19tZXRhKHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU2NCBmdW5jX21ldGEsIGludCBmdW5jX21ldGFfb2ZmKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjY2MS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyNjYyOi8qIEJhc2VkIG9uIHRoZSB4ODYncyBpbXBsZW1lbnRhdGlvbiBvZiBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoKS5cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yNjYzLSAqXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yOTk3PWludCBhcmNoX3Byb3RlY3RfYnBmX3RyYW1wb2xpbmUodm9pZCAqaW1hZ2UsIHVuc2lnbmVkIGludCBzaXplKVxcbi0tXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMzAwMS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzozMDAyOmludCBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmUoc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sIHZvaWQgKnJvX2ltYWdlLFxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTMwMDMtXFx0XFx0XFx0XFx0dm9pZCAqcm9faW1hZ2VfZW5kLCBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ1OjIyLjMyNzg5MDExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNjI3NTE5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIEJQRiBUcmFtcG9saW5lIGFuZCBKSVQgQ29tcGlsYXRpb24gUmVhZGluZXNzKipcblxuQWxyaWdodCwgc28gYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgaXMgZGVmaW5pdGVseSBwcmVzZW50LCBnb29kLiBUaGF0J3Mgb25lIGtleSBwaWVjZSBpbiBwbGFjZS4gTm93LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgYGJwZl9pbnRfaml0X2NvbXBpbGVgLiBUaGlzIGlzIHRoZSBiaWcgb25lLCB0aGUgY29yZSBvZiB3aGV0aGVyIHdlIGNhbiBldmVuIHRoaW5rIGFib3V0IEpJVCBjb21waWxhdGlvbiBmb3IgQlBGIGNvZGUgb24gdGhpcyBhcmNoaXRlY3R1cmUuIElmIHRoYXQgZnVuY3Rpb24gZXhpc3RzIGFuZCBpcyBhY2Nlc3NpYmxlLCB3ZeKAmXJlIGluIGEgbXVjaCBiZXR0ZXIgcG9zaXRpb24gdG8gcHJvY2VlZC4gV2l0aG91dCBpdCwgd2UncmUgc3R1Y2sgaW50ZXJwcmV0aW5nLCBhbmQgd2UgYWxsIGtub3cgaG93IHRoYXQgaW1wYWN0cyBwZXJmb3JtYW5jZS4gU28sIGxldOKAmXMgc2VlIGlmIHRoYXQgaG9vayBpcyBhdmFpbGFibGUuLi4gdGhhdCdzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA3NCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ1OjUwLjM5MDY0NTEyMloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzA3NTc1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ludF9qaXRfY29tcGlsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTMzPXN0cnVjdCBhcm02NF9qaXRfZGF0YSB7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTM5LVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxNDA6c3RydWN0IGJwZl9wcm9nICpicGZfaW50X2ppdF9jb21waWxlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDU6NTAuODIxNDA3NDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzA4NDQ0MjA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGxheSBvdXQgbXkgdGhpbmtpbmcgaGVyZS5cblxuKipEZWNvbnN0cnVjdGluZyBCUEYgQXJlbmEgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHBpbiBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQlBGIGFyZW5hIHN0dWZmLiBJJ3ZlIGdvdCBhIGZldyBmb2N1cyBzeW1ib2xzIHRvIGNvbnNpZGVyOiBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AsIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgLCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCwgYW5kIGBicGZfaW50X2ppdF9jb21waWxlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZnVuY3Rpb25zIG9yIGZlYXR1cmVzIHRoYXQgcmVsYXRlIGRpcmVjdGx5IHRvIHRoZSBhcmVuYSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGFzIGZvciB0aGUgY29uZmlncywgSSdtIHByZXR0eSBzdXJlIGBCUEZfSklUYCBhbmQgYEJQRl9TWVNDQUxMYCBhcmUgaW52b2x2ZWQsIGFzIHRoZXkgb2Z0ZW4gYXJlIHdpdGggQlBGLXJlbGF0ZWQgZmVhdHVyZXMuIEJ1dCBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcsIGVzcGVjaWFsbHkgc29tZXRoaW5nIHNwZWNpZmljIHRvIHRoZSBhcmVuYSBtZWNoYW5pc20gaXRzZWxmLlxuXG5UaGVyZWZvcmUsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBBIGBncmVwIEFSRU5BYCBzZWFyY2ggaW4gYGluaXQvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvYnBmL0tjb25maWdgIHNob3VsZCBnaXZlIG1lIGFueSBhcmVuYS1zcGVjaWZpYyBjb25maWdzIEkgbWlnaHQgaGF2ZSBvdmVybG9va2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQ2NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjowNy45MDU4NTM2MjNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTg0NDMyNTksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUEZfQVJFTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjA5LjY2NDMwMzg4MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIyMTczMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEknbSB0YWxraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIEFSRU5BIGluIHRoZSBDb25maWd1cmF0aW9uIFNwYWNlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgYEFSRU5BYCBpcyB1c2VkIHdpdGhpbiBvdXIgY29uZmlndXJhdGlvbiBlY29zeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBqdW1wIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyDigJMgdGhhdCdzIHdoZXJlIHRoZSBoZWFydCBvZiBmZWF0dXJlIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyBsaXZlcy4gTXkgdGhvdWdodCBpcyB0byBydW4gYSBxdWljayBgZ3JlcGAgZm9yIHRoZSBzdHJpbmcgYEFSRU5BYC4gSXQncyBhIGZ1bmRhbWVudGFsIG1vdmUg4oCTIHF1aWNrLCBkaXJ0eSwgYnV0IG9mdGVuIGhpZ2hseSBlZmZlY3RpdmUgZm9yIGFuIGluaXRpYWwgZXhwbG9yYXRpb24uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBtYXAgb2Ygd2hlcmUgYEFSRU5BYCBpcyBkZWZpbmVkLCB3aGljaCBmZWF0dXJlcyBkZXBlbmQgb24gaXQsIGFuZCBob3BlZnVsbHkgc29tZSBjb250ZXh0IGFyb3VuZCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQncyB0aGUgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgQVJFTkEsIGFuZCBJIGNhbiBzdGFydCBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg4NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjEzLjQ4NjQ3OTU2MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNTA1MDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkFSRU5BXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MTMuNTM4NTM2NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MTkxMTU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uIG15IGluaXRpYWwgYXNzdW1wdGlvbiBhYm91dCBhIHNlcGFyYXRlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBCUEYgYXJlbmEgbWlnaHQgYmUgaW5jb3JyZWN0LiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGFyZW5hJ3MgYmVoYXZpb3IgaXMgaW50ZXJ0d2luZWQgd2l0aCB0aGUgYnJvYWRlciBgQlBGX1NZU0NBTExgIG1lY2hhbmlzbSwgcmF0aGVyIHRoYW4gaGF2aW5nIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24uXG5cblRvIGNvbmZpcm0gdGhpcyBzdXNwaWNpb24sIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGRpdmUgaW50byB0aGUga2VybmVsIHNvdXJjZS4gVGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGlzIGluIGBrZXJuZWwvYnBmL2FyZW5hLmNgLiBJZiB0aGUgYXJlbmEgaGFzIGl0cyBvd24gZGVkaWNhdGVkIHNvdXJjZSBmaWxlLCB0aGF0IHdvdWxkIHByb3ZpZGUgYSBwcmV0dHkgZGVmaW5pdGl2ZSBhbnN3ZXIsIGFuZCBhIHBsYWNlIHRvIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiwgb24gd2hldGhlciBpdCdzIGdvdCBhIHVuaXF1ZSBjb25maWcuIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHdlbGwgdGhlbiB0aGF0IG5hcnJvd3MgZG93biB0aGUgb3B0aW9ucyBzaWduaWZpY2FudGx5LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTIyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MTcuMDgwNDUxODY3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njc1NDg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDExMjkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmtlcm5lbC9icGYvTWFrZWZpbGU9MTk9aWZlcSAoJChDT05GSUdfTU1VKSQoQ09ORklHXzY0QklUKSx5eSlcXG5rZXJuZWwvYnBmL01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYXJlbmEubyByYW5nZV90cmVlLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTIxLWVuZGlmXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTYtLypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTc6ICogYnBmX2FyZW5hIGlzIGEgc3BhcnNlbHkgcG9wdWxhdGVkIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGJldHdlZW4gYnBmIHByb2dyYW0gYW5kXFxua2VybmVsL2JwZi9hcmVuYS5jLTE4LSAqIHVzZXIgc3BhY2UgcHJvY2Vzcy5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMi0gKiBrZXJuX3ZtX3N0YXJ0IGZmZmZjOTAwMDFlNjkwMDAgLy8gcGlja2VkIGJ5IGdldF92bV9hcmVhKClcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjM6ICogRm9yIHVzZXIgc3BhY2UgYWxsIHBvaW50ZXJzIHdpdGhpbiB0aGUgYXJlbmEgYXJlIG5vcm1hbCA4LWJ5dGUgYWRkcmVzc2VzLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNC0gKiBJbiB0aGlzIGV4YW1wbGUgN2Y3ZDI2MjAwMDAwIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBwYWdlIChwZ29mZj0wKS5cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMC0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMTogKiBCUEYgSklUcyBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nIGNvZGUgdG8gYWNjZXNzIGFyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMi0gKiAgIG1vdiBlYXgsIGVheCAgLy8gZWF4IGhhcyBsb3dlciAzMi1iaXQgb2YgdXNlciBwb2ludGVyXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzktICogaW50byBrZXJuZWwgYW5kIHVzZXIgdm1hLlxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MDogKiBicGYgcHJvZ3JhbSBjYW4gYWxsb2NhdGUgYSBwYWdlIHZpYSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoKSBrZnVuY1xcbmtlcm5lbC9icGYvYXJlbmEuYy00MS0gKiB3aGljaCB3aWxsIGluc2VydCBpdCBpbnRvIGtlcm5lbCB2bV9hcmVhLlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0OTpzdGF0aWMgdm9pZCBhcmVuYV9mcmVlX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBib29sIHNsZWVwYWJsZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTpzdHJ1Y3QgYnBmX2FyZW5hIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTItXFx0c3RydWN0IGJwZl9tYXAgbWFwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU5LVxcdHJxc3BpbmxvY2tfdCBzcGlubG9jaztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjA6XFx0LyogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBwb3B1bGF0ZWQgaW4gdGhlIGFyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxLVxcdHU2NCBucl9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM6c3RhdGljIHZvaWQgYXJlbmFfZnJlZV9pcnEoc3RydWN0IGlycV93b3JrICppdyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3NTpzdHJ1Y3QgYXJlbmFfZnJlZV9zcGFuIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYtXFx0c3RydWN0IGxsaXN0X25vZGUgbm9kZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy04MC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODE6dTY0IGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODIte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo4MzpcXHRyZXR1cm4gYXJlbmEgPyAodTY0KSAobG9uZykgYXJlbmEtXFx1MDAzZWtlcm5fdm0tXFx1MDAzZWFkZHIgKyBHVUFSRF9TWiAvIDIgOiAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy04NC19XFxua2VybmVsL2JwZi9hcmVuYS5jLTg1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo4Njp1NjQgYnBmX2FyZW5hX2dldF91c2VyX3ZtX3N0YXJ0KHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy04Ny17XFxua2VybmVsL2JwZi9hcmVuYS5jOjg4OlxcdHJldHVybiBhcmVuYSA/IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0IDogMDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtODktfVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTkxLS8qKlxcbmtlcm5lbC9icGYvYXJlbmEuYzo5MjogKiBicGZfYXJlbmFfbWFwX2tlcm5fdm1fc3RhcnQgLSBrZXJuX3ZtX3N0YXJ0IGxvb2t1cCBieSBzdHJ1Y3QgYnBmX21hcCAqXFxua2VybmVsL2JwZi9hcmVuYS5jLTkzLSAqIEBtYXA6IGEgQlBGX01BUF9UWVBFX0FSRU5BIG1hcFxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTk2LSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo5Nzp1NjQgYnBmX2FyZW5hX21hcF9rZXJuX3ZtX3N0YXJ0KHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTk4LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6OTk6XFx0cmV0dXJuIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTAwLX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDItLyoqXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwMzogKiBicGZfcHJvZ19hcmVuYSAtIHJldHVybiB0aGUgYnBmX21hcCBvZiB0aGUgYXJlbmEgcmVmZXJlbmNlZCBieSBAcHJvZ1xcbmtlcm5lbC9icGYvYXJlbmEuYy0xMDQtICogQHByb2c6IGEgbG9hZGVkIEJQRiBwcm9ncmFtXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwNS0gKlxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMDY6ICogVGhlIHZlcmlmaWVyIGVuZm9yY2VzIGF0IG1vc3Qgb25lIGFyZW5hIHBlciBwcm9ncmFtIGFuZCBzdG9yZXMgaXQgaW5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTA3OiAqIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmEuIFJldHVybiB0aGF0IGFyZW5hJ3MgdW5kZXJseWluZyBicGZfbWFwLCBvciBOVUxMIGlmXFxua2VybmVsL2JwZi9hcmVuYS5jOjEwODogKiBAcHJvZyBkb2VzIG5vdCByZWZlcmVuY2UgYW4gYXJlbmEuXFxua2VybmVsL2JwZi9hcmVuYS5jLTEwOS0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTEwOnN0cnVjdCBicGZfbWFwICpicGZfcHJvZ19hcmVuYShzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxua2VybmVsL2JwZi9hcmVuYS5jLTExMS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjExMjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTExMy1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTE0OlxcdHJldHVybiBhcmVuYSA/IFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwIDogTlVMTDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE1LX1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMTc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BlZWtfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTE4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEyMjpzdGF0aWMgbG9uZyBhcmVuYV9tYXBfcHVzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxua2VybmVsL2JwZi9hcmVuYS5jLTEyMy17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTI2LVxcbmtlcm5lbC9icGYvYXJlbmEuYzoxMjc6c3RhdGljIGxvbmcgYXJlbmFfbWFwX3BvcF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKnZhbHVlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMjgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTEzMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTMyOnN0YXRpYyBsb25nIGFyZW5hX21hcF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICp2YWx1ZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTMzLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xMzYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjEzNzpzdGF0aWMgaW50IGFyZW5hX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTM4LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjE0MjpzdGF0aWMgbG9uZyBjb21wdXRlX3Bnb2ZmKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xNDMte1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDQ6XFx0cmV0dXJuICh1MzIpKHVhZGRyIC0gKHUzMilhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTQ1LX1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYz0xNDc9c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEge1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxNDg6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmE7XFxua2VybmVsL2JwZi9hcmVuYS5jLTE0OS1cXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1Mz1zdHJ1Y3QgY2xlYXJfcmFuZ2VfZGF0YSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjE1NDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTU1LVxcdHN0cnVjdCBsbGlzdF9oZWFkICpmcmVlX3BhZ2VzO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTE1OD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX3NldF9jYihwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMTg0LVxcdFxcdFxcdGNvbnRpbnVlO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoxODU6XFx0XFx0aWYgKFdBUk5fT05fT05DRShwdGVfcGFnZShvbGQpICE9IGQtXFx1MDAzZWFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xODYtXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTItXFx0ICogV2l0aG91dCBwdGVwX3RyeV9zZXQoKSB0aGVyZSBpcyBubyBhdG9taWMgaW5zdGFsbGVyLCBidXQgc3VjaCBhcmNoZXNcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MTkzOlxcdCAqIGFsc28gZG8gbm90IHdpcmUgdXAgYnBmX2FyZW5hX2hhbmRsZV9wYWdlX2ZhdWx0KCksIHNvIG5vIHNjcmF0Y2ggcGFnZVxcbmtlcm5lbC9icGYvYXJlbmEuYy0xOTQtXFx0ICogaXMgZXZlciBpbnN0YWxsZWQgYW5kIHRoZSBzbG90IGlzIGFsd2F5cyBub25lIGhlcmUuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAwLVxcdGQtXFx1MDAzZWkrKztcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjAxOlxcdFdSSVRFX09OQ0UoZC1cXHUwMDNlYXJlbmEtXFx1MDAzZW5yX3BhZ2VzLCBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMgKyAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjAyLVxcdHJldHVybiAwO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTIxMD1zdGF0aWMgaW50IGFwcGx5X3JhbmdlX2NsZWFyX2NiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMjgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjI5OlxcdCAqIFNraXAgdGhlIHBlci1hcmVuYSBzY3JhdGNoIHBhZ2UuIEEga2VybmVsIGZhdWx0IG9uIGFuIHVuYWxsb2NhdGVkIHVhZGRyXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMDpcXHQgKiBzY3JhdGNoZXMgaXRzIFBURS4gQSBsYXRlciBicGZfYXJlbmFfZnJlZV9wYWdlcygpIG92ZXIgdGhhdCByYW5nZSB3YWxrc1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzEtXFx0ICogaGVyZS4gV2l0aG91dCB0aGUgc2tpcCwgc2NyYXRjaF9wYWdlIHdvdWxkIGJlIGZyZWVkLlxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzItXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjIzMzpcXHRpZiAocGFnZSA9PSBkLVxcdTAwM2VhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjM2LVxcdF9fbGxpc3RfYWRkKFxcdTAwMjZwYWdlLVxcdTAwM2VwY3BfbGxpc3QsIGQtXFx1MDAzZWZyZWVfcGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyMzc6XFx0V1JJVEVfT05DRShkLVxcdTAwM2VhcmVuYS1cXHUwMDNlbnJfcGFnZXMsIGQtXFx1MDAzZWFyZW5hLVxcdTAwM2Vucl9wYWdlcyAtIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yMzgtXFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9MjQxPXN0YXRpYyBpbnQgYXBwbHlfcmFuZ2Vfc2V0X3NjcmF0Y2hfY2IocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTI1OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MjU5OnN0YXRpYyBpbnQgcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjEtXFx0LyogUG9wdWxhdGUgaW50ZXJtZWRpYXRlcyBmb3IgdGhlIHJlY292ZXJ5IHJhbmdlICg0IEdpQiArIHVwcGVyIGhhbGYtZ3VhcmQpLiAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzoyNjI6XFx0cmV0dXJuIGFwcGx5X3RvX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jLTI2My1cXHRcXHRcXHRcXHQgICBTWl80RyArIEdVQVJEX1NaIC8gMiwgYXBwbHlfcmFuZ2Vfc2V0X2NiLCBOVUxMKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjUtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI2NjpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmFyZW5hX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjY3LXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNjktXFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XFxua2VybmVsL2JwZi9hcmVuYS5jOjI3MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjcxLVxcdHU2NCB2bV9yYW5nZTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yNzMtXFxua2VybmVsL2JwZi9hcmVuYS5jOjI3NDpcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmEoKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMjc1LVxcdFxcdHJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0yOTktXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwMDpcXHRhcmVuYSA9IGJwZl9tYXBfYXJlYV9hbGxvYyhzaXplb2YoKmFyZW5hKSwgbnVtYV9ub2RlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzAxOlxcdGlmICghYXJlbmEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTMwMi1cXHRcXHRnb3RvIGVycjtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzAzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMDQ6XFx0YXJlbmEtXFx1MDAzZWtlcm5fdm0gPSBrZXJuX3ZtO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMDU6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSBhdHRyLVxcdTAwM2VtYXBfZXh0cmE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNjpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwNzpcXHRcXHRhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgPSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHZtX3JhbmdlO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMwOTpcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2YXJlbmEtXFx1MDAzZXZtYV9saXN0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEwOlxcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfc3BhbnMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMTE6XFx0aW5pdF9pcnFfd29yayhcXHUwMDI2YXJlbmEtXFx1MDAzZWZyZWVfaXJxLCBhcmVuYV9mcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMxMjpcXHRJTklUX1dPUksoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX3dvcmssIGFyZW5hX2ZyZWVfd29ya2VyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzEzOlxcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIGF0dHIpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNTpcXHRlcnIgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBOVU1BX05PX05PREUsIDEsIFxcdTAwMjZhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzE2LVxcdGlmIChlcnIpXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxNzpcXHRcXHRnb3RvIGVycl9mcmVlX2FyZW5hO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMTgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjMxOTpcXHRyYW5nZV90cmVlX2luaXQoXFx1MDAyNmFyZW5hLVxcdTAwM2VydCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyMDpcXHRlcnIgPSByYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCAwLCBhdHRyLVxcdTAwM2VtYXhfZW50cmllcyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTMyMS1cXHRpZiAoZXJyKVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zMjItXFx0XFx0Z290byBlcnJfZnJlZV9zY3JhdGNoO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjM6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZWxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjQ6XFx0bXV0ZXhfaW5pdChcXHUwMDI2YXJlbmEtXFx1MDAzZXphcF9tdXRleCk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjMyNTpcXHRyYXdfcmVzX3NwaW5fbG9ja19pbml0KFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2spO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozMjY6XFx0ZXJyID0gcG9wdWxhdGVfcGd0YWJsZV9leGNlcHRfcHRlKGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI3LVxcdGlmIChlcnIpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzI5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzA6XFx0cmV0dXJuIFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzEtXFxua2VybmVsL2JwZi9hcmVuYS5jLTMzMi1lcnJfZGVzdHJveV9ydDpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzMzOlxcdHJhbmdlX3RyZWVfZGVzdHJveShcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzM0LWVycl9mcmVlX3NjcmF0Y2g6XFxua2VybmVsL2JwZi9hcmVuYS5jOjMzNTpcXHRfX2ZyZWVfcGFnZShhcmVuYS1cXHUwMDNlc2NyYXRjaF9wYWdlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzM2OmVycl9mcmVlX2FyZW5hOlxcbmtlcm5lbC9icGYvYXJlbmEuYzozMzc6XFx0YnBmX21hcF9hcmVhX2ZyZWUoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy0zMzgtZXJyOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jPTM0Mz1zdGF0aWMgaW50IGV4aXN0aW5nX3BhZ2VfY2IocHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZGF0YSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ0LXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzQ1OlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gZGF0YTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzQ2LVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1Ni1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzU3OlxcdGlmIChwYWdlID09IGFyZW5hLVxcdTAwM2VzY3JhdGNoX3BhZ2UpXFxua2VybmVsL2JwZi9hcmVuYS5jLTM1OC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNjAtXFx0ICogV2UgZG8gbm90IHVwZGF0ZSBwdGUgaGVyZTpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzYxOlxcdCAqIDEuIE5vYm9keSBzaG91bGQgYmUgYWNjZXNzaW5nIGJwZl9hcmVuYSdzIHJhbmdlIG91dHNpZGUgb2YgYSBrZXJuZWwgYnVnXFxua2VybmVsL2JwZi9hcmVuYS5jLTM2Mi1cXHQgKiAyLiBUTEIgZmx1c2hpbmcgaXMgYmF0Y2hlZCBvciBkZWZlcnJlZC4gRXZlbiBpZiB3ZSBjbGVhciBwdGUsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzY5LVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzA6c3RhdGljIHZvaWQgYXJlbmFfbWFwX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzcxLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzcyOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzczLVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM3Ni1cXHQgKiBtbWFwKCkgaG9sZHMgdm1fZmlsZSB3aGljaCBob2xkcyBicGZfbWFwIHJlZmNudC5cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzc3OlxcdCAqIG11bm1hcCgpIG11c3QgaGF2ZSBoYXBwZW5lZCBvbiB2bWEgZm9sbG93ZWQgYnkgYXJlbmFfdm1fY2xvc2UoKVxcbmtlcm5lbC9icGYvYXJlbmEuYzozNzg6XFx0ICogd2hpY2ggd291bGQgY2xlYXIgYXJlbmEtXFx1MDAzZXZtYV9saXN0Llxcbmtlcm5lbC9icGYvYXJlbmEuYy0zNzktXFx0ICovXFxua2VybmVsL2JwZi9hcmVuYS5jOjM4MDpcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZhcmVuYS1cXHUwMDNldm1hX2xpc3QpKSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzgxLVxcdFxcdHJldHVybjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy0zODMtXFx0LyogRW5zdXJlIG5vIHBlbmRpbmcgZGVmZXJyZWQgZnJlZXMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Mzg0OlxcdGlycV93b3JrX3N5bmMoXFx1MDAyNmFyZW5hLVxcdTAwM2VmcmVlX2lycSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM4NTpcXHRmbHVzaF93b3JrKFxcdTAwMjZhcmVuYS1cXHUwMDNlZnJlZV93b3JrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtMzg2LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTM5Mi1cXHQgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6MzkzOlxcdGFwcGx5X3RvX2V4aXN0aW5nX3BhZ2VfcmFuZ2UoXFx1MDAyNmluaXRfbW0sIGJwZl9hcmVuYV9nZXRfa2Vybl92bV9zdGFydChhcmVuYSksXFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NDpcXHRcXHRcXHRcXHQgICAgIFNaXzRHICsgR1VBUkRfU1ogLyAyLCBleGlzdGluZ19wYWdlX2NiLCBhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5NTpcXHRmcmVlX3ZtX2FyZWEoYXJlbmEtXFx1MDAzZWtlcm5fdm0pO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTY6XFx0cmFuZ2VfdHJlZV9kZXN0cm95KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzozOTc6XFx0X19mcmVlX3BhZ2UoYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjM5ODpcXHRicGZfbWFwX2FyZWFfZnJlZShhcmVuYSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTM5OS19XFxua2VybmVsL2JwZi9hcmVuYS5jLTQwMC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDAxOnN0YXRpYyB2b2lkICphcmVuYV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MDIte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDA2OnN0YXRpYyBsb25nIGFyZW5hX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxua2VybmVsL2JwZi9hcmVuYS5jLTQwNy1cXHRcXHRcXHRcXHQgIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDExLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTI6c3RhdGljIGludCBhcmVuYV9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDEzLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmtleV90eXBlLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnZhbHVlX3R5cGUpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDE3LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MTg6c3RhdGljIHU2NCBhcmVuYV9tYXBfbWVtX3VzYWdlKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXApXFxua2VybmVsL2JwZi9hcmVuYS5jLTQxOS17XFxua2VybmVsL2JwZi9hcmVuYS5jOjQyMDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDIyOlxcdHJldHVybiAodTY0KVJFQURfT05DRShhcmVuYS1cXHUwMDNlbnJfcGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQyMy19XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NDI1PXN0cnVjdCB2bWFfbGlzdCB7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDMxLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0MzI6c3RhdGljIGludCByZW1lbWJlcl92bWEoc3RydWN0IGJwZl9hcmVuYSAqYXJlbmEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00MzMte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0Mi1cXHR2bWwtXFx1MDAzZXphcF9nZW4gPSAwO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo0NDM6XFx0bGlzdF9hZGQoXFx1MDAyNnZtbC1cXHUwMDNlaGVhZCwgXFx1MDAyNmFyZW5hLVxcdTAwM2V2bWFfbGlzdCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ0NC1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ0NzpzdGF0aWMgdm9pZCBhcmVuYV92bV9vcGVuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00NDgte1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1My1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDU0OnN0YXRpYyBpbnQgYXJlbmFfdm1fbWF5X3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ1NS17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDU4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NTk6c3RhdGljIGludCBhcmVuYV92bV9tcmVtYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2MC17XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDYzLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo0NjQ6c3RhdGljIHZvaWQgYXJlbmFfdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2NS17XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2Ni1cXHRzdHJ1Y3QgYnBmX21hcCAqbWFwID0gdm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ2NzpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ2OC1cXHRzdHJ1Y3Qgdm1hX2xpc3QgKnZtbCA9IHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3MS1cXHRcXHRyZXR1cm47XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ3MjpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDczLVxcdC8qIHVwZGF0ZSBsaW5rIGxpc3QgdW5kZXIgbG9jayAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ3OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDc5OnN0YXRpYyB2bV9mYXVsdF90IGFyZW5hX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmtlcm5lbC9icGYvYXJlbmEuYy00ODAte1xcbmtlcm5lbC9icGYvYXJlbmEuYy00ODEtXFx0c3RydWN0IGJwZl9tYXAgKm1hcCA9IHZtZi1cXHUwMDNldm1hLVxcdTAwM2V2bV9maWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjQ4MjpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4My1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCAqb2xkX21lbWNnO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ4OC1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NDg5OlxcdGtiYXNlID0gYnBmX2FyZW5hX2dldF9rZXJuX3ZtX3N0YXJ0KGFyZW5hKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNDkwLVxcdGthZGRyID0ga2Jhc2UgKyAodTMyKSh2bWYtXFx1MDAzZWFkZHJlc3MpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy00OTEtXFxua2VybmVsL2JwZi9hcmVuYS5jOjQ5MjpcXHRpZiAocmF3X3Jlc19zcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncykpXFxua2VybmVsL2JwZi9hcmVuYS5jLTQ5My1cXHRcXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTUwMS1cXHRpZiAocGFnZSkge1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1MDI6XFx0XFx0aWYgKHBhZ2UgPT0gYXJlbmEtXFx1MDAzZXNjcmF0Y2hfcGFnZSlcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTAzLVxcdFxcdFxcdC8qIEJQRiB0cmlnZ2VyZWQgc2NyYXRjaCBoZXJlOyBkb24ndCBsYXp5LWFsbG9jIG92ZXIgaXQgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01MDgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjUwOTpcXHRicGZfbWFwX21lbWNnX2VudGVyKFxcdTAwMjZhcmVuYS1cXHUwMDNlbWFwLCBcXHUwMDI2b2xkX21lbWNnLCBcXHUwMDI2bmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTE6XFx0aWYgKGFyZW5hLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU0VHVl9PTl9GQVVMVClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTEyLVxcdFxcdC8qIFVzZXIgc3BhY2UgcmVxdWVzdGVkIHRvIHNlZ2ZhdWx0IHdoZW4gcGFnZSBpcyBub3QgYWxsb2NhdGVkIGJ5IGJwZiBwcm9nICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTU6XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE2LVxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTE4LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1MTk6XFx0c3RydWN0IGFwcGx5X3JhbmdlX2RhdGEgZGF0YSA9IHsgLmFyZW5hID0gYXJlbmEsIC5wYWdlcyA9IFxcdTAwMjZwYWdlLCAuaSA9IDAgfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTIwOlxcdC8qIEFjY291bnQgaW50byBtZW1jZyBvZiB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgYnBmX2FyZW5hICovXFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMS1cXHRyZXQgPSBicGZfbWFwX2FsbG9jX3BhZ2VzKG1hcCwgTlVNQV9OT19OT0RFLCAxLCBcXHUwMDI2cGFnZSk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUyMi1cXHRpZiAocmV0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjUyMzpcXHRcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCB2bWYtXFx1MDAzZXBnb2ZmLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI0LVxcdFxcdGdvdG8gb3V0X3NpZ3NlZ3ZfbWVtY2c7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTI4LVxcdGlmIChyZXQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTI5OlxcdFxcdHJhbmdlX3RyZWVfc2V0KFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHZtZi1cXHUwMDNlcGdvZmYsIDEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01MzAtXFx0XFx0ZnJlZV9wYWdlc19ub2xvY2socGFnZSwgMCk7XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTM2LVxcdHBhZ2VfcmVmX2FkZChwYWdlLCAxKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTM3OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTUzOC1cXHR2bWYtXFx1MDAzZXBhZ2UgPSBwYWdlO1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTU0Mi1vdXRfc2lnc2VndjpcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQzOlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU0NC1cXHRyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NDYtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU0NzpzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGFyZW5hX3ZtX29wcyA9IHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTQ4OlxcdC5vcGVuXFx0XFx0PSBhcmVuYV92bV9vcGVuLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NDk6XFx0Lm1heV9zcGxpdFxcdD0gYXJlbmFfdm1fbWF5X3NwbGl0LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTA6XFx0Lm1yZW1hcFxcdFxcdD0gYXJlbmFfdm1fbXJlbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTE6XFx0LmNsb3NlXFx0XFx0PSBhcmVuYV92bV9jbG9zZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTUyOlxcdC5mYXVsdCAgICAgICAgICA9IGFyZW5hX3ZtX2ZhdWx0LFxcbmtlcm5lbC9icGYvYXJlbmEuYy01NTMtfTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU0LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo1NTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgYXJlbmFfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU2LVxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTU5LVxcdHN0cnVjdCBicGZfbWFwICptYXAgPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU2MDpcXHRzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfYXJlbmEsIG1hcCk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTU2MS1cXHRsb25nIHJldDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01NjctXFxua2VybmVsL2JwZi9hcmVuYS5jOjU2ODpcXHQvKiBpZiB1c2VyX3ZtX3N0YXJ0IHdhcyBzcGVjaWZpZWQgYXQgYXJlbmEgY3JlYXRpb24gdGltZSAqL1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1Njk6XFx0aWYgKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjU3MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIC0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3MS1cXHRcXHRcXHRyZXR1cm4gLUUyQklHO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzI6XFx0XFx0aWYgKGxlbiAhPSBhcmVuYS1cXHUwMDNldXNlcl92bV9lbmQgLSBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTczLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1NzQ6XFx0XFx0aWYgKGFkZHIgIT0gYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpXFxua2VybmVsL2JwZi9hcmVuYS5jLTU3NS1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODItXFx0XFx0cmV0dXJuIHJldDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTgzOlxcdGlmIChXQVJOX09OX09OQ0UoYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODQtXFx0XFx0LyogY2hlY2tzIGF0IG1hcCBjcmVhdGlvbiB0aW1lIHNob3VsZCBwcmV2ZW50IHRoaXMgKi9cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy01ODgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjU4OTpzdGF0aWMgaW50IGFyZW5hX21hcF9tbWFwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTAte1xcbmtlcm5lbC9icGYvYXJlbmEuYzo1OTE6XFx0c3RydWN0IGJwZl9hcmVuYSAqYXJlbmEgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2FyZW5hLCBtYXApO1xcbmtlcm5lbC9icGYvYXJlbmEuYy01OTItXFxua2VybmVsL2JwZi9hcmVuYS5jOjU5MzpcXHRndWFyZChtdXRleCkoXFx1MDAyNmFyZW5hLVxcdTAwM2Vsb2NrKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk0OlxcdGlmIChhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCBcXHUwMDI2XFx1MDAyNiBhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCAhPSB2bWEtXFx1MDAzZXZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy01OTUtXFx0XFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NTk2OlxcdFxcdCAqIElmIG1hcF9leHRyYSB3YXMgbm90IHNwZWNpZmllZCBhdCBhcmVuYSBjcmVhdGlvbiB0aW1lIHRoZW5cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNTk3LVxcdFxcdCAqIDFzdCB1c2VyIHByb2Nlc3MgY2FuIGRvIG1tYXAoTlVMTCwgLi4uKSB0byBwaWNrIHVzZXJfdm1fc3RhcnRcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MDQtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYwNTpcXHRpZiAoYXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kIFxcdTAwMjZcXHUwMDI2IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAhPSB2bWEtXFx1MDAzZXZtX2VuZClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjA2LVxcdFxcdC8qIGFsbCB1c2VyIHByb2Nlc3NlcyBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZSBvZiBtbWFwLWVkIHJlZ2lvbiAqL1xcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxMi1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjEzOlxcdGlmIChyZW1lbWJlcl92bWEoYXJlbmEsIHZtYSkpXFxua2VybmVsL2JwZi9hcmVuYS5jLTYxNC1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjE1LVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTY6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2MTc6XFx0YXJlbmEtXFx1MDAzZXVzZXJfdm1fZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYxOC1cXHQvKlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTYyMC1cXHQgKiBjbGVhcnMgVk1fTUFZRVhFQy4gU2V0IFZNX0RPTlRFWFBBTkQgdG8gYXZvaWQgcG90ZW50aWFsIGNoYW5nZVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MjE6XFx0ICogb2YgdXNlcl92bV9zdGFydC4gU2V0IFZNX0RPTlRDT1BZIHRvIHByZXZlbnQgYXJlbmEgVk1BIGZyb21cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjIyLVxcdCAqIGJlaW5nIGNvcGllZCBpbnRvIHRoZSBjaGlsZCBwcm9jZXNzIG9uIGZvcmsuXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjI0LVxcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05UQ09QWSk7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYyNTpcXHR2bWEtXFx1MDAzZXZtX29wcyA9IFxcdTAwMjZhcmVuYV92bV9vcHM7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYyNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MjgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYyOTpzdGF0aWMgaW50IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1NjQgKmltbSwgdTMyIG9mZilcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMwLXtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjMxOlxcdHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9hcmVuYSwgbWFwKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjMyLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo2MzM6XFx0aWYgKCh1NjQpb2ZmIFxcdTAwM2U9IGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzQtXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxua2VybmVsL2JwZi9hcmVuYS5jOjYzNTpcXHQqaW1tID0gKHVuc2lnbmVkIGxvbmcpYXJlbmEtXFx1MDAzZXVzZXJfdm1fc3RhcnQ7XFxua2VybmVsL2JwZi9hcmVuYS5jLTYzNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02MzgtXFxua2VybmVsL2JwZi9hcmVuYS5jOjYzOTpCVEZfSURfTElTVF9TSU5HTEUoYnBmX2FyZW5hX21hcF9idGZfaWRzLCBzdHJ1Y3QsIGJwZl9hcmVuYSlcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQwOmNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBhcmVuYV9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NDEtXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDI6XFx0Lm1hcF9hbGxvYyA9IGFyZW5hX21hcF9hbGxvYyxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQzOlxcdC5tYXBfZnJlZSA9IGFyZW5hX21hcF9mcmVlLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDQ6XFx0Lm1hcF9kaXJlY3RfdmFsdWVfYWRkciA9IGFyZW5hX21hcF9kaXJlY3RfdmFsdWVfYWRkcixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjQ1OlxcdC5tYXBfbW1hcCA9IGFyZW5hX21hcF9tbWFwLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDY6XFx0Lm1hcF9nZXRfdW5tYXBwZWRfYXJlYSA9IGFyZW5hX2dldF91bm1hcHBlZF9hcmVhLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDc6XFx0Lm1hcF9nZXRfbmV4dF9rZXkgPSBhcmVuYV9tYXBfZ2V0X25leHRfa2V5LFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDg6XFx0Lm1hcF9wdXNoX2VsZW0gPSBhcmVuYV9tYXBfcHVzaF9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NDk6XFx0Lm1hcF9wZWVrX2VsZW0gPSBhcmVuYV9tYXBfcGVla19lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTA6XFx0Lm1hcF9wb3BfZWxlbSA9IGFyZW5hX21hcF9wb3BfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjUxOlxcdC5tYXBfbG9va3VwX2VsZW0gPSBhcmVuYV9tYXBfbG9va3VwX2VsZW0sXFxua2VybmVsL2JwZi9hcmVuYS5jOjY1MjpcXHQubWFwX3VwZGF0ZV9lbGVtID0gYXJlbmFfbWFwX3VwZGF0ZV9lbGVtLFxcbmtlcm5lbC9icGYvYXJlbmEuYzo2NTM6XFx0Lm1hcF9kZWxldGVfZWxlbSA9IGFyZW5hX21hcF9kZWxldGVfZWxlbSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU0OlxcdC5tYXBfY2hlY2tfYnRmID0gYXJlbmFfbWFwX2NoZWNrX2J0ZixcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU1OlxcdC5tYXBfbWVtX3VzYWdlID0gYXJlbmFfbWFwX21lbV91c2FnZSxcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjU2OlxcdC5tYXBfYnRmX2lkID0gXFx1MDAyNmJwZl9hcmVuYV9tYXBfYnRmX2lkc1swXSxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjU3LX07XFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM9NjU5PXN0YXRpYyB1NjQgY2xlYXJfbG8zMih1NjQgdmFsKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY2Ny0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjY4OnN0YXRpYyBsb25nIGFyZW5hX2FsbG9jX3BhZ2VzKHN0cnVjdCBicGZfYXJlbmEgKmFyZW5hLCBsb25nIHVhZGRyLCBsb25nIHBhZ2VfY250LCBpbnQgbm9kZV9pZCxcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjY5LVxcdFxcdFxcdCAgICAgIGJvb2wgc2xlZXBhYmxlKVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY3MS1cXHQvKiB1c2VyX3ZtX2VuZC9zdGFydCBhcmUgZml4ZWQgYmVmb3JlIGJwZiBwcm9nIHJ1bnMgKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NjcyOlxcdGxvbmcgcGFnZV9jbnRfbWF4ID0gKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX2VuZCAtIGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo2NzM6XFx0dTY0IGtlcm5fdm1fc3RhcnQgPSBicGZfYXJlbmFfZ2V0X2tlcm5fdm1fc3RhcnQoYXJlbmEpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy02NzQtXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm5ld19tZW1jZywgKm9sZF9tZW1jZztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy02OTMtXFx0XFx0XFx0cmV0dXJuIDA7XFxua2VybmVsL2JwZi9hcmVuYS5jOjY5NDpcXHRcXHRwZ29mZiA9IGNvbXB1dGVfcGdvZmYoYXJlbmEsIHVhZGRyKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNjk1LVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlIHBhZ2VfY250X21heCAtIHBhZ2VfY250KVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTY5OS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzAwOlxcdGJwZl9tYXBfbWVtY2dfZW50ZXIoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIFxcdTAwMjZvbGRfbWVtY2csIFxcdTAwMjZuZXdfbWVtY2cpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MDEtXFx0LyogQ2FwIGFsbG9jYXRpb24gc2l6ZSB0byBLTUFMTE9DX01BWF9DQUNIRV9TSVpFIHNvIGttYWxsb2Nfbm9sb2NrKCkgY2FuIHN1Y2NlZWQuICovXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA3LVxcdH1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzA4OlxcdGRhdGEuYXJlbmEgPSBhcmVuYTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzA5LVxcdGRhdGEucGFnZXMgPSBwYWdlcztcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzEwLVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTE6XFx0aWYgKHJhd19yZXNfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmFyZW5hLVxcdTAwM2VzcGlubG9jaywgZmxhZ3MpKVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTItXFx0XFx0Z290byBvdXRfZnJlZV9wYWdlcztcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03MTQtXFx0aWYgKHVhZGRyKSB7XFxua2VybmVsL2JwZi9hcmVuYS5jOjcxNTpcXHRcXHRyZXQgPSBpc19yYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTYtXFx0XFx0aWYgKHJldClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzE3LVxcdFxcdFxcdGdvdG8gb3V0X3VubG9ja19mcmVlX3BhZ2VzO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3MTg6XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MTktXFx0fSBlbHNlIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzIwOlxcdFxcdHJldCA9IHBnb2ZmID0gcmFuZ2VfdHJlZV9maW5kKFxcdTAwMjZhcmVuYS1cXHUwMDNlcnQsIHBhZ2VfY250KTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzIxLVxcdFxcdGlmIChwZ29mZiBcXHUwMDNlPSAwKVxcbmtlcm5lbC9icGYvYXJlbmEuYzo3MjI6XFx0XFx0XFx0cmV0ID0gcmFuZ2VfdHJlZV9jbGVhcihcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiwgcGFnZV9jbnQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03MjMtXFx0fVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTcyNy1cXHRyZW1haW5pbmcgPSBwYWdlX2NudDtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzI4OlxcdHVhZGRyMzIgPSAodTMyKShhcmVuYS1cXHUwMDNldXNlcl92bV9zdGFydCArIHBnb2ZmICogUEFHRV9TSVpFKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzI5LVxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTczNS1cXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzM2OlxcdFxcdHJldCA9IGJwZl9tYXBfYWxsb2NfcGFnZXMoXFx1MDAyNmFyZW5hLVxcdTAwM2VtYXAsIG5vZGVfaWQsIHRoaXNfYmF0Y2gsIHBhZ2VzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzM3LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzYzLVxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY0OlxcdHJhd19yZXNfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2YXJlbmEtXFx1MDAzZXNwaW5sb2NrLCBmbGFncyk7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2NS1cXHRrZnJlZV9ub2xvY2socGFnZXMpO1xcbmtlcm5lbC9icGYvYXJlbmEuYy03NjYtXFx0YnBmX21hcF9tZW1jZ19leGl0KG9sZF9tZW1jZywgbmV3X21lbWNnKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzY3OlxcdHJldHVybiBjbGVhcl9sbzMyKGFyZW5hLVxcdTAwM2V1c2VyX3ZtX3N0YXJ0KSArIHVhZGRyMzI7XFxua2VybmVsL2JwZi9hcmVuYS5jLTc2OC1vdXQ6XFxua2VybmVsL2JwZi9hcmVuYS5jOjc2OTpcXHRyYW5nZV90cmVlX3NldChcXHUwMDI2YXJlbmEtXFx1MDAzZXJ0LCBwZ29mZiArIG1hcHBlZCwgcGFnZV9jbnQgLSBtYXBwZWQpO1xcbmtlcm5lbC9icGYvYXJlbmEuYzo3NzA6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcxLVxcdGlmIChtYXBwZWQpIHtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzcyLVxcdFxcdGZsdXNoX3ZtYXBfY2FjaGUoa2Vybl92bV9zdGFydCArIHVhZGRyMzIsIG1hcHBlZCBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmM6NzczOlxcdFxcdGFyZW5hX2ZyZWVfcGFnZXMoYXJlbmEsIHVhZGRyMzIsIG1hcHBlZCwgc2xlZXBhYmxlKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc0LVxcdH1cXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03NzYtb3V0X3VubG9ja19mcmVlX3BhZ2VzOlxcbmtlcm5lbC9icGYvYXJlbmEuYzo3Nzc6XFx0cmF3X3Jlc19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZhcmVuYS1cXHUwMDNlc3BpbmxvY2ssIGZsYWdzKTtcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzc4LW91dF9mcmVlX3BhZ2VzOlxcbi0tXFxua2VybmVsL2JwZi9hcmVuYS5jLTc4OC0gKi9cXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzg5OnN0YXRpYyB2b2lkIHphcF9wYWdlcyhzdHJ1Y3QgYnBmX2FyZW5hICphcmVuYSwgbG9uZyB1YWRkciwgbG9uZyBwYWdlX2NudClcXG5rZXJuZWwvYnBmL2FyZW5hLmMtNzkwLXtcXG4tLVxcbmtlcm5lbC9icGYvYXJlbmEuYy03OTgtXFx0LypcXG5rZXJuZWwvYnBmL2FyZW5hLmM6Nzk5OlxcdCAqIFRha2luZyBtbWFwX3JlYWRfbG9jaygpIHVuZGVyIGFyZW5hLVxcdTAwM2Vsb2NrIHdvdWxkIGRlYWRsb2NrIGFnYWluc3RcXG5rZXJuZWwvYnBmL2FyZW5hLmM6ODAwOlxcdCAqIGFyZW5hX3ZtX2Nsb3NlKCksIHdoaWNoIHJ1bnMgd2l0aCBtbWFwX3dyaXRlX2xvY2sgaGVsZCBhbmQgdGhlblxcbmtlcm5lbC9icGYvYXJlbmEuYzo4MDE6XFx0ICogYWNxdWlyZXMgYXJlbmEtXFx1MDAzZWxvY2suIERyb3AgYXJlbmEtXFx1MDAzZWxvY2sgZm9yIG1tYXBfcmVhZF9sb2NrKCkuXFxua2VybmVsL2JwZi9hcmVuYS5jLTgwMi1cXHQgKlxcbi0tXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjE3LjEyNzIxMTAwNloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIwNzI5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgb3duIHBlcnNwZWN0aXZlOlxuXG4qKkJQRiBBcmVuYSBcdTAwMjYgSW5zdHJ1Y3Rpb24gR2VuZXJhdGlvbiBvbiBBQXJjaDY0KipcblxuUmlnaHQsIHNvIHRoZSBCUEYgYXJlbmEg4oCTIHRoYXQncyBmdW5kYW1lbnRhbGx5IHRpZWQgdG8gdGhlIGBDT05GSUdfQlBGX1NZU0NBTExgIGNvbmZpZ3VyYXRpb24sIGFzIGV4cGVjdGVkLiBOZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZGVhbGluZyB3aXRoIHN5c3RlbSBjYWxscyBhbmQgQlBGIGludGVyYWN0aW9ucy4gTGV0J3Mgc2VlLi4uIEknbSBjdXJpb3VzIGFib3V0IHNvbWV0aGluZyBzcGVjaWZpYywgdGhlIGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBmdW5jdGlvbi4gSXMgaXQgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZSBmb3IgdXNlPyBJIHNlZW0gdG8gcmVtZW1iZXIgc2VlaW5nIGl0IGluIHRoZSBBQXJjaDY0IGFyY2hpdGVjdHVyZSBjb2RlLlxuXG5MZXQgbWUgcXVpY2tseSBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5LiBPa2F5LCBhIHF1aWNrIGdyZXAgcmV2ZWFscyBpdCdzIHNpdHRpbmcgdGhlcmUgaW4gYGFyY2gvYXJtNjQvbGliL2luc24uY2AuIFRoYXQgZmlsZSBpcyB3aGVyZSBJIGV4cGVjdGVkIGl0IHRvIGJlIGJhc2VkIG9uIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUga2VybmVsLiBHb29kLCBnb29kLiBOb3cgSSBjYW4gd29yayB3aXRoIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MTIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MjMuNDQ3OTQzMDUyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDI5NjQwNDUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLiphYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjoyNS40Nzc1OTAzMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNTA1NzA5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLi4uXG5cbioqSW52ZXN0aWdhdGluZyBCUEYgSklUIEFyZW5hIEFyZ3VtZW50IFN1cHBvcnQqKlxuXG5SaWdodCwgc28gdGhpcyB0aGluZyBpc24ndCBhIHN0YXRpY2FsbHkgY29tcGlsZWQgZWxlbWVudCwgd2hpY2ggaXMgdGhlIGZpcnN0IHRoaW5nIHRvIGNoZWNrLiBCdXQgaXQncyBhbHNvIG5vdCBkaXJlY3RseSBleHBvcnRlZCwgdGhhdCdzIHdoYXQncyB0aHJvd2luZyBtZS4gSG1tLi4uIE9rYXksIHdoZXJlIGRpZCBJIHNlZSBpdD8gQWgsIHllcywgaXQgd2FzIGluIGBhcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY2AsIHdoaWNoIGlzIHRoZSBCUEYgSklUIGNvbXBpbGVyIGZvciB0aGUgQVJNNjQgYXJjaGl0ZWN0dXJlLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgaXQncyBhY3R1YWxseSBleHBvcnRlZC4gVGhhdCdzIHRoZSBrZXkgcXVlc3Rpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzQzNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjI5LjIwMjY0OTgyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NzY1MzExOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjozMS4yODAzMTE3NjNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ4MDY2OTcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBKSVQgQ29tcGlsYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgc29tZXRoaW5nIGlzbid0IHF1aXRlIHJpZ2h0LCBzcGVjaWZpY2FsbHkgdGhhdCB3aGF0ZXZlciBJJ20gZXhwZWN0aW5nIGlzbid0IGdldHRpbmcgZXhwb3J0ZWQuIFJpZ2h0LCB0aW1lIHRvIGRpZyBkZWVwZXIuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIGBicGZfaW50X2ppdF9jb21waWxlYC4gSXQncyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzLCBzbyB0aGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LiBCdXQgaG9sZCBvbiwgYGJwZl9pbnRfaml0X2NvbXBpbGVgIGlzIGEgZmFpcmx5IGdlbmVyaWMgbmFtZSDigJMgbWlnaHQgYmUgdG9vIGJyb2FkIGEgc3RhcnRpbmcgcG9pbnQgZm9yIG15IHB1cnBvc2VzLlxuXG5MZXQncyByZWZpbmUgdGhlIHNlYXJjaC4gSW5zdGVhZCBvZiB0aGF0LCB3aGF0IGFib3V0IGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgPyBUaGF0IHNlZW1zIGxpa2UgYSBtb3JlIGZvY3VzZWQgc3ltYm9sLCBtb3JlIGxpa2VseSB0byBwcm92aWRlIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQsIGFuZCBwZXJoYXBzIHNoZWQgbGlnaHQgb24gd2h5IGl0IGlzIG5vdCBleHBvcnRlZC4gSXQncyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIGFyZW5hIGFyZ3VtZW50cywgc28gSSdsbCBzZWUgaWYgdGhhdCBvZmZlcnMgYSBjbGVhcmVyIHBhdGggdG8gdGhlIHJvb3QgY2F1c2UuIE9rYXksIHRoYXQgbWlnaHQgbm90IGJlIGl0LlxuXG5BbHRlcm5hdGl2ZWx5LCBJIGNvdWxkIGV4YW1pbmUgYGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWdgIOKAkyB0aGF0IHNvdW5kcyBsaWtlIGEgZ29vZCBjYW5kaWRhdGUgdG9vLCBpZiB0aGUgcHJldmlvdXMgcGF0aCBkb2Vzbid0IHlpZWxkIGFueXRoaW5nLiBGb2N1c2luZyBvbiBhIHNwZWNpZmljIGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb24gbWlnaHQgZ2l2ZSBtZSB0aGUgZ3JhbnVsYXIgaW5zaWdodCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgd2hhdGV2ZXIgaXQgaXMgSSBhbSBleHBlY3RpbmcgaXNuJ3Qgd29ya2luZyBhcyBJIGhhZCBob3BlZC4gT3Igd2hhdCBhYm91dCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYD8gVGhhdCBtaWdodCBiZSB0aGUgcmlnaHQgcGF0aCB0byB0cmFjayBkb3duLlxuXG5SaWdodCwgbGV0J3Mgc3RhcnQgd2l0aCBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYC4gTGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIHRvIHNlZSBpZiB0aGF0IGZ1bmN0aW9uIGlzIGV2ZW4gYmVpbmcgdXNlZCBhbnl3aGVyZS4gSG9wZWZ1bGx5IHRoYXQgbGVhZHMgbWUgdG8gc29tZSBjbHVlcyBhcyB0byB3aGVyZSB0aGluZ3MgYXJlIGdvaW5nIHdyb25nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY2NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NjozNi43NjA5ODM5MDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjI2Nzg2OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jPTIzNzU9Ym9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzNzktXFxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmM6MjM4MDpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKVxcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIzODEte1xcbi0tXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jPTQxNDA9Ym9vbCBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYy00MTQ0LVxcbmFyY2gveDg2L25ldC9icGZfaml0X2NvbXAuYzo0MTQ1OmJvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXFxuYXJjaC94ODYvbmV0L2JwZl9qaXRfY29tcC5jLTQxNDYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9maWx0ZXIuaD0xMjE2PWJvb2wgYnBmX2ppdF9zdXBwb3J0c19zdGFja19hcmdzKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvZmlsdGVyLmg6MTIxNzpib29sIGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncyh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L2ZpbHRlci5oLTEyMTgtYm9vbCBicGZfaml0X3N1cHBvcnRzX2Zhcl9rZnVuY19jYWxsKHZvaWQpO1xcbi0tXFxua2VybmVsL2JwZi9jb3JlLmM9MzMwNj1ib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX3N0YWNrX2FyZ3Modm9pZClcXG4tLVxcbmtlcm5lbC9icGYvY29yZS5jLTMzMTAtXFxua2VybmVsL2JwZi9jb3JlLmM6MzMxMTpib29sIF9fd2VhayBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3Modm9pZClcXG5rZXJuZWwvYnBmL2NvcmUuYy0zMzEyLXtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTI4Mj1nZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMzU5LVxcdGVsc2UgaWYgKGlzX2tmdW5jX2FyZ19hcmVuYShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZ10pKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMzYwOlxcdFxcdGlmICghYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKCkpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTEzNjEtXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBrZnVuYyAlcygpIHdpdGggYXJlbmEgcG9pbnRlciBhcmd1bWVudHNcXFxcblxcXCIsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg2ODQ9c3RhdGljIGludCBjaGVja19zdHJ1Y3Rfb3BzX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52KVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4NzczLVxcdFxcdGlmIChiYXNlX3R5cGUoaW5mby1cXHUwMDNlcmVnX3R5cGUpID09IFBUUl9UT19BUkVOQSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODc3NDpcXHRcXHRcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJncygpKSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4Nzc1LVxcdFxcdFxcdFxcdHZlcmJvc2UoZW52LCBcXFwiSklUIGRvZXMgbm90IHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6MzguMjgzNjY4MzJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYwMzQwOTM0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBCUEYgQXJlbmEgQXJndW1lbnQgU3VwcG9ydCBpbiBBUk02NCBKSVQgQ29tcGlsZXIqKlxuXG5Pa2F5LCBzbyB0aGUgdmVyaWZpZXIgY2FsbHMgYGJwZl9qaXRfc3VwcG9ydHNfYXJlbmFfYXJnc2AuIFRoYXQgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzLiBMZXQncyBzZWUuLi4gSSBuZWVkIHRvIGlkZW50aWZ5IHJlbGV2YW50IHN5bWJvbHMgYW5kIHRoZW4gZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgS2NvbmZpZyBvcHRpb25zLlxuXG5JJ2xsIGNoZWNrIGBlbWl0X2tmdW5jX2FyZW5hX2FyZ3NgIGFuZCBgZW1pdF9hcmVuYV9hcmdfY29udmAsIGJ1dCBzaW5jZSB0aGV5IGFyZSBzdGF0aWMgdGhleSB3b24ndCBiZSBleHBvc2VkLiBIb3dldmVyLCBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2AgaXMgdmlzaWJsZSBhcyBhIHN5bWJvbC4gVGhhdCdzIGdvb2QuIEFuZCBgYXJjaF9wcmVwYXJlX2JwZl90cmFtcG9saW5lYCBpcyBhbHNvIHZpc2libGUuXG5cblRoZXJlZm9yZSwgbXkgbGlzdCBvZiBrZXkgc3ltYm9scyB0byBjb25zaWRlciBhcmU6XG5cbiogICBgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ2BcbiogICBgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzYFxuKiAgIGBhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVgXG5cbk5vdyBmb3IgdGhlIEtjb25maWcgb3B0aW9ucy4gSSBzZWUgYEJQRl9KSVRgIGFuZCBgQlBGX1NZU0NBTExgIGluIHRoZSBwcm92aWRlZCB0ZXh0LCBhbmQgSSBuZWVkIHRvIGF2b2lkIHByZXBlbmRpbmcgdGhlIFwiQ09ORklHX1wiIHByZWZpeC5cblxuSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGVhY2ggb2YgdGhlIHRocmVlIHN5bWJvbHMgYXJlIG5vbi1zdGF0aWM6IGBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnYCBpcyBkZWZpbmVkIGluIGBhcmNoL2FybTY0L2xpYi9pbnNuLmNgLCBhbmQgYGFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZWAgYW5kIGBicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NgIGFyZSBpbiBgYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNgLlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBwYXRjaCBpbXBsZW1lbnRzIGFyZW5hIGFyZ3VtZW50IHN1cHBvcnQgd2l0aGluIHRoZSBBUk02NCBKSVQgY29tcGlsZXIsIHNwZWNpZmljYWxseSBhZmZlY3RpbmcgYm90aCB0aGUgSklUIGNvbXBpbGVyIGl0c2VsZiBhbmQgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbi4gVGhpcyBjaGFuZ2UgYWxsb3dzIEJQRiBwcm9ncmFtcyB1c2luZyBhcmVuYSBhcmd1bWVudHMgdG8gYmUgbG9hZGVkIGFuZCBleGVjdXRlZC4gSXQgcmVwcmVzZW50cyBhIHNpZ25pZmljYW50IGNoYW5nZSBpbiB0aGUga2VybmVsJ3MgY29yZSBCUEYgaW5mcmFzdHJ1Y3R1cmUsIHNvIGl0IGRlZmluaXRlbHkgbmVlZHMgZnV6emluZy5cblxuSSdsbCBwcm92aWRlIHRoZSByZXN1bHRzIHVzaW5nIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTUzLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0Njo0Ny44ODcwODA1ODNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3NzY1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX0pJVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnXCIsXG4gICAgXCJicGZfaml0X3N1cHBvcnRzX2FyZW5hX2FyZ3NcIixcbiAgICBcImFyY2hfcHJlcGFyZV9icGZfdHJhbXBvbGluZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgQlBGIGFyZW5hIGFyZ3VtZW50cyBpbiB0aGUgQVJNNjQgSklUIGNvbXBpbGVyLiBJdCBtb2RpZmllcyB0aGUgQlBGIEpJVCBjb21waWxlciBhbmQgdHJhbXBvbGluZSBnZW5lcmF0aW9uIHRvIGhhbmRsZSBhcmVuYSBhcmd1bWVudHMsIHdoaWNoIGFyZSByZWFjaGFibGUgd2hlbiBsb2FkaW5nIGFuZCBleGVjdXRpbmcgQlBGIHByb2dyYW1zIHRoYXQgdXNlIGFyZW5hIGFyZ3VtZW50cy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGtlcm5lbC9CUEYgc3Vic3lzdGVtLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9KSVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZ1wiLFxuICAgIFwiYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzXCIsXG4gICAgXCJhcmNoX3ByZXBhcmVfYnBmX3RyYW1wb2xpbmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIEJQRiBhcmVuYSBhcmd1bWVudHMgaW4gdGhlIEFSTTY0IEpJVCBjb21waWxlci4gSXQgbW9kaWZpZXMgdGhlIEJQRiBKSVQgY29tcGlsZXIgYW5kIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiB0byBoYW5kbGUgYXJlbmEgYXJndW1lbnRzLCB3aGljaCBhcmUgcmVhY2hhYmxlIHdoZW4gbG9hZGluZyBhbmQgZXhlY3V0aW5nIEJQRiBwcm9ncmFtcyB0aGF0IHVzZSBhcmVuYSBhcmd1bWVudHMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBrZXJuZWwvQlBGIHN1YnN5c3RlbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6NDcuOTU4NDY1MjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODE1NDcyNzczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjI6NDY6NDcuOTU5MDg0MDgxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0ODE0ODQ5NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlciB0byBzdXBwb3J0IGFyZW5hIGFyZ3VtZW50cy4gSXQgYWRkcyBuZXcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiBmdW5jdGlvbnMgYW5kIHVwZGF0ZXMgdGhlIHRyYW1wb2xpbmUgZ2VuZXJhdGlvbiBsb2dpYyB0byBlbWl0IGluc3RydWN0aW9ucyB0aGF0IHJlYmFzZSBhcmVuYSBwb2ludGVycy4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIGdlbmVyYXRpbmcgbWFjaGluZSBjb2RlIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBrZXJuZWwgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gdGhlIGtlcm5lbCdzIEMgY29kZS4gQW55IGJ1Z3MgaW4gdGhlIEpJVCBjb21waWxlciB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzIChlLmcuLCBvdXQtb2YtYm91bmRzIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMpIG9yIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAzYzA4YzlkNTA1NzkwZjNhNWE3MmI2YTM1YTA4OTcyMWMxNGZkZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMjo0NTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XG5pbmRleCAxMDA0ZWIwYmVjNjE3Li5kOWNjMmFiMWNmMDE4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuQEAgLTMwMSw5ICszMDEsOSBAQCBBbiBleGFtcGxlIGlzIGdpdmVuIGJlbG93OjpcbiAgICAgICAgIH1cbiBcbiBDYWxsaW5nIHN1Y2ggYSBrZnVuYyByZXF1aXJlcyB0aGUgcHJvZ3JhbSB0byB1c2UgYW4gYXJlbmEgbWFwIGFuZCBhIEpJVCB3aXRoXG4tYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCk7IHZlcmlmaWNhdGlvbiBmYWlscyBvdGhlcndpc2UuIFRoZVxuLXByb2dyYW0gY2FuIHBhc3MgYW55IHZhbHVlIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBrZXJuZWwuIEEgdmFsdWUgdGhhdCBkb2VzXG4tbm90IHBvaW50IGludG8gdGhlIGFyZW5hIGlzIGEgcHJvZ3JhbSBidWcuXG4rYXJlbmEgYXJndW1lbnQgc3VwcG9ydCAoY3VycmVudGx5IHg4Ni02NCBhbmQgYXJtNjQpOyB2ZXJpZmljYXRpb24gZmFpbHNcbitvdGhlcndpc2UuIFRoZSBwcm9ncmFtIGNhbiBwYXNzIGFueSB2YWx1ZSB3aXRob3V0IGNvbXByb21pc2luZyB0aGUga2VybmVsLiBBXG4rdmFsdWUgdGhhdCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBhcmVuYSBpcyBhIHByb2dyYW0gYnVnLlxuIFxuIFRoZSBzdWZmaXhlcyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgb24gdGhlIGFyZ3VtZW50cyBvZiBzdHJ1Y3Rfb3BzIHN0dWJcbiBmdW5jdGlvbnMsIHdpdGggdGhlIGNvbnZlcnNpb24gcnVubmluZyBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBUaGVcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2luc24uaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5pbmRleCBjYzA3MDJmYTY0YTc5Li40NTQ4ZTgwMTU4MDhkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW5zbi5oXG5AQCAtMjA1LDYgKzIwNSwxOCBAQCBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUge1xuIFx0QUFSQ0g2NF9JTlNOX0FEU0JfU1VCX1NFVEZMQUdTXG4gfTtcbiBcbisvKiBvcHRpb24gZmllbGQgb2YgYWRkL3N1YiAoZXh0ZW5kZWQgcmVnaXN0ZXIpICovXG4rZW51bSBhYXJjaDY0X2luc25fZXh0ZW5kX3R5cGUge1xuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9VWFRYLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRCLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRILFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRXLFxuK1x0QUFSQ0g2NF9JTlNOX0VYVEVORF9TWFRYLFxuK307XG4rXG4gZW51bSBhYXJjaDY0X2luc25fbW92ZXdpZGVfdHlwZSB7XG4gXHRBQVJDSDY0X0lOU05fTU9WRVdJREVfWkVSTyxcbiBcdEFBUkNINjRfSU5TTl9NT1ZFV0lERV9LRUVQLFxuQEAgLTM3OCw2ICszOTAsMTAgQEAgX19BQVJDSDY0X0lOU05fRlVOQ1MoYWRkLFx0MHg3RjIwMDAwMCwgMHgwQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhhZGRzLFx0MHg3RjIwMDAwMCwgMHgyQjAwMDAwMClcbiBfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWIsXHQweDdGMjAwMDAwLCAweDRCMDAwMDAwKVxuIF9fQUFSQ0g2NF9JTlNOX0ZVTkNTKHN1YnMsXHQweDdGMjAwMDAwLCAweDZCMDAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZF9leHQsXHQweDdGMjAwMDAwLCAweDBCMjAwMDAwKVxuK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGFkZHNfZXh0LFx0MHg3RjIwMDAwMCwgMHgyQjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJfZXh0LFx0MHg3RjIwMDAwMCwgMHg0QjIwMDAwMClcbitfX0FBUkNINjRfSU5TTl9GVU5DUyhzdWJzX2V4dCxcdDB4N0YyMDAwMDAsIDB4NkIyMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobWFkZCxcdDB4N0ZFMDgwMDAsIDB4MUIwMDAwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1MobXN1YixcdDB4N0ZFMDgwMDAsIDB4MUIwMDgwMDApXG4gX19BQVJDSDY0X0lOU05fRlVOQ1ModWRpdixcdDB4N0ZFMEZDMDAsIDB4MUFDMDA4MDApXG5AQCAtNjM3LDYgKzY1MywxMyBAQCB1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX3NoaWZ0ZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbiBcdFx0XHRcdFx0IGludCBzaGlmdCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbiBcdFx0XHRcdFx0IGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKTtcbit1MzIgYWFyY2g2NF9pbnNuX2dlbl9hZGRfc3ViX2V4dGVuZGVkX3JlZyhlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBkc3QsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgc3JjLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHJlZyxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9leHRlbmRfdHlwZSBleHRlbmQsXG4rXHRcdFx0XHRcdCAgaW50IHNoaWZ0LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX3ZhcmlhbnQgdmFyaWFudCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9hZHNiX3R5cGUgdHlwZSk7XG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9saWIvaW5zbi5jIGIvYXJjaC9hcm02NC9saWIvaW5zbi5jXG5pbmRleCAzN2NlNzVmN2YxZjA4Li5lNzBhYzAyMzg1MTUzIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9saWIvaW5zbi5jXG4rKysgYi9hcmNoL2FybTY0L2xpYi9pbnNuLmNcbkBAIC05ODYsNiArOTg2LDY2IEBAIHUzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfc2hpZnRlZF9yZWcoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbiwgc2hpZnQpO1xuIH1cbiBcbisvKlxuKyAqIFVubGlrZSB0aGUgc2hpZnRlZC1yZWdpc3RlciBmb3JtLCByZWdpc3RlciAzMSBpcyBub3QgWFpSIGV2ZXJ5d2hlcmUgaGVyZTpcbisgKiBpdCBlbmNvZGVzIFNQIGZvciBAc3JjLCBhbmQgZm9yIEBkc3QgdG9vIHVubGVzcyBAdHlwZSBzZXRzIHRoZSBmbGFncy4gT25seVxuKyAqIEByZWcga2VlcHMgdGhlIFhaUiBtZWFuaW5nLlxuKyAqL1xuK3UzMiBhYXJjaDY0X2luc25fZ2VuX2FkZF9zdWJfZXh0ZW5kZWRfcmVnKGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIGRzdCxcbitcdFx0XHRcdFx0ICBlbnVtIGFhcmNoNjRfaW5zbl9yZWdpc3RlciBzcmMsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgcmVnLFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2V4dGVuZF90eXBlIGV4dGVuZCxcbitcdFx0XHRcdFx0ICBpbnQgc2hpZnQsXG4rXHRcdFx0XHRcdCAgZW51bSBhYXJjaDY0X2luc25fdmFyaWFudCB2YXJpYW50LFxuK1x0XHRcdFx0XHQgIGVudW0gYWFyY2g2NF9pbnNuX2Fkc2JfdHlwZSB0eXBlKVxuK3tcbitcdHUzMiBpbnNuO1xuK1xuK1x0c3dpdGNoICh0eXBlKSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9BRFNCX0FERDpcbitcdFx0aW5zbiA9IGFhcmNoNjRfaW5zbl9nZXRfYWRkX2V4dF92YWx1ZSgpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX0FEU0JfU1VCOlxuK1x0XHRpbnNuID0gYWFyY2g2NF9pbnNuX2dldF9zdWJfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9BRERfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X2FkZHNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBBQVJDSDY0X0lOU05fQURTQl9TVUJfU0VURkxBR1M6XG4rXHRcdGluc24gPSBhYXJjaDY0X2luc25fZ2V0X3N1YnNfZXh0X3ZhbHVlKCk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfZXJyKFwiJXM6IHVua25vd24gYWRkL3N1YiBlbmNvZGluZyAlZFxcblwiLCBfX2Z1bmNfXywgdHlwZSk7XG4rXHRcdHJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUO1xuK1x0fVxuK1xuK1x0c3dpdGNoICh2YXJpYW50KSB7XG4rXHRjYXNlIEFBUkNINjRfSU5TTl9WQVJJQU5UXzMyQklUOlxuK1x0XHRicmVhaztcbitcdGNhc2UgQUFSQ0g2NF9JTlNOX1ZBUklBTlRfNjRCSVQ6XG4rXHRcdGluc24gfD0gQUFSQ0g2NF9JTlNOX1NGX0JJVDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwcl9lcnIoXCIlczogdW5rbm93biB2YXJpYW50IGVuY29kaW5nICVkXFxuXCIsIF9fZnVuY19fLCB2YXJpYW50KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpZiAoc2hpZnQgXHUwMDNjIDAgfHwgc2hpZnQgXHUwMDNlIDQpIHtcbitcdFx0cHJfZXJyKFwiJXM6IGludmFsaWQgc2hpZnQgZW5jb2RpbmcgJWRcXG5cIiwgX19mdW5jX18sIHNoaWZ0KTtcbitcdFx0cmV0dXJuIEFBUkNINjRfQlJFQUtfRkFVTFQ7XG4rXHR9XG4rXG4rXHRpbnNuID0gYWFyY2g2NF9pbnNuX2VuY29kZV9yZWdpc3RlcihBQVJDSDY0X0lOU05fUkVHVFlQRV9SRCwgaW5zbiwgZHN0KTtcbitcbitcdGluc24gPSBhYXJjaDY0X2luc25fZW5jb2RlX3JlZ2lzdGVyKEFBUkNINjRfSU5TTl9SRUdUWVBFX1JOLCBpbnNuLCBzcmMpO1xuK1xuK1x0aW5zbiA9IGFhcmNoNjRfaW5zbl9lbmNvZGVfcmVnaXN0ZXIoQUFSQ0g2NF9JTlNOX1JFR1RZUEVfUk0sIGluc24sIHJlZyk7XG4rXG4rXHQvKiBvcHRpb24gaW4gYml0cyBbMTU6MTNdIGFuZCBpbW0zIGluIFsxMjoxMF0gdG9nZXRoZXIgZmlsbCBJTU1fNiAqL1xuK1x0cmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fNiwgaW5zbixcbitcdFx0XHRcdFx0ICAgICAoZXh0ZW5kIFx1MDAzY1x1MDAzYyAzKSB8IHNoaWZ0KTtcbit9XG4rXG4gdTMyIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoZW51bSBhYXJjaDY0X2luc25fcmVnaXN0ZXIgZHN0LFxuIFx0XHRcdCAgIGVudW0gYWFyY2g2NF9pbnNuX3JlZ2lzdGVyIHNyYyxcbiBcdFx0XHQgICBlbnVtIGFhcmNoNjRfaW5zbl92YXJpYW50IHZhcmlhbnQsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG5pbmRleCBkMTNkZTQyMjJjZmI3Li5iMmZlNmU2ZGNmNDQ3IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9uZXQvYnBmX2ppdC5oXG4rKysgYi9hcmNoL2FybTY0L25ldC9icGZfaml0LmhcbkBAIC0yNDMsNiArMjQzLDE3IEBAXG4gLyogUm4gLSBSbTsgc2V0IGNvbmRpdGlvbiBmbGFncyAqL1xuICNkZWZpbmUgQTY0X0NNUChzZiwgUm4sIFJtKSBBNjRfU1VCUyhzZiwgQTY0X1pSLCBSbiwgUm0pXG4gXG4rLyogQWRkL3N1YnRyYWN0IChleHRlbmRlZCByZWdpc3RlcikgKi9cbisjZGVmaW5lIEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgdHlwZSkgXFxcbitcdGFhcmNoNjRfaW5zbl9nZW5fYWRkX3N1Yl9leHRlbmRlZF9yZWcoUmQsIFJuLCBSbSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0VYVEVORF8jI2V4dCwgc2hpZnQsIEE2NF9WQVJJQU5UKHNmKSwgXFxcbitcdFx0QUFSQ0g2NF9JTlNOX0FEU0JfIyN0eXBlKVxuKy8qIFJkID0gUm4gKyAoRVhUKFJtKSBcdTAwM2NcdTAwM2Mgc2hpZnQpICovXG4rI2RlZmluZSBBNjRfQUREX0VYVChzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCkgXFxcbitcdEE2NF9BRERTVUJfRVJFRyhzZiwgUmQsIFJuLCBSbSwgZXh0LCBzaGlmdCwgQUREKVxuKy8qIFJkID0gUm4gKyAodTMyKVJtICovXG4rI2RlZmluZSBBNjRfQUREX1VYVFcoUmQsIFJuLCBSbSkgQTY0X0FERF9FWFQoMSwgUmQsIFJuLCBSbSwgVVhUVywgMClcbitcbiAvKiBEYXRhLXByb2Nlc3NpbmcgKDEgc291cmNlKSAqL1xuICNkZWZpbmUgQTY0X0RBVEExKHNmLCBSZCwgUm4sIHR5cGUpIGFhcmNoNjRfaW5zbl9nZW5fZGF0YTEoUmQsIFJuLCBcXFxuIFx0QTY0X1ZBUklBTlQoc2YpLCBBQVJDSDY0X0lOU05fREFUQTFfIyN0eXBlKVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbmluZGV4IGQxNGQyOTdlYmI5NjcuLjFjZDMyN2QyMTNlMzQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuY1xuKysrIGIvYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmNcbkBAIC0xMjQ5LDYgKzEyNDksNDMgQEAgc3RhdGljIHZvaWQgZW1pdF9zdGFja19hcmdfc3RvcmVfaW1tKHMzMiBpbW0sIHMxNiBicGZfb2ZmLCBjb25zdCB1OCB0bXAsIHN0cnVjdFxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIFJlYmFzZSB0aGUgX19hcmVuYSBhcmdzIG9mIGEga2Z1bmMgY2FsbCB0byBhcmVuYSBrZXJuZWwgYWRkcmVzc2VzLFxuKyAqIHhOID0ga2Vybl92bV9zdGFydCArICh1MzIpeE4sIHdpdGggdGhlIGFyZW5hIGJhc2UgcmVnaXN0ZXIgaG9sZGluZ1xuKyAqIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMIGJ5IHNraXBwaW5nIHRoZSBhZGQsIHRlc3RlZFxuKyAqIG9uIHRoZSB0cnVuY2F0ZWQgdmFsdWUgYXMgYXJlbmEgTlVMTCBpcyBvZmZzZXQgMC5cbisgKi9cbitzdGF0aWMgaW50IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4re1xuK1x0Y29uc3QgdTggYXJlbmFfdm1fYmFzZSA9IGJwZjJhNjRbQVJFTkFfVk1fU1RBUlRdO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl9mdW5jX21vZGVsICpmbTtcbitcdGludCBpO1xuK1xuK1x0Zm0gPSBicGZfaml0X2ZpbmRfa2Z1bmNfbW9kZWwoY3R4LVx1MDAzZXByb2csIGluc24pO1xuK1x0aWYgKCFmbSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBtaW5fdChpbnQsIGZtLVx1MDAzZW5yX2FyZ3MsIE1BWF9CUEZfRlVOQ19SRUdfQVJHUyk7IGkrKykge1xuK1x0XHRjb25zdCB1OCByZWcgPSBicGYyYTY0W0JQRl9SRUdfMSArIGldO1xuK1x0XHR1OCBmbGFncyA9IGZtLVx1MDAzZWFyZ19mbGFnc1tpXTtcbitcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IEJURl9GTU9ERUxfQVJFTkFfQVJHKSlcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKFdBUk5fT05fT05DRSghY3R4LVx1MDAzZWFyZW5hX3ZtX3N0YXJ0KSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0aWYgKGZsYWdzIFx1MDAyNiBCVEZfRk1PREVMX05VTExBQkxFX0FSRykge1xuK1x0XHRcdC8qIDMyLWJpdCBtb3YgY2xlYXJzIHRoZSB1cHBlciAzMiBiaXRzICovXG4rXHRcdFx0ZW1pdChBNjRfTU9WKDAsIHJlZywgcmVnKSwgY3R4KTtcbitcdFx0XHQvKiBza2lwIHRoZSBhZGQgc28gdGhhdCBOVUxMIHN0YXlzIE5VTEwgKi9cbitcdFx0XHRlbWl0KEE2NF9DQlooMCwgcmVnLCAyKSwgY3R4KTtcbitcdFx0fVxuK1x0XHRlbWl0KEE2NF9BRERfVVhUVyhyZWcsIGFyZW5hX3ZtX2Jhc2UsIHJlZyksIGN0eCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogSklUcyBhbiBlQlBGIGluc3RydWN0aW9uLlxuICAqIFJldHVybnM6XG4gICogMCAgLSBzdWNjZXNzZnVsbHkgSklUZWQgYW4gOC1ieXRlIGVCUEYgaW5zdHJ1Y3Rpb24uXG5AQCAtMTY3MSw2ICsxNzA4LDExIEBAIHN0YXRpYyBpbnQgYnVpbGRfaW5zbihjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnBmX2luc25cbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmZ1bmNfYWRkciwgXHUwMDI2ZnVuY19hZGRyX2ZpeGVkKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoaW5zbi1cdTAwM2VzcmNfcmVnID09IEJQRl9QU0VVRE9fS0ZVTkNfQ0FMTCkge1xuK1x0XHRcdHJldCA9IGVtaXRfa2Z1bmNfYXJlbmFfYXJncyhjdHgsIGluc24pO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4gXHRcdGVtaXRfY2FsbChmdW5jX2FkZHIsIGN0eCk7XG4gXHRcdC8qXG4gXHRcdCAqIENhbGwgdG8gYXJjaF9icGZfdGltZWRfbWF5X2dvdG8oKSBpcyBlbWl0dGVkIGJ5IHRoZVxuQEAgLTIzMzUsNiArMjM3NywxMSBAQCBib29sIGJwZl9qaXRfc3VwcG9ydHNfc3RhY2tfYXJncyh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK2Jvb2wgYnBmX2ppdF9zdXBwb3J0c19hcmVuYV9hcmdzKHZvaWQpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHZvaWQgKmJwZl9hcmNoX3RleHRfY29weSh2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbilcbiB7XG4gXHRpZiAoIWFhcmNoNjRfaW5zbl9jb3B5KGRzdCwgc3JjLCBsZW4pKVxuQEAgLTI1MDgsMzQgKzI1NTUsNzYgQEAgc3RhdGljIHZvaWQgY2xlYXJfZ2FyYmFnZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBpbnQgcmVnLCBpbnQgZWZmZWN0aXZlX2J5dGVzKVxuIFx0fVxuIH1cbiBcbisvKlxuKyAqIENvbnZlcnQgYW4gYXJlbmEga2VybmVsIGFkZHJlc3MgaW50byB0aGUgYXJlbmEgcG9pbnRlciBmb3JtIG9uIGl0cyB3YXkgaW50b1xuKyAqIHRoZSBCUEYgY3R4LCBkc3QgPSAodTMyKShzcmMgLSBrZXJuX3ZtX3N0YXJ0KSwgd2l0aCBAYmFzZV9sbyBob2xkaW5nIHRoZSBsb3dcbisgKiAzMiBiaXRzIG9mIGtlcm5fdm1fc3RhcnQuIEEgbnVsbGFibGUgYXJnIHByZXNlcnZlcyBOVUxMLCB0ZXN0ZWQgb24gdGhlIGZ1bGxcbisgKiA2NC1iaXQga2VybmVsIHBvaW50ZXIuIFRoZSAzMi1iaXQgc3VidHJhY3Rpb24gYm90aCB0cnVuY2F0ZXMgYW5kIGNsZWFycyB0aGVcbisgKiB1cHBlciBoYWxmLCBzbyB0aGUgc3RvcmVkIHZhbHVlIHNhdGlzZmllcyB0aGUgSklUIGludmFyaWFudCBmb3IgYXJlbmFcbisgKiBwb2ludGVyIHJlZ2lzdGVycy5cbisgKi9cbitzdGF0aWMgdm9pZCBlbWl0X2FyZW5hX2FyZ19jb252KHN0cnVjdCBqaXRfY3R4ICpjdHgsIHU4IGRzdCwgdTggc3JjLCBib29sIG51bGxhYmxlLCB1OCBiYXNlX2xvKVxuK3tcbitcdGlmIChudWxsYWJsZSkge1xuK1x0XHRpZiAoZHN0ICE9IHNyYylcbitcdFx0XHRlbWl0KEE2NF9NT1YoMSwgZHN0LCBzcmMpLCBjdHgpO1xuK1x0XHQvKiBza2lwIHRoZSBzdWJ0cmFjdGlvbiBzbyB0aGF0IE5VTEwgc3RheXMgTlVMTCAqL1xuK1x0XHRlbWl0KEE2NF9DQlooMSwgZHN0LCAyKSwgY3R4KTtcbitcdFx0c3JjID0gZHN0O1xuK1x0fVxuK1x0ZW1pdChBNjRfU1VCKDAsIGRzdCwgc3JjLCBiYXNlX2xvKSwgY3R4KTtcbit9XG4rXG4gc3RhdGljIHZvaWQgc2F2ZV9hcmdzKHN0cnVjdCBqaXRfY3R4ICpjdHgsIGludCBiYXJnc19vZmYsIGludCBvYXJnc19vZmYsXG4tXHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfZnVuY19tb2RlbCAqbSxcbi1cdFx0ICAgICAgY29uc3Qgc3RydWN0IGFyZ19hdXggKmEsXG4tXHRcdCAgICAgIGJvb2wgZm9yX2NhbGxfb3JpZ2luKVxuK1x0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX2Z1bmNfbW9kZWwgKm0sIGNvbnN0IHN0cnVjdCBhcmdfYXV4ICphLFxuK1x0XHQgICAgICBib29sIGZvcl9jYWxsX29yaWdpbiwgYm9vbCBpc19zdHJ1Y3Rfb3BzLCB1NjQgYXJlbmFfYmFzZSlcbiB7XG4tXHRpbnQgaTtcbi1cdGludCByZWc7XG4tXHRpbnQgZG9mZjtcbi1cdGludCBzb2ZmO1xuLVx0aW50IHNsb3RzO1xuIFx0dTggdG1wID0gYnBmMmE2NFtUTVBfUkVHXzFdO1xuK1x0dTggYmFzZV9sbyA9IGJwZjJhNjRbVE1QX1JFR18yXTtcbitcdGludCBpLCByZWcsIGRvZmYsIHNvZmYsIHNsb3RzO1xuK1xuK1x0Lyogb25seSB0aGUgbG93IDMyIGJpdHMgb2YgdGhlIGJhc2UgdGFrZSBwYXJ0IGluIHRoZSBzdWJ0cmFjdGlvbiAqL1xuK1x0aWYgKGFyZW5hX2Jhc2UpXG4rXHRcdGVtaXRfYTY0X21vdl9pKDAsIGJhc2VfbG8sIChzMzIpKHUzMilhcmVuYV9iYXNlLCBjdHgpO1xuIFxuIFx0Lyogc3RvcmUgYXJndW1lbnRzIHRvIHRoZSBzdGFjayBmb3IgdGhlIGJwZiBwcm9ncmFtLCBvciByZXN0b3JlXG4gXHQgKiBhcmd1bWVudHMgZnJvbSBzdGFjayBmb3IgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXG4gXHQgKi9cbi1cdGZvciAocmVnID0gMDsgcmVnIFx1MDAzYyBhLVx1MDAzZXJlZ3NfZm9yX2FyZ3M7IHJlZysrKSB7XG4tXHRcdGVtaXQoZm9yX2NhbGxfb3JpZ2luID9cbi1cdFx0ICAgICBBNjRfTERSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpIDpcbi1cdFx0ICAgICBBNjRfU1RSNjRJKHJlZywgQTY0X1NQLCBiYXJnc19vZmYpLFxuLVx0XHQgICAgIGN0eCk7XG4tXHRcdGJhcmdzX29mZiArPSA4O1xuK1x0Zm9yIChpID0gMCwgcmVnID0gMDsgaSBcdTAwM2MgYS1cdTAwM2VhcmdzX2luX3JlZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuK1x0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuK1x0XHR3aGlsZSAoc2xvdHMtLSBcdTAwM2UgMCkge1xuK1x0XHRcdGlmIChmb3JfY2FsbF9vcmlnaW4pIHtcbitcdFx0XHRcdGVtaXQoQTY0X0xEUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9IGVsc2UgaWYgKGFyZW5hX2FyZykge1xuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgcmVnLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4rXHRcdFx0XHRlbWl0KEE2NF9TVFI2NEkodG1wLCBBNjRfU1AsIGJhcmdzX29mZiksIGN0eCk7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdGVtaXQoQTY0X1NUUjY0SShyZWcsIEE2NF9TUCwgYmFyZ3Nfb2ZmKSwgY3R4KTtcbitcdFx0XHR9XG4rXHRcdFx0cmVnKys7XG4rXHRcdFx0YmFyZ3Nfb2ZmICs9IDg7XG4rXHRcdH1cbiBcdH1cbiBcbi1cdHNvZmYgPSAzMjsgLyogb24gc3RhY2sgYXJndW1lbnRzIHN0YXJ0IGZyb20gRlAgKyAzMiAqL1xuK1x0LypcbitcdCAqIE9uLXN0YWNrIGFyZ3VtZW50cyBzdGFydCBhYm92ZSB0aGUgZnJhbWUocykgcHVzaGVkIGJ5IHRoZSB0cmFtcG9saW5lXG4rXHQgKiBwcm9sb2d1ZS4gRW50ZXJlZCB0aHJvdWdoIHRoZSBmZW50cnkgY2FsbCBmcm9tIGEgdHJhY2VkIGZ1bmN0aW9uLCB0aGVcbitcdCAqIHByb2xvZ3VlIHNhdmVzIGJvdGggdGhlIHBhcmVudCAoRlAveDkpIGFuZCB0aGUgdHJhY2VkIGZ1bmN0aW9uXG4rXHQgKiAoRlAvTFIpIGZyYW1lcywgc28gdGhlIGFyZ3VtZW50cyBzdGFydCBhdCBGUCArIDMyLiBBIHN0cnVjdF9vcHNcbitcdCAqIGNhbGxiYWNrIGlzIGNhbGxlZCBpbmRpcmVjdGx5IGFuZCBvbmx5IHRoZSBGUC9MUiBmcmFtZSBpcyBzYXZlZCwgc29cbitcdCAqIHRoZXkgc3RhcnQgYXQgRlAgKyAxNi5cbitcdCAqL1xuK1x0c29mZiA9IGlzX3N0cnVjdF9vcHMgPyAxNiA6IDMyO1xuIFx0ZG9mZiA9IChmb3JfY2FsbF9vcmlnaW4gPyBvYXJnc19vZmYgOiBiYXJnc19vZmYpO1xuIFxuIFx0Lyogc2F2ZSBvbiBzdGFjayBhcmd1bWVudHMgKi9cbiBcdGZvciAoaSA9IGEtXHUwMDNlYXJnc19pbl9yZWdzOyBpIFx1MDAzYyBtLVx1MDAzZW5yX2FyZ3M7IGkrKykge1xuK1x0XHRib29sIGFyZW5hX2FyZyA9IGFyZW5hX2Jhc2UgXHUwMDI2XHUwMDI2IChtLVx1MDAzZWFyZ19mbGFnc1tpXSBcdTAwMjYgQlRGX0ZNT0RFTF9BUkVOQV9BUkcpO1xuK1x0XHRib29sIG51bGxhYmxlID0gbS1cdTAwM2VhcmdfZmxhZ3NbaV0gXHUwMDI2IEJURl9GTU9ERUxfTlVMTEFCTEVfQVJHO1xuK1xuIFx0XHRzbG90cyA9IChtLVx1MDAzZWFyZ19zaXplW2ldICsgNykgLyA4O1xuIFx0XHQvKiB2ZXJpZmllciBlbnN1cmVzIGFyZ19zaXplIFx1MDAzYz0gMTYsIHNvIHNsb3RzIGVxdWFscyAxIG9yIDIgKi9cbiBcdFx0d2hpbGUgKHNsb3RzLS0gXHUwMDNlIDApIHtcbkBAIC0yNTQ1LDYgKzI2MzQsOCBAQCBzdGF0aWMgdm9pZCBzYXZlX2FyZ3Moc3RydWN0IGppdF9jdHggKmN0eCwgaW50IGJhcmdzX29mZiwgaW50IG9hcmdzX29mZixcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAoc2xvdHMgPT0gMCBcdTAwMjZcdTAwMjYgIWZvcl9jYWxsX29yaWdpbilcbiBcdFx0XHRcdGNsZWFyX2dhcmJhZ2UoY3R4LCB0bXAsIG0tXHUwMDNlYXJnX3NpemVbaV0gJSA4KTtcbitcdFx0XHRpZiAoYXJlbmFfYXJnKVxuK1x0XHRcdFx0ZW1pdF9hcmVuYV9hcmdfY29udihjdHgsIHRtcCwgdG1wLCBudWxsYWJsZSwgYmFzZV9sbyk7XG4gXHRcdFx0ZW1pdChBNjRfU1RSNjRJKHRtcCwgQTY0X1NQLCBkb2ZmKSwgY3R4KTtcbiBcdFx0XHRzb2ZmICs9IDg7XG4gXHRcdFx0ZG9mZiArPSA4O1xuQEAgLTI2MDQsOCArMjY5NSwyMSBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdGJvb2wgaXNfc3RydWN0X29wcyA9IGlzX3N0cnVjdF9vcHNfdHJhbXAoZmVudHJ5KTtcbiBcdGludCBjb29raWVfb2ZmLCBjb29raWVfY250LCBjb29raWVfYmFyZ3Nfb2ZmO1xuIFx0aW50IGZzZXNzaW9uX2NudCA9IGJwZl9mc2Vzc2lvbl9jbnQodG5vZGVzKTtcbitcdHU2NCBhcmVuYV9iYXNlO1xuIFx0dTY0IGZ1bmNfbWV0YTtcbiBcbitcdC8qXG4rXHQgKiBGX0lORElSRUNUIGlzIG9ubHkgY29tcGF0aWJsZSB3aXRoIEZfUkVUX0ZFTlRSWV9SRVQsIGl0IGlzIGV4cGxpY2l0bHlcbitcdCAqIGluY29tcGF0aWJsZSB3aXRoIEZfQ0FMTF9PUklHIHwgRl9TS0lQX0ZSQU1FIHwgRl9JUF9BUkcgYmVjYXVzZVxuK1x0ICogQGZ1bmNfYWRkci4gQXJlbmEgY29udmVyc2lvbiByZWxpZXMgb24gdGhpczogYnBmX3RyYW1wX2FyZW5hX2Jhc2UoKVxuK1x0ICogb25seSByZXR1cm5zIGEgYmFzZSBmb3IgdGhlIGluZGlyZWN0IHRyYW1wb2xpbmUsIHdoaWNoIHRoZXJlZm9yZVxuK1x0ICogbmV2ZXIgY2FsbHMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpdGggY29udmVydGVkIGFyZ3VtZW50cy5cbitcdCAqL1xuK1x0V0FSTl9PTl9PTkNFKChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfSU5ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIChmbGFncyBcdTAwMjYgfihCUEZfVFJBTVBfRl9JTkRJUkVDVCB8IEJQRl9UUkFNUF9GX1JFVF9GRU5UUllfUkVUKSkpO1xuK1xuK1x0YXJlbmFfYmFzZSA9IGJwZl90cmFtcF9hcmVuYV9iYXNlKG0sIHRub2RlcywgZmxhZ3MpO1xuK1xuIFx0LyogdHJhbXBvbGluZSBzdGFjayBsYXlvdXQ6XG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBwYXJlbnQgaXAgICAgICAgICBdXG4gXHQgKiAgICAgICAgICAgICAgICAgICAgWyBGUCAgICAgICAgICAgICAgICBdXG5AQCAtMjcyMSw3ICsyODI1LDcgQEAgc3RhdGljIGludCBwcmVwYXJlX3RyYW1wb2xpbmUoc3RydWN0IGppdF9jdHggKmN0eCwgc3RydWN0IGJwZl90cmFtcF9pbWFnZSAqaW0sXG4gXHRzdG9yZV9mdW5jX21ldGEoY3R4LCBmdW5jX21ldGEsIGZ1bmNfbWV0YV9vZmYpO1xuIFxuIFx0Lyogc2F2ZSBhcmdzIGZvciBicGYgKi9cbi1cdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCBmYWxzZSk7XG4rXHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgZmFsc2UsIGlzX3N0cnVjdF9vcHMsIGFyZW5hX2Jhc2UpO1xuIFxuIFx0Lyogc2F2ZSBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzICovXG4gXHRlbWl0KEE2NF9TVFI2NEkoQTY0X1IoMTkpLCBBNjRfU1AsIHJlZ3Nfb2ZmKSwgY3R4KTtcbkBAIC0yNzY5LDggKzI4NzMsOCBAQCBzdGF0aWMgaW50IHByZXBhcmVfdHJhbXBvbGluZShzdHJ1Y3Qgaml0X2N0eCAqY3R4LCBzdHJ1Y3QgYnBmX3RyYW1wX2ltYWdlICppbSxcbiBcdH1cbiBcbiBcdGlmIChmbGFncyBcdTAwMjYgQlBGX1RSQU1QX0ZfQ0FMTF9PUklHKSB7XG4tXHRcdC8qIHNhdmUgYXJncyBmb3Igb3JpZ2luYWwgZnVuYyAqL1xuLVx0XHRzYXZlX2FyZ3MoY3R4LCBiYXJnc19vZmYsIG9hcmdzX29mZiwgbSwgYSwgdHJ1ZSk7XG4rXHRcdC8qIHRoZSBvcmlnaW5hbCBmdW5jIHRha2VzIGtlcm5lbCBhZGRyZXNzZXMsIG5ldmVyIGNvbnZlcnRlZCBvbmVzICovXG4rXHRcdHNhdmVfYXJncyhjdHgsIGJhcmdzX29mZiwgb2FyZ3Nfb2ZmLCBtLCBhLCB0cnVlLCBpc19zdHJ1Y3Rfb3BzLCAwKTtcbiBcdFx0LyogY2FsbCBvcmlnaW5hbCBmdW5jICovXG4gXHRcdGVtaXQoQTY0X0xEUjY0SShBNjRfUigxMCksIEE2NF9TUCwgcmV0YWRkcl9vZmYpLCBjdHgpO1xuIFx0XHRlbWl0KEE2NF9BRFIoQTY0X0xSLCBBQVJDSDY0X0lOU05fU0laRSAqIDIpLCBjdHgpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3Rlc3Rfc3RydWN0X29wc19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbmluZGV4IDk0MGVjMmNkYTBkNTIuLjdmOWY1NGJhM2ZiZTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy90ZXN0X3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvdGVzdF9zdHJ1Y3Rfb3BzX2FyZW5hLmNcbkBAIC02LDcgKzYsNyBAQFxuICNpbmNsdWRlIFwic3RydWN0X29wc19hcmVuYV9hdHRhY2guc2tlbC5oXCJcbiAjaW5jbHVkZSBcInN0cnVjdF9vcHNfYXJlbmFfZmFpbC5za2VsLmhcIlxuIFxuLSNpZiBkZWZpbmVkKF9feDg2XzY0X18pXG4rI2lmIGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FhcmNoNjRfXylcbiAvKlxuICAqIEF0dGFjaCBjYWxsYmFja3Mgd2l0aCBfX2FyZW5hIGFuZCBfX2FyZW5hX19udWxsYWJsZSBhcmd1bWVudHMgYW5kIGRyaXZlXG4gICogdGhlbSB0aHJvdWdoIHRoZSBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSooKSBrZnVuY3MuXG5AQCAtMTExLDExICsxMTEsMTEgQEAgc3RhdGljIHZvaWQgYXJlbmFfYXJnX2F0dGFjaCh2b2lkKVxuIHZvaWQgc2VyaWFsX3Rlc3Rfc3RydWN0X29wc19hcmVuYSh2b2lkKVxuIHtcbiBcdC8qXG4tXHQgKiBBcmVuYSBzdHJ1Y3Rfb3BzIGFyZ3VtZW50cyBuZWVkIEpJVCBzdXBwb3J0LCBjdXJyZW50bHkgeDg2LTY0IG9ubHkuXG4tXHQgKiBFbHNld2hlcmUgdmVyaWZpY2F0aW9uIGZhaWxzIHdpdGggXCJKSVQgZG9lcyBub3Qgc3VwcG9ydCBhcmVuYVxuLVx0ICogYXJndW1lbnRzXCIsIHNvIHRoZSBwcm9ncmFtcyBjYW5ub3QgZXZlbiBsb2FkLlxuK1x0ICogQXJlbmEgc3RydWN0X29wcyBhcmd1bWVudHMgbmVlZCBKSVQgc3VwcG9ydCwgY3VycmVudGx5IHg4Ni02NCBhbmRcbitcdCAqIGFybTY0IG9ubHkuIEVsc2V3aGVyZSB2ZXJpZmljYXRpb24gZmFpbHMgd2l0aCBcIkpJVCBkb2VzIG5vdCBzdXBwb3J0XG4rXHQgKiBhcmVuYSBhcmd1bWVudHNcIiwgc28gdGhlIHByb2dyYW1zIGNhbm5vdCBldmVuIGxvYWQuXG4gXHQgKi9cbi0jaWYgZGVmaW5lZChfX3g4Nl82NF9fKVxuKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pXG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ1wiKSlcbiBcdFx0YXJlbmFfYXJnKCk7XG4gXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImFyZW5hX2FyZ19mYWlsXCIpKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuYy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbmluZGV4IGNkY2VhODg5ZGE1ODYuLmJmMGQzMDRlMGU1OWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYXJlbmFfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jLmNcbkBAIC0yNyw2ICsyNyw3IEBAIHZvbGF0aWxlIHU2NCBzdGFzaDtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fc3VjY2VzcyBfX3JldHZhbCgwKVxuIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuIHtcbkBAIC03MCw2ICs3MSw3IEBAIGludCBhcmVuYV9hcmdfZm9ybXModm9pZCAqY3R4KVxuICAqL1xuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIHtcbkBAIC0xMTEsNiArMTEzLDcgQEAgaW50IGFyZW5hX2FyZ19yZWJhc2Uodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19zdWNjZXNzIF9fcmV0dmFsKDApXG4gaW50IGFyZW5hX2FyZ3M1KHZvaWQgKmN0eClcbiB7XG5AQCAtMTQyLDYgKzE0NSw3IEBAIGludCBhcmVuYV9hcmdzNSh2b2lkICpjdHgpXG4gXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX21peGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTY5LDYgKzE3Myw3IEBAIGludCBhcmVuYV9hcmdfbWl4ZWQodm9pZCAqY3R4KVxuIC8qIGtlcm5lbC1zaWRlIGZhdWx0cyBvbiB1bnBvcHVsYXRlZCBwYWdlcyByZWNvdmVyIHZpYSB0aGUgc2NyYXRjaCBwYWdlICovXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiBpbnQgYXJlbmFfYXJnX3VucG9wdWxhdGVkKHZvaWQgKmN0eClcbiB7XG5AQCAtMTg5LDYgKzE5NCw3IEBAIGludCBhcmVuYV9hcmdfdW5wb3B1bGF0ZWQodm9pZCAqY3R4KVxuIFxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiYXJlbmEgcG9pbnRlciByZXF1aXJlcyBhIHByb2dyYW0gd2l0aCBhbiBhc3NvY2lhdGVkIGFyZW5hXCIpXG4gaW50IGFyZW5hX2FyZ19ub19hcmVuYSh2b2lkICpjdHgpXG4ge1xuQEAgLTE5OCw2ICsyMDQsNyBAQCBpbnQgYXJlbmFfYXJnX25vX2FyZW5hKHZvaWQgKmN0eClcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG4gX19hcmNoX3g4Nl82NFxuK19fYXJjaF9hcm02NFxuIF9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBhIHBvaW50ZXIgdG8gYXJlbmEgb3Igc2NhbGFyXCIpXG4gaW50IGFyZW5hX2FyZ19iYWRfcmVnKHZvaWQgKmN0eClcbiB7XG5AQCAtMjEzLDYgKzIyMCw3IEBAIGludCBhcmVuYV9hcmdfYmFkX3JlZyh2b2lkICpjdHgpXG4gXHRkZWZpbmVkKF9fQlBGX0ZFQVRVUkVfU1RBQ0tfQVJHVU1FTlQpXG4gU0VDKFwic3lzY2FsbFwiKVxuIF9fYXJjaF94ODZfNjRcbitfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCJhcmVuYSBwb2ludGVyIGNhbm5vdCBiZSBhIHN0YWNrIGFyZ3VtZW50XCIpXG4gaW50IGFyZW5hX2FyZ19zdGFjayh2b2lkICpjdHgpXG4ge1xuQEAgLTIyMyw2ICsyMzEsNyBAQCBpbnQgYXJlbmFfYXJnX3N0YWNrKHZvaWQgKmN0eClcbiAjZWxzZVxuIFNFQyhcInN5c2NhbGxcIilcbiBfX2FyY2hfeDg2XzY0XG4rX19hcmNoX2FybTY0XG4gX19kZXNjcmlwdGlvbihcImFyZW5hX2FyZ19zdGFjazogbm90IHN1cHBvcnRlZCwgZHVtbXkgdGVzdFwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfc3RhY2sodm9pZCAqY3R4KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuaW5kZXggYzliOTE4NjYyNjE2Mi4uYjVhMDFjYmMzM2E3MyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hcmVuYV9rZnVuY19qaXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FyZW5hX2tmdW5jX2ppdC5jXG5AQCAtMzIsNiArMzIsMTAgQEAgX19qaXRlZChcIlx0bW92bFx0JWVkaSwgJWVkaVwiKVxuIF9faml0ZWQoXCJcdGFkZHFcdCVyMTIsICVyZGlcIilcbiBfX2ppdGVkKFwiLi4uXCIpXG4gX19qaXRlZChcIlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0e3soYmx8bW92KVx0Lip9fVwiKVxuIF9fc3VjY2Vzc1xuIGludCBhcmVuYV9hcmdfaml0X3JlYmFzZSh2b2lkICpjdHgpXG4ge1xuQEAgLTQ4LDYgKzUyLDEyIEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlZWRpLCAlZWRpXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXJkaVwiKVxuIF9faml0ZWQoXCJMMDpcdGNhbGxxXHR7ey4qfX1cIilcbitfX2FyY2hfYXJtNjRcbitfX2ppdGVkKFwiLi4uXCIpXG4rX19qaXRlZChcIlx0bW92XHR3MCwgdzBcIilcbitfX2ppdGVkKFwiXHRjYnpcdHcwLCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDAsIHgyOCwgdzAsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9udWxsYWJsZSh2b2lkICpjdHgpXG4ge1xuQEAgLTcyLDYgKzgyLDE2IEBAIF9faml0ZWQoXCJcdHRlc3RsXHQlcjhkLCAlcjhkXCIpXG4gX19qaXRlZChcIlx0amVcdEwwXCIpXG4gX19qaXRlZChcIlx0YWRkcVx0JXIxMiwgJXI4XCIpXG4gX19qaXRlZChcIkwwOlx0Y2FsbHFcdHt7Lip9fVwiKVxuK19fYXJjaF9hcm02NFxuK19faml0ZWQoXCIuLi5cIilcbitfX2ppdGVkKFwiXHRhZGRcdHgwLCB4MjgsIHcwLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0YWRkXHR4MSwgeDI4LCB3MSwgdXh0d1wiKVxuK19faml0ZWQoXCJcdGFkZFx0eDIsIHgyOCwgdzIsIHV4dHdcIilcbitfX2ppdGVkKFwiXHRhZGRcdHgzLCB4MjgsIHczLCB1eHR3XCIpXG4rX19qaXRlZChcIlx0bW92XHR3NCwgdzRcIilcbitfX2ppdGVkKFwiXHRjYnpcdHc0LCBMMFwiKVxuK19faml0ZWQoXCJcdGFkZFx0eDQsIHgyOCwgdzQsIHV4dHdcIilcbitfX2ppdGVkKFwiTDA6XHR7ey4qfX1cIilcbiBfX3N1Y2Nlc3NcbiBpbnQgYXJlbmFfYXJnX2ppdF9hcmdzNSh2b2lkICpjdHgpXG4ge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9zdHJ1Y3Rfb3BzX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mvc3RydWN0X29wc19hcmVuYS5jXG5pbmRleCBiYTA0YzczZDhkOTY3Li44YWE4NjM5ZGY5MWYwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3N0cnVjdF9vcHNfYXJlbmEuY1xuQEAgLTU5LDExICs1OSwyOCBAQCBpbnQgdGVzdF9hcmVuYV9zdGFja19jYih1bnNpZ25lZCBsb25nIGxvbmcgKmN0eClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitTRUMoXCJzdHJ1Y3Rfb3BzL3Rlc3RfYXJlbmFfbXVsdGlzbG90XCIpXG4raW50IHRlc3RfYXJlbmFfbXVsdGlzbG90X2NiKHVuc2lnbmVkIGxvbmcgbG9uZyAqY3R4KVxuK3tcbitcdHU2NCBfX2FyZW5hICpwdHIgPSAodTY0IF9fYXJlbmEgKiljdHhbMl07XG4rXG4rXHRhcmVuYV90b3VjaCsrO1xuK1x0LypcbitcdCAqIFRoZSAxNi1ieXRlIHN0cnVjdCBvY2N1cGllcyBjdHhbMF0gYW5kIGN0eFsxXSwgc28gQHB0ciBpcyBhcmd1bWVudFxuK1x0ICogb25lIGJ1dCBzbG90IHR3by4gR2V0dGluZyB0aGF0IHdyb25nIGhhbmRzIHRoZSBjYWxsYmFjayBhIHNjYWxhci5cbitcdCAqL1xuK1x0aWYgKGN0eFswXSAhPSAxMSB8fCBjdHhbMV0gIT0gMjIpXG4rXHRcdHJldHVybiAweGJhZDtcbitcdCpwdHIgKz0gMTtcbitcdHJldHVybiAwO1xuK31cbitcbiBTRUMoXCIuc3RydWN0X29wcy5saW5rXCIpXG4gc3RydWN0IGJwZl90ZXN0bW9kX29wczMgdGVzdG1vZF9hcmVuYSA9IHtcbiBcdC50ZXN0X2FyZW5hID0gKHZvaWQgKil0ZXN0X2FyZW5hX2NiLFxuIFx0LnRlc3RfYXJlbmFfbnVsbGFibGUgPSAodm9pZCAqKXRlc3RfYXJlbmFfbnVsbGFibGVfY2IsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9ICh2b2lkICopdGVzdF9hcmVuYV9zdGFja19jYixcbitcdC50ZXN0X2FyZW5hX211bHRpc2xvdCA9ICh2b2lkICopdGVzdF9hcmVuYV9tdWx0aXNsb3RfY2IsXG4gfTtcbiBcbiBTRUMoXCJzeXNjYWxsXCIpXG5AQCAtMTA5LDYgKzEyNiwxMyBAQCBpbnQgdHJpZ2dlcih2b2lkICpjdHgpXG4gXHRpZiAoKnZhbCAhPSA0NClcbiBcdFx0cmV0dXJuIDk7XG4gXG4rXHQvKiBhIG11bHRpLXNsb3QgYXJnIHByZWNlZGVzIHRoZSBhcmVuYSBwb2ludGVyIGhlcmUgKi9cbitcdHJldCA9IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdCgodTY0ICopdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAxMDtcbitcdGlmICgqdmFsICE9IDQ1KVxuK1x0XHRyZXR1cm4gMTE7XG4rXG4gXHRicGZfYXJlbmFfZnJlZV9wYWdlcyhcdTAwMjZhcmVuYSwgKHZvaWQgX19hcmVuYSAqKXZhbCwgMSk7XG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggYTYxMzNmNzUyMWYzNC4uOTM2NmEzYzU3OGYxMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC00MDIsMTIgKzQwMiwxOSBAQCBzdGF0aWMgaW50IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2sodTY0IGEsIHU2NCBiLCB1NjQgYywgdTY0IGQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdChzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwLFxuK1x0XHRcdFx0XHRcdCAgdTY0ICpwdHJfX2FyZW5hKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IGJwZl90ZXN0bW9kX29wczMgX19icGZfdGVzdG1vZF9vcHMzID0ge1xuIFx0LnRlc3RfMSA9IGJwZl90ZXN0bW9kX3Rlc3RfMyxcbiBcdC50ZXN0XzIgPSBicGZfdGVzdG1vZF90ZXN0XzQsXG4gXHQudGVzdF9hcmVuYSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmEsXG4gXHQudGVzdF9hcmVuYV9udWxsYWJsZSA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfbnVsbGFibGUsXG4gXHQudGVzdF9hcmVuYV9zdGFjayA9IGJwZl90ZXN0bW9kX29wczNfX3Rlc3RfYXJlbmFfc3RhY2ssXG4rXHQudGVzdF9hcmVuYV9tdWx0aXNsb3QgPSBicGZfdGVzdG1vZF9vcHMzX190ZXN0X2FyZW5hX211bHRpc2xvdCxcbiB9O1xuIFxuIHN0YXRpYyB2b2lkIGJwZl90ZXN0bW9kX3Rlc3Rfc3RydWN0X29wczModm9pZClcbkBAIC00NDEsNiArNDQ4LDEzIEBAIF9fYnBmX2tmdW5jIGludCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9zdGFjayh1NjQgKnB0cl9fYXJlbmEpXG4gXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX3N0YWNrKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIHB0cl9fYXJlbmEpO1xuIH1cbiBcbitfX2JwZl9rZnVuYyBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbXVsdGlzbG90KHU2NCAqcHRyX19hcmVuYSlcbit7XG4rXHRzdHJ1Y3QgYnBmX3Rlc3Rtb2RfYXJlbmFfcGFpciBwID0geyAuYSA9IDExLCAuYiA9IDIyIH07XG4rXG4rXHRyZXR1cm4gc3Rfb3BzMy1cdTAwM2V0ZXN0X2FyZW5hX211bHRpc2xvdChwLCBwdHJfX2FyZW5hKTtcbit9XG4rXG4gc3RydWN0IGJwZl90ZXN0bW9kX2J0Zl90eXBlX3RhZ18xIHtcbiBcdGludCBhO1xuIH07XG5AQCAtODUyLDYgKzg2Niw3IEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF8yKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfdGVzdG1vZF9vcHMzX2NhbGxfdGVzdF9hcmVuYV9tdWx0aXNsb3QpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19nZXRfZGVmYXVsdF90cnVzdGVkX3B0cl90ZXN0KTtcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX3B1dF9kZWZhdWx0X3RydXN0ZWRfcHRyX3Rlc3QpO1xuIEJURl9LRlVOQ1NfRU5EKGJwZl90ZXN0bW9kX2NvbW1vbl9rZnVuY19pZHMpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmhcbmluZGV4IDMzZjJhZjViNzA4NTcuLjIxMGI5MTkyOTBjYzIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5oXG5AQCAtMTAzLDYgKzEwMywxMiBAQCBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMiB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIH07XG4gXG4rLyogMTYgYnl0ZXMsIHNvIGl0IHRha2VzIHR3byBhcmd1bWVudCBzbG90cyB3aGVuIHBhc3NlZCBieSB2YWx1ZSAqL1xuK3N0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHtcbitcdHU2NCBhO1xuK1x0dTY0IGI7XG4rfTtcbitcbiBzdHJ1Y3QgYnBmX3Rlc3Rtb2Rfb3BzMyB7XG4gXHRpbnQgKCp0ZXN0XzEpKHZvaWQpO1xuIFx0aW50ICgqdGVzdF8yKSh2b2lkKTtcbkBAIC0xMTIsNiArMTE4LDggQEAgc3RydWN0IGJwZl90ZXN0bW9kX29wczMge1xuIFx0LyogZW5vdWdoIGxlYWRpbmcgYXJncyB0byBmb3JjZSBAcHRyIG9udG8gdGhlIHN0YWNrIG9uIHg4NiBhbmQgYXJtNjQgKi9cbiBcdGludCAoKnRlc3RfYXJlbmFfc3RhY2spKHU2NCBhLCB1NjQgYiwgdTY0IGMsIHU2NCBkLCB1NjQgZSwgdTY0IGYsXG4gXHRcdFx0XHR1NjQgZywgdTY0IGgsIHU2NCAqcHRyKTtcbitcdC8qIGEgbXVsdGktc2xvdCBsZWFkaW5nIGFyZywgc28gQHB0ciBpcyBub3QgYXQgdGhlIHNsb3QgaXRzIGFyZyBpbmRleCBzdWdnZXN0cyAqL1xuK1x0aW50ICgqdGVzdF9hcmVuYV9tdWx0aXNsb3QpKHN0cnVjdCBicGZfdGVzdG1vZF9hcmVuYV9wYWlyIHAsIHU2NCAqcHRyKTtcbiB9O1xuIFxuIHN0cnVjdCBzdF9vcHNfYXJncyB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IGM0MzgzYWNiNTNjMTEuLjdkODEwNzBlZWZlN2YgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMTIzLDYgKzEyMyw3IEBAIHZvaWQgYnBmX3Rlc3Rtb2RfdGVzdF9tb2Rfa2Z1bmMoaW50IGkpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmEoX191NjQgKnB0cl9fYXJlbmEpIF9fa3N5bTtcbiBpbnQgYnBmX3Rlc3Rtb2Rfb3BzM19jYWxsX3Rlc3RfYXJlbmFfbnVsbGFibGUoX191NjQgKnB0cl9fYXJlbmFfX251bGxhYmxlKSBfX2tzeW07XG4gaW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX3N0YWNrKF9fdTY0ICpwdHJfX2FyZW5hKSBfX2tzeW07XG4raW50IGJwZl90ZXN0bW9kX29wczNfY2FsbF90ZXN0X2FyZW5hX211bHRpc2xvdChfX3U2NCAqcHRyX19hcmVuYSkgX19rc3ltO1xuIFxuIF9fdTY0IGJwZl9rZnVuY19jYWxsX3Rlc3QxKHN0cnVjdCBzb2NrICpzaywgX191MzIgYSwgX191NjQgYixcbiBcdFx0XHRcdF9fdTMyIGMsIF9fdTY0IGQpIF9fa3N5bTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIyOjQ2OjQ3Ljk1OTA4NTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0ODE0ODIxMTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQgb2YgQVJNNjQgQlBGIEpJVCBBcmVuYSBBcmd1bWVudCBTdXBwb3J0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhZGRpbmcgYXJlbmEgYXJndW1lbnQgc3VwcG9ydCB0byB0aGUgQVJNNjQgQlBGIEpJVCBjb21waWxlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHBhdGNoJ3MgY29yZSBpcyBtb2RpZnlpbmcgdGhlIEpJVCB0byBnZW5lcmF0ZSBpbnN0cnVjdGlvbnMgZm9yIGhhbmRsaW5nIGFyZW5hIHBvaW50ZXJzLiBJdCdzIGFsc28gdXBkYXRpbmcgaW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbiAoYGFyY2gvYXJtNjQvbGliL2luc24uY2ApIGFuZCBhZGRpbmcgdGVzdHMuXG5cbkluaXRpYWxseSwgSSBsb29rZWQgZm9yIHRoZSB0eXBpY2FsIEtNU0FOIHJlZCBmbGFnczoga2VybmVsIGRhdGEgc2VudCB0byB1c2Vyc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGNvbmRpdGlvbmFsIGxvZ2ljLCBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBvciB2dWxuZXJhYmlsaXRpZXMgaW4gYm91bmRzIGNoZWNraW5nLiAgTm9uZSBvZiB0aG9zZSBhcHBseSBkaXJlY3RseS4gIFRoaXMgaXMgYWxsIGFib3V0IG1hY2hpbmUgY29kZSBnZW5lcmF0aW9uIHdpdGhpbiB0aGUgSklULlxuXG5UaGUgSklUIGl0c2VsZiBnZW5lcmF0ZXMgaW5zdHJ1Y3Rpb25zLCBzbyBhIGJ1ZyAqY291bGQqIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLCBidXQgdGhhdCdzIGEgZ2VuZXJhbCBKSVQgYnVnLCBub3QgbmVjZXNzYXJpbHkgc29tZXRoaW5nIEtNU0FOIGlzIHRhaWxvcmVkIGZvciB1bmxlc3MgdGhlICpKSVQqIGl0c2VsZiB1c2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBjb21waWxhdGlvbi4gIEkgZGlkIGEgcXVpY2sgc2NhbiBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MsIHZhcmlhYmxlcyBsaWtlIGB0bXBgLCBgYmFzZV9sb2AsIGFuZCBgc2xvdHNgLCBhbmQgdGhleSBhbGwgYXBwZWFyIGluaXRpYWxpemVkLlxuXG5TcGVjaWZpY2FsbHksIEkgZG92ZSBpbnRvIHRoZSBgc2F2ZV9hcmdzYCBmdW5jdGlvbiBhbmQgdGhlIGBlbWl0X2FyZW5hX2FyZ19jb252YCBmdW5jdGlvbiB0byBlbnN1cmUgdGhlcmUgd2VyZW4ndCBzbmVha3kgdW5pbml0aWFsaXplZCByZWdpc3RlciB1c2VzLCBidXQgaXQncyBqdXN0IGdlbmVyYXRpbmcgY29kZSB0aGF0IHNhdmVzIGFyZ3VtZW50cyB0byB0aGUgc3RhY2sgb3IgcGVyZm9ybXMgYW4gYWRkcmVzcyBjb252ZXJzaW9uLCBhbmQgbm90aGluZyBwb2ludHMgdG8gZGlyZWN0IHJpc2tzLiAgVGhlIGBjbGVhcl9nYXJiYWdlYCBjYWxsIGZvciBzdGFjayBhcmd1bWVudHMgaXMgZXhpc3RpbmcgY29kZSwgc28gdGhhdCdzIG5vdCBhIG5ldyBjb25jZXJuLlxuXG5TbywgdGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgSklUJ3MgY29kZSBnZW5lcmF0aW9uLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIGludHJvZHVjZSBhbnkgb2YgdGhlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QuIEkgdGhpbmsgdGhlIEpJVCBjb21waWxhdGlvbiBwcm9jZXNzIGl0c2VsZiBpcyBzb3VuZCBhbmQgZG9lc24ndCByZWx5IG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBJJ2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzIzLCJPdXRwdXRUb2tlbnMiOjE4MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwODgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMjo0NzowMi43NzM5MDkwMTRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBUk02NCBCUEYgSklUIGNvbXBpbGVyIHRvIHN1cHBvcnQgYXJlbmEgYXJndW1lbnRzLiBJdCBhZGRzIG5ldyBpbnN0cnVjdGlvbiBnZW5lcmF0aW9uIGZ1bmN0aW9ucyBhbmQgdXBkYXRlcyB0aGUgdHJhbXBvbGluZSBnZW5lcmF0aW9uIGxvZ2ljIHRvIGVtaXQgaW5zdHJ1Y3Rpb25zIHRoYXQgcmViYXNlIGFyZW5hIHBvaW50ZXJzLiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gZ2VuZXJhdGluZyBtYWNoaW5lIGNvZGUgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGtlcm5lbCBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyBvciBsb2dpYyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGUga2VybmVsJ3MgQyBjb2RlLiBBbnkgYnVncyBpbiB0aGUgSklUIGNvbXBpbGVyIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgKGUuZy4sIG91dC1vZi1ib3VuZHMgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcykgb3IgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFSTTY0IEJQRiBKSVQgY29tcGlsZXIgdG8gc3VwcG9ydCBhcmVuYSBhcmd1bWVudHMuIEl0IGFkZHMgbmV3IGluc3RydWN0aW9uIGdlbmVyYXRpb24gZnVuY3Rpb25zIGFuZCB1cGRhdGVzIHRoZSB0cmFtcG9saW5lIGdlbmVyYXRpb24gbG9naWMgdG8gZW1pdCBpbnN0cnVjdGlvbnMgdGhhdCByZWJhc2UgYXJlbmEgcG9pbnRlcnMuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byBnZW5lcmF0aW5nIG1hY2hpbmUgY29kZSBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcga2VybmVsIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBrZXJuZWwncyBDIGNvZGUuIEFueSBidWdzIGluIHRoZSBKSVQgY29tcGlsZXIgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzKSBvciBhcmJpdHJhcnkgY29kZSBleGVjdXRpb24sIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow29j4z[1] Phase: Succeeded StartedAt: 2026-08-10 22:47:13 +0000 UTC FinishedAt: 2026-08-10 22:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 22:47:13 +0000 UTC FinishedAt: 2026-08-10 22:47:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2] Phase: Succeeded StartedAt: 2026-08-10 22:47:13 +0000 UTC FinishedAt: 2026-08-10 23:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 22:47:13 +0000 UTC FinishedAt: 2026-08-10 23:32:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 22:47:13 +0000 UTC FinishedAt: 2026-08-10 22:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 22:47:13 +0000 UTC FinishedAt: 2026-08-10 22:47:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow29j4z/series-workflow29j4z-convert-artifact-512805469/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 22:47:23 +0000 UTC FinishedAt: 2026-08-10 23:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 22:47:23 +0000 UTC FinishedAt: 2026-08-10 23:05:23 +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:*252238ef-62bf-4b63-846d-d4e4dcecf904,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-workflow29j4z/series-workflow29j4z-convert-artifact-512805469/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": "a9eb4009-04b1-4713-9a3e-b7927ed37915", "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-workflow29j4z/series-workflow29j4z-build-action-722705811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 22:47:23 +0000 UTC FinishedAt: 2026-08-10 23:05:13 +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:*252238ef-62bf-4b63-846d-d4e4dcecf904,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-workflow29j4z/series-workflow29j4z-convert-artifact-512805469/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": "a9eb4009-04b1-4713-9a3e-b7927ed37915", "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-workflow29j4z/series-workflow29j4z-build-action-722705811/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 23:05:23 +0000 UTC FinishedAt: 2026-08-10 23:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 23:05:23 +0000 UTC FinishedAt: 2026-08-10 23:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 23:05:23 +0000 UTC FinishedAt: 2026-08-10 23:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 23:05:23 +0000 UTC FinishedAt: 2026-08-10 23:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow29j4z/series-workflow29j4z-convert-artifact-1261015864/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 23:05:33 +0000 UTC FinishedAt: 2026-08-10 23:07:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 23:05:33 +0000 UTC FinishedAt: 2026-08-10 23:07:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9eb4009-04b1-4713-9a3e-b7927ed37915,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-workflow29j4z/series-workflow29j4z-build-action-722705811/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-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 23:07:49 +0000 UTC FinishedAt: 2026-08-10 23:07:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 23:07:49 +0000 UTC FinishedAt: 2026-08-10 23:07:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 23:07:49 +0000 UTC FinishedAt: 2026-08-10 23:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 23:07:49 +0000 UTC FinishedAt: 2026-08-10 23:24:19 +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:*252238ef-62bf-4b63-846d-d4e4dcecf904,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-workflow29j4z/series-workflow29j4z-convert-artifact-1261015864/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": "c053707e-14f0-4473-b2bc-9736f3e29e13", "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-workflow29j4z/series-workflow29j4z-build-action-4181568548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 23:07:49 +0000 UTC FinishedAt: 2026-08-10 23:24:09 +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:*252238ef-62bf-4b63-846d-d4e4dcecf904,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-workflow29j4z/series-workflow29j4z-convert-artifact-1261015864/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": "c053707e-14f0-4473-b2bc-9736f3e29e13", "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-workflow29j4z/series-workflow29j4z-build-action-4181568548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 23:24:19 +0000 UTC FinishedAt: 2026-08-10 23:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 23:24:19 +0000 UTC FinishedAt: 2026-08-10 23:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 23:24:19 +0000 UTC FinishedAt: 2026-08-10 23:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 23:24:19 +0000 UTC FinishedAt: 2026-08-10 23:26:05 +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:*c053707e-14f0-4473-b2bc-9736f3e29e13,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-workflow29j4z/series-workflow29j4z-build-action-4181568548/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-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 23:26:15 +0000 UTC FinishedAt: 2026-08-10 23:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 23:26:15 +0000 UTC FinishedAt: 2026-08-10 23:32:49 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},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:*a9eb4009-04b1-4713-9a3e-b7927ed37915,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c053707e-14f0-4473-b2bc-9736f3e29e13,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-workflow29j4z/series-workflow29j4z-build-action-722705811/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-workflow29j4z/series-workflow29j4z-build-action-4181568548/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 23:26:15 +0000 UTC FinishedAt: 2026-08-10 23:26:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 23:26:15 +0000 UTC FinishedAt: 2026-08-10 23:26:20 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},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-workflow29j4z/series-workflow29j4z-convert-artifact-4263983505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 23:26:15 +0000 UTC FinishedAt: 2026-08-10 23:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 23:26:15 +0000 UTC FinishedAt: 2026-08-10 23:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 23:26:15 +0000 UTC FinishedAt: 2026-08-10 23:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 23:26:25 +0000 UTC FinishedAt: 2026-08-10 23:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow29j4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["aarch64_insn_gen_add_sub_extended_reg","bpf_jit_supports_arena_args","arch_prepare_bpf_trampoline"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_JIT","BPF_SYSCALL"],"series_id":"3c2c8e53-c9bb-4dc4-9977-cf73c2f806d9","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 23:26:25 +0000 UTC FinishedAt: 2026-08-10 23:32:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a9eb4009-04b1-4713-9a3e-b7927ed37915,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c053707e-14f0-4473-b2bc-9736f3e29e13,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-workflow29j4z/series-workflow29j4z-build-action-722705811/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-workflow29j4z/series-workflow29j4z-build-action-4181568548/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-workflow29j4z/series-workflow29j4z-convert-artifact-4263983505/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,}