Name: series-workflowfl745 Phase: Succeeded StartedAt: 2026-09-03 00:27:27 +0000 UTC FinishedAt: 2026-09-03 04:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[0] Phase: Succeeded StartedAt: 2026-09-03 00:27:27 +0000 UTC FinishedAt: 2026-09-03 00:30:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 00:27:27 +0000 UTC FinishedAt: 2026-09-03 00:30:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "MEM_ALLOC_PROFILING" ], "series_id": "c0c5c9c5-01b2-486c-9d19-1d457ba28bce" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "init_module", "finit_module", "codetag_alloc_module_section", "codetag_free_module_sections" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luaXRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2Zpbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXG5cbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIHNlY3Rpb24gbGF5b3V0cywgcmVsb2NhdGlvbnMsIG9yIHNlcGFyYXRlIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHNlY3Rpb24gcmVhZHMvd3JpdGVzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhcmUgYWRkcmVzc2FibGUgZXJyb3JzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlkNzExNGY4OWYyYWY3OGZlYWQzOTc2MGUzY2VmYmNhMjExYTI0OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjI5OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG5pbmRleCA5NmNjOTg1NjhlZWE1Li4wYzZmMzJkZGNiZjJkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuQEAgLTMyNSw2ICYjNDM7MzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xuIFx0TU9EX0lOSVRfUk9EQVRBLFxuIFxuIFx0TU9EX01FTV9OVU1fVFlQRVMsXG4mIzQzO1xuJiM0MztcdE1PRF9TVEFOREFMT05FID0gLTIsXG4gXHRNT0RfSU5WQUxJRCA9IC0xLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oIGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG5pbmRleCAwNjExNjFjYzc5ZDkwLi40YzczODA3NGEyN2I4IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmhcbkBAIC0yOSw2ICYjNDM7MjksMTQgQEBcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXHQoKDFVTCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcbiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0tcdCgoMVVMIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYXJrZXIgZm9yIHNlY3Rpb25zIHdpdGggYSBzZXBhcmF0ZSBhbGxvY2F0aW9uLCB3aGljaCBhcmUgbm90IHBsYWNlZFxuJiM0MzsgKiBpbnRvIG1vZC1cdTAwM2VtZW1bXS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgU0hfRU5UU0laRV9TVEFOREFMT05FXHRcdFx0XHRcdFxcXG4mIzQzO1x0KCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSBcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXHRcXFxuJiM0MztcdCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUKVxuJiM0MztcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gYnkgbW9kdWxlX2ZsYWdzKCkgKi9cbiAjZGVmaW5lIE1PRFVMRV9GTEFHU19CVUZfU0laRSAoVEFJTlRfRkxBR1NfQ09VTlQgJiM0MzsgNClcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTYxNywxNCAmIzQzOzE2MTcsOCBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbG9jYXRpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiBcdFx0aWYgKGluZm9zZWMgXHUwMDNlPSBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy5cbi1cdFx0ICogQW4gZXhjZXB0aW9uIGlzIHRoZSBwZXJjcHUgc2VjdGlvbiwgd2hpY2ggaGFzIHNlcGFyYXRlIGFsbG9jYXRpb25zXG4tXHRcdCAqIGZvciBpbmRpdmlkdWFsIENQVXMuIFdlIHJlbG9jYXRlIHRoZSBwZXJjcHUgc2VjdGlvbiBpbiB0aGUgaW5pdGlhbFxuLVx0XHQgKiBFTEYgdGVtcGxhdGUgYW5kIHN1YnNlcXVlbnRseSBjb3B5IGl0IHRvIHRoZSBwZXItQ1BVIGRlc3RpbmF0aW9ucy5cbi1cdFx0ICovXG4tXHRcdGlmICghKGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvc2VjXS5zaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICghaW5mb3NlYyB8fCBpbmZvc2VjICE9IGluZm8tXHUwMDNlaW5kZXgucGNwdSkpXG4mIzQzO1x0XHQvKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy4gKi9cbiYjNDM7XHRcdGlmICghKGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvc2VjXS5zaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9mbGFncyBcdTAwMjYgU0hGX1JFTEFfTElWRVBBVENIKVxuQEAgLTE3MTUsMjcgJiM0MzsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gXG4gXHRcdFx0aWYgKChzLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF1cbiBcdFx0XHQgICAgfHwgKHMtXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IG1hc2tzW21dWzFdKVxuLVx0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxuJiM0MztcdFx0XHQgICAgfHwgcy1cdTAwM2VzaF9lbnRzaXplICE9IH4wVUwgLyogb2Zmc2V0IG9yIHN0YW5kYWxvbmUgKi9cbiBcdFx0XHQgICAgfHwgaXNfaW5pdCAhPSBtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzbmFtZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHR5cGUgPT0gTU9EX0lOVkFMSUQpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEbyBub3QgYWxsb2NhdGUgY29kZXRhZyBtZW1vcnkgYXMgd2UgbG9hZCBpdCBpbnRvXG4tXHRcdFx0ICogcHJlYWxsb2NhdGVkIGNvbnRpZ3VvdXMgbWVtb3J5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHMtXHUwMDNlc2hfc2l6ZSkpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBzLVx1MDAzZXNoX2VudHNpemUgd29uJiMzOTt0IGJlIHVzZWQgYnV0IHBvcHVsYXRlIHRoZVxuLVx0XHRcdFx0ICogdHlwZSBmaWVsZCB0byBhdm9pZCBjb25mdXNpb24uXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHMtXHUwMDNlc2hfZW50c2l6ZSA9ICgodW5zaWduZWQgbG9uZykodHlwZSkgXHUwMDI2IFNIX0VOVFNJWkVfVFlQRV9NQVNLKVxuLVx0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4tXG4gXHRcdFx0cy1cdTAwM2VzaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCB0eXBlLCBzLCBpKTtcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtcXHQlc1xcblwmIzM0Oywgc25hbWUpO1xuIFx0XHR9XG5AQCAtMTc0NSwxNiAmIzQzOzE3MjUsMTAgQEAgc3RhdGljIHZvaWQgX19sYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBib29sIGlcbiAvKlxuICAqIExheSBvdXQgdGhlIFNIRl9BTExPQyBzZWN0aW9ucyBpbiBhIHdheSBub3QgZGlzc2ltaWxhciB0byBob3cgbGRcbiAgKiBtaWdodCAtLSBjb2RlLCByZWFkLW9ubHkgZGF0YSwgcmVhZC13cml0ZSBkYXRhLCBzbWFsbCBkYXRhLiAgVGFsbHlcbi0gKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHM6IGhpZ2ggYml0IG1lYW5zIGl0XG4tICogYmVsb25ncyBpbiBpbml0LlxuJiM0MzsgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXG4gICovXG4gc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkmIzQzOyYjNDM7KVxuLVx0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XG4tXG4gXHRwcl9kZWJ1ZyhcJiMzNDtDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XFxuXCYjMzQ7LCBtb2QtXHUwMDNlbmFtZSk7XG4gXHRfX2xheW91dF9zZWN0aW9ucyhtb2QsIGluZm8sIGZhbHNlKTtcbiBcbkBAIC0yODAwLDcgJiM0MzsyNzc0LDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4ge1xuIFx0aW50IGksIHJldDtcbiBcdGVudW0gbW9kX21lbV90eXBlIHQgPSBNT0RfTUVNX05VTV9UWVBFUztcbi1cdGJvb2wgY29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xuIFx0XHRpZiAoIW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSkge1xuQEAgLTI4MjAsMzQgJiM0MzsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dm9pZCAqZGVzdDtcbiBcdFx0RWxmX1NoZHIgKnNoZHIgPSBcdTAwMjZpbmZvLVx1MDAzZXNlY2hkcnNbaV07XG4tXHRcdGNvbnN0IGNoYXIgKnNuYW1lO1xuIFxuLVx0XHRpZiAoIShzaGRyLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBTSEZfQUxMT0MpKVxuJiM0MztcdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKVxuJiM0MztcdFx0ICAgIHx8IHNoZHItXHUwMDNlc2hfZW50c2l6ZSA9PSBTSF9FTlRTSVpFX1NUQU5EQUxPTkUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHNuYW1lID0gaW5mby1cdTAwM2VzZWNzdHJpbmdzICYjNDM7IHNoZHItXHUwMDNlc2hfbmFtZTtcbi1cdFx0Lypcbi1cdFx0ICogTG9hZCBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkgYXMgdGhleSBtaWdodCBzdGlsbCBiZSB1c2VkXG4tXHRcdCAqIGFmdGVyIG1vZHVsZSB1bmxvYWQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVx1MDAzZXNoX3NpemUpKSB7XG4tXHRcdFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuLVx0XHRcdFx0XHRhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuLVx0XHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKElTX0VSUihkZXN0KSkge1xuLVx0XHRcdFx0cmV0ID0gUFRSX0VSUihkZXN0KTtcbi1cdFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0XHR9XG4tXHRcdFx0Y29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRlbnVtIG1vZF9tZW1fdHlwZSB0eXBlID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLVx1MDAzZXNoX2VudHNpemUgXHUwMDI2IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0s7XG4tXG4tXHRcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bdHlwZV0uYmFzZSAmIzQzOyBvZmZzZXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGRlc3QgPSBtb2QtXHUwMDNlbWVtW3NoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwM2VcdTAwM2UgU0hfRU5UU0laRV9UWVBFX1NISUZUXS5iYXNlICYjNDM7XG4mIzQzO1x0XHQgICAgICAgKHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7XG4gXG4gXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xuIFx0XHRcdC8qXG5AQCAtMjg3OSw4ICYjNDM7MjgzMSw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0bW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpO1xuIFx0d2hpbGUgKHQtLSlcbiBcdFx0bW9kdWxlX21lbW9yeV9mcmVlKG1vZCwgdCk7XG4tXHRpZiAoY29kZXRhZ19zZWN0aW9uX2ZvdW5kKVxuLVx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKG1vZCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0yOTUxLDkgJiM0MzsyOTAxLDUxIEBAIHN0YXRpYyBib29sIGJsYWNrbGlzdGVkKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKVxuIH1cbiBjb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogQWxsb2NhdGUgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5LiBUaGV5IGFyZSBsb2FkZWQgaW50byBwcmVhbGxvY2F0ZWRcbiYjNDM7ICogY29udGlndW91cyBtZW1vcnkgYmVjYXVzZSB0aGV5IG1heSBzdGlsbCBiZSB1c2VkIGFmdGVyIHRoZSBtb2R1bGUgaXNcbiYjNDM7ICogdW5sb2FkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoZSBzZXBhcmF0ZSBhbGxvY2F0aW9uIG92ZXJmbG93cywgYWxsb2NhdGUgdGhlIHNlY3Rpb24gbm9ybWFsbHlcbiYjNDM7ICogc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBzdGlsbCBiZSBsb2FkZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0RWxmX1NoZHIgKnNoZHIgPSBcdTAwMjZpbmZvLVx1MDAzZXNlY2hkcnNbaV07XG4mIzQzO1x0XHRjb25zdCBjaGFyICpzbmFtZSA9IGluZm8tXHUwMDNlc2Vjc3RyaW5ncyAmIzQzOyBzaGRyLVx1MDAzZXNoX25hbWU7XG4mIzQzO1x0XHR2b2lkICpkZXN0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVx1MDAzZW1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuJiM0MztcdFx0XHRcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVx1MDAzZW1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbiYjNDM7XHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuJiM0MztcdFx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZGVzdCA9PSBFUlJfUFRSKC1FQUdBSU4pKVxuJiM0MztcdFx0XHQvKiBBbGxvY2F0ZSB0aGUgc2VjdGlvbiBhcyBhIHJlZ3VsYXIgc2VjdGlvbi4gKi9cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRlc3QpKSB7XG4mIzQzO1x0XHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cdTAwM2Vtb2QpO1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXN0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hkci1cdTAwM2VzaF90eXBlICE9IFNIVF9OT0JJVFMpXG4mIzQzO1x0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbiYjNDM7XHRcdHNoZHItXHUwMDNlc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7XG4mIzQzO1x0XHRzaGRyLVx1MDAzZXNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IG1vZHVsZSAqbW9kO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi9cbkBAIC0yOTY3LDggJiM0MzsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXG4mIzQzO1x0LyogUmVwdXJwb3NlIHNoX2VudHNpemUgdG8gdHJhY2sgd2hlcmUgZWFjaCBzZWN0aW9uIGlzIGFsbG9jYXRlZC4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtcbiYjNDM7XG4gXHQvKiBXZSB3aWxsIGRvIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciBwZXItY3B1IHNlY3Rpb25zIGxhdGVyLiAqL1xuLVx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWluZGV4LnBjcHUpXG4mIzQzO1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5wY3B1XS5zaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xuIFxuIFx0LypcbiBcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXG5AQCAtMjk3NywxOCAmIzQzOzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbi1cdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueVxuLVx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXG4tXHQgKi9cbiYjNDM7XHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xuJiM0MztcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1xuJiM0MztcdC8qIERldGVybWluZSB0b3RhbCBzaXplcyBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gKi9cbiBcdGxheW91dF9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4gXHRsYXlvdXRfc3ltdGFiKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xuIFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuLVx0aWYgKGVycilcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cbiBcdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGYzMGVmOGRkMjRjNzAuLjhmMTMzNjliMzJlY2QgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC04NDMsNiAmIzQzOzg0Myw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4mIzQzO3tcbiYjNDM7XHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4mIzQzO1x0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbiYjNDM7XHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4mIzQzO1xuJiM0MztcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO1x0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbiYjNDM7XHRcdGlmICh2YWwgPT0gbW9kKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXVzZWQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpO1xuJiM0MztcdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTtcbiYjNDM7XHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcdTAwM2M9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuJiM0MztcdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHVzZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO3JlbGVhc2VfYXJlYTpcbiYjNDM7XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4mIzQzO1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbiYjNDM7XHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuJiM0MztcdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4mIzQzO291dDpcbiYjNDM7XHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkxMiwxMCAmIzQzOzk1OCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdFx0aW50IGdyb3dfcmVzO1xuIFxuIFx0XHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4tXHRcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xuJiM0MztcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuLVx0XHRcdFx0bW9kLVx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcbiYjNDM7XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4mIzQzO1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHR9XG4gXG4gXHRcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcbkBAIC05MjMsNiAmIzQzOzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICBtb2QtXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTMwLDUyICYjNDM7OTc5LDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBvZmZzZXQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxuLXtcbi1cdE1BX1NUQVRFKG1hcywgXHUwMDI2bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpO1xuLVx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xuLVx0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbi1cdHN0cnVjdCBtb2R1bGUgKnZhbDtcbi1cbi1cdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4tXHRtYXNfZm9yX2VhY2hfcmV2KFx1MDAyNm1hcywgdmFsLCAwKVxuLVx0XHRpZiAodmFsID09IG1vZClcbi1cdFx0XHRicmVhaztcbi1cbi1cdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0aWYgKCF1c2VkKVxuLVx0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbi1cbi1cdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTtcbi1cdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbi1cdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuLVxuLVx0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnJiM0MzsmIzQzOykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cJiMzNDssXG4tXHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0dXNlZCA9IGZhbHNlO1xuLVx0fVxuLXJlbGVhc2VfYXJlYTpcbi1cdG1hc19zdG9yZShcdTAwMjZtYXMsIHVzZWQgPyBcdTAwMjZ1bmxvYWRlZF9tb2QgOiBOVUxMKTtcbi1cdHZhbCA9IG1hc19wcmV2X3JhbmdlKFx1MDAyNm1hcywgMCk7XG4tXHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuLVx0XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCBOVUxMKTtcbi1vdXQ6XG4tXHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnICpzdG9wKVxuIHtcbiBcdC8qIEFsbG9jYXRlIG1vZHVsZSBhbGxvY190YWcgcGVyY3B1IGNvdW50ZXJzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9EVUxFUyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7ZmluaXRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24mIzM0OywKICAgICYjMzQ7Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGNvcmUga2VybmVsIG1vZHVsZSBsb2FkaW5nIGFuZCBsYXlvdXQgbG9naWMgZm9yIHN0YW5kYWxvbmUgc2VjdGlvbnMgKHBlci1DUFUgc2VjdGlvbnMgYW5kIGNvZGV0YWdzL2FsbG9jIHRhZ3MpIGFzIHdlbGwgYXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZyByZXNlcnZhdGlvbiBmYWxsYmFjayBoYW5kbGluZyB3aGVuIHRhZ3MgYXJlIG5vdCBhZGRyZXNzYWJsZS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgbG9hZGluZyBzeXNjYWxscyAoaW5pdF9tb2R1bGUgYW5kIGZpbml0X21vZHVsZSkgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDA6Mjk6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCA5NmNjOTg1NjhlZWE1Li4wYzZmMzJkZGNiZjJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTMyNSw2ICYjNDM7MzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUgewogCU1PRF9JTklUX1JPREFUQSwKIAogCU1PRF9NRU1fTlVNX1RZUEVTLAomIzQzOwomIzQzOwlNT0RfU1RBTkRBTE9ORSA9IC0yLAogCU1PRF9JTlZBTElEID0gLTEsCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmggYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgKaW5kZXggMDYxMTYxY2M3OWQ5MC4uNGM3MzgwNzRhMjdiOCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaApAQCAtMjksNiAmIzQzOzI5LDE0IEBACiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLCSgoMVVMICZsdDsmbHQ7IFNIX0VOVFNJWkVfVFlQRV9CSVRTKSAtIDEpCiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0sJKCgxVUwgJmx0OyZsdDsgKEJJVFNfUEVSX0xPTkcgLSBTSF9FTlRTSVpFX1RZUEVfQklUUykpIC0gMSkKIAomIzQzOy8qCiYjNDM7ICogTWFya2VyIGZvciBzZWN0aW9ucyB3aXRoIGEgc2VwYXJhdGUgYWxsb2NhdGlvbiwgd2hpY2ggYXJlIG5vdCBwbGFjZWQKJiM0MzsgKiBpbnRvIG1vZC0mZ3Q7bWVtW10uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBTSF9FTlRTSVpFX1NUQU5EQUxPTkUJCQkJCVwKJiM0MzsJKCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSAmYW1wOyBTSF9FTlRTSVpFX1RZUEVfTUFTSykJXAomIzQzOwkgJmx0OyZsdDsgU0hfRU5UU0laRV9UWVBFX1NISUZUKQomIzQzOwogLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovCiAjZGVmaW5lIE1PRFVMRV9GTEFHU19CVUZfU0laRSAoVEFJTlRfRkxBR1NfQ09VTlQgJiM0MzsgNCkKIApkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uYwppbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbW9kdWxlL21haW4uYwpAQCAtMTYxNywxNCAmIzQzOzE2MTcsOCBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbG9jYXRpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIAkJaWYgKGluZm9zZWMgJmd0Oz0gaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogRG9uJiMzOTt0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuCi0JCSAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9ucwotCQkgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWwKLQkJICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuCi0JCSAqLwotCQlpZiAoIShpbmZvLSZndDtzZWNoZHJzW2luZm9zZWNdLnNoX2ZsYWdzICZhbXA7IFNIRl9BTExPQykgJmFtcDsmYW1wOwotCQkgICAgKCFpbmZvc2VjIHx8IGluZm9zZWMgIT0gaW5mby0mZ3Q7aW5kZXgucGNwdSkpCiYjNDM7CQkvKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy4gKi8KJiM0MzsJCWlmICghKGluZm8tJmd0O3NlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpbmZvLSZndDtzZWNoZHJzW2ldLnNoX2ZsYWdzICZhbXA7IFNIRl9SRUxBX0xJVkVQQVRDSCkKQEAgLTE3MTUsMjcgJiM0MzsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpCiAKIAkJCWlmICgocy0mZ3Q7c2hfZmxhZ3MgJmFtcDsgbWFza3NbbV1bMF0pICE9IG1hc2tzW21dWzBdCiAJCQkgICAgfHwgKHMtJmd0O3NoX2ZsYWdzICZhbXA7IG1hc2tzW21dWzFdKQotCQkJICAgIHx8IHMtJmd0O3NoX2VudHNpemUgIT0gfjBVTAomIzQzOwkJCSAgICB8fCBzLSZndDtzaF9lbnRzaXplICE9IH4wVUwgLyogb2Zmc2V0IG9yIHN0YW5kYWxvbmUgKi8KIAkJCSAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKFdBUk5fT05fT05DRSh0eXBlID09IE1PRF9JTlZBTElEKSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG8KLQkJCSAqIHByZWFsbG9jYXRlZCBjb250aWd1b3VzIG1lbW9yeS4KLQkJCSAqLwotCQkJaWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy0mZ3Q7c2hfc2l6ZSkpIHsKLQkJCQkvKgotCQkJCSAqIHMtJmd0O3NoX2VudHNpemUgd29uJiMzOTt0IGJlIHVzZWQgYnV0IHBvcHVsYXRlIHRoZQotCQkJCSAqIHR5cGUgZmllbGQgdG8gYXZvaWQgY29uZnVzaW9uLgotCQkJCSAqLwotCQkJCXMtJmd0O3NoX2VudHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpKHR5cGUpICZhbXA7IFNIX0VOVFNJWkVfVFlQRV9NQVNLKQotCQkJCQkJJmx0OyZsdDsgU0hfRU5UU0laRV9UWVBFX1NISUZUOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCiAJCQlzLSZndDtzaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCB0eXBlLCBzLCBpKTsKIAkJCXByX2RlYnVnKCYjMzQ7XHQlc1xuJiMzNDssIHNuYW1lKTsKIAkJfQpAQCAtMTc0NSwxNiAmIzQzOzE3MjUsMTAgQEAgc3RhdGljIHZvaWQgX19sYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBib29sIGkKIC8qCiAgKiBMYXkgb3V0IHRoZSBTSEZfQUxMT0Mgc2VjdGlvbnMgaW4gYSB3YXkgbm90IGRpc3NpbWlsYXIgdG8gaG93IGxkCiAgKiBtaWdodCAtLSBjb2RlLCByZWFkLW9ubHkgZGF0YSwgcmVhZC13cml0ZSBkYXRhLCBzbWFsbCBkYXRhLiAgVGFsbHkKLSAqIHNpemVzLCBhbmQgcGxhY2UgdGhlIG9mZnNldHMgaW50byBzaF9lbnRzaXplIGZpZWxkczogaGlnaCBiaXQgbWVhbnMgaXQKLSAqIGJlbG9uZ3MgaW4gaW5pdC4KJiM0MzsgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuCiAgKi8KIHN0YXRpYyB2b2lkIGxheW91dF9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykKLQkJaW5mby0mZ3Q7c2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDsKLQogCXByX2RlYnVnKCYjMzQ7Q29yZSBzZWN0aW9uIGFsbG9jYXRpb24gb3JkZXIgZm9yICVzOlxuJiMzNDssIG1vZC0mZ3Q7bmFtZSk7CiAJX19sYXlvdXRfc2VjdGlvbnMobW9kLCBpbmZvLCBmYWxzZSk7CiAKQEAgLTI4MDAsNyAmIzQzOzI3NzQsNiBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKIAlpbnQgaSwgcmV0OwogCWVudW0gbW9kX21lbV90eXBlIHQgPSBNT0RfTUVNX05VTV9UWVBFUzsKLQlib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlOwogCiAJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHsKIAkJaWYgKCFtb2QtJmd0O21lbVt0eXBlXS5zaXplKSB7CkBAIC0yODIwLDM0ICYjNDM7Mjc5MywxMyBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIAlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewogCQl2b2lkICpkZXN0OwogCQlFbGZfU2hkciAqc2hkciA9ICZhbXA7aW5mby0mZ3Q7c2VjaGRyc1tpXTsKLQkJY29uc3QgY2hhciAqc25hbWU7CiAKLQkJaWYgKCEoc2hkci0mZ3Q7c2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSkKJiM0MzsJCWlmICghKHNoZHItJmd0O3NoX2ZsYWdzICZhbXA7IFNIRl9BTExPQykKJiM0MzsJCSAgICB8fCBzaGRyLSZndDtzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSkKIAkJCWNvbnRpbnVlOwogCi0JCXNuYW1lID0gaW5mby0mZ3Q7c2Vjc3RyaW5ncyAmIzQzOyBzaGRyLSZndDtzaF9uYW1lOwotCQkvKgotCQkgKiBMb2FkIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSBhcyB0aGV5IG1pZ2h0IHN0aWxsIGJlIHVzZWQKLQkJICogYWZ0ZXIgbW9kdWxlIHVubG9hZC4KLQkJICovCi0JCWlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItJmd0O3NoX3NpemUpKSB7Ci0JCQlkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLSZndDtzaF9zaXplLAotCQkJCQlhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBpKSwgc2hkci0mZ3Q7c2hfYWRkcmFsaWduKTsKLQkJCWlmIChXQVJOX09OKCFkZXN0KSkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXRfZXJyOwotCQkJfQotCQkJaWYgKElTX0VSUihkZXN0KSkgewotCQkJCXJldCA9IFBUUl9FUlIoZGVzdCk7Ci0JCQkJZ290byBvdXRfZXJyOwotCQkJfQotCQkJY29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWVudW0gbW9kX21lbV90eXBlIHR5cGUgPSBzaGRyLSZndDtzaF9lbnRzaXplICZndDsmZ3Q7IFNIX0VOVFNJWkVfVFlQRV9TSElGVDsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc2hkci0mZ3Q7c2hfZW50c2l6ZSAmYW1wOyBTSF9FTlRTSVpFX09GRlNFVF9NQVNLOwotCi0JCQlkZXN0ID0gbW9kLSZndDttZW1bdHlwZV0uYmFzZSAmIzQzOyBvZmZzZXQ7Ci0JCX0KJiM0MzsJCWRlc3QgPSBtb2QtJmd0O21lbVtzaGRyLSZndDtzaF9lbnRzaXplICZndDsmZ3Q7IFNIX0VOVFNJWkVfVFlQRV9TSElGVF0uYmFzZSAmIzQzOwomIzQzOwkJICAgICAgIChzaGRyLSZndDtzaF9lbnRzaXplICZhbXA7IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0spOwogCiAJCWlmIChzaGRyLSZndDtzaF90eXBlICE9IFNIVF9OT0JJVFMpIHsKIAkJCS8qCkBAIC0yODc5LDggJiM0MzsyODMxLDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiAJbW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpOwogCXdoaWxlICh0LS0pCiAJCW1vZHVsZV9tZW1vcnlfZnJlZShtb2QsIHQpOwotCWlmIChjb2RldGFnX3NlY3Rpb25fZm91bmQpCi0JCWNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yOTUxLDkgJiM0MzsyOTAxLDUxIEBAIHN0YXRpYyBib29sIGJsYWNrbGlzdGVkKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKQogfQogY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7CiAKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseS4gVGhleSBhcmUgbG9hZGVkIGludG8gcHJlYWxsb2NhdGVkCiYjNDM7ICogY29udGlndW91cyBtZW1vcnkgYmVjYXVzZSB0aGV5IG1heSBzdGlsbCBiZSB1c2VkIGFmdGVyIHRoZSBtb2R1bGUgaXMKJiM0MzsgKiB1bmxvYWRlZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBzZXBhcmF0ZSBhbGxvY2F0aW9uIG92ZXJmbG93cywgYWxsb2NhdGUgdGhlIHNlY3Rpb24gbm9ybWFsbHkKJiM0MzsgKiBzbyB0aGF0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJRWxmX1NoZHIgKnNoZHIgPSAmYW1wO2luZm8tJmd0O3NlY2hkcnNbaV07CiYjNDM7CQljb25zdCBjaGFyICpzbmFtZSA9IGluZm8tJmd0O3NlY3N0cmluZ3MgJiM0Mzsgc2hkci0mZ3Q7c2hfbmFtZTsKJiM0MzsJCXZvaWQgKmRlc3Q7CiYjNDM7CiYjNDM7CQlpZiAoIWNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oaW5mby0mZ3Q7bW9kLCBzbmFtZSwgc2hkci0mZ3Q7c2hfc2l6ZSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihpbmZvLSZndDttb2QsIHNuYW1lLCBzaGRyLSZndDtzaF9zaXplLAomIzQzOwkJCQlhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQoaW5mby0mZ3Q7bW9kLCBpKSwgc2hkci0mZ3Q7c2hfYWRkcmFsaWduKTsKJiM0MzsJCWlmIChXQVJOX09OKCFkZXN0KSkgewomIzQzOwkJCWNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby0mZ3Q7bW9kKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChkZXN0ID09IEVSUl9QVFIoLUVBR0FJTikpCiYjNDM7CQkJLyogQWxsb2NhdGUgdGhlIHNlY3Rpb24gYXMgYSByZWd1bGFyIHNlY3Rpb24uICovCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoSVNfRVJSKGRlc3QpKSB7CiYjNDM7CQkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLSZndDttb2QpOwomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRlc3QpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNoZHItJmd0O3NoX3R5cGUgIT0gU0hUX05PQklUUykKJiM0MzsJCQltZW1jcHkoZGVzdCwgKHZvaWQgKilzaGRyLSZndDtzaF9hZGRyLCBzaGRyLSZndDtzaF9zaXplKTsKJiM0MzsJCXNoZHItJmd0O3NoX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXN0OwomIzQzOwkJc2hkci0mZ3Q7c2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCiAJLyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqLwpAQCAtMjk2Nyw4ICYjNDM7Mjk1OSwxMyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKJiM0MzsJLyogUmVwdXJwb3NlIHNoX2VudHNpemUgdG8gdHJhY2sgd2hlcmUgZWFjaCBzZWN0aW9uIGlzIGFsbG9jYXRlZC4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGluZm8tJmd0O2hkci0mZ3Q7ZV9zaG51bTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpbmZvLSZndDtzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMOwomIzQzOwogCS8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovCi0JaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5wY3B1XS5zaF9mbGFncyAmYW1wOz0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKJiM0MzsJaWYgKGluZm8tJmd0O2luZGV4LnBjcHUpCiYjNDM7CQlpbmZvLSZndDtzZWNoZHJzW2luZm8tJmd0O2luZGV4LnBjcHVdLnNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7CiAKIAkvKgogCSAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuCkBAIC0yOTc3LDE4ICYjNDM7Mjk3NCwyMSBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiAJICovCiAJbW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLSZndDtoZHIsIGluZm8tJmd0O3NlY2hkcnMsIGluZm8tJmd0O3NlY3N0cmluZ3MpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgdG90YWwgc2l6ZXMsIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAgRm9yIG5vdwotCSAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueQotCSAqIHNwZWNpYWwgY2FzZXMgZm9yIHRoZSBhcmNoaXRlY3R1cmVzLgotCSAqLwomIzQzOwkvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqLwomIzQzOwllcnIgPSBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKGluZm8pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsKJiM0MzsJLyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqLwogCWxheW91dF9zZWN0aW9ucyhpbmZvLSZndDttb2QsIGluZm8pOwogCWxheW91dF9zeW10YWIoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKIAogCS8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqLwogCWVyciA9IG1vdmVfbW9kdWxlKGluZm8tJmd0O21vZCwgaW5mbyk7Ci0JaWYgKGVycikKJiM0MzsJaWYgKGVycikgewomIzQzOwkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLSZndDttb2QpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwl9CiAKIAkvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi8KIAltb2QgPSAodm9pZCAqKWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXgubW9kXS5zaF9hZGRyOwpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuYwppbmRleCBmMzBlZjhkZDI0YzcwLi44ZjEzMzY5YjMyZWNkIDEwMDY0NAotLS0gYS9tbS9hbGxvY190YWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9hbGxvY190YWcuYwpAQCAtODQzLDYgJiM0Mzs4NDMsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZCkKJiM0Mzt7CiYjNDM7CU1BX1NUQVRFKG1hcywgJmFtcDttb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7CiYjNDM7CXN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZzsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZzsKJiM0MzsJc3RydWN0IG1vZHVsZSAqdmFsOwomIzQzOwomIzQzOwltYXNfbG9jaygmYW1wO21hcyk7CiYjNDM7CW1hc19mb3JfZWFjaF9yZXYoJmFtcDttYXMsIHZhbCwgMCkKJiM0MzsJCWlmICh2YWwgPT0gbW9kKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwlpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqLwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghdXNlZCkKJiM0MzsJCWdvdG8gcmVsZWFzZV9hcmVhOwomIzQzOwomIzQzOwlzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5pbmRleCk7CiYjNDM7CWVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTsKJiM0MzsJaWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkgewomIzQzOwkJc3RydWN0IGFsbG9jX3RhZyAqdGFnOwomIzQzOwomIzQzOwkJZm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyAmbHQ7PSBlbmRfdGFnOyB0YWcmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyOwomIzQzOwomIzQzOwkJCWlmICghdGFnLSZndDtjb3VudGVycykKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJY291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7CiYjNDM7CQkJcHJfaW5mbygmIzM0OyVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXG4mIzM0OywKJiM0MzsJCQkJdGFnLSZndDtjdC5maWxlbmFtZSwgdGFnLSZndDtjdC5saW5lbm8sIHRhZy0mZ3Q7Y3QubW9kbmFtZSwKJiM0MzsJCQkJdGFnLSZndDtjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1c2VkID0gZmFsc2U7CiYjNDM7CX0KJiM0MztyZWxlYXNlX2FyZWE6CiYjNDM7CW1hc19zdG9yZSgmYW1wO21hcywgdXNlZCA/ICZhbXA7dW5sb2FkZWRfbW9kIDogTlVMTCk7CiYjNDM7CXZhbCA9IG1hc19wcmV2X3JhbmdlKCZhbXA7bWFzLCAwKTsKJiM0MzsJaWYgKHZhbCA9PSAmYW1wO3ByZXBlbmRfbW9kKQomIzQzOwkJbWFzX3N0b3JlKCZhbXA7bWFzLCBOVUxMKTsKJiM0MztvdXQ6CiYjNDM7CW1hc191bmxvY2soJmFtcDttYXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSB1bnNpZ25lZCBpbnQgcHJlcGVuZCwgdW5zaWduZWQgbG9uZyBhbGlnbikKIHsKQEAgLTkxMiwxMCAmIzQzOzk1OCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJaW50IGdyb3dfcmVzOwogCiAJCW1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgJiM0Mzsgc2l6ZTsKLQkJaWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpICZhbXA7JmFtcDsgIXRhZ3NfYWRkcmVzc2FibGUoKSkgewomIzQzOwkJaWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHsKIAkJCXNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7Ci0JCQlwcl93YXJuKCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXG4mIzM0OywKLQkJCQltb2QtJmd0O25hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTsKJiM0MzsJCQlwcl93YXJuX29uY2UoJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAomIzQzOwkJCQkgICAgIG1vZC0mZ3Q7bmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpOwomIzQzOwkJCXJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CiAJCX0KIAogCQlncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7CkBAIC05MjMsNiAmIzQzOzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJc2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTsKIAkJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXG4mIzM0OywKIAkJCSAgICAgICBtb2QtJmd0O25hbWUpOwomIzQzOwkJCXJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7CiAJCQlyZXR1cm4gRVJSX1BUUihncm93X3Jlcyk7CiAJCX0KIAl9CkBAIC05MzAsNTIgJiM0Mzs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAlyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKQotewotCU1BX1NUQVRFKG1hcywgJmFtcDttb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7Ci0Jc3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnOwotCXN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7Ci0Jc3RydWN0IG1vZHVsZSAqdmFsOwotCi0JbWFzX2xvY2soJmFtcDttYXMpOwotCW1hc19mb3JfZWFjaF9yZXYoJmFtcDttYXMsIHZhbCwgMCkKLQkJaWYgKHZhbCA9PSBtb2QpCi0JCQlicmVhazsKLQotCWlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovCi0JCWdvdG8gb3V0OwotCi0JaWYgKCF1c2VkKQotCQlnb3RvIHJlbGVhc2VfYXJlYTsKLQotCXN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTsKLQllbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMubGFzdCk7Ci0JaWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkgewotCQlzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7Ci0KLQkJZm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyAmbHQ7PSBlbmRfdGFnOyB0YWcmIzQzOyYjNDM7KSB7Ci0JCQlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7Ci0KLQkJCWlmICghdGFnLSZndDtjb3VudGVycykKLQkJCQljb250aW51ZTsKLQotCQkJY291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7Ci0JCQlwcl9pbmZvKCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcbiYjMzQ7LAotCQkJCXRhZy0mZ3Q7Y3QuZmlsZW5hbWUsIHRhZy0mZ3Q7Y3QubGluZW5vLCB0YWctJmd0O2N0Lm1vZG5hbWUsCi0JCQkJdGFnLSZndDtjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7Ci0JCX0KLQl9IGVsc2UgewotCQl1c2VkID0gZmFsc2U7Ci0JfQotcmVsZWFzZV9hcmVhOgotCW1hc19zdG9yZSgmYW1wO21hcywgdXNlZCA/ICZhbXA7dW5sb2FkZWRfbW9kIDogTlVMTCk7Ci0JdmFsID0gbWFzX3ByZXZfcmFuZ2UoJmFtcDttYXMsIDApOwotCWlmICh2YWwgPT0gJmFtcDtwcmVwZW5kX21vZCkKLQkJbWFzX3N0b3JlKCZhbXA7bWFzLCBOVUxMKTsKLW91dDoKLQltYXNfdW5sb2NrKCZhbXA7bWFzKTsKLX0KLQogc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApCiB7CiAJLyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHdoYXQgY29uZmlnIG9wdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwga2V5IGZpbGVzLCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlc2UgY2hhbmdlcy4KCkZpcnN0LCBgaW5jbHVkZS9saW51eC9tb2R1bGUuaGAgaGFzIGEgbmV3IGVudW0gdmFsdWUsIGBNT0RfU1RBTkRBTE9ORSA9IC0yYCwgYWRkZWQgdG8gYGVudW0gbW9kX21lbV90eXBlYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZW4gYGtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaGAgYWRkcyB0aGUgYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgbWFjcm8g4oCTIHNvIHRoaXMgYC0yYCBpcyBkZWZpbml0ZWx5IGNvbm5lY3RlZCB0byB0aGUgc3RhbmRhbG9uZSBtZW1vcnkgdHlwZS4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGlzdGluY3QgbWVtb3J5IHJlZ2lvbiBmb3IgbW9kdWxlIGxvYWRpbmcuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIG1vZHVsZSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gcm91dGluZXM6IGBhcHBseV9yZWxvY2F0aW9uc2AsIGBfX2xheW91dF9zZWN0aW9uc2AsIGBsYXlvdXRfc2VjdGlvbnNgLCBgbW92ZV9tb2R1bGVgLCBhbmQgYGxheW91dF9hbmRfYWxsb2NhdGVgLiBQbHVzLCB0aGVyZSYjMzk7cyB0aGUgaW50cm9kdWN0aW9uIG9mIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYC4gVGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IHNlY3Rpb25zLCBwYXJ0aWN1bGFybHkgY29kZXRhZyBzZWN0aW9ucyBhbmQgcGVyY3B1IHNlY3Rpb25zIChzdGFuZGFsb25lIHNlY3Rpb25zKSwgYXJlIGhhbmRsZWQgZHVyaW5nIG1vZHVsZSBsb2FkaW5nLiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGZvY3VzZWQgb24gZW5zdXJpbmcgdGhhdCB0aGVzZSBuZXcgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IG1hbmFnZWQgZHVyaW5nIGxvYWRpbmcgYW5kIHJlbG9jYXRpb24uCgpGaW5hbGx5LCBgbW0vYWxsb2NfdGFnLmNgIHNlZXMgc29tZSBpbnRlcmVzdGluZyByZW9yZGVyaW5nIGFuZCBlcnJvciBoYW5kbGluZyBhcm91bmQgbW9kdWxlIHRhZyBhbGxvY2F0aW9uLiBUaGUgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgYHJlc2VydmVfbW9kdWxlX3RhZ3NgLiBJbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AsIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY2hlY2sgZm9yIGAhdGFnc19hZGRyZXNzYWJsZSgpYCwgYW5kIGlmIGl0JiMzOTtzIHRydWUsIGl0IHJlbGVhc2VzIHRhZ3MgYW5kIHJldHVybnMgYC1FQUdBSU5gLiBBbHNvLCB0aGVyZSYjMzk7cyBhIGZhaWx1cmUgcmVsZWFzZSBmb3IgYHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKClgLiBUaGlzIGlzIGtleS4gSXQgaW1wbGllcyBhIG5ldyBhcHByb2FjaCBvciBjb25kaXRpb24gd2hlcmUgbWVtb3J5IHRhZ2dpbmcgbWlnaHQgZmFpbCBhbmQgcmVxdWlyZXMgYSByZXRyeSBvciBmYWxsYmFjay4gVGhpcyBjb3VsZCBvcGVuIGludGVyZXN0aW5nIGZ1enppbmcgcG9zc2liaWxpdGllcy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6YWJsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBjb250cm9sbGVkIGJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhcm91bmQgYGFsbG9jX3RhZ2AgYW5kIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIHRyaWdnZXJzIGZvciB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBleHBvc2UgdGhlc2UgbmV3IHBhdGhzLCBzbyBJIGNhbiBjcmVhdGUgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGhhdCByZWFjaGVzIHRoZXNlIG5ldyBmZWF0dXJlcy4gVGhpcyBwYXRjaCBoYXMgZGVmaW5pdGVseSBjYXVnaHQgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIyLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjM6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI0LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzUtXG5tbS9LY29uZmlnLmRlYnVnOjMzNjpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM3LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWcuZGVidWctMzM4LVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnLmRlYnVnOjMzOTpcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDAtXG5tbS9LY29uZmlnLmRlYnVnOjM0MTpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDMtXHRkZWZhdWx0IG5cbm1tL0tjb25maWcuZGVidWc6MzQ0Olx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9LY29uZmlnLmRlYnVnOjM0NTpcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDYtXHRoZWxwXG4tLVxubW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgJiM0Mzs9IGFsbG9jX3RhZy5vXG4tLVxubW0vYWxsb2NfdGFnLmMtMjktXG5tbS9hbGxvY190YWcuYzozMDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG5tbS9hbGxvY190YWcuYy0zMS1zdGF0aWMgYm9vbCBtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSB0cnVlO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ5PUVYUE9SVF9TWU1CT0woX3NoYXJlZF9hbGxvY190YWcpO1xuLS1cbm1tL2FsbG9jX3RhZy5jLTUxLVxubW0vYWxsb2NfdGFnLmM6NTI6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxubW0vYWxsb2NfdGFnLmMtNTMtXHRcdFx0bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTExMjk9c3RhdGljIF9faW5pdCBib29sIG5lZWRfcGFnZV9hbGxvY190YWdnaW5nKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTEzNi1cbm1tL2FsbG9jX3RhZy5jOjExMzc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMTM4LS8qXG4tLVxubW0vYWxsb2NfdGFnLmM9MTIxNT1zdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI2OC19XG5tbS9hbGxvY190YWcuYzoxMjY5OiNlbHNlIC8qICFDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vYWxsb2NfdGFnLmMtMTI3MC1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNsZWFyX2Vhcmx5X2FsbG9jX3Bmbl90YWdfcmVmcyh2b2lkKSB7fVxubW0vYWxsb2NfdGFnLmM6MTI3MTojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbm1tL2FsbG9jX3RhZy5jLTEyNzItXG4tLVxubW0vYWxsb2NfdGFnLmM9MTI5MD1zdGF0aWMgaW50IHByb2NfbWVtX3Byb2ZpbGluZ19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vYWxsb2NfdGFnLmMtMTMwMS1cbm1tL2FsbG9jX3RhZy5jOjEzMDI6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMzAzLVx0XHQvKiBVc2VyIGNhbiYjMzk7dCB0b2dnbGUgcHJvZmlsaW5nIHdoaWxlIGRlYnVnZ2luZyAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMjAyPXN0YXRpYyB2b2lkIGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTIxNi1cbm1tL3BhZ2VfYWxsb2MuYzoxMjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9hbGxvYy5jLTEyMTgtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTEyODM9c3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTI4OC1cbm1tL3BhZ2VfYWxsb2MuYzoxMjg5OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9wYWdlX2FsbG9jLmMtMTI5MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTI5ND1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxubW0vcGFnZV9hbGxvYy5jLTEyOTUtXG5tbS9wYWdlX2FsbG9jLmM6MTI5NjojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3BhZ2VfYWxsb2MuYy0xMjk3LVxuLS1cbm1tL3BhZ2VfZXh0LmM9ODA9c3RhdGljIHN0cnVjdCBwYWdlX2V4dF9vcGVyYXRpb25zICpwYWdlX2V4dF9vcHNbXSBfX2luaXRkYXRhID0ge1xuLS1cbm1tL3BhZ2VfZXh0LmMtODYtI2VuZGlmXG5tbS9wYWdlX2V4dC5jOjg3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9leHQuYy04OC1cdFx1MDAyNnBhZ2VfYWxsb2NfdGFnZ2luZ19vcHMsXG4tLVxubW0vcGFnZV9leHQuYz0xMDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7XG5tbS9wYWdlX2V4dC5jLTEwMS1cbm1tL3BhZ2VfZXh0LmM6MTAyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vcGFnZV9leHQuYy0xMDMtLypcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0zNT1zdHJ1Y3QgcGNwdW9ial9leHQge1xuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTM4LSNlbmRpZlxubW0vcGVyY3B1LWludGVybmFsLmg6Mzk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00MC1cdHVuaW9uIGNvZGV0YWdfcmVmXHR0YWc7XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmgtNDMtXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo0NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIHx8IGRlZmluZWQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00NS0jZGVmaW5lIE5FRURfUENQVU9CSl9FWFRcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD05MD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wY3B1b2JqX2V4dCh2b2lkKVxubW0vcGVyY3B1LWludGVybmFsLmgtOTEte1xubW0vcGVyY3B1LWludGVybmFsLmg6OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGVyY3B1LmM9MTY4OD1zdGF0aWMgdm9pZCBwY3B1X21lbWNnX2ZyZWVfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIHNpemVfdCBzaXplKVxuLS1cbm1tL3BlcmNwdS5jLTE2OTItXG5tbS9wZXJjcHUuYzoxNjkzOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGVyY3B1LmMtMTY5NC1zdGF0aWMgdm9pZCBwY3B1X2FsbG9jX3RhZ19hbGxvY19ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcbi0tXG5tbS9zaG93X21lbS5jPTQwOD12b2lkIF9fc2hvd19tZW0odW5zaWduZWQgaW50IGZpbHRlciwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2ssXG4tLVxubW0vc2hvd19tZW0uYy00MzQtI2VuZGlmXG5tbS9zaG93X21lbS5jOjQzNTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3Nob3dfbWVtLmMtNDM2LVx0c3RhdGljIERFRklORV9TUElOTE9DSyhtZW1fYWxsb2NfcHJvZmlsaW5nX3NwaW5sb2NrKTtcbi0tXG5tbS9zbGFiLmg9NjA0PXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tLVxubW0vc2xhYi5oLTYxMi0jZW5kaWZcbm1tL3NsYWIuaDo2MTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbGFiLmgtNjE0LVx0XHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XG4tLVxubW0vc2xhYi5oLTYxOC1cbm1tL3NsYWIuaDo2MTk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbGFiLmg6NjIwOkRFQ0xBUkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG5tbS9zbGFiLmgtNjIxLVx0XHRcdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbi0tXG5tbS9zbGFiLmg9NjIzPXN0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbm1tL3NsYWIuaC02MjQte1xubW0vc2xhYi5oOjYyNTpcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbm1tL3NsYWIuaC02MjYtXHRcdFx0XHQgICBcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbi0tXG5tbS9zbGFiLmg9ODA3PXNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcbi0tXG5tbS9zbGFiLmgtODE2LVxubW0vc2xhYi5oOjgxNzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3NsYWIuaC04MTgtc3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG4tLVxubW0vc2x1Yi5jPTIxND1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuLS1cbm1tL3NsdWIuYy0yMTYtXG5tbS9zbHViLmM6MjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vc2x1Yi5jOjIxODpERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG5tbS9zbHViLmMtMjE5LVx0XHRcdHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuLS1cbm1tL3NsdWIuYz0yMDY5PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTIwODYtXG5tbS9zbHViLmM6MjA4NzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbm1tL3NsdWIuYy0yMDg4LVxuLS1cbm1tL3NsdWIuYz0yMTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIxNDktXG5tbS9zbHViLmM6MjE1MDojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vc2x1Yi5jLTIxNTEtXG4tLVxubW0vc2x1Yi5jPTIxNTQ9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjE1Ni1cbm1tL3NsdWIuYzoyMTU3OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vc2x1Yi5jLTIxNTgtXG4tLVxubW0vc2x1Yi5jPTIzNDY9c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIzNTItXG5tbS9zbHViLmM6MjM1MzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3NsdWIuYy0yMzU0LVxuLS1cbm1tL3NsdWIuYz0yNDY5PXN0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuLS1cbm1tL3NsdWIuYy0yNDgwLVxubW0vc2x1Yi5jOjI0ODE6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3NsdWIuYy0yNDgyLVxuLS1cbm1tL3NsdWIuYz0yNDk1PXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuLS1cbm1tL3NsdWIuYy0yNDk4LVxubW0vc2x1Yi5jOjI0OTk6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9zbHViLmMtMjUwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKktjb25maWcgRGVlcCBEaXZlOiBDT0RFX1RBR0dJTkcgYW5kIE1FTV9BTExPQ19QUk9GSUxJTkcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byBzb21lIEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0JiMzOTtzIG9uIHRoZSBhZ2VuZGEgdG9kYXk/IEFoLCB5ZXMsIGBDT0RFX1RBR0dJTkdgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRob3NlIHR3byBhcmUgb2Z0ZW4gaW50ZXJ0d2luZWQsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgdGhpbmtpbmcgYWJvdXQgbG93LWxldmVsIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgcGxheSB0b2dldGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncywgYW5kIHdoYXQgaW1wbGljYXRpb25zIGVhY2ggaGFzIG9uIHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGFtb3VudCBvZiBpbnN0cnVtZW50YXRpb24gdG8gYmUgYXdhcmUgb2YuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBzeXN0ZW0sIGFuZCB3aGF0IHRoZSB0cmFkZS1vZmZzIGFyZS4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHdoZXJlIHRoZXNlIGFyZSB1c2VkIGFzIHRoaXMgY291bGQgYWZmZWN0IHRoZSBlbnRpcmUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT0RFX1RBR0dJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTEwMTQ9Y29uZmlnIERFQlVHX1NUQUNLT1ZFUkZMT1dcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDMxLVxubGliL0tjb25maWcuZGVidWc6MTAzMjpjb25maWcgQ09ERV9UQUdHSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDMzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIEtjb25maWcgaW4gdGhlIFdpbGQqKgoKT2theSwgc28gSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcywgY2hhc2luZyBkb3duIGEgYnVnLiBUaGUgcHJvYmxlbSYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgZGVidWcgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBjb2RlYmFzZSwgSSBjYW4gYWxtb3N0IHNtZWxsIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZS4gTXkgZ3V0IHRlbGxzIG1lIHRvIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gSXQmIzM5O3MgYSBrZXkgZmlsZSBmb3IgYW55IGRlYnVnZ2luZy1yZWxhdGVkIHNldHRpbmdzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBsaW5lIDEwMzIgbWlnaHQgaG9sZCBhIGNsdWUuIEl0JiMzOTtzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZvciBkaWdnaW5nIGluIGFuZCB0YWtpbmcgYSBsb29rLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDI1Olx0XHQgIGludm9sdmVkLlxuMTAyNjpcdFxuMTAyNzpcdFx0ICBVc2UgdGhpcyBpbiBjYXNlcyB3aGVyZSB5b3Ugc2VlIGFwcGFyZW50bHkgcmFuZG9tIG1lbW9yeVxuMTAyODpcdFx0ICBjb3JydXB0aW9uLCBlc3BlY2lhbGx5IGlmIGl0IGFwcGVhcnMgaW4gJiMzOTtzdHJ1Y3QgdGhyZWFkX2luZm8mIzM5O1xuMTAyOTpcdFxuMTAzMDpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4xMDMxOlx0XG4xMDMyOlx0Y29uZmlnIENPREVfVEFHR0lOR1xuMTAzMzpcdFx0Ym9vbFxuMTAzNDpcdFx0c2VsZWN0IEtBTExTWU1TXG4xMDM1Olx0XG4xMDM2Olx0c291cmNlIFwmIzM0O2xpYi9LY29uZmlnLmthc2FuXCYjMzQ7XG4xMDM3Olx0c291cmNlIFwmIzM0O2xpYi9LY29uZmlnLmtmZW5jZVwmIzM0O1xuMTAzODpcdHNvdXJjZSBcJiMzNDtsaWIvS2NvbmZpZy5rbXNhblwmIzM0O1xuMTAzOTpcdFxuMTA0MDpcdGVuZG1lbnUgIyBcJiMzNDtNZW1vcnkgRGVidWdnaW5nXCYjMzQ7XG4xMDQxOlx0XG4xMDQyOlx0Y29uZmlnIERFQlVHX1NISVJRXG4xMDQzOlx0XHRib29sIFwmIzM0O0RlYnVnIHNoYXJlZCBJUlEgaGFuZGxlcnNcJiMzNDtcbjEwNDQ6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4xMDQ1Olx0XHRoZWxwXG4xMDQ2Olx0XHQgIEVuYWJsZSB0aGlzIHRvIGdlbmVyYXRlIGEgc3B1cmlvdXMgaW50ZXJydXB0IGp1c3QgYmVmb3JlIGEgc2hhcmVkXG4xMDQ3Olx0XHQgIGludGVycnVwdCBoYW5kbGVyIGlzIGRlcmVnaXN0ZXJlZCAoZ2VuZXJhdGluZyBvbmUgd2hlbiByZWdpc3RlcmluZ1xuMTA0ODpcdFx0ICBpcyBjdXJyZW50bHkgZGlzYWJsZWQpLiBEcml2ZXJzIG5lZWQgdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5LiBTb21lXG4xMDQ5Olx0XHQgIGRvbiYjMzk7dCBhbmQgbmVlZCB0byBiZSBjYXVnaHQuXG4xMDUwOlx0XG4xMDUxOlx0bWVudSBcJiMzNDtEZWJ1ZyBPb3BzLCBMb2NrdXBzIGFuZCBIYW5nc1wmIzM0O1xuMTA1MjpcdFxuMTA1MzpcdGNvbmZpZyBQQU5JQ19PTl9PT1BTXG4xMDU0Olx0XHRib29sIFwmIzM0O1BhbmljIG9uIE9vcHNcJiMzNDtcbjEwNTU6XHRcdGhlbHBcbjEwNTY6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGtlcm5lbCB0byBwYW5pYyB3aGVuIGl0IG9vcHNlcy4gVGhpc1xuMTA1NzpcdFx0ICBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgb29wcz1wYW5pYyBvbiB0aGUga2VybmVsIGNvbW1hbmRcbjEwNTg6XHRcdCAgbGluZS5cbjEwNTk6XHRcbjEwNjA6XHRcdCAgVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCB0byBlbnN1cmUgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IGRvXG4xMDYxOlx0XHQgIGFueXRoaW5nIGVycm9uZW91cyBhZnRlciBhbiBvb3BzIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkYXRhXG4xMDYyOlx0XHQgIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzLlxuMTA2MzpcdFxuMTA2NDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nLCBhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIGlzc3VlIHJlbGF0ZWQgdG8gZGVidWdnaW5nLiBHaXZlbiB0aGF0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgc3dlZXQgc3BvdCB0byBsb29rIGZvciB0aGlzIGlzc3VlIG1pZ2h0IGJlIGFyb3VuZCBsaW5lIDMyMC4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBzcG90IGZvciBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyBvcHRpb25zLCBvciBwZXJoYXBzIHRoZSBkZXBlbmRlbmNpZXMgb2Ygc3VjaCBvcHRpb25zLCB0byBiZSBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFscyBvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcbiAzMTY6XHRcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcbiAzMTc6XHRcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xuIDMxODpcdFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcbiAzMTk6XHRcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiAzMjA6XHRcbiAzMjE6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuIDMyMjpcdFxuIDMyMzpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzI0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbiAzMjU6XHRcdGRlZmF1bHQgblxuIDMyNjpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAzMjc6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDMyODpcdFx0c2VsZWN0IENPREVfVEFHR0lOR1xuIDMyOTpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMzMwOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcbiAzMzM6XHRcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xuIDMzNDpcdFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cbiAzMzU6XHRcbiAzMzY6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbiAzMzc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMzM4Olx0XHRkZWZhdWx0IHlcbiAzMzk6XHRcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xuIDM0MDpcdFxuIDM0MTpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG4gMzQyOlx0XHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuIDM0MzpcdFx0ZGVmYXVsdCBuXG4gMzQ0Olx0XHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzNDU6XHRcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxuIDM0NjpcdFx0aGVscFxuIDM0NzpcdFx0ICBBZGRzIHdhcm5pbmdzIHdpdGggaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cbiAzNDg6XHRcdCAgcHJvZmlsaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBDT0RFX1RBR0dJTkdgIFNlbGVjdGlvbiBDcml0ZXJpYSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgQ09ERV9UQUdHSU5HYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBhdXNlIGFuZCB0cnkgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiBpdHMgcHVycG9zZS4KClRoZSBpbXBsaWNpdCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlcmUgYXJlIG90aGVyIHNlbGVjdGlvbiBtZXRob2RzLCBmZWF0dXJlcywgcnVsZXMsIG9yIGlucHV0cyBpbiBwbGF5LiBUaGlua2luZyBzeXN0ZW1hdGljYWxseSwgSSBuZWVkIHRvIGtub3c6IHdoYXQgY3JpdGVyaWEgYmVzaWRlcyB0aGUgZXhwbGljaXRseSBtZW50aW9uZWQgb25lIGRldGVybWluZSB0aGUgc2VsZWN0aW9uIG9mIGBDT0RFX1RBR0dJTkdgPyBXaGF0IGFyZSBhbGwgdGhlIHRyaWdnZXJzLCBjb25zdHJhaW50cywgb3IgY29udGV4dHVhbCBmYWN0b3JzIGluZmx1ZW5jaW5nIGl0cyBpbnZvY2F0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzZXQgb2YgY29uZGl0aW9ucywgbm90IGp1c3QgdGhlIG9idmlvdXMgb25lLiBTbywgd2hhdCBlbHNlIGlzIGNvbnRyaWJ1dGluZyB0bywgb3IgcG90ZW50aWFsbHkgaW5mbHVlbmNpbmcsIGEgcHJvY2VzcyB0aGF0IGNob29zZXMgYENPREVfVEFHR0lOR2A/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBDT0RFX1RBR0dJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMjM9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMyNy1cdGRlcGVuZHMgb24gUFJPQ19GU1xubW0vS2NvbmZpZy5kZWJ1ZzozMjg6XHRzZWxlY3QgQ09ERV9UQUdHSU5HXG5tbS9LY29uZmlnLmRlYnVnLTMyOS1cdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTW9kdWxlIExvYWRpbmcgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSB0aGUgYE1PRFVMRVNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGludm9sdmVkLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcmUgbW9kdWxlIGxvYWRpbmcgY29kZSAoYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKTGV0JiMzOTtzIHNlZSwgSSYjMzk7dmUgZ290IGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgYXMgdGhlIHByaW1hcnkgYWZmZWN0ZWQgZmlsZXMuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBGcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIGl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkOiBgYXBwbHlfcmVsb2NhdGlvbnNgLCBgX19sYXlvdXRfc2VjdGlvbnNgLCBgbGF5b3V0X3NlY3Rpb25zYCwgYG1vdmVfbW9kdWxlYCwgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgLCBhbmQgYGxheW91dF9hbmRfYWxsb2NhdGVgLiBJIHNob3VsZCBub3RlIHRoYXQgdGhleSBhcmUgYWxsIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhlaXIgdmlzaWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIHNjb3BlLCB1c3VhbGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZS4KCkNydWNpYWxseSwgSSBzZWUgdGhhdCB0aGUgYGxvYWRfbW9kdWxlYCBmdW5jdGlvbiBjYWxscyBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAuIEFuZCBgbG9hZF9tb2R1bGVgIGl0c2VsZiBpcyBhIHZlcnkgaW1wb3J0YW50IGVudHJ5IHBvaW50LCB3aGljaCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMuIFNvLCBJIHdpbGwgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYm90aCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGBsb2FkX21vZHVsZWAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY2hhbmdlIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc3VycHJpc2luZyBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyB3aXRoaW4gdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MsIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgbGVhZCB0byBhIGxhcmdlciBjaGFuZ2UgaW4gaG93IHRoZSBtb2R1bGVzIGFyZSBiZWluZyBsb2FkZWQgYW5kIGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsYXlvdXRfYW5kX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTE2ND1zdGF0aWMgaW5saW5lIGJvb2wgc2V0X2xpdmVwYXRjaF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNzktICogXHRvciBiZWluZyBwcm9jZXNzZWQgb24gb3VyIFx1MDAyNm1vZHVsZXMgbGlzdC4gVGhpcyBoYXBwZW5zIG9uIGVhcmx5X21vZF9jaGVjaygpXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTgwOiAqIFx0cmlnaHQgYmVmb3JlIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhlIGtlcm5lbCB3b3VsZCBoYXZlIGFscmVhZHlcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xODEtICogXHR2bWFsbG9jKCkmIzM5O2Qgc3BhY2UgZm9yIHRoZSBlbnRpcmUgbW9kdWxlIHRocm91Z2ggZmluaXRfbW9kdWxlKCkuIElmXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE4Ny0gKlx0b2YgdGhpcyBhbGxvY2F0ZWQgeWV0IGFub3RoZXIgcHJpdmF0ZSBrZXJuZWwgY29weSBvZiB0aGUgbW9kdWxlIHNwYWNlIGluXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTg4OiAqXHRsYXlvdXRfYW5kX2FsbG9jYXRlKCkgYnV0IGFmdGVyIHRoaXMgZGV0ZXJtaW5lZCBpbiBhZGRfdW5mb3JtZWRfbW9kdWxlKClcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xODktICpcdHRoYXQgYW5vdGhlciBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgbG9hZGVkIG9yIGJlaW5nIHByb2Nlc3NlZC5cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTEyPXN0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NDQtXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTQ1OnN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NDYte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0MzM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzQ3MC1cdC8qIEZpZ3VyZSBvdXQgbW9kdWxlIGxheW91dCwgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbWVtb3J5LiAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6MzQ3MTpcdG1vZCA9IGxheW91dF9hbmRfYWxsb2NhdGUoaW5mbywgZmxhZ3MpO1xua2VybmVsL21vZHVsZS9tYWluLmMtMzQ3Mi1cdGlmIChJU19FUlIobW9kKSkge1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy00Mi0gKiAgICAgIGZyb20ga2VybmVsX3JlYWRfZmlsZV9mcm9tX2ZkKCkgaXMgZnJlZWQgcmlnaHQgYXdheS5cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo0MzogKiAgIGMpIGxheW91dF9hbmRfYWxsb2NhdGUoKSBhbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBmaW5hbCByZXN0aW5nXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtNDQtICogICAgICBwbGFjZSB3aGVyZSB3ZSB3b3VsZCBrZWVwIHRoZSBtb2R1bGUgaWYgaXQgd2VyZSB0byBiZSBwcm9jZXNzZWRcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtODgtICogICBhKSBGQUlMX0RVUF9NT0RfQkVDT01JTkc6IGF0IHRoZSBlbmQgb2YgZWFybHlfbW9kX2NoZWNrKCkgYmVmb3JlXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6ODk6ICpcdGxheW91dF9hbmRfYWxsb2NhdGUoKS5cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05MC0gKlx0LSB3aXRoIG1vZHVsZSBkZWNvbXByZXNzaW9uOiAyIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05MS0gKlx0LSB3aXRob3V0IG1vZHVsZSBkZWNvbXByZXNzaW9uOiAxIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo5MjogKiAgIGIpIEZBSUxfRFVQX01PRF9MT0FEOiBhZnRlciBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgb24gYWRkX3VuZm9ybWVkX21vZHVsZSgpXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtOTMtICogICBcdC0gd2l0aCBtb2R1bGUgZGVjb21wcmVzc2lvbiAzIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9MTAwPXN0YXRpYyBMSVNUX0hFQUQoZHVwX2ZhaWxlZF9tb2R1bGVzKTtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTM5LSAqICAgICBhdCB0aGUgZW5kIG9mIGVhcmx5X21vZF9jaGVjaygpIHByZXZlbnRzIGR1cGxpY2F0ZSBhbGxvY2F0aW9uc1xua2VybmVsL21vZHVsZS9zdGF0cy5jOjE0MDogKiAgICAgb24gbGF5b3V0X2FuZF9hbGxvY2F0ZSgpIGZvciBtb2R1bGVzIGFscmVhZHkgYmVpbmcgcHJvY2Vzc2VkLiBUaGVzZVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE0MS0gKiAgICAgZHVwbGljYXRlIGZhaWxlZCBtb2R1bGVzIGFyZSBub24tZmF0YWwsIGhvd2V2ZXIgdGhleSB0eXBpY2FsbHkgYXJlXG4tLVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE2Ni0gKiAgICAgaXMgdW5pcXVlLiAgQSBtb2R1bGUgY2FuIHN0aWxsIGZhaWwgdG8gbG9hZCBpZiB3ZSBkZXRlY3QgdGhlIG1vZHVsZSBpc1xua2VybmVsL21vZHVsZS9zdGF0cy5jOjE2NzogKiAgICAgbG9hZGVkIGFmdGVyIHdlIGFsbG9jYXRlIHNwYWNlIGZvciBpdCB3aXRoIGxheW91dF9hbmRfYWxsb2NhdGUoKSwgd2UgZG9cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xNjgtICogICAgIHRoaXMgY2hlY2sgcmlnaHQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG1vZHVsZSBhcyBsaXZlIGFuZCBydW4gaXRzXG4tLVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4MC0gKiAgKiBmYWlsZWRfYmVjb21pbmc6IGhvdyBtYW55IG1vZHVsZXMgZmFpbGVkIGFmdGVyIHdlIGtlcm5lbF9yZWFkX2ZpbGVfZnJvbV9mZCgpXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MTgxOiAqICAgIGl0IGFuZCBiZWZvcmUgd2UgYWxsb2NhdGUgbWVtb3J5IGZvciBpdCB3aXRoIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhpc1xua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4Mi0gKiAgICBjb3VudGVyIGlzIG5ldmVyIGluY3JlbWVudGVkIGlmIHlvdSBtYW5hZ2UgdG8gdmFsaWRhdGUgdGhlIG1vZHVsZSBhbmRcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoxODM6ICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4NC0gKiAgKiBmYWlsZWRfbG9hZF9tb2R1bGVzOiBob3cgbWFueSBtb2R1bGVzIGZhaWxlZCBvbmNlIHdlJiMzOTt2ZSBhbGxvY2F0ZWQgb3VyXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MTg1OiAqICAgIHByaXZhdGUgc3BhY2UgZm9yIG91ciBtb2R1bGUgdXNpbmcgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpLiBUaGVzZSBmYWlsdXJlc1xua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4Ni0gKiAgICBzaG91bGQgaG9wZWZ1bGx5IG1vc3RseSBiZSBkZWFsdCB3aXRoIGFscmVhZHkuIFJhY2VzIGluIHRoZW9yeSBjb3VsZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBLZXJuZWwgTW9kdWxlIExvYWRpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGtlcm5lbCBtb2R1bGVzIGFyZSBsb2FkZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBzeXN0ZW0gY2FsbCBsZXZlbC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYGZpbml0X21vZHVsZWAgYW5kIGBpbml0X21vZHVsZWAgYXJlIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSDigJMgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCBzeXN0ZW0gY2FsbHMgZXhwb3NlZCB0byBhcHBsaWNhdGlvbnMgb3IsIGluIHRoaXMgY2FzZSwgYSBwcml2aWxlZ2VkIHByb2Nlc3MgbGlrZSBTeXprYWxsZXIuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3lzY2FsbHMgd29yayB1bmRlciB0aGUgaG9vZC4gU28sIG5leHQsIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBzeXNjYWxsIGVudHJ5cG9pbnRzIGluIHRoZSBrZXJuZWwgc291cmNlLCBwcm9iYWJseSBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBsaWtlbHkgaGFwcGVucyDigJMgd2hlcmUgdGhlIGtlcm5lbCBmaWd1cmVzIG91dCB3aGF0IHRvICpkbyogd2l0aCB0aG9zZSB1c2VyLXNwYWNlIGNvbW1hbmRzIHRvIGxvYWQgYSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLiptb2R1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYz04MDI9c3RhdGljIHZvaWQgZnJlZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTgwMy1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjgwNDpTWVNDQUxMX0RFRklORTIoZGVsZXRlX21vZHVsZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZV91c2VyLFxua2VybmVsL21vZHVsZS9tYWluLmMtODA1LVx0XHR1bnNpZ25lZCBpbnQsIGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0MzM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1MC1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTE6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1Mi1cdFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNzk3PXN0YXRpYyBpbnQgaWRlbXBvdGVudF9pbml0X21vZHVsZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKiB1YXJncywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM4MTUtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozODE2OlNZU0NBTExfREVGSU5FMyhmaW5pdF9tb2R1bGUsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHVhcmdzLCBpbnQsIGZsYWdzKVxua2VybmVsL21vZHVsZS9tYWluLmMtMzgxNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Njk5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgYWxsb2NfdGFnLmNgIEZ1bmN0aW9uIFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBhbGxvY190YWcuY2AgZmlsZSBkaXJlY3RseSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQuIE15IHByaW1hcnkgdGFyZ2V0cyBhcmUgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGFuZCBgcmVsZWFzZV9tb2R1bGVfdGFnc2AuIEkgc2VlIHRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIHN0YXRpYyB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gTXkgbmV4dCBxdWVzdGlvbiBpcywgd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSAqdXNlZCo/IFdoYXQmIzM5O3MgdGhlIGNhbGwgcGF0aD8gVG8gZmlndXJlIHRoYXQgb3V0LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBjb2RldGFnIG1vZHVsZSBjYWxsYmFja3MuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlaXIgZXhlY3V0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb2RldGFnLmg9OTI9Ym9vbCBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTkzLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHNpemUpO1xuaW5jbHVkZS9saW51eC9jb2RldGFnLmg6OTQ6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC05NS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmg9MTA3PXN0YXRpYyBpbmxpbmUgdm9pZCAqXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMDg6Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMDktXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBwcmVwZW5kLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MTI9c3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyMS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjI6XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyMy1cdFx0XHRcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVx1MDAzZW1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi0tXG5saWIvY29kZXRhZy5jPTI1NT1ib29sIGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmxpYi9jb2RldGFnLmMtMjgyLVxubGliL2NvZGV0YWcuYzoyODM6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5saWIvY29kZXRhZy5jLTI4NC1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzU4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogYGNvZGV0YWcuY2AgYW5kIFNlY3Rpb24gQWxsb2NhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGxpYi9jb2RldGFnLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29kZSB0YWdzIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUga2V5IHRvIGhvdyB3ZSYjMzk7cmUgY2FydmluZyBvdXQgbWVtb3J5IGZvciB0aGVzZSB0YWdzIHdpdGhpbiB0aGUgbW9kdWxlIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgZG9uZSwgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgY291bGQgbGVhZCB0byBmcmFnbWVudGF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIG91ciBjdXJyZW50IHRhZ2dpbmcgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb2RldGFnLmg9OTQ9dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTYtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFsaWduKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk3OnZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpO1xuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTgtdm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpO1xuLS1cbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTEwOD1jb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMTAtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFsaWduKSB7IHJldHVybiBOVUxMOyB9XG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMTE6c3RhdGljIGlubGluZSB2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKSB7fVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTEyLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpIHt9XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MjkxMj1zdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTI0LVx0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjU6XHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTI2LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzEtXHRcdGlmIChJU19FUlIoZGVzdCkpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MzI6XHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTMzLVx0XHRcdHJldHVybiBQVFJfRVJSKGRlc3QpO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDU9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5ODgtXHRpZiAoZXJyKSB7XG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTg5Olx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OTAtXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MzAwMj1zdGF0aWMgdm9pZCBtb2R1bGVfZGVhbGxvY2F0ZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzAwNS1cdG1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpO1xua2VybmVsL21vZHVsZS9tYWluLmM6MzAwNjpcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMDctXG4tLVxubGliL2NvZGV0YWcuYz0yODM9dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubGliL2NvZGV0YWcuYy0zMDctXG5saWIvY29kZXRhZy5jOjMwODp2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKVxubGliL2NvZGV0YWcuYy0zMDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgQ29kZXRhZyBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgY29kZXRhZyBtb2R1bGUsIHNwZWNpZmljYWxseSBob3cgaXQgYWxsb2NhdGVzIGFuZCBmcmVlcyBzZWN0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gIGFuZCBgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc2AuIEkga25vdyB0aGVzZSBhcmUgZXhwb3J0ZWQgb3IgZGVmaW5lZCB3aXRoaW4gYGxpYi9jb2RldGFnLmNgLiBOb3csIHRoZSBiZXN0IHBsYWNlIHRvIGp1bXAgaW4gaXMgcHJvYmFibHkgZGlyZWN0bHkgaW50byB0aGUgc291cmNlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIHRvIGBsaWIvY29kZXRhZy5jYCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIDI4MyBvciBhcm91bmQgdGhhdCBhcmVhIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpbnNwZWN0IHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzU6XHRcdFx0XHRicmVhaztcbiAyNzY6XHRcdFx0fVxuIDI3NzpcdFx0fVxuIDI3ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvZGV0YWdfbG9jayk7XG4gMjc5Olx0XG4gMjgwOlx0XHRyZXR1cm4gcmV0O1xuIDI4MTpcdH1cbiAyODI6XHRcbiAyODM6XHR2b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbiAyODQ6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4gMjg1Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFsaWduKVxuIDI4NjpcdHtcbiAyODc6XHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IG5hbWUgJiM0Mzsgc3RybGVuKENPREVUQUdfU0VDVElPTl9QUkVGSVgpO1xuIDI4ODpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDI4OTpcdFx0dm9pZCAqcmV0ID0gRVJSX1BUUigtRUlOVkFMKTtcbiAyOTA6XHRcbiAyOTE6XHRcdG11dGV4X2xvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAyOTI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3R0eXBlLCBcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XG4gMjkzOlx0XHRcdGlmIChzdHJjbXAodHlwZV9uYW1lLCBjdHR5cGUtXHUwMDNlZGVzYy5zZWN0aW9uKSA9PSAwKSB7XG4gMjk0Olx0XHRcdFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKSlcbiAyOTU6XHRcdFx0XHRcdGJyZWFrO1xuIDI5NjpcdFxuIDI5NzpcdFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiAyOTg6XHRcdFx0XHRyZXQgPSBjdHR5cGUtXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbShtb2QsIHNpemUsIHByZXBlbmQsIGFsaWduKTtcbiAyOTk6XHRcdFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIDMwMDpcdFx0XHRcdGJyZWFrO1xuIDMwMTpcdFx0XHR9XG4gMzAyOlx0XHR9XG4gMzAzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMDQ6XHRcbiAzMDU6XHRcdHJldHVybiByZXQ7XG4gMzA2Olx0fVxuIDMwNzpcdFxuIDMwODpcdHZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpXG4gMzA5Olx0e1xuIDMxMDpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDMxMTpcdFxuIDMxMjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuIDMxMzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcbiAzMTQ6XHRcdFx0aWYgKCFjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuIDMxNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxNjpcdFxuIDMxNzpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzE4Olx0XHRcdGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCBmYWxzZSk7XG4gMzE5Olx0XHRcdHVwX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzIwOlx0XHR9XG4gMzIxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMjI6XHR9XG4gMzIzOlx0XG4gMzI0Olx0dm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3RhZ2AgQWxsb2NhdGlvbiBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYWxsb2NfdGFnYCBzdHVmZi4gVGhlIGNsdWUgSSBoYXZlIGlzIHRoYXQgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24sIGBjdHR5cGUtJmd0O2Rlc2MuYWxsb2Nfc2VjdGlvbl9tZW1gLCByZWxhdGVkIHRvIGBhbGxvY190YWdgLCBpcyByZWdpc3RlcmVkIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBNeSBuZXh0IG1vdmUsIG5hdHVyYWxseSwgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBleGFjdGx5IGBhbGxvY19zZWN0aW9uX21lbWAgaXMgYWN0dWFsbHkgKnNldCogd2l0aGluIHRoYXQgYG1tL2FsbG9jX3RhZy5jYCBmaWxlLiBHb3R0YSB0cmFjZSBpdHMgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGNvbmZpZ3VyZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zZWN0aW9uX21lbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYz0xMzM3PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTM0My1cdFx0Lm5lZWRzX3NlY3Rpb25fbWVtXHQ9IG5lZWRzX3NlY3Rpb25fbWVtLFxubW0vYWxsb2NfdGFnLmM6MTM0NDpcdFx0LmFsbG9jX3NlY3Rpb25fbWVtXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXG5tbS9hbGxvY190YWcuYy0xMzQ1LVx0XHQuZnJlZV9zZWN0aW9uX21lbVx0PSByZWxlYXNlX21vZHVsZV90YWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTW9kdWxlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBvdmVyaGF1bGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1vZHVsZSBsYXlvdXQgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBzcGVjaWZpYyBzZWN0aW9uIHR5cGVzLCBzcGVjaWZpY2FsbHkgdGhpbmdzIGxpa2UgY29kZXRhZyBhbmQgcGVyY3B1IHNlY3Rpb25zLiBJIHNlZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCB3aGljaCBpcyBub3cgY2FsbGVkICpiZWZvcmUqIHRoZSByZWd1bGFyIHNlY3Rpb24gbGF5b3V0IHByb2Nlc3MuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbWFya2luZyB0aGVzZSBzdGFuZGFsb25lIHNlY3Rpb25zIHdpdGggYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAsIGFuZCBpZiBhbGxvY2F0aW9uIGZhaWxzIGluIHRoZSB0YWcgcGF0aCB3aXRoIGBFQUdBSU5gLCBpdCBmYWxscyBiYWNrIHRvIGEgcmVndWxhciBhbGxvY2F0aW9uLiBUaGUgYG1vdmVfbW9kdWxlKClgIGZ1bmN0aW9uIGlzIHRoZW4gdXBkYXRlZCB0byBza2lwIHRoZSBzdGFuZGFsb25lIHNlY3Rpb25zLiBQZXJjcHUgc2VjdGlvbnMgYXJlIGFsc28gZ2V0dGluZyB0aGlzIHRyZWF0bWVudCwgdXNpbmcgYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgcmF0aGVyIHRoYW4gc29tZSBjdXN0b20gbG9naWMgZHVyaW5nIHJlbG9jYXRpb24uIEFuZCB0aGVyZSYjMzk7cyBhbHNvIGEgZmFsbGJhY2sgaW1wbGVtZW50ZWQsIHVzaW5nIGBFUlJfUFRSKC1FQUdBSU4pYCwgaW4gYG1tL2FsbG9jX3RhZy5jYCBpZiBgdGFnc19hZGRyZXNzYWJsZSgpYCBpc24mIzM5O3QgdHJ1ZSwgd2hpY2ggZm9yY2VzIHRoZSBtb2R1bGUgbG9hZGVyIHRvIHVzZSB0aGUgbm9ybWFsIGFsbG9jYXRpb24gcHJvY2Vzcy4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nISBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBsb2dpYyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBob3cgbWVtb3J5IGFsbG9jYXRpb24gdGFncyBhcmUgbWFuYWdlZCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gTW9kdWxlIGxvYWRpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMsIHdoaWNoIFN5emthbGxlciBhbHJlYWR5IHRhcmdldHMgd2l0aGluIFFFTVUgYW5kIEdDRSBlbnZpcm9ubWVudHMuCgpNeSB0aGlua2luZyBpcyB0aGF0IHRoZSBFTEYgcGFyc2luZywgc2VjdGlvbiBsYXlvdXQsIHJlbG9jYXRpb24gaGFuZGxpbmcsIHRoZSBmYWxsYmFjayBtZWNoYW5pc21zLCBhbmQgdGhlIGVycm9yIHVud2luZGluZyBsb2dpYyB3aGVuIGxvYWRpbmcgbW9kdWxlcyBhcmUgYWxsICpjcml0aWNhbCogY29kZSBwYXRocy4gVGhlc2UgYXJlIHByaW1lIHRhcmdldHMgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIGxheW91dCBidWdzLCBzaXplIGNhbGN1bGF0aW9uIGVycm9ycywgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuCgpTbywgbGV0JiMzOTtzIGZvY3VzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvciBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIG9idmlvdXM6IGBpbml0X21vZHVsZWAgKG9yIHBvc3NpYmx5IHRoZSBgX194NjRfc3lzX2luaXRfbW9kdWxlYCB2YXJpYXRpb25zKSwgYGZpbml0X21vZHVsZWAgLCBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAsIGFuZCBgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc2AuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgc3RhbmRhcmQgc3ltYm9sIG5hbWVzIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBsaWIvY29kZXRhZy5jYCBhcyB3ZWxsLiBJJiMzOTtsbCBhbHNvIGxvb2sgYXQgYW55dGhpbmcgcmVsYXRlZCB0byByZWxvY2F0aW9uLCBzdWNoIGFzIGBhcHBseV9yZWxvY2F0ZV9hZGRgLiBJIGNhbiBwcm9iYWJseSB1c2UgYG5tYCBvciBTeXprYWxsZXImIzM5O3MgdGFyZ2V0aW5nIG1ldGhvZHMgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzIGluIHRoZSBrZXJuZWwgY29kZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGZpbmQgYW55dGhpbmcgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCB0aGF0JiMzOTtzIG5vdCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bXiBcXHQjXFwvXS4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUzOTEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yPW1lbnVjb25maWcgTU9EVUxFU1xuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05LVx0ICBwZXJtYW5lbnRseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuICBZb3UgdXNlIHRoZSBcJiMzNDttb2Rwcm9iZVwmIzM0O1xua2VybmVsL21vZHVsZS9LY29uZmlnOjEwOlx0ICB0b29sIHRvIGFkZCAoYW5kIHNvbWV0aW1lcyByZW1vdmUpIHRoZW0uICBJZiB5b3Ugc2F5IFkgaGVyZSxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMS1cdCAgbWFueSBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBiZSBidWlsdCBhcyBtb2R1bGVzIChieVxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOlx0ICBhbnN3ZXJpbmcgTSBpbnN0ZWFkIG9mIFkgd2hlcmUgaW5kaWNhdGVkKTogdGhpcyBpcyBtb3N0XG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTMtXHQgIHVzZWZ1bCBmb3IgaW5mcmVxdWVudGx5IHVzZWQgb3B0aW9ucyB3aGljaCBhcmUgbm90IHJlcXVpcmVkXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTE5LVx0ICB3aGVyZSBtb2Rwcm9iZSBjYW4gZmluZCB0aGVtICh5b3UgbWF5IG5lZWQgdG8gYmUgcm9vdCB0byBkb1xua2VybmVsL21vZHVsZS9LY29uZmlnOjIwOlx0ICB0aGlzKS5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yMS1cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9NjM9Y29uZmlnIE1PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTY2LVx0ICBNb2R1bGUgYXV0b2xvYWRpbmcgYWxsb3dzIGluLWtlcm5lbCBjb2RlIHRvIHJlcXVlc3QgbW9kdWxlcyB0aHJvdWdoXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Njc6XHQgIHRoZSAqcmVxdWVzdF9tb2R1bGUqKCkgQVBJIGNhbGxzLiBUaGlzIGluIHR1cm4ganVzdCBjYWxscyB1c2Vyc3BhY2Vcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02OC1cdCAgbW9kcHJvYmUuIEFsdGhvdWdoIG1vZHByb2JlIGNoZWNrcyB0byBzZWUgaWYgYSBtb2R1bGUgaXMgYWxyZWFkeVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy03MC1cdCAgd2hpY2ggbXVsdGlwbGUgZHVwbGljYXRlIHJlcXVlc3RzIGNhbiBlbmQgdXAgaW4gdXNlcnNwYWNlIGFuZCBtdWx0aXBsZVxua2VybmVsL21vZHVsZS9LY29uZmlnOjcxOlx0ICBtb2Rwcm9iZSBjYWxscyByYWNlIGNhbGxpbmcgZmluaXRfbW9kdWxlKCkgYXJvdW5kIHRoZSBzYW1lIHRpbWUgZm9yXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NzI6XHQgIGR1cGxpY2F0ZSBtb2R1bGVzLiBUaGUgZmluaXRfbW9kdWxlKCkgc3lzdGVtIGNhbGwgY2FuIGNvbnN1bWUgaW4gdGhlXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNzMtXHQgIHdvcnN0IGNhc2UgbW9yZSB0aGFuIHR3aWNlIHRoZSByZXNwZWN0aXZlIG1vZHVsZSBzaXplIGluIHZpcnR1YWxcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNzgtXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Nzk6XHQgIFRoaXMgZGVidWdnaW5nIGZhY2lsaXR5IHdpbGwgY3JlYXRlIHByX3dhcm4oKSBzcGxhdHMgZm9yIGR1cGxpY2F0ZVxua2VybmVsL21vZHVsZS9LY29uZmlnLTgwLVx0ICBtb2R1bGUgcmVxdWVzdHMgdG8gaGVscCBpZGVudGlmeSBpZiBtb2R1bGUgYXV0by1sb2FkaW5nIG1heSBiZSB0aGVcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODQtXHQgIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBtb2R1bGUgdG8gYSBzaW5nbGUgcmVxdWVzdC4gWW91IGNhbiBib290IHdpdGhcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo4NTpcdCAgdGhlIG1vZHVsZS5lbmFibGVfZHVwc190cmFjZT0xIGtlcm5lbCBwYXJhbWV0ZXIgdG8gdXNlIFdBUk5fT04oKVxua2VybmVsL21vZHVsZS9LY29uZmlnOjg2Olx0ICBpbnN0ZWFkIG9mIHRoZSBwcl93YXJuKCkuXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODctXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6ODg6XHQgIElmIHRoZSBmaXJzdCBtb2R1bGUgcmVxdWVzdCB1c2VkIHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpIHdlIGNhbm5vdFxua2VybmVsL21vZHVsZS9LY29uZmlnLTg5LVx0ICB1c2UgdGhhdCBhcyB0aGUgYW5jaG9yIHRvIHdhaXQgZm9yIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMsIHNpbmNlXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6OTA6XHQgIHVzZXJzIG9mIHJlcXVlc3RfbW9kdWxlKCkgZG8gd2FudCBhIHByb3BlciByZXR1cm4gdmFsdWUuIElmIGEgY2FsbFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkxOlx0ICBmb3IgdGhlIHNhbWUgbW9kdWxlIGhhcHBlbmVkIGVhcmxpZXIgd2l0aCByZXF1ZXN0X21vZHVsZSgpIHRob3VnaCxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo5MjpcdCAgdGhlbiBhIGR1cGxpY2F0ZSByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3b3VsZCBiZSBkZXRlY3RlZC4gVGhlXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6OTM6XHQgIG5vbi13YWl0IHJlcXVlc3RfbW9kdWxlKCkgY2FsbCBpcyBzeW5jaHJvbm91cyBhbmQgd2FpdHMgdW50aWwgbW9kcHJvYmVcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05NC1cdCAgY29tcGxldGVzLiBTdWJzZXF1ZW50IGF1dG8tbG9hZGluZyByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgbW9kdWxlIGRvXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6OTU6XHQgIG5vdCB0cmlnZ2VyIGEgbmV3IGZpbml0X21vZHVsZSgpIGNhbGxzIGFuZCBkbyBub3Qgc3RyYWluIHZpcnR1YWxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05Ni1cdCAgbWVtb3J5LCBhbmQgc28gYXMgc29vbiBhcyBtb2Rwcm9iZSBzdWNjZXNzZnVsbHkgY29tcGxldGVzIHdlIHJlbW92ZVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMDItXHQgIGFidXNlIHdhcyBkdWUgdG8gbW9kdWxlIGF1dG8tbG9hZGluZy4gVGhlc2UgaXNzdWVzIGFyZSBjdXJyZW50bHkgb25seVxua2VybmVsL21vZHVsZS9LY29uZmlnOjEwMzpcdCAga25vd24gdG8gb2NjdXIgb24gc3lzdGVtcyB3aXRoIG1hbnkgQ1BVcyAob3ZlciA0MDApIGFuZCBpcyBsaWtlbHkgdGhlXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTA0LVx0ICByZXN1bHQgb2YgdWRldiBpc3N1aW5nIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMgZm9yIGVhY2ggQ1BVLCBhbmQgc29cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTEyPWNvbmZpZyBNT0RVTEVfREVCVUdfQVVUT0xPQURfRFVQU19UUkFDRVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMTYtXHQgIEVuYWJsaW5nIHRoaXMgd2lsbCBmb3JjZSBhIGZ1bGwgc3RhY2sgdHJhY2UgZm9yIGR1cGxpY2F0ZSBtb2R1bGVcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxMTc6XHQgIGF1dG8tbG9hZGluZyByZXF1ZXN0cyB1c2luZyBXQVJOX09OKCkgaW5zdGVhZCBvZiBwcl93YXJuKCkuIFlvdVxua2VybmVsL21vZHVsZS9LY29uZmlnLTExOC1cdCAgc2hvdWxkIGtlZXAgdGhpcyBkaXNhYmxlZCBhdCBhbGwgdGltZXMgdW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXJcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTI0PWNvbmZpZyBNT0RVTEVfRk9SQ0VfTE9BRFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMjgtXHQgIEFsbG93IGxvYWRpbmcgb2YgbW9kdWxlcyB3aXRob3V0IHZlcnNpb24gaW5mb3JtYXRpb24gKGllLiBtb2Rwcm9iZVxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOTpcdCAgLS1mb3JjZSkuICBGb3JjZWQgbW9kdWxlIGxvYWRpbmcgc2V0cyB0aGUgJiMzOTtGJiMzOTsgKGZvcmNlZCkgdGFpbnQgZmxhZyBhbmRcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzAtXHQgIGlzIHVzdWFsbHkgYSByZWFsbHkgYmFkIGlkZWEuXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTEzMj1jb25maWcgTU9EVUxFX1VOTE9BRFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzYtXHQgIG1vZHVsZXMgKG5vdGUgdGhhdCBzb21lIG1vZHVsZXMgbWF5IG5vdCBiZSB1bmxvYWRhYmxlXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MTM3Olx0ICBhbnl3YXkpLCB3aGljaCBtYWtlcyB5b3VyIGtlcm5lbCBzbWFsbGVyLCBmYXN0ZXJcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzgtXHQgIGFuZCBzaW1wbGVyLiAgSWYgdW5zdXJlLCBzYXkgWS5cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTQwPWNvbmZpZyBNT0RVTEVfRk9SQ0VfVU5MT0FEXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTE0Ni1cdCAgd2l0aG91dCB3YWl0aW5nIGZvciBhbnlvbmUgdG8gc3RvcCB1c2luZyBpdCAodXNpbmcgdGhlIC1mIG9wdGlvbiB0b1xua2VybmVsL21vZHVsZS9LY29uZmlnOjE0NzpcdCAgcm1tb2QpLiAgVGhpcyBpcyBtYWlubHkgZm9yIGtlcm5lbCBkZXZlbG9wZXJzIGFuZCBkZXNwZXJhdGUgdXNlcnMuXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTQ4LVx0ICBJZiB1bnN1cmUsIHNheSBOLlxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xNTA9Y29uZmlnIE1PRFVMRV9VTkxPQURfVEFJTlRfVFJBQ0tJTkdcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTU2LVx0ICBtb2R1bGUgdGhhdCB0YWludGVkIHRoZSBrZXJuZWwuIEluIGFkZGl0aW9uIHRvIGRpc3BsYXlpbmcgYVxua2VybmVsL21vZHVsZS9LY29uZmlnOjE1NzpcdCAgbGlzdCBvZiBsaW5rZWQgKG9yIGxvYWRlZCkgbW9kdWxlcyBlLmcuIG9uIGRldGVjdGlvbiBvZiBhIGJhZFxua2VybmVsL21vZHVsZS9LY29uZmlnOjE1ODpcdCAgcGFnZSAoc2VlIGJhZF9wYWdlKCkpLCB0aGUgYWZvcmVtZW50aW9uZWQgZGV0YWlscyBhcmUgYWxzb1xua2VybmVsL21vZHVsZS9LY29uZmlnLTE1OS1cdCAgc2hvd24uIElmIHVuc3VyZSwgc2F5IE4uXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTE2MT1jb25maWcgTU9EVkVSU0lPTlNcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTY3LVx0ICBjb21waWxlZCBmb3IgZGlmZmVyZW50IGtlcm5lbHMsIGJ5IGFkZGluZyBlbm91Z2ggaW5mb3JtYXRpb25cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNjg6XHQgIHRvIHRoZSBtb2R1bGVzIHRvIChob3BlZnVsbHkpIHNwb3QgYW55IGNoYW5nZXMgd2hpY2ggd291bGRcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xNjktXHQgIG1ha2UgdGhlbSBpbmNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsIHlvdSBhcmUgcnVubmluZy4gIElmXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTE4MT1jb25maWcgR0VOS1NZTVNcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxODI6XHRib29sIFwmIzM0O2dlbmtzeW1zIChmcm9tIHNvdXJjZSBjb2RlKVwmIzM0O1xua2VybmVsL21vZHVsZS9LY29uZmlnLTE4My1cdGhlbHBcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTg5PWNvbmZpZyBHRU5EV0FSRktTWU1TXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MTkwOlx0Ym9vbCBcJiMzNDtnZW5kd2FyZmtzeW1zIChmcm9tIGRlYnVnZ2luZyBpbmZvcm1hdGlvbilcJiMzNDtcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xOTEtXHRkZXBlbmRzIG9uIERFQlVHX0lORk9cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTk3LVx0IyBYODYsIHJlcXVpcmVzIHBhaG9sZSBiZWZvcmUgY29tbWl0IDQ3ZGNiNTM0ZTI1MyAoXCYjMzQ7YnRmX2VuY29kZXI6IFN0b3Bcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTg6XHQjIGluZGV4aW5nIHN5bWJvbHMgZm9yIFZBUnNcJiMzNDspIG9yIGFmdGVyIGNvbW1pdCA5ODEwNzU4MDAzY2UgKFwmIzM0O2J0Zl9lbmNvZGVyOlxua2VybmVsL21vZHVsZS9LY29uZmlnOjE5OTpcdCMgVmVyaWZ5IDAgYWRkcmVzcyBEV0FSRiB2YXJpYWJsZXMgYXJlIGluIEVMRiBzZWN0aW9uXCYjMzQ7KS5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yMDAtXHRkZXBlbmRzIG9uICFYODYgfHwgIURFQlVHX0lORk9fQlRGIHx8IFBBSE9MRV9WRVJTSU9OIFx1MDAzYyAxMjggfHwgUEFIT0xFX1ZFUlNJT04gXHUwMDNlIDEyOVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yNDE9Y29uZmlnIE1PRFVMRV9TUkNWRVJTSU9OX0FMTFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yNDgtXHQgIG90aGVycyBzb21ldGltZXMgY2hhbmdlIHRoZSBtb2R1bGUgc291cmNlIHdpdGhvdXQgdXBkYXRpbmdcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoyNDk6XHQgIHRoZSB2ZXJzaW9uKS4gIFdpdGggdGhpcyBvcHRpb24sIHN1Y2ggYSBcJiMzNDtzcmN2ZXJzaW9uXCYjMzQ7IGZpZWxkXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMjUwLVx0ICB3aWxsIGJlIGNyZWF0ZWQgZm9yIGFsbCBtb2R1bGVzLiAgSWYgdW5zdXJlLCBzYXkgTi5cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MjUyPWNvbmZpZyBNT0RVTEVfU0lHXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTI3MC1cdCAgbW9kdWxlIERPRVMgTk9UIGdldCBzdHJpcHBlZCBhZnRlciBiZWluZyBzaWduZWQuICBUaGlzIGluY2x1ZGVzIHRoZVxua2VybmVsL21vZHVsZS9LY29uZmlnOjI3MTpcdCAgZGVidWdpbmZvIHN0cmlwIGRvbmUgYnkgc29tZSBwYWNrYWdlcnMgKHN1Y2ggYXMgcnBtYnVpbGQpIGFuZFxua2VybmVsL21vZHVsZS9LY29uZmlnLTI3Mi1cdCAgaW5jbHVzaW9uIGludG8gYW4gaW5pdHJhbWZzIHRoYXQgd2FudHMgdGhlIG1vZHVsZSBzaXplIHJlZHVjZWQuXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTQwNj1jb25maWcgTU9EVUxFX0FMTE9XX01JU1NJTkdfTkFNRVNQQUNFX0lNUE9SVFNcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDA4LVx0aGVscFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQwOTpcdCAgU3ltYm9scyBleHBvcnRlZCB3aXRoIEVYUE9SVF9TWU1CT0xfTlMqKCkgYXJlIGNvbnNpZGVyZWQgZXhwb3J0ZWQgaW5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MTAtXHQgIGEgbmFtZXNwYWNlLiBBIG1vZHVsZSB0aGF0IG1ha2VzIHVzZSBvZiBhIHN5bWJvbCBleHBvcnRlZCB3aXRoIHN1Y2ggYVxua2VybmVsL21vZHVsZS9LY29uZmlnOjQxMTpcdCAgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIHRvIGltcG9ydCB0aGUgbmFtZXNwYWNlIHZpYSBNT0RVTEVfSU1QT1JUX05TKFwmIzM0O1wmIzM0OykuXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDEyLVx0ICBUaGVyZSBpcyBubyB0ZWNobmljYWwgcmVhc29uIHRvIGVuZm9yY2UgY29ycmVjdCBuYW1lc3BhY2UgaW1wb3J0cyxcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9NDE5PWNvbmZpZyBNT0RQUk9CRV9QQVRIXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTQyOC1cdCAgcmVtb3ZlcyB0aGUga2VybmVsJiMzOTtzIGFiaWxpdHkgdG8gcmVxdWVzdCBtb2R1bGVzIChidXRcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0Mjk6XHQgIHVzZXJzcGFjZSBjYW4gc3RpbGwgbG9hZCBtb2R1bGVzIGV4cGxpY2l0bHkpLlxua2VybmVsL21vZHVsZS9LY29uZmlnLTQzMC1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz00MzE9Y29uZmlnIFRSSU1fVU5VU0VEX0tTWU1TXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTQzNC1cdCAgVGhlIGtlcm5lbCBhbmQgc29tZSBtb2R1bGVzIG1ha2UgbWFueSBzeW1ib2xzIGF2YWlsYWJsZSBmb3Jcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0MzU6XHQgIG90aGVyIG1vZHVsZXMgdG8gdXNlIHZpYSBFWFBPUlRfU1lNQk9MKCkgYW5kIHZhcmlhbnRzLiBEZXBlbmRpbmdcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MzYtXHQgIG9uIHRoZSBzZXQgb2YgbW9kdWxlcyBiZWluZyBzZWxlY3RlZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00NDAtXHQgIHRoZSBidWlsZC4gSW4gdHVybiwgdGhpcyBwcm92aWRlcyB0aGUgY29tcGlsZXIgbW9yZSBvcHBvcnR1bml0aWVzXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NDQxOlx0ICAoZXNwZWNpYWxseSB3aGVuIHVzaW5nIExUTykgZm9yIG9wdGltaXppbmcgdGhlIGNvZGUgYW5kIHJlZHVjaW5nXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDQyLVx0ICBiaW5hcnkgc2l6ZS4gIFRoaXMgbWlnaHQgaGF2ZSBzb21lIHNlY3VyaXR5IGFkdmFudGFnZXMgYXMgd2VsbC5cbi0tXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlPTEyPW9iai15ICYjNDM7PSBrbW9kLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTKSAmIzQzOz0gZHVwcy5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19NT0RVTEVfREVDT01QUkVTUykgJiM0Mzs9IGRlY29tcHJlc3Mub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTU9EVUxFX1NJRykgJiM0Mzs9IHNpZ25pbmcub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTElWRVBBVENIKSAmIzQzOz0gbGl2ZXBhdGNoLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01PRFVMRVNfVFJFRV9MT09LVVApICYjNDM7PSB0cmVlX2xvb2t1cC5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19ERUJVR19LTUVNTEVBSykgJiM0Mzs9IGRlYnVnX2ttZW1sZWFrLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0tBTExTWU1TKSAmIzQzOz0ga2FsbHN5bXMub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Nmcy5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19TWVNGUykgJiM0Mzs9IHN5c2ZzLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0tHREJfS0RCKSAmIzQzOz0ga2RiLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX01PRFZFUlNJT05TKSAmIzQzOz0gdmVyc2lvbi5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NT0RVTEVfVU5MT0FEX1RBSU5UX1RSQUNLSU5HKSAmIzQzOz0gdHJhY2tpbmcub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTU9EVUxFX1NUQVRTKSAmIzQzOz0gc3RhdHMub1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYz0xMj12b2lkIGttZW1sZWFrX2xvYWRfbW9kdWxlKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxMzpcdFx0XHQgIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTQte1xua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jLTE1LVx0Lyogb25seSBzY2FuIHdyaXRhYmxlLCBub24tZXhlY3V0YWJsZSBzZWN0aW9ucyAqL1xua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjE2Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNy1cdFx0aWYgKHR5cGUgIT0gTU9EX0RBVEEgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTU9EX0lOSVRfREFUQSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxODpcdFx0ICAgICFtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveClcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxOTpcdFx0XHRrbWVtbGVha19ub19zY2FuKG1vZC1cdTAwM2VtZW1bdHlwZV0uYmFzZSk7XG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMjAtXHR9XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTYtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzpzdGF0aWMgaW50IG1vZHVsZV9leHRlbmRfbWF4X3BhZ2VzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBleHRlbnQpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xOC17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjItXHRuZXdfcGFnZXMgPSBrdnJlYWxsb2MoaW5mby1cdTAwM2VwYWdlcyxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzOlx0XHRcdCAgICAgIHNpemVfbXVsKG5ld19tYXgsIHNpemVvZigqaW5mby1cdTAwM2VwYWdlcykpLFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQ6XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNTpcdGlmICghbmV3X3BhZ2VzKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzQ6c3RhdGljIHN0cnVjdCBwYWdlICptb2R1bGVfZ2V0X25leHRfcGFnZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzUte1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM4LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mzk6XHRpZiAoaW5mby1cdTAwM2VtYXhfcGFnZXMgPT0gaW5mby1cdTAwM2V1c2VkX3BhZ2VzKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0MDpcdFx0ZXJyb3IgPSBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhpbmZvLCBpbmZvLVx1MDAzZXVzZWRfcGFnZXMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDE6XHRcdGlmIChlcnJvcilcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjQyOlx0XHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTQzLVx0fVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNDQtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0NTpcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjQ2Olx0aWYgKCFwYWdlKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDc6XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNDgtXG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNjItICovXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo2MzpzdGF0aWMgc2l6ZV90IG1vZHVsZV9nemlwX2hlYWRlcl9sZW4oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IHNpemUpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy02NC17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNjctXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo2ODpcdGlmIChzaXplIFx1MDAzYyBsZW4gfHwgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy02OS1cdFx0cmV0dXJuIDA7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy03MC1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjcxOlx0aWYgKGJ1ZlszXSBcdTAwMjYgMHgwOCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNzItXHRcdGRvIHtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy03Ni1cdFx0XHQgKi9cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjc3Olx0XHRcdGlmIChsZW4gPT0gc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTc4LVx0XHRcdFx0cmV0dXJuIDA7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo3OTpcdFx0fSB3aGlsZSAoYnVmW2xlbiYjNDM7JiM0MztdICE9ICYjMzk7XFwwJiMzOTspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODAtXHR9XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9ODU9c3RhdGljIHNzaXplX3QgbW9kdWxlX2d6aXBfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6ODY6XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODcte1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTkzLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6OTQ6XHRnemlwX2hkcl9sZW4gPSBtb2R1bGVfZ3ppcF9oZWFkZXJfbGVuKGJ1Ziwgc2l6ZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo5NTpcdGlmICghZ3ppcF9oZHJfbGVuKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo5NjpcdFx0cHJfZXJyKFwmIzM0O25vdCBhIGd6aXAgY29tcHJlc3NlZCBtb2R1bGVcXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtOTctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEwMi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEwMzpcdHMud29ya3NwYWNlID0ga3ZtYWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwgR0ZQX0tFUk5FTCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDQ6XHRpZiAoIXMud29ya3NwYWNlKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTA1LVx0XHRyZXR1cm4gLUVOT01FTTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEwNi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEwNzpcdHJjID0gemxpYl9pbmZsYXRlSW5pdDIoXHUwMDI2cywgLU1BWF9XQklUUyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDg6XHRpZiAocmMgIT0gWl9PSykge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTA5Olx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgZGVjb21wcmVzc29yOiAlZFxcblwmIzM0OywgcmMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTEwLVx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExNC1cdGRvIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExNTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtb2R1bGVfZ2V0X25leHRfcGFnZShpbmZvKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExNi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExNzpcdFx0aWYgKElTX0VSUihwYWdlKSkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTE4Olx0XHRcdHJldHZhbCA9IFBUUl9FUlIocGFnZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMTktXHRcdFx0Z290byBvdXRfaW5mbGF0ZV9lbmQ7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTIxLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTIyOlx0XHRzLm5leHRfb3V0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTIzLVx0XHRzLmF2YWlsX291dCA9IFBBR0VfU0laRTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEyNDpcdFx0cmMgPSB6bGliX2luZmxhdGUoXHUwMDI2cywgMCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMjU6XHRcdGt1bm1hcF9sb2NhbChzLm5leHRfb3V0KTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyNi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyNy1cdFx0bmV3X3NpemUgJiM0Mzs9IFBBR0VfU0laRSAtIHMuYXZhaWxfb3V0O1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTI4Olx0fSB3aGlsZSAocmMgPT0gWl9PSyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMjktXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzA6XHRpZiAocmMgIT0gWl9TVFJFQU1fRU5EKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzE6XHRcdHByX2VycihcJiMzNDtkZWNvbXByZXNzaW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxcblwmIzM0OywgcmMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTMyLVx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEzOC1vdXRfaW5mbGF0ZV9lbmQ6XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzk6XHR6bGliX2luZmxhdGVFbmQoXHUwMDI2cyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNDAtb3V0Olxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTQxOlx0a3ZmcmVlKHMud29ya3NwYWNlKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE0Mi1cdHJldHVybiByZXR2YWw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MTQ5PXN0YXRpYyBzc2l6ZV90IG1vZHVsZV94el9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNTA6XHRcdFx0XHQgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE1MS17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTU4LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTU5Olx0aWYgKHNpemUgXHUwMDNjIHNpemVvZihzaWduYXR1cmUpIHx8XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNjA6XHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2MTpcdFx0cHJfZXJyKFwmIzM0O25vdCBhbiB4eiBjb21wcmVzc2VkIG1vZHVsZVxcblwmIzM0Oyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNjItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE2NC1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2NTpcdHh6X2RlYyA9IHh6X2RlY19pbml0KFhaX0RZTkFMTE9DLCAodTMyKS0xKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2NjpcdGlmICgheHpfZGVjKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTY3LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNzMtXHRkbyB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzQ6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gbW9kdWxlX2dldF9uZXh0X3BhZ2UoaW5mbyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNzUtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzY6XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE3NzpcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTc4LVx0XHRcdGdvdG8gb3V0O1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4MC1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE4MTpcdFx0eHpfYnVmLm91dCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4Mi1cdFx0eHpfYnVmLm91dF9wb3MgPSAwO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTgzLVx0XHR4el9idWYub3V0X3NpemUgPSBQQUdFX1NJWkU7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxODQ6XHRcdHh6X3JldCA9IHh6X2RlY19ydW4oeHpfZGVjLCBcdTAwMjZ4el9idWYpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTg1Olx0XHRrdW5tYXBfbG9jYWwoeHpfYnVmLm91dCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODYtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODctXHRcdG5ld19zaXplICYjNDM7PSB4el9idWYub3V0X3Bvcztcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE4ODpcdH0gd2hpbGUgKHh6X2J1Zi5vdXRfcG9zID09IFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgeHpfcmV0ID09IFhaX09LKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4OS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE5MDpcdGlmICh4el9yZXQgIT0gWFpfU1RSRUFNX0VORCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTkxOlx0XHRwcl9lcnIoXCYjMzQ7ZGVjb21wcmVzc2lvbiBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcXG5cJiMzNDssIHh6X3JldCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xOTItXHRcdHJldHZhbCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTk4LSBvdXQ6XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxOTk6XHR4el9kZWNfZW5kKHh6X2RlYyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMDAtXHRyZXR1cm4gcmV0dmFsO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jPTIwNz1zdGF0aWMgc3NpemVfdCBtb2R1bGVfenN0ZF9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMDg6XHRcdFx0XHQgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIwOS17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjIwLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjIxOlx0aWYgKHNpemUgXHUwMDNjIHNpemVvZihzaWduYXR1cmUpIHx8XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMjI6XHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIyMzpcdFx0cHJfZXJyKFwmIzM0O25vdCBhIHpzdGQgY29tcHJlc3NlZCBtb2R1bGVcXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjI0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMzAtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzE6XHRyZXQgPSB6c3RkX2dldF9mcmFtZV9oZWFkZXIoXHUwMDI2aGVhZGVyLCB6c3RkX2J1Zi5zcmMsIHpzdGRfYnVmLnNpemUpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjMyOlx0aWYgKHJldCAhPSAwKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzM6XHRcdHByX2VycihcJiMzNDtaU1RELWNvbXByZXNzZWQgZGF0YSBoYXMgYW4gaW5jb21wbGV0ZSBmcmFtZSBoZWFkZXJcXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjM0LVx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIzNi1cdH1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzNzpcdGlmIChoZWFkZXIud2luZG93U2l6ZSBcdTAwM2UgKDEgXHUwMDNjXHUwMDNjIFpTVERfV0lORE9XTE9HX01BWCkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzODpcdFx0cHJfZXJyKFwmIzM0O1pTVEQtY29tcHJlc3NlZCBkYXRhIGhhcyB0b28gbGFyZ2UgYSB3aW5kb3cgc2l6ZVxcblwmIzM0Oyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMzktXHRcdHJldHZhbCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjQyLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQzOlx0d2tzcF9zaXplID0genN0ZF9kc3RyZWFtX3dvcmtzcGFjZV9ib3VuZChoZWFkZXIud2luZG93U2l6ZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNDQ6XHR3a3NwID0ga3ZtYWxsb2Mod2tzcF9zaXplLCBHRlBfS0VSTkVMKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI0NTpcdGlmICghd2tzcCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjQ2LVx0XHRyZXR2YWwgPSAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI0OS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1MDpcdGRzdHJlYW0gPSB6c3RkX2luaXRfZHN0cmVhbShoZWFkZXIud2luZG93U2l6ZSwgd2tzcCwgd2tzcF9zaXplKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1MTpcdGlmICghZHN0cmVhbSkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjUyOlx0XHRwcl9lcnIoXCYjMzQ7Q2FuJiMzOTt0IGluaXRpYWxpemUgWlNURCBzdHJlYW1cXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjUzLVx0XHRyZXR2YWwgPSAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI1Ny1cdGRvIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1ODpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtb2R1bGVfZ2V0X25leHRfcGFnZShpbmZvKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI1OS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI2MDpcdFx0aWYgKElTX0VSUihwYWdlKSkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjYxOlx0XHRcdHJldHZhbCA9IFBUUl9FUlIocGFnZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNjItXHRcdFx0Z290byBvdXQ7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjY0LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjY1Olx0XHR6c3RkX2RlYy5kc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNjYtXHRcdHpzdGRfZGVjLnBvcyA9IDA7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjY4LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjY5Olx0XHRyZXQgPSB6c3RkX2RlY29tcHJlc3Nfc3RyZWFtKGRzdHJlYW0sIFx1MDAyNnpzdGRfZGVjLCBcdTAwMjZ6c3RkX2J1Zik7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzA6XHRcdGt1bm1hcF9sb2NhbCh6c3RkX2RlYy5kc3QpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjcxOlx0XHRyZXR2YWwgPSB6c3RkX2dldF9lcnJvcl9jb2RlKHJldCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzI6XHRcdGlmIChyZXR2YWwpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzMtXHRcdFx0YnJlYWs7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjc1LVx0XHRuZXdfc2l6ZSAmIzQzOz0genN0ZF9kZWMucG9zO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc2Olx0fSB3aGlsZSAoenN0ZF9kZWMucG9zID09IFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgcmV0ICE9IDApO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjc3LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc4Olx0aWYgKHJldHZhbCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc5Olx0XHRwcl9lcnIoXCYjMzQ7WlNURC1kZWNvbXByZXNzaW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxcblwmIzM0OywgcmV0dmFsKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI4MC1cdFx0cmV0dmFsID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yODYtIG91dDpcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI4NzpcdGt2ZnJlZSh3a3NwKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI4OC1cdHJldHVybiByZXR2YWw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjkzLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjk0OmludCBtb2R1bGVfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjk1LXtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMDctXHQgKi9cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMwODpcdG5fcGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgUEFHRV9TSVpFKSAqIDI7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMDk6XHRlcnJvciA9IG1vZHVsZV9leHRlbmRfbWF4X3BhZ2VzKGluZm8sIG5fcGFnZXMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzEwOlx0aWYgKGVycm9yKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzExLVx0XHRyZXR1cm4gZXJyb3I7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMTItXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTM6XHRkYXRhX3NpemUgPSBNT0RVTEVfREVDT01QUkVTU19GTihpbmZvLCBidWYsIHNpemUpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzE0Olx0aWYgKGRhdGFfc2l6ZSBcdTAwM2MgMCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzE1LVx0XHRlcnJvciA9IGRhdGFfc2l6ZTtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMTgtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTk6XHRpbmZvLVx1MDAzZWhkciA9IHZtYXAoaW5mby1cdTAwM2VwYWdlcywgaW5mby1cdTAwM2V1c2VkX3BhZ2VzLCBWTV9NQVAsIFBBR0VfS0VSTkVMKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMyMDpcdGlmICghaW5mby1cdTAwM2VoZHIpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMyMS1cdFx0ZXJyb3IgPSAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMyOC1lcnI6XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMjk6XHRtb2R1bGVfZGVjb21wcmVzc19jbGVhbnVwKGluZm8pO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzMwLVx0cmV0dXJuIGVycm9yO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzMi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMzMzp2b2lkIG1vZHVsZV9kZWNvbXByZXNzX2NsZWFudXAoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzNC17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM2LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzM3Olx0aWYgKGluZm8tXHUwMDNlaGRyKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzM4Olx0XHR2dW5tYXAoaW5mby1cdTAwM2VoZHIpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM5LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzQwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2V1c2VkX3BhZ2VzOyBpJiM0MzsmIzQzOylcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MTpcdFx0X19mcmVlX3BhZ2UoaW5mby1cdTAwM2VwYWdlc1tpXSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNDItXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNDM6XHRrdmZyZWUoaW5mby1cdTAwM2VwYWdlcyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNDQtXG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MzUwPXN0YXRpYyBzc2l6ZV90IGNvbXByZXNzaW9uX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTE6XHRcdFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1Mi17XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTM6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIF9fc3RyaW5naWZ5KE1PRFVMRV9DT01QUkVTU0lPTikgXCYjMzQ7XFxuXCYjMzQ7KTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1NC19XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTUtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBtb2R1bGVfY29tcHJlc3Npb25fYXR0ciA9IF9fQVRUUl9STyhjb21wcmVzc2lvbik7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTctXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTg6c3RhdGljIGludCBfX2luaXQgbW9kdWxlX2RlY29tcHJlc3Nfc3lzZnNfaW5pdCh2b2lkKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzU5LXtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjItXHRlcnJvciA9IHN5c2ZzX2NyZWF0ZV9maWxlKFx1MDAyNm1vZHVsZV9rc2V0LVx1MDAzZWtvYmosXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNjM6XHRcdFx0XHQgIFx1MDAyNm1vZHVsZV9jb21wcmVzc2lvbl9hdHRyLmF0dHIpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzY0Olx0aWYgKGVycm9yKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzY1Olx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgJiMzOTtjb21wcmVzc2lvbiYjMzk7IGF0dHJpYnV0ZVwmIzM0Oyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjYtXG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzY4LX1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM2OTpsYXRlX2luaXRjYWxsKG1vZHVsZV9kZWNvbXByZXNzX3N5c2ZzX2luaXQpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzcwLSNlbmRpZlxuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTMwLSNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCBcJiMzNDttb2R1bGUuXCYjMzQ7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozMTpzdGF0aWMgYm9vbCBlbmFibGVfZHVwc190cmFjZSA9IElTX0VOQUJMRUQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTX1RSQUNFKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjMyOm1vZHVsZV9wYXJhbShlbmFibGVfZHVwc190cmFjZSwgYm9vbF9lbmFibGVfb25seSwgMDY0NCk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0zMy1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTM0LS8qIEEgbXV0ZXgtcHJvdGVjdGVkIGxpc3Qgb2YgYWN0aXZlIGttb2QgcmVxdWVzdHMuICovXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozNTpzdGF0aWMgREVGSU5FX01VVEVYKGttb2RfZHVwX211dGV4KTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjM2OnN0YXRpYyBMSVNUX0hFQUQoZHVwX2ttb2RfcmVxcyk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0zNy1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jPTM4PXN0cnVjdCBrbW9kX2R1cF9yZXEge1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTQ2LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NDc6c3RhdGljIHZvaWQgZ2V0X2ttb2RfcmVxKHN0cnVjdCBrbW9kX2R1cF9yZXEgKmttb2RfcmVxKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNDgte1xua2VybmVsL21vZHVsZS9kdXBzLmM6NDk6XHRyZWZjb3VudF9pbmMoXHUwMDI2a21vZF9yZXEtXHUwMDNlcmVmY291bnQpO1xua2VybmVsL21vZHVsZS9kdXBzLmMtNTAtfVxua2VybmVsL21vZHVsZS9kdXBzLmMtNTEtXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1MjpzdGF0aWMgdm9pZCBwdXRfa21vZF9yZXEoc3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy01My17XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1NDpcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a21vZF9yZXEtXHUwMDNlcmVmY291bnQpKVxua2VybmVsL21vZHVsZS9kdXBzLmM6NTU6XHRcdGtmcmVlKGttb2RfcmVxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU2LX1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU3LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NTg6REVGSU5FX0ZSRUUocHV0X2ttb2RfcmVxLCBzdHJ1Y3Qga21vZF9kdXBfcmVxICosIGlmIChfVCkgcHV0X2ttb2RfcmVxKF9UKSlcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU5LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NjA6c3RhdGljIHN0cnVjdCBrbW9kX2R1cF9yZXEgKmttb2RfZHVwX3JlcXVlc3RfbG9va3VwKGNoYXIgKm1vZHVsZV9uYW1lKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNjEte1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTYzLVxua2VybmVsL21vZHVsZS9kdXBzLmM6NjQ6XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmttb2RfZHVwX211dGV4KTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTY1LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NjY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGttb2RfcmVxLCBcdTAwMjZkdXBfa21vZF9yZXFzLCBsaXN0KSB7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo2NzpcdFx0aWYgKCFzdHJjbXAoa21vZF9yZXEtXHUwMDNlbmFtZSwgbW9kdWxlX25hbWUpKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNjgtXHRcdFx0cmV0dXJuIGttb2RfcmVxO1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTczLVxua2VybmVsL21vZHVsZS9kdXBzLmM6NzQ6c3RhdGljIHZvaWQga21vZF9kdXBfcmVxdWVzdF9kZWxldGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNzUte1xua2VybmVsL21vZHVsZS9kdXBzLmMtNzYtXHRzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX3JlcTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjc3Olx0a21vZF9yZXEgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3Qga21vZF9kdXBfcmVxLCBkZWxldGVfd29yayk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy03OC1cbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy04My1cdCAqIG1vZHVsZSBpcyBsb2FkZWQgc28gd2lsbCBqdXN0IHJldHVybiAwIHJpZ2h0IGF3YXkuIFRoZXJlIGlzIHN0aWxsXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo4NDpcdCAqIGEgc21hbGwgY2hhbmNlIHJpZ2h0IGFmdGVyIHdlIGRlbGV0ZSB0aGlzIGVudHJ5IG5ldyByZXF1ZXN0X21vZHVsZSgpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy04NS1cdCAqIGNhbGxzIG1heSBoYXBwZW4gYWZ0ZXIgdGhhdCwgdGhleSBjYW4gaGFwcGVuLiBUaGVzZSBoZXVyaXN0aWNzXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo4NjpcdCAqIGFyZSB0byBwcm90ZWN0IGZpbml0X21vZHVsZSgpIGFidXNlIGZvciBhdXRvLWxvYWRpbmcsIGlmIG1vZHVsZXNcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTg3LVx0ICogYXJlIHN0aWxsIHRyeWlnbiB0byBhdXRvLWxvYWQgZXZlbiBpZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGxvYWRlZCxcbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05MS1cdCAqL1xua2VybmVsL21vZHVsZS9kdXBzLmM6OTI6XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmttb2RfZHVwX211dGV4KVxua2VybmVsL21vZHVsZS9kdXBzLmM6OTM6XHRcdGxpc3RfZGVsKFx1MDAyNmttb2RfcmVxLVx1MDAzZWxpc3QpO1xua2VybmVsL21vZHVsZS9kdXBzLmMtOTQtXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo5NTpcdHB1dF9rbW9kX3JlcShrbW9kX3JlcSk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05Ni19XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05Ny1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjk4OnN0YXRpYyBzdHJ1Y3Qga21vZF9kdXBfcmVxICphbGxvY19rbW9kX3JlcShjb25zdCBjaGFyICptb2R1bGVfbmFtZSlcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTk5LXtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwMDpcdHN0cnVjdCBrbW9kX2R1cF9yZXEgKmttb2RfcmVxID0ga3phbGxvY19vYmooKmttb2RfcmVxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEwMS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwMjpcdGlmICgha21vZF9yZXEpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMDMtXHRcdHJldHVybiBOVUxMO1xua2VybmVsL21vZHVsZS9kdXBzLmMtMTA0LVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTA1Olx0cmVmY291bnRfc2V0KFx1MDAyNmttb2RfcmVxLVx1MDAzZXJlZmNvdW50LCAxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwNjpcdHN0cnNjcHkoa21vZF9yZXEtXHUwMDNlbmFtZSwgbW9kdWxlX25hbWUpO1xua2VybmVsL21vZHVsZS9kdXBzLmM6MTA3Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2a21vZF9yZXEtXHUwMDNlZGVsZXRlX3dvcmssIGttb2RfZHVwX3JlcXVlc3RfZGVsZXRlKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwODpcdGluaXRfY29tcGxldGlvbihcdTAwMjZrbW9kX3JlcS1cdTAwM2VmaXJzdF9yZXFfZG9uZSk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMDktXHRyZXR1cm4ga21vZF9yZXE7XG4tLVxua2VybmVsL21vZHVsZS9kdXBzLmMtMTExLVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTEyOmJvb2wga21vZF9kdXBfcmVxdWVzdF9leGlzdHNfd2FpdChjaGFyICptb2R1bGVfbmFtZSwgYm9vbCB3YWl0LCBpbnQgKmR1cF9yZXQpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMTMte1xua2VybmVsL21vZHVsZS9kdXBzLmM6MTE0Olx0c3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEgX19mcmVlKHB1dF9rbW9kX3JlcSkgPSBOVUxMO1xua2VybmVsL21vZHVsZS9kdXBzLmMtMTE1LVx0aW50IHJldDtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExNi1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjExNzpcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a21vZF9kdXBfbXV0ZXgpIHtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExOC1cdFx0c3RydWN0IGttb2RfZHVwX3JlcSAqbmV3X2ttb2RfcmVxO1xua2VybmVsL21vZHVsZS9kdXBzLmMtMTE5LVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTIwOlx0XHRrbW9kX3JlcSA9IGttb2RfZHVwX3JlcXVlc3RfbG9va3VwKG1vZHVsZV9uYW1lKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEyMTpcdFx0aWYgKGttb2RfcmVxKSB7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMjI6XHRcdFx0Z2V0X2ttb2RfcmVxKGttb2RfcmVxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEyMy1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMjctXHRcdCAqIElmIHRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgY2FtZSB0aHJvdWdoIGZvciBhIG1vZHVsZVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTI4Olx0XHQgKiB3YXMgd2l0aCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3ZSBjYW5ub3Qgd2FpdCBmb3IgaXRcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEyOS1cdFx0ICogYW5kIHNoYXJlIGl0cyByZXR1cm4gdmFsdWUgd2l0aCBvdGhlciB1c2VycyB3aGljaCBtYXlcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEzMDpcdFx0ICogaGF2ZSB1c2VkIHJlcXVlc3RfbW9kdWxlKCkgYW5kIG5lZWQgYSBwcm9wZXIgcmV0dXJuIHZhbHVlXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzEtXHRcdCAqIHNvIGp1c3Qgc2tpcCB1c2luZyB0aGVtIGFzIGFuIGFuY2hvci5cbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzMtXHRcdCAqIElmIGEgcHJpb3IgcmVxdWVzdCB0byB0aGlzIG9uZSBjYW1lIHRocm91Z2ggd2l0aFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTM0Olx0XHQgKiByZXF1ZXN0X21vZHVsZSgpIHRob3VnaCwgdGhlbiBhIHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzUtXHRcdCAqIHdvdWxkIGJlbmVmaXQgZnJvbSBkdXBsaWNhdGUgZGV0ZWN0aW9uLlxua2VybmVsL21vZHVsZS9kdXBzLmMtMTM2LVx0XHQgKi9cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEzNzpcdFx0aWYgKCF3YWl0KSB7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMzg6XHRcdFx0cHJfZGVidWcoXCYjMzQ7TmV3IHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpIGZvciAlcyAtLSBjYW5ub3QgdHJhY2sgZHVwbGljYXRlcyBmb3IgdGhpcyByZXF1ZXN0XFxuXCYjMzQ7LCBtb2R1bGVfbmFtZSk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzktXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTE0NS1cdFx0ICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OTkKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IEtlcm5lbCBNb2R1bGUgTG9hZGluZyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUgcHJpbWFyaWx5IHdpdGhpbiBga2VybmVsL21vZHVsZS9tYWluLmNg4oCUZnVuY3Rpb25zIGxpa2UgYGluaXRfbW9kdWxlYCwgYGZpbml0X21vZHVsZWAsIGFuZCBgZGVsZXRlX21vZHVsZWDigJRhbG9uZyB3aXRoIGBsaWIvY29kZXRhZy5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY29kZXRhZyBhbGxvY2F0aW9uIChgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAsIGBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zYCwgYW5kIGBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uYCkuIFRoaXMgcG9pbnRzIHRvIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgRUxGIG1vZHVsZSBwYXJzaW5nIGFuZCBtb2R1bGUgbGlmZWN5Y2xlLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBgTU9EVUxFU2AgaXMgYSBnaXZlbiwgZXNzZW50aWFsIGZvciBtb2R1bGUgbG9hZGluZy4gSG93ZXZlciwgdGhlIGNyaXRpY2FsIG9uZSBoZXJlIGlzIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IGJyaW5ncyBpbiBhbGxvY190YWcgY29kZXRhZyBzdXBwb3J0LCB0aHVzIGBDT0RFX1RBR0dJTkdgLCBgUEFHRV9FWFRFTlNJT05gLCBhbmQgYFNMQUJfT0JKX0VYVGAuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIGNvbmZpcm0gdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kcyBvbiBgTU1VYCBhbmQgYFBST0NfRlNgLgoKTm93LCBkaWdnaW5nIGludG8gdGhlIGBXb3J0aEZ1enppbmdgIGFzc2Vzc21lbnQ6IHRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtb2R1bGUgbG9hZGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBob3cgRUxGIHNlY3Rpb25zIGFyZSBoYW5kbGVkLCBhbmQgdGhlIHJlbG9jYXRpb24gb2YgY29kZXRhZ3MgYW5kIHBlci1jcHUgc2VjdGlvbnMgaXMgY3J1Y2lhbC4gVGhlIG1vZGlmaWNhdGlvbnMgZW5jb21wYXNzIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBFTEYgc2VjdGlvbiBsYXlvdXQgKGBfX2xheW91dF9zZWN0aW9uc2AsIGBtb3ZlX21vZHVsZWAsIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYCwgYW5kIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCkgd2hpY2ggcmVsYXRlcyB0byBob3cgY29kZXRhZ3MgYW5kIHBlci1jcHUgc2VjdGlvbnMgYXJlIHRyYWNrZWQgYW5kIHJlbG9jYXRlZCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcuIE1lbW9yeSByZXNlcnZhdGlvbiBhbmQgcmVsZWFzZSB2aWEgYGFsbG9jX3RhZy5jYCwgYW5kIHRoZSBmYWxsYmFjayBoYW5kbGluZyBpZiB0YWdzIGFyZW4mIzM5O3QgYWRkcmVzc2FibGUsIHdoaWNoIGFyZSBrZXkgZHVyaW5nIGxvYWRpbmcgYW5kIHVubG9hZGluZy4KClRoaXMgZGlyZWN0bHkgaW1wbGljYXRlcyBob3cgRUxGIG1vZHVsZXMgYXJlIHBhcnNlZCwgbWVtb3J5IGFsbG9jYXRlZCwgYW5kIGluaXRpYWxpemVkL2NsZWFuZWQgdXAgd2hlbiBhIG1vZHVsZSBsb2Fkcy4gYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSYjMzk7bGwgZmxhZyBgV29ydGhGdXp6aW5nYCBhcyBgdHJ1ZWAgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtb2R1bGUgbG9hZGluZyBsb2dpYywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiBFTEYgc2VjdGlvbnMgYW5kIGNvZGV0YWdzIGR1cmluZyBtb2R1bGUgbGlmZWN5Y2xlLgoKVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTogYGluaXRfbW9kdWxlYCwgYGZpbml0X21vZHVsZWAsIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCwgYW5kIGBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zYC4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgTU9EVUxFU2AgYW5kIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4KCkkmIzM5O3ZlIHZlcmlmaWVkIGV2ZXJ5dGhpbmcg4oCTIGl0JiMzOTtzIGFsbCBhY2N1cmF0ZSBhbmQgY29uc2lzdGVudC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT0RVTEVTJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtmaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbiYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgY29yZSBrZXJuZWwgbW9kdWxlIGxvYWRpbmcgYW5kIGxheW91dCBsb2dpYyBmb3Igc3RhbmRhbG9uZSBzZWN0aW9ucyAocGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZ3MvYWxsb2MgdGFncykgYXMgd2VsbCBhcyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFnIHJlc2VydmF0aW9uIGZhbGxiYWNrIGhhbmRsaW5nIHdoZW4gdGFncyBhcmUgbm90IGFkZHJlc3NhYmxlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBsb2FkaW5nIHN5c2NhbGxzIChpbml0X21vZHVsZSBhbmQgZmluaXRfbW9kdWxlKSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luaXRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2Zpbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRUxGIHNlY3Rpb24gbGF5b3V0IGFuZCBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzdGFuZGFsb25lIG1vZHVsZSBzZWN0aW9ucyAoc3VjaCBhcyBwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFnL2FsbG9jX3RhZyBzZWN0aW9ucykgZHVyaW5nIG1vZHVsZSBsb2FkaW5nIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGFkanVzdHMgZXJyb3IgaGFuZGxpbmcgaW4gYG1tL2FsbG9jX3RhZy5jYC5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgbGVhdmUgc3RydWN0dXJlIHBhZGRpbmdzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gVGhlIHNlY3Rpb24gZGF0YSBjb3BpZWQgdmlhIGBtZW1jcHkoKWAgb3JpZ2luYXRlcyBmcm9tIGFscmVhZHktbG9hZGVkIEVMRiBpbWFnZSBidWZmZXJzLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZDcxMTRmODlmMmFmNzhmZWFkMzk3NjBlM2NlZmJjYTIxMWEyNDllCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDoyOTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IDk2Y2M5ODU2OGVlYTUuLjBjNmYzMmRkY2JmMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMzI1LDYgJiM0MzszMjUsOCBAQCBlbnVtIG1vZF9tZW1fdHlwZSB7CiAJTU9EX0lOSVRfUk9EQVRBLAogCiAJTU9EX01FTV9OVU1fVFlQRVMsCiYjNDM7CiYjNDM7CU1PRF9TVEFOREFMT05FID0gLTIsCiAJTU9EX0lOVkFMSUQgPSAtMSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaCBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaAppbmRleCAwNjExNjFjYzc5ZDkwLi40YzczODA3NGEyN2I4IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oCkBAIC0yOSw2ICYjNDM7MjksMTQgQEAKICNkZWZpbmUgU0hfRU5UU0laRV9UWVBFX01BU0sJKCgxVUwgJmx0OyZsdDsgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSkKICNkZWZpbmUgU0hfRU5UU0laRV9PRkZTRVRfTUFTSwkoKDFVTCAmbHQ7Jmx0OyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKQogCiYjNDM7LyoKJiM0MzsgKiBNYXJrZXIgZm9yIHNlY3Rpb25zIHdpdGggYSBzZXBhcmF0ZSBhbGxvY2F0aW9uLCB3aGljaCBhcmUgbm90IHBsYWNlZAomIzQzOyAqIGludG8gbW9kLSZndDttZW1bXS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFNIX0VOVFNJWkVfU1RBTkRBTE9ORQkJCQkJXAomIzQzOwkoKCh1bnNpZ25lZCBsb25nKU1PRF9TVEFOREFMT05FICZhbXA7IFNIX0VOVFNJWkVfVFlQRV9NQVNLKQlcCiYjNDM7CSAmbHQ7Jmx0OyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQpCiYjNDM7CiAvKiBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gYnkgbW9kdWxlX2ZsYWdzKCkgKi8KICNkZWZpbmUgTU9EVUxFX0ZMQUdTX0JVRl9TSVpFIChUQUlOVF9GTEFHU19DT1VOVCAmIzQzOyA0KQogCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IGMxYjM0ZGMxZTg5YWMuLjc2MDQ0OWRkYWIyMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0xNjE3LDE0ICYjNDM7MTYxNyw4IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogCQlpZiAoaW5mb3NlYyAmZ3Q7PSBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW0pCiAJCQljb250aW51ZTsKIAotCQkvKgotCQkgKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy4KLQkJICogQW4gZXhjZXB0aW9uIGlzIHRoZSBwZXJjcHUgc2VjdGlvbiwgd2hpY2ggaGFzIHNlcGFyYXRlIGFsbG9jYXRpb25zCi0JCSAqIGZvciBpbmRpdmlkdWFsIENQVXMuIFdlIHJlbG9jYXRlIHRoZSBwZXJjcHUgc2VjdGlvbiBpbiB0aGUgaW5pdGlhbAotCQkgKiBFTEYgdGVtcGxhdGUgYW5kIHN1YnNlcXVlbnRseSBjb3B5IGl0IHRvIHRoZSBwZXItQ1BVIGRlc3RpbmF0aW9ucy4KLQkJICovCi0JCWlmICghKGluZm8tJmd0O3NlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSAmYW1wOyZhbXA7Ci0JCSAgICAoIWluZm9zZWMgfHwgaW5mb3NlYyAhPSBpbmZvLSZndDtpbmRleC5wY3B1KSkKJiM0MzsJCS8qIERvbiYjMzk7dCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zLiAqLwomIzQzOwkJaWYgKCEoaW5mby0mZ3Q7c2VjaGRyc1tpbmZvc2VjXS5zaF9mbGFncyAmYW1wOyBTSEZfQUxMT0MpKQogCQkJY29udGludWU7CiAKIAkJaWYgKGluZm8tJmd0O3NlY2hkcnNbaV0uc2hfZmxhZ3MgJmFtcDsgU0hGX1JFTEFfTElWRVBBVENIKQpAQCAtMTcxNSwyNyAmIzQzOzE3MDksMTMgQEAgc3RhdGljIHZvaWQgX19sYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBib29sIGkKIAogCQkJaWYgKChzLSZndDtzaF9mbGFncyAmYW1wOyBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF0KIAkJCSAgICB8fCAocy0mZ3Q7c2hfZmxhZ3MgJmFtcDsgbWFza3NbbV1bMV0pCi0JCQkgICAgfHwgcy0mZ3Q7c2hfZW50c2l6ZSAhPSB+MFVMCiYjNDM7CQkJICAgIHx8IHMtJmd0O3NoX2VudHNpemUgIT0gfjBVTCAvKiBvZmZzZXQgb3Igc3RhbmRhbG9uZSAqLwogCQkJICAgIHx8IGlzX2luaXQgIT0gbW9kdWxlX2luaXRfbGF5b3V0X3NlY3Rpb24oc25hbWUpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoV0FSTl9PTl9PTkNFKHR5cGUgPT0gTU9EX0lOVkFMSUQpKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKgotCQkJICogRG8gbm90IGFsbG9jYXRlIGNvZGV0YWcgbWVtb3J5IGFzIHdlIGxvYWQgaXQgaW50bwotCQkJICogcHJlYWxsb2NhdGVkIGNvbnRpZ3VvdXMgbWVtb3J5LgotCQkJICovCi0JCQlpZiAoY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzLSZndDtzaF9zaXplKSkgewotCQkJCS8qCi0JCQkJICogcy0mZ3Q7c2hfZW50c2l6ZSB3b24mIzM5O3QgYmUgdXNlZCBidXQgcG9wdWxhdGUgdGhlCi0JCQkJICogdHlwZSBmaWVsZCB0byBhdm9pZCBjb25mdXNpb24uCi0JCQkJICovCi0JCQkJcy0mZ3Q7c2hfZW50c2l6ZSA9ICgodW5zaWduZWQgbG9uZykodHlwZSkgJmFtcDsgU0hfRU5UU0laRV9UWVBFX01BU0spCi0JCQkJCQkmbHQ7Jmx0OyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KIAkJCXMtJmd0O3NoX2VudHNpemUgPSBtb2R1bGVfZ2V0X29mZnNldF9hbmRfdHlwZShtb2QsIHR5cGUsIHMsIGkpOwogCQkJcHJfZGVidWcoJiMzNDtcdCVzXG4mIzM0Oywgc25hbWUpOwogCQl9CkBAIC0xNzQ1LDE2ICYjNDM7MTcyNSwxMCBAQCBzdGF0aWMgdm9pZCBfX2xheW91dF9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGJvb2wgaQogLyoKICAqIExheSBvdXQgdGhlIFNIRl9BTExPQyBzZWN0aW9ucyBpbiBhIHdheSBub3QgZGlzc2ltaWxhciB0byBob3cgbGQKICAqIG1pZ2h0IC0tIGNvZGUsIHJlYWQtb25seSBkYXRhLCByZWFkLXdyaXRlIGRhdGEsIHNtYWxsIGRhdGEuICBUYWxseQotICogc2l6ZXMsIGFuZCBwbGFjZSB0aGUgb2Zmc2V0cyBpbnRvIHNoX2VudHNpemUgZmllbGRzOiBoaWdoIGJpdCBtZWFucyBpdAotICogYmVsb25ncyBpbiBpbml0LgomIzQzOyAqIHNpemVzLCBhbmQgcGxhY2UgdGhlIG9mZnNldHMgaW50byBzaF9lbnRzaXplIGZpZWxkcy4KICAqLwogc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW07IGkmIzQzOyYjNDM7KQotCQlpbmZvLSZndDtzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMOwotCiAJcHJfZGVidWcoJiMzNDtDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XG4mIzM0OywgbW9kLSZndDtuYW1lKTsKIAlfX2xheW91dF9zZWN0aW9ucyhtb2QsIGluZm8sIGZhbHNlKTsKIApAQCAtMjgwMCw3ICYjNDM7Mjc3NCw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCWludCBpLCByZXQ7CiAJZW51bSBtb2RfbWVtX3R5cGUgdCA9IE1PRF9NRU1fTlVNX1RZUEVTOwotCWJvb2wgY29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gZmFsc2U7CiAKIAlmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkgewogCQlpZiAoIW1vZC0mZ3Q7bWVtW3R5cGVdLnNpemUpIHsKQEAgLTI4MjAsMzQgJiM0MzsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogCWZvciAoaSA9IDA7IGkgJmx0OyBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW07IGkmIzQzOyYjNDM7KSB7CiAJCXZvaWQgKmRlc3Q7CiAJCUVsZl9TaGRyICpzaGRyID0gJmFtcDtpbmZvLSZndDtzZWNoZHJzW2ldOwotCQljb25zdCBjaGFyICpzbmFtZTsKIAotCQlpZiAoIShzaGRyLSZndDtzaF9mbGFncyAmYW1wOyBTSEZfQUxMT0MpKQomIzQzOwkJaWYgKCEoc2hkci0mZ3Q7c2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKQomIzQzOwkJICAgIHx8IHNoZHItJmd0O3NoX2VudHNpemUgPT0gU0hfRU5UU0laRV9TVEFOREFMT05FKQogCQkJY29udGludWU7CiAKLQkJc25hbWUgPSBpbmZvLSZndDtzZWNzdHJpbmdzICYjNDM7IHNoZHItJmd0O3NoX25hbWU7Ci0JCS8qCi0JCSAqIExvYWQgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IGFzIHRoZXkgbWlnaHQgc3RpbGwgYmUgdXNlZAotCQkgKiBhZnRlciBtb2R1bGUgdW5sb2FkLgotCQkgKi8KLQkJaWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci0mZ3Q7c2hfc2l6ZSkpIHsKLQkJCWRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItJmd0O3NoX3NpemUsCi0JCQkJCWFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChtb2QsIGkpLCBzaGRyLSZndDtzaF9hZGRyYWxpZ24pOwotCQkJaWYgKFdBUk5fT04oIWRlc3QpKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dF9lcnI7Ci0JCQl9Ci0JCQlpZiAoSVNfRVJSKGRlc3QpKSB7Ci0JCQkJcmV0ID0gUFRSX0VSUihkZXN0KTsKLQkJCQlnb3RvIG91dF9lcnI7Ci0JCQl9Ci0JCQljb2RldGFnX3NlY3Rpb25fZm91bmQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IHNoZHItJmd0O3NoX2VudHNpemUgJmd0OyZndDsgU0hfRU5UU0laRV9UWVBFX1NISUZUOwotCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLSZndDtzaF9lbnRzaXplICZhbXA7IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0s7Ci0KLQkJCWRlc3QgPSBtb2QtJmd0O21lbVt0eXBlXS5iYXNlICYjNDM7IG9mZnNldDsKLQkJfQomIzQzOwkJZGVzdCA9IG1vZC0mZ3Q7bWVtW3NoZHItJmd0O3NoX2VudHNpemUgJmd0OyZndDsgU0hfRU5UU0laRV9UWVBFX1NISUZUXS5iYXNlICYjNDM7CiYjNDM7CQkgICAgICAgKHNoZHItJmd0O3NoX2VudHNpemUgJmFtcDsgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7CiAKIAkJaWYgKHNoZHItJmd0O3NoX3R5cGUgIT0gU0hUX05PQklUUykgewogCQkJLyoKQEAgLTI4NzksOCAmIzQzOzI4MzEsNiBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIAltb2R1bGVfbWVtb3J5X3Jlc3RvcmVfcm94KG1vZCk7CiAJd2hpbGUgKHQtLSkKIAkJbW9kdWxlX21lbW9yeV9mcmVlKG1vZCwgdCk7Ci0JaWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZCkKLQkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5NTEsOSAmIzQzOzI5MDEsNTEgQEAgc3RhdGljIGJvb2wgYmxhY2tsaXN0ZWQoY29uc3QgY2hhciAqbW9kdWxlX25hbWUpCiB9CiBjb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTsKIAomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5LiBUaGV5IGFyZSBsb2FkZWQgaW50byBwcmVhbGxvY2F0ZWQKJiM0MzsgKiBjb250aWd1b3VzIG1lbW9yeSBiZWNhdXNlIHRoZXkgbWF5IHN0aWxsIGJlIHVzZWQgYWZ0ZXIgdGhlIG1vZHVsZSBpcwomIzQzOyAqIHVubG9hZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlcGFyYXRlIGFsbG9jYXRpb24gb3ZlcmZsb3dzLCBhbGxvY2F0ZSB0aGUgc2VjdGlvbiBub3JtYWxseQomIzQzOyAqIHNvIHRoYXQgdGhlIG1vZHVsZSBjYW4gc3RpbGwgYmUgbG9hZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgJmx0OyBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlFbGZfU2hkciAqc2hkciA9ICZhbXA7aW5mby0mZ3Q7c2VjaGRyc1tpXTsKJiM0MzsJCWNvbnN0IGNoYXIgKnNuYW1lID0gaW5mby0mZ3Q7c2Vjc3RyaW5ncyAmIzQzOyBzaGRyLSZndDtzaF9uYW1lOwomIzQzOwkJdm9pZCAqZGVzdDsKJiM0MzsKJiM0MzsJCWlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLSZndDttb2QsIHNuYW1lLCBzaGRyLSZndDtzaF9zaXplKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tJmd0O21vZCwgc25hbWUsIHNoZHItJmd0O3NoX3NpemUsCiYjNDM7CQkJCWFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLSZndDttb2QsIGkpLCBzaGRyLSZndDtzaF9hZGRyYWxpZ24pOwomIzQzOwkJaWYgKFdBUk5fT04oIWRlc3QpKSB7CiYjNDM7CQkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLSZndDttb2QpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJaWYgKGRlc3QgPT0gRVJSX1BUUigtRUFHQUlOKSkKJiM0MzsJCQkvKiBBbGxvY2F0ZSB0aGUgc2VjdGlvbiBhcyBhIHJlZ3VsYXIgc2VjdGlvbi4gKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChJU19FUlIoZGVzdCkpIHsKJiM0MzsJCQljb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tJmd0O21vZCk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZGVzdCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2hkci0mZ3Q7c2hfdHlwZSAhPSBTSFRfTk9CSVRTKQomIzQzOwkJCW1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItJmd0O3NoX2FkZHIsIHNoZHItJmd0O3NoX3NpemUpOwomIzQzOwkJc2hkci0mZ3Q7c2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7CiYjNDM7CQlzaGRyLSZndDtzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiYjNDM7CXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKIAkvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovCkBAIC0yOTY3LDggJiM0MzsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAomIzQzOwkvKiBSZXB1cnBvc2Ugc2hfZW50c2l6ZSB0byB0cmFjayB3aGVyZSBlYWNoIHNlY3Rpb24gaXMgYWxsb2NhdGVkLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7CiYjNDM7CiAJLyogV2Ugd2lsbCBkbyBhIHNwZWNpYWwgYWxsb2NhdGlvbiBmb3IgcGVyLWNwdSBzZWN0aW9ucyBsYXRlci4gKi8KLQlpbmZvLSZndDtzZWNoZHJzW2luZm8tJmd0O2luZGV4LnBjcHVdLnNoX2ZsYWdzICZhbXA7PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwomIzQzOwlpZiAoaW5mby0mZ3Q7aW5kZXgucGNwdSkKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTsKIAogCS8qCiAJICogTWFyayByZWxldmFudCBzZWN0aW9ucyBhcyBTSEZfUk9fQUZURVJfSU5JVCBzbyBsYXlvdXRfc2VjdGlvbnMoKSBjYW4KQEAgLTI5NzcsMTggJiM0MzsyOTc0LDIxIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIAkgKi8KIAltb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tJmd0O2hkciwgaW5mby0mZ3Q7c2VjaGRycywgaW5mby0mZ3Q7c2Vjc3RyaW5ncyk7CiAKLQkvKgotCSAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93Ci0JICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55Ci0JICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuCi0JICovCiYjNDM7CS8qIEFsbG93IGNvZGV0YWcgc2VjdGlvbnMgdG8gYmUgYWxsb2NhdGVkIHNlcGFyYXRlbHkgZmlyc3QuICovCiYjNDM7CWVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwomIzQzOwkvKiBEZXRlcm1pbmUgdG90YWwgc2l6ZXMgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICovCiAJbGF5b3V0X3NlY3Rpb25zKGluZm8tJmd0O21vZCwgaW5mbyk7CiAJbGF5b3V0X3N5bXRhYihpbmZvLSZndDttb2QsIGluZm8pOwogCiAJLyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovCiAJZXJyID0gbW92ZV9tb2R1bGUoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKLQlpZiAoZXJyKQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQljb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tJmd0O21vZCk7CiAJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CX0KIAogCS8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqLwogCW1vZCA9ICh2b2lkICopaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5tb2RdLnNoX2FkZHI7CmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jCmluZGV4IGYzMGVmOGRkMjRjNzAuLjhmMTMzNjliMzJlY2QgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC04NDMsNiAmIzQzOzg0Myw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKQomIzQzO3sKJiM0MzsJTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnOwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnOwomIzQzOwlzdHJ1Y3QgbW9kdWxlICp2YWw7CiYjNDM7CiYjNDM7CW1hc19sb2NrKCZhbXA7bWFzKTsKJiM0MzsJbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQomIzQzOwkJaWYgKHZhbCA9PSBtb2QpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CWlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VkKQomIzQzOwkJZ290byByZWxlYXNlX2FyZWE7CiYjNDM7CiYjNDM7CXN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTsKJiM0MzsJZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpOwomIzQzOwlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7CiYjNDM7CQlzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7CiYjNDM7CiYjNDM7CQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7CiYjNDM7CiYjNDM7CQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKJiM0MzsJCQlwcl9pbmZvKCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcbiYjMzQ7LAomIzQzOwkJCQl0YWctJmd0O2N0LmZpbGVuYW1lLCB0YWctJmd0O2N0LmxpbmVubywgdGFnLSZndDtjdC5tb2RuYW1lLAomIzQzOwkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXVzZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzO3JlbGVhc2VfYXJlYToKJiM0MzsJbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKJiM0MzsJdmFsID0gbWFzX3ByZXZfcmFuZ2UoJmFtcDttYXMsIDApOwomIzQzOwlpZiAodmFsID09ICZhbXA7cHJlcGVuZF9tb2QpCiYjNDM7CQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwomIzQzO291dDoKJiM0MzsJbWFzX3VubG9jaygmYW1wO21hcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJIHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKQogewpAQCAtOTEyLDEwICYjNDM7OTU4LDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQlpbnQgZ3Jvd19yZXM7CiAKIAkJbW9kdWxlX3RhZ3Muc2l6ZSA9IG9mZnNldCAmIzQzOyBzaXplOwotCQlpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgJmFtcDsmYW1wOyAhdGFnc19hZGRyZXNzYWJsZSgpKSB7CiYjNDM7CQlpZiAoIXRhZ3NfYWRkcmVzc2FibGUoKSkgewogCQkJc2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTsKLQkJCXByX3dhcm4oJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAotCQkJCW1vZC0mZ3Q7bmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpOwomIzQzOwkJCXByX3dhcm5fb25jZSgmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxuJiMzNDssCiYjNDM7CQkJCSAgICAgbW9kLSZndDtuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7CiYjNDM7CQkJcmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKIAkJfQogCiAJCWdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTsKQEAgLTkyMyw2ICYjNDM7OTcxLDcgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQlzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpOwogCQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAogCQkJICAgICAgIG1vZC0mZ3Q7bmFtZSk7CiYjNDM7CQkJcmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTsKIAkJCXJldHVybiBFUlJfUFRSKGdyb3dfcmVzKTsKIAkJfQogCX0KQEAgLTkzMCw1MiAmIzQzOzk3OSw2IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCXJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpCi17Ci0JTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKLQlzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7Ci0Jc3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZzsKLQlzdHJ1Y3QgbW9kdWxlICp2YWw7Ci0KLQltYXNfbG9jaygmYW1wO21hcyk7Ci0JbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQotCQlpZiAodmFsID09IG1vZCkKLQkJCWJyZWFrOwotCi0JaWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi8KLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXVzZWQpCi0JCWdvdG8gcmVsZWFzZV9hcmVhOwotCi0Jc3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpOwotCWVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTsKLQlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7Ci0JCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKLQotCQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjsKLQotCQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQotCQkJCWNvbnRpbnVlOwotCi0JCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKLQkJCXByX2luZm8oJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxuJiMzNDssCi0JCQkJdGFnLSZndDtjdC5maWxlbmFtZSwgdGFnLSZndDtjdC5saW5lbm8sIHRhZy0mZ3Q7Y3QubW9kbmFtZSwKLQkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXVzZWQgPSBmYWxzZTsKLQl9Ci1yZWxlYXNlX2FyZWE6Ci0JbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKLQl2YWwgPSBtYXNfcHJldl9yYW5nZSgmYW1wO21hcywgMCk7Ci0JaWYgKHZhbCA9PSAmYW1wO3ByZXBlbmRfbW9kKQotCQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwotb3V0OgotCW1hc191bmxvY2soJmFtcDttYXMpOwotfQotCiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcCkKIHsKIAkvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgcGF0Y2ggZGlmZiBpdHNlbGYuIEl0JiMzOTtzIHRvdWNoaW5nIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvbW9kdWxlLmhgLCBga2VybmVsL21vZHVsZS9pbnRlcm5hbC5oYCwgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoaXMgc3VnZ2VzdHMgY2hhbmdlcyB0byBob3cgbW9kdWxlcyBhcmUgbG9hZGVkLCByZWxvY2F0ZWQsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgaXMgbWFuYWdlZC4KCkZpcnN0LCB0aGUgZW51bSBjaGFuZ2UuIEFkZGluZyBgTU9EX1NUQU5EQUxPTkUgPSAtMmAgdG8gYGVudW0gbW9kX21lbV90eXBlYCBpbiBgaW5jbHVkZS9saW51eC9tb2R1bGUuaGAgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGVuIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIGluIGBrZXJuZWwvbW9kdWxlL2ludGVybmFsLmhgIHNlZW1zIHRvIGJlIGEgZGVyaXZlZCB2YWx1ZSBiYXNlZCBvbiB0aGF0IGVudW0uIEl0IGxvb2tzIGxpa2UgYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgaXMgcmVsYXRlZCB0byBjb2RldGFnIHNlY3Rpb25zLiBJIHdpbGwga2VlcCB0aGF0IGluIG1pbmQuCgpOb3cgZm9yIHRoZSBtZWF0IG9mIGl0IGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIEludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaXMgcmVtb3ZpbmcgZXhjZXB0aW9ucyBhbmQgaGFuZGxpbmcgcmVsYXRlZCB0byBgaW5mb3NlY2Agd2l0aGluIGBhcHBseV9yZWxvY2F0aW9ucygpYC4gQWxzbywgY29kZSB0byByZW1vdmUgY29kZXRhZyBoYW5kbGluZyBmcm9tIGJvdGggYF9fbGF5b3V0X3NlY3Rpb25zKClgIGFuZCBgbW92ZV9tb2R1bGUoKWAuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIHJlc2V0dGluZyBgaW5mby0mZ3Q7c2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtgIGZyb20gYGxheW91dF9zZWN0aW9ucygpYCB0byBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYC4gVGhlIG5ldyBmdW5jdGlvbiBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCBpcyB2ZXJ5IGludGVyZXN0aW5nLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHNlY3Rpb25zLCBjb25kaXRpb25hbGx5IGNhbGxzIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKClgLCBhbmQgY29waWVzIGRhdGEsIHNldHRpbmcgYHNoZHItJmd0O3NoX2FkZHJgIGFuZCBgc2hkci0mZ3Q7c2hfZW50c2l6ZWAgdG8gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAuIEkgbmVlZCB0byBpbnNwZWN0IHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IHdpdGggcmVzcGVjdCB0byBhbGxvY2F0aW9uIGFuZCBjb3B5IHNlbWFudGljczsgc3BlY2lmaWNhbGx5IHRoZSBkYXRhIGNvcHlpbmcgaW50byB0aGUgZGVzdCB2YXJpYWJsZS4gRmluYWxseSwgSSBzZWUgdGhhdCB0aGUgYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgZnVuY3Rpb24gbm93IGluaXRpYWxpemVzIGBzaF9lbnRzaXplYCB0byBgfjBVTGAgYW5kIGFsc28gc2V0cyBgaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5wY3B1XS5zaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO2AgZm9yIG5vbi16ZXJvIGBwY3B1YCBpbmRpY2VzIGJlZm9yZSBjYWxsaW5nIG90aGVyIGxheW91dCBmdW5jdGlvbnMuCgpGaW5hbGx5LCBpbiBgbW0vYWxsb2NfdGFnLmNgLCB0aGUgcmVvcmRlcmluZyBvZiBgcmVsZWFzZV9tb2R1bGVfdGFncygpYCBhbmQgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWAgbG9va3MgaW1wb3J0YW50LiBUaGUgbG9naWMgaW4gYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWAgYXJvdW5kIGB0YWdzX2FkZHJlc3NhYmxlKClgIGFuZCB0aGUgc3Vic2VxdWVudCBjYWxscyB0byBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZygpYCwgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAsIGFuZCBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKWAgaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2guIEFueSBmYWlsdXJlIHNjZW5hcmlvcyBoZXJlIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KCk15IG5leHQgc3RlcCBpcyB0byBkZWVwbHkgZXhhbWluZSB0aGUgdXNhZ2Ugb2YgYGluZm8tJmd0O3NlY2hkcnNgIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgbWFuYWdlZCwgZXNwZWNpYWxseSBhcm91bmQgYGxheW91dF9hbmRfYWxsb2NhdGUoKWAsIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKClgIGFuZCB0aGUgY29kZXRhZyByZWxhdGVkIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBlcXVpdmFsZW50IHRvb2xzIHRvIHNlYXJjaCBmb3IgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgd2lsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucyB0aGF0IGNhbiBsZWFkIHRvIG1lbW9yeSBsZWFrYWdlLCB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55dGhpbmcgc3VzcGljaW91cy4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgZ29pbmcgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9tYWluLmM9MjkwMj1jb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTExLSAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6MjkxMjpzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MTMte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDU9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NzctXHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6Mjk3ODpcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTc5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1vZHVsZSBSZWxvY2F0aW9uKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggbW9kdWxlIGxheW91dCBhbmQgYWxsb2NhdGlvbiwgYW5kIGhvdyBtb2R1bGVzIGFyZSBtb3ZlZCBhcm91bmQgaW4gbWVtb3J5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgY29kZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBtb2R1bGUgbWFuaXB1bGF0aW9uIHJlc2lkZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBtb2R1bGUgcmVsb2NhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgZG9uZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZGVjaWRlcyB3aGVyZSB0byBwdXQgdGhlIG1vZHVsZSwgYW5kIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSB0cmFuc2ZlciB3aGVuIGl0IG5lZWRzIHRvIGJlIHJlcG9zaXRpb25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk0NTpcdHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbjI5NDY6XHR7XG4yOTQ3Olx0XHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4yOTQ4Olx0XHR1bnNpZ25lZCBpbnQgaTtcbjI5NDk6XHRcdGludCBlcnI7XG4yOTUwOlx0XG4yOTUxOlx0XHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG4yOTUyOlx0XHRlcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsXG4yOTUzOlx0XHRcdFx0XHRcdGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NTU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NTY6XHRcbjI5NTc6XHRcdGVyciA9IG1vZHVsZV9lbmZvcmNlX3J3eF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuMjk1ODpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1OTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NjE6XHRcbjI5NjI6XHRcdC8qIFJlcHVycG9zZSBzaF9lbnRzaXplIHRvIHRyYWNrIHdoZXJlIGVhY2ggc2VjdGlvbiBpcyBhbGxvY2F0ZWQuICovXG4yOTYzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOylcbjI5NjQ6XHRcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xuMjk2NTpcdFxuMjk2NjpcdFx0LyogV2Ugd2lsbCBkbyBhIHNwZWNpYWwgYWxsb2NhdGlvbiBmb3IgcGVyLWNwdSBzZWN0aW9ucyBsYXRlci4gKi9cbjI5Njc6XHRcdGlmIChpbmZvLVx1MDAzZWluZGV4LnBjcHUpXG4yOTY4Olx0XHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnBjcHVdLnNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7XG4yOTY5Olx0XG4yOTcwOlx0XHQvKlxuMjk3MTpcdFx0ICogTWFyayByZWxldmFudCBzZWN0aW9ucyBhcyBTSEZfUk9fQUZURVJfSU5JVCBzbyBsYXlvdXRfc2VjdGlvbnMoKSBjYW5cbjI5NzI6XHRcdCAqIHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZS5cbjI5NzM6XHRcdCAqIE5vdGU6IHJvX2FmdGVyX2luaXQgc2VjdGlvbnMgYWxzbyBoYXZlIFNIRl97V1JJVEUsQUxMT0N9IHNldC5cbjI5NzQ6XHRcdCAqL1xuMjk3NTpcdFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MpO1xuMjk3NjpcdFxuMjk3NzpcdFx0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cbjI5Nzg6XHRcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4yOTc5Olx0XHRpZiAoZXJyKVxuMjk4MDpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjk4MTpcdFxuMjk4MjpcdFx0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xuMjk4MzpcdFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbjI5ODQ6XHRcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuMjk4NTpcdFxuMjk4NjpcdFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4yOTg3Olx0XHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4yOTg4Olx0XHRpZiAoZXJyKSB7XG4yOTg5Olx0XHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cdTAwM2Vtb2QpO1xuMjk5MDpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjk5MTpcdFx0fVxuMjk5MjpcdFxuMjk5MzpcdFx0LyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovXG4yOTk0Olx0XHRtb2QgPSAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcbjI5OTU6XHRcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XG4yOTk2Olx0XHRjb2RldGFnX21vZHVsZV9yZXBsYWNlZChpbmZvLVx1MDAzZW1vZCwgbW9kKTtcbjI5OTc6XHRcbjI5OTg6XHRcdHJldHVybiBtb2Q7XG4yOTk5Olx0fVxuMzAwMDpcdFxuMzAwMTpcdC8qIG1vZCBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgdGhpcyEgKi9cbjMwMDI6XHRzdGF0aWMgdm9pZCBtb2R1bGVfZGVhbGxvY2F0ZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4zMDAzOlx0e1xuMzAwNDpcdFx0cGVyY3B1X21vZGZyZWUobW9kKTtcbjMwMDU6XHRcdG1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpO1xuMzAwNjpcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpO1xuMzAwNzpcdFxuMzAwODpcdFx0ZnJlZV9tb2RfbWVtKG1vZCk7XG4zMDA5Olx0fVxuMzAxMDpcdFxuMzAxMTpcdGludCBfX3dlYWsgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsXG4zMDEyOlx0XHRcdFx0ICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsXG4zMDEzOlx0XHRcdFx0ICAgc3RydWN0IG1vZHVsZSAqbWUpXG4zMDE0Olx0e1xuMzAxNTpcdFx0cmV0dXJuIDA7XG4zMDE2Olx0fVxuMzAxNzpcdFxuMzAxODpcdHN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbjMwMTk6XHR7XG4zMDIwOlx0XHQvKiBTb3J0IGV4Y2VwdGlvbiB0YWJsZSBub3cgcmVsb2NhdGlvbnMgYXJlIGRvbmUuICovXG4zMDIxOlx0XHRzb3J0X2V4dGFibGUobW9kLVx1MDAzZWV4dGFibGUsIG1vZC1cdTAwM2VleHRhYmxlICYjNDM7IG1vZC1cdTAwM2VudW1fZXhlbnRyaWVzKTtcbjMwMjI6XHRcbjMwMjM6XHRcdC8qIENvcHkgcmVsb2NhdGVkIHBlcmNwdSBhcmVhIG92ZXIuICovXG4zMDI0Olx0XHRwZXJjcHVfbW9kY29weShtb2QsICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZSBUYWcgU2VjdGlvbiBBbGxvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9uc2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGl0ZXJhdGluZyB0aHJvdWdoIHNlY3Rpb24gaGVhZGVycywgc3RhcnRpbmcgZnJvbSB0aGUgc2Vjb25kIG9uZSAoaW5kZXggMSkuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBzZWN0aW9ucyB0aGF0IG1lZXQgYSBzcGVjaWZpYyAmIzM0O2NvZGV0YWcmIzM0OyBjcml0ZXJpYSB3aXRoaW4gYSBtb2R1bGUuIFRoZSBmdW5jdGlvbiBpcyBnb2luZyB0aHJvdWdoIHRoZSBzZWN0aW9uIGhlYWRlcnMgYW5kIGl0IGxvb2tzIGxpa2UgYGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb25gIGRlY2lkZXMgd2hpY2ggc2VjdGlvbnMgc2hvdWxkIGJlIG1vdmVkIG9yIG1hbmFnZWQgZGlmZmVyZW50bHkuCgpUaGUgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gIGNhbGwgaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRvIGhhbmRsZSB0aGUgYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBwcmVwZW5kaW5nIHNvbWV0aGluZyBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBoYW5kbGluZyBhbGlnbm1lbnQgYW5kIHRoZSBzZWN0aW9uJiMzOTtzIHNpemUuIFRoZXJlJiMzOTtzIGVycm9yIGhhbmRsaW5nIHRvIG1hbmFnZSBhbGxvY2F0aW9uIGZhaWx1cmUgdXNpbmcgYFdBUk5fT05gLCBhbmQgc29tZSBmYWxsYmFjayBsb2dpYyBpbnZvbHZpbmcgYC1FQUdBSU5gIHRvIHRyZWF0IGl0IGxpa2UgYSByZWd1bGFyIHNlY3Rpb24sIGFuZCBnZW5lcmFsIGVycm9yIGhhbmRsaW5nLCBmcmVlaW5nIGFsbG9jYXRpb25zIG9uIGZhaWx1cmUuCgpGaW5hbGx5LCBpZiBhbGxvY2F0aW9uIGlzIHN1Y2Nlc3NmdWwgYW5kIHRoZSBzZWN0aW9uIGlzICpub3QqIGEgbm8tYml0cyBzZWN0aW9uLCB3ZSBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIG9yaWdpbmFsIHNlY3Rpb24gYWRkcmVzcyAoYHNoZHItJmd0O3NoX2FkZHJgKSB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIGRlc3RpbmF0aW9uLiBUaGUgYHNoZHItJmd0O3NoX2FkZHJgIGlzIHRoZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9uLCBhbmQgdGhlIHNlY3Rpb24gc2l6ZSBpcyBzZXQuCgpOb3csIGEga2V5IHF1ZXN0aW9uIGlzIGhvdyBgc2hkci0mZ3Q7c2hfYWRkcmAgaXMgKmluaXRpYWxseSogc2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGF0IHZhbHVlIGNvbWVzIGZyb20gYmVmb3JlIHdlIHJlYWNoIHRoaXMgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIGhhcHBlbnMgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgc2VjdGlvbiBhZGRyZXNzZXMgYXJlIGluaXRpYWxseSBzZXQgd2l0aGluIHRoZSBtb2R1bGUgbG9hZGluZyBwcm9jZXNzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHVzZXMgb2YgdGhlIGBzZXR1cF9sb2FkX2luZm9gIGZ1bmN0aW9uIG9yIHRoZSBgbG9hZF9pbmZvYCBzdHJ1Y3R1cmUgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIGhvdyBgc2hkci0mZ3Q7c2hfYWRkcmAgZ2V0cyBpdHMgaW5pdGlhbCB2YWx1ZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NoX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MTEzPXZvaWQgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE0MS1cdC8qIEFwcGVuZCByb29tIGZvciBjb3JlIHN5bWJvbHMgYXQgZW5kIG9mIGNvcmUgcGFydC4gKi9cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzoxNDI6XHRpbmZvLVx1MDAzZXN5bW9mZnMgPSBBTElHTihtb2RfbWVtX2RhdGEtXHUwMDNlc2l6ZSwgc3ltc2VjdC1cdTAwM2VzaF9hZGRyYWxpZ24gPzogMSk7XG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTQzLVx0aW5mby1cdTAwM2VzdHJvZmZzID0gbW9kX21lbV9kYXRhLVx1MDAzZXNpemUgPSBpbmZvLVx1MDAzZXN5bW9mZnMgJiM0MzsgbmRzdCAqIHNpemVvZihFbGZfU3ltKTtcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MTcwPXZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTgzLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjE4NDpcdGthbGxzeW1zLVx1MDAzZXN5bXRhYiA9ICh2b2lkICopc3ltc2VjLVx1MDAzZXNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTg1LVx0a2FsbHN5bXMtXHUwMDNlbnVtX3N5bXRhYiA9IHN5bXNlYy1cdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pO1xua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE4Ni1cdC8qIE1ha2Ugc3VyZSB3ZSBnZXQgcGVybWFuZW50IHN0cnRhYjogZG9uJiMzOTt0IHVzZSBpbmZvLVx1MDAzZXN0cnRhYi4gKi9cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzoxODc6XHRrYWxsc3ltcy1cdTAwM2VzdHJ0YWIgPSAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnN0cl0uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0xODgtXHRrYWxsc3ltcy1cdTAwM2V0eXBldGFiID0gaW5pdF9kYXRhX2Jhc2UgJiM0MzsgaW5mby1cdTAwM2Vpbml0X3R5cGVvZmZzO1xuLS1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0yMjU9dm9pZCBpbml0X2J1aWxkX2lkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMjMyLVx0XHRpZiAoIXNlY3RfZW1wdHkoc2VjaGRyKSBcdTAwMjZcdTAwMjYgc2VjaGRyLVx1MDAzZXNoX3R5cGUgPT0gU0hUX05PVEUgXHUwMDI2XHUwMDI2XG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MjMzOlx0XHQgICAgIWJ1aWxkX2lkX3BhcnNlX2J1Zigodm9pZCAqKXNlY2hkci1cdTAwM2VzaF9hZGRyLCBtb2QtXHUwMDNlYnVpbGRfaWQsXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMjM0LVx0XHRcdFx0XHRzZWNoZHItXHUwMDNlc2hfc2l6ZSkpXG4tLVxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYz0xOD1pbnQgY29weV9tb2R1bGVfZWxmKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTUzLVx0ICogRm9yIGxpdmVwYXRjaCBtb2R1bGVzLCBjb3JlX2thbGxzeW1zLnN5bXRhYiBpcyBhIGNvbXBsZXRlXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jOjU0Olx0ICogY29weSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHRhYmxlLiBBZGp1c3Qgc2hfYWRkciB0byBwb2ludFxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy01NS1cdCAqIHRvIGNvcmVfa2FsbHN5bXMuc3ltdGFiIHNpbmNlIHRoZSBjb3B5IG9mIHRoZSBzeW10YWIgaW4gbW9kdWxlXG4tLVxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy01Ny1cdCAqL1xua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYzo1ODpcdG1vZC1cdTAwM2VrbHBfaW5mby1cdTAwM2VzZWNoZHJzW3N5bW5keF0uc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKW1vZC1cdTAwM2Vjb3JlX2thbGxzeW1zLnN5bXRhYjtcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmMtNTktXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9Mjg0PXN0YXRpYyB2b2lkICpzZWN0aW9uX2FkZHIoY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4NS17XG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODY6XHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMC4gKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4NzpcdHJldHVybiAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tmaW5kX3NlYyhpbmZvLCBuYW1lKV0uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4OC19XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MjkxPXN0YXRpYyB2b2lkICpzZWN0aW9uX29ianMoY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTctXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTg6XHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMCBhbmQgc2hfc2l6ZSAwLiAqL1xua2VybmVsL21vZHVsZS9tYWluLmMtMjk5LVx0Km51bSA9IGluZm8tXHUwMDNlc2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMwMDpcdHJldHVybiAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tzZWNdLnNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDEtfVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMyMD1zdGF0aWMgX19tYXliZV91bnVzZWQgdm9pZCAqYW55X3NlY3Rpb25fb2Jqcyhjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMyNi1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMyNzpcdC8qIFNlY3Rpb24gMCBoYXMgc2hfYWRkciAwIGFuZCBzaF9zaXplIDAuICovXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMjgtXHQqbnVtID0gaW5mby1cdTAwM2VzZWNoZHJzW3NlY10uc2hfc2l6ZSAvIG9iamVjdF9zaXplO1xua2VybmVsL21vZHVsZS9tYWluLmM6MzI5Olx0cmV0dXJuICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW3NlY10uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMzMC19XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9NDU1PXN0YXRpYyBpbnQgcGVyY3B1X21vZGFsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy00NTctXHRFbGZfU2hkciAqcGNwdXNlYyA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnBjcHVdO1xua2VybmVsL21vZHVsZS9tYWluLmM6NDU4Olx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IHBjcHVzZWMtXHUwMDNlc2hfYWRkcmFsaWduO1xua2VybmVsL21vZHVsZS9tYWluLmMtNDU5LVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTExMzg9c3RhdGljIGNoYXIgKmdldF9uZXh0X21vZGluZm8oY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqdGFnLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDctXHQgKiBnZXRfbW9kaW5mbygpIGNhbGxzIG1hZGUgYmVmb3JlIHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKClcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjExNDg6XHQgKiBtdXN0IHVzZSBzaF9vZmZzZXQsIGFzIHNoX2FkZHIgaXNuJiMzOTt0IHNldCFcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDktXHQgKi9cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNTI5PXN0YXRpYyBpbnQgc2ltcGxpZnlfc3ltYm9scyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMTUzMS1cdEVsZl9TaGRyICpzeW1zZWMgPSBcdTAwMjZpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zeW1dO1xua2VybmVsL21vZHVsZS9tYWluLmM6MTUzMjpcdEVsZl9TeW0gKnN5bSA9ICh2b2lkICopc3ltc2VjLVx1MDAzZXNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTMzLVx0dW5zaWduZWQgbG9uZyBzZWNiYXNlO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE1OTctXHRcdFx0ZWxzZVxua2VybmVsL21vZHVsZS9tYWluLmM6MTU5ODpcdFx0XHRcdHNlY2Jhc2UgPSBpbmZvLVx1MDAzZXNlY2hkcnNbc3ltW2ldLnN0X3NobmR4XS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS9tYWluLmMtMTU5OS1cdFx0XHRzeW1baV0uc3RfdmFsdWUgJiM0Mzs9IHNlY2Jhc2U7XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MTY1MD1sb25nIG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjU2LVx0bW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplICYjNDM7PSBhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBzZWN0aW9uKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE2NTc6XHRvZmZzZXQgPSBBTElHTihtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUsIHNlY2hkci1cdTAwM2VzaF9hZGRyYWxpZ24gPzogMSk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjU4LVx0bW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplID0gb2Zmc2V0ICYjNDM7IHNlY2hkci1cdTAwM2VzaF9zaXplO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTE5MTU9c3RhdGljIGludCBlbGZfdmFsaWRpdHlfY2FjaGVfc2VjaGRycyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE5NTAtXHQgICAgfHwgc2VjaGRyc1swXS5zaF9zaXplICE9IDBcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE5NTE6XHQgICAgfHwgc2VjaGRyc1swXS5zaF9hZGRyICE9IDApIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE5NTItXHRcdHByX2VycihcJiMzNDtFTEYgU3BlYyB2aW9sYXRpb246IHNlY3Rpb24gMCB0eXBlKCVkKSE9U0hfTlVMTCBvciBub24temVybyBsZW4gb3IgYWRkclxcblwmIzM0Oyxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNTE2PXN0YXRpYyBpbnQgcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjAtXHQvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IGxldCYjMzk7cyBiZSBzdXJlLiAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6MjUyMTpcdGluZm8tXHUwMDNlc2VjaGRyc1swXS5zaF9hZGRyID0gMDtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjItXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyNi1cdFx0Lypcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI1Mjc6XHRcdCAqIE1hcmsgYWxsIHNlY3Rpb25zIHNoX2FkZHIgd2l0aCB0aGVpciBhZGRyZXNzIGluIHRoZVxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyOC1cdFx0ICogdGVtcG9yYXJ5IGltYWdlLlxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyOS1cdFx0ICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNTMwOlx0XHRzaGRyLVx1MDAzZXNoX2FkZHIgPSAoc2l6ZV90KWluZm8tXHUwMDNlaGRyICYjNDM7IHNoZHItXHUwMDNlc2hfb2Zmc2V0O1xua2VybmVsL21vZHVsZS9tYWluLmMtMjUzMS1cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNzczPXN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MTUtXHRcdFx0fVxua2VybmVsL21vZHVsZS9tYWluLmM6MjgxNjpcdFx0XHRtZW1jcHkoZGVzdCwgKHZvaWQgKilzaGRyLVx1MDAzZXNoX2FkZHIsIHNoZHItXHUwMDNlc2hfc2l6ZSk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODE3LVx0XHR9XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyMy1cdFx0ICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODI0Olx0XHRzaGRyLVx1MDAzZXNoX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXN0O1xua2VybmVsL21vZHVsZS9tYWluLmM6MjgyNTpcdFx0cHJfZGVidWcoXCYjMzQ7XFx0MHglbHggMHglLjhseCAlc1xcblwmIzM0OywgKGxvbmcpc2hkci1cdTAwM2VzaF9hZGRyLFxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyNi1cdFx0XHQgKGxvbmcpc2hkci1cdTAwM2VzaF9zaXplLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgJiM0Mzsgc2hkci1cdTAwM2VzaF9uYW1lKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTEyPXN0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MjItXHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxua2VybmVsL21vZHVsZS9tYWluLmM6MjkyMzpcdFx0XHRcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVx1MDAzZW1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MjQtXHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzYtXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUylcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5Mzc6XHRcdFx0bWVtY3B5KGRlc3QsICh2b2lkICopc2hkci1cdTAwM2VzaF9hZGRyLCBzaGRyLVx1MDAzZXNoX3NpemUpO1xua2VybmVsL21vZHVsZS9tYWluLmM6MjkzODpcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzktXHRcdHNoZHItXHUwMDNlc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTkzLVx0LyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTk0Olx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTk1LVx0a21lbWxlYWtfbG9hZF9tb2R1bGUobW9kLCBpbmZvKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDE4PXN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDIzLVx0LyogQ29weSByZWxvY2F0ZWQgcGVyY3B1IGFyZWEgb3Zlci4gKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMwMjQ6XHRwZXJjcHVfbW9kY29weShtb2QsICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfYWRkcixcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMjUtXHRcdCAgICAgICBpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5wY3B1XS5zaF9zaXplKTtcbi0tXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmM9NjU9c3RhdGljIGludCBhZGRfc2VjdF9hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jLTEwNC1cdFx0c2F0dHItXHUwMDNlcmVhZCA9IG1vZHVsZV9zZWN0X3JlYWQ7XG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmM6MTA1Olx0XHRzYXR0ci1cdTAwM2Vwcml2YXRlID0gKHZvaWQgKilzZWMtXHUwMDNlc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYy0xMDYtXHRcdHNhdHRyLVx1MDAzZXNpemUgPSBNT0RVTEVfU0VDVF9SRUFEX1NJWkU7XG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jPTE1MT1zdGF0aWMgaW50IGFkZF9ub3Rlc19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jLTE5MC1cdFx0XHRuYXR0ci1cdTAwM2VzaXplID0gaW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX3NpemU7XG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmM6MTkxOlx0XHRcdG5hdHRyLVx1MDAzZXByaXZhdGUgPSAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS9zeXNmcy5jLTE5Mi1cdFx0XHRuYXR0ci1cdTAwM2VyZWFkID0gc3lzZnNfYmluX2F0dHJfc2ltcGxlX3JlYWQ7XG4tLVxua2VybmVsL21vZHVsZS92ZXJzaW9uLmM9MTM9aW50IGNoZWNrX3ZlcnNpb24oY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcbi0tXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYy00Ny1cbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jOjQ4Olx0dmVyc2lvbnMgPSAodm9pZCAqKXNlY2hkcnNbdmVyc2luZGV4XS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtNDktXHRudW1fdmVyc2lvbnMgPSBzZWNoZHJzW3ZlcnNpbmRleF0uc2hfc2l6ZVxuLS1cbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jPTEwNz12b2lkIG1vZHZlcnNpb25fZXh0X3N0YXJ0KGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8sXG4tLVxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtMTIyLVxua2VybmVsL21vZHVsZS92ZXJzaW9uLmM6MTIzOlx0c3RhcnQtXHUwMDNlY3JjID0gKGNvbnN0IHUzMiAqKXNlY2hkcnNbY3JjX2lkeF0uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jOjEyNDpcdHN0YXJ0LVx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXNlY2hkcnNbbmFtZV9pZHhdLnNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYy0xMjUtXHRzdGFydC1cdTAwM2VyZW1haW5pbmcgPSBzZWNoZHJzW2NyY19pZHhdLnNoX3NpemUgLyBzaXplb2YoKnN0YXJ0LVx1MDAzZWNyYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjg0CgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDE0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTW9kdWxlIExvYWRpbmcgYW5kIEtNU0FOIERldGVybWluYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNlbnRlcnMgb24gaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgc2VjdGlvbnMgZGVzaWduYXRlZCBhcyAmIzM0O3N0YW5kYWxvbmUsJiMzNDsgc3VjaCBhcyBwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RlIHRhZyBzZWN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgYXBwZWFycyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCByZWxhdGVzIHRvIHRoZSBFTEYgc2VjdGlvbiBsYXlvdXQgYW5kIGFsbG9jYXRpb24uIFRoZSBpbnRlbnRpb24gaXMgdG8gaGFuZGxlIHRoZXNlIHN0YW5kYWxvbmUgc2VjdGlvbnMgc2VwYXJhdGVseSwgcG90ZW50aWFsbHkgYWxsb2NhdGluZyB0aGVtIGludG8gZGVkaWNhdGVkIG1lbW9yeSByZWdpb25zIHJhdGhlciB0aGFuIHBsYWNpbmcgdGhlbSB3aXRoaW4gdGhlIG1haW4gbW9kdWxlIG1lbW9yeSBhcmVhLiBUaGlzIGludm9sdmVzIGFuIGludGVyZXN0aW5nIGRhbmNlIHdpdGggYHNoX2VudHNpemVgIGJlaW5nIHNldCB0byBgU0hfRU5UU0laRV9TVEFOREFMT05FYCBhbmQgdGhlbiB0aGUgc3Vic2VxdWVudCBzdGVwcyBiYXNlZCBvbiB0aGF0IHNldHRpbmcuCgpUaGUgcHJvY2VzcyBraWNrcyBvZmYgd2l0aCBgcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnNgIHdoaWNoLCBhcyBleHBlY3RlZCwgc2V0cyBgc2hfYWRkcmAgYmFzZWQgb24gdGhlIHNlY3Rpb24mIzM5O3Mgb2Zmc2V0IGludG8gdGhlIGluaXRpYWwgbW9kdWxlIGltYWdlLiBUaGVuLCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgY2FsbGVkLiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBsb2dpYyBpbiBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9uc2AgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IHVzaW5nIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYC4gSWYgc3VjY2Vzc2Z1bCwgdGhlIGRhdGEgaXMgY29waWVkIHVzaW5nIGBtZW1jcHlgLiBDcnVjaWFsbHksIGlmIHRoaXMgYWxsb2NhdGlvbiBmYWlscyAocmV0dXJuaW5nIGAtRUFHQUlOYCksIHRoZSBzZWN0aW9uIGlzICpub3QqIG1hcmtlZCBhcyBzdGFuZGFsb25lLCB3aGljaCBtZWFucyBgbGF5b3V0X3NlY3Rpb25zYCB3aWxsIGxheSBpdCBvdXQgaW4gdGhlIG5vcm1hbCBtb2R1bGUgbWVtb3J5LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludCB0byBjaGVjay4gYGxheW91dF9zZWN0aW9uc2Agc3Vic2VxdWVudGx5IHNraXBzIHN0YW5kYWxvbmUgc2VjdGlvbnMsIG1lYW5pbmcgdGhvc2UgYXJlICpub3QqIGhhbmRsZWQgYnkgdGhlIGdlbmVyYWwgbGF5b3V0IGxvZ2ljLiBBZnRlciBzZWN0aW9uIGxheW91dCBpcyBkb25lLCBgbW92ZV9tb2R1bGVgIGlzIGNhbGxlZCwgYW5kLCBhZ2Fpbiwgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgc2tpcHBlZC4gVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBsYWlkIG91dCBpbiB0aGUgbm9ybWFsIG1vZHVsZSBtZW1vcnkgYXJlIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBFTEYgYnVmZmVyLgoKTXkgbWluZCB0aGVuIHNoaWZ0cyB0byBgYXBwbHlfcmVsb2NhdGlvbnMoKWAuIFRoZSBoaXN0b3JpY2FsIGhhbmRsaW5nIG9mIHRoZSBgcGNwdWAgc2VjdGlvbiBpcyB3aGVyZSB0aGUgY2hhbmdlIGlzIG1vc3QgZXZpZGVudC4gQmVmb3JlLCB0aGUgYHBjcHVgIHNlY3Rpb24gd2FzIHNwZWNpYWwsIGFuZCBpdHMgYFNIRl9BTExPQ2AgZmxhZyB3YXMgc3RyaXBwZWQsIHdoaWNoIGlzIHdoeSBpdCB3YXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBtYW5uZXIgd2l0aCByZWxvY2F0aW9ucyBhcHBsaWVkIHRvIHRoZSBpbml0aWFsIEVMRiB0ZW1wbGF0ZSBhbmQgdGhlbiBjb3BpZWQuIFRoaXMgcGF0Y2gsIGhvd2V2ZXIsIG1haW50YWlucyB0aGUgYFNIRl9BTExPQ2AgZmxhZyBmb3IgdGhlIGBwY3B1YCBzZWN0aW9uLCBidXQgaXQgaXMgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBzdGFuZGFsb25lIHNlY3Rpb24uIFRoZSBgc2hfZW50c2l6ZWAgYmVpbmcgc2V0IHRvIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIGVmZmVjdGl2ZWx5IGZsYWdzIGl0IGZvciBzZXBhcmF0ZSBoYW5kbGluZyBhbmQgaXMgdGhlbiBwcm9wZXJseSByZWxvY2F0ZWQuCgpUaGUgYW5hbHlzaXMgb2YgdGhlIGBhbGxvY190YWcuY2AgY2hhbmdlcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXkgaW52b2x2ZSBlcnJvciBoYW5kbGluZyBpbiB0YWcgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBmYWlsdXJlcyBpbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZWAuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gQWZ0ZXIgYSBkZXRhaWxlZCByZXZpZXcsIHRoZSBpbml0aWFsIEVMRiBtb2R1bGUgaW1hZ2UgKGBpbmZvLSZndDtoZHIgJiM0Mzsgc2hkci0mZ3Q7c2hfb2Zmc2V0YCkgaXMgYWx3YXlzIHZhbGlkIG1lbW9yeS4gU2VjdGlvbiBkYXRhIGlzIGNvcGllZCB1c2luZyBgbWVtY3B5YCBmcm9tIGluaXRpYWxpemVkIEVMRiBpbWFnZSBtZW1vcnksIGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGFyZSBwcmVzZW50LiBObyBjb25kaXRpb25hbCBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIHRoZSBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEluIHNob3J0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgd3JpdHRlbiwgb3IgY29waWVkIHRoYXQgY291bGQgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuIEFueSBtZW1vcnkgZXJyb3JzIHRoYXQgYXJpc2UgaGVyZSAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIG1lbW9yeSBsZWFrcywgZXRjLikgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLgoKR2l2ZW4gdGhpcyB0aG9yb3VnaCBhbmFseXNpcywgYW5kIGJhc2VkIG9uIHRoZSBLTVNBTiBjcml0ZXJpYSwgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBuZWVkaW5nIEtNU0FOLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgb2YgdGhlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgcmVhbGx5IGJvaWxzIGRvd24gdG86IHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgbW9kdWxlIGxvYWRpbmcuIEl0IGNoYW5nZXMgaG93IHN0YW5kYWxvbmUgc2VjdGlvbnMgYXJlIGhhbmRsZWQgZHVyaW5nIG1vZHVsZSBsb2FkaW5nLiBNZW1vcnkgaXMgYWxsb2NhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGxvYWRlZCBFTEYgbW9kdWxlIGltYWdlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIHN0YW5kYXJkIG1lbW9yeSBpc3N1ZXMsIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXG5cbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIHNlY3Rpb24gbGF5b3V0cywgcmVsb2NhdGlvbnMsIG9yIHNlcGFyYXRlIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHNlY3Rpb24gcmVhZHMvd3JpdGVzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhcmUgYWRkcmVzc2FibGUgZXJyb3JzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRUxGIHNlY3Rpb24gbGF5b3V0IGFuZCBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzdGFuZGFsb25lIG1vZHVsZSBzZWN0aW9ucyAoc3VjaCBhcyBwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFnL2FsbG9jX3RhZyBzZWN0aW9ucykgZHVyaW5nIG1vZHVsZSBsb2FkaW5nIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGFkanVzdHMgZXJyb3IgaGFuZGxpbmcgaW4gYG1tL2FsbG9jX3RhZy5jYC5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgbGVhdmUgc3RydWN0dXJlIHBhZGRpbmdzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gVGhlIHNlY3Rpb24gZGF0YSBjb3BpZWQgdmlhIGBtZW1jcHkoKWAgb3JpZ2luYXRlcyBmcm9tIGFscmVhZHktbG9hZGVkIEVMRiBpbWFnZSBidWZmZXJzLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTowOC4zMjU0MjYxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg0NzE2MjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5pdF9tb2R1bGVcIixcbiAgICBcImZpbml0X21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvblwiLFxuICAgIFwiY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBFTEYgc2VjdGlvbiBsYXlvdXQgYW5kIGFsbG9jYXRpb24gbG9naWMgZm9yIHN0YW5kYWxvbmUgbW9kdWxlIHNlY3Rpb25zIChzdWNoIGFzIHBlci1DUFUgc2VjdGlvbnMgYW5kIGNvZGV0YWcvYWxsb2NfdGFnIHNlY3Rpb25zKSBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBhbmQgYWRqdXN0cyBlcnJvciBoYW5kbGluZyBpbiBgbW0vYWxsb2NfdGFnLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBkb2VzIG5vdCBsZWF2ZSBzdHJ1Y3R1cmUgcGFkZGluZ3MgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBUaGUgc2VjdGlvbiBkYXRhIGNvcGllZCB2aWEgYG1lbWNweSgpYCBvcmlnaW5hdGVzIGZyb20gYWxyZWFkeS1sb2FkZWQgRUxGIGltYWdlIGJ1ZmZlcnMuXFxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MDguMzI1NDMwMjM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYxNzc2NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjI5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuaW5kZXggOTZjYzk4NTY4ZWVhNS4uMGM2ZjMyZGRjYmYyZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxcbkBAIC0zMjUsNiArMzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xcbiBcXHRNT0RfSU5JVF9ST0RBVEEsXFxuIFxcbiBcXHRNT0RfTUVNX05VTV9UWVBFUyxcXG4rXFxuK1xcdE1PRF9TVEFOREFMT05FID0gLTIsXFxuIFxcdE1PRF9JTlZBTElEID0gLTEsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmggYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmhcXG5pbmRleCAwNjExNjFjYzc5ZDkwLi40YzczODA3NGEyN2I4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxcbisrKyBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxcbkBAIC0yOSw2ICsyOSwxNCBAQFxcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcXG4gI2RlZmluZSBTSF9FTlRTSVpFX09GRlNFVF9NQVNLXFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgKEJJVFNfUEVSX0xPTkcgLSBTSF9FTlRTSVpFX1RZUEVfQklUUykpIC0gMSlcXG4gXFxuKy8qXFxuKyAqIE1hcmtlciBmb3Igc2VjdGlvbnMgd2l0aCBhIHNlcGFyYXRlIGFsbG9jYXRpb24sIHdoaWNoIGFyZSBub3QgcGxhY2VkXFxuKyAqIGludG8gbW9kLVxcdTAwM2VtZW1bXS5cXG4rICovXFxuKyNkZWZpbmUgU0hfRU5UU0laRV9TVEFOREFMT05FXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKCh1bnNpZ25lZCBsb25nKU1PRF9TVEFOREFMT05FIFxcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXFx0XFxcXFxcbitcXHQgXFx1MDAzY1xcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUKVxcbitcXG4gLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovXFxuICNkZWZpbmUgTU9EVUxFX0ZMQUdTX0JVRl9TSVpFIChUQUlOVF9GTEFHU19DT1VOVCArIDQpXFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXFxuaW5kZXggYzFiMzRkYzFlODlhYy4uNzYwNDQ5ZGRhYjIyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uY1xcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXFxuQEAgLTE2MTcsMTQgKzE2MTcsOCBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbG9jYXRpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKGluZm9zZWMgXFx1MDAzZT0gaW5mby1cXHUwMDNlaGRyLVxcdTAwM2VlX3NobnVtKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuXFxuLVxcdFxcdCAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9uc1xcbi1cXHRcXHQgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWxcXG4tXFx0XFx0ICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIShpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm9zZWNdLnNoX2ZsYWdzIFxcdTAwMjYgU0hGX0FMTE9DKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgKCFpbmZvc2VjIHx8IGluZm9zZWMgIT0gaW5mby1cXHUwMDNlaW5kZXgucGNwdSkpXFxuK1xcdFxcdC8qIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuICovXFxuK1xcdFxcdGlmICghKGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXFx1MDAyNiBTSEZfQUxMT0MpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2VzZWNoZHJzW2ldLnNoX2ZsYWdzIFxcdTAwMjYgU0hGX1JFTEFfTElWRVBBVENIKVxcbkBAIC0xNzE1LDI3ICsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXFxuIFxcbiBcXHRcXHRcXHRpZiAoKHMtXFx1MDAzZXNoX2ZsYWdzIFxcdTAwMjYgbWFza3NbbV1bMF0pICE9IG1hc2tzW21dWzBdXFxuIFxcdFxcdFxcdCAgICB8fCAocy1cXHUwMDNlc2hfZmxhZ3MgXFx1MDAyNiBtYXNrc1ttXVsxXSlcXG4tXFx0XFx0XFx0ICAgIHx8IHMtXFx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxcbitcXHRcXHRcXHQgICAgfHwgcy1cXHUwMDNlc2hfZW50c2l6ZSAhPSB+MFVMIC8qIG9mZnNldCBvciBzdGFuZGFsb25lICovXFxuIFxcdFxcdFxcdCAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHR5cGUgPT0gTU9EX0lOVkFMSUQpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG9cXG4tXFx0XFx0XFx0ICogcHJlYWxsb2NhdGVkIGNvbnRpZ3VvdXMgbWVtb3J5Llxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy1cXHUwMDNlc2hfc2l6ZSkpIHtcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogcy1cXHUwMDNlc2hfZW50c2l6ZSB3b24ndCBiZSB1c2VkIGJ1dCBwb3B1bGF0ZSB0aGVcXG4tXFx0XFx0XFx0XFx0ICogdHlwZSBmaWVsZCB0byBhdm9pZCBjb25mdXNpb24uXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRzLVxcdTAwM2VzaF9lbnRzaXplID0gKCh1bnNpZ25lZCBsb25nKSh0eXBlKSBcXHUwMDI2IFNIX0VOVFNJWkVfVFlQRV9NQVNLKVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDNjXFx1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcbiBcXHRcXHRcXHRzLVxcdTAwM2VzaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCB0eXBlLCBzLCBpKTtcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcIlxcXFx0JXNcXFxcblxcXCIsIHNuYW1lKTtcXG4gXFx0XFx0fVxcbkBAIC0xNzQ1LDE2ICsxNzI1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXFxuIC8qXFxuICAqIExheSBvdXQgdGhlIFNIRl9BTExPQyBzZWN0aW9ucyBpbiBhIHdheSBub3QgZGlzc2ltaWxhciB0byBob3cgbGRcXG4gICogbWlnaHQgLS0gY29kZSwgcmVhZC1vbmx5IGRhdGEsIHJlYWQtd3JpdGUgZGF0YSwgc21hbGwgZGF0YS4gIFRhbGx5XFxuLSAqIHNpemVzLCBhbmQgcGxhY2UgdGhlIG9mZnNldHMgaW50byBzaF9lbnRzaXplIGZpZWxkczogaGlnaCBiaXQgbWVhbnMgaXRcXG4tICogYmVsb25ncyBpbiBpbml0LlxcbisgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBsYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluZm8tXFx1MDAzZWhkci1cXHUwMDNlZV9zaG51bTsgaSsrKVxcbi1cXHRcXHRpbmZvLVxcdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xcbi1cXG4gXFx0cHJfZGVidWcoXFxcIkNvcmUgc2VjdGlvbiBhbGxvY2F0aW9uIG9yZGVyIGZvciAlczpcXFxcblxcXCIsIG1vZC1cXHUwMDNlbmFtZSk7XFxuIFxcdF9fbGF5b3V0X3NlY3Rpb25zKG1vZCwgaW5mbywgZmFsc2UpO1xcbiBcXG5AQCAtMjgwMCw3ICsyNzc0LDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0aW50IGksIHJldDtcXG4gXFx0ZW51bSBtb2RfbWVtX3R5cGUgdCA9IE1PRF9NRU1fTlVNX1RZUEVTO1xcbi1cXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcXG4gXFx0XFx0aWYgKCFtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplKSB7XFxuQEAgLTI4MjAsMzQgKzI3OTMsMTMgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbmZvLVxcdTAwM2VoZHItXFx1MDAzZWVfc2hudW07IGkrKykge1xcbiBcXHRcXHR2b2lkICpkZXN0O1xcbiBcXHRcXHRFbGZfU2hkciAqc2hkciA9IFxcdTAwMjZpbmZvLVxcdTAwM2VzZWNoZHJzW2ldO1xcbi1cXHRcXHRjb25zdCBjaGFyICpzbmFtZTtcXG4gXFxuLVxcdFxcdGlmICghKHNoZHItXFx1MDAzZXNoX2ZsYWdzIFxcdTAwMjYgU0hGX0FMTE9DKSlcXG4rXFx0XFx0aWYgKCEoc2hkci1cXHUwMDNlc2hfZmxhZ3MgXFx1MDAyNiBTSEZfQUxMT0MpXFxuK1xcdFxcdCAgICB8fCBzaGRyLVxcdTAwM2VzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRzbmFtZSA9IGluZm8tXFx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVxcdTAwM2VzaF9uYW1lO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBMb2FkIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSBhcyB0aGV5IG1pZ2h0IHN0aWxsIGJlIHVzZWRcXG4tXFx0XFx0ICogYWZ0ZXIgbW9kdWxlIHVubG9hZC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUpKSB7XFxuLVxcdFxcdFxcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChtb2QsIGkpLCBzaGRyLVxcdTAwM2VzaF9hZGRyYWxpZ24pO1xcbi1cXHRcXHRcXHRpZiAoV0FSTl9PTighZGVzdCkpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoZGVzdCkpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihkZXN0KTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGVudW0gbW9kX21lbV90eXBlIHR5cGUgPSBzaGRyLVxcdTAwM2VzaF9lbnRzaXplIFxcdTAwM2VcXHUwMDNlIFNIX0VOVFNJWkVfVFlQRV9TSElGVDtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLVxcdTAwM2VzaF9lbnRzaXplIFxcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSztcXG4tXFxuLVxcdFxcdFxcdGRlc3QgPSBtb2QtXFx1MDAzZW1lbVt0eXBlXS5iYXNlICsgb2Zmc2V0O1xcbi1cXHRcXHR9XFxuK1xcdFxcdGRlc3QgPSBtb2QtXFx1MDAzZW1lbVtzaGRyLVxcdTAwM2VzaF9lbnRzaXplIFxcdTAwM2VcXHUwMDNlIFNIX0VOVFNJWkVfVFlQRV9TSElGVF0uYmFzZSArXFxuK1xcdFxcdCAgICAgICAoc2hkci1cXHUwMDNlc2hfZW50c2l6ZSBcXHUwMDI2IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0spO1xcbiBcXG4gXFx0XFx0aWYgKHNoZHItXFx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xcbiBcXHRcXHRcXHQvKlxcbkBAIC0yODc5LDggKzI4MzEsNiBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4gXFx0bW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpO1xcbiBcXHR3aGlsZSAodC0tKVxcbiBcXHRcXHRtb2R1bGVfbWVtb3J5X2ZyZWUobW9kLCB0KTtcXG4tXFx0aWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZClcXG4tXFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yOTUxLDkgKzI5MDEsNTEgQEAgc3RhdGljIGJvb2wgYmxhY2tsaXN0ZWQoY29uc3QgY2hhciAqbW9kdWxlX25hbWUpXFxuIH1cXG4gY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7XFxuIFxcbisvKlxcbisgKiBBbGxvY2F0ZSBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkuIFRoZXkgYXJlIGxvYWRlZCBpbnRvIHByZWFsbG9jYXRlZFxcbisgKiBjb250aWd1b3VzIG1lbW9yeSBiZWNhdXNlIHRoZXkgbWF5IHN0aWxsIGJlIHVzZWQgYWZ0ZXIgdGhlIG1vZHVsZSBpc1xcbisgKiB1bmxvYWRlZC5cXG4rICpcXG4rICogSWYgdGhlIHNlcGFyYXRlIGFsbG9jYXRpb24gb3ZlcmZsb3dzLCBhbGxvY2F0ZSB0aGUgc2VjdGlvbiBub3JtYWxseVxcbisgKiBzbyB0aGF0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbit7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNlaGRyLVxcdTAwM2VlX3NobnVtOyBpKyspIHtcXG4rXFx0XFx0RWxmX1NoZHIgKnNoZHIgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpXTtcXG4rXFx0XFx0Y29uc3QgY2hhciAqc25hbWUgPSBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzICsgc2hkci1cXHUwMDNlc2hfbmFtZTtcXG4rXFx0XFx0dm9pZCAqZGVzdDtcXG4rXFxuK1xcdFxcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVxcdTAwM2Vtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihpbmZvLVxcdTAwM2Vtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbitcXHRcXHRcXHRcXHRhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQoaW5mby1cXHUwMDNlbW9kLCBpKSwgc2hkci1cXHUwMDNlc2hfYWRkcmFsaWduKTtcXG4rXFx0XFx0aWYgKFdBUk5fT04oIWRlc3QpKSB7XFxuK1xcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGRlc3QgPT0gRVJSX1BUUigtRUFHQUlOKSlcXG4rXFx0XFx0XFx0LyogQWxsb2NhdGUgdGhlIHNlY3Rpb24gYXMgYSByZWd1bGFyIHNlY3Rpb24uICovXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRlc3QpKSB7XFxuK1xcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kKTtcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzaGRyLVxcdTAwM2VzaF90eXBlICE9IFNIVF9OT0JJVFMpXFxuK1xcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbitcXHRcXHRzaGRyLVxcdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcXG4rXFx0XFx0c2hkci1cXHUwMDNlc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqL1xcbkBAIC0yOTY3LDggKzI5NTksMTMgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFxuK1xcdC8qIFJlcHVycG9zZSBzaF9lbnRzaXplIHRvIHRyYWNrIHdoZXJlIGVhY2ggc2VjdGlvbiBpcyBhbGxvY2F0ZWQuICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbmZvLVxcdTAwM2VoZHItXFx1MDAzZWVfc2hudW07IGkrKylcXG4rXFx0XFx0aW5mby1cXHUwMDNlc2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtcXG4rXFxuIFxcdC8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovXFxuLVxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWluZGV4LnBjcHUpXFxuK1xcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXFxuQEAgLTI5NzcsMTggKzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbiBcXHQgKi9cXG4gXFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVxcdTAwM2VoZHIsIGluZm8tXFx1MDAzZXNlY2hkcnMsIGluZm8tXFx1MDAzZXNlY3N0cmluZ3MpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcXG4tXFx0ICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnlcXG4tXFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXFxuLVxcdCAqL1xcbitcXHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xcbitcXHRlcnIgPSBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKGluZm8pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXG4rXFx0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xcbiBcXHRsYXlvdXRfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4gXFx0bGF5b3V0X3N5bXRhYihpbmZvLVxcdTAwM2Vtb2QsIGluZm8pO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXFxuIFxcdGVyciA9IG1vdmVfbW9kdWxlKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuLVxcdGlmIChlcnIpXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVxcdTAwM2Vtb2QpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cXG4gXFx0bW9kID0gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcXG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xcbmluZGV4IGYzMGVmOGRkMjRjNzAuLjhmMTMzNjliMzJlY2QgMTAwNjQ0XFxuLS0tIGEvbW0vYWxsb2NfdGFnLmNcXG4rKysgYi9tbS9hbGxvY190YWcuY1xcbkBAIC04NDMsNiArODQzLDUyIEBAIHN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXFxuK3tcXG4rXFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpO1xcbitcXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XFxuK1xcdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XFxuK1xcdHN0cnVjdCBtb2R1bGUgKnZhbDtcXG4rXFxuK1xcdG1hc19sb2NrKFxcdTAwMjZtYXMpO1xcbitcXHRtYXNfZm9yX2VhY2hfcmV2KFxcdTAwMjZtYXMsIHZhbCwgMClcXG4rXFx0XFx0aWYgKHZhbCA9PSBtb2QpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIXVzZWQpXFxuK1xcdFxcdGdvdG8gcmVsZWFzZV9hcmVhO1xcbitcXG4rXFx0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XFxuK1xcdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xcbitcXHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XFxuK1xcdFxcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcXG4rXFxuK1xcdFxcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xcbitcXG4rXFx0XFx0XFx0aWYgKCF0YWctXFx1MDAzZWNvdW50ZXJzKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xcbitcXHRcXHRcXHRwcl9pbmZvKFxcXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0dGFnLVxcdTAwM2VjdC5maWxlbmFtZSwgdGFnLVxcdTAwM2VjdC5saW5lbm8sIHRhZy1cXHUwMDNlY3QubW9kbmFtZSxcXG4rXFx0XFx0XFx0XFx0dGFnLVxcdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dXNlZCA9IGZhbHNlO1xcbitcXHR9XFxuK3JlbGVhc2VfYXJlYTpcXG4rXFx0bWFzX3N0b3JlKFxcdTAwMjZtYXMsIHVzZWQgPyBcXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XFxuK1xcdHZhbCA9IG1hc19wcmV2X3JhbmdlKFxcdTAwMjZtYXMsIDApO1xcbitcXHRpZiAodmFsID09IFxcdTAwMjZwcmVwZW5kX21vZClcXG4rXFx0XFx0bWFzX3N0b3JlKFxcdTAwMjZtYXMsIE5VTEwpO1xcbitvdXQ6XFxuK1xcdG1hc191bmxvY2soXFx1MDAyNm1hcyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuIHtcXG5AQCAtOTEyLDEwICs5NTgsMTIgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuIFxcdFxcdGludCBncm93X3JlcztcXG4gXFxuIFxcdFxcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xcbi1cXHRcXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xcbitcXHRcXHRpZiAoIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xcbiBcXHRcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdG1vZC1cXHUwMDNlbmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpO1xcbitcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIldpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBtb2QtXFx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcXG4rXFx0XFx0XFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcXG5AQCAtOTIzLDYgKzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbiBcXHRcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgbW9kLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0XFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTMwLDUyICs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBvZmZzZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxcbi17XFxuLVxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcXG4tXFx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xcbi1cXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xcbi1cXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XFxuLVxcbi1cXHRtYXNfbG9jayhcXHUwMDI2bWFzKTtcXG4tXFx0bWFzX2Zvcl9lYWNoX3JldihcXHUwMDI2bWFzLCB2YWwsIDApXFxuLVxcdFxcdGlmICh2YWwgPT0gbW9kKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0aWYgKCF1c2VkKVxcbi1cXHRcXHRnb3RvIHJlbGVhc2VfYXJlYTtcXG4tXFxuLVxcdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMuaW5kZXgpO1xcbi1cXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcXG4tXFx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xcbi1cXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XFxuLVxcbi1cXHRcXHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFxcdTAwM2M9IGVuZF90YWc7IHRhZysrKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcXG4tXFxuLVxcdFxcdFxcdGlmICghdGFnLVxcdTAwM2Vjb3VudGVycylcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRcXHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cXHUwMDNlY3QubGluZW5vLCB0YWctXFx1MDAzZWN0Lm1vZG5hbWUsXFxuLVxcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHVzZWQgPSBmYWxzZTtcXG4tXFx0fVxcbi1yZWxlYXNlX2FyZWE6XFxuLVxcdG1hc19zdG9yZShcXHUwMDI2bWFzLCB1c2VkID8gXFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xcbi1cXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcXHUwMDI2bWFzLCAwKTtcXG4tXFx0aWYgKHZhbCA9PSBcXHUwMDI2cHJlcGVuZF9tb2QpXFxuLVxcdFxcdG1hc19zdG9yZShcXHUwMDI2bWFzLCBOVUxMKTtcXG4tb3V0Olxcbi1cXHRtYXNfdW5sb2NrKFxcdTAwMjZtYXMpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcXG4ge1xcbiBcXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTowOS44ODgxNjUyOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNjIzMzc2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PRFVMRVNcIixcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbml0X21vZHVsZVwiLFxuICAgIFwiZmluaXRfbW9kdWxlXCIsXG4gICAgXCJjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uXCIsXG4gICAgXCJjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6Mjk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuaW5kZXggOTZjYzk4NTY4ZWVhNS4uMGM2ZjMyZGRjYmYyZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbkBAIC0zMjUsNiArMzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xuIFx0TU9EX0lOSVRfUk9EQVRBLFxuIFxuIFx0TU9EX01FTV9OVU1fVFlQRVMsXG4rXG4rXHRNT0RfU1RBTkRBTE9ORSA9IC0yLFxuIFx0TU9EX0lOVkFMSUQgPSAtMSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaCBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuaW5kZXggMDYxMTYxY2M3OWQ5MC4uNGM3MzgwNzRhMjdiOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuKysrIGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG5AQCAtMjksNiArMjksMTQgQEBcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXHQoKDFVTCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcbiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0tcdCgoMVVMIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKVxuIFxuKy8qXG4rICogTWFya2VyIGZvciBzZWN0aW9ucyB3aXRoIGEgc2VwYXJhdGUgYWxsb2NhdGlvbiwgd2hpY2ggYXJlIG5vdCBwbGFjZWRcbisgKiBpbnRvIG1vZC1cdTAwM2VtZW1bXS5cbisgKi9cbisjZGVmaW5lIFNIX0VOVFNJWkVfU1RBTkRBTE9ORVx0XHRcdFx0XHRcXFxuK1x0KCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSBcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXHRcXFxuK1x0IFx1MDAzY1x1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQpXG4rXG4gLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovXG4gI2RlZmluZSBNT0RVTEVfRkxBR1NfQlVGX1NJWkUgKFRBSU5UX0ZMQUdTX0NPVU5UICsgNClcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTYxNywxNCArMTYxNyw4IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0XHRpZiAoaW5mb3NlYyBcdTAwM2U9IGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW0pXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuXG4tXHRcdCAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9uc1xuLVx0XHQgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWxcbi1cdFx0ICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWluZm9zZWMgfHwgaW5mb3NlYyAhPSBpbmZvLVx1MDAzZWluZGV4LnBjcHUpKVxuK1x0XHQvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zLiAqL1xuK1x0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZmxhZ3MgXHUwMDI2IFNIRl9SRUxBX0xJVkVQQVRDSClcbkBAIC0xNzE1LDI3ICsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gXG4gXHRcdFx0aWYgKChzLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF1cbiBcdFx0XHQgICAgfHwgKHMtXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IG1hc2tzW21dWzFdKVxuLVx0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxuK1x0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTCAvKiBvZmZzZXQgb3Igc3RhbmRhbG9uZSAqL1xuIFx0XHRcdCAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmIChXQVJOX09OX09OQ0UodHlwZSA9PSBNT0RfSU5WQUxJRCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG9cbi1cdFx0XHQgKiBwcmVhbGxvY2F0ZWQgY29udGlndW91cyBtZW1vcnkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIHMtXHUwMDNlc2hfZW50c2l6ZSB3b24ndCBiZSB1c2VkIGJ1dCBwb3B1bGF0ZSB0aGVcbi1cdFx0XHRcdCAqIHR5cGUgZmllbGQgdG8gYXZvaWQgY29uZnVzaW9uLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzLVx1MDAzZXNoX2VudHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpKHR5cGUpIFx1MDAyNiBTSF9FTlRTSVpFX1RZUEVfTUFTSylcbi1cdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuIFx0XHRcdHMtXHUwMDNlc2hfZW50c2l6ZSA9IG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKG1vZCwgdHlwZSwgcywgaSk7XG4gXHRcdFx0cHJfZGVidWcoXCJcXHQlc1xcblwiLCBzbmFtZSk7XG4gXHRcdH1cbkBAIC0xNzQ1LDE2ICsxNzI1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gLypcbiAgKiBMYXkgb3V0IHRoZSBTSEZfQUxMT0Mgc2VjdGlvbnMgaW4gYSB3YXkgbm90IGRpc3NpbWlsYXIgdG8gaG93IGxkXG4gICogbWlnaHQgLS0gY29kZSwgcmVhZC1vbmx5IGRhdGEsIHJlYWQtd3JpdGUgZGF0YSwgc21hbGwgZGF0YS4gIFRhbGx5XG4tICogc2l6ZXMsIGFuZCBwbGFjZSB0aGUgb2Zmc2V0cyBpbnRvIHNoX2VudHNpemUgZmllbGRzOiBoaWdoIGJpdCBtZWFucyBpdFxuLSAqIGJlbG9uZ3MgaW4gaW5pdC5cbisgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXG4gICovXG4gc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKylcbi1cdFx0aW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xuLVxuIFx0cHJfZGVidWcoXCJDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbiBcdF9fbGF5b3V0X3NlY3Rpb25zKG1vZCwgaW5mbywgZmFsc2UpO1xuIFxuQEAgLTI4MDAsNyArMjc3NCw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIHtcbiBcdGludCBpLCByZXQ7XG4gXHRlbnVtIG1vZF9tZW1fdHlwZSB0ID0gTU9EX01FTV9OVU1fVFlQRVM7XG4tXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xuIFxuIFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbiBcdFx0aWYgKCFtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcbkBAIC0yODIwLDM0ICsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKSB7XG4gXHRcdHZvaWQgKmRlc3Q7XG4gXHRcdEVsZl9TaGRyICpzaGRyID0gXHUwMDI2aW5mby1cdTAwM2VzZWNoZHJzW2ldO1xuLVx0XHRjb25zdCBjaGFyICpzbmFtZTtcbiBcbi1cdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSlcbitcdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKVxuK1x0XHQgICAgfHwgc2hkci1cdTAwM2VzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0c25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4tXHRcdC8qXG4tXHRcdCAqIExvYWQgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IGFzIHRoZXkgbWlnaHQgc3RpbGwgYmUgdXNlZFxuLVx0XHQgKiBhZnRlciBtb2R1bGUgdW5sb2FkLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSxcbi1cdFx0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi1cdFx0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChJU19FUlIoZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IFBUUl9FUlIoZGVzdCk7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwM2VcdTAwM2UgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAyNiBTSF9FTlRTSVpFX09GRlNFVF9NQVNLO1xuLVxuLVx0XHRcdGRlc3QgPSBtb2QtXHUwMDNlbWVtW3R5cGVdLmJhc2UgKyBvZmZzZXQ7XG4tXHRcdH1cbitcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlRdLmJhc2UgK1xuK1x0XHQgICAgICAgKHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7XG4gXG4gXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xuIFx0XHRcdC8qXG5AQCAtMjg3OSw4ICsyODMxLDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4gXHRtb2R1bGVfbWVtb3J5X3Jlc3RvcmVfcm94KG1vZCk7XG4gXHR3aGlsZSAodC0tKVxuIFx0XHRtb2R1bGVfbWVtb3J5X2ZyZWUobW9kLCB0KTtcbi1cdGlmIChjb2RldGFnX3NlY3Rpb25fZm91bmQpXG4tXHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI5NTEsOSArMjkwMSw1MSBAQCBzdGF0aWMgYm9vbCBibGFja2xpc3RlZChjb25zdCBjaGFyICptb2R1bGVfbmFtZSlcbiB9XG4gY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7XG4gXG4rLypcbisgKiBBbGxvY2F0ZSBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkuIFRoZXkgYXJlIGxvYWRlZCBpbnRvIHByZWFsbG9jYXRlZFxuKyAqIGNvbnRpZ3VvdXMgbWVtb3J5IGJlY2F1c2UgdGhleSBtYXkgc3RpbGwgYmUgdXNlZCBhZnRlciB0aGUgbW9kdWxlIGlzXG4rICogdW5sb2FkZWQuXG4rICpcbisgKiBJZiB0aGUgc2VwYXJhdGUgYWxsb2NhdGlvbiBvdmVyZmxvd3MsIGFsbG9jYXRlIHRoZSBzZWN0aW9uIG5vcm1hbGx5XG4rICogc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBzdGlsbCBiZSBsb2FkZWQuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4re1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKykge1xuK1x0XHRFbGZfU2hkciAqc2hkciA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpXTtcbitcdFx0Y29uc3QgY2hhciAqc25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4rXHRcdHZvaWQgKmRlc3Q7XG4rXG4rXHRcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVx1MDAzZW1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuK1x0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKGluZm8tXHUwMDNlbW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuK1x0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbitcdFx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRpZiAoZGVzdCA9PSBFUlJfUFRSKC1FQUdBSU4pKVxuK1x0XHRcdC8qIEFsbG9jYXRlIHRoZSBzZWN0aW9uIGFzIGEgcmVndWxhciBzZWN0aW9uLiAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoSVNfRVJSKGRlc3QpKSB7XG4rXHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNoZHItXHUwMDNlc2hfdHlwZSAhPSBTSFRfTk9CSVRTKVxuK1x0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbitcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbitcdFx0c2hkci1cdTAwM2VzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG5AQCAtMjk2Nyw4ICsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXG4rXHQvKiBSZXB1cnBvc2Ugc2hfZW50c2l6ZSB0byB0cmFjayB3aGVyZSBlYWNoIHNlY3Rpb24gaXMgYWxsb2NhdGVkLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKVxuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XG4rXG4gXHQvKiBXZSB3aWxsIGRvIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciBwZXItY3B1IHNlY3Rpb25zIGxhdGVyLiAqL1xuLVx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuK1x0aWYgKGluZm8tXHUwMDNlaW5kZXgucGNwdSlcbitcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcbiBcbiBcdC8qXG4gXHQgKiBNYXJrIHJlbGV2YW50IHNlY3Rpb25zIGFzIFNIRl9ST19BRlRFUl9JTklUIHNvIGxheW91dF9zZWN0aW9ucygpIGNhblxuQEAgLTI5NzcsMTggKzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbi1cdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55XG4tXHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbi1cdCAqL1xuK1x0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cbitcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xuIFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFxuIFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4gXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4tXHRpZiAoZXJyKVxuK1x0aWYgKGVycikge1xuK1x0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdH1cbiBcbiBcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xuIFx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggZjMwZWY4ZGQyNGM3MC4uOGYxMzM2OWIzMmVjZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTg0Myw2ICs4NDMsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4re1xuK1x0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuK1x0c3RydWN0IG1vZHVsZSAqdmFsO1xuK1xuK1x0bWFzX2xvY2soXHUwMDI2bWFzKTtcbitcdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4rXHRcdGlmICh2YWwgPT0gbW9kKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIXVzZWQpXG4rXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuK1xuK1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4rXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbitcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbitcdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuK1xuK1x0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbitcdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4rXG4rXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbitcdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbitcdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR1c2VkID0gZmFsc2U7XG4rXHR9XG4rcmVsZWFzZV9hcmVhOlxuK1x0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuK1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbitcdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4rXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuK291dDpcbitcdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkxMiwxMCArOTU4LDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRpbnQgZ3Jvd19yZXM7XG4gXG4gXHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xuLVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbitcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbi1cdFx0XHRcdG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cHJfd2Fybl9vbmNlKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4rXHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0fVxuIFxuIFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG5AQCAtOTIzLDYgKzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gXHRcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbiBcdFx0XHQgICAgICAgbW9kLVx1MDAzZW5hbWUpO1xuK1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTMwLDUyICs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcbi17XG4tXHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbi1cdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcbi1cdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XG4tXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4tXG4tXHRtYXNfbG9jayhcdTAwMjZtYXMpO1xuLVx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbi1cdFx0aWYgKHZhbCA9PSBtb2QpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmICghdXNlZClcbi1cdFx0Z290byByZWxlYXNlX2FyZWE7XG4tXG4tXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwiLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXHUwMDNlY3QubGluZW5vLCB0YWctXHUwMDNlY3QubW9kbmFtZSxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHVzZWQgPSBmYWxzZTtcbi1cdH1cbi1yZWxlYXNlX2FyZWE6XG4tXHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4tXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcdTAwMjZtYXMsIDApO1xuLVx0aWYgKHZhbCA9PSBcdTAwMjZwcmVwZW5kX21vZClcbi1cdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4tb3V0OlxuLVx0bWFzX3VubG9jayhcdTAwMjZtYXMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiB7XG4gXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MDkuODg4MTY3NzYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM0NDY0NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB3aGF0IGNvbmZpZyBvcHRpb25zIG1pZ2h0IGJlIGludm9sdmVkLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBmaWxlcywgYW5kIGltbWVkaWF0ZWx5IEknbSBsb29raW5nIGZvciB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlc2UgY2hhbmdlcy5cblxuRmlyc3QsIGBpbmNsdWRlL2xpbnV4L21vZHVsZS5oYCBoYXMgYSBuZXcgZW51bSB2YWx1ZSwgYE1PRF9TVEFOREFMT05FID0gLTJgLCBhZGRlZCB0byBgZW51bSBtb2RfbWVtX3R5cGVgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGVuIGBrZXJuZWwvbW9kdWxlL2ludGVybmFsLmhgIGFkZHMgdGhlIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIG1hY3JvIOKAkyBzbyB0aGlzIGAtMmAgaXMgZGVmaW5pdGVseSBjb25uZWN0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgbWVtb3J5IHR5cGUuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgZGlzdGluY3QgbWVtb3J5IHJlZ2lvbiBmb3IgbW9kdWxlIGxvYWRpbmcuXG5cblRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYC4gSXQncyBtb2RpZnlpbmcgY29yZSBtb2R1bGUgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHJvdXRpbmVzOiBgYXBwbHlfcmVsb2NhdGlvbnNgLCBgX19sYXlvdXRfc2VjdGlvbnNgLCBgbGF5b3V0X3NlY3Rpb25zYCwgYG1vdmVfbW9kdWxlYCwgYW5kIGBsYXlvdXRfYW5kX2FsbG9jYXRlYC4gUGx1cywgdGhlcmUncyB0aGUgaW50cm9kdWN0aW9uIG9mIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYC4gVGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IHNlY3Rpb25zLCBwYXJ0aWN1bGFybHkgY29kZXRhZyBzZWN0aW9ucyBhbmQgcGVyY3B1IHNlY3Rpb25zIChzdGFuZGFsb25lIHNlY3Rpb25zKSwgYXJlIGhhbmRsZWQgZHVyaW5nIG1vZHVsZSBsb2FkaW5nLiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGZvY3VzZWQgb24gZW5zdXJpbmcgdGhhdCB0aGVzZSBuZXcgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IG1hbmFnZWQgZHVyaW5nIGxvYWRpbmcgYW5kIHJlbG9jYXRpb24uXG5cbkZpbmFsbHksIGBtbS9hbGxvY190YWcuY2Agc2VlcyBzb21lIGludGVyZXN0aW5nIHJlb3JkZXJpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGFyb3VuZCBtb2R1bGUgdGFnIGFsbG9jYXRpb24uIFRoZSBgcmVsZWFzZV9tb2R1bGVfdGFnc2AgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuIEluIGByZXNlcnZlX21vZHVsZV90YWdzYCwgdGhlcmUncyBhIHNwZWNpZmljIGNoZWNrIGZvciBgIXRhZ3NfYWRkcmVzc2FibGUoKWAsIGFuZCBpZiBpdCdzIHRydWUsIGl0IHJlbGVhc2VzIHRhZ3MgYW5kIHJldHVybnMgYC1FQUdBSU5gLiBBbHNvLCB0aGVyZSdzIGEgZmFpbHVyZSByZWxlYXNlIGZvciBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKWAuIFRoaXMgaXMga2V5LiBJdCBpbXBsaWVzIGEgbmV3IGFwcHJvYWNoIG9yIGNvbmRpdGlvbiB3aGVyZSBtZW1vcnkgdGFnZ2luZyBtaWdodCBmYWlsIGFuZCByZXF1aXJlcyBhIHJldHJ5IG9yIGZhbGxiYWNrLiBUaGlzIGNvdWxkIG9wZW4gaW50ZXJlc3RpbmcgZnV6emluZyBwb3NzaWJpbGl0aWVzLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZnV6emFibGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBjb250cm9sbGVkIGJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFyb3VuZCBgYWxsb2NfdGFnYCBhbmQgbW9kdWxlIGxvYWRpbmcsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb3IgdHJpZ2dlcnMgZm9yIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4cG9zZSB0aGVzZSBuZXcgcGF0aHMsIHNvIEkgY2FuIGNyZWF0ZSBhIGZ1enppbmcgY29uZmlndXJhdGlvbiB0aGF0IHJlYWNoZXMgdGhlc2UgbmV3IGZlYXR1cmVzLiBUaGlzIHBhdGNoIGhhcyBkZWZpbml0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToxNC4yMzI4MTQ5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NjY5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjItXFxubW0vS2NvbmZpZy5kZWJ1ZzozMjM6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9LY29uZmlnLmRlYnVnLTMyNC1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzUtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMzY6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbm1tL0tjb25maWcuZGVidWctMzM4LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWcuZGVidWc6MzM5OlxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWctMzQwLVxcbm1tL0tjb25maWcuZGVidWc6MzQxOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcbm1tL0tjb25maWcuZGVidWctMzQzLVxcdGRlZmF1bHQgblxcbm1tL0tjb25maWcuZGVidWc6MzQ0OlxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWc6MzQ1OlxcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbm1tL0tjb25maWcuZGVidWctMzQ2LVxcdGhlbHBcXG4tLVxcbm1tL01ha2VmaWxlPTE0OT1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSArPSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cXG5tbS9NYWtlZmlsZToxNTA6b2JqLSQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpICs9IGFsbG9jX3RhZy5vXFxuLS1cXG5tbS9hbGxvY190YWcuYy0yOS1cXG5tbS9hbGxvY190YWcuYzozMDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vYWxsb2NfdGFnLmMtMzEtc3RhdGljIGJvb2wgbWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gdHJ1ZTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ5PUVYUE9SVF9TWU1CT0woX3NoYXJlZF9hbGxvY190YWcpO1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNTEtXFxubW0vYWxsb2NfdGFnLmM6NTI6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbm1tL2FsbG9jX3RhZy5jLTUzLVxcdFxcdFxcdG1lbV9hbGxvY19wcm9maWxpbmdfa2V5KTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTExMjk9c3RhdGljIF9faW5pdCBib29sIG5lZWRfcGFnZV9hbGxvY190YWdnaW5nKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMTM2LVxcbm1tL2FsbG9jX3RhZy5jOjExMzc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vYWxsb2NfdGFnLmMtMTEzOC0vKlxcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTIxNT1zdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMjY4LX1cXG5tbS9hbGxvY190YWcuYzoxMjY5OiNlbHNlIC8qICFDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL2FsbG9jX3RhZy5jLTEyNzAtc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjbGVhcl9lYXJseV9hbGxvY19wZm5fdGFnX3JlZnModm9pZCkge31cXG5tbS9hbGxvY190YWcuYzoxMjcxOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL2FsbG9jX3RhZy5jLTEyNzItXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMjkwPXN0YXRpYyBpbnQgcHJvY19tZW1fcHJvZmlsaW5nX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzMDEtXFxubW0vYWxsb2NfdGFnLmM6MTMwMjojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9hbGxvY190YWcuYy0xMzAzLVxcdFxcdC8qIFVzZXIgY2FuJ3QgdG9nZ2xlIHByb2ZpbGluZyB3aGlsZSBkZWJ1Z2dpbmcgKi9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMjAyPXN0YXRpYyB2b2lkIGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMjE2LVxcbm1tL3BhZ2VfYWxsb2MuYzoxMjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3BhZ2VfYWxsb2MuYy0xMjE4LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEyODM9c3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMjg4LVxcbm1tL3BhZ2VfYWxsb2MuYzoxMjg5OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vcGFnZV9hbGxvYy5jLTEyOTAtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTI5ND1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxcbm1tL3BhZ2VfYWxsb2MuYy0xMjk1LVxcbm1tL3BhZ2VfYWxsb2MuYzoxMjk2OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0xMjk3LVxcbi0tXFxubW0vcGFnZV9leHQuYz04MD1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0X29wZXJhdGlvbnMgKnBhZ2VfZXh0X29wc1tdIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5tbS9wYWdlX2V4dC5jLTg2LSNlbmRpZlxcbm1tL3BhZ2VfZXh0LmM6ODc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGFnZV9leHQuYy04OC1cXHRcXHUwMDI2cGFnZV9hbGxvY190YWdnaW5nX29wcyxcXG4tLVxcbm1tL3BhZ2VfZXh0LmM9MTAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX3VzYWdlO1xcbm1tL3BhZ2VfZXh0LmMtMTAxLVxcbm1tL3BhZ2VfZXh0LmM6MTAyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL3BhZ2VfZXh0LmMtMTAzLS8qXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0zNT1zdHJ1Y3QgcGNwdW9ial9leHQge1xcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmgtMzgtI2VuZGlmXFxubW0vcGVyY3B1LWludGVybmFsLmg6Mzk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGVyY3B1LWludGVybmFsLmgtNDAtXFx0dW5pb24gY29kZXRhZ19yZWZcXHR0YWc7XFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00My1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo0NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIHx8IGRlZmluZWQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpXFxubW0vcGVyY3B1LWludGVybmFsLmgtNDUtI2RlZmluZSBORUVEX1BDUFVPQkpfRVhUXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD05MD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wY3B1b2JqX2V4dCh2b2lkKVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTkxLXtcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo5MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykpXFxubW0vcGVyY3B1LWludGVybmFsLmgtOTMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9wZXJjcHUuYz0xNjg4PXN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfZnJlZV9ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9wZXJjcHUuYy0xNjkyLVxcbm1tL3BlcmNwdS5jOjE2OTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGVyY3B1LmMtMTY5NC1zdGF0aWMgdm9pZCBwY3B1X2FsbG9jX3RhZ19hbGxvY19ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcXG4tLVxcbm1tL3Nob3dfbWVtLmM9NDA4PXZvaWQgX19zaG93X21lbSh1bnNpZ25lZCBpbnQgZmlsdGVyLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzayxcXG4tLVxcbm1tL3Nob3dfbWVtLmMtNDM0LSNlbmRpZlxcbm1tL3Nob3dfbWVtLmM6NDM1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3Nob3dfbWVtLmMtNDM2LVxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWVtX2FsbG9jX3Byb2ZpbGluZ19zcGlubG9jayk7XFxuLS1cXG5tbS9zbGFiLmg9NjA0PXN0cnVjdCBzbGFib2JqX2V4dCB7XFxuLS1cXG5tbS9zbGFiLmgtNjEyLSNlbmRpZlxcbm1tL3NsYWIuaDo2MTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2xhYi5oLTYxNC1cXHRcXHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XFxuLS1cXG5tbS9zbGFiLmgtNjE4LVxcbm1tL3NsYWIuaDo2MTk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2xhYi5oOjYyMDpERUNMQVJFX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbm1tL3NsYWIuaC02MjEtXFx0XFx0XFx0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbi0tXFxubW0vc2xhYi5oPTYyMz1zdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpXFxubW0vc2xhYi5oLTYyNC17XFxubW0vc2xhYi5oOjYyNTpcXHRyZXR1cm4gc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXFxubW0vc2xhYi5oLTYyNi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuLS1cXG5tbS9zbGFiLmg9ODA3PXNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcXG4tLVxcbm1tL3NsYWIuaC04MTYtXFxubW0vc2xhYi5oOjgxNzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9zbGFiLmgtODE4LXN0YXRpYyBpbmxpbmUgdW5pb24gY29kZXRhZ19yZWYgKlxcbi0tXFxubW0vc2x1Yi5jPTIxND1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xcbi0tXFxubW0vc2x1Yi5jLTIxNi1cXG5tbS9zbHViLmM6MjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3NsdWIuYzoyMTg6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbm1tL3NsdWIuYy0yMTktXFx0XFx0XFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuLS1cXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTIwODYtXFxubW0vc2x1Yi5jOjIwODc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vc2x1Yi5jLTIwODgtXFxuLS1cXG5tbS9zbHViLmM9MjEyND1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIxNDktXFxubW0vc2x1Yi5jOjIxNTA6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG5tbS9zbHViLmMtMjE1MS1cXG4tLVxcbm1tL3NsdWIuYz0yMTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjE1Ni1cXG5tbS9zbHViLmM6MjE1NzojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG5tbS9zbHViLmMtMjE1OC1cXG4tLVxcbm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzNTItXFxubW0vc2x1Yi5jOjIzNTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzNTQtXFxuLS1cXG5tbS9zbHViLmM9MjQ2OT1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDgwLVxcbm1tL3NsdWIuYzoyNDgxOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vc2x1Yi5jLTI0ODItXFxuLS1cXG5tbS9zbHViLmM9MjQ5NT1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDk4LVxcbm1tL3NsdWIuYzoyNDk5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3NsdWIuYy0yNTAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToxNC4zMzI0ODY2NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4MTQwMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipLY29uZmlnIERlZXAgRGl2ZTogQ09ERV9UQUdHSU5HIGFuZCBNRU1fQUxMT0NfUFJPRklMSU5HKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byBzb21lIEtjb25maWcgb3B0aW9ucy4gTGV0J3Mgc2VlLi4uIHdoYXQncyBvbiB0aGUgYWdlbmRhIHRvZGF5PyBBaCwgeWVzLCBgQ09ERV9UQUdHSU5HYCBhbmQgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaG9zZSB0d28gYXJlIG9mdGVuIGludGVydHdpbmVkLCBlc3BlY2lhbGx5IHdoZW4gd2UncmUgdGhpbmtpbmcgYWJvdXQgbG93LWxldmVsIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgcGxheSB0b2dldGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncywgYW5kIHdoYXQgaW1wbGljYXRpb25zIGVhY2ggaGFzIG9uIHRoZSBrZXJuZWwncyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UsIGFuZCB0aGUgYW1vdW50IG9mIGluc3RydW1lbnRhdGlvbiB0byBiZSBhd2FyZSBvZi4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtLCBhbmQgd2hhdCB0aGUgdHJhZGUtb2ZmcyBhcmUuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB3aGVyZSB0aGVzZSBhcmUgdXNlZCBhcyB0aGlzIGNvdWxkIGFmZmVjdCB0aGUgZW50aXJlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToxNi40NDA2Mjk5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY5NTQ5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPREVfVEFHR0lOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTEwMTQ9Y29uZmlnIERFQlVHX1NUQUNLT1ZFUkZMT1dcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTEwMzEtXFxubGliL0tjb25maWcuZGVidWc6MTAzMjpjb25maWcgQ09ERV9UQUdHSU5HXFxubGliL0tjb25maWcuZGVidWctMTAzMy1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjE2LjU0NzU5NTU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTY0MTA0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIEtjb25maWcgaW4gdGhlIFdpbGQqKlxuXG5Pa2F5LCBzbyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMsIGNoYXNpbmcgZG93biBhIGJ1Zy4gVGhlIHByb2JsZW0ncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgZGVidWcgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBjb2RlYmFzZSwgSSBjYW4gYWxtb3N0IHNtZWxsIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZS4gTXkgZ3V0IHRlbGxzIG1lIHRvIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gSXQncyBhIGtleSBmaWxlIGZvciBhbnkgZGVidWdnaW5nLXJlbGF0ZWQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoYXQgbGluZSAxMDMyIG1pZ2h0IGhvbGQgYSBjbHVlLiBJdCdzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZvciBkaWdnaW5nIGluIGFuZCB0YWtpbmcgYSBsb29rLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MTkuMTQ0MDA4NjA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjU6XFx0XFx0ICBpbnZvbHZlZC5cXG4xMDI2OlxcdFxcbjEwMjc6XFx0XFx0ICBVc2UgdGhpcyBpbiBjYXNlcyB3aGVyZSB5b3Ugc2VlIGFwcGFyZW50bHkgcmFuZG9tIG1lbW9yeVxcbjEwMjg6XFx0XFx0ICBjb3JydXB0aW9uLCBlc3BlY2lhbGx5IGlmIGl0IGFwcGVhcnMgaW4gJ3N0cnVjdCB0aHJlYWRfaW5mbydcXG4xMDI5OlxcdFxcbjEwMzA6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4xMDMxOlxcdFxcbjEwMzI6XFx0Y29uZmlnIENPREVfVEFHR0lOR1xcbjEwMzM6XFx0XFx0Ym9vbFxcbjEwMzQ6XFx0XFx0c2VsZWN0IEtBTExTWU1TXFxuMTAzNTpcXHRcXG4xMDM2OlxcdHNvdXJjZSBcXFwibGliL0tjb25maWcua2FzYW5cXFwiXFxuMTAzNzpcXHRzb3VyY2UgXFxcImxpYi9LY29uZmlnLmtmZW5jZVxcXCJcXG4xMDM4OlxcdHNvdXJjZSBcXFwibGliL0tjb25maWcua21zYW5cXFwiXFxuMTAzOTpcXHRcXG4xMDQwOlxcdGVuZG1lbnUgIyBcXFwiTWVtb3J5IERlYnVnZ2luZ1xcXCJcXG4xMDQxOlxcdFxcbjEwNDI6XFx0Y29uZmlnIERFQlVHX1NISVJRXFxuMTA0MzpcXHRcXHRib29sIFxcXCJEZWJ1ZyBzaGFyZWQgSVJRIGhhbmRsZXJzXFxcIlxcbjEwNDQ6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG4xMDQ1OlxcdFxcdGhlbHBcXG4xMDQ2OlxcdFxcdCAgRW5hYmxlIHRoaXMgdG8gZ2VuZXJhdGUgYSBzcHVyaW91cyBpbnRlcnJ1cHQganVzdCBiZWZvcmUgYSBzaGFyZWRcXG4xMDQ3OlxcdFxcdCAgaW50ZXJydXB0IGhhbmRsZXIgaXMgZGVyZWdpc3RlcmVkIChnZW5lcmF0aW5nIG9uZSB3aGVuIHJlZ2lzdGVyaW5nXFxuMTA0ODpcXHRcXHQgIGlzIGN1cnJlbnRseSBkaXNhYmxlZCkuIERyaXZlcnMgbmVlZCB0byBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuIFNvbWVcXG4xMDQ5OlxcdFxcdCAgZG9uJ3QgYW5kIG5lZWQgdG8gYmUgY2F1Z2h0LlxcbjEwNTA6XFx0XFxuMTA1MTpcXHRtZW51IFxcXCJEZWJ1ZyBPb3BzLCBMb2NrdXBzIGFuZCBIYW5nc1xcXCJcXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFBBTklDX09OX09PUFNcXG4xMDU0OlxcdFxcdGJvb2wgXFxcIlBhbmljIG9uIE9vcHNcXFwiXFxuMTA1NTpcXHRcXHRoZWxwXFxuMTA1NjpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXJuZWwgdG8gcGFuaWMgd2hlbiBpdCBvb3BzZXMuIFRoaXNcXG4xMDU3OlxcdFxcdCAgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzZXR0aW5nIG9vcHM9cGFuaWMgb24gdGhlIGtlcm5lbCBjb21tYW5kXFxuMTA1ODpcXHRcXHQgIGxpbmUuXFxuMTA1OTpcXHRcXG4xMDYwOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCB0byBlbnN1cmUgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IGRvXFxuMTA2MTpcXHRcXHQgIGFueXRoaW5nIGVycm9uZW91cyBhZnRlciBhbiBvb3BzIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkYXRhXFxuMTA2MjpcXHRcXHQgIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzLlxcbjEwNjM6XFx0XFxuMTA2NDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MTkuMTQ0MTg5MjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4MzUyMDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcsIGFuZCBteSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBpc3N1ZSByZWxhdGVkIHRvIGRlYnVnZ2luZy4gR2l2ZW4gdGhhdCwgbGV0J3MgemVybyBpbiBvbiBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBzd2VldCBzcG90IHRvIGxvb2sgZm9yIHRoaXMgaXNzdWUgbWlnaHQgYmUgYXJvdW5kIGxpbmUgMzIwLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQncyBhIGZhaXJseSBjb21tb24gc3BvdCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgb3B0aW9ucywgb3IgcGVyaGFwcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHN1Y2ggb3B0aW9ucywgdG8gYmUgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFscyBvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToyMS4wMjc3MTE4MjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0ICBmYXVsdHMgaGFuZGxlZCB1bmRlciBwcm90ZWN0aW9uIG9mIHBlci12bWEgbG9ja3MuIFdoZW4gZW5hYmxlZCwgdGhlXFxuIDMxNjpcXHRcXHQgIGNvdW50ZXJzIGFyZSBleHBvc2VkIGluIC9wcm9jL3Ztc3RhdC4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yXFxuIDMxNzpcXHRcXHQgIGtlcm5lbCBkZXZlbG9wZXJzIHRvIGV2YWx1YXRlIGVmZmVjdGl2ZW5lc3Mgb2YgcGVyLXZtYSBsb2NrcyBhbmQgdG9cXG4gMzE4OlxcdFxcdCAgaWRlbnRpZnkgcGF0aG9sb2dpY2FsIGNhc2VzLiBDb3VudGluZyB0aGVzZSBldmVudHMgaW50cm9kdWNlcyBhIHNtYWxsXFxuIDMxOTpcXHRcXHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAzMjI6XFx0XFxuIDMyMzpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzMjQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4gMzI1OlxcdFxcdGRlZmF1bHQgblxcbiAzMjY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gMzI3OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAzMjg6XFx0XFx0c2VsZWN0IENPREVfVEFHR0lOR1xcbiAzMjk6XFx0XFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuIDMzMDpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcXG4gMzMzOlxcdFxcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xcbiAzMzQ6XFx0XFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cXG4gMzM1OlxcdFxcbiAzMzY6XFx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxuIDMzNzpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuIDMzODpcXHRcXHRkZWZhdWx0IHlcXG4gMzM5OlxcdFxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbiAzNDI6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcbiAzNDM6XFx0XFx0ZGVmYXVsdCBuXFxuIDM0NDpcXHRcXHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4gMzQ1OlxcdFxcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbiAzNDY6XFx0XFx0aGVscFxcbiAzNDc6XFx0XFx0ICBBZGRzIHdhcm5pbmdzIHdpdGggaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cXG4gMzQ4OlxcdFxcdCAgcHJvZmlsaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToyMS4wMjc3OTU3NThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0MTE1NTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENPREVfVEFHR0lOR2AgU2VsZWN0aW9uIENyaXRlcmlhKipcblxuQWxyaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgQ09ERV9UQUdHSU5HYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBhdXNlIGFuZCB0cnkgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiBpdHMgcHVycG9zZS5cblxuVGhlIGltcGxpY2l0IGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSBhcmUgb3RoZXIgc2VsZWN0aW9uIG1ldGhvZHMsIGZlYXR1cmVzLCBydWxlcywgb3IgaW5wdXRzIGluIHBsYXkuIFRoaW5raW5nIHN5c3RlbWF0aWNhbGx5LCBJIG5lZWQgdG8ga25vdzogd2hhdCBjcml0ZXJpYSBiZXNpZGVzIHRoZSBleHBsaWNpdGx5IG1lbnRpb25lZCBvbmUgZGV0ZXJtaW5lIHRoZSBzZWxlY3Rpb24gb2YgYENPREVfVEFHR0lOR2A/IFdoYXQgYXJlIGFsbCB0aGUgdHJpZ2dlcnMsIGNvbnN0cmFpbnRzLCBvciBjb250ZXh0dWFsIGZhY3RvcnMgaW5mbHVlbmNpbmcgaXRzIGludm9jYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNldCBvZiBjb25kaXRpb25zLCBub3QganVzdCB0aGUgb2J2aW91cyBvbmUuIFNvLCB3aGF0IGVsc2UgaXMgY29udHJpYnV0aW5nIHRvLCBvciBwb3RlbnRpYWxseSBpbmZsdWVuY2luZywgYSBwcm9jZXNzIHRoYXQgY2hvb3NlcyBgQ09ERV9UQUdHSU5HYD9cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjIzLjY2ODk1NDQ0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MzI3MTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQ09ERV9UQUdHSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MzIzPWNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMyNy1cXHRkZXBlbmRzIG9uIFBST0NfRlNcXG5tbS9LY29uZmlnLmRlYnVnOjMyODpcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjktXFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjI1Ljg1MjIzMjE4M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzQ4MDU1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNb2R1bGUgTG9hZGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBtb2R1bGUgbG9hZGluZywgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhlIGBNT0RVTEVTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpbnZvbHZlZCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3JlIG1vZHVsZSBsb2FkaW5nIGNvZGUgKGBrZXJuZWwvbW9kdWxlL21haW4uY2ApLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC5cblxuTGV0J3Mgc2VlLCBJJ3ZlIGdvdCBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIGFzIHRoZSBwcmltYXJ5IGFmZmVjdGVkIGZpbGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gRnJvbSBhIHF1aWNrIGdsYW5jZSBhdCBga2VybmVsL21vZHVsZS9tYWluLmNgLCBpdCBsb29rcyBsaWtlIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdG91Y2hlZDogYGFwcGx5X3JlbG9jYXRpb25zYCwgYF9fbGF5b3V0X3NlY3Rpb25zYCwgYGxheW91dF9zZWN0aW9uc2AsIGBtb3ZlX21vZHVsZWAsIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYCwgYW5kIGBsYXlvdXRfYW5kX2FsbG9jYXRlYC4gSSBzaG91bGQgbm90ZSB0aGF0IHRoZXkgYXJlIGFsbCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZWlyIHZpc2liaWxpdHkgaXMgbGltaXRlZCB0byB0aGUgZmlsZSBzY29wZSwgdXN1YWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2UuXG5cbkNydWNpYWxseSwgSSBzZWUgdGhhdCB0aGUgYGxvYWRfbW9kdWxlYCBmdW5jdGlvbiBjYWxscyBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAuIEFuZCBgbG9hZF9tb2R1bGVgIGl0c2VsZiBpcyBhIHZlcnkgaW1wb3J0YW50IGVudHJ5IHBvaW50LCB3aGljaCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBocy4gU28sIEkgd2lsbCBjaGVjayB0aGUgY2FsbGVycyBvZiBib3RoIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCBhbmQgYGxvYWRfbW9kdWxlYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcyB0aHJvdWdoIHRoZSBzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHN1cnByaXNpbmcgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBtb2R1bGUgbG9hZGluZyBwcm9jZXNzLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gYSBsYXJnZXIgY2hhbmdlIGluIGhvdyB0aGUgbW9kdWxlcyBhcmUgYmVpbmcgbG9hZGVkIGFuZCBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MjkuMjAwMjkwNzIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njk1NjczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYXlvdXRfYW5kX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0xNjQ9c3RhdGljIGlubGluZSBib29sIHNldF9saXZlcGF0Y2hfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNzktICogXFx0b3IgYmVpbmcgcHJvY2Vzc2VkIG9uIG91ciBcXHUwMDI2bW9kdWxlcyBsaXN0LiBUaGlzIGhhcHBlbnMgb24gZWFybHlfbW9kX2NoZWNrKClcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTgwOiAqIFxcdHJpZ2h0IGJlZm9yZSBsYXlvdXRfYW5kX2FsbG9jYXRlKCkuIFRoZSBrZXJuZWwgd291bGQgaGF2ZSBhbHJlYWR5XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE4MS0gKiBcXHR2bWFsbG9jKCknZCBzcGFjZSBmb3IgdGhlIGVudGlyZSBtb2R1bGUgdGhyb3VnaCBmaW5pdF9tb2R1bGUoKS4gSWZcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xODctICpcXHRvZiB0aGlzIGFsbG9jYXRlZCB5ZXQgYW5vdGhlciBwcml2YXRlIGtlcm5lbCBjb3B5IG9mIHRoZSBtb2R1bGUgc3BhY2UgaW5cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTg4OiAqXFx0bGF5b3V0X2FuZF9hbGxvY2F0ZSgpIGJ1dCBhZnRlciB0aGlzIGRldGVybWluZWQgaW4gYWRkX3VuZm9ybWVkX21vZHVsZSgpXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE4OS0gKlxcdHRoYXQgYW5vdGhlciBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgbG9hZGVkIG9yIGJlaW5nIHByb2Nlc3NlZC5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MTI9c3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTQ0LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5NDU6c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NDYte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MzQzMz1zdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICp1YXJncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM0NzAtXFx0LyogRmlndXJlIG91dCBtb2R1bGUgbGF5b3V0LCBhbmQgYWxsb2NhdGUgYWxsIHRoZSBtZW1vcnkuICovXFxua2VybmVsL21vZHVsZS9tYWluLmM6MzQ3MTpcXHRtb2QgPSBsYXlvdXRfYW5kX2FsbG9jYXRlKGluZm8sIGZsYWdzKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNDcyLVxcdGlmIChJU19FUlIobW9kKSkge1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyLSAqICAgICAgZnJvbSBrZXJuZWxfcmVhZF9maWxlX2Zyb21fZmQoKSBpcyBmcmVlZCByaWdodCBhd2F5Llxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo0MzogKiAgIGMpIGxheW91dF9hbmRfYWxsb2NhdGUoKSBhbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBmaW5hbCByZXN0aW5nXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQ0LSAqICAgICAgcGxhY2Ugd2hlcmUgd2Ugd291bGQga2VlcCB0aGUgbW9kdWxlIGlmIGl0IHdlcmUgdG8gYmUgcHJvY2Vzc2VkXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtODgtICogICBhKSBGQUlMX0RVUF9NT0RfQkVDT01JTkc6IGF0IHRoZSBlbmQgb2YgZWFybHlfbW9kX2NoZWNrKCkgYmVmb3JlXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjg5OiAqXFx0bGF5b3V0X2FuZF9hbGxvY2F0ZSgpLlxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05MC0gKlxcdC0gd2l0aCBtb2R1bGUgZGVjb21wcmVzc2lvbjogMiB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTkxLSAqXFx0LSB3aXRob3V0IG1vZHVsZSBkZWNvbXByZXNzaW9uOiAxIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6OTI6ICogICBiKSBGQUlMX0RVUF9NT0RfTE9BRDogYWZ0ZXIgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpIG9uIGFkZF91bmZvcm1lZF9tb2R1bGUoKVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05My0gKiAgIFxcdC0gd2l0aCBtb2R1bGUgZGVjb21wcmVzc2lvbiAzIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0xMDA9c3RhdGljIExJU1RfSEVBRChkdXBfZmFpbGVkX21vZHVsZXMpO1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTEzOS0gKiAgICAgYXQgdGhlIGVuZCBvZiBlYXJseV9tb2RfY2hlY2soKSBwcmV2ZW50cyBkdXBsaWNhdGUgYWxsb2NhdGlvbnNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MTQwOiAqICAgICBvbiBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIG1vZHVsZXMgYWxyZWFkeSBiZWluZyBwcm9jZXNzZWQuIFRoZXNlXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE0MS0gKiAgICAgZHVwbGljYXRlIGZhaWxlZCBtb2R1bGVzIGFyZSBub24tZmF0YWwsIGhvd2V2ZXIgdGhleSB0eXBpY2FsbHkgYXJlXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTY2LSAqICAgICBpcyB1bmlxdWUuICBBIG1vZHVsZSBjYW4gc3RpbGwgZmFpbCB0byBsb2FkIGlmIHdlIGRldGVjdCB0aGUgbW9kdWxlIGlzXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE2NzogKiAgICAgbG9hZGVkIGFmdGVyIHdlIGFsbG9jYXRlIHNwYWNlIGZvciBpdCB3aXRoIGxheW91dF9hbmRfYWxsb2NhdGUoKSwgd2UgZG9cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTY4LSAqICAgICB0aGlzIGNoZWNrIHJpZ2h0IGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBtb2R1bGUgYXMgbGl2ZSBhbmQgcnVuIGl0c1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4MC0gKiAgKiBmYWlsZWRfYmVjb21pbmc6IGhvdyBtYW55IG1vZHVsZXMgZmFpbGVkIGFmdGVyIHdlIGtlcm5lbF9yZWFkX2ZpbGVfZnJvbV9mZCgpXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE4MTogKiAgICBpdCBhbmQgYmVmb3JlIHdlIGFsbG9jYXRlIG1lbW9yeSBmb3IgaXQgd2l0aCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkuIFRoaXNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTgyLSAqICAgIGNvdW50ZXIgaXMgbmV2ZXIgaW5jcmVtZW50ZWQgaWYgeW91IG1hbmFnZSB0byB2YWxpZGF0ZSB0aGUgbW9kdWxlIGFuZFxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoxODM6ICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xODQtICogICogZmFpbGVkX2xvYWRfbW9kdWxlczogaG93IG1hbnkgbW9kdWxlcyBmYWlsZWQgb25jZSB3ZSd2ZSBhbGxvY2F0ZWQgb3VyXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE4NTogKiAgICBwcml2YXRlIHNwYWNlIGZvciBvdXIgbW9kdWxlIHVzaW5nIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhlc2UgZmFpbHVyZXNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTg2LSAqICAgIHNob3VsZCBob3BlZnVsbHkgbW9zdGx5IGJlIGRlYWx0IHdpdGggYWxyZWFkeS4gUmFjZXMgaW4gdGhlb3J5IGNvdWxkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjI5LjI4NzI1Mjc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDg3MTM5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBLZXJuZWwgTW9kdWxlIExvYWRpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cga2VybmVsIG1vZHVsZXMgYXJlIGxvYWRlZCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHN5c3RlbSBjYWxsIGxldmVsLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgZmluaXRfbW9kdWxlYCBhbmQgYGluaXRfbW9kdWxlYCBhcmUgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIOKAkyB0aGV5J3JlIHRoZSBkaXJlY3Qgc3lzdGVtIGNhbGxzIGV4cG9zZWQgdG8gYXBwbGljYXRpb25zIG9yLCBpbiB0aGlzIGNhc2UsIGEgcHJpdmlsZWdlZCBwcm9jZXNzIGxpa2UgU3l6a2FsbGVyLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN5c2NhbGxzIHdvcmsgdW5kZXIgdGhlIGhvb2QuIFNvLCBuZXh0LCBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBzeXNjYWxsIGVudHJ5cG9pbnRzIGluIHRoZSBrZXJuZWwgc291cmNlLCBwcm9iYWJseSBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGxpa2VseSBoYXBwZW5zIOKAkyB3aGVyZSB0aGUga2VybmVsIGZpZ3VyZXMgb3V0IHdoYXQgdG8gKmRvKiB3aXRoIHRob3NlIHVzZXItc3BhY2UgY29tbWFuZHMgdG8gbG9hZCBhIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTozMS42MzU5NjkxNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDY3MzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jPTgwMj1zdGF0aWMgdm9pZCBmcmVlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTgwMy1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzo4MDQ6U1lTQ0FMTF9ERUZJTkUyKGRlbGV0ZV9tb2R1bGUsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWVfdXNlcixcXG5rZXJuZWwvbW9kdWxlL21haW4uYy04MDUtXFx0XFx0dW5zaWduZWQgaW50LCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0MzM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjUwLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTE6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM2NTItXFx0XFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM3OTc9c3RhdGljIGludCBpZGVtcG90ZW50X2luaXRfbW9kdWxlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqIHVhcmdzLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zODE1LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM4MTY6U1lTQ0FMTF9ERUZJTkUzKGZpbml0X21vZHVsZSwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgdWFyZ3MsIGludCwgZmxhZ3MpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzgxNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjMyLjMzMDY0OTU3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDgxODE4MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGFsbG9jX3RhZy5jYCBGdW5jdGlvbiBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGFsbG9jX3RhZy5jYCBmaWxlIGRpcmVjdGx5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBpdC4gTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYC4gSSBzZWUgdGhleSdyZSBkZWNsYXJlZCBhcyBzdGF0aWMgd2l0aGluIGBtbS9hbGxvY190YWcuY2AuIE15IG5leHQgcXVlc3Rpb24gaXMsIHdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgKnVzZWQqPyBXaGF0J3MgdGhlIGNhbGwgcGF0aD8gVG8gZmlndXJlIHRoYXQgb3V0LCBJJ20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGNvZGV0YWcgbW9kdWxlIGNhbGxiYWNrcy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdHJhY2luZyB0aGVpciBleGVjdXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2OTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTozNC40MTI0NzE4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzMwNTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29kZXRhZy5oPTkyPWJvb2wgY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTMtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk0OnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk1LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD0xMDc9c3RhdGljIGlubGluZSB2b2lkICpcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMDg6Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTA5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MTI9c3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTIxLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjI6XFx0XFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oaW5mby1cXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cXHUwMDNlc2hfc2l6ZSxcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTIzLVxcdFxcdFxcdFxcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVxcdTAwM2Vtb2QsIGkpLCBzaGRyLVxcdTAwM2VzaF9hZGRyYWxpZ24pO1xcbi0tXFxubGliL2NvZGV0YWcuYz0yNTU9Ym9vbCBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmxpYi9jb2RldGFnLmMtMjgyLVxcbmxpYi9jb2RldGFnLmM6MjgzOnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbmxpYi9jb2RldGFnLmMtMjg0LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjM2LjgyNTc4MTgyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzEyNTEyMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBgY29kZXRhZy5jYCBhbmQgU2VjdGlvbiBBbGxvY2F0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IHdpdGggYGxpYi9jb2RldGFnLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29kZSB0YWdzIGFyZSBiZWluZyBtYW5hZ2VkLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGZvY3VzaW5nIG9uIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byBob3cgd2UncmUgY2FydmluZyBvdXQgbWVtb3J5IGZvciB0aGVzZSB0YWdzIHdpdGhpbiB0aGUgbW9kdWxlIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBkb25lLCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGZyYWdtZW50YXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2Ygb3VyIGN1cnJlbnQgdGFnZ2luZyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTozOS4xMzgyOTY0NTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTk4Mjc5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD05ND12b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk2LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk3OnZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk4LXZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTEwOD1jb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTExMC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pIHsgcmV0dXJuIE5VTEw7IH1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMTE6c3RhdGljIGlubGluZSB2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKSB7fVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTExMi1zdGF0aWMgaW5saW5lIHZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKSB7fVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MjkxMj1zdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MjQtXFx0XFx0aWYgKFdBUk5fT04oIWRlc3QpKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmM6MjkyNTpcXHRcXHRcXHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCk7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyNi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzEtXFx0XFx0aWYgKElTX0VSUihkZXN0KSkge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MzI6XFx0XFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVxcdTAwM2Vtb2QpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzMtXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5ODgtXFx0aWYgKGVycikge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5ODk6XFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVxcdTAwM2Vtb2QpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OTAtXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMwMDI9c3RhdGljIHZvaWQgbW9kdWxlX2RlYWxsb2NhdGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAwNS1cXHRtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQobW9kKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDA2OlxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDA3LVxcbi0tXFxubGliL2NvZGV0YWcuYz0yODM9dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5saWIvY29kZXRhZy5jLTMwNy1cXG5saWIvY29kZXRhZy5jOjMwODp2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmxpYi9jb2RldGFnLmMtMzA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NDEuMzM4MTI4ODIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODA2MjA2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29kZXRhZyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIGNvZGV0YWcgbW9kdWxlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGFsbG9jYXRlcyBhbmQgZnJlZXMgc2VjdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCBhbmQgYGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnNgLiBJIGtub3cgdGhlc2UgYXJlIGV4cG9ydGVkIG9yIGRlZmluZWQgd2l0aGluIGBsaWIvY29kZXRhZy5jYC4gTm93LCB0aGUgYmVzdCBwbGFjZSB0byBqdW1wIGluIGlzIHByb2JhYmx5IGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbXMuIEknbSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIHRvIGBsaWIvY29kZXRhZy5jYCwgYW5kIEknbSBndWVzc2luZyB0aGF0IGxpbmUgMjgzIG9yIGFyb3VuZCB0aGF0IGFyZWEgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGluc3BlY3QgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBsb2dpYy4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTo0My4zMTg3NTMzODJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9jb2RldGFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjc1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNzY6XFx0XFx0XFx0fVxcbiAyNzc6XFx0XFx0fVxcbiAyNzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb2RldGFnX2xvY2spO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyODE6XFx0fVxcbiAyODI6XFx0XFxuIDI4MzpcXHR2b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuIDI4NTpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFsaWduKVxcbiAyODY6XFx0e1xcbiAyODc6XFx0XFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lID0gbmFtZSArIHN0cmxlbihDT0RFVEFHX1NFQ1RJT05fUFJFRklYKTtcXG4gMjg4OlxcdFxcdHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZTtcXG4gMjg5OlxcdFxcdHZvaWQgKnJldCA9IEVSUl9QVFIoLUVJTlZBTCk7XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDI5MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcXG4gMjkzOlxcdFxcdFxcdGlmIChzdHJjbXAodHlwZV9uYW1lLCBjdHR5cGUtXFx1MDAzZWRlc2Muc2VjdGlvbikgPT0gMCkge1xcbiAyOTQ6XFx0XFx0XFx0XFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbSkpXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIDI5ODpcXHRcXHRcXHRcXHRyZXQgPSBjdHR5cGUtXFx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0obW9kLCBzaXplLCBwcmVwZW5kLCBhbGlnbik7XFxuIDI5OTpcXHRcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIDMwMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzAxOlxcdFxcdFxcdH1cXG4gMzAyOlxcdFxcdH1cXG4gMzAzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG4gMzA0OlxcdFxcbiAzMDU6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzA2OlxcdH1cXG4gMzA3OlxcdFxcbiAzMDg6XFx0dm9pZCBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4gMzA5OlxcdHtcXG4gMzEwOlxcdFxcdHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZTtcXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG4gMzEzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3R0eXBlLCBcXHUwMDI2Y29kZXRhZ190eXBlcywgbGluaykge1xcbiAzMTQ6XFx0XFx0XFx0aWYgKCFjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbSlcXG4gMzE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG4gMzE4OlxcdFxcdFxcdGN0dHlwZS1cXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKG1vZCwgZmFsc2UpO1xcbiAzMTk6XFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiAzMjA6XFx0XFx0fVxcbiAzMjE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb2RldGFnX2xvY2spO1xcbiAzMjI6XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHR2b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NDMuMzE4ODcxNjcxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDg5ODI0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3RhZ2AgQWxsb2NhdGlvbiBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGFsbG9jX3RhZ2Agc3R1ZmYuIFRoZSBjbHVlIEkgaGF2ZSBpcyB0aGF0IHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBgY3R0eXBlLVx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW1gLCByZWxhdGVkIHRvIGBhbGxvY190YWdgLCBpcyByZWdpc3RlcmVkIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBNeSBuZXh0IG1vdmUsIG5hdHVyYWxseSwgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBleGFjdGx5IGBhbGxvY19zZWN0aW9uX21lbWAgaXMgYWN0dWFsbHkgKnNldCogd2l0aGluIHRoYXQgYG1tL2FsbG9jX3RhZy5jYCBmaWxlLiBHb3R0YSB0cmFjZSBpdHMgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGNvbmZpZ3VyZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjg4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTo0NS40Njc4NTc3MjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTUzNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NlY3Rpb25fbWVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz0xMzM3PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzQzLVxcdFxcdC5uZWVkc19zZWN0aW9uX21lbVxcdD0gbmVlZHNfc2VjdGlvbl9tZW0sXFxubW0vYWxsb2NfdGFnLmM6MTM0NDpcXHRcXHQuYWxsb2Nfc2VjdGlvbl9tZW1cXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXFxubW0vYWxsb2NfdGFnLmMtMTM0NS1cXHRcXHQuZnJlZV9zZWN0aW9uX21lbVxcdD0gcmVsZWFzZV9tb2R1bGVfdGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NDUuNTQzNDE2MDE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3ODE4NjYyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1vZHVsZSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCdzIGZ1bmRhbWVudGFsbHkgb3ZlcmhhdWxpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtb2R1bGUgbGF5b3V0IGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBmb3Igc3BlY2lmaWMgc2VjdGlvbiB0eXBlcywgc3BlY2lmaWNhbGx5IHRoaW5ncyBsaWtlIGNvZGV0YWcgYW5kIHBlcmNwdSBzZWN0aW9ucy4gSSBzZWUgdGhleSdyZSBpbnRyb2R1Y2luZyBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCB3aGljaCBpcyBub3cgY2FsbGVkICpiZWZvcmUqIHRoZSByZWd1bGFyIHNlY3Rpb24gbGF5b3V0IHByb2Nlc3MuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1hcmtpbmcgdGhlc2Ugc3RhbmRhbG9uZSBzZWN0aW9ucyB3aXRoIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgLCBhbmQgaWYgYWxsb2NhdGlvbiBmYWlscyBpbiB0aGUgdGFnIHBhdGggd2l0aCBgRUFHQUlOYCwgaXQgZmFsbHMgYmFjayB0byBhIHJlZ3VsYXIgYWxsb2NhdGlvbi4gVGhlIGBtb3ZlX21vZHVsZSgpYCBmdW5jdGlvbiBpcyB0aGVuIHVwZGF0ZWQgdG8gc2tpcCB0aGUgc3RhbmRhbG9uZSBzZWN0aW9ucy4gUGVyY3B1IHNlY3Rpb25zIGFyZSBhbHNvIGdldHRpbmcgdGhpcyB0cmVhdG1lbnQsIHVzaW5nIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIHJhdGhlciB0aGFuIHNvbWUgY3VzdG9tIGxvZ2ljIGR1cmluZyByZWxvY2F0aW9uLiBBbmQgdGhlcmUncyBhbHNvIGEgZmFsbGJhY2sgaW1wbGVtZW50ZWQsIHVzaW5nIGBFUlJfUFRSKC1FQUdBSU4pYCwgaW4gYG1tL2FsbG9jX3RhZy5jYCBpZiBgdGFnc19hZGRyZXNzYWJsZSgpYCBpc24ndCB0cnVlLCB3aGljaCBmb3JjZXMgdGhlIG1vZHVsZSBsb2FkZXIgdG8gdXNlIHRoZSBub3JtYWwgYWxsb2NhdGlvbiBwcm9jZXNzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyEgSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBsb2dpYyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBob3cgbWVtb3J5IGFsbG9jYXRpb24gdGFncyBhcmUgbWFuYWdlZCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gTW9kdWxlIGxvYWRpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMsIHdoaWNoIFN5emthbGxlciBhbHJlYWR5IHRhcmdldHMgd2l0aGluIFFFTVUgYW5kIEdDRSBlbnZpcm9ubWVudHMuXG5cbk15IHRoaW5raW5nIGlzIHRoYXQgdGhlIEVMRiBwYXJzaW5nLCBzZWN0aW9uIGxheW91dCwgcmVsb2NhdGlvbiBoYW5kbGluZywgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbXMsIGFuZCB0aGUgZXJyb3IgdW53aW5kaW5nIGxvZ2ljIHdoZW4gbG9hZGluZyBtb2R1bGVzIGFyZSBhbGwgKmNyaXRpY2FsKiBjb2RlIHBhdGhzLiBUaGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgbGF5b3V0IGJ1Z3MsIHNpemUgY2FsY3VsYXRpb24gZXJyb3JzLCBvciBldmVuIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cblxuU28sIGxldCdzIGZvY3VzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHplcm9pbmcgaW4gb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG9yIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBvYnZpb3VzOiBgaW5pdF9tb2R1bGVgIChvciBwb3NzaWJseSB0aGUgYF9feDY0X3N5c19pbml0X21vZHVsZWAgdmFyaWF0aW9ucyksIGBmaW5pdF9tb2R1bGVgICwgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gLCBhbmQgYGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnNgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGNoZWNrIHN0YW5kYXJkIHN5bWJvbCBuYW1lcyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBgbGliL2NvZGV0YWcuY2AgYXMgd2VsbC4gSSdsbCBhbHNvIGxvb2sgYXQgYW55dGhpbmcgcmVsYXRlZCB0byByZWxvY2F0aW9uLCBzdWNoIGFzIGBhcHBseV9yZWxvY2F0ZV9hZGRgLiBJIGNhbiBwcm9iYWJseSB1c2UgYG5tYCBvciBTeXprYWxsZXIncyB0YXJnZXRpbmcgbWV0aG9kcyB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBjb2RlLiBMZXQncyBtYWtlIHN1cmUgSSBmaW5kIGFueXRoaW5nIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgdGhhdCdzIG5vdCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjUzLjMyNTI4NDk3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjEyMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bXiBcXFxcdCNcXFxcL10uKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTM5MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTI9bWVudWNvbmZpZyBNT0RVTEVTXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctOS1cXHQgIHBlcm1hbmVudGx5IGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gIFlvdSB1c2UgdGhlIFxcXCJtb2Rwcm9iZVxcXCJcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MTA6XFx0ICB0b29sIHRvIGFkZCAoYW5kIHNvbWV0aW1lcyByZW1vdmUpIHRoZW0uICBJZiB5b3Ugc2F5IFkgaGVyZSxcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTEtXFx0ICBtYW55IHBhcnRzIG9mIHRoZSBrZXJuZWwgY2FuIGJlIGJ1aWx0IGFzIG1vZHVsZXMgKGJ5XFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOlxcdCAgYW5zd2VyaW5nIE0gaW5zdGVhZCBvZiBZIHdoZXJlIGluZGljYXRlZCk6IHRoaXMgaXMgbW9zdFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMy1cXHQgIHVzZWZ1bCBmb3IgaW5mcmVxdWVudGx5IHVzZWQgb3B0aW9ucyB3aGljaCBhcmUgbm90IHJlcXVpcmVkXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTktXFx0ICB3aGVyZSBtb2Rwcm9iZSBjYW4gZmluZCB0aGVtICh5b3UgbWF5IG5lZWQgdG8gYmUgcm9vdCB0byBkb1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoyMDpcXHQgIHRoaXMpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yMS1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz02Mz1jb25maWcgTU9EVUxFX0RFQlVHX0FVVE9MT0FEX0RVUFNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02Ni1cXHQgIE1vZHVsZSBhdXRvbG9hZGluZyBhbGxvd3MgaW4ta2VybmVsIGNvZGUgdG8gcmVxdWVzdCBtb2R1bGVzIHRocm91Z2hcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Njc6XFx0ICB0aGUgKnJlcXVlc3RfbW9kdWxlKigpIEFQSSBjYWxscy4gVGhpcyBpbiB0dXJuIGp1c3QgY2FsbHMgdXNlcnNwYWNlXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTY4LVxcdCAgbW9kcHJvYmUuIEFsdGhvdWdoIG1vZHByb2JlIGNoZWNrcyB0byBzZWUgaWYgYSBtb2R1bGUgaXMgYWxyZWFkeVxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTcwLVxcdCAgd2hpY2ggbXVsdGlwbGUgZHVwbGljYXRlIHJlcXVlc3RzIGNhbiBlbmQgdXAgaW4gdXNlcnNwYWNlIGFuZCBtdWx0aXBsZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo3MTpcXHQgIG1vZHByb2JlIGNhbGxzIHJhY2UgY2FsbGluZyBmaW5pdF9tb2R1bGUoKSBhcm91bmQgdGhlIHNhbWUgdGltZSBmb3JcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NzI6XFx0ICBkdXBsaWNhdGUgbW9kdWxlcy4gVGhlIGZpbml0X21vZHVsZSgpIHN5c3RlbSBjYWxsIGNhbiBjb25zdW1lIGluIHRoZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy03My1cXHQgIHdvcnN0IGNhc2UgbW9yZSB0aGFuIHR3aWNlIHRoZSByZXNwZWN0aXZlIG1vZHVsZSBzaXplIGluIHZpcnR1YWxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy03OC1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Nzk6XFx0ICBUaGlzIGRlYnVnZ2luZyBmYWNpbGl0eSB3aWxsIGNyZWF0ZSBwcl93YXJuKCkgc3BsYXRzIGZvciBkdXBsaWNhdGVcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODAtXFx0ICBtb2R1bGUgcmVxdWVzdHMgdG8gaGVscCBpZGVudGlmeSBpZiBtb2R1bGUgYXV0by1sb2FkaW5nIG1heSBiZSB0aGVcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy04NC1cXHQgIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBtb2R1bGUgdG8gYSBzaW5nbGUgcmVxdWVzdC4gWW91IGNhbiBib290IHdpdGhcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6ODU6XFx0ICB0aGUgbW9kdWxlLmVuYWJsZV9kdXBzX3RyYWNlPTEga2VybmVsIHBhcmFtZXRlciB0byB1c2UgV0FSTl9PTigpXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjg2OlxcdCAgaW5zdGVhZCBvZiB0aGUgcHJfd2FybigpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy04Ny1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6ODg6XFx0ICBJZiB0aGUgZmlyc3QgbW9kdWxlIHJlcXVlc3QgdXNlZCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3ZSBjYW5ub3RcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODktXFx0ICB1c2UgdGhhdCBhcyB0aGUgYW5jaG9yIHRvIHdhaXQgZm9yIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMsIHNpbmNlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkwOlxcdCAgdXNlcnMgb2YgcmVxdWVzdF9tb2R1bGUoKSBkbyB3YW50IGEgcHJvcGVyIHJldHVybiB2YWx1ZS4gSWYgYSBjYWxsXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkxOlxcdCAgZm9yIHRoZSBzYW1lIG1vZHVsZSBoYXBwZW5lZCBlYXJsaWVyIHdpdGggcmVxdWVzdF9tb2R1bGUoKSB0aG91Z2gsXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkyOlxcdCAgdGhlbiBhIGR1cGxpY2F0ZSByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3b3VsZCBiZSBkZXRlY3RlZC4gVGhlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkzOlxcdCAgbm9uLXdhaXQgcmVxdWVzdF9tb2R1bGUoKSBjYWxsIGlzIHN5bmNocm9ub3VzIGFuZCB3YWl0cyB1bnRpbCBtb2Rwcm9iZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05NC1cXHQgIGNvbXBsZXRlcy4gU3Vic2VxdWVudCBhdXRvLWxvYWRpbmcgcmVxdWVzdHMgZm9yIHRoZSBzYW1lIG1vZHVsZSBkb1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo5NTpcXHQgIG5vdCB0cmlnZ2VyIGEgbmV3IGZpbml0X21vZHVsZSgpIGNhbGxzIGFuZCBkbyBub3Qgc3RyYWluIHZpcnR1YWxcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctOTYtXFx0ICBtZW1vcnksIGFuZCBzbyBhcyBzb29uIGFzIG1vZHByb2JlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMgd2UgcmVtb3ZlXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTAyLVxcdCAgYWJ1c2Ugd2FzIGR1ZSB0byBtb2R1bGUgYXV0by1sb2FkaW5nLiBUaGVzZSBpc3N1ZXMgYXJlIGN1cnJlbnRseSBvbmx5XFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEwMzpcXHQgIGtub3duIHRvIG9jY3VyIG9uIHN5c3RlbXMgd2l0aCBtYW55IENQVXMgKG92ZXIgNDAwKSBhbmQgaXMgbGlrZWx5IHRoZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMDQtXFx0ICByZXN1bHQgb2YgdWRldiBpc3N1aW5nIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMgZm9yIGVhY2ggQ1BVLCBhbmQgc29cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xMTI9Y29uZmlnIE1PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTX1RSQUNFXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTE2LVxcdCAgRW5hYmxpbmcgdGhpcyB3aWxsIGZvcmNlIGEgZnVsbCBzdGFjayB0cmFjZSBmb3IgZHVwbGljYXRlIG1vZHVsZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxMTc6XFx0ICBhdXRvLWxvYWRpbmcgcmVxdWVzdHMgdXNpbmcgV0FSTl9PTigpIGluc3RlYWQgb2YgcHJfd2FybigpLiBZb3VcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTE4LVxcdCAgc2hvdWxkIGtlZXAgdGhpcyBkaXNhYmxlZCBhdCBhbGwgdGltZXMgdW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXJcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xMjQ9Y29uZmlnIE1PRFVMRV9GT1JDRV9MT0FEXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTI4LVxcdCAgQWxsb3cgbG9hZGluZyBvZiBtb2R1bGVzIHdpdGhvdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoaWUuIG1vZHByb2JlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOTpcXHQgIC0tZm9yY2UpLiAgRm9yY2VkIG1vZHVsZSBsb2FkaW5nIHNldHMgdGhlICdGJyAoZm9yY2VkKSB0YWludCBmbGFnIGFuZFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzAtXFx0ICBpcyB1c3VhbGx5IGEgcmVhbGx5IGJhZCBpZGVhLlxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTEzMj1jb25maWcgTU9EVUxFX1VOTE9BRFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTEzNi1cXHQgIG1vZHVsZXMgKG5vdGUgdGhhdCBzb21lIG1vZHVsZXMgbWF5IG5vdCBiZSB1bmxvYWRhYmxlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEzNzpcXHQgIGFueXdheSksIHdoaWNoIG1ha2VzIHlvdXIga2VybmVsIHNtYWxsZXIsIGZhc3Rlclxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzgtXFx0ICBhbmQgc2ltcGxlci4gIElmIHVuc3VyZSwgc2F5IFkuXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTQwPWNvbmZpZyBNT0RVTEVfRk9SQ0VfVU5MT0FEXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTQ2LVxcdCAgd2l0aG91dCB3YWl0aW5nIGZvciBhbnlvbmUgdG8gc3RvcCB1c2luZyBpdCAodXNpbmcgdGhlIC1mIG9wdGlvbiB0b1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNDc6XFx0ICBybW1vZCkuICBUaGlzIGlzIG1haW5seSBmb3Iga2VybmVsIGRldmVsb3BlcnMgYW5kIGRlc3BlcmF0ZSB1c2Vycy5cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTQ4LVxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xNTA9Y29uZmlnIE1PRFVMRV9VTkxPQURfVEFJTlRfVFJBQ0tJTkdcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xNTYtXFx0ICBtb2R1bGUgdGhhdCB0YWludGVkIHRoZSBrZXJuZWwuIEluIGFkZGl0aW9uIHRvIGRpc3BsYXlpbmcgYVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNTc6XFx0ICBsaXN0IG9mIGxpbmtlZCAob3IgbG9hZGVkKSBtb2R1bGVzIGUuZy4gb24gZGV0ZWN0aW9uIG9mIGEgYmFkXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjE1ODpcXHQgIHBhZ2UgKHNlZSBiYWRfcGFnZSgpKSwgdGhlIGFmb3JlbWVudGlvbmVkIGRldGFpbHMgYXJlIGFsc29cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTU5LVxcdCAgc2hvd24uIElmIHVuc3VyZSwgc2F5IE4uXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTYxPWNvbmZpZyBNT0RWRVJTSU9OU1xcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTE2Ny1cXHQgIGNvbXBpbGVkIGZvciBkaWZmZXJlbnQga2VybmVscywgYnkgYWRkaW5nIGVub3VnaCBpbmZvcm1hdGlvblxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNjg6XFx0ICB0byB0aGUgbW9kdWxlcyB0byAoaG9wZWZ1bGx5KSBzcG90IGFueSBjaGFuZ2VzIHdoaWNoIHdvdWxkXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTE2OS1cXHQgIG1ha2UgdGhlbSBpbmNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsIHlvdSBhcmUgcnVubmluZy4gIElmXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTgxPWNvbmZpZyBHRU5LU1lNU1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxODI6XFx0Ym9vbCBcXFwiZ2Vua3N5bXMgKGZyb20gc291cmNlIGNvZGUpXFxcIlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xODMtXFx0aGVscFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTE4OT1jb25maWcgR0VORFdBUkZLU1lNU1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTA6XFx0Ym9vbCBcXFwiZ2VuZHdhcmZrc3ltcyAoZnJvbSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24pXFxcIlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xOTEtXFx0ZGVwZW5kcyBvbiBERUJVR19JTkZPXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTk3LVxcdCMgWDg2LCByZXF1aXJlcyBwYWhvbGUgYmVmb3JlIGNvbW1pdCA0N2RjYjUzNGUyNTMgKFxcXCJidGZfZW5jb2RlcjogU3RvcFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTg6XFx0IyBpbmRleGluZyBzeW1ib2xzIGZvciBWQVJzXFxcIikgb3IgYWZ0ZXIgY29tbWl0IDk4MTA3NTgwMDNjZSAoXFxcImJ0Zl9lbmNvZGVyOlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTk6XFx0IyBWZXJpZnkgMCBhZGRyZXNzIERXQVJGIHZhcmlhYmxlcyBhcmUgaW4gRUxGIHNlY3Rpb25cXFwiKS5cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMjAwLVxcdGRlcGVuZHMgb24gIVg4NiB8fCAhREVCVUdfSU5GT19CVEYgfHwgUEFIT0xFX1ZFUlNJT04gXFx1MDAzYyAxMjggfHwgUEFIT0xFX1ZFUlNJT04gXFx1MDAzZSAxMjlcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yNDE9Y29uZmlnIE1PRFVMRV9TUkNWRVJTSU9OX0FMTFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTI0OC1cXHQgIG90aGVycyBzb21ldGltZXMgY2hhbmdlIHRoZSBtb2R1bGUgc291cmNlIHdpdGhvdXQgdXBkYXRpbmdcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MjQ5OlxcdCAgdGhlIHZlcnNpb24pLiAgV2l0aCB0aGlzIG9wdGlvbiwgc3VjaCBhIFxcXCJzcmN2ZXJzaW9uXFxcIiBmaWVsZFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yNTAtXFx0ICB3aWxsIGJlIGNyZWF0ZWQgZm9yIGFsbCBtb2R1bGVzLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yNTI9Y29uZmlnIE1PRFVMRV9TSUdcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yNzAtXFx0ICBtb2R1bGUgRE9FUyBOT1QgZ2V0IHN0cmlwcGVkIGFmdGVyIGJlaW5nIHNpZ25lZC4gIFRoaXMgaW5jbHVkZXMgdGhlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjI3MTpcXHQgIGRlYnVnaW5mbyBzdHJpcCBkb25lIGJ5IHNvbWUgcGFja2FnZXJzIChzdWNoIGFzIHJwbWJ1aWxkKSBhbmRcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMjcyLVxcdCAgaW5jbHVzaW9uIGludG8gYW4gaW5pdHJhbWZzIHRoYXQgd2FudHMgdGhlIG1vZHVsZSBzaXplIHJlZHVjZWQuXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9NDA2PWNvbmZpZyBNT0RVTEVfQUxMT1dfTUlTU0lOR19OQU1FU1BBQ0VfSU1QT1JUU1xcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQwOC1cXHRoZWxwXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQwOTpcXHQgIFN5bWJvbHMgZXhwb3J0ZWQgd2l0aCBFWFBPUlRfU1lNQk9MX05TKigpIGFyZSBjb25zaWRlcmVkIGV4cG9ydGVkIGluXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQxMC1cXHQgIGEgbmFtZXNwYWNlLiBBIG1vZHVsZSB0aGF0IG1ha2VzIHVzZSBvZiBhIHN5bWJvbCBleHBvcnRlZCB3aXRoIHN1Y2ggYVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0MTE6XFx0ICBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgdG8gaW1wb3J0IHRoZSBuYW1lc3BhY2UgdmlhIE1PRFVMRV9JTVBPUlRfTlMoXFxcIlxcXCIpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MTItXFx0ICBUaGVyZSBpcyBubyB0ZWNobmljYWwgcmVhc29uIHRvIGVuZm9yY2UgY29ycmVjdCBuYW1lc3BhY2UgaW1wb3J0cyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz00MTk9Y29uZmlnIE1PRFBST0JFX1BBVEhcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MjgtXFx0ICByZW1vdmVzIHRoZSBrZXJuZWwncyBhYmlsaXR5IHRvIHJlcXVlc3QgbW9kdWxlcyAoYnV0XFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQyOTpcXHQgIHVzZXJzcGFjZSBjYW4gc3RpbGwgbG9hZCBtb2R1bGVzIGV4cGxpY2l0bHkpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MzAtXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTQzMT1jb25maWcgVFJJTV9VTlVTRURfS1NZTVNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MzQtXFx0ICBUaGUga2VybmVsIGFuZCBzb21lIG1vZHVsZXMgbWFrZSBtYW55IHN5bWJvbHMgYXZhaWxhYmxlIGZvclxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0MzU6XFx0ICBvdGhlciBtb2R1bGVzIHRvIHVzZSB2aWEgRVhQT1JUX1NZTUJPTCgpIGFuZCB2YXJpYW50cy4gRGVwZW5kaW5nXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQzNi1cXHQgIG9uIHRoZSBzZXQgb2YgbW9kdWxlcyBiZWluZyBzZWxlY3RlZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQ0MC1cXHQgIHRoZSBidWlsZC4gSW4gdHVybiwgdGhpcyBwcm92aWRlcyB0aGUgY29tcGlsZXIgbW9yZSBvcHBvcnR1bml0aWVzXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQ0MTpcXHQgIChlc3BlY2lhbGx5IHdoZW4gdXNpbmcgTFRPKSBmb3Igb3B0aW1pemluZyB0aGUgY29kZSBhbmQgcmVkdWNpbmdcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDQyLVxcdCAgYmluYXJ5IHNpemUuICBUaGlzIG1pZ2h0IGhhdmUgc29tZSBzZWN1cml0eSBhZHZhbnRhZ2VzIGFzIHdlbGwuXFxuLS1cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlPTEyPW9iai15ICs9IGttb2Qub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTKSArPSBkdXBzLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19NT0RVTEVfREVDT01QUkVTUykgKz0gZGVjb21wcmVzcy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTU9EVUxFX1NJRykgKz0gc2lnbmluZy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTElWRVBBVENIKSArPSBsaXZlcGF0Y2gub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01PRFVMRVNfVFJFRV9MT09LVVApICs9IHRyZWVfbG9va3VwLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19ERUJVR19LTUVNTEVBSykgKz0gZGVidWdfa21lbWxlYWsub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0tBTExTWU1TKSArPSBrYWxsc3ltcy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvY2ZzLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19TWVNGUykgKz0gc3lzZnMub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0tHREJfS0RCKSArPSBrZGIub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX01PRFZFUlNJT05TKSArPSB2ZXJzaW9uLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NT0RVTEVfVU5MT0FEX1RBSU5UX1RSQUNLSU5HKSArPSB0cmFja2luZy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTU9EVUxFX1NUQVRTKSArPSBzdGF0cy5vXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM9MTI9dm9pZCBrbWVtbGVha19sb2FkX21vZHVsZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QsXFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjEzOlxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTQte1xcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNS1cXHQvKiBvbmx5IHNjYW4gd3JpdGFibGUsIG5vbi1leGVjdXRhYmxlIHNlY3Rpb25zICovXFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjE2OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jLTE3LVxcdFxcdGlmICh0eXBlICE9IE1PRF9EQVRBIFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gTU9EX0lOSVRfREFUQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxODpcXHRcXHQgICAgIW1vZC1cXHUwMDNlbWVtW3R5cGVdLmlzX3JveClcXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM6MTk6XFx0XFx0XFx0a21lbWxlYWtfbm9fc2Nhbihtb2QtXFx1MDAzZW1lbVt0eXBlXS5iYXNlKTtcXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMjAtXFx0fVxcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTYtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTc6c3RhdGljIGludCBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgZXh0ZW50KVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIyLVxcdG5ld19wYWdlcyA9IGt2cmVhbGxvYyhpbmZvLVxcdTAwM2VwYWdlcyxcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzpcXHRcXHRcXHQgICAgICBzaXplX211bChuZXdfbWF4LCBzaXplb2YoKmluZm8tXFx1MDAzZXBhZ2VzKSksXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQ6XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjU6XFx0aWYgKCFuZXdfcGFnZXMpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMy1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNDpzdGF0aWMgc3RydWN0IHBhZ2UgKm1vZHVsZV9nZXRfbmV4dF9wYWdlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzUte1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzgtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mzk6XFx0aWYgKGluZm8tXFx1MDAzZW1heF9wYWdlcyA9PSBpbmZvLVxcdTAwM2V1c2VkX3BhZ2VzKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDA6XFx0XFx0ZXJyb3IgPSBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhpbmZvLCBpbmZvLVxcdTAwM2V1c2VkX3BhZ2VzKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0MTpcXHRcXHRpZiAoZXJyb3IpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTQzLVxcdH1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy00NC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0NTpcXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDY6XFx0aWYgKCFwYWdlKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjQ3OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTQ4LVxcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNjItICovXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NjM6c3RhdGljIHNpemVfdCBtb2R1bGVfZ3ppcF9oZWFkZXJfbGVuKGNvbnN0IHU4ICpidWYsIHNpemVfdCBzaXplKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTY0LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTY3LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjY4OlxcdGlmIChzaXplIFxcdTAwM2MgbGVuIHx8IG1lbWNtcChidWYsIHNpZ25hdHVyZSwgc2l6ZW9mKHNpZ25hdHVyZSkpKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTY5LVxcdFxcdHJldHVybiAwO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTcwLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjcxOlxcdGlmIChidWZbM10gXFx1MDAyNiAweDA4KSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNzItXFx0XFx0ZG8ge1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNzYtXFx0XFx0XFx0ICovXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Nzc6XFx0XFx0XFx0aWYgKGxlbiA9PSBzaXplKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTc4LVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjc5OlxcdFxcdH0gd2hpbGUgKGJ1ZltsZW4rK10gIT0gJ1xcXFwwJyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODAtXFx0fVxcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9ODU9c3RhdGljIHNzaXplX3QgbW9kdWxlX2d6aXBfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjg2OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODcte1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtOTMtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6OTQ6XFx0Z3ppcF9oZHJfbGVuID0gbW9kdWxlX2d6aXBfaGVhZGVyX2xlbihidWYsIHNpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjk1OlxcdGlmICghZ3ppcF9oZHJfbGVuKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6OTY6XFx0XFx0cHJfZXJyKFxcXCJub3QgYSBnemlwIGNvbXByZXNzZWQgbW9kdWxlXFxcXG5cXFwiKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy05Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEwMi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDM6XFx0cy53b3Jrc3BhY2UgPSBrdm1hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLCBHRlBfS0VSTkVMKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDQ6XFx0aWYgKCFzLndvcmtzcGFjZSlcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMDUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTA2LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEwNzpcXHRyYyA9IHpsaWJfaW5mbGF0ZUluaXQyKFxcdTAwMjZzLCAtTUFYX1dCSVRTKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDg6XFx0aWYgKHJjICE9IFpfT0spIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDk6XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWNvbXByZXNzb3I6ICVkXFxcXG5cXFwiLCByYyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTEwLVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMTQtXFx0ZG8ge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExNTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1vZHVsZV9nZXRfbmV4dF9wYWdlKGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExNi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMTc6XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExODpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExOS1cXHRcXHRcXHRnb3RvIG91dF9pbmZsYXRlX2VuZDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyMS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMjI6XFx0XFx0cy5uZXh0X291dCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMjMtXFx0XFx0cy5hdmFpbF9vdXQgPSBQQUdFX1NJWkU7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTI0OlxcdFxcdHJjID0gemxpYl9pbmZsYXRlKFxcdTAwMjZzLCAwKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMjU6XFx0XFx0a3VubWFwX2xvY2FsKHMubmV4dF9vdXQpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyNi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMjctXFx0XFx0bmV3X3NpemUgKz0gUEFHRV9TSVpFIC0gcy5hdmFpbF9vdXQ7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTI4OlxcdH0gd2hpbGUgKHJjID09IFpfT0spO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyOS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzA6XFx0aWYgKHJjICE9IFpfU1RSRUFNX0VORCkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEzMTpcXHRcXHRwcl9lcnIoXFxcImRlY29tcHJlc3Npb24gZmFpbGVkIHdpdGggc3RhdHVzICVkXFxcXG5cXFwiLCByYyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTMyLVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMzgtb3V0X2luZmxhdGVfZW5kOlxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEzOTpcXHR6bGliX2luZmxhdGVFbmQoXFx1MDAyNnMpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE0MC1vdXQ6XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTQxOlxcdGt2ZnJlZShzLndvcmtzcGFjZSk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTQyLVxcdHJldHVybiByZXR2YWw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYz0xNDk9c3RhdGljIHNzaXplX3QgbW9kdWxlX3h6X2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNTA6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTUxLXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE1OC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNTk6XFx0aWYgKHNpemUgXFx1MDAzYyBzaXplb2Yoc2lnbmF0dXJlKSB8fFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2MDpcXHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNjE6XFx0XFx0cHJfZXJyKFxcXCJub3QgYW4geHogY29tcHJlc3NlZCBtb2R1bGVcXFxcblxcXCIpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE2Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE2NC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNjU6XFx0eHpfZGVjID0geHpfZGVjX2luaXQoWFpfRFlOQUxMT0MsICh1MzIpLTEpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2NjpcXHRpZiAoIXh6X2RlYylcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNjctXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNzMtXFx0ZG8ge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE3NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1vZHVsZV9nZXRfbmV4dF9wYWdlKGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE3NS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzY6XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE3NzpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE3OC1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4MC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxODE6XFx0XFx0eHpfYnVmLm91dCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODItXFx0XFx0eHpfYnVmLm91dF9wb3MgPSAwO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4My1cXHRcXHR4el9idWYub3V0X3NpemUgPSBQQUdFX1NJWkU7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTg0OlxcdFxcdHh6X3JldCA9IHh6X2RlY19ydW4oeHpfZGVjLCBcXHUwMDI2eHpfYnVmKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxODU6XFx0XFx0a3VubWFwX2xvY2FsKHh6X2J1Zi5vdXQpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4Ni1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODctXFx0XFx0bmV3X3NpemUgKz0geHpfYnVmLm91dF9wb3M7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTg4OlxcdH0gd2hpbGUgKHh6X2J1Zi5vdXRfcG9zID09IFBBR0VfU0laRSBcXHUwMDI2XFx1MDAyNiB4el9yZXQgPT0gWFpfT0spO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4OS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxOTA6XFx0aWYgKHh6X3JldCAhPSBYWl9TVFJFQU1fRU5EKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTkxOlxcdFxcdHByX2VycihcXFwiZGVjb21wcmVzc2lvbiBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcXFxcblxcXCIsIHh6X3JldCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTkyLVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xOTgtIG91dDpcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxOTk6XFx0eHpfZGVjX2VuZCh4el9kZWMpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIwMC1cXHRyZXR1cm4gcmV0dmFsO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MjA3PXN0YXRpYyBzc2l6ZV90IG1vZHVsZV96c3RkX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMDg6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjA5LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIyMC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMjE6XFx0aWYgKHNpemUgXFx1MDAzYyBzaXplb2Yoc2lnbmF0dXJlKSB8fFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIyMjpcXHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMjM6XFx0XFx0cHJfZXJyKFxcXCJub3QgYSB6c3RkIGNvbXByZXNzZWQgbW9kdWxlXFxcXG5cXFwiKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMzAtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjMxOlxcdHJldCA9IHpzdGRfZ2V0X2ZyYW1lX2hlYWRlcihcXHUwMDI2aGVhZGVyLCB6c3RkX2J1Zi5zcmMsIHpzdGRfYnVmLnNpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzMjpcXHRpZiAocmV0ICE9IDApIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzM6XFx0XFx0cHJfZXJyKFxcXCJaU1RELWNvbXByZXNzZWQgZGF0YSBoYXMgYW4gaW5jb21wbGV0ZSBmcmFtZSBoZWFkZXJcXFxcblxcXCIpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIzNC1cXHRcXHRyZXR2YWwgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjM2LVxcdH1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzc6XFx0aWYgKGhlYWRlci53aW5kb3dTaXplIFxcdTAwM2UgKDEgXFx1MDAzY1xcdTAwM2MgWlNURF9XSU5ET1dMT0dfTUFYKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzODpcXHRcXHRwcl9lcnIoXFxcIlpTVEQtY29tcHJlc3NlZCBkYXRhIGhhcyB0b28gbGFyZ2UgYSB3aW5kb3cgc2l6ZVxcXFxuXFxcIik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjM5LVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNDItXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQzOlxcdHdrc3Bfc2l6ZSA9IHpzdGRfZHN0cmVhbV93b3Jrc3BhY2VfYm91bmQoaGVhZGVyLndpbmRvd1NpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI0NDpcXHR3a3NwID0ga3ZtYWxsb2Mod2tzcF9zaXplLCBHRlBfS0VSTkVMKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNDU6XFx0aWYgKCF3a3NwKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjQ2LVxcdFxcdHJldHZhbCA9IC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNDktXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjUwOlxcdGRzdHJlYW0gPSB6c3RkX2luaXRfZHN0cmVhbShoZWFkZXIud2luZG93U2l6ZSwgd2tzcCwgd2tzcF9zaXplKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNTE6XFx0aWYgKCFkc3RyZWFtKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjUyOlxcdFxcdHByX2VycihcXFwiQ2FuJ3QgaW5pdGlhbGl6ZSBaU1REIHN0cmVhbVxcXFxuXFxcIik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjUzLVxcdFxcdHJldHZhbCA9IC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNTctXFx0ZG8ge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1ODpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1vZHVsZV9nZXRfbmV4dF9wYWdlKGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI1OS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNjA6XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI2MTpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI2Mi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI2NC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNjU6XFx0XFx0enN0ZF9kZWMuZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI2Ni1cXHRcXHR6c3RkX2RlYy5wb3MgPSAwO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjY4LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI2OTpcXHRcXHRyZXQgPSB6c3RkX2RlY29tcHJlc3Nfc3RyZWFtKGRzdHJlYW0sIFxcdTAwMjZ6c3RkX2RlYywgXFx1MDAyNnpzdGRfYnVmKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzA6XFx0XFx0a3VubWFwX2xvY2FsKHpzdGRfZGVjLmRzdCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjcxOlxcdFxcdHJldHZhbCA9IHpzdGRfZ2V0X2Vycm9yX2NvZGUocmV0KTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzI6XFx0XFx0aWYgKHJldHZhbClcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzUtXFx0XFx0bmV3X3NpemUgKz0genN0ZF9kZWMucG9zO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI3NjpcXHR9IHdoaWxlICh6c3RkX2RlYy5wb3MgPT0gUEFHRV9TSVpFIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAwKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzctXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc4OlxcdGlmIChyZXR2YWwpIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzk6XFx0XFx0cHJfZXJyKFxcXCJaU1RELWRlY29tcHJlc3Npb24gZmFpbGVkIHdpdGggc3RhdHVzICVkXFxcXG5cXFwiLCByZXR2YWwpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI4MC1cXHRcXHRyZXR2YWwgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjg2LSBvdXQ6XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjg3OlxcdGt2ZnJlZSh3a3NwKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yODgtXFx0cmV0dXJuIHJldHZhbDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5My1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyOTQ6aW50IG1vZHVsZV9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMwNy1cXHQgKi9cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMDg6XFx0bl9wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUpICogMjtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMDk6XFx0ZXJyb3IgPSBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhpbmZvLCBuX3BhZ2VzKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTA6XFx0aWYgKGVycm9yKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMxMS1cXHRcXHRyZXR1cm4gZXJyb3I7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzEyLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMxMzpcXHRkYXRhX3NpemUgPSBNT0RVTEVfREVDT01QUkVTU19GTihpbmZvLCBidWYsIHNpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMxNDpcXHRpZiAoZGF0YV9zaXplIFxcdTAwM2MgMCkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMxNS1cXHRcXHRlcnJvciA9IGRhdGFfc2l6ZTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMxOC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTk6XFx0aW5mby1cXHUwMDNlaGRyID0gdm1hcChpbmZvLVxcdTAwM2VwYWdlcywgaW5mby1cXHUwMDNldXNlZF9wYWdlcywgVk1fTUFQLCBQQUdFX0tFUk5FTCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzIwOlxcdGlmICghaW5mby1cXHUwMDNlaGRyKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzIxLVxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMyOC1lcnI6XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzI5OlxcdG1vZHVsZV9kZWNvbXByZXNzX2NsZWFudXAoaW5mbyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzMwLVxcdHJldHVybiBlcnJvcjtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzMi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMzM6dm9pZCBtb2R1bGVfZGVjb21wcmVzc19jbGVhbnVwKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM0LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzNi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMzc6XFx0aWYgKGluZm8tXFx1MDAzZWhkcilcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMzg6XFx0XFx0dnVubWFwKGluZm8tXFx1MDAzZWhkcik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM5LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNldXNlZF9wYWdlczsgaSsrKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MTpcXHRcXHRfX2ZyZWVfcGFnZShpbmZvLVxcdTAwM2VwYWdlc1tpXSk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzQyLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MzpcXHRrdmZyZWUoaW5mby1cXHUwMDNlcGFnZXMpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM0NC1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jPTM1MD1zdGF0aWMgc3NpemVfdCBjb21wcmVzc2lvbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM1MTpcXHRcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTIte1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM1MzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIF9fc3RyaW5naWZ5KE1PRFVMRV9DT01QUkVTU0lPTikgXFxcIlxcXFxuXFxcIik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzU0LX1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTUtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzU2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbW9kdWxlX2NvbXByZXNzaW9uX2F0dHIgPSBfX0FUVFJfUk8oY29tcHJlc3Npb24pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1Ny1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTg6c3RhdGljIGludCBfX2luaXQgbW9kdWxlX2RlY29tcHJlc3Nfc3lzZnNfaW5pdCh2b2lkKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1OS17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjItXFx0ZXJyb3IgPSBzeXNmc19jcmVhdGVfZmlsZShcXHUwMDI2bW9kdWxlX2tzZXQtXFx1MDAzZWtvYmosXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzYzOlxcdFxcdFxcdFxcdCAgXFx1MDAyNm1vZHVsZV9jb21wcmVzc2lvbl9hdHRyLmF0dHIpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM2NDpcXHRpZiAoZXJyb3IpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzY1OlxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBjcmVhdGUgJ2NvbXByZXNzaW9uJyBhdHRyaWJ1dGVcXFwiKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjYtXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjgtfVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM2OTpsYXRlX2luaXRjYWxsKG1vZHVsZV9kZWNvbXByZXNzX3N5c2ZzX2luaXQpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM3MC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTMwLSNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCBcXFwibW9kdWxlLlxcXCJcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozMTpzdGF0aWMgYm9vbCBlbmFibGVfZHVwc190cmFjZSA9IElTX0VOQUJMRUQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTX1RSQUNFKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozMjptb2R1bGVfcGFyYW0oZW5hYmxlX2R1cHNfdHJhY2UsIGJvb2xfZW5hYmxlX29ubHksIDA2NDQpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTMzLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTM0LS8qIEEgbXV0ZXgtcHJvdGVjdGVkIGxpc3Qgb2YgYWN0aXZlIGttb2QgcmVxdWVzdHMuICovXFxua2VybmVsL21vZHVsZS9kdXBzLmM6MzU6c3RhdGljIERFRklORV9NVVRFWChrbW9kX2R1cF9tdXRleCk7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6MzY6c3RhdGljIExJU1RfSEVBRChkdXBfa21vZF9yZXFzKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0zNy1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYz0zOD1zdHJ1Y3Qga21vZF9kdXBfcmVxIHtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTQ2LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjQ3OnN0YXRpYyB2b2lkIGdldF9rbW9kX3JlcShzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX3JlcSlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy00OC17XFxua2VybmVsL21vZHVsZS9kdXBzLmM6NDk6XFx0cmVmY291bnRfaW5jKFxcdTAwMjZrbW9kX3JlcS1cXHUwMDNlcmVmY291bnQpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTUwLX1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy01MS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1MjpzdGF0aWMgdm9pZCBwdXRfa21vZF9yZXEoc3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEpXFxua2VybmVsL21vZHVsZS9kdXBzLmMtNTMte1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjU0OlxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VyZWZjb3VudCkpXFxua2VybmVsL21vZHVsZS9kdXBzLmM6NTU6XFx0XFx0a2ZyZWUoa21vZF9yZXEpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU2LX1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy01Ny1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1ODpERUZJTkVfRlJFRShwdXRfa21vZF9yZXEsIHN0cnVjdCBrbW9kX2R1cF9yZXEgKiwgaWYgKF9UKSBwdXRfa21vZF9yZXEoX1QpKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU5LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjYwOnN0YXRpYyBzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX2R1cF9yZXF1ZXN0X2xvb2t1cChjaGFyICptb2R1bGVfbmFtZSlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy02MS17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy02My1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo2NDpcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrbW9kX2R1cF9tdXRleCk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtNjUtXFxua2VybmVsL21vZHVsZS9kdXBzLmM6NjY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrbW9kX3JlcSwgXFx1MDAyNmR1cF9rbW9kX3JlcXMsIGxpc3QpIHtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo2NzpcXHRcXHRpZiAoIXN0cmNtcChrbW9kX3JlcS1cXHUwMDNlbmFtZSwgbW9kdWxlX25hbWUpKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTY4LVxcdFxcdFxcdHJldHVybiBrbW9kX3JlcTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTczLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjc0OnN0YXRpYyB2b2lkIGttb2RfZHVwX3JlcXVlc3RfZGVsZXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy03NS17XFxua2VybmVsL21vZHVsZS9kdXBzLmMtNzYtXFx0c3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXE7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6Nzc6XFx0a21vZF9yZXEgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3Qga21vZF9kdXBfcmVxLCBkZWxldGVfd29yayk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtNzgtXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy04My1cXHQgKiBtb2R1bGUgaXMgbG9hZGVkIHNvIHdpbGwganVzdCByZXR1cm4gMCByaWdodCBhd2F5LiBUaGVyZSBpcyBzdGlsbFxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjg0OlxcdCAqIGEgc21hbGwgY2hhbmNlIHJpZ2h0IGFmdGVyIHdlIGRlbGV0ZSB0aGlzIGVudHJ5IG5ldyByZXF1ZXN0X21vZHVsZSgpXFxua2VybmVsL21vZHVsZS9kdXBzLmMtODUtXFx0ICogY2FsbHMgbWF5IGhhcHBlbiBhZnRlciB0aGF0LCB0aGV5IGNhbiBoYXBwZW4uIFRoZXNlIGhldXJpc3RpY3NcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo4NjpcXHQgKiBhcmUgdG8gcHJvdGVjdCBmaW5pdF9tb2R1bGUoKSBhYnVzZSBmb3IgYXV0by1sb2FkaW5nLCBpZiBtb2R1bGVzXFxua2VybmVsL21vZHVsZS9kdXBzLmMtODctXFx0ICogYXJlIHN0aWxsIHRyeWlnbiB0byBhdXRvLWxvYWQgZXZlbiBpZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGxvYWRlZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTkxLVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjkyOlxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmttb2RfZHVwX211dGV4KVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjkzOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZrbW9kX3JlcS1cXHUwMDNlbGlzdCk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtOTQtXFxua2VybmVsL21vZHVsZS9kdXBzLmM6OTU6XFx0cHV0X2ttb2RfcmVxKGttb2RfcmVxKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05Ni19XFxua2VybmVsL21vZHVsZS9kdXBzLmMtOTctXFxua2VybmVsL21vZHVsZS9kdXBzLmM6OTg6c3RhdGljIHN0cnVjdCBrbW9kX2R1cF9yZXEgKmFsbG9jX2ttb2RfcmVxKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTk5LXtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMDA6XFx0c3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEgPSBremFsbG9jX29iaigqa21vZF9yZXEpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEwMS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMDI6XFx0aWYgKCFrbW9kX3JlcSlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMDMtXFx0XFx0cmV0dXJuIE5VTEw7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTA0LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwNTpcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTA2OlxcdHN0cnNjcHkoa21vZF9yZXEtXFx1MDAzZW5hbWUsIG1vZHVsZV9uYW1lKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMDc6XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VkZWxldGVfd29yaywga21vZF9kdXBfcmVxdWVzdF9kZWxldGUpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwODpcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VmaXJzdF9yZXFfZG9uZSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTA5LVxcdHJldHVybiBrbW9kX3JlcTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExMS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMTI6Ym9vbCBrbW9kX2R1cF9yZXF1ZXN0X2V4aXN0c193YWl0KGNoYXIgKm1vZHVsZV9uYW1lLCBib29sIHdhaXQsIGludCAqZHVwX3JldClcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMTMte1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjExNDpcXHRzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX3JlcSBfX2ZyZWUocHV0X2ttb2RfcmVxKSA9IE5VTEw7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTE1LVxcdGludCByZXQ7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTE2LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjExNzpcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrbW9kX2R1cF9tdXRleCkge1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExOC1cXHRcXHRzdHJ1Y3Qga21vZF9kdXBfcmVxICpuZXdfa21vZF9yZXE7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTE5LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEyMDpcXHRcXHRrbW9kX3JlcSA9IGttb2RfZHVwX3JlcXVlc3RfbG9va3VwKG1vZHVsZV9uYW1lKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMjE6XFx0XFx0aWYgKGttb2RfcmVxKSB7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTIyOlxcdFxcdFxcdGdldF9rbW9kX3JlcShrbW9kX3JlcSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTIzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTI3LVxcdFxcdCAqIElmIHRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgY2FtZSB0aHJvdWdoIGZvciBhIG1vZHVsZVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEyODpcXHRcXHQgKiB3YXMgd2l0aCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3ZSBjYW5ub3Qgd2FpdCBmb3IgaXRcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMjktXFx0XFx0ICogYW5kIHNoYXJlIGl0cyByZXR1cm4gdmFsdWUgd2l0aCBvdGhlciB1c2VycyB3aGljaCBtYXlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMzA6XFx0XFx0ICogaGF2ZSB1c2VkIHJlcXVlc3RfbW9kdWxlKCkgYW5kIG5lZWQgYSBwcm9wZXIgcmV0dXJuIHZhbHVlXFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTMxLVxcdFxcdCAqIHNvIGp1c3Qgc2tpcCB1c2luZyB0aGVtIGFzIGFuIGFuY2hvci5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEzMy1cXHRcXHQgKiBJZiBhIHByaW9yIHJlcXVlc3QgdG8gdGhpcyBvbmUgY2FtZSB0aHJvdWdoIHdpdGhcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMzQ6XFx0XFx0ICogcmVxdWVzdF9tb2R1bGUoKSB0aG91Z2gsIHRoZW4gYSByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEzNS1cXHRcXHQgKiB3b3VsZCBiZW5lZml0IGZyb20gZHVwbGljYXRlIGRldGVjdGlvbi5cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzYtXFx0XFx0ICovXFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTM3OlxcdFxcdGlmICghd2FpdCkge1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEzODpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiTmV3IHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpIGZvciAlcyAtLSBjYW5ub3QgdHJhY2sgZHVwbGljYXRlcyBmb3IgdGhpcyByZXF1ZXN0XFxcXG5cXFwiLCBtb2R1bGVfbmFtZSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTM5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTE0NS1cXHRcXHQgKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NTMuNDI2OTAxNzg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NTMwNjIxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogS2VybmVsIE1vZHVsZSBMb2FkaW5nIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUgcHJpbWFyaWx5IHdpdGhpbiBga2VybmVsL21vZHVsZS9tYWluLmNg4oCUZnVuY3Rpb25zIGxpa2UgYGluaXRfbW9kdWxlYCwgYGZpbml0X21vZHVsZWAsIGFuZCBgZGVsZXRlX21vZHVsZWDigJRhbG9uZyB3aXRoIGBsaWIvY29kZXRhZy5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY29kZXRhZyBhbGxvY2F0aW9uIChgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAsIGBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zYCwgYW5kIGBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uYCkuIFRoaXMgcG9pbnRzIHRvIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgRUxGIG1vZHVsZSBwYXJzaW5nIGFuZCBtb2R1bGUgbGlmZWN5Y2xlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIGBNT0RVTEVTYCBpcyBhIGdpdmVuLCBlc3NlbnRpYWwgZm9yIG1vZHVsZSBsb2FkaW5nLiBIb3dldmVyLCB0aGUgY3JpdGljYWwgb25lIGhlcmUgaXMgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBicmluZ3MgaW4gYWxsb2NfdGFnIGNvZGV0YWcgc3VwcG9ydCwgdGh1cyBgQ09ERV9UQUdHSU5HYCwgYFBBR0VfRVhURU5TSU9OYCwgYW5kIGBTTEFCX09CSl9FWFRgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIGNvbmZpcm0gdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kcyBvbiBgTU1VYCBhbmQgYFBST0NfRlNgLlxuXG5Ob3csIGRpZ2dpbmcgaW50byB0aGUgYFdvcnRoRnV6emluZ2AgYXNzZXNzbWVudDogdGhlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1vZHVsZSBsb2FkaW5nIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGhvdyBFTEYgc2VjdGlvbnMgYXJlIGhhbmRsZWQsIGFuZCB0aGUgcmVsb2NhdGlvbiBvZiBjb2RldGFncyBhbmQgcGVyLWNwdSBzZWN0aW9ucyBpcyBjcnVjaWFsLiBUaGUgbW9kaWZpY2F0aW9ucyBlbmNvbXBhc3MgZnVuY3Rpb25zIGludm9sdmVkIGluIEVMRiBzZWN0aW9uIGxheW91dCAoYF9fbGF5b3V0X3NlY3Rpb25zYCwgYG1vdmVfbW9kdWxlYCwgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgLCBhbmQgYGxheW91dF9hbmRfYWxsb2NhdGVgKSB3aGljaCByZWxhdGVzIHRvIGhvdyBjb2RldGFncyBhbmQgcGVyLWNwdSBzZWN0aW9ucyBhcmUgdHJhY2tlZCBhbmQgcmVsb2NhdGVkIGR1cmluZyBtb2R1bGUgbG9hZGluZy4gTWVtb3J5IHJlc2VydmF0aW9uIGFuZCByZWxlYXNlIHZpYSBgYWxsb2NfdGFnLmNgLCBhbmQgdGhlIGZhbGxiYWNrIGhhbmRsaW5nIGlmIHRhZ3MgYXJlbid0IGFkZHJlc3NhYmxlLCB3aGljaCBhcmUga2V5IGR1cmluZyBsb2FkaW5nIGFuZCB1bmxvYWRpbmcuXG5cblRoaXMgZGlyZWN0bHkgaW1wbGljYXRlcyBob3cgRUxGIG1vZHVsZXMgYXJlIHBhcnNlZCwgbWVtb3J5IGFsbG9jYXRlZCwgYW5kIGluaXRpYWxpemVkL2NsZWFuZWQgdXAgd2hlbiBhIG1vZHVsZSBsb2Fkcy4gYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZsYWcgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtb2R1bGUgbG9hZGluZyBsb2dpYywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiBFTEYgc2VjdGlvbnMgYW5kIGNvZGV0YWdzIGR1cmluZyBtb2R1bGUgbGlmZWN5Y2xlLlxuXG5UaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOiBgaW5pdF9tb2R1bGVgLCBgZmluaXRfbW9kdWxlYCwgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gLCBhbmQgYGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnNgLlxuXG5UaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYE1PRFVMRVNgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AuXG5cbkkndmUgdmVyaWZpZWQgZXZlcnl0aGluZyDigJMgaXQncyBhbGwgYWNjdXJhdGUgYW5kIGNvbnNpc3RlbnQuIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg5OSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MDEuMzc5OTY3MzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1Njk4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PRFVMRVNcIixcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbml0X21vZHVsZVwiLFxuICAgIFwiZmluaXRfbW9kdWxlXCIsXG4gICAgXCJjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uXCIsXG4gICAgXCJjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5pdF9tb2R1bGVcIixcbiAgICBcImZpbml0X21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvblwiLFxuICAgIFwiY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgY29yZSBrZXJuZWwgbW9kdWxlIGxvYWRpbmcgYW5kIGxheW91dCBsb2dpYyBmb3Igc3RhbmRhbG9uZSBzZWN0aW9ucyAocGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZ3MvYWxsb2MgdGFncykgYXMgd2VsbCBhcyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFnIHJlc2VydmF0aW9uIGZhbGxiYWNrIGhhbmRsaW5nIHdoZW4gdGFncyBhcmUgbm90IGFkZHJlc3NhYmxlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBsb2FkaW5nIHN5c2NhbGxzIChpbml0X21vZHVsZSBhbmQgZmluaXRfbW9kdWxlKSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjMwOjAxLjUxMTU0NjY4OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NjEwMjc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDozMDowMS41MTQ0NTg3NDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDY1ODExMDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBFTEYgc2VjdGlvbiBsYXlvdXQgYW5kIGFsbG9jYXRpb24gbG9naWMgZm9yIHN0YW5kYWxvbmUgbW9kdWxlIHNlY3Rpb25zIChzdWNoIGFzIHBlci1DUFUgc2VjdGlvbnMgYW5kIGNvZGV0YWcvYWxsb2NfdGFnIHNlY3Rpb25zKSBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBhbmQgYWRqdXN0cyBlcnJvciBoYW5kbGluZyBpbiBgbW0vYWxsb2NfdGFnLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBkb2VzIG5vdCBsZWF2ZSBzdHJ1Y3R1cmUgcGFkZGluZ3MgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBUaGUgc2VjdGlvbiBkYXRhIGNvcGllZCB2aWEgYG1lbWNweSgpYCBvcmlnaW5hdGVzIGZyb20gYWxyZWFkeS1sb2FkZWQgRUxGIGltYWdlIGJ1ZmZlcnMuXFxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6Mjk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuaW5kZXggOTZjYzk4NTY4ZWVhNS4uMGM2ZjMyZGRjYmYyZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbkBAIC0zMjUsNiArMzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xuIFx0TU9EX0lOSVRfUk9EQVRBLFxuIFxuIFx0TU9EX01FTV9OVU1fVFlQRVMsXG4rXG4rXHRNT0RfU1RBTkRBTE9ORSA9IC0yLFxuIFx0TU9EX0lOVkFMSUQgPSAtMSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaCBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuaW5kZXggMDYxMTYxY2M3OWQ5MC4uNGM3MzgwNzRhMjdiOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuKysrIGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG5AQCAtMjksNiArMjksMTQgQEBcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXHQoKDFVTCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcbiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0tcdCgoMVVMIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKVxuIFxuKy8qXG4rICogTWFya2VyIGZvciBzZWN0aW9ucyB3aXRoIGEgc2VwYXJhdGUgYWxsb2NhdGlvbiwgd2hpY2ggYXJlIG5vdCBwbGFjZWRcbisgKiBpbnRvIG1vZC1cdTAwM2VtZW1bXS5cbisgKi9cbisjZGVmaW5lIFNIX0VOVFNJWkVfU1RBTkRBTE9ORVx0XHRcdFx0XHRcXFxuK1x0KCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSBcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXHRcXFxuK1x0IFx1MDAzY1x1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQpXG4rXG4gLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovXG4gI2RlZmluZSBNT0RVTEVfRkxBR1NfQlVGX1NJWkUgKFRBSU5UX0ZMQUdTX0NPVU5UICsgNClcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTYxNywxNCArMTYxNyw4IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0XHRpZiAoaW5mb3NlYyBcdTAwM2U9IGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW0pXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuXG4tXHRcdCAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9uc1xuLVx0XHQgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWxcbi1cdFx0ICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWluZm9zZWMgfHwgaW5mb3NlYyAhPSBpbmZvLVx1MDAzZWluZGV4LnBjcHUpKVxuK1x0XHQvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zLiAqL1xuK1x0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZmxhZ3MgXHUwMDI2IFNIRl9SRUxBX0xJVkVQQVRDSClcbkBAIC0xNzE1LDI3ICsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gXG4gXHRcdFx0aWYgKChzLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF1cbiBcdFx0XHQgICAgfHwgKHMtXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IG1hc2tzW21dWzFdKVxuLVx0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxuK1x0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTCAvKiBvZmZzZXQgb3Igc3RhbmRhbG9uZSAqL1xuIFx0XHRcdCAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmIChXQVJOX09OX09OQ0UodHlwZSA9PSBNT0RfSU5WQUxJRCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG9cbi1cdFx0XHQgKiBwcmVhbGxvY2F0ZWQgY29udGlndW91cyBtZW1vcnkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIHMtXHUwMDNlc2hfZW50c2l6ZSB3b24ndCBiZSB1c2VkIGJ1dCBwb3B1bGF0ZSB0aGVcbi1cdFx0XHRcdCAqIHR5cGUgZmllbGQgdG8gYXZvaWQgY29uZnVzaW9uLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzLVx1MDAzZXNoX2VudHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpKHR5cGUpIFx1MDAyNiBTSF9FTlRTSVpFX1RZUEVfTUFTSylcbi1cdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuIFx0XHRcdHMtXHUwMDNlc2hfZW50c2l6ZSA9IG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKG1vZCwgdHlwZSwgcywgaSk7XG4gXHRcdFx0cHJfZGVidWcoXCJcXHQlc1xcblwiLCBzbmFtZSk7XG4gXHRcdH1cbkBAIC0xNzQ1LDE2ICsxNzI1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gLypcbiAgKiBMYXkgb3V0IHRoZSBTSEZfQUxMT0Mgc2VjdGlvbnMgaW4gYSB3YXkgbm90IGRpc3NpbWlsYXIgdG8gaG93IGxkXG4gICogbWlnaHQgLS0gY29kZSwgcmVhZC1vbmx5IGRhdGEsIHJlYWQtd3JpdGUgZGF0YSwgc21hbGwgZGF0YS4gIFRhbGx5XG4tICogc2l6ZXMsIGFuZCBwbGFjZSB0aGUgb2Zmc2V0cyBpbnRvIHNoX2VudHNpemUgZmllbGRzOiBoaWdoIGJpdCBtZWFucyBpdFxuLSAqIGJlbG9uZ3MgaW4gaW5pdC5cbisgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXG4gICovXG4gc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKylcbi1cdFx0aW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xuLVxuIFx0cHJfZGVidWcoXCJDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbiBcdF9fbGF5b3V0X3NlY3Rpb25zKG1vZCwgaW5mbywgZmFsc2UpO1xuIFxuQEAgLTI4MDAsNyArMjc3NCw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIHtcbiBcdGludCBpLCByZXQ7XG4gXHRlbnVtIG1vZF9tZW1fdHlwZSB0ID0gTU9EX01FTV9OVU1fVFlQRVM7XG4tXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xuIFxuIFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbiBcdFx0aWYgKCFtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcbkBAIC0yODIwLDM0ICsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKSB7XG4gXHRcdHZvaWQgKmRlc3Q7XG4gXHRcdEVsZl9TaGRyICpzaGRyID0gXHUwMDI2aW5mby1cdTAwM2VzZWNoZHJzW2ldO1xuLVx0XHRjb25zdCBjaGFyICpzbmFtZTtcbiBcbi1cdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSlcbitcdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKVxuK1x0XHQgICAgfHwgc2hkci1cdTAwM2VzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0c25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4tXHRcdC8qXG4tXHRcdCAqIExvYWQgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IGFzIHRoZXkgbWlnaHQgc3RpbGwgYmUgdXNlZFxuLVx0XHQgKiBhZnRlciBtb2R1bGUgdW5sb2FkLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSxcbi1cdFx0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi1cdFx0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChJU19FUlIoZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IFBUUl9FUlIoZGVzdCk7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwM2VcdTAwM2UgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAyNiBTSF9FTlRTSVpFX09GRlNFVF9NQVNLO1xuLVxuLVx0XHRcdGRlc3QgPSBtb2QtXHUwMDNlbWVtW3R5cGVdLmJhc2UgKyBvZmZzZXQ7XG4tXHRcdH1cbitcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlRdLmJhc2UgK1xuK1x0XHQgICAgICAgKHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7XG4gXG4gXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xuIFx0XHRcdC8qXG5AQCAtMjg3OSw4ICsyODMxLDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4gXHRtb2R1bGVfbWVtb3J5X3Jlc3RvcmVfcm94KG1vZCk7XG4gXHR3aGlsZSAodC0tKVxuIFx0XHRtb2R1bGVfbWVtb3J5X2ZyZWUobW9kLCB0KTtcbi1cdGlmIChjb2RldGFnX3NlY3Rpb25fZm91bmQpXG4tXHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI5NTEsOSArMjkwMSw1MSBAQCBzdGF0aWMgYm9vbCBibGFja2xpc3RlZChjb25zdCBjaGFyICptb2R1bGVfbmFtZSlcbiB9XG4gY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7XG4gXG4rLypcbisgKiBBbGxvY2F0ZSBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkuIFRoZXkgYXJlIGxvYWRlZCBpbnRvIHByZWFsbG9jYXRlZFxuKyAqIGNvbnRpZ3VvdXMgbWVtb3J5IGJlY2F1c2UgdGhleSBtYXkgc3RpbGwgYmUgdXNlZCBhZnRlciB0aGUgbW9kdWxlIGlzXG4rICogdW5sb2FkZWQuXG4rICpcbisgKiBJZiB0aGUgc2VwYXJhdGUgYWxsb2NhdGlvbiBvdmVyZmxvd3MsIGFsbG9jYXRlIHRoZSBzZWN0aW9uIG5vcm1hbGx5XG4rICogc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBzdGlsbCBiZSBsb2FkZWQuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4re1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKykge1xuK1x0XHRFbGZfU2hkciAqc2hkciA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpXTtcbitcdFx0Y29uc3QgY2hhciAqc25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4rXHRcdHZvaWQgKmRlc3Q7XG4rXG4rXHRcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVx1MDAzZW1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuK1x0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKGluZm8tXHUwMDNlbW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuK1x0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbitcdFx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRpZiAoZGVzdCA9PSBFUlJfUFRSKC1FQUdBSU4pKVxuK1x0XHRcdC8qIEFsbG9jYXRlIHRoZSBzZWN0aW9uIGFzIGEgcmVndWxhciBzZWN0aW9uLiAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoSVNfRVJSKGRlc3QpKSB7XG4rXHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNoZHItXHUwMDNlc2hfdHlwZSAhPSBTSFRfTk9CSVRTKVxuK1x0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbitcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbitcdFx0c2hkci1cdTAwM2VzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG5AQCAtMjk2Nyw4ICsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXG4rXHQvKiBSZXB1cnBvc2Ugc2hfZW50c2l6ZSB0byB0cmFjayB3aGVyZSBlYWNoIHNlY3Rpb24gaXMgYWxsb2NhdGVkLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKVxuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XG4rXG4gXHQvKiBXZSB3aWxsIGRvIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciBwZXItY3B1IHNlY3Rpb25zIGxhdGVyLiAqL1xuLVx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuK1x0aWYgKGluZm8tXHUwMDNlaW5kZXgucGNwdSlcbitcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcbiBcbiBcdC8qXG4gXHQgKiBNYXJrIHJlbGV2YW50IHNlY3Rpb25zIGFzIFNIRl9ST19BRlRFUl9JTklUIHNvIGxheW91dF9zZWN0aW9ucygpIGNhblxuQEAgLTI5NzcsMTggKzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbi1cdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55XG4tXHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbi1cdCAqL1xuK1x0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cbitcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xuIFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFxuIFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4gXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4tXHRpZiAoZXJyKVxuK1x0aWYgKGVycikge1xuK1x0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdH1cbiBcbiBcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xuIFx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggZjMwZWY4ZGQyNGM3MC4uOGYxMzM2OWIzMmVjZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTg0Myw2ICs4NDMsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4re1xuK1x0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuK1x0c3RydWN0IG1vZHVsZSAqdmFsO1xuK1xuK1x0bWFzX2xvY2soXHUwMDI2bWFzKTtcbitcdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4rXHRcdGlmICh2YWwgPT0gbW9kKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIXVzZWQpXG4rXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuK1xuK1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4rXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbitcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbitcdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuK1xuK1x0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbitcdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4rXG4rXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbitcdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbitcdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR1c2VkID0gZmFsc2U7XG4rXHR9XG4rcmVsZWFzZV9hcmVhOlxuK1x0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuK1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbitcdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4rXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuK291dDpcbitcdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkxMiwxMCArOTU4LDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRpbnQgZ3Jvd19yZXM7XG4gXG4gXHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xuLVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbitcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbi1cdFx0XHRcdG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cHJfd2Fybl9vbmNlKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4rXHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0fVxuIFxuIFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG5AQCAtOTIzLDYgKzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gXHRcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbiBcdFx0XHQgICAgICAgbW9kLVx1MDAzZW5hbWUpO1xuK1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTMwLDUyICs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcbi17XG4tXHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbi1cdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcbi1cdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XG4tXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4tXG4tXHRtYXNfbG9jayhcdTAwMjZtYXMpO1xuLVx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbi1cdFx0aWYgKHZhbCA9PSBtb2QpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmICghdXNlZClcbi1cdFx0Z290byByZWxlYXNlX2FyZWE7XG4tXG4tXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwiLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXHUwMDNlY3QubGluZW5vLCB0YWctXHUwMDNlY3QubW9kbmFtZSxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHVzZWQgPSBmYWxzZTtcbi1cdH1cbi1yZWxlYXNlX2FyZWE6XG4tXHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4tXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcdTAwMjZtYXMsIDApO1xuLVx0aWYgKHZhbCA9PSBcdTAwMjZwcmVwZW5kX21vZClcbi1cdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4tb3V0OlxuLVx0bWFzX3VubG9jayhcdTAwMjZtYXMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiB7XG4gXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MDEuNTE0NDYwODk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzA4MDQ2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgd2hpY2ggd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJ2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIHBhdGNoIGRpZmYgaXRzZWxmLiBJdCdzIHRvdWNoaW5nIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvbW9kdWxlLmhgLCBga2VybmVsL21vZHVsZS9pbnRlcm5hbC5oYCwgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoaXMgc3VnZ2VzdHMgY2hhbmdlcyB0byBob3cgbW9kdWxlcyBhcmUgbG9hZGVkLCByZWxvY2F0ZWQsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgaXMgbWFuYWdlZC5cblxuRmlyc3QsIHRoZSBlbnVtIGNoYW5nZS4gQWRkaW5nIGBNT0RfU1RBTkRBTE9ORSA9IC0yYCB0byBgZW51bSBtb2RfbWVtX3R5cGVgIGluIGBpbmNsdWRlL2xpbnV4L21vZHVsZS5oYCBpcyBzdHJhaWdodGZvcndhcmQuIFRoZW4gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgaW4gYGtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaGAgc2VlbXMgdG8gYmUgYSBkZXJpdmVkIHZhbHVlIGJhc2VkIG9uIHRoYXQgZW51bS4gSXQgbG9va3MgbGlrZSBgU0hfRU5UU0laRV9TVEFOREFMT05FYCBpcyByZWxhdGVkIHRvIGNvZGV0YWcgc2VjdGlvbnMuIEkgd2lsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuTm93IGZvciB0aGUgbWVhdCBvZiBpdCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBJbnRlcmVzdGluZy4gVGhlIHBhdGNoIGlzIHJlbW92aW5nIGV4Y2VwdGlvbnMgYW5kIGhhbmRsaW5nIHJlbGF0ZWQgdG8gYGluZm9zZWNgIHdpdGhpbiBgYXBwbHlfcmVsb2NhdGlvbnMoKWAuIEFsc28sIGNvZGUgdG8gcmVtb3ZlIGNvZGV0YWcgaGFuZGxpbmcgZnJvbSBib3RoIGBfX2xheW91dF9zZWN0aW9ucygpYCBhbmQgYG1vdmVfbW9kdWxlKClgLiBUaGUgcGF0Y2ggYWxzbyBtb3ZlcyByZXNldHRpbmcgYGluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtgIGZyb20gYGxheW91dF9zZWN0aW9ucygpYCB0byBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYC4gVGhlIG5ldyBmdW5jdGlvbiBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCBpcyB2ZXJ5IGludGVyZXN0aW5nLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHNlY3Rpb25zLCBjb25kaXRpb25hbGx5IGNhbGxzIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKClgLCBhbmQgY29waWVzIGRhdGEsIHNldHRpbmcgYHNoZHItXHUwMDNlc2hfYWRkcmAgYW5kIGBzaGRyLVx1MDAzZXNoX2VudHNpemVgIHRvIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgLiBJIG5lZWQgdG8gaW5zcGVjdCB0aGlzIGZ1bmN0aW9uIGNhcmVmdWxseSB3aXRoIHJlc3BlY3QgdG8gYWxsb2NhdGlvbiBhbmQgY29weSBzZW1hbnRpY3M7IHNwZWNpZmljYWxseSB0aGUgZGF0YSBjb3B5aW5nIGludG8gdGhlIGRlc3QgdmFyaWFibGUuIEZpbmFsbHksIEkgc2VlIHRoYXQgdGhlIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGZ1bmN0aW9uIG5vdyBpbml0aWFsaXplcyBgc2hfZW50c2l6ZWAgdG8gYH4wVUxgIGFuZCBhbHNvIHNldHMgYGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnBjcHVdLnNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7YCBmb3Igbm9uLXplcm8gYHBjcHVgIGluZGljZXMgYmVmb3JlIGNhbGxpbmcgb3RoZXIgbGF5b3V0IGZ1bmN0aW9ucy5cblxuRmluYWxseSwgaW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhlIHJlb3JkZXJpbmcgb2YgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzKClgIGxvb2tzIGltcG9ydGFudC4gVGhlIGxvZ2ljIGluIGByZXNlcnZlX21vZHVsZV90YWdzKClgIGFyb3VuZCBgdGFnc19hZGRyZXNzYWJsZSgpYCBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gYHNodXRkb3duX21lbV9wcm9maWxpbmcoKWAsIGByZWxlYXNlX21vZHVsZV90YWdzKClgLCBhbmQgYHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKClgIGlzIHdoYXQgSSBuZWVkIHRvIHdhdGNoLiBBbnkgZmFpbHVyZSBzY2VuYXJpb3MgaGVyZSBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZWVwbHkgZXhhbWluZSB0aGUgdXNhZ2Ugb2YgYGluZm8tXHUwMDNlc2VjaGRyc2AgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBtYW5hZ2VkLCBlc3BlY2lhbGx5IGFyb3VuZCBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYCwgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoKWAgYW5kIHRoZSBjb2RldGFnIHJlbGF0ZWQgY29kZS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgZXF1aXZhbGVudCB0b29scyB0byBzZWFyY2ggZm9yIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgdGhhdCBjYW4gbGVhZCB0byBtZW1vcnkgbGVha2FnZSwgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIHN1c3BpY2lvdXMuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGdvaW5nIHRvIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MDcuOTQ1MjY3ODU4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMxOTc5NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL21vZHVsZS9tYWluLmM9MjkwMj1jb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MTEtICovXFxua2VybmVsL21vZHVsZS9tYWluLmM6MjkxMjpzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTEzLXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDU9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk3Ny1cXHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5Nzg6XFx0ZXJyID0gYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhpbmZvKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTc5LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjMwOjEwLjA3NzI2MDk2NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTczNjkyNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNb2R1bGUgUmVsb2NhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBtb2R1bGUgbGF5b3V0IGFuZCBhbGxvY2F0aW9uLCBhbmQgaG93IG1vZHVsZXMgYXJlIG1vdmVkIGFyb3VuZCBpbiBtZW1vcnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBjb2RlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIG1vZHVsZSBtYW5pcHVsYXRpb24gcmVzaWRlcy4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL21vZHVsZS9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBtb2R1bGUgcmVsb2NhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgZG9uZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkZWNpZGVzIHdoZXJlIHRvIHB1dCB0aGUgbW9kdWxlLCBhbmQgcHJlY2lzZWx5IGhvdyBpdCBoYW5kbGVzIHRoZSBkYXRhIHRyYW5zZmVyIHdoZW4gaXQgbmVlZHMgdG8gYmUgcmVwb3NpdGlvbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MTIuMDUwOTU3MzE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzIzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL21vZHVsZS9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk0NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk0NTpcXHRzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuMjk0NjpcXHR7XFxuMjk0NzpcXHRcXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XFxuMjk0ODpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4yOTQ5OlxcdFxcdGludCBlcnI7XFxuMjk1MDpcXHRcXG4yOTUxOlxcdFxcdC8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi9cXG4yOTUyOlxcdFxcdGVyciA9IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLFxcbjI5NTM6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTU0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NTU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTU2OlxcdFxcbjI5NTc6XFx0XFx0ZXJyID0gbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGluZm8tXFx1MDAzZWhkciwgaW5mby1cXHUwMDNlc2VjaGRycyxcXG4yOTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTU5OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NjA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTYxOlxcdFxcbjI5NjI6XFx0XFx0LyogUmVwdXJwb3NlIHNoX2VudHNpemUgdG8gdHJhY2sgd2hlcmUgZWFjaCBzZWN0aW9uIGlzIGFsbG9jYXRlZC4gKi9cXG4yOTYzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbmZvLVxcdTAwM2VoZHItXFx1MDAzZWVfc2hudW07IGkrKylcXG4yOTY0OlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XFxuMjk2NTpcXHRcXG4yOTY2OlxcdFxcdC8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovXFxuMjk2NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlaW5kZXgucGNwdSlcXG4yOTY4OlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcXG4yOTY5OlxcdFxcbjI5NzA6XFx0XFx0LypcXG4yOTcxOlxcdFxcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXFxuMjk3MjpcXHRcXHQgKiBwdXQgdGhlbSBpbiB0aGUgcmlnaHQgcGxhY2UuXFxuMjk3MzpcXHRcXHQgKiBOb3RlOiByb19hZnRlcl9pbml0IHNlY3Rpb25zIGFsc28gaGF2ZSBTSEZfe1dSSVRFLEFMTE9DfSBzZXQuXFxuMjk3NDpcXHRcXHQgKi9cXG4yOTc1OlxcdFxcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzKTtcXG4yOTc2OlxcdFxcbjI5Nzc6XFx0XFx0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cXG4yOTc4OlxcdFxcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XFxuMjk3OTpcXHRcXHRpZiAoZXJyKVxcbjI5ODA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTgxOlxcdFxcbjI5ODI6XFx0XFx0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xcbjI5ODM6XFx0XFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NDpcXHRcXHRsYXlvdXRfc3ltdGFiKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NTpcXHRcXG4yOTg2OlxcdFxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbjI5ODc6XFx0XFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4yOTg4OlxcdFxcdGlmIChlcnIpIHtcXG4yOTg5OlxcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kKTtcXG4yOTkwOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMjk5MTpcXHRcXHR9XFxuMjk5MjpcXHRcXG4yOTkzOlxcdFxcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xcbjI5OTQ6XFx0XFx0bW9kID0gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcXG4yOTk1OlxcdFxcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XFxuMjk5NjpcXHRcXHRjb2RldGFnX21vZHVsZV9yZXBsYWNlZChpbmZvLVxcdTAwM2Vtb2QsIG1vZCk7XFxuMjk5NzpcXHRcXG4yOTk4OlxcdFxcdHJldHVybiBtb2Q7XFxuMjk5OTpcXHR9XFxuMzAwMDpcXHRcXG4zMDAxOlxcdC8qIG1vZCBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgdGhpcyEgKi9cXG4zMDAyOlxcdHN0YXRpYyB2b2lkIG1vZHVsZV9kZWFsbG9jYXRlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4zMDAzOlxcdHtcXG4zMDA0OlxcdFxcdHBlcmNwdV9tb2RmcmVlKG1vZCk7XFxuMzAwNTpcXHRcXHRtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQobW9kKTtcXG4zMDA2OlxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcXG4zMDA3OlxcdFxcbjMwMDg6XFx0XFx0ZnJlZV9tb2RfbWVtKG1vZCk7XFxuMzAwOTpcXHR9XFxuMzAxMDpcXHRcXG4zMDExOlxcdGludCBfX3dlYWsgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsXFxuMzAxMjpcXHRcXHRcXHRcXHQgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycyxcXG4zMDEzOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtb2R1bGUgKm1lKVxcbjMwMTQ6XFx0e1xcbjMwMTU6XFx0XFx0cmV0dXJuIDA7XFxuMzAxNjpcXHR9XFxuMzAxNzpcXHRcXG4zMDE4OlxcdHN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4zMDE5OlxcdHtcXG4zMDIwOlxcdFxcdC8qIFNvcnQgZXhjZXB0aW9uIHRhYmxlIG5vdyByZWxvY2F0aW9ucyBhcmUgZG9uZS4gKi9cXG4zMDIxOlxcdFxcdHNvcnRfZXh0YWJsZShtb2QtXFx1MDAzZWV4dGFibGUsIG1vZC1cXHUwMDNlZXh0YWJsZSArIG1vZC1cXHUwMDNlbnVtX2V4ZW50cmllcyk7XFxuMzAyMjpcXHRcXG4zMDIzOlxcdFxcdC8qIENvcHkgcmVsb2NhdGVkIHBlcmNwdSBhcmVhIG92ZXIuICovXFxuMzAyNDpcXHRcXHRwZXJjcHVfbW9kY29weShtb2QsICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5wY3B1XS5zaF9hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDozMDoxMi4wNTM5MzY1NTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzMzgwNTY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29kZSBUYWcgU2VjdGlvbiBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGl0ZXJhdGluZyB0aHJvdWdoIHNlY3Rpb24gaGVhZGVycywgc3RhcnRpbmcgZnJvbSB0aGUgc2Vjb25kIG9uZSAoaW5kZXggMSkuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBzZWN0aW9ucyB0aGF0IG1lZXQgYSBzcGVjaWZpYyBcImNvZGV0YWdcIiBjcml0ZXJpYSB3aXRoaW4gYSBtb2R1bGUuIFRoZSBmdW5jdGlvbiBpcyBnb2luZyB0aHJvdWdoIHRoZSBzZWN0aW9uIGhlYWRlcnMgYW5kIGl0IGxvb2tzIGxpa2UgYGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb25gIGRlY2lkZXMgd2hpY2ggc2VjdGlvbnMgc2hvdWxkIGJlIG1vdmVkIG9yIG1hbmFnZWQgZGlmZmVyZW50bHkuXG5cblRoZSBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAgY2FsbCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgdG8gaGFuZGxlIHRoZSBhY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24sIHBvdGVudGlhbGx5IHByZXBlbmRpbmcgc29tZXRoaW5nIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUsIGhhbmRsaW5nIGFsaWdubWVudCBhbmQgdGhlIHNlY3Rpb24ncyBzaXplLiBUaGVyZSdzIGVycm9yIGhhbmRsaW5nIHRvIG1hbmFnZSBhbGxvY2F0aW9uIGZhaWx1cmUgdXNpbmcgYFdBUk5fT05gLCBhbmQgc29tZSBmYWxsYmFjayBsb2dpYyBpbnZvbHZpbmcgYC1FQUdBSU5gIHRvIHRyZWF0IGl0IGxpa2UgYSByZWd1bGFyIHNlY3Rpb24sIGFuZCBnZW5lcmFsIGVycm9yIGhhbmRsaW5nLCBmcmVlaW5nIGFsbG9jYXRpb25zIG9uIGZhaWx1cmUuXG5cbkZpbmFsbHksIGlmIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIHNlY3Rpb24gaXMgKm5vdCogYSBuby1iaXRzIHNlY3Rpb24sIHdlIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgb3JpZ2luYWwgc2VjdGlvbiBhZGRyZXNzIChgc2hkci1cdTAwM2VzaF9hZGRyYCkgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBkZXN0aW5hdGlvbi4gVGhlIGBzaGRyLVx1MDAzZXNoX2FkZHJgIGlzIHRoZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9uLCBhbmQgdGhlIHNlY3Rpb24gc2l6ZSBpcyBzZXQuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gaXMgaG93IGBzaGRyLVx1MDAzZXNoX2FkZHJgIGlzICppbml0aWFsbHkqIHNldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCB2YWx1ZSBjb21lcyBmcm9tIGJlZm9yZSB3ZSByZWFjaCB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBoYXBwZW5zIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHNlY3Rpb24gYWRkcmVzc2VzIGFyZSBpbml0aWFsbHkgc2V0IHdpdGhpbiB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gSSdsbCBzZWFyY2ggZm9yIHVzZXMgb2YgdGhlIGBzZXR1cF9sb2FkX2luZm9gIGZ1bmN0aW9uIG9yIHRoZSBgbG9hZF9pbmZvYCBzdHJ1Y3R1cmUgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIGhvdyBgc2hkci1cdTAwM2VzaF9hZGRyYCBnZXRzIGl0cyBpbml0aWFsIHZhbHVlIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjMwOjE1Ljg4Nzc0NDc2NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1MTY2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbW9kdWxlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MTEzPXZvaWQgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTQxLVxcdC8qIEFwcGVuZCByb29tIGZvciBjb3JlIHN5bWJvbHMgYXQgZW5kIG9mIGNvcmUgcGFydC4gKi9cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MTQyOlxcdGluZm8tXFx1MDAzZXN5bW9mZnMgPSBBTElHTihtb2RfbWVtX2RhdGEtXFx1MDAzZXNpemUsIHN5bXNlY3QtXFx1MDAzZXNoX2FkZHJhbGlnbiA/OiAxKTtcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTQzLVxcdGluZm8tXFx1MDAzZXN0cm9mZnMgPSBtb2RfbWVtX2RhdGEtXFx1MDAzZXNpemUgPSBpbmZvLVxcdTAwM2VzeW1vZmZzICsgbmRzdCAqIHNpemVvZihFbGZfU3ltKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0xNzA9dm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE4My1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MTg0OlxcdGthbGxzeW1zLVxcdTAwM2VzeW10YWIgPSAodm9pZCAqKXN5bXNlYy1cXHUwMDNlc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTg1LVxcdGthbGxzeW1zLVxcdTAwM2VudW1fc3ltdGFiID0gc3ltc2VjLVxcdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pO1xcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0xODYtXFx0LyogTWFrZSBzdXJlIHdlIGdldCBwZXJtYW5lbnQgc3RydGFiOiBkb24ndCB1c2UgaW5mby1cXHUwMDNlc3RydGFiLiAqL1xcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzoxODc6XFx0a2FsbHN5bXMtXFx1MDAzZXN0cnRhYiA9ICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5zdHJdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE4OC1cXHRrYWxsc3ltcy1cXHUwMDNldHlwZXRhYiA9IGluaXRfZGF0YV9iYXNlICsgaW5mby1cXHUwMDNlaW5pdF90eXBlb2ZmcztcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0yMjU9dm9pZCBpbml0X2J1aWxkX2lkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0yMzItXFx0XFx0aWYgKCFzZWN0X2VtcHR5KHNlY2hkcikgXFx1MDAyNlxcdTAwMjYgc2VjaGRyLVxcdTAwM2VzaF90eXBlID09IFNIVF9OT1RFIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjIzMzpcXHRcXHQgICAgIWJ1aWxkX2lkX3BhcnNlX2J1Zigodm9pZCAqKXNlY2hkci1cXHUwMDNlc2hfYWRkciwgbW9kLVxcdTAwM2VidWlsZF9pZCxcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMjM0LVxcdFxcdFxcdFxcdFxcdHNlY2hkci1cXHUwMDNlc2hfc2l6ZSkpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jPTE4PWludCBjb3B5X21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy01My1cXHQgKiBGb3IgbGl2ZXBhdGNoIG1vZHVsZXMsIGNvcmVfa2FsbHN5bXMuc3ltdGFiIGlzIGEgY29tcGxldGVcXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jOjU0OlxcdCAqIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB0YWJsZS4gQWRqdXN0IHNoX2FkZHIgdG8gcG9pbnRcXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTU1LVxcdCAqIHRvIGNvcmVfa2FsbHN5bXMuc3ltdGFiIHNpbmNlIHRoZSBjb3B5IG9mIHRoZSBzeW10YWIgaW4gbW9kdWxlXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTU3LVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmM6NTg6XFx0bW9kLVxcdTAwM2VrbHBfaW5mby1cXHUwMDNlc2VjaGRyc1tzeW1uZHhdLnNoX2FkZHIgPSAodW5zaWduZWQgbG9uZyltb2QtXFx1MDAzZWNvcmVfa2FsbHN5bXMuc3ltdGFiO1xcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmMtNTktXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yODQ9c3RhdGljIHZvaWQgKnNlY3Rpb25fYWRkcihjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyICpuYW1lKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4NS17XFxua2VybmVsL21vZHVsZS9tYWluLmM6Mjg2OlxcdC8qIFNlY3Rpb24gMCBoYXMgc2hfYWRkciAwLiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4NzpcXHRyZXR1cm4gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2ZpbmRfc2VjKGluZm8sIG5hbWUpXS5zaF9hZGRyO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4OC19XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTE9c3RhdGljIHZvaWQgKnNlY3Rpb25fb2Jqcyhjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk3LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5ODpcXHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMCBhbmQgc2hfc2l6ZSAwLiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OS1cXHQqbnVtID0gaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDA6XFx0cmV0dXJuICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAxLX1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMyMD1zdGF0aWMgX19tYXliZV91bnVzZWQgdm9pZCAqYW55X3NlY3Rpb25fb2Jqcyhjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzI2LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMyNzpcXHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMCBhbmQgc2hfc2l6ZSAwLiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMyOC1cXHQqbnVtID0gaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMjk6XFx0cmV0dXJuICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzMwLX1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTQ1NT1zdGF0aWMgaW50IHBlcmNwdV9tb2RhbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy00NTctXFx0RWxmX1NoZHIgKnBjcHVzZWMgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5wY3B1XTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzo0NTg6XFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IHBjcHVzZWMtXFx1MDAzZXNoX2FkZHJhbGlnbjtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy00NTktXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMTM4PXN0YXRpYyBjaGFyICpnZXRfbmV4dF9tb2RpbmZvKGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnRhZyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDctXFx0ICogZ2V0X21vZGluZm8oKSBjYWxscyBtYWRlIGJlZm9yZSByZXdyaXRlX3NlY3Rpb25faGVhZGVycygpXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTE0ODpcXHQgKiBtdXN0IHVzZSBzaF9vZmZzZXQsIGFzIHNoX2FkZHIgaXNuJ3Qgc2V0IVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDktXFx0ICovXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNTI5PXN0YXRpYyBpbnQgc2ltcGxpZnlfc3ltYm9scyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTMxLVxcdEVsZl9TaGRyICpzeW1zZWMgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5zeW1dO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE1MzI6XFx0RWxmX1N5bSAqc3ltID0gKHZvaWQgKilzeW1zZWMtXFx1MDAzZXNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMTUzMy1cXHR1bnNpZ25lZCBsb25nIHNlY2Jhc2U7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTk3LVxcdFxcdFxcdGVsc2VcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxNTk4OlxcdFxcdFxcdFxcdHNlY2Jhc2UgPSBpbmZvLVxcdTAwM2VzZWNoZHJzW3N5bVtpXS5zdF9zaG5keF0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTk5LVxcdFxcdFxcdHN5bVtpXS5zdF92YWx1ZSArPSBzZWNiYXNlO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MTY1MD1sb25nIG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE2NTYtXFx0bW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSArPSBhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBzZWN0aW9uKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxNjU3OlxcdG9mZnNldCA9IEFMSUdOKG1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUsIHNlY2hkci1cXHUwMDNlc2hfYWRkcmFsaWduID86IDEpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE2NTgtXFx0bW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IG9mZnNldCArIHNlY2hkci1cXHUwMDNlc2hfc2l6ZTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTE5MTU9c3RhdGljIGludCBlbGZfdmFsaWRpdHlfY2FjaGVfc2VjaGRycyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTk1MC1cXHQgICAgfHwgc2VjaGRyc1swXS5zaF9zaXplICE9IDBcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxOTUxOlxcdCAgICB8fCBzZWNoZHJzWzBdLnNoX2FkZHIgIT0gMCkge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE5NTItXFx0XFx0cHJfZXJyKFxcXCJFTEYgU3BlYyB2aW9sYXRpb246IHNlY3Rpb24gMCB0eXBlKCVkKSE9U0hfTlVMTCBvciBub24temVybyBsZW4gb3IgYWRkclxcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI1MTY9c3RhdGljIGludCByZXdyaXRlX3NlY3Rpb25faGVhZGVycyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNTIwLVxcdC8qIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlLCBidXQgbGV0J3MgYmUgc3VyZS4gKi9cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNTIxOlxcdGluZm8tXFx1MDAzZXNlY2hkcnNbMF0uc2hfYWRkciA9IDA7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyMi1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjYtXFx0XFx0LypcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNTI3OlxcdFxcdCAqIE1hcmsgYWxsIHNlY3Rpb25zIHNoX2FkZHIgd2l0aCB0aGVpciBhZGRyZXNzIGluIHRoZVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjgtXFx0XFx0ICogdGVtcG9yYXJ5IGltYWdlLlxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjktXFx0XFx0ICovXFxua2VybmVsL21vZHVsZS9tYWluLmM6MjUzMDpcXHRcXHRzaGRyLVxcdTAwM2VzaF9hZGRyID0gKHNpemVfdClpbmZvLVxcdTAwM2VoZHIgKyBzaGRyLVxcdTAwM2VzaF9vZmZzZXQ7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjUzMS1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI3NzM9c3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODE1LVxcdFxcdFxcdH1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODE2OlxcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MTctXFx0XFx0fVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyMy1cXHRcXHQgKi9cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODI0OlxcdFxcdHNoZHItXFx1MDAzZXNoX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXN0O1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4MjU6XFx0XFx0cHJfZGVidWcoXFxcIlxcXFx0MHglbHggMHglLjhseCAlc1xcXFxuXFxcIiwgKGxvbmcpc2hkci1cXHUwMDNlc2hfYWRkcixcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODI2LVxcdFxcdFxcdCAobG9uZylzaGRyLVxcdTAwM2VzaF9zaXplLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzICsgc2hkci1cXHUwMDNlc2hfbmFtZSk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTEyPXN0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyMi1cXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihpbmZvLVxcdTAwM2Vtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjM6XFx0XFx0XFx0XFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKGluZm8tXFx1MDAzZW1vZCwgaSksIHNoZHItXFx1MDAzZXNoX2FkZHJhbGlnbik7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyNC1cXHRcXHRpZiAoV0FSTl9PTighZGVzdCkpIHtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzYtXFx0XFx0aWYgKHNoZHItXFx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUylcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTM3OlxcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5Mzg6XFx0XFx0c2hkci1cXHUwMDNlc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkzOS1cXHRcXHRzaGRyLVxcdTAwM2VzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0NT1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTkzLVxcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5OTQ6XFx0bW9kID0gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTk1LVxcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDE4PXN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMjMtXFx0LyogQ29weSByZWxvY2F0ZWQgcGVyY3B1IGFyZWEgb3Zlci4gKi9cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDI0OlxcdHBlcmNwdV9tb2Rjb3B5KG1vZCwgKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4LnBjcHVdLnNoX2FkZHIsXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyNS1cXHRcXHQgICAgICAgaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5wY3B1XS5zaF9zaXplKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYz02NT1zdGF0aWMgaW50IGFkZF9zZWN0X2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYy0xMDQtXFx0XFx0c2F0dHItXFx1MDAzZXJlYWQgPSBtb2R1bGVfc2VjdF9yZWFkO1xcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYzoxMDU6XFx0XFx0c2F0dHItXFx1MDAzZXByaXZhdGUgPSAodm9pZCAqKXNlYy1cXHUwMDNlc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMTA2LVxcdFxcdHNhdHRyLVxcdTAwM2VzaXplID0gTU9EVUxFX1NFQ1RfUkVBRF9TSVpFO1xcbi0tXFxua2VybmVsL21vZHVsZS9zeXNmcy5jPTE1MT1zdGF0aWMgaW50IGFkZF9ub3Rlc19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMTkwLVxcdFxcdFxcdG5hdHRyLVxcdTAwM2VzaXplID0gaW5mby1cXHUwMDNlc2VjaGRyc1tpXS5zaF9zaXplO1xcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYzoxOTE6XFx0XFx0XFx0bmF0dHItXFx1MDAzZXByaXZhdGUgPSAodm9pZCAqKWluZm8tXFx1MDAzZXNlY2hkcnNbaV0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMTkyLVxcdFxcdFxcdG5hdHRyLVxcdTAwM2VyZWFkID0gc3lzZnNfYmluX2F0dHJfc2ltcGxlX3JlYWQ7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYz0xMz1pbnQgY2hlY2tfdmVyc2lvbihjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtNDctXFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmM6NDg6XFx0dmVyc2lvbnMgPSAodm9pZCAqKXNlY2hkcnNbdmVyc2luZGV4XS5zaF9hZGRyO1xcbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jLTQ5LVxcdG51bV92ZXJzaW9ucyA9IHNlY2hkcnNbdmVyc2luZGV4XS5zaF9zaXplXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYz0xMDc9dm9pZCBtb2R2ZXJzaW9uX2V4dF9zdGFydChjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtMTIyLVxcbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jOjEyMzpcXHRzdGFydC1cXHUwMDNlY3JjID0gKGNvbnN0IHUzMiAqKXNlY2hkcnNbY3JjX2lkeF0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYzoxMjQ6XFx0c3RhcnQtXFx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXNlY2hkcnNbbmFtZV9pZHhdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtMTI1LVxcdHN0YXJ0LVxcdTAwM2VyZW1haW5pbmcgPSBzZWNoZHJzW2NyY19pZHhdLnNoX3NpemUgLyBzaXplb2YoKnN0YXJ0LVxcdTAwM2VjcmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDozMDoxNS45NjMyNjcxODNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMDkyNzM5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTW9kdWxlIExvYWRpbmcgYW5kIEtNU0FOIERldGVybWluYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBjZW50ZXJzIG9uIGhvdyB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHNlY3Rpb25zIGRlc2lnbmF0ZWQgYXMgXCJzdGFuZGFsb25lLFwiIHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZSB0YWcgc2VjdGlvbnMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBhbmQgcmVsYXRlcyB0byB0aGUgRUxGIHNlY3Rpb24gbGF5b3V0IGFuZCBhbGxvY2F0aW9uLiBUaGUgaW50ZW50aW9uIGlzIHRvIGhhbmRsZSB0aGVzZSBzdGFuZGFsb25lIHNlY3Rpb25zIHNlcGFyYXRlbHksIHBvdGVudGlhbGx5IGFsbG9jYXRpbmcgdGhlbSBpbnRvIGRlZGljYXRlZCBtZW1vcnkgcmVnaW9ucyByYXRoZXIgdGhhbiBwbGFjaW5nIHRoZW0gd2l0aGluIHRoZSBtYWluIG1vZHVsZSBtZW1vcnkgYXJlYS4gVGhpcyBpbnZvbHZlcyBhbiBpbnRlcmVzdGluZyBkYW5jZSB3aXRoIGBzaF9lbnRzaXplYCBiZWluZyBzZXQgdG8gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgYW5kIHRoZW4gdGhlIHN1YnNlcXVlbnQgc3RlcHMgYmFzZWQgb24gdGhhdCBzZXR0aW5nLlxuXG5UaGUgcHJvY2VzcyBraWNrcyBvZmYgd2l0aCBgcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnNgIHdoaWNoLCBhcyBleHBlY3RlZCwgc2V0cyBgc2hfYWRkcmAgYmFzZWQgb24gdGhlIHNlY3Rpb24ncyBvZmZzZXQgaW50byB0aGUgaW5pdGlhbCBtb2R1bGUgaW1hZ2UuIFRoZW4sIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCBpcyBjYWxsZWQuIEhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgbG9naWMgaW4gYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSB1c2luZyBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAuIElmIHN1Y2Nlc3NmdWwsIHRoZSBkYXRhIGlzIGNvcGllZCB1c2luZyBgbWVtY3B5YC4gQ3J1Y2lhbGx5LCBpZiB0aGlzIGFsbG9jYXRpb24gZmFpbHMgKHJldHVybmluZyBgLUVBR0FJTmApLCB0aGUgc2VjdGlvbiBpcyAqbm90KiBtYXJrZWQgYXMgc3RhbmRhbG9uZSwgd2hpY2ggbWVhbnMgYGxheW91dF9zZWN0aW9uc2Agd2lsbCBsYXkgaXQgb3V0IGluIHRoZSBub3JtYWwgbW9kdWxlIG1lbW9yeS4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCB0byBjaGVjay4gYGxheW91dF9zZWN0aW9uc2Agc3Vic2VxdWVudGx5IHNraXBzIHN0YW5kYWxvbmUgc2VjdGlvbnMsIG1lYW5pbmcgdGhvc2UgYXJlICpub3QqIGhhbmRsZWQgYnkgdGhlIGdlbmVyYWwgbGF5b3V0IGxvZ2ljLiBBZnRlciBzZWN0aW9uIGxheW91dCBpcyBkb25lLCBgbW92ZV9tb2R1bGVgIGlzIGNhbGxlZCwgYW5kLCBhZ2Fpbiwgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgc2tpcHBlZC4gVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBsYWlkIG91dCBpbiB0aGUgbm9ybWFsIG1vZHVsZSBtZW1vcnkgYXJlIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBFTEYgYnVmZmVyLlxuXG5NeSBtaW5kIHRoZW4gc2hpZnRzIHRvIGBhcHBseV9yZWxvY2F0aW9ucygpYC4gVGhlIGhpc3RvcmljYWwgaGFuZGxpbmcgb2YgdGhlIGBwY3B1YCBzZWN0aW9uIGlzIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbW9zdCBldmlkZW50LiBCZWZvcmUsIHRoZSBgcGNwdWAgc2VjdGlvbiB3YXMgc3BlY2lhbCwgYW5kIGl0cyBgU0hGX0FMTE9DYCBmbGFnIHdhcyBzdHJpcHBlZCwgd2hpY2ggaXMgd2h5IGl0IHdhcyBoYW5kbGVkIGluIGEgZGlmZmVyZW50IG1hbm5lciB3aXRoIHJlbG9jYXRpb25zIGFwcGxpZWQgdG8gdGhlIGluaXRpYWwgRUxGIHRlbXBsYXRlIGFuZCB0aGVuIGNvcGllZC4gVGhpcyBwYXRjaCwgaG93ZXZlciwgbWFpbnRhaW5zIHRoZSBgU0hGX0FMTE9DYCBmbGFnIGZvciB0aGUgYHBjcHVgIHNlY3Rpb24sIGJ1dCBpdCBpcyB0cmVhdGVkIGxpa2UgYW55IG90aGVyIHN0YW5kYWxvbmUgc2VjdGlvbi4gVGhlIGBzaF9lbnRzaXplYCBiZWluZyBzZXQgdG8gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgZWZmZWN0aXZlbHkgZmxhZ3MgaXQgZm9yIHNlcGFyYXRlIGhhbmRsaW5nIGFuZCBpcyB0aGVuIHByb3Blcmx5IHJlbG9jYXRlZC5cblxuVGhlIGFuYWx5c2lzIG9mIHRoZSBgYWxsb2NfdGFnLmNgIGNoYW5nZXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGV5IGludm9sdmUgZXJyb3IgaGFuZGxpbmcgaW4gdGFnIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgZmFpbHVyZXMgaW4gYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGFuZCBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGVgLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBBZnRlciBhIGRldGFpbGVkIHJldmlldywgdGhlIGluaXRpYWwgRUxGIG1vZHVsZSBpbWFnZSAoYGluZm8tXHUwMDNlaGRyICsgc2hkci1cdTAwM2VzaF9vZmZzZXRgKSBpcyBhbHdheXMgdmFsaWQgbWVtb3J5LiBTZWN0aW9uIGRhdGEgaXMgY29waWVkIHVzaW5nIGBtZW1jcHlgIGZyb20gaW5pdGlhbGl6ZWQgRUxGIGltYWdlIG1lbW9yeSwgYW5kIG5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIHByZXNlbnQuIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgdGhlIHN0cnVjdHVyZXMgYXJlIGFsd2F5cyBwcm9wZXJseSBpbml0aWFsaXplZC4gSW4gc2hvcnQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyByZWFkLCB3cml0dGVuLCBvciBjb3BpZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gQW55IG1lbW9yeSBlcnJvcnMgdGhhdCBhcmlzZSBoZXJlIChvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgbWVtb3J5IGxlYWtzLCBldGMuKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbkdpdmVuIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIGFuZCBiYXNlZCBvbiB0aGUgS01TQU4gY3JpdGVyaWEsIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBuZWVkaW5nIEtNU0FOLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aGUgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwtdG8tdXNlciBzcGFjZSBkYXRhIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyByZWFsbHkgYm9pbHMgZG93biB0bzogdGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyBtb2R1bGUgbG9hZGluZy4gSXQgY2hhbmdlcyBob3cgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgaGFuZGxlZCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgbG9hZGVkIEVMRiBtb2R1bGUgaW1hZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgc3RhbmRhcmQgbWVtb3J5IGlzc3Vlcywgd2hpY2ggd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg0LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MjYuMTcyNTQ0MjQ2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXFxuXFxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBzZWN0aW9uIGxheW91dHMsIHJlbG9jYXRpb25zLCBvciBzZXBhcmF0ZSBtZW1vcnkgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBzZWN0aW9uIHJlYWRzL3dyaXRlcywgYnVmZmVyIG92ZXJmbG93cywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIGFkZHJlc3NhYmxlIGVycm9ycyB0aGF0IGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXFxuXFxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBzZWN0aW9uIGxheW91dHMsIHJlbG9jYXRpb25zLCBvciBzZXBhcmF0ZSBtZW1vcnkgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBzZWN0aW9uIHJlYWRzL3dyaXRlcywgYnVmZmVyIG92ZXJmbG93cywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIGFkZHJlc3NhYmxlIGVycm9ycyB0aGF0IGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfl745[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 00:27:27 +0000 UTC FinishedAt: 2026-09-03 00:30:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "MEM_ALLOC_PROFILING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "178b3d97bf1f15f598ea7cc615a40c115e528e1c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "MEM_ALLOC_PROFILING" ], "series_id": "c0c5c9c5-01b2-486c-9d19-1d457ba28bce" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "init_module", "finit_module", "codetag_alloc_module_section", "codetag_free_module_sections" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luaXRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2Zpbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXG5cbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIHNlY3Rpb24gbGF5b3V0cywgcmVsb2NhdGlvbnMsIG9yIHNlcGFyYXRlIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHNlY3Rpb24gcmVhZHMvd3JpdGVzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhcmUgYWRkcmVzc2FibGUgZXJyb3JzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDlkNzExNGY4OWYyYWY3OGZlYWQzOTc2MGUzY2VmYmNhMjExYTI0OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjI5OjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG5pbmRleCA5NmNjOTg1NjhlZWE1Li4wYzZmMzJkZGNiZjJkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuQEAgLTMyNSw2ICYjNDM7MzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xuIFx0TU9EX0lOSVRfUk9EQVRBLFxuIFxuIFx0TU9EX01FTV9OVU1fVFlQRVMsXG4mIzQzO1xuJiM0MztcdE1PRF9TVEFOREFMT05FID0gLTIsXG4gXHRNT0RfSU5WQUxJRCA9IC0xLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oIGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG5pbmRleCAwNjExNjFjYzc5ZDkwLi40YzczODA3NGEyN2I4IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmhcbkBAIC0yOSw2ICYjNDM7MjksMTQgQEBcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXHQoKDFVTCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcbiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0tcdCgoMVVMIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBNYXJrZXIgZm9yIHNlY3Rpb25zIHdpdGggYSBzZXBhcmF0ZSBhbGxvY2F0aW9uLCB3aGljaCBhcmUgbm90IHBsYWNlZFxuJiM0MzsgKiBpbnRvIG1vZC1cdTAwM2VtZW1bXS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgU0hfRU5UU0laRV9TVEFOREFMT05FXHRcdFx0XHRcdFxcXG4mIzQzO1x0KCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSBcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXHRcXFxuJiM0MztcdCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUKVxuJiM0MztcbiAvKiBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gYnkgbW9kdWxlX2ZsYWdzKCkgKi9cbiAjZGVmaW5lIE1PRFVMRV9GTEFHU19CVUZfU0laRSAoVEFJTlRfRkxBR1NfQ09VTlQgJiM0MzsgNClcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTYxNywxNCAmIzQzOzE2MTcsOCBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbG9jYXRpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiBcdFx0aWYgKGluZm9zZWMgXHUwMDNlPSBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKlxuLVx0XHQgKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy5cbi1cdFx0ICogQW4gZXhjZXB0aW9uIGlzIHRoZSBwZXJjcHUgc2VjdGlvbiwgd2hpY2ggaGFzIHNlcGFyYXRlIGFsbG9jYXRpb25zXG4tXHRcdCAqIGZvciBpbmRpdmlkdWFsIENQVXMuIFdlIHJlbG9jYXRlIHRoZSBwZXJjcHUgc2VjdGlvbiBpbiB0aGUgaW5pdGlhbFxuLVx0XHQgKiBFTEYgdGVtcGxhdGUgYW5kIHN1YnNlcXVlbnRseSBjb3B5IGl0IHRvIHRoZSBwZXItQ1BVIGRlc3RpbmF0aW9ucy5cbi1cdFx0ICovXG4tXHRcdGlmICghKGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvc2VjXS5zaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICghaW5mb3NlYyB8fCBpbmZvc2VjICE9IGluZm8tXHUwMDNlaW5kZXgucGNwdSkpXG4mIzQzO1x0XHQvKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy4gKi9cbiYjNDM7XHRcdGlmICghKGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvc2VjXS5zaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9mbGFncyBcdTAwMjYgU0hGX1JFTEFfTElWRVBBVENIKVxuQEAgLTE3MTUsMjcgJiM0MzsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gXG4gXHRcdFx0aWYgKChzLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF1cbiBcdFx0XHQgICAgfHwgKHMtXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IG1hc2tzW21dWzFdKVxuLVx0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxuJiM0MztcdFx0XHQgICAgfHwgcy1cdTAwM2VzaF9lbnRzaXplICE9IH4wVUwgLyogb2Zmc2V0IG9yIHN0YW5kYWxvbmUgKi9cbiBcdFx0XHQgICAgfHwgaXNfaW5pdCAhPSBtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzbmFtZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHR5cGUgPT0gTU9EX0lOVkFMSUQpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBEbyBub3QgYWxsb2NhdGUgY29kZXRhZyBtZW1vcnkgYXMgd2UgbG9hZCBpdCBpbnRvXG4tXHRcdFx0ICogcHJlYWxsb2NhdGVkIGNvbnRpZ3VvdXMgbWVtb3J5LlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHMtXHUwMDNlc2hfc2l6ZSkpIHtcbi1cdFx0XHRcdC8qXG4tXHRcdFx0XHQgKiBzLVx1MDAzZXNoX2VudHNpemUgd29uJiMzOTt0IGJlIHVzZWQgYnV0IHBvcHVsYXRlIHRoZVxuLVx0XHRcdFx0ICogdHlwZSBmaWVsZCB0byBhdm9pZCBjb25mdXNpb24uXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHMtXHUwMDNlc2hfZW50c2l6ZSA9ICgodW5zaWduZWQgbG9uZykodHlwZSkgXHUwMDI2IFNIX0VOVFNJWkVfVFlQRV9NQVNLKVxuLVx0XHRcdFx0XHRcdFx1MDAzY1x1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4tXG4gXHRcdFx0cy1cdTAwM2VzaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCB0eXBlLCBzLCBpKTtcbiBcdFx0XHRwcl9kZWJ1ZyhcJiMzNDtcXHQlc1xcblwmIzM0Oywgc25hbWUpO1xuIFx0XHR9XG5AQCAtMTc0NSwxNiAmIzQzOzE3MjUsMTAgQEAgc3RhdGljIHZvaWQgX19sYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBib29sIGlcbiAvKlxuICAqIExheSBvdXQgdGhlIFNIRl9BTExPQyBzZWN0aW9ucyBpbiBhIHdheSBub3QgZGlzc2ltaWxhciB0byBob3cgbGRcbiAgKiBtaWdodCAtLSBjb2RlLCByZWFkLW9ubHkgZGF0YSwgcmVhZC13cml0ZSBkYXRhLCBzbWFsbCBkYXRhLiAgVGFsbHlcbi0gKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHM6IGhpZ2ggYml0IG1lYW5zIGl0XG4tICogYmVsb25ncyBpbiBpbml0LlxuJiM0MzsgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXG4gICovXG4gc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkmIzQzOyYjNDM7KVxuLVx0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XG4tXG4gXHRwcl9kZWJ1ZyhcJiMzNDtDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XFxuXCYjMzQ7LCBtb2QtXHUwMDNlbmFtZSk7XG4gXHRfX2xheW91dF9zZWN0aW9ucyhtb2QsIGluZm8sIGZhbHNlKTtcbiBcbkBAIC0yODAwLDcgJiM0MzsyNzc0LDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4ge1xuIFx0aW50IGksIHJldDtcbiBcdGVudW0gbW9kX21lbV90eXBlIHQgPSBNT0RfTUVNX05VTV9UWVBFUztcbi1cdGJvb2wgY29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkge1xuIFx0XHRpZiAoIW1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSkge1xuQEAgLTI4MjAsMzQgJiM0MzsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dm9pZCAqZGVzdDtcbiBcdFx0RWxmX1NoZHIgKnNoZHIgPSBcdTAwMjZpbmZvLVx1MDAzZXNlY2hkcnNbaV07XG4tXHRcdGNvbnN0IGNoYXIgKnNuYW1lO1xuIFxuLVx0XHRpZiAoIShzaGRyLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBTSEZfQUxMT0MpKVxuJiM0MztcdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKVxuJiM0MztcdFx0ICAgIHx8IHNoZHItXHUwMDNlc2hfZW50c2l6ZSA9PSBTSF9FTlRTSVpFX1NUQU5EQUxPTkUpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHNuYW1lID0gaW5mby1cdTAwM2VzZWNzdHJpbmdzICYjNDM7IHNoZHItXHUwMDNlc2hfbmFtZTtcbi1cdFx0Lypcbi1cdFx0ICogTG9hZCBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkgYXMgdGhleSBtaWdodCBzdGlsbCBiZSB1c2VkXG4tXHRcdCAqIGFmdGVyIG1vZHVsZSB1bmxvYWQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLVx1MDAzZXNoX3NpemUpKSB7XG4tXHRcdFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuLVx0XHRcdFx0XHRhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuLVx0XHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuLVx0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbi1cdFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0XHR9XG4tXHRcdFx0aWYgKElTX0VSUihkZXN0KSkge1xuLVx0XHRcdFx0cmV0ID0gUFRSX0VSUihkZXN0KTtcbi1cdFx0XHRcdGdvdG8gb3V0X2Vycjtcbi1cdFx0XHR9XG4tXHRcdFx0Y29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRlbnVtIG1vZF9tZW1fdHlwZSB0eXBlID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XG4tXHRcdFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLVx1MDAzZXNoX2VudHNpemUgXHUwMDI2IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0s7XG4tXG4tXHRcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bdHlwZV0uYmFzZSAmIzQzOyBvZmZzZXQ7XG4tXHRcdH1cbiYjNDM7XHRcdGRlc3QgPSBtb2QtXHUwMDNlbWVtW3NoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwM2VcdTAwM2UgU0hfRU5UU0laRV9UWVBFX1NISUZUXS5iYXNlICYjNDM7XG4mIzQzO1x0XHQgICAgICAgKHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7XG4gXG4gXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xuIFx0XHRcdC8qXG5AQCAtMjg3OSw4ICYjNDM7MjgzMSw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0bW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpO1xuIFx0d2hpbGUgKHQtLSlcbiBcdFx0bW9kdWxlX21lbW9yeV9mcmVlKG1vZCwgdCk7XG4tXHRpZiAoY29kZXRhZ19zZWN0aW9uX2ZvdW5kKVxuLVx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKG1vZCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0yOTUxLDkgJiM0MzsyOTAxLDUxIEBAIHN0YXRpYyBib29sIGJsYWNrbGlzdGVkKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKVxuIH1cbiBjb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTtcbiBcbiYjNDM7LypcbiYjNDM7ICogQWxsb2NhdGUgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5LiBUaGV5IGFyZSBsb2FkZWQgaW50byBwcmVhbGxvY2F0ZWRcbiYjNDM7ICogY29udGlndW91cyBtZW1vcnkgYmVjYXVzZSB0aGV5IG1heSBzdGlsbCBiZSB1c2VkIGFmdGVyIHRoZSBtb2R1bGUgaXNcbiYjNDM7ICogdW5sb2FkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoZSBzZXBhcmF0ZSBhbGxvY2F0aW9uIG92ZXJmbG93cywgYWxsb2NhdGUgdGhlIHNlY3Rpb24gbm9ybWFsbHlcbiYjNDM7ICogc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBzdGlsbCBiZSBsb2FkZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0RWxmX1NoZHIgKnNoZHIgPSBcdTAwMjZpbmZvLVx1MDAzZXNlY2hkcnNbaV07XG4mIzQzO1x0XHRjb25zdCBjaGFyICpzbmFtZSA9IGluZm8tXHUwMDNlc2Vjc3RyaW5ncyAmIzQzOyBzaGRyLVx1MDAzZXNoX25hbWU7XG4mIzQzO1x0XHR2b2lkICpkZXN0O1xuJiM0MztcbiYjNDM7XHRcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVx1MDAzZW1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuJiM0MztcdFx0XHRcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVx1MDAzZW1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbiYjNDM7XHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuJiM0MztcdFx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZGVzdCA9PSBFUlJfUFRSKC1FQUdBSU4pKVxuJiM0MztcdFx0XHQvKiBBbGxvY2F0ZSB0aGUgc2VjdGlvbiBhcyBhIHJlZ3VsYXIgc2VjdGlvbi4gKi9cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGRlc3QpKSB7XG4mIzQzO1x0XHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cdTAwM2Vtb2QpO1xuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihkZXN0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2hkci1cdTAwM2VzaF90eXBlICE9IFNIVF9OT0JJVFMpXG4mIzQzO1x0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbiYjNDM7XHRcdHNoZHItXHUwMDNlc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7XG4mIzQzO1x0XHRzaGRyLVx1MDAzZXNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXG4ge1xuIFx0c3RydWN0IG1vZHVsZSAqbW9kO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi9cbkBAIC0yOTY3LDggJiM0MzsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXG4mIzQzO1x0LyogUmVwdXJwb3NlIHNoX2VudHNpemUgdG8gdHJhY2sgd2hlcmUgZWFjaCBzZWN0aW9uIGlzIGFsbG9jYXRlZC4gKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtcbiYjNDM7XG4gXHQvKiBXZSB3aWxsIGRvIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciBwZXItY3B1IHNlY3Rpb25zIGxhdGVyLiAqL1xuLVx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWluZGV4LnBjcHUpXG4mIzQzO1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5wY3B1XS5zaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xuIFxuIFx0LypcbiBcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXG5AQCAtMjk3NywxOCAmIzQzOzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbi1cdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueVxuLVx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXG4tXHQgKi9cbiYjNDM7XHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xuJiM0MztcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1xuJiM0MztcdC8qIERldGVybWluZSB0b3RhbCBzaXplcyBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gKi9cbiBcdGxheW91dF9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4gXHRsYXlvdXRfc3ltdGFiKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcbiBcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xuIFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuLVx0aWYgKGVycilcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiYjNDM7XHR9XG4gXG4gXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cbiBcdG1vZCA9ICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgubW9kXS5zaF9hZGRyO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGYzMGVmOGRkMjRjNzAuLjhmMTMzNjliMzJlY2QgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC04NDMsNiAmIzQzOzg0Myw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4mIzQzO3tcbiYjNDM7XHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbiYjNDM7XHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4mIzQzO1x0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbiYjNDM7XHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4mIzQzO1xuJiM0MztcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO1x0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbiYjNDM7XHRcdGlmICh2YWwgPT0gbW9kKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXVzZWQpXG4mIzQzO1x0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbiYjNDM7XG4mIzQzO1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpO1xuJiM0MztcdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTtcbiYjNDM7XHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4mIzQzO1xuJiM0MztcdFx0Zm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyBcdTAwM2M9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbiYjNDM7XHRcdFx0cHJfaW5mbyhcJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuJiM0MztcdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHVzZWQgPSBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO3JlbGVhc2VfYXJlYTpcbiYjNDM7XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4mIzQzO1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbiYjNDM7XHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuJiM0MztcdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4mIzQzO291dDpcbiYjNDM7XHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkxMiwxMCAmIzQzOzk1OCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdFx0aW50IGdyb3dfcmVzO1xuIFxuIFx0XHRtb2R1bGVfdGFncy5zaXplID0gb2Zmc2V0ICYjNDM7IHNpemU7XG4tXHRcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xuJiM0MztcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuLVx0XHRcdFx0bW9kLVx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcbiYjNDM7XHRcdFx0cHJfd2Fybl9vbmNlKFwmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4mIzQzO1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4mIzQzO1x0XHRcdHJldHVybiBFUlJfUFRSKC1FQUdBSU4pO1xuIFx0XHR9XG4gXG4gXHRcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcbkBAIC05MjMsNiAmIzQzOzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gXHRcdFx0cHJfZXJyKFwmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuIFx0XHRcdCAgICAgICBtb2QtXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTMwLDUyICYjNDM7OTc5LDYgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBvZmZzZXQpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxuLXtcbi1cdE1BX1NUQVRFKG1hcywgXHUwMDI2bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpO1xuLVx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xuLVx0c3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZztcbi1cdHN0cnVjdCBtb2R1bGUgKnZhbDtcbi1cbi1cdG1hc19sb2NrKFx1MDAyNm1hcyk7XG4tXHRtYXNfZm9yX2VhY2hfcmV2KFx1MDAyNm1hcywgdmFsLCAwKVxuLVx0XHRpZiAodmFsID09IG1vZClcbi1cdFx0XHRicmVhaztcbi1cbi1cdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXG4tXHRcdGdvdG8gb3V0O1xuLVxuLVx0aWYgKCF1c2VkKVxuLVx0XHRnb3RvIHJlbGVhc2VfYXJlYTtcbi1cbi1cdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTtcbi1cdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbi1cdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuLVxuLVx0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnJiM0MzsmIzQzOykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cJiMzNDssXG4tXHRcdFx0XHR0YWctXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cdTAwM2VjdC5saW5lbm8sIHRhZy1cdTAwM2VjdC5tb2RuYW1lLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0dXNlZCA9IGZhbHNlO1xuLVx0fVxuLXJlbGVhc2VfYXJlYTpcbi1cdG1hc19zdG9yZShcdTAwMjZtYXMsIHVzZWQgPyBcdTAwMjZ1bmxvYWRlZF9tb2QgOiBOVUxMKTtcbi1cdHZhbCA9IG1hc19wcmV2X3JhbmdlKFx1MDAyNm1hcywgMCk7XG4tXHRpZiAodmFsID09IFx1MDAyNnByZXBlbmRfbW9kKVxuLVx0XHRtYXNfc3RvcmUoXHUwMDI2bWFzLCBOVUxMKTtcbi1vdXQ6XG4tXHRtYXNfdW5sb2NrKFx1MDAyNm1hcyk7XG4tfVxuLVxuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnICpzdG9wKVxuIHtcbiBcdC8qIEFsbG9jYXRlIG1vZHVsZSBhbGxvY190YWcgcGVyY3B1IGNvdW50ZXJzICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9EVUxFUyYjMzQ7LAogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7ZmluaXRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24mIzM0OywKICAgICYjMzQ7Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjaGFuZ2VzIGNvcmUga2VybmVsIG1vZHVsZSBsb2FkaW5nIGFuZCBsYXlvdXQgbG9naWMgZm9yIHN0YW5kYWxvbmUgc2VjdGlvbnMgKHBlci1DUFUgc2VjdGlvbnMgYW5kIGNvZGV0YWdzL2FsbG9jIHRhZ3MpIGFzIHdlbGwgYXMgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIHRhZyByZXNlcnZhdGlvbiBmYWxsYmFjayBoYW5kbGluZyB3aGVuIHRhZ3MgYXJlIG5vdCBhZGRyZXNzYWJsZS4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIHZpYSBtb2R1bGUgbG9hZGluZyBzeXNjYWxscyAoaW5pdF9tb2R1bGUgYW5kIGZpbml0X21vZHVsZSkgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMDA6Mjk6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCA5NmNjOTg1NjhlZWE1Li4wYzZmMzJkZGNiZjJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTMyNSw2ICYjNDM7MzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUgewogCU1PRF9JTklUX1JPREFUQSwKIAogCU1PRF9NRU1fTlVNX1RZUEVTLAomIzQzOwomIzQzOwlNT0RfU1RBTkRBTE9ORSA9IC0yLAogCU1PRF9JTlZBTElEID0gLTEsCiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmggYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgKaW5kZXggMDYxMTYxY2M3OWQ5MC4uNGM3MzgwNzRhMjdiOCAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaApAQCAtMjksNiAmIzQzOzI5LDE0IEBACiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLCSgoMVVMICZsdDsmbHQ7IFNIX0VOVFNJWkVfVFlQRV9CSVRTKSAtIDEpCiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0sJKCgxVUwgJmx0OyZsdDsgKEJJVFNfUEVSX0xPTkcgLSBTSF9FTlRTSVpFX1RZUEVfQklUUykpIC0gMSkKIAomIzQzOy8qCiYjNDM7ICogTWFya2VyIGZvciBzZWN0aW9ucyB3aXRoIGEgc2VwYXJhdGUgYWxsb2NhdGlvbiwgd2hpY2ggYXJlIG5vdCBwbGFjZWQKJiM0MzsgKiBpbnRvIG1vZC0mZ3Q7bWVtW10uCiYjNDM7ICovCiYjNDM7I2RlZmluZSBTSF9FTlRTSVpFX1NUQU5EQUxPTkUJCQkJCVwKJiM0MzsJKCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSAmYW1wOyBTSF9FTlRTSVpFX1RZUEVfTUFTSykJXAomIzQzOwkgJmx0OyZsdDsgU0hfRU5UU0laRV9UWVBFX1NISUZUKQomIzQzOwogLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovCiAjZGVmaW5lIE1PRFVMRV9GTEFHU19CVUZfU0laRSAoVEFJTlRfRkxBR1NfQ09VTlQgJiM0MzsgNCkKIApkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uYwppbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbW9kdWxlL21haW4uYwpAQCAtMTYxNywxNCAmIzQzOzE2MTcsOCBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbG9jYXRpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIAkJaWYgKGluZm9zZWMgJmd0Oz0gaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogRG9uJiMzOTt0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuCi0JCSAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9ucwotCQkgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWwKLQkJICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuCi0JCSAqLwotCQlpZiAoIShpbmZvLSZndDtzZWNoZHJzW2luZm9zZWNdLnNoX2ZsYWdzICZhbXA7IFNIRl9BTExPQykgJmFtcDsmYW1wOwotCQkgICAgKCFpbmZvc2VjIHx8IGluZm9zZWMgIT0gaW5mby0mZ3Q7aW5kZXgucGNwdSkpCiYjNDM7CQkvKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy4gKi8KJiM0MzsJCWlmICghKGluZm8tJmd0O3NlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChpbmZvLSZndDtzZWNoZHJzW2ldLnNoX2ZsYWdzICZhbXA7IFNIRl9SRUxBX0xJVkVQQVRDSCkKQEAgLTE3MTUsMjcgJiM0MzsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpCiAKIAkJCWlmICgocy0mZ3Q7c2hfZmxhZ3MgJmFtcDsgbWFza3NbbV1bMF0pICE9IG1hc2tzW21dWzBdCiAJCQkgICAgfHwgKHMtJmd0O3NoX2ZsYWdzICZhbXA7IG1hc2tzW21dWzFdKQotCQkJICAgIHx8IHMtJmd0O3NoX2VudHNpemUgIT0gfjBVTAomIzQzOwkJCSAgICB8fCBzLSZndDtzaF9lbnRzaXplICE9IH4wVUwgLyogb2Zmc2V0IG9yIHN0YW5kYWxvbmUgKi8KIAkJCSAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSkKIAkJCQljb250aW51ZTsKIAogCQkJaWYgKFdBUk5fT05fT05DRSh0eXBlID09IE1PRF9JTlZBTElEKSkKIAkJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG8KLQkJCSAqIHByZWFsbG9jYXRlZCBjb250aWd1b3VzIG1lbW9yeS4KLQkJCSAqLwotCQkJaWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy0mZ3Q7c2hfc2l6ZSkpIHsKLQkJCQkvKgotCQkJCSAqIHMtJmd0O3NoX2VudHNpemUgd29uJiMzOTt0IGJlIHVzZWQgYnV0IHBvcHVsYXRlIHRoZQotCQkJCSAqIHR5cGUgZmllbGQgdG8gYXZvaWQgY29uZnVzaW9uLgotCQkJCSAqLwotCQkJCXMtJmd0O3NoX2VudHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpKHR5cGUpICZhbXA7IFNIX0VOVFNJWkVfVFlQRV9NQVNLKQotCQkJCQkJJmx0OyZsdDsgU0hfRU5UU0laRV9UWVBFX1NISUZUOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCiAJCQlzLSZndDtzaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCB0eXBlLCBzLCBpKTsKIAkJCXByX2RlYnVnKCYjMzQ7XHQlc1xuJiMzNDssIHNuYW1lKTsKIAkJfQpAQCAtMTc0NSwxNiAmIzQzOzE3MjUsMTAgQEAgc3RhdGljIHZvaWQgX19sYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBib29sIGkKIC8qCiAgKiBMYXkgb3V0IHRoZSBTSEZfQUxMT0Mgc2VjdGlvbnMgaW4gYSB3YXkgbm90IGRpc3NpbWlsYXIgdG8gaG93IGxkCiAgKiBtaWdodCAtLSBjb2RlLCByZWFkLW9ubHkgZGF0YSwgcmVhZC13cml0ZSBkYXRhLCBzbWFsbCBkYXRhLiAgVGFsbHkKLSAqIHNpemVzLCBhbmQgcGxhY2UgdGhlIG9mZnNldHMgaW50byBzaF9lbnRzaXplIGZpZWxkczogaGlnaCBiaXQgbWVhbnMgaXQKLSAqIGJlbG9uZ3MgaW4gaW5pdC4KJiM0MzsgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuCiAgKi8KIHN0YXRpYyB2b2lkIGxheW91dF9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiB7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykKLQkJaW5mby0mZ3Q7c2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDsKLQogCXByX2RlYnVnKCYjMzQ7Q29yZSBzZWN0aW9uIGFsbG9jYXRpb24gb3JkZXIgZm9yICVzOlxuJiMzNDssIG1vZC0mZ3Q7bmFtZSk7CiAJX19sYXlvdXRfc2VjdGlvbnMobW9kLCBpbmZvLCBmYWxzZSk7CiAKQEAgLTI4MDAsNyAmIzQzOzI3NzQsNiBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKIAlpbnQgaSwgcmV0OwogCWVudW0gbW9kX21lbV90eXBlIHQgPSBNT0RfTUVNX05VTV9UWVBFUzsKLQlib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlOwogCiAJZm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHsKIAkJaWYgKCFtb2QtJmd0O21lbVt0eXBlXS5zaXplKSB7CkBAIC0yODIwLDM0ICYjNDM7Mjc5MywxMyBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIAlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewogCQl2b2lkICpkZXN0OwogCQlFbGZfU2hkciAqc2hkciA9ICZhbXA7aW5mby0mZ3Q7c2VjaGRyc1tpXTsKLQkJY29uc3QgY2hhciAqc25hbWU7CiAKLQkJaWYgKCEoc2hkci0mZ3Q7c2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSkKJiM0MzsJCWlmICghKHNoZHItJmd0O3NoX2ZsYWdzICZhbXA7IFNIRl9BTExPQykKJiM0MzsJCSAgICB8fCBzaGRyLSZndDtzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSkKIAkJCWNvbnRpbnVlOwogCi0JCXNuYW1lID0gaW5mby0mZ3Q7c2Vjc3RyaW5ncyAmIzQzOyBzaGRyLSZndDtzaF9uYW1lOwotCQkvKgotCQkgKiBMb2FkIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSBhcyB0aGV5IG1pZ2h0IHN0aWxsIGJlIHVzZWQKLQkJICogYWZ0ZXIgbW9kdWxlIHVubG9hZC4KLQkJICovCi0JCWlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItJmd0O3NoX3NpemUpKSB7Ci0JCQlkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzaGRyLSZndDtzaF9zaXplLAotCQkJCQlhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBpKSwgc2hkci0mZ3Q7c2hfYWRkcmFsaWduKTsKLQkJCWlmIChXQVJOX09OKCFkZXN0KSkgewotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXRfZXJyOwotCQkJfQotCQkJaWYgKElTX0VSUihkZXN0KSkgewotCQkJCXJldCA9IFBUUl9FUlIoZGVzdCk7Ci0JCQkJZ290byBvdXRfZXJyOwotCQkJfQotCQkJY29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWVudW0gbW9kX21lbV90eXBlIHR5cGUgPSBzaGRyLSZndDtzaF9lbnRzaXplICZndDsmZ3Q7IFNIX0VOVFNJWkVfVFlQRV9TSElGVDsKLQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc2hkci0mZ3Q7c2hfZW50c2l6ZSAmYW1wOyBTSF9FTlRTSVpFX09GRlNFVF9NQVNLOwotCi0JCQlkZXN0ID0gbW9kLSZndDttZW1bdHlwZV0uYmFzZSAmIzQzOyBvZmZzZXQ7Ci0JCX0KJiM0MzsJCWRlc3QgPSBtb2QtJmd0O21lbVtzaGRyLSZndDtzaF9lbnRzaXplICZndDsmZ3Q7IFNIX0VOVFNJWkVfVFlQRV9TSElGVF0uYmFzZSAmIzQzOwomIzQzOwkJICAgICAgIChzaGRyLSZndDtzaF9lbnRzaXplICZhbXA7IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0spOwogCiAJCWlmIChzaGRyLSZndDtzaF90eXBlICE9IFNIVF9OT0JJVFMpIHsKIAkJCS8qCkBAIC0yODc5LDggJiM0MzsyODMxLDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pCiAJbW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpOwogCXdoaWxlICh0LS0pCiAJCW1vZHVsZV9tZW1vcnlfZnJlZShtb2QsIHQpOwotCWlmIChjb2RldGFnX3NlY3Rpb25fZm91bmQpCi0JCWNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yOTUxLDkgJiM0MzsyOTAxLDUxIEBAIHN0YXRpYyBib29sIGJsYWNrbGlzdGVkKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKQogfQogY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7CiAKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseS4gVGhleSBhcmUgbG9hZGVkIGludG8gcHJlYWxsb2NhdGVkCiYjNDM7ICogY29udGlndW91cyBtZW1vcnkgYmVjYXVzZSB0aGV5IG1heSBzdGlsbCBiZSB1c2VkIGFmdGVyIHRoZSBtb2R1bGUgaXMKJiM0MzsgKiB1bmxvYWRlZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoZSBzZXBhcmF0ZSBhbGxvY2F0aW9uIG92ZXJmbG93cywgYWxsb2NhdGUgdGhlIHNlY3Rpb24gbm9ybWFsbHkKJiM0MzsgKiBzbyB0aGF0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewomIzQzOwkJRWxmX1NoZHIgKnNoZHIgPSAmYW1wO2luZm8tJmd0O3NlY2hkcnNbaV07CiYjNDM7CQljb25zdCBjaGFyICpzbmFtZSA9IGluZm8tJmd0O3NlY3N0cmluZ3MgJiM0Mzsgc2hkci0mZ3Q7c2hfbmFtZTsKJiM0MzsJCXZvaWQgKmRlc3Q7CiYjNDM7CiYjNDM7CQlpZiAoIWNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oaW5mby0mZ3Q7bW9kLCBzbmFtZSwgc2hkci0mZ3Q7c2hfc2l6ZSkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihpbmZvLSZndDttb2QsIHNuYW1lLCBzaGRyLSZndDtzaF9zaXplLAomIzQzOwkJCQlhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQoaW5mby0mZ3Q7bW9kLCBpKSwgc2hkci0mZ3Q7c2hfYWRkcmFsaWduKTsKJiM0MzsJCWlmIChXQVJOX09OKCFkZXN0KSkgewomIzQzOwkJCWNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby0mZ3Q7bW9kKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChkZXN0ID09IEVSUl9QVFIoLUVBR0FJTikpCiYjNDM7CQkJLyogQWxsb2NhdGUgdGhlIHNlY3Rpb24gYXMgYSByZWd1bGFyIHNlY3Rpb24uICovCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlpZiAoSVNfRVJSKGRlc3QpKSB7CiYjNDM7CQkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLSZndDttb2QpOwomIzQzOwkJCXJldHVybiBQVFJfRVJSKGRlc3QpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKHNoZHItJmd0O3NoX3R5cGUgIT0gU0hUX05PQklUUykKJiM0MzsJCQltZW1jcHkoZGVzdCwgKHZvaWQgKilzaGRyLSZndDtzaF9hZGRyLCBzaGRyLSZndDtzaF9zaXplKTsKJiM0MzsJCXNoZHItJmd0O3NoX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXN0OwomIzQzOwkJc2hkci0mZ3Q7c2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCiAJLyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqLwpAQCAtMjk2Nyw4ICYjNDM7Mjk1OSwxMyBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiAJaWYgKGVyciAmbHQ7IDApCiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAKJiM0MzsJLyogUmVwdXJwb3NlIHNoX2VudHNpemUgdG8gdHJhY2sgd2hlcmUgZWFjaCBzZWN0aW9uIGlzIGFsbG9jYXRlZC4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGluZm8tJmd0O2hkci0mZ3Q7ZV9zaG51bTsgaSYjNDM7JiM0MzspCiYjNDM7CQlpbmZvLSZndDtzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMOwomIzQzOwogCS8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovCi0JaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5wY3B1XS5zaF9mbGFncyAmYW1wOz0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQzsKJiM0MzsJaWYgKGluZm8tJmd0O2luZGV4LnBjcHUpCiYjNDM7CQlpbmZvLSZndDtzZWNoZHJzW2luZm8tJmd0O2luZGV4LnBjcHVdLnNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7CiAKIAkvKgogCSAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuCkBAIC0yOTc3LDE4ICYjNDM7Mjk3NCwyMSBAQCBzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpCiAJICovCiAJbW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLSZndDtoZHIsIGluZm8tJmd0O3NlY2hkcnMsIGluZm8tJmd0O3NlY3N0cmluZ3MpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgdG90YWwgc2l6ZXMsIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAgRm9yIG5vdwotCSAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24mIzM5O3QgYXBwZWFyIHRvIGJlIGFueQotCSAqIHNwZWNpYWwgY2FzZXMgZm9yIHRoZSBhcmNoaXRlY3R1cmVzLgotCSAqLwomIzQzOwkvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqLwomIzQzOwllcnIgPSBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKGluZm8pOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsKJiM0MzsJLyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqLwogCWxheW91dF9zZWN0aW9ucyhpbmZvLSZndDttb2QsIGluZm8pOwogCWxheW91dF9zeW10YWIoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKIAogCS8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqLwogCWVyciA9IG1vdmVfbW9kdWxlKGluZm8tJmd0O21vZCwgaW5mbyk7Ci0JaWYgKGVycikKJiM0MzsJaWYgKGVycikgewomIzQzOwkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLSZndDttb2QpOwogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwl9CiAKIAkvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi8KIAltb2QgPSAodm9pZCAqKWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXgubW9kXS5zaF9hZGRyOwpkaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuYwppbmRleCBmMzBlZjhkZDI0YzcwLi44ZjEzMzY5YjMyZWNkIDEwMDY0NAotLS0gYS9tbS9hbGxvY190YWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9hbGxvY190YWcuYwpAQCAtODQzLDYgJiM0Mzs4NDMsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZCkKJiM0Mzt7CiYjNDM7CU1BX1NUQVRFKG1hcywgJmFtcDttb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7CiYjNDM7CXN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZzsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZzsKJiM0MzsJc3RydWN0IG1vZHVsZSAqdmFsOwomIzQzOwomIzQzOwltYXNfbG9jaygmYW1wO21hcyk7CiYjNDM7CW1hc19mb3JfZWFjaF9yZXYoJmFtcDttYXMsIHZhbCwgMCkKJiM0MzsJCWlmICh2YWwgPT0gbW9kKQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwlpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqLwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWlmICghdXNlZCkKJiM0MzsJCWdvdG8gcmVsZWFzZV9hcmVhOwomIzQzOwomIzQzOwlzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5pbmRleCk7CiYjNDM7CWVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTsKJiM0MzsJaWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkgewomIzQzOwkJc3RydWN0IGFsbG9jX3RhZyAqdGFnOwomIzQzOwomIzQzOwkJZm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyAmbHQ7PSBlbmRfdGFnOyB0YWcmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyOwomIzQzOwomIzQzOwkJCWlmICghdGFnLSZndDtjb3VudGVycykKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJY291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7CiYjNDM7CQkJcHJfaW5mbygmIzM0OyVzOiV1IG1vZHVsZSAlcyBmdW5jOiVzIGhhcyAlbGx1IGFsbG9jYXRlZCBhdCBtb2R1bGUgdW5sb2FkXG4mIzM0OywKJiM0MzsJCQkJdGFnLSZndDtjdC5maWxlbmFtZSwgdGFnLSZndDtjdC5saW5lbm8sIHRhZy0mZ3Q7Y3QubW9kbmFtZSwKJiM0MzsJCQkJdGFnLSZndDtjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1c2VkID0gZmFsc2U7CiYjNDM7CX0KJiM0MztyZWxlYXNlX2FyZWE6CiYjNDM7CW1hc19zdG9yZSgmYW1wO21hcywgdXNlZCA/ICZhbXA7dW5sb2FkZWRfbW9kIDogTlVMTCk7CiYjNDM7CXZhbCA9IG1hc19wcmV2X3JhbmdlKCZhbXA7bWFzLCAwKTsKJiM0MzsJaWYgKHZhbCA9PSAmYW1wO3ByZXBlbmRfbW9kKQomIzQzOwkJbWFzX3N0b3JlKCZhbXA7bWFzLCBOVUxMKTsKJiM0MztvdXQ6CiYjNDM7CW1hc191bmxvY2soJmFtcDttYXMpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSB1bnNpZ25lZCBpbnQgcHJlcGVuZCwgdW5zaWduZWQgbG9uZyBhbGlnbikKIHsKQEAgLTkxMiwxMCAmIzQzOzk1OCwxMiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJaW50IGdyb3dfcmVzOwogCiAJCW1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgJiM0Mzsgc2l6ZTsKLQkJaWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpICZhbXA7JmFtcDsgIXRhZ3NfYWRkcmVzc2FibGUoKSkgewomIzQzOwkJaWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHsKIAkJCXNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7Ci0JCQlwcl93YXJuKCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXG4mIzM0OywKLQkJCQltb2QtJmd0O25hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTsKJiM0MzsJCQlwcl93YXJuX29uY2UoJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAomIzQzOwkJCQkgICAgIG1vZC0mZ3Q7bmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpOwomIzQzOwkJCXJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7CiYjNDM7CQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CiAJCX0KIAogCQlncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7CkBAIC05MjMsNiAmIzQzOzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJc2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTsKIAkJCXByX2VycigmIzM0O0ZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXG4mIzM0OywKIAkJCSAgICAgICBtb2QtJmd0O25hbWUpOwomIzQzOwkJCXJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7CiAJCQlyZXR1cm4gRVJSX1BUUihncm93X3Jlcyk7CiAJCX0KIAl9CkBAIC05MzAsNTIgJiM0Mzs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAlyZXR1cm4gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKQotewotCU1BX1NUQVRFKG1hcywgJmFtcDttb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7Ci0Jc3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnOwotCXN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7Ci0Jc3RydWN0IG1vZHVsZSAqdmFsOwotCi0JbWFzX2xvY2soJmFtcDttYXMpOwotCW1hc19mb3JfZWFjaF9yZXYoJmFtcDttYXMsIHZhbCwgMCkKLQkJaWYgKHZhbCA9PSBtb2QpCi0JCQlicmVhazsKLQotCWlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovCi0JCWdvdG8gb3V0OwotCi0JaWYgKCF1c2VkKQotCQlnb3RvIHJlbGVhc2VfYXJlYTsKLQotCXN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTsKLQllbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMubGFzdCk7Ci0JaWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkgewotCQlzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7Ci0KLQkJZm9yICh0YWcgPSBzdGFydF90YWc7IHRhZyAmbHQ7PSBlbmRfdGFnOyB0YWcmIzQzOyYjNDM7KSB7Ci0JCQlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7Ci0KLQkJCWlmICghdGFnLSZndDtjb3VudGVycykKLQkJCQljb250aW51ZTsKLQotCQkJY291bnRlciA9IGFsbG9jX3RhZ19yZWFkKHRhZyk7Ci0JCQlwcl9pbmZvKCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcbiYjMzQ7LAotCQkJCXRhZy0mZ3Q7Y3QuZmlsZW5hbWUsIHRhZy0mZ3Q7Y3QubGluZW5vLCB0YWctJmd0O2N0Lm1vZG5hbWUsCi0JCQkJdGFnLSZndDtjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7Ci0JCX0KLQl9IGVsc2UgewotCQl1c2VkID0gZmFsc2U7Ci0JfQotcmVsZWFzZV9hcmVhOgotCW1hc19zdG9yZSgmYW1wO21hcywgdXNlZCA/ICZhbXA7dW5sb2FkZWRfbW9kIDogTlVMTCk7Ci0JdmFsID0gbWFzX3ByZXZfcmFuZ2UoJmFtcDttYXMsIDApOwotCWlmICh2YWwgPT0gJmFtcDtwcmVwZW5kX21vZCkKLQkJbWFzX3N0b3JlKCZhbXA7bWFzLCBOVUxMKTsKLW91dDoKLQltYXNfdW5sb2NrKCZhbXA7bWFzKTsKLX0KLQogc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApCiB7CiAJLyogQWxsb2NhdGUgbW9kdWxlIGFsbG9jX3RhZyBwZXJjcHUgY291bnRlcnMgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY4MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIHdoYXQgY29uZmlnIG9wdGlvbnMgbWlnaHQgYmUgaW52b2x2ZWQuIFRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwga2V5IGZpbGVzLCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBiZWhpbmQgdGhlc2UgY2hhbmdlcy4KCkZpcnN0LCBgaW5jbHVkZS9saW51eC9tb2R1bGUuaGAgaGFzIGEgbmV3IGVudW0gdmFsdWUsIGBNT0RfU1RBTkRBTE9ORSA9IC0yYCwgYWRkZWQgdG8gYGVudW0gbW9kX21lbV90eXBlYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZW4gYGtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaGAgYWRkcyB0aGUgYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgbWFjcm8g4oCTIHNvIHRoaXMgYC0yYCBpcyBkZWZpbml0ZWx5IGNvbm5lY3RlZCB0byB0aGUgc3RhbmRhbG9uZSBtZW1vcnkgdHlwZS4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZGlzdGluY3QgbWVtb3J5IHJlZ2lvbiBmb3IgbW9kdWxlIGxvYWRpbmcuCgpUaGUgcmVhbCBtZWF0IG9mIHRoZSBjaGFuZ2VzIHNlZW1zIHRvIGJlIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIEl0JiMzOTtzIG1vZGlmeWluZyBjb3JlIG1vZHVsZSBsYXlvdXQgYW5kIGFsbG9jYXRpb24gcm91dGluZXM6IGBhcHBseV9yZWxvY2F0aW9uc2AsIGBfX2xheW91dF9zZWN0aW9uc2AsIGBsYXlvdXRfc2VjdGlvbnNgLCBgbW92ZV9tb2R1bGVgLCBhbmQgYGxheW91dF9hbmRfYWxsb2NhdGVgLiBQbHVzLCB0aGVyZSYjMzk7cyB0aGUgaW50cm9kdWN0aW9uIG9mIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYC4gVGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IHNlY3Rpb25zLCBwYXJ0aWN1bGFybHkgY29kZXRhZyBzZWN0aW9ucyBhbmQgcGVyY3B1IHNlY3Rpb25zIChzdGFuZGFsb25lIHNlY3Rpb25zKSwgYXJlIGhhbmRsZWQgZHVyaW5nIG1vZHVsZSBsb2FkaW5nLiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGZvY3VzZWQgb24gZW5zdXJpbmcgdGhhdCB0aGVzZSBuZXcgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IG1hbmFnZWQgZHVyaW5nIGxvYWRpbmcgYW5kIHJlbG9jYXRpb24uCgpGaW5hbGx5LCBgbW0vYWxsb2NfdGFnLmNgIHNlZXMgc29tZSBpbnRlcmVzdGluZyByZW9yZGVyaW5nIGFuZCBlcnJvciBoYW5kbGluZyBhcm91bmQgbW9kdWxlIHRhZyBhbGxvY2F0aW9uLiBUaGUgYHJlbGVhc2VfbW9kdWxlX3RhZ3NgIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgYHJlc2VydmVfbW9kdWxlX3RhZ3NgLiBJbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AsIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgY2hlY2sgZm9yIGAhdGFnc19hZGRyZXNzYWJsZSgpYCwgYW5kIGlmIGl0JiMzOTtzIHRydWUsIGl0IHJlbGVhc2VzIHRhZ3MgYW5kIHJldHVybnMgYC1FQUdBSU5gLiBBbHNvLCB0aGVyZSYjMzk7cyBhIGZhaWx1cmUgcmVsZWFzZSBmb3IgYHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKClgLiBUaGlzIGlzIGtleS4gSXQgaW1wbGllcyBhIG5ldyBhcHByb2FjaCBvciBjb25kaXRpb24gd2hlcmUgbWVtb3J5IHRhZ2dpbmcgbWlnaHQgZmFpbCBhbmQgcmVxdWlyZXMgYSByZXRyeSBvciBmYWxsYmFjay4gVGhpcyBjb3VsZCBvcGVuIGludGVyZXN0aW5nIGZ1enppbmcgcG9zc2liaWxpdGllcy4KCk5vdywgbXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmdXp6YWJsZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBjb250cm9sbGVkIGJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBwZXJgIG9yIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhcm91bmQgYGFsbG9jX3RhZ2AgYW5kIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9yIHRyaWdnZXJzIGZvciB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBleHBvc2UgdGhlc2UgbmV3IHBhdGhzLCBzbyBJIGNhbiBjcmVhdGUgYSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gdGhhdCByZWFjaGVzIHRoZXNlIG5ldyBmZWF0dXJlcy4gVGhpcyBwYXRjaCBoYXMgZGVmaW5pdGVseSBjYXVnaHQgbXkgYXR0ZW50aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xuLS1cbm1tL0tjb25maWcuZGVidWctMzIyLVxubW0vS2NvbmZpZy5kZWJ1ZzozMjM6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbm1tL0tjb25maWcuZGVidWctMzI0LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMzUtXG5tbS9LY29uZmlnLmRlYnVnOjMzNjpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbm1tL0tjb25maWcuZGVidWctMzM3LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWcuZGVidWctMzM4LVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnLmRlYnVnOjMzOTpcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDAtXG5tbS9LY29uZmlnLmRlYnVnOjM0MTpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDMtXHRkZWZhdWx0IG5cbm1tL0tjb25maWcuZGVidWc6MzQ0Olx0ZGVwZW5kcyBvbiBNRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9LY29uZmlnLmRlYnVnOjM0NTpcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDYtXHRoZWxwXG4tLVxubW0vTWFrZWZpbGU9MTQ5PW9iai0kKENPTkZJR19MQVpZX01NVV9NT0RFX0tVTklUX1RFU1QpICYjNDM7PSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cbm1tL01ha2VmaWxlOjE1MDpvYmotJChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykgJiM0Mzs9IGFsbG9jX3RhZy5vXG4tLVxubW0vYWxsb2NfdGFnLmMtMjktXG5tbS9hbGxvY190YWcuYzozMDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG5tbS9hbGxvY190YWcuYy0zMS1zdGF0aWMgYm9vbCBtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSB0cnVlO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ5PUVYUE9SVF9TWU1CT0woX3NoYXJlZF9hbGxvY190YWcpO1xuLS1cbm1tL2FsbG9jX3RhZy5jLTUxLVxubW0vYWxsb2NfdGFnLmM6NTI6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxubW0vYWxsb2NfdGFnLmMtNTMtXHRcdFx0bWVtX2FsbG9jX3Byb2ZpbGluZ19rZXkpO1xuLS1cbm1tL2FsbG9jX3RhZy5jPTExMjk9c3RhdGljIF9faW5pdCBib29sIG5lZWRfcGFnZV9hbGxvY190YWdnaW5nKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTEzNi1cbm1tL2FsbG9jX3RhZy5jOjExMzc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMTM4LS8qXG4tLVxubW0vYWxsb2NfdGFnLmM9MTIxNT1zdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTI2OC19XG5tbS9hbGxvY190YWcuYzoxMjY5OiNlbHNlIC8qICFDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vYWxsb2NfdGFnLmMtMTI3MC1zdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNsZWFyX2Vhcmx5X2FsbG9jX3Bmbl90YWdfcmVmcyh2b2lkKSB7fVxubW0vYWxsb2NfdGFnLmM6MTI3MTojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cbm1tL2FsbG9jX3RhZy5jLTEyNzItXG4tLVxubW0vYWxsb2NfdGFnLmM9MTI5MD1zdGF0aWMgaW50IHByb2NfbWVtX3Byb2ZpbGluZ19oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vYWxsb2NfdGFnLmMtMTMwMS1cbm1tL2FsbG9jX3RhZy5jOjEzMDI6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG5tbS9hbGxvY190YWcuYy0xMzAzLVx0XHQvKiBVc2VyIGNhbiYjMzk7dCB0b2dnbGUgcHJvZmlsaW5nIHdoaWxlIGRlYnVnZ2luZyAqL1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMjAyPXN0YXRpYyB2b2lkIGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTIxNi1cbm1tL3BhZ2VfYWxsb2MuYzoxMjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9hbGxvYy5jLTEyMTgtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTEyODM9c3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTI4OC1cbm1tL3BhZ2VfYWxsb2MuYzoxMjg5OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9wYWdlX2FsbG9jLmMtMTI5MC1cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTI5ND1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxubW0vcGFnZV9hbGxvYy5jLTEyOTUtXG5tbS9wYWdlX2FsbG9jLmM6MTI5NjojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3BhZ2VfYWxsb2MuYy0xMjk3LVxuLS1cbm1tL3BhZ2VfZXh0LmM9ODA9c3RhdGljIHN0cnVjdCBwYWdlX2V4dF9vcGVyYXRpb25zICpwYWdlX2V4dF9vcHNbXSBfX2luaXRkYXRhID0ge1xuLS1cbm1tL3BhZ2VfZXh0LmMtODYtI2VuZGlmXG5tbS9wYWdlX2V4dC5jOjg3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGFnZV9leHQuYy04OC1cdFx1MDAyNnBhZ2VfYWxsb2NfdGFnZ2luZ19vcHMsXG4tLVxubW0vcGFnZV9leHQuYz0xMDA9c3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfdXNhZ2U7XG5tbS9wYWdlX2V4dC5jLTEwMS1cbm1tL3BhZ2VfZXh0LmM6MTAyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vcGFnZV9leHQuYy0xMDMtLypcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0zNT1zdHJ1Y3QgcGNwdW9ial9leHQge1xuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTM4LSNlbmRpZlxubW0vcGVyY3B1LWludGVybmFsLmg6Mzk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00MC1cdHVuaW9uIGNvZGV0YWdfcmVmXHR0YWc7XG4tLVxubW0vcGVyY3B1LWludGVybmFsLmgtNDMtXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo0NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIHx8IGRlZmluZWQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00NS0jZGVmaW5lIE5FRURfUENQVU9CSl9FWFRcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD05MD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wY3B1b2JqX2V4dCh2b2lkKVxubW0vcGVyY3B1LWludGVybmFsLmgtOTEte1xubW0vcGVyY3B1LWludGVybmFsLmg6OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykpXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC05My1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vcGVyY3B1LmM9MTY4OD1zdGF0aWMgdm9pZCBwY3B1X21lbWNnX2ZyZWVfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIHNpemVfdCBzaXplKVxuLS1cbm1tL3BlcmNwdS5jLTE2OTItXG5tbS9wZXJjcHUuYzoxNjkzOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vcGVyY3B1LmMtMTY5NC1zdGF0aWMgdm9pZCBwY3B1X2FsbG9jX3RhZ19hbGxvY19ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcbi0tXG5tbS9zaG93X21lbS5jPTQwOD12b2lkIF9fc2hvd19tZW0odW5zaWduZWQgaW50IGZpbHRlciwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZW1hc2ssXG4tLVxubW0vc2hvd19tZW0uYy00MzQtI2VuZGlmXG5tbS9zaG93X21lbS5jOjQzNTojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3Nob3dfbWVtLmMtNDM2LVx0c3RhdGljIERFRklORV9TUElOTE9DSyhtZW1fYWxsb2NfcHJvZmlsaW5nX3NwaW5sb2NrKTtcbi0tXG5tbS9zbGFiLmg9NjA0PXN0cnVjdCBzbGFib2JqX2V4dCB7XG4tLVxubW0vc2xhYi5oLTYxMi0jZW5kaWZcbm1tL3NsYWIuaDo2MTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbGFiLmgtNjE0LVx0XHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XG4tLVxubW0vc2xhYi5oLTYxOC1cbm1tL3NsYWIuaDo2MTk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXG5tbS9zbGFiLmg6NjIwOkRFQ0xBUkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG5tbS9zbGFiLmgtNjIxLVx0XHRcdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbi0tXG5tbS9zbGFiLmg9NjIzPXN0YXRpYyBpbmxpbmUgYm9vbCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWcodm9pZClcbm1tL3NsYWIuaC02MjQte1xubW0vc2xhYi5oOjYyNTpcdHJldHVybiBzdGF0aWNfYnJhbmNoX21heWJlKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVCxcbm1tL3NsYWIuaC02MjYtXHRcdFx0XHQgICBcdTAwMjZzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfa2V5KTtcbi0tXG5tbS9zbGFiLmg9ODA3PXNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcbi0tXG5tbS9zbGFiLmgtODE2LVxubW0vc2xhYi5oOjgxNzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3NsYWIuaC04MTgtc3RhdGljIGlubGluZSB1bmlvbiBjb2RldGFnX3JlZiAqXG4tLVxubW0vc2x1Yi5jPTIxND1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuLS1cbm1tL3NsdWIuYy0yMTYtXG5tbS9zbHViLmM6MjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vc2x1Yi5jOjIxODpERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXG5tbS9zbHViLmMtMjE5LVx0XHRcdHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xuLS1cbm1tL3NsdWIuYz0yMDY5PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTIwODYtXG5tbS9zbHViLmM6MjA4NzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbm1tL3NsdWIuYy0yMDg4LVxuLS1cbm1tL3NsdWIuYz0yMTI0PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIxNDktXG5tbS9zbHViLmM6MjE1MDojZWxzZSAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vc2x1Yi5jLTIxNTEtXG4tLVxubW0vc2x1Yi5jPTIxNTQ9c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtMjE1Ni1cbm1tL3NsdWIuYzoyMTU3OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xubW0vc2x1Yi5jLTIxNTgtXG4tLVxubW0vc2x1Yi5jPTIzNDY9c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIzNTItXG5tbS9zbHViLmM6MjM1MzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbm1tL3NsdWIuYy0yMzU0LVxuLS1cbm1tL3NsdWIuYz0yNDY5PXN0YXRpYyB2b2lkIF9faW5pdCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuLS1cbm1tL3NsdWIuYy0yNDgwLVxubW0vc2x1Yi5jOjI0ODE6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcgKi9cbm1tL3NsdWIuYy0yNDgyLVxuLS1cbm1tL3NsdWIuYz0yNDk1PXN0YXRpYyBpbmxpbmUgdm9pZCBzbGFiX29ial9leHRfaGFzX2NvZGV0YWdfaW5pdCh2b2lkKVxuLS1cbm1tL3NsdWIuYy0yNDk4LVxubW0vc2x1Yi5jOjI0OTk6I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXG5tbS9zbHViLmMtMjUwMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM3OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKktjb25maWcgRGVlcCBEaXZlOiBDT0RFX1RBR0dJTkcgYW5kIE1FTV9BTExPQ19QUk9GSUxJTkcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byBzb21lIEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiB3aGF0JiMzOTtzIG9uIHRoZSBhZ2VuZGEgdG9kYXk/IEFoLCB5ZXMsIGBDT0RFX1RBR0dJTkdgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFRob3NlIHR3byBhcmUgb2Z0ZW4gaW50ZXJ0d2luZWQsIGVzcGVjaWFsbHkgd2hlbiB3ZSYjMzk7cmUgdGhpbmtpbmcgYWJvdXQgbG93LWxldmVsIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgcGxheSB0b2dldGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncywgYW5kIHdoYXQgaW1wbGljYXRpb25zIGVhY2ggaGFzIG9uIHRoZSBrZXJuZWwmIzM5O3MgYmVoYXZpb3IgYW5kIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGFtb3VudCBvZiBpbnN0cnVtZW50YXRpb24gdG8gYmUgYXdhcmUgb2YuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIHRvIGRldGVybWluZSBob3cgdGhpcyBhZmZlY3RzIHRoZSBzeXN0ZW0sIGFuZCB3aGF0IHRoZSB0cmFkZS1vZmZzIGFyZS4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHdoZXJlIHRoZXNlIGFyZSB1c2VkIGFzIHRoaXMgY291bGQgYWZmZWN0IHRoZSBlbnRpcmUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT0RFX1RBR0dJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTEwMTQ9Y29uZmlnIERFQlVHX1NUQUNLT1ZFUkZMT1dcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDMxLVxubGliL0tjb25maWcuZGVidWc6MTAzMjpjb25maWcgQ09ERV9UQUdHSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDMzLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNzAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIEtjb25maWcgaW4gdGhlIFdpbGQqKgoKT2theSwgc28gSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcywgY2hhc2luZyBkb3duIGEgYnVnLiBUaGUgcHJvYmxlbSYjMzk7cyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgZGVidWcgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBjb2RlYmFzZSwgSSBjYW4gYWxtb3N0IHNtZWxsIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZS4gTXkgZ3V0IHRlbGxzIG1lIHRvIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gSXQmIzM5O3MgYSBrZXkgZmlsZSBmb3IgYW55IGRlYnVnZ2luZy1yZWxhdGVkIHNldHRpbmdzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhhdCBsaW5lIDEwMzIgbWlnaHQgaG9sZCBhIGNsdWUuIEl0JiMzOTtzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZvciBkaWdnaW5nIGluIGFuZCB0YWtpbmcgYSBsb29rLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDI1Olx0XHQgIGludm9sdmVkLlxuMTAyNjpcdFxuMTAyNzpcdFx0ICBVc2UgdGhpcyBpbiBjYXNlcyB3aGVyZSB5b3Ugc2VlIGFwcGFyZW50bHkgcmFuZG9tIG1lbW9yeVxuMTAyODpcdFx0ICBjb3JydXB0aW9uLCBlc3BlY2lhbGx5IGlmIGl0IGFwcGVhcnMgaW4gJiMzOTtzdHJ1Y3QgdGhyZWFkX2luZm8mIzM5O1xuMTAyOTpcdFxuMTAzMDpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IFwmIzM0O05cJiMzNDsuXG4xMDMxOlx0XG4xMDMyOlx0Y29uZmlnIENPREVfVEFHR0lOR1xuMTAzMzpcdFx0Ym9vbFxuMTAzNDpcdFx0c2VsZWN0IEtBTExTWU1TXG4xMDM1Olx0XG4xMDM2Olx0c291cmNlIFwmIzM0O2xpYi9LY29uZmlnLmthc2FuXCYjMzQ7XG4xMDM3Olx0c291cmNlIFwmIzM0O2xpYi9LY29uZmlnLmtmZW5jZVwmIzM0O1xuMTAzODpcdHNvdXJjZSBcJiMzNDtsaWIvS2NvbmZpZy5rbXNhblwmIzM0O1xuMTAzOTpcdFxuMTA0MDpcdGVuZG1lbnUgIyBcJiMzNDtNZW1vcnkgRGVidWdnaW5nXCYjMzQ7XG4xMDQxOlx0XG4xMDQyOlx0Y29uZmlnIERFQlVHX1NISVJRXG4xMDQzOlx0XHRib29sIFwmIzM0O0RlYnVnIHNoYXJlZCBJUlEgaGFuZGxlcnNcJiMzNDtcbjEwNDQ6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXG4xMDQ1Olx0XHRoZWxwXG4xMDQ2Olx0XHQgIEVuYWJsZSB0aGlzIHRvIGdlbmVyYXRlIGEgc3B1cmlvdXMgaW50ZXJydXB0IGp1c3QgYmVmb3JlIGEgc2hhcmVkXG4xMDQ3Olx0XHQgIGludGVycnVwdCBoYW5kbGVyIGlzIGRlcmVnaXN0ZXJlZCAoZ2VuZXJhdGluZyBvbmUgd2hlbiByZWdpc3RlcmluZ1xuMTA0ODpcdFx0ICBpcyBjdXJyZW50bHkgZGlzYWJsZWQpLiBEcml2ZXJzIG5lZWQgdG8gaGFuZGxlIHRoaXMgY29ycmVjdGx5LiBTb21lXG4xMDQ5Olx0XHQgIGRvbiYjMzk7dCBhbmQgbmVlZCB0byBiZSBjYXVnaHQuXG4xMDUwOlx0XG4xMDUxOlx0bWVudSBcJiMzNDtEZWJ1ZyBPb3BzLCBMb2NrdXBzIGFuZCBIYW5nc1wmIzM0O1xuMTA1MjpcdFxuMTA1MzpcdGNvbmZpZyBQQU5JQ19PTl9PT1BTXG4xMDU0Olx0XHRib29sIFwmIzM0O1BhbmljIG9uIE9vcHNcJiMzNDtcbjEwNTU6XHRcdGhlbHBcbjEwNTY6XHRcdCAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGtlcm5lbCB0byBwYW5pYyB3aGVuIGl0IG9vcHNlcy4gVGhpc1xuMTA1NzpcdFx0ICBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgb29wcz1wYW5pYyBvbiB0aGUga2VybmVsIGNvbW1hbmRcbjEwNTg6XHRcdCAgbGluZS5cbjEwNTk6XHRcbjEwNjA6XHRcdCAgVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCB0byBlbnN1cmUgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IGRvXG4xMDYxOlx0XHQgIGFueXRoaW5nIGVycm9uZW91cyBhZnRlciBhbiBvb3BzIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkYXRhXG4xMDYyOlx0XHQgIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzLlxuMTA2MzpcdFxuMTA2NDpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MzcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIERlYnVnIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSB0cm91Ymxlc2hvb3Rpbmcgc29tZXRoaW5nLCBhbmQgbXkgZ3V0IGZlZWxpbmcgaXMgdGVsbGluZyBtZSBpdCYjMzk7cyBsaWtlbHkgYSBjb25maWd1cmF0aW9uIGlzc3VlIHJlbGF0ZWQgdG8gZGVidWdnaW5nLiBHaXZlbiB0aGF0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyB0aGUgc3dlZXQgc3BvdCB0byBsb29rIGZvciB0aGlzIGlzc3VlIG1pZ2h0IGJlIGFyb3VuZCBsaW5lIDMyMC4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0JiMzOTtzIGEgZmFpcmx5IGNvbW1vbiBzcG90IGZvciBtZW1vcnkgbWFuYWdlbWVudCBkZWJ1ZyBvcHRpb25zLCBvciBwZXJoYXBzIHRoZSBkZXBlbmRlbmNpZXMgb2Ygc3VjaCBvcHRpb25zLCB0byBiZSBkZWZpbmVkLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFscyBvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzE1Olx0XHQgIGZhdWx0cyBoYW5kbGVkIHVuZGVyIHByb3RlY3Rpb24gb2YgcGVyLXZtYSBsb2Nrcy4gV2hlbiBlbmFibGVkLCB0aGVcbiAzMTY6XHRcdCAgY291bnRlcnMgYXJlIGV4cG9zZWQgaW4gL3Byb2Mvdm1zdGF0LiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBmb3JcbiAzMTc6XHRcdCAga2VybmVsIGRldmVsb3BlcnMgdG8gZXZhbHVhdGUgZWZmZWN0aXZlbmVzcyBvZiBwZXItdm1hIGxvY2tzIGFuZCB0b1xuIDMxODpcdFx0ICBpZGVudGlmeSBwYXRob2xvZ2ljYWwgY2FzZXMuIENvdW50aW5nIHRoZXNlIGV2ZW50cyBpbnRyb2R1Y2VzIGEgc21hbGxcbiAzMTk6XHRcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiAzMjA6XHRcbiAzMjE6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuIDMyMjpcdFxuIDMyMzpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzI0Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbiAzMjU6XHRcdGRlZmF1bHQgblxuIDMyNjpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAzMjc6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDMyODpcdFx0c2VsZWN0IENPREVfVEFHR0lOR1xuIDMyOTpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMzMwOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4gMzMxOlx0XHRoZWxwXG4gMzMyOlx0XHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcbiAzMzM6XHRcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xuIDMzNDpcdFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cbiAzMzU6XHRcbiAzMzY6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbiAzMzc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMzM4Olx0XHRkZWZhdWx0IHlcbiAzMzk6XHRcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xuIDM0MDpcdFxuIDM0MTpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG4gMzQyOlx0XHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuIDM0MzpcdFx0ZGVmYXVsdCBuXG4gMzQ0Olx0XHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcbiAzNDU6XHRcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxuIDM0NjpcdFx0aGVscFxuIDM0NzpcdFx0ICBBZGRzIHdhcm5pbmdzIHdpdGggaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cbiAzNDg6XHRcdCAgcHJvZmlsaW5nLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE0MwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBDT0RFX1RBR0dJTkdgIFNlbGVjdGlvbiBDcml0ZXJpYSoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgQ09ERV9UQUdHSU5HYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBhdXNlIGFuZCB0cnkgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiBpdHMgcHVycG9zZS4KClRoZSBpbXBsaWNpdCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlcmUgYXJlIG90aGVyIHNlbGVjdGlvbiBtZXRob2RzLCBmZWF0dXJlcywgcnVsZXMsIG9yIGlucHV0cyBpbiBwbGF5LiBUaGlua2luZyBzeXN0ZW1hdGljYWxseSwgSSBuZWVkIHRvIGtub3c6IHdoYXQgY3JpdGVyaWEgYmVzaWRlcyB0aGUgZXhwbGljaXRseSBtZW50aW9uZWQgb25lIGRldGVybWluZSB0aGUgc2VsZWN0aW9uIG9mIGBDT0RFX1RBR0dJTkdgPyBXaGF0IGFyZSBhbGwgdGhlIHRyaWdnZXJzLCBjb25zdHJhaW50cywgb3IgY29udGV4dHVhbCBmYWN0b3JzIGluZmx1ZW5jaW5nIGl0cyBpbnZvY2F0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzZXQgb2YgY29uZGl0aW9ucywgbm90IGp1c3QgdGhlIG9idmlvdXMgb25lLiBTbywgd2hhdCBlbHNlIGlzIGNvbnRyaWJ1dGluZyB0bywgb3IgcG90ZW50aWFsbHkgaW5mbHVlbmNpbmcsIGEgcHJvY2VzcyB0aGF0IGNob29zZXMgYENPREVfVEFHR0lOR2A/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBDT0RFX1RBR0dJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMjM9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMyNy1cdGRlcGVuZHMgb24gUFJPQ19GU1xubW0vS2NvbmZpZy5kZWJ1ZzozMjg6XHRzZWxlY3QgQ09ERV9UQUdHSU5HXG5tbS9LY29uZmlnLmRlYnVnLTMyOS1cdHNlbGVjdCBQQUdFX0VYVEVOU0lPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQzOQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTW9kdWxlIExvYWRpbmcgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSB0aGUgYE1PRFVMRVNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGludm9sdmVkLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGNvcmUgbW9kdWxlIGxvYWRpbmcgY29kZSAoYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCkuIE15IGZpcnN0IHN0ZXAgaXMgdG8gdHJhY2UgdGhlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKTGV0JiMzOTtzIHNlZSwgSSYjMzk7dmUgZ290IGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgYXMgdGhlIHByaW1hcnkgYWZmZWN0ZWQgZmlsZXMuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIG1vZGlmaWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBGcm9tIGEgcXVpY2sgZ2xhbmNlIGF0IGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIGl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYmVlbiB0b3VjaGVkOiBgYXBwbHlfcmVsb2NhdGlvbnNgLCBgX19sYXlvdXRfc2VjdGlvbnNgLCBgbGF5b3V0X3NlY3Rpb25zYCwgYG1vdmVfbW9kdWxlYCwgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgLCBhbmQgYGxheW91dF9hbmRfYWxsb2NhdGVgLiBJIHNob3VsZCBub3RlIHRoYXQgdGhleSBhcmUgYWxsIHN0YXRpYywgd2hpY2ggbWVhbnMgdGhlaXIgdmlzaWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSBmaWxlIHNjb3BlLCB1c3VhbGx5IGltcHJvdmluZyBwZXJmb3JtYW5jZS4KCkNydWNpYWxseSwgSSBzZWUgdGhhdCB0aGUgYGxvYWRfbW9kdWxlYCBmdW5jdGlvbiBjYWxscyBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAuIEFuZCBgbG9hZF9tb2R1bGVgIGl0c2VsZiBpcyBhIHZlcnkgaW1wb3J0YW50IGVudHJ5IHBvaW50LCB3aGljaCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaHMuIFNvLCBJIHdpbGwgY2hlY2sgdGhlIGNhbGxlcnMgb2YgYm90aCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGBsb2FkX21vZHVsZWAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoaXMgY2hhbmdlIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgc3VycHJpc2luZyBkZXBlbmRlbmNpZXMgb3IgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyB3aXRoaW4gdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MsIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgbGVhZCB0byBhIGxhcmdlciBjaGFuZ2UgaW4gaG93IHRoZSBtb2R1bGVzIGFyZSBiZWluZyBsb2FkZWQgYW5kIGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsYXlvdXRfYW5kX2FsbG9jYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9pbnRlcm5hbC5oPTE2ND1zdGF0aWMgaW5saW5lIGJvb2wgc2V0X2xpdmVwYXRjaF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNzktICogXHRvciBiZWluZyBwcm9jZXNzZWQgb24gb3VyIFx1MDAyNm1vZHVsZXMgbGlzdC4gVGhpcyBoYXBwZW5zIG9uIGVhcmx5X21vZF9jaGVjaygpXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTgwOiAqIFx0cmlnaHQgYmVmb3JlIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhlIGtlcm5lbCB3b3VsZCBoYXZlIGFscmVhZHlcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xODEtICogXHR2bWFsbG9jKCkmIzM5O2Qgc3BhY2UgZm9yIHRoZSBlbnRpcmUgbW9kdWxlIHRocm91Z2ggZmluaXRfbW9kdWxlKCkuIElmXG4tLVxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE4Ny0gKlx0b2YgdGhpcyBhbGxvY2F0ZWQgeWV0IGFub3RoZXIgcHJpdmF0ZSBrZXJuZWwgY29weSBvZiB0aGUgbW9kdWxlIHNwYWNlIGluXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTg4OiAqXHRsYXlvdXRfYW5kX2FsbG9jYXRlKCkgYnV0IGFmdGVyIHRoaXMgZGV0ZXJtaW5lZCBpbiBhZGRfdW5mb3JtZWRfbW9kdWxlKClcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xODktICpcdHRoYXQgYW5vdGhlciBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgbG9hZGVkIG9yIGJlaW5nIHByb2Nlc3NlZC5cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTEyPXN0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NDQtXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTQ1OnN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NDYte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0MzM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzQ3MC1cdC8qIEZpZ3VyZSBvdXQgbW9kdWxlIGxheW91dCwgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbWVtb3J5LiAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6MzQ3MTpcdG1vZCA9IGxheW91dF9hbmRfYWxsb2NhdGUoaW5mbywgZmxhZ3MpO1xua2VybmVsL21vZHVsZS9tYWluLmMtMzQ3Mi1cdGlmIChJU19FUlIobW9kKSkge1xuLS1cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy00Mi0gKiAgICAgIGZyb20ga2VybmVsX3JlYWRfZmlsZV9mcm9tX2ZkKCkgaXMgZnJlZWQgcmlnaHQgYXdheS5cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo0MzogKiAgIGMpIGxheW91dF9hbmRfYWxsb2NhdGUoKSBhbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBmaW5hbCByZXN0aW5nXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtNDQtICogICAgICBwbGFjZSB3aGVyZSB3ZSB3b3VsZCBrZWVwIHRoZSBtb2R1bGUgaWYgaXQgd2VyZSB0byBiZSBwcm9jZXNzZWRcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtODgtICogICBhKSBGQUlMX0RVUF9NT0RfQkVDT01JTkc6IGF0IHRoZSBlbmQgb2YgZWFybHlfbW9kX2NoZWNrKCkgYmVmb3JlXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6ODk6ICpcdGxheW91dF9hbmRfYWxsb2NhdGUoKS5cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05MC0gKlx0LSB3aXRoIG1vZHVsZSBkZWNvbXByZXNzaW9uOiAyIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05MS0gKlx0LSB3aXRob3V0IG1vZHVsZSBkZWNvbXByZXNzaW9uOiAxIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo5MjogKiAgIGIpIEZBSUxfRFVQX01PRF9MT0FEOiBhZnRlciBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgb24gYWRkX3VuZm9ybWVkX21vZHVsZSgpXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtOTMtICogICBcdC0gd2l0aCBtb2R1bGUgZGVjb21wcmVzc2lvbiAzIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM9MTAwPXN0YXRpYyBMSVNUX0hFQUQoZHVwX2ZhaWxlZF9tb2R1bGVzKTtcbi0tXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTM5LSAqICAgICBhdCB0aGUgZW5kIG9mIGVhcmx5X21vZF9jaGVjaygpIHByZXZlbnRzIGR1cGxpY2F0ZSBhbGxvY2F0aW9uc1xua2VybmVsL21vZHVsZS9zdGF0cy5jOjE0MDogKiAgICAgb24gbGF5b3V0X2FuZF9hbGxvY2F0ZSgpIGZvciBtb2R1bGVzIGFscmVhZHkgYmVpbmcgcHJvY2Vzc2VkLiBUaGVzZVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE0MS0gKiAgICAgZHVwbGljYXRlIGZhaWxlZCBtb2R1bGVzIGFyZSBub24tZmF0YWwsIGhvd2V2ZXIgdGhleSB0eXBpY2FsbHkgYXJlXG4tLVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE2Ni0gKiAgICAgaXMgdW5pcXVlLiAgQSBtb2R1bGUgY2FuIHN0aWxsIGZhaWwgdG8gbG9hZCBpZiB3ZSBkZXRlY3QgdGhlIG1vZHVsZSBpc1xua2VybmVsL21vZHVsZS9zdGF0cy5jOjE2NzogKiAgICAgbG9hZGVkIGFmdGVyIHdlIGFsbG9jYXRlIHNwYWNlIGZvciBpdCB3aXRoIGxheW91dF9hbmRfYWxsb2NhdGUoKSwgd2UgZG9cbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xNjgtICogICAgIHRoaXMgY2hlY2sgcmlnaHQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIG1vZHVsZSBhcyBsaXZlIGFuZCBydW4gaXRzXG4tLVxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4MC0gKiAgKiBmYWlsZWRfYmVjb21pbmc6IGhvdyBtYW55IG1vZHVsZXMgZmFpbGVkIGFmdGVyIHdlIGtlcm5lbF9yZWFkX2ZpbGVfZnJvbV9mZCgpXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MTgxOiAqICAgIGl0IGFuZCBiZWZvcmUgd2UgYWxsb2NhdGUgbWVtb3J5IGZvciBpdCB3aXRoIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhpc1xua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4Mi0gKiAgICBjb3VudGVyIGlzIG5ldmVyIGluY3JlbWVudGVkIGlmIHlvdSBtYW5hZ2UgdG8gdmFsaWRhdGUgdGhlIG1vZHVsZSBhbmRcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoxODM6ICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4NC0gKiAgKiBmYWlsZWRfbG9hZF9tb2R1bGVzOiBob3cgbWFueSBtb2R1bGVzIGZhaWxlZCBvbmNlIHdlJiMzOTt2ZSBhbGxvY2F0ZWQgb3VyXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MTg1OiAqICAgIHByaXZhdGUgc3BhY2UgZm9yIG91ciBtb2R1bGUgdXNpbmcgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpLiBUaGVzZSBmYWlsdXJlc1xua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4Ni0gKiAgICBzaG91bGQgaG9wZWZ1bGx5IG1vc3RseSBiZSBkZWFsdCB3aXRoIGFscmVhZHkuIFJhY2VzIGluIHRoZW9yeSBjb3VsZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEyMwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byBLZXJuZWwgTW9kdWxlIExvYWRpbmcqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGtlcm5lbCBtb2R1bGVzIGFyZSBsb2FkZWQsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBzeXN0ZW0gY2FsbCBsZXZlbC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYGZpbml0X21vZHVsZWAgYW5kIGBpbml0X21vZHVsZWAgYXJlIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZSDigJMgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCBzeXN0ZW0gY2FsbHMgZXhwb3NlZCB0byBhcHBsaWNhdGlvbnMgb3IsIGluIHRoaXMgY2FzZSwgYSBwcml2aWxlZ2VkIHByb2Nlc3MgbGlrZSBTeXprYWxsZXIuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3lzY2FsbHMgd29yayB1bmRlciB0aGUgaG9vZC4gU28sIG5leHQsIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBzeXNjYWxsIGVudHJ5cG9pbnRzIGluIHRoZSBrZXJuZWwgc291cmNlLCBwcm9iYWJseSBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBsaWtlbHkgaGFwcGVucyDigJMgd2hlcmUgdGhlIGtlcm5lbCBmaWd1cmVzIG91dCB3aGF0IHRvICpkbyogd2l0aCB0aG9zZSB1c2VyLXNwYWNlIGNvbW1hbmRzIHRvIGxvYWQgYSBtb2R1bGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FLiptb2R1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYz04MDI9c3RhdGljIHZvaWQgZnJlZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTgwMy1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjgwNDpTWVNDQUxMX0RFRklORTIoZGVsZXRlX21vZHVsZSwgY29uc3QgY2hhciBfX3VzZXIgKiwgbmFtZV91c2VyLFxua2VybmVsL21vZHVsZS9tYWluLmMtODA1LVx0XHR1bnNpZ25lZCBpbnQsIGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0MzM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1MC1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTE6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxua2VybmVsL21vZHVsZS9tYWluLmMtMzY1Mi1cdFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zNzk3PXN0YXRpYyBpbnQgaWRlbXBvdGVudF9pbml0X21vZHVsZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKiB1YXJncywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM4MTUtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozODE2OlNZU0NBTExfREVGSU5FMyhmaW5pdF9tb2R1bGUsIGludCwgZmQsIGNvbnN0IGNoYXIgX191c2VyICosIHVhcmdzLCBpbnQsIGZsYWdzKVxua2VybmVsL21vZHVsZS9tYWluLmMtMzgxNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Njk5CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBgYWxsb2NfdGFnLmNgIEZ1bmN0aW9uIFVzYWdlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGV4YW1pbmUgdGhlIGBhbGxvY190YWcuY2AgZmlsZSBkaXJlY3RseSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gaXQuIE15IHByaW1hcnkgdGFyZ2V0cyBhcmUgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGFuZCBgcmVsZWFzZV9tb2R1bGVfdGFnc2AuIEkgc2VlIHRoZXkmIzM5O3JlIGRlY2xhcmVkIGFzIHN0YXRpYyB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gTXkgbmV4dCBxdWVzdGlvbiBpcywgd2hlcmUgYXJlIHRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSAqdXNlZCo/IFdoYXQmIzM5O3MgdGhlIGNhbGwgcGF0aD8gVG8gZmlndXJlIHRoYXQgb3V0LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBjb2RldGFnIG1vZHVsZSBjYWxsYmFja3MuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHRyYWNpbmcgdGhlaXIgZXhlY3V0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb2RldGFnLmg9OTI9Ym9vbCBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTkzLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIHNpemUpO1xuaW5jbHVkZS9saW51eC9jb2RldGFnLmg6OTQ6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC05NS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmg9MTA3PXN0YXRpYyBpbmxpbmUgdm9pZCAqXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMDg6Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMDktXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGludCBwcmVwZW5kLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MTI9c3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyMS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjI6XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyMy1cdFx0XHRcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVx1MDAzZW1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi0tXG5saWIvY29kZXRhZy5jPTI1NT1ib29sIGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmxpYi9jb2RldGFnLmMtMjgyLVxubGliL2NvZGV0YWcuYzoyODM6dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG5saWIvY29kZXRhZy5jLTI4NC1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzU4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogYGNvZGV0YWcuY2AgYW5kIFNlY3Rpb24gQWxsb2NhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGxpYi9jb2RldGFnLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29kZSB0YWdzIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgZm9jdXNpbmcgb24gYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUga2V5IHRvIGhvdyB3ZSYjMzk7cmUgY2FydmluZyBvdXQgbWVtb3J5IGZvciB0aGVzZSB0YWdzIHdpdGhpbiB0aGUgbW9kdWxlIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgaXQmIzM5O3MgZG9uZSwgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzIHRoYXQgY291bGQgbGVhZCB0byBmcmFnbWVudGF0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIG91ciBjdXJyZW50IHRhZ2dpbmcgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb2RldGFnLmg9OTQ9dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTYtXHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFsaWduKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk3OnZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpO1xuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTgtdm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpO1xuLS1cbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTEwOD1jb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMTAtXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFsaWduKSB7IHJldHVybiBOVUxMOyB9XG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMTE6c3RhdGljIGlubGluZSB2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKSB7fVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTEyLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpIHt9XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MjkxMj1zdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTI0LVx0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjU6XHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTI2LVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzEtXHRcdGlmIChJU19FUlIoZGVzdCkpIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MzI6XHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTMzLVx0XHRcdHJldHVybiBQVFJfRVJSKGRlc3QpO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDU9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5ODgtXHRpZiAoZXJyKSB7XG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTg5Olx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OTAtXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MzAwMj1zdGF0aWMgdm9pZCBtb2R1bGVfZGVhbGxvY2F0ZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMzAwNS1cdG1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpO1xua2VybmVsL21vZHVsZS9tYWluLmM6MzAwNjpcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMDctXG4tLVxubGliL2NvZGV0YWcuYz0yODM9dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubGliL2NvZGV0YWcuYy0zMDctXG5saWIvY29kZXRhZy5jOjMwODp2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKVxubGliL2NvZGV0YWcuYy0zMDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMxNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgQ29kZXRhZyBNZW1vcnkgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGUgY29kZXRhZyBtb2R1bGUsIHNwZWNpZmljYWxseSBob3cgaXQgYWxsb2NhdGVzIGFuZCBmcmVlcyBzZWN0aW9ucy4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gIGFuZCBgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc2AuIEkga25vdyB0aGVzZSBhcmUgZXhwb3J0ZWQgb3IgZGVmaW5lZCB3aXRoaW4gYGxpYi9jb2RldGFnLmNgLiBOb3csIHRoZSBiZXN0IHBsYWNlIHRvIGp1bXAgaW4gaXMgcHJvYmFibHkgZGlyZWN0bHkgaW50byB0aGUgc291cmNlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaXNtcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIHRvIGBsaWIvY29kZXRhZy5jYCwgYW5kIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBsaW5lIDI4MyBvciBhcm91bmQgdGhhdCBhcmVhIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBpbnNwZWN0IHRoZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gbG9naWMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNzU6XHRcdFx0XHRicmVhaztcbiAyNzY6XHRcdFx0fVxuIDI3NzpcdFx0fVxuIDI3ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvZGV0YWdfbG9jayk7XG4gMjc5Olx0XG4gMjgwOlx0XHRyZXR1cm4gcmV0O1xuIDI4MTpcdH1cbiAyODI6XHRcbiAyODM6XHR2b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcbiAyODQ6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXG4gMjg1Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFsaWduKVxuIDI4NjpcdHtcbiAyODc6XHRcdGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IG5hbWUgJiM0Mzsgc3RybGVuKENPREVUQUdfU0VDVElPTl9QUkVGSVgpO1xuIDI4ODpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDI4OTpcdFx0dm9pZCAqcmV0ID0gRVJSX1BUUigtRUlOVkFMKTtcbiAyOTA6XHRcbiAyOTE6XHRcdG11dGV4X2xvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAyOTI6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3R0eXBlLCBcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XG4gMjkzOlx0XHRcdGlmIChzdHJjbXAodHlwZV9uYW1lLCBjdHR5cGUtXHUwMDNlZGVzYy5zZWN0aW9uKSA9PSAwKSB7XG4gMjk0Olx0XHRcdFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cdTAwM2VkZXNjLmFsbG9jX3NlY3Rpb25fbWVtKSlcbiAyOTU6XHRcdFx0XHRcdGJyZWFrO1xuIDI5NjpcdFxuIDI5NzpcdFx0XHRcdGRvd25fd3JpdGUoXHUwMDI2Y3R0eXBlLVx1MDAzZW1vZF9sb2NrKTtcbiAyOTg6XHRcdFx0XHRyZXQgPSBjdHR5cGUtXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbShtb2QsIHNpemUsIHByZXBlbmQsIGFsaWduKTtcbiAyOTk6XHRcdFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuIDMwMDpcdFx0XHRcdGJyZWFrO1xuIDMwMTpcdFx0XHR9XG4gMzAyOlx0XHR9XG4gMzAzOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMDQ6XHRcbiAzMDU6XHRcdHJldHVybiByZXQ7XG4gMzA2Olx0fVxuIDMwNzpcdFxuIDMwODpcdHZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpXG4gMzA5Olx0e1xuIDMxMDpcdFx0c3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlO1xuIDMxMTpcdFxuIDMxMjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuIDMxMzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcbiAzMTQ6XHRcdFx0aWYgKCFjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuIDMxNTpcdFx0XHRcdGNvbnRpbnVlO1xuIDMxNjpcdFxuIDMxNzpcdFx0XHRkb3duX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzE4Olx0XHRcdGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCBmYWxzZSk7XG4gMzE5Olx0XHRcdHVwX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4gMzIwOlx0XHR9XG4gMzIxOlx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29kZXRhZ19sb2NrKTtcbiAzMjI6XHR9XG4gMzIzOlx0XG4gMzI0Olx0dm9pZCBjb2RldGFnX21vZHVsZV9yZXBsYWNlZChzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBtb2R1bGUgKm5ld19tb2QpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3Mjg4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3RhZ2AgQWxsb2NhdGlvbiBNZWNoYW5pc20qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgYWxsb2NfdGFnYCBzdHVmZi4gVGhlIGNsdWUgSSBoYXZlIGlzIHRoYXQgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24sIGBjdHR5cGUtJmd0O2Rlc2MuYWxsb2Nfc2VjdGlvbl9tZW1gLCByZWxhdGVkIHRvIGBhbGxvY190YWdgLCBpcyByZWdpc3RlcmVkIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBNeSBuZXh0IG1vdmUsIG5hdHVyYWxseSwgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBleGFjdGx5IGBhbGxvY19zZWN0aW9uX21lbWAgaXMgYWN0dWFsbHkgKnNldCogd2l0aGluIHRoYXQgYG1tL2FsbG9jX3RhZy5jYCBmaWxlLiBHb3R0YSB0cmFjZSBpdHMgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGNvbmZpZ3VyZWQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zZWN0aW9uX21lbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9hbGxvY190YWcuYz0xMzM3PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMTM0My1cdFx0Lm5lZWRzX3NlY3Rpb25fbWVtXHQ9IG5lZWRzX3NlY3Rpb25fbWVtLFxubW0vYWxsb2NfdGFnLmM6MTM0NDpcdFx0LmFsbG9jX3NlY3Rpb25fbWVtXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXG5tbS9hbGxvY190YWcuYy0xMzQ1LVx0XHQuZnJlZV9zZWN0aW9uX21lbVx0PSByZWxlYXNlX21vZHVsZV90YWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTW9kdWxlIFBhdGNoIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSXQmIzM5O3MgZnVuZGFtZW50YWxseSBvdmVyaGF1bGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1vZHVsZSBsYXlvdXQgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBzcGVjaWZpYyBzZWN0aW9uIHR5cGVzLCBzcGVjaWZpY2FsbHkgdGhpbmdzIGxpa2UgY29kZXRhZyBhbmQgcGVyY3B1IHNlY3Rpb25zLiBJIHNlZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCB3aGljaCBpcyBub3cgY2FsbGVkICpiZWZvcmUqIHRoZSByZWd1bGFyIHNlY3Rpb24gbGF5b3V0IHByb2Nlc3MuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbWFya2luZyB0aGVzZSBzdGFuZGFsb25lIHNlY3Rpb25zIHdpdGggYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAsIGFuZCBpZiBhbGxvY2F0aW9uIGZhaWxzIGluIHRoZSB0YWcgcGF0aCB3aXRoIGBFQUdBSU5gLCBpdCBmYWxscyBiYWNrIHRvIGEgcmVndWxhciBhbGxvY2F0aW9uLiBUaGUgYG1vdmVfbW9kdWxlKClgIGZ1bmN0aW9uIGlzIHRoZW4gdXBkYXRlZCB0byBza2lwIHRoZSBzdGFuZGFsb25lIHNlY3Rpb25zLiBQZXJjcHUgc2VjdGlvbnMgYXJlIGFsc28gZ2V0dGluZyB0aGlzIHRyZWF0bWVudCwgdXNpbmcgYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgcmF0aGVyIHRoYW4gc29tZSBjdXN0b20gbG9naWMgZHVyaW5nIHJlbG9jYXRpb24uIEFuZCB0aGVyZSYjMzk7cyBhbHNvIGEgZmFsbGJhY2sgaW1wbGVtZW50ZWQsIHVzaW5nIGBFUlJfUFRSKC1FQUdBSU4pYCwgaW4gYG1tL2FsbG9jX3RhZy5jYCBpZiBgdGFnc19hZGRyZXNzYWJsZSgpYCBpc24mIzM5O3QgdHJ1ZSwgd2hpY2ggZm9yY2VzIHRoZSBtb2R1bGUgbG9hZGVyIHRvIHVzZSB0aGUgbm9ybWFsIGFsbG9jYXRpb24gcHJvY2Vzcy4KClRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBmdXp6aW5nISBJdCYjMzk7cyB0b3VjaGluZyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBsb2dpYyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBob3cgbWVtb3J5IGFsbG9jYXRpb24gdGFncyBhcmUgbWFuYWdlZCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gTW9kdWxlIGxvYWRpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMsIHdoaWNoIFN5emthbGxlciBhbHJlYWR5IHRhcmdldHMgd2l0aGluIFFFTVUgYW5kIEdDRSBlbnZpcm9ubWVudHMuCgpNeSB0aGlua2luZyBpcyB0aGF0IHRoZSBFTEYgcGFyc2luZywgc2VjdGlvbiBsYXlvdXQsIHJlbG9jYXRpb24gaGFuZGxpbmcsIHRoZSBmYWxsYmFjayBtZWNoYW5pc21zLCBhbmQgdGhlIGVycm9yIHVud2luZGluZyBsb2dpYyB3aGVuIGxvYWRpbmcgbW9kdWxlcyBhcmUgYWxsICpjcml0aWNhbCogY29kZSBwYXRocy4gVGhlc2UgYXJlIHByaW1lIHRhcmdldHMgZm9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MsIGxheW91dCBidWdzLCBzaXplIGNhbGN1bGF0aW9uIGVycm9ycywgb3IgZXZlbiB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXRpZXMuCgpTbywgbGV0JiMzOTtzIGZvY3VzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB6ZXJvaW5nIGluIG9uIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvciBmdW5jdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIG9idmlvdXM6IGBpbml0X21vZHVsZWAgKG9yIHBvc3NpYmx5IHRoZSBgX194NjRfc3lzX2luaXRfbW9kdWxlYCB2YXJpYXRpb25zKSwgYGZpbml0X21vZHVsZWAgLCBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAsIGFuZCBgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc2AuIFRoZXNlIGFyZSB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGFsc28gY2hlY2sgc3RhbmRhcmQgc3ltYm9sIG5hbWVzIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGBsaWIvY29kZXRhZy5jYCBhcyB3ZWxsLiBJJiMzOTtsbCBhbHNvIGxvb2sgYXQgYW55dGhpbmcgcmVsYXRlZCB0byByZWxvY2F0aW9uLCBzdWNoIGFzIGBhcHBseV9yZWxvY2F0ZV9hZGRgLiBJIGNhbiBwcm9iYWJseSB1c2UgYG5tYCBvciBTeXprYWxsZXImIzM5O3MgdGFyZ2V0aW5nIG1ldGhvZHMgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzIGluIHRoZSBrZXJuZWwgY29kZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIGZpbmQgYW55dGhpbmcgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCB0aGF0JiMzOTtzIG5vdCBzdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bXiBcXHQjXFwvXS4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDUzOTEgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yPW1lbnVjb25maWcgTU9EVUxFU1xuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05LVx0ICBwZXJtYW5lbnRseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwuICBZb3UgdXNlIHRoZSBcJiMzNDttb2Rwcm9iZVwmIzM0O1xua2VybmVsL21vZHVsZS9LY29uZmlnOjEwOlx0ICB0b29sIHRvIGFkZCAoYW5kIHNvbWV0aW1lcyByZW1vdmUpIHRoZW0uICBJZiB5b3Ugc2F5IFkgaGVyZSxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMS1cdCAgbWFueSBwYXJ0cyBvZiB0aGUga2VybmVsIGNhbiBiZSBidWlsdCBhcyBtb2R1bGVzIChieVxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOlx0ICBhbnN3ZXJpbmcgTSBpbnN0ZWFkIG9mIFkgd2hlcmUgaW5kaWNhdGVkKTogdGhpcyBpcyBtb3N0XG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTMtXHQgIHVzZWZ1bCBmb3IgaW5mcmVxdWVudGx5IHVzZWQgb3B0aW9ucyB3aGljaCBhcmUgbm90IHJlcXVpcmVkXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTE5LVx0ICB3aGVyZSBtb2Rwcm9iZSBjYW4gZmluZCB0aGVtICh5b3UgbWF5IG5lZWQgdG8gYmUgcm9vdCB0byBkb1xua2VybmVsL21vZHVsZS9LY29uZmlnOjIwOlx0ICB0aGlzKS5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yMS1cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9NjM9Y29uZmlnIE1PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTY2LVx0ICBNb2R1bGUgYXV0b2xvYWRpbmcgYWxsb3dzIGluLWtlcm5lbCBjb2RlIHRvIHJlcXVlc3QgbW9kdWxlcyB0aHJvdWdoXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Njc6XHQgIHRoZSAqcmVxdWVzdF9tb2R1bGUqKCkgQVBJIGNhbGxzLiBUaGlzIGluIHR1cm4ganVzdCBjYWxscyB1c2Vyc3BhY2Vcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02OC1cdCAgbW9kcHJvYmUuIEFsdGhvdWdoIG1vZHByb2JlIGNoZWNrcyB0byBzZWUgaWYgYSBtb2R1bGUgaXMgYWxyZWFkeVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy03MC1cdCAgd2hpY2ggbXVsdGlwbGUgZHVwbGljYXRlIHJlcXVlc3RzIGNhbiBlbmQgdXAgaW4gdXNlcnNwYWNlIGFuZCBtdWx0aXBsZVxua2VybmVsL21vZHVsZS9LY29uZmlnOjcxOlx0ICBtb2Rwcm9iZSBjYWxscyByYWNlIGNhbGxpbmcgZmluaXRfbW9kdWxlKCkgYXJvdW5kIHRoZSBzYW1lIHRpbWUgZm9yXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NzI6XHQgIGR1cGxpY2F0ZSBtb2R1bGVzLiBUaGUgZmluaXRfbW9kdWxlKCkgc3lzdGVtIGNhbGwgY2FuIGNvbnN1bWUgaW4gdGhlXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNzMtXHQgIHdvcnN0IGNhc2UgbW9yZSB0aGFuIHR3aWNlIHRoZSByZXNwZWN0aXZlIG1vZHVsZSBzaXplIGluIHZpcnR1YWxcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNzgtXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Nzk6XHQgIFRoaXMgZGVidWdnaW5nIGZhY2lsaXR5IHdpbGwgY3JlYXRlIHByX3dhcm4oKSBzcGxhdHMgZm9yIGR1cGxpY2F0ZVxua2VybmVsL21vZHVsZS9LY29uZmlnLTgwLVx0ICBtb2R1bGUgcmVxdWVzdHMgdG8gaGVscCBpZGVudGlmeSBpZiBtb2R1bGUgYXV0by1sb2FkaW5nIG1heSBiZSB0aGVcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODQtXHQgIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBtb2R1bGUgdG8gYSBzaW5nbGUgcmVxdWVzdC4gWW91IGNhbiBib290IHdpdGhcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo4NTpcdCAgdGhlIG1vZHVsZS5lbmFibGVfZHVwc190cmFjZT0xIGtlcm5lbCBwYXJhbWV0ZXIgdG8gdXNlIFdBUk5fT04oKVxua2VybmVsL21vZHVsZS9LY29uZmlnOjg2Olx0ICBpbnN0ZWFkIG9mIHRoZSBwcl93YXJuKCkuXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODctXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6ODg6XHQgIElmIHRoZSBmaXJzdCBtb2R1bGUgcmVxdWVzdCB1c2VkIHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpIHdlIGNhbm5vdFxua2VybmVsL21vZHVsZS9LY29uZmlnLTg5LVx0ICB1c2UgdGhhdCBhcyB0aGUgYW5jaG9yIHRvIHdhaXQgZm9yIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMsIHNpbmNlXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6OTA6XHQgIHVzZXJzIG9mIHJlcXVlc3RfbW9kdWxlKCkgZG8gd2FudCBhIHByb3BlciByZXR1cm4gdmFsdWUuIElmIGEgY2FsbFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkxOlx0ICBmb3IgdGhlIHNhbWUgbW9kdWxlIGhhcHBlbmVkIGVhcmxpZXIgd2l0aCByZXF1ZXN0X21vZHVsZSgpIHRob3VnaCxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo5MjpcdCAgdGhlbiBhIGR1cGxpY2F0ZSByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3b3VsZCBiZSBkZXRlY3RlZC4gVGhlXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6OTM6XHQgIG5vbi13YWl0IHJlcXVlc3RfbW9kdWxlKCkgY2FsbCBpcyBzeW5jaHJvbm91cyBhbmQgd2FpdHMgdW50aWwgbW9kcHJvYmVcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05NC1cdCAgY29tcGxldGVzLiBTdWJzZXF1ZW50IGF1dG8tbG9hZGluZyByZXF1ZXN0cyBmb3IgdGhlIHNhbWUgbW9kdWxlIGRvXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6OTU6XHQgIG5vdCB0cmlnZ2VyIGEgbmV3IGZpbml0X21vZHVsZSgpIGNhbGxzIGFuZCBkbyBub3Qgc3RyYWluIHZpcnR1YWxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05Ni1cdCAgbWVtb3J5LCBhbmQgc28gYXMgc29vbiBhcyBtb2Rwcm9iZSBzdWNjZXNzZnVsbHkgY29tcGxldGVzIHdlIHJlbW92ZVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMDItXHQgIGFidXNlIHdhcyBkdWUgdG8gbW9kdWxlIGF1dG8tbG9hZGluZy4gVGhlc2UgaXNzdWVzIGFyZSBjdXJyZW50bHkgb25seVxua2VybmVsL21vZHVsZS9LY29uZmlnOjEwMzpcdCAga25vd24gdG8gb2NjdXIgb24gc3lzdGVtcyB3aXRoIG1hbnkgQ1BVcyAob3ZlciA0MDApIGFuZCBpcyBsaWtlbHkgdGhlXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTA0LVx0ICByZXN1bHQgb2YgdWRldiBpc3N1aW5nIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMgZm9yIGVhY2ggQ1BVLCBhbmQgc29cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTEyPWNvbmZpZyBNT0RVTEVfREVCVUdfQVVUT0xPQURfRFVQU19UUkFDRVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMTYtXHQgIEVuYWJsaW5nIHRoaXMgd2lsbCBmb3JjZSBhIGZ1bGwgc3RhY2sgdHJhY2UgZm9yIGR1cGxpY2F0ZSBtb2R1bGVcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxMTc6XHQgIGF1dG8tbG9hZGluZyByZXF1ZXN0cyB1c2luZyBXQVJOX09OKCkgaW5zdGVhZCBvZiBwcl93YXJuKCkuIFlvdVxua2VybmVsL21vZHVsZS9LY29uZmlnLTExOC1cdCAgc2hvdWxkIGtlZXAgdGhpcyBkaXNhYmxlZCBhdCBhbGwgdGltZXMgdW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXJcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTI0PWNvbmZpZyBNT0RVTEVfRk9SQ0VfTE9BRFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMjgtXHQgIEFsbG93IGxvYWRpbmcgb2YgbW9kdWxlcyB3aXRob3V0IHZlcnNpb24gaW5mb3JtYXRpb24gKGllLiBtb2Rwcm9iZVxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOTpcdCAgLS1mb3JjZSkuICBGb3JjZWQgbW9kdWxlIGxvYWRpbmcgc2V0cyB0aGUgJiMzOTtGJiMzOTsgKGZvcmNlZCkgdGFpbnQgZmxhZyBhbmRcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzAtXHQgIGlzIHVzdWFsbHkgYSByZWFsbHkgYmFkIGlkZWEuXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTEzMj1jb25maWcgTU9EVUxFX1VOTE9BRFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzYtXHQgIG1vZHVsZXMgKG5vdGUgdGhhdCBzb21lIG1vZHVsZXMgbWF5IG5vdCBiZSB1bmxvYWRhYmxlXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MTM3Olx0ICBhbnl3YXkpLCB3aGljaCBtYWtlcyB5b3VyIGtlcm5lbCBzbWFsbGVyLCBmYXN0ZXJcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzgtXHQgIGFuZCBzaW1wbGVyLiAgSWYgdW5zdXJlLCBzYXkgWS5cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTQwPWNvbmZpZyBNT0RVTEVfRk9SQ0VfVU5MT0FEXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTE0Ni1cdCAgd2l0aG91dCB3YWl0aW5nIGZvciBhbnlvbmUgdG8gc3RvcCB1c2luZyBpdCAodXNpbmcgdGhlIC1mIG9wdGlvbiB0b1xua2VybmVsL21vZHVsZS9LY29uZmlnOjE0NzpcdCAgcm1tb2QpLiAgVGhpcyBpcyBtYWlubHkgZm9yIGtlcm5lbCBkZXZlbG9wZXJzIGFuZCBkZXNwZXJhdGUgdXNlcnMuXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTQ4LVx0ICBJZiB1bnN1cmUsIHNheSBOLlxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xNTA9Y29uZmlnIE1PRFVMRV9VTkxPQURfVEFJTlRfVFJBQ0tJTkdcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTU2LVx0ICBtb2R1bGUgdGhhdCB0YWludGVkIHRoZSBrZXJuZWwuIEluIGFkZGl0aW9uIHRvIGRpc3BsYXlpbmcgYVxua2VybmVsL21vZHVsZS9LY29uZmlnOjE1NzpcdCAgbGlzdCBvZiBsaW5rZWQgKG9yIGxvYWRlZCkgbW9kdWxlcyBlLmcuIG9uIGRldGVjdGlvbiBvZiBhIGJhZFxua2VybmVsL21vZHVsZS9LY29uZmlnOjE1ODpcdCAgcGFnZSAoc2VlIGJhZF9wYWdlKCkpLCB0aGUgYWZvcmVtZW50aW9uZWQgZGV0YWlscyBhcmUgYWxzb1xua2VybmVsL21vZHVsZS9LY29uZmlnLTE1OS1cdCAgc2hvd24uIElmIHVuc3VyZSwgc2F5IE4uXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTE2MT1jb25maWcgTU9EVkVSU0lPTlNcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTY3LVx0ICBjb21waWxlZCBmb3IgZGlmZmVyZW50IGtlcm5lbHMsIGJ5IGFkZGluZyBlbm91Z2ggaW5mb3JtYXRpb25cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNjg6XHQgIHRvIHRoZSBtb2R1bGVzIHRvIChob3BlZnVsbHkpIHNwb3QgYW55IGNoYW5nZXMgd2hpY2ggd291bGRcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xNjktXHQgIG1ha2UgdGhlbSBpbmNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsIHlvdSBhcmUgcnVubmluZy4gIElmXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTE4MT1jb25maWcgR0VOS1NZTVNcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxODI6XHRib29sIFwmIzM0O2dlbmtzeW1zIChmcm9tIHNvdXJjZSBjb2RlKVwmIzM0O1xua2VybmVsL21vZHVsZS9LY29uZmlnLTE4My1cdGhlbHBcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTg5PWNvbmZpZyBHRU5EV0FSRktTWU1TXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MTkwOlx0Ym9vbCBcJiMzNDtnZW5kd2FyZmtzeW1zIChmcm9tIGRlYnVnZ2luZyBpbmZvcm1hdGlvbilcJiMzNDtcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xOTEtXHRkZXBlbmRzIG9uIERFQlVHX0lORk9cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTk3LVx0IyBYODYsIHJlcXVpcmVzIHBhaG9sZSBiZWZvcmUgY29tbWl0IDQ3ZGNiNTM0ZTI1MyAoXCYjMzQ7YnRmX2VuY29kZXI6IFN0b3Bcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTg6XHQjIGluZGV4aW5nIHN5bWJvbHMgZm9yIFZBUnNcJiMzNDspIG9yIGFmdGVyIGNvbW1pdCA5ODEwNzU4MDAzY2UgKFwmIzM0O2J0Zl9lbmNvZGVyOlxua2VybmVsL21vZHVsZS9LY29uZmlnOjE5OTpcdCMgVmVyaWZ5IDAgYWRkcmVzcyBEV0FSRiB2YXJpYWJsZXMgYXJlIGluIEVMRiBzZWN0aW9uXCYjMzQ7KS5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yMDAtXHRkZXBlbmRzIG9uICFYODYgfHwgIURFQlVHX0lORk9fQlRGIHx8IFBBSE9MRV9WRVJTSU9OIFx1MDAzYyAxMjggfHwgUEFIT0xFX1ZFUlNJT04gXHUwMDNlIDEyOVxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yNDE9Y29uZmlnIE1PRFVMRV9TUkNWRVJTSU9OX0FMTFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yNDgtXHQgIG90aGVycyBzb21ldGltZXMgY2hhbmdlIHRoZSBtb2R1bGUgc291cmNlIHdpdGhvdXQgdXBkYXRpbmdcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoyNDk6XHQgIHRoZSB2ZXJzaW9uKS4gIFdpdGggdGhpcyBvcHRpb24sIHN1Y2ggYSBcJiMzNDtzcmN2ZXJzaW9uXCYjMzQ7IGZpZWxkXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMjUwLVx0ICB3aWxsIGJlIGNyZWF0ZWQgZm9yIGFsbCBtb2R1bGVzLiAgSWYgdW5zdXJlLCBzYXkgTi5cbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MjUyPWNvbmZpZyBNT0RVTEVfU0lHXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTI3MC1cdCAgbW9kdWxlIERPRVMgTk9UIGdldCBzdHJpcHBlZCBhZnRlciBiZWluZyBzaWduZWQuICBUaGlzIGluY2x1ZGVzIHRoZVxua2VybmVsL21vZHVsZS9LY29uZmlnOjI3MTpcdCAgZGVidWdpbmZvIHN0cmlwIGRvbmUgYnkgc29tZSBwYWNrYWdlcnMgKHN1Y2ggYXMgcnBtYnVpbGQpIGFuZFxua2VybmVsL21vZHVsZS9LY29uZmlnLTI3Mi1cdCAgaW5jbHVzaW9uIGludG8gYW4gaW5pdHJhbWZzIHRoYXQgd2FudHMgdGhlIG1vZHVsZSBzaXplIHJlZHVjZWQuXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnPTQwNj1jb25maWcgTU9EVUxFX0FMTE9XX01JU1NJTkdfTkFNRVNQQUNFX0lNUE9SVFNcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDA4LVx0aGVscFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQwOTpcdCAgU3ltYm9scyBleHBvcnRlZCB3aXRoIEVYUE9SVF9TWU1CT0xfTlMqKCkgYXJlIGNvbnNpZGVyZWQgZXhwb3J0ZWQgaW5cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MTAtXHQgIGEgbmFtZXNwYWNlLiBBIG1vZHVsZSB0aGF0IG1ha2VzIHVzZSBvZiBhIHN5bWJvbCBleHBvcnRlZCB3aXRoIHN1Y2ggYVxua2VybmVsL21vZHVsZS9LY29uZmlnOjQxMTpcdCAgbmFtZXNwYWNlIGlzIHJlcXVpcmVkIHRvIGltcG9ydCB0aGUgbmFtZXNwYWNlIHZpYSBNT0RVTEVfSU1QT1JUX05TKFwmIzM0O1wmIzM0OykuXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDEyLVx0ICBUaGVyZSBpcyBubyB0ZWNobmljYWwgcmVhc29uIHRvIGVuZm9yY2UgY29ycmVjdCBuYW1lc3BhY2UgaW1wb3J0cyxcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9NDE5PWNvbmZpZyBNT0RQUk9CRV9QQVRIXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTQyOC1cdCAgcmVtb3ZlcyB0aGUga2VybmVsJiMzOTtzIGFiaWxpdHkgdG8gcmVxdWVzdCBtb2R1bGVzIChidXRcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0Mjk6XHQgIHVzZXJzcGFjZSBjYW4gc3RpbGwgbG9hZCBtb2R1bGVzIGV4cGxpY2l0bHkpLlxua2VybmVsL21vZHVsZS9LY29uZmlnLTQzMC1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz00MzE9Y29uZmlnIFRSSU1fVU5VU0VEX0tTWU1TXG4tLVxua2VybmVsL21vZHVsZS9LY29uZmlnLTQzNC1cdCAgVGhlIGtlcm5lbCBhbmQgc29tZSBtb2R1bGVzIG1ha2UgbWFueSBzeW1ib2xzIGF2YWlsYWJsZSBmb3Jcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0MzU6XHQgIG90aGVyIG1vZHVsZXMgdG8gdXNlIHZpYSBFWFBPUlRfU1lNQk9MKCkgYW5kIHZhcmlhbnRzLiBEZXBlbmRpbmdcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MzYtXHQgIG9uIHRoZSBzZXQgb2YgbW9kdWxlcyBiZWluZyBzZWxlY3RlZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLFxuLS1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00NDAtXHQgIHRoZSBidWlsZC4gSW4gdHVybiwgdGhpcyBwcm92aWRlcyB0aGUgY29tcGlsZXIgbW9yZSBvcHBvcnR1bml0aWVzXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NDQxOlx0ICAoZXNwZWNpYWxseSB3aGVuIHVzaW5nIExUTykgZm9yIG9wdGltaXppbmcgdGhlIGNvZGUgYW5kIHJlZHVjaW5nXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDQyLVx0ICBiaW5hcnkgc2l6ZS4gIFRoaXMgbWlnaHQgaGF2ZSBzb21lIHNlY3VyaXR5IGFkdmFudGFnZXMgYXMgd2VsbC5cbi0tXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlPTEyPW9iai15ICYjNDM7PSBrbW9kLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTKSAmIzQzOz0gZHVwcy5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19NT0RVTEVfREVDT01QUkVTUykgJiM0Mzs9IGRlY29tcHJlc3Mub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTU9EVUxFX1NJRykgJiM0Mzs9IHNpZ25pbmcub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTElWRVBBVENIKSAmIzQzOz0gbGl2ZXBhdGNoLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01PRFVMRVNfVFJFRV9MT09LVVApICYjNDM7PSB0cmVlX2xvb2t1cC5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19ERUJVR19LTUVNTEVBSykgJiM0Mzs9IGRlYnVnX2ttZW1sZWFrLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0tBTExTWU1TKSAmIzQzOz0ga2FsbHN5bXMub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Nmcy5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19TWVNGUykgJiM0Mzs9IHN5c2ZzLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0tHREJfS0RCKSAmIzQzOz0ga2RiLm9cbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX01PRFZFUlNJT05TKSAmIzQzOz0gdmVyc2lvbi5vXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NT0RVTEVfVU5MT0FEX1RBSU5UX1RSQUNLSU5HKSAmIzQzOz0gdHJhY2tpbmcub1xua2VybmVsL21vZHVsZS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTU9EVUxFX1NUQVRTKSAmIzQzOz0gc3RhdHMub1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYz0xMj12b2lkIGttZW1sZWFrX2xvYWRfbW9kdWxlKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZCxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxMzpcdFx0XHQgIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTQte1xua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jLTE1LVx0Lyogb25seSBzY2FuIHdyaXRhYmxlLCBub24tZXhlY3V0YWJsZSBzZWN0aW9ucyAqL1xua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjE2Olx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNy1cdFx0aWYgKHR5cGUgIT0gTU9EX0RBVEEgXHUwMDI2XHUwMDI2IHR5cGUgIT0gTU9EX0lOSVRfREFUQSBcdTAwMjZcdTAwMjZcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxODpcdFx0ICAgICFtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveClcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxOTpcdFx0XHRrbWVtbGVha19ub19zY2FuKG1vZC1cdTAwM2VtZW1bdHlwZV0uYmFzZSk7XG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMjAtXHR9XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTYtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzpzdGF0aWMgaW50IG1vZHVsZV9leHRlbmRfbWF4X3BhZ2VzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBleHRlbnQpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xOC17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjItXHRuZXdfcGFnZXMgPSBrdnJlYWxsb2MoaW5mby1cdTAwM2VwYWdlcyxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzOlx0XHRcdCAgICAgIHNpemVfbXVsKG5ld19tYXgsIHNpemVvZigqaW5mby1cdTAwM2VwYWdlcykpLFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQ6XHRcdFx0ICAgICAgR0ZQX0tFUk5FTCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNTpcdGlmICghbmV3X3BhZ2VzKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjYtXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzQ6c3RhdGljIHN0cnVjdCBwYWdlICptb2R1bGVfZ2V0X25leHRfcGFnZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzUte1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM4LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mzk6XHRpZiAoaW5mby1cdTAwM2VtYXhfcGFnZXMgPT0gaW5mby1cdTAwM2V1c2VkX3BhZ2VzKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0MDpcdFx0ZXJyb3IgPSBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhpbmZvLCBpbmZvLVx1MDAzZXVzZWRfcGFnZXMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDE6XHRcdGlmIChlcnJvcilcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjQyOlx0XHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTQzLVx0fVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNDQtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0NTpcdHBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwgfCBfX0dGUF9ISUdITUVNKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjQ2Olx0aWYgKCFwYWdlKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDc6XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNDgtXG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNjItICovXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo2MzpzdGF0aWMgc2l6ZV90IG1vZHVsZV9nemlwX2hlYWRlcl9sZW4oY29uc3QgdTggKmJ1Ziwgc2l6ZV90IHNpemUpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy02NC17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNjctXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo2ODpcdGlmIChzaXplIFx1MDAzYyBsZW4gfHwgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy02OS1cdFx0cmV0dXJuIDA7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy03MC1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjcxOlx0aWYgKGJ1ZlszXSBcdTAwMjYgMHgwOCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNzItXHRcdGRvIHtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy03Ni1cdFx0XHQgKi9cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjc3Olx0XHRcdGlmIChsZW4gPT0gc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTc4LVx0XHRcdFx0cmV0dXJuIDA7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo3OTpcdFx0fSB3aGlsZSAoYnVmW2xlbiYjNDM7JiM0MztdICE9ICYjMzk7XFwwJiMzOTspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODAtXHR9XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9ODU9c3RhdGljIHNzaXplX3QgbW9kdWxlX2d6aXBfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6ODY6XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODcte1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTkzLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6OTQ6XHRnemlwX2hkcl9sZW4gPSBtb2R1bGVfZ3ppcF9oZWFkZXJfbGVuKGJ1Ziwgc2l6ZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo5NTpcdGlmICghZ3ppcF9oZHJfbGVuKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo5NjpcdFx0cHJfZXJyKFwmIzM0O25vdCBhIGd6aXAgY29tcHJlc3NlZCBtb2R1bGVcXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtOTctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEwMi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEwMzpcdHMud29ya3NwYWNlID0ga3ZtYWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwgR0ZQX0tFUk5FTCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDQ6XHRpZiAoIXMud29ya3NwYWNlKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTA1LVx0XHRyZXR1cm4gLUVOT01FTTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEwNi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEwNzpcdHJjID0gemxpYl9pbmZsYXRlSW5pdDIoXHUwMDI2cywgLU1BWF9XQklUUyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDg6XHRpZiAocmMgIT0gWl9PSykge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTA5Olx0XHRwcl9lcnIoXCYjMzQ7ZmFpbGVkIHRvIGluaXRpYWxpemUgZGVjb21wcmVzc29yOiAlZFxcblwmIzM0OywgcmMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTEwLVx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExNC1cdGRvIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExNTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtb2R1bGVfZ2V0X25leHRfcGFnZShpbmZvKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExNi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExNzpcdFx0aWYgKElTX0VSUihwYWdlKSkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTE4Olx0XHRcdHJldHZhbCA9IFBUUl9FUlIocGFnZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMTktXHRcdFx0Z290byBvdXRfaW5mbGF0ZV9lbmQ7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTIxLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTIyOlx0XHRzLm5leHRfb3V0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTIzLVx0XHRzLmF2YWlsX291dCA9IFBBR0VfU0laRTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEyNDpcdFx0cmMgPSB6bGliX2luZmxhdGUoXHUwMDI2cywgMCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMjU6XHRcdGt1bm1hcF9sb2NhbChzLm5leHRfb3V0KTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyNi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyNy1cdFx0bmV3X3NpemUgJiM0Mzs9IFBBR0VfU0laRSAtIHMuYXZhaWxfb3V0O1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTI4Olx0fSB3aGlsZSAocmMgPT0gWl9PSyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMjktXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzA6XHRpZiAocmMgIT0gWl9TVFJFQU1fRU5EKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzE6XHRcdHByX2VycihcJiMzNDtkZWNvbXByZXNzaW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxcblwmIzM0OywgcmMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTMyLVx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEzOC1vdXRfaW5mbGF0ZV9lbmQ6XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzk6XHR6bGliX2luZmxhdGVFbmQoXHUwMDI2cyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNDAtb3V0Olxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTQxOlx0a3ZmcmVlKHMud29ya3NwYWNlKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE0Mi1cdHJldHVybiByZXR2YWw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MTQ5PXN0YXRpYyBzc2l6ZV90IG1vZHVsZV94el9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNTA6XHRcdFx0XHQgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE1MS17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTU4LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTU5Olx0aWYgKHNpemUgXHUwMDNjIHNpemVvZihzaWduYXR1cmUpIHx8XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNjA6XHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2MTpcdFx0cHJfZXJyKFwmIzM0O25vdCBhbiB4eiBjb21wcmVzc2VkIG1vZHVsZVxcblwmIzM0Oyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNjItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE2NC1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2NTpcdHh6X2RlYyA9IHh6X2RlY19pbml0KFhaX0RZTkFMTE9DLCAodTMyKS0xKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2NjpcdGlmICgheHpfZGVjKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTY3LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNzMtXHRkbyB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzQ6XHRcdHN0cnVjdCBwYWdlICpwYWdlID0gbW9kdWxlX2dldF9uZXh0X3BhZ2UoaW5mbyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNzUtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzY6XHRcdGlmIChJU19FUlIocGFnZSkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE3NzpcdFx0XHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTc4LVx0XHRcdGdvdG8gb3V0O1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4MC1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE4MTpcdFx0eHpfYnVmLm91dCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4Mi1cdFx0eHpfYnVmLm91dF9wb3MgPSAwO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTgzLVx0XHR4el9idWYub3V0X3NpemUgPSBQQUdFX1NJWkU7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxODQ6XHRcdHh6X3JldCA9IHh6X2RlY19ydW4oeHpfZGVjLCBcdTAwMjZ4el9idWYpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTg1Olx0XHRrdW5tYXBfbG9jYWwoeHpfYnVmLm91dCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODYtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODctXHRcdG5ld19zaXplICYjNDM7PSB4el9idWYub3V0X3Bvcztcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE4ODpcdH0gd2hpbGUgKHh6X2J1Zi5vdXRfcG9zID09IFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgeHpfcmV0ID09IFhaX09LKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4OS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE5MDpcdGlmICh4el9yZXQgIT0gWFpfU1RSRUFNX0VORCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTkxOlx0XHRwcl9lcnIoXCYjMzQ7ZGVjb21wcmVzc2lvbiBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcXG5cJiMzNDssIHh6X3JldCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xOTItXHRcdHJldHZhbCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTk4LSBvdXQ6XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxOTk6XHR4el9kZWNfZW5kKHh6X2RlYyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMDAtXHRyZXR1cm4gcmV0dmFsO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jPTIwNz1zdGF0aWMgc3NpemVfdCBtb2R1bGVfenN0ZF9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMDg6XHRcdFx0XHQgICAgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSlcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIwOS17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjIwLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjIxOlx0aWYgKHNpemUgXHUwMDNjIHNpemVvZihzaWduYXR1cmUpIHx8XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMjI6XHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIyMzpcdFx0cHJfZXJyKFwmIzM0O25vdCBhIHpzdGQgY29tcHJlc3NlZCBtb2R1bGVcXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjI0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMzAtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzE6XHRyZXQgPSB6c3RkX2dldF9mcmFtZV9oZWFkZXIoXHUwMDI2aGVhZGVyLCB6c3RkX2J1Zi5zcmMsIHpzdGRfYnVmLnNpemUpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjMyOlx0aWYgKHJldCAhPSAwKSB7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzM6XHRcdHByX2VycihcJiMzNDtaU1RELWNvbXByZXNzZWQgZGF0YSBoYXMgYW4gaW5jb21wbGV0ZSBmcmFtZSBoZWFkZXJcXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjM0LVx0XHRyZXR2YWwgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIzNi1cdH1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzNzpcdGlmIChoZWFkZXIud2luZG93U2l6ZSBcdTAwM2UgKDEgXHUwMDNjXHUwMDNjIFpTVERfV0lORE9XTE9HX01BWCkpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzODpcdFx0cHJfZXJyKFwmIzM0O1pTVEQtY29tcHJlc3NlZCBkYXRhIGhhcyB0b28gbGFyZ2UgYSB3aW5kb3cgc2l6ZVxcblwmIzM0Oyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMzktXHRcdHJldHZhbCA9IC1FSU5WQUw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjQyLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQzOlx0d2tzcF9zaXplID0genN0ZF9kc3RyZWFtX3dvcmtzcGFjZV9ib3VuZChoZWFkZXIud2luZG93U2l6ZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNDQ6XHR3a3NwID0ga3ZtYWxsb2Mod2tzcF9zaXplLCBHRlBfS0VSTkVMKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI0NTpcdGlmICghd2tzcCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjQ2LVx0XHRyZXR2YWwgPSAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI0OS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1MDpcdGRzdHJlYW0gPSB6c3RkX2luaXRfZHN0cmVhbShoZWFkZXIud2luZG93U2l6ZSwgd2tzcCwgd2tzcF9zaXplKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1MTpcdGlmICghZHN0cmVhbSkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjUyOlx0XHRwcl9lcnIoXCYjMzQ7Q2FuJiMzOTt0IGluaXRpYWxpemUgWlNURCBzdHJlYW1cXG5cJiMzNDspO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjUzLVx0XHRyZXR2YWwgPSAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI1Ny1cdGRvIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1ODpcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBtb2R1bGVfZ2V0X25leHRfcGFnZShpbmZvKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI1OS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI2MDpcdFx0aWYgKElTX0VSUihwYWdlKSkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjYxOlx0XHRcdHJldHZhbCA9IFBUUl9FUlIocGFnZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNjItXHRcdFx0Z290byBvdXQ7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjY0LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjY1Olx0XHR6c3RkX2RlYy5kc3QgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNjYtXHRcdHpzdGRfZGVjLnBvcyA9IDA7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjY4LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjY5Olx0XHRyZXQgPSB6c3RkX2RlY29tcHJlc3Nfc3RyZWFtKGRzdHJlYW0sIFx1MDAyNnpzdGRfZGVjLCBcdTAwMjZ6c3RkX2J1Zik7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzA6XHRcdGt1bm1hcF9sb2NhbCh6c3RkX2RlYy5kc3QpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjcxOlx0XHRyZXR2YWwgPSB6c3RkX2dldF9lcnJvcl9jb2RlKHJldCk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzI6XHRcdGlmIChyZXR2YWwpXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzMtXHRcdFx0YnJlYWs7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjc1LVx0XHRuZXdfc2l6ZSAmIzQzOz0genN0ZF9kZWMucG9zO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc2Olx0fSB3aGlsZSAoenN0ZF9kZWMucG9zID09IFBBR0VfU0laRSBcdTAwMjZcdTAwMjYgcmV0ICE9IDApO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjc3LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc4Olx0aWYgKHJldHZhbCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc5Olx0XHRwcl9lcnIoXCYjMzQ7WlNURC1kZWNvbXByZXNzaW9uIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxcblwmIzM0OywgcmV0dmFsKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI4MC1cdFx0cmV0dmFsID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yODYtIG91dDpcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI4NzpcdGt2ZnJlZSh3a3NwKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI4OC1cdHJldHVybiByZXR2YWw7XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjkzLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjk0OmludCBtb2R1bGVfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjk1LXtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMDctXHQgKi9cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMwODpcdG5fcGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgUEFHRV9TSVpFKSAqIDI7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMDk6XHRlcnJvciA9IG1vZHVsZV9leHRlbmRfbWF4X3BhZ2VzKGluZm8sIG5fcGFnZXMpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzEwOlx0aWYgKGVycm9yKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzExLVx0XHRyZXR1cm4gZXJyb3I7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMTItXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTM6XHRkYXRhX3NpemUgPSBNT0RVTEVfREVDT01QUkVTU19GTihpbmZvLCBidWYsIHNpemUpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzE0Olx0aWYgKGRhdGFfc2l6ZSBcdTAwM2MgMCkge1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzE1LVx0XHRlcnJvciA9IGRhdGFfc2l6ZTtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMTgtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTk6XHRpbmZvLVx1MDAzZWhkciA9IHZtYXAoaW5mby1cdTAwM2VwYWdlcywgaW5mby1cdTAwM2V1c2VkX3BhZ2VzLCBWTV9NQVAsIFBBR0VfS0VSTkVMKTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMyMDpcdGlmICghaW5mby1cdTAwM2VoZHIpIHtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMyMS1cdFx0ZXJyb3IgPSAtRU5PTUVNO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMyOC1lcnI6XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMjk6XHRtb2R1bGVfZGVjb21wcmVzc19jbGVhbnVwKGluZm8pO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzMwLVx0cmV0dXJuIGVycm9yO1xuLS1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzMi1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMzMzp2b2lkIG1vZHVsZV9kZWNvbXByZXNzX2NsZWFudXAoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzNC17XG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM2LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzM3Olx0aWYgKGluZm8tXHUwMDNlaGRyKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzM4Olx0XHR2dW5tYXAoaW5mby1cdTAwM2VoZHIpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM5LVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzQwOlx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2V1c2VkX3BhZ2VzOyBpJiM0MzsmIzQzOylcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MTpcdFx0X19mcmVlX3BhZ2UoaW5mby1cdTAwM2VwYWdlc1tpXSk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNDItXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNDM6XHRrdmZyZWUoaW5mby1cdTAwM2VwYWdlcyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNDQtXG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MzUwPXN0YXRpYyBzc2l6ZV90IGNvbXByZXNzaW9uX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTE6XHRcdFx0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1Mi17XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTM6XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIF9fc3RyaW5naWZ5KE1PRFVMRV9DT01QUkVTU0lPTikgXCYjMzQ7XFxuXCYjMzQ7KTtcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1NC19XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTUtXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTY6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBtb2R1bGVfY29tcHJlc3Npb25fYXR0ciA9IF9fQVRUUl9STyhjb21wcmVzc2lvbik7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTctXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTg6c3RhdGljIGludCBfX2luaXQgbW9kdWxlX2RlY29tcHJlc3Nfc3lzZnNfaW5pdCh2b2lkKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzU5LXtcbi0tXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjItXHRlcnJvciA9IHN5c2ZzX2NyZWF0ZV9maWxlKFx1MDAyNm1vZHVsZV9rc2V0LVx1MDAzZWtvYmosXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNjM6XHRcdFx0XHQgIFx1MDAyNm1vZHVsZV9jb21wcmVzc2lvbl9hdHRyLmF0dHIpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzY0Olx0aWYgKGVycm9yKVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzY1Olx0XHRwcl93YXJuKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgJiMzOTtjb21wcmVzc2lvbiYjMzk7IGF0dHJpYnV0ZVwmIzM0Oyk7XG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjYtXG4tLVxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzY4LX1cbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM2OTpsYXRlX2luaXRjYWxsKG1vZHVsZV9kZWNvbXByZXNzX3N5c2ZzX2luaXQpO1xua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzcwLSNlbmRpZlxuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTMwLSNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCBcJiMzNDttb2R1bGUuXCYjMzQ7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozMTpzdGF0aWMgYm9vbCBlbmFibGVfZHVwc190cmFjZSA9IElTX0VOQUJMRUQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTX1RSQUNFKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjMyOm1vZHVsZV9wYXJhbShlbmFibGVfZHVwc190cmFjZSwgYm9vbF9lbmFibGVfb25seSwgMDY0NCk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0zMy1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTM0LS8qIEEgbXV0ZXgtcHJvdGVjdGVkIGxpc3Qgb2YgYWN0aXZlIGttb2QgcmVxdWVzdHMuICovXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozNTpzdGF0aWMgREVGSU5FX01VVEVYKGttb2RfZHVwX211dGV4KTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjM2OnN0YXRpYyBMSVNUX0hFQUQoZHVwX2ttb2RfcmVxcyk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0zNy1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jPTM4PXN0cnVjdCBrbW9kX2R1cF9yZXEge1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTQ2LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NDc6c3RhdGljIHZvaWQgZ2V0X2ttb2RfcmVxKHN0cnVjdCBrbW9kX2R1cF9yZXEgKmttb2RfcmVxKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNDgte1xua2VybmVsL21vZHVsZS9kdXBzLmM6NDk6XHRyZWZjb3VudF9pbmMoXHUwMDI2a21vZF9yZXEtXHUwMDNlcmVmY291bnQpO1xua2VybmVsL21vZHVsZS9kdXBzLmMtNTAtfVxua2VybmVsL21vZHVsZS9kdXBzLmMtNTEtXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1MjpzdGF0aWMgdm9pZCBwdXRfa21vZF9yZXEoc3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy01My17XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1NDpcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2a21vZF9yZXEtXHUwMDNlcmVmY291bnQpKVxua2VybmVsL21vZHVsZS9kdXBzLmM6NTU6XHRcdGtmcmVlKGttb2RfcmVxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU2LX1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU3LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NTg6REVGSU5FX0ZSRUUocHV0X2ttb2RfcmVxLCBzdHJ1Y3Qga21vZF9kdXBfcmVxICosIGlmIChfVCkgcHV0X2ttb2RfcmVxKF9UKSlcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU5LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NjA6c3RhdGljIHN0cnVjdCBrbW9kX2R1cF9yZXEgKmttb2RfZHVwX3JlcXVlc3RfbG9va3VwKGNoYXIgKm1vZHVsZV9uYW1lKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNjEte1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTYzLVxua2VybmVsL21vZHVsZS9kdXBzLmM6NjQ6XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmttb2RfZHVwX211dGV4KTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTY1LVxua2VybmVsL21vZHVsZS9kdXBzLmM6NjY6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGttb2RfcmVxLCBcdTAwMjZkdXBfa21vZF9yZXFzLCBsaXN0KSB7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo2NzpcdFx0aWYgKCFzdHJjbXAoa21vZF9yZXEtXHUwMDNlbmFtZSwgbW9kdWxlX25hbWUpKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNjgtXHRcdFx0cmV0dXJuIGttb2RfcmVxO1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTczLVxua2VybmVsL21vZHVsZS9kdXBzLmM6NzQ6c3RhdGljIHZvaWQga21vZF9kdXBfcmVxdWVzdF9kZWxldGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxua2VybmVsL21vZHVsZS9kdXBzLmMtNzUte1xua2VybmVsL21vZHVsZS9kdXBzLmMtNzYtXHRzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX3JlcTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjc3Olx0a21vZF9yZXEgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3Qga21vZF9kdXBfcmVxLCBkZWxldGVfd29yayk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy03OC1cbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy04My1cdCAqIG1vZHVsZSBpcyBsb2FkZWQgc28gd2lsbCBqdXN0IHJldHVybiAwIHJpZ2h0IGF3YXkuIFRoZXJlIGlzIHN0aWxsXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo4NDpcdCAqIGEgc21hbGwgY2hhbmNlIHJpZ2h0IGFmdGVyIHdlIGRlbGV0ZSB0aGlzIGVudHJ5IG5ldyByZXF1ZXN0X21vZHVsZSgpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy04NS1cdCAqIGNhbGxzIG1heSBoYXBwZW4gYWZ0ZXIgdGhhdCwgdGhleSBjYW4gaGFwcGVuLiBUaGVzZSBoZXVyaXN0aWNzXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo4NjpcdCAqIGFyZSB0byBwcm90ZWN0IGZpbml0X21vZHVsZSgpIGFidXNlIGZvciBhdXRvLWxvYWRpbmcsIGlmIG1vZHVsZXNcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTg3LVx0ICogYXJlIHN0aWxsIHRyeWlnbiB0byBhdXRvLWxvYWQgZXZlbiBpZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGxvYWRlZCxcbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05MS1cdCAqL1xua2VybmVsL21vZHVsZS9kdXBzLmM6OTI6XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNmttb2RfZHVwX211dGV4KVxua2VybmVsL21vZHVsZS9kdXBzLmM6OTM6XHRcdGxpc3RfZGVsKFx1MDAyNmttb2RfcmVxLVx1MDAzZWxpc3QpO1xua2VybmVsL21vZHVsZS9kdXBzLmMtOTQtXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo5NTpcdHB1dF9rbW9kX3JlcShrbW9kX3JlcSk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05Ni19XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05Ny1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjk4OnN0YXRpYyBzdHJ1Y3Qga21vZF9kdXBfcmVxICphbGxvY19rbW9kX3JlcShjb25zdCBjaGFyICptb2R1bGVfbmFtZSlcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTk5LXtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwMDpcdHN0cnVjdCBrbW9kX2R1cF9yZXEgKmttb2RfcmVxID0ga3phbGxvY19vYmooKmttb2RfcmVxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEwMS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwMjpcdGlmICgha21vZF9yZXEpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMDMtXHRcdHJldHVybiBOVUxMO1xua2VybmVsL21vZHVsZS9kdXBzLmMtMTA0LVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTA1Olx0cmVmY291bnRfc2V0KFx1MDAyNmttb2RfcmVxLVx1MDAzZXJlZmNvdW50LCAxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwNjpcdHN0cnNjcHkoa21vZF9yZXEtXHUwMDNlbmFtZSwgbW9kdWxlX25hbWUpO1xua2VybmVsL21vZHVsZS9kdXBzLmM6MTA3Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2a21vZF9yZXEtXHUwMDNlZGVsZXRlX3dvcmssIGttb2RfZHVwX3JlcXVlc3RfZGVsZXRlKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwODpcdGluaXRfY29tcGxldGlvbihcdTAwMjZrbW9kX3JlcS1cdTAwM2VmaXJzdF9yZXFfZG9uZSk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMDktXHRyZXR1cm4ga21vZF9yZXE7XG4tLVxua2VybmVsL21vZHVsZS9kdXBzLmMtMTExLVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTEyOmJvb2wga21vZF9kdXBfcmVxdWVzdF9leGlzdHNfd2FpdChjaGFyICptb2R1bGVfbmFtZSwgYm9vbCB3YWl0LCBpbnQgKmR1cF9yZXQpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMTMte1xua2VybmVsL21vZHVsZS9kdXBzLmM6MTE0Olx0c3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEgX19mcmVlKHB1dF9rbW9kX3JlcSkgPSBOVUxMO1xua2VybmVsL21vZHVsZS9kdXBzLmMtMTE1LVx0aW50IHJldDtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExNi1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjExNzpcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2a21vZF9kdXBfbXV0ZXgpIHtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExOC1cdFx0c3RydWN0IGttb2RfZHVwX3JlcSAqbmV3X2ttb2RfcmVxO1xua2VybmVsL21vZHVsZS9kdXBzLmMtMTE5LVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTIwOlx0XHRrbW9kX3JlcSA9IGttb2RfZHVwX3JlcXVlc3RfbG9va3VwKG1vZHVsZV9uYW1lKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEyMTpcdFx0aWYgKGttb2RfcmVxKSB7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMjI6XHRcdFx0Z2V0X2ttb2RfcmVxKGttb2RfcmVxKTtcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEyMy1cdFx0XHRicmVhaztcbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMjctXHRcdCAqIElmIHRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgY2FtZSB0aHJvdWdoIGZvciBhIG1vZHVsZVxua2VybmVsL21vZHVsZS9kdXBzLmM6MTI4Olx0XHQgKiB3YXMgd2l0aCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3ZSBjYW5ub3Qgd2FpdCBmb3IgaXRcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEyOS1cdFx0ICogYW5kIHNoYXJlIGl0cyByZXR1cm4gdmFsdWUgd2l0aCBvdGhlciB1c2VycyB3aGljaCBtYXlcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEzMDpcdFx0ICogaGF2ZSB1c2VkIHJlcXVlc3RfbW9kdWxlKCkgYW5kIG5lZWQgYSBwcm9wZXIgcmV0dXJuIHZhbHVlXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzEtXHRcdCAqIHNvIGp1c3Qgc2tpcCB1c2luZyB0aGVtIGFzIGFuIGFuY2hvci5cbi0tXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzMtXHRcdCAqIElmIGEgcHJpb3IgcmVxdWVzdCB0byB0aGlzIG9uZSBjYW1lIHRocm91Z2ggd2l0aFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTM0Olx0XHQgKiByZXF1ZXN0X21vZHVsZSgpIHRob3VnaCwgdGhlbiBhIHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzUtXHRcdCAqIHdvdWxkIGJlbmVmaXQgZnJvbSBkdXBsaWNhdGUgZGV0ZWN0aW9uLlxua2VybmVsL21vZHVsZS9kdXBzLmMtMTM2LVx0XHQgKi9cbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEzNzpcdFx0aWYgKCF3YWl0KSB7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMzg6XHRcdFx0cHJfZGVidWcoXCYjMzQ7TmV3IHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpIGZvciAlcyAtLSBjYW5ub3QgdHJhY2sgZHVwbGljYXRlcyBmb3IgdGhpcyByZXF1ZXN0XFxuXCYjMzQ7LCBtb2R1bGVfbmFtZSk7XG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzktXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTE0NS1cdFx0ICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4OTkKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQ6IEtlcm5lbCBNb2R1bGUgTG9hZGluZyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUgcHJpbWFyaWx5IHdpdGhpbiBga2VybmVsL21vZHVsZS9tYWluLmNg4oCUZnVuY3Rpb25zIGxpa2UgYGluaXRfbW9kdWxlYCwgYGZpbml0X21vZHVsZWAsIGFuZCBgZGVsZXRlX21vZHVsZWDigJRhbG9uZyB3aXRoIGBsaWIvY29kZXRhZy5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY29kZXRhZyBhbGxvY2F0aW9uIChgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAsIGBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zYCwgYW5kIGBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uYCkuIFRoaXMgcG9pbnRzIHRvIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgRUxGIG1vZHVsZSBwYXJzaW5nIGFuZCBtb2R1bGUgbGlmZWN5Y2xlLgoKTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb25zLiBgTU9EVUxFU2AgaXMgYSBnaXZlbiwgZXNzZW50aWFsIGZvciBtb2R1bGUgbG9hZGluZy4gSG93ZXZlciwgdGhlIGNyaXRpY2FsIG9uZSBoZXJlIGlzIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCBiZWNhdXNlIGl0IGJyaW5ncyBpbiBhbGxvY190YWcgY29kZXRhZyBzdXBwb3J0LCB0aHVzIGBDT0RFX1RBR0dJTkdgLCBgUEFHRV9FWFRFTlNJT05gLCBhbmQgYFNMQUJfT0JKX0VYVGAuIEkmIzM5O2xsIGNyb3NzLXJlZmVyZW5jZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIGNvbmZpcm0gdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kcyBvbiBgTU1VYCBhbmQgYFBST0NfRlNgLgoKTm93LCBkaWdnaW5nIGludG8gdGhlIGBXb3J0aEZ1enppbmdgIGFzc2Vzc21lbnQ6IHRoZSBjaGFuZ2VzIHRvdWNoIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtb2R1bGUgbG9hZGluZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCBob3cgRUxGIHNlY3Rpb25zIGFyZSBoYW5kbGVkLCBhbmQgdGhlIHJlbG9jYXRpb24gb2YgY29kZXRhZ3MgYW5kIHBlci1jcHUgc2VjdGlvbnMgaXMgY3J1Y2lhbC4gVGhlIG1vZGlmaWNhdGlvbnMgZW5jb21wYXNzIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBFTEYgc2VjdGlvbiBsYXlvdXQgKGBfX2xheW91dF9zZWN0aW9uc2AsIGBtb3ZlX21vZHVsZWAsIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYCwgYW5kIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCkgd2hpY2ggcmVsYXRlcyB0byBob3cgY29kZXRhZ3MgYW5kIHBlci1jcHUgc2VjdGlvbnMgYXJlIHRyYWNrZWQgYW5kIHJlbG9jYXRlZCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcuIE1lbW9yeSByZXNlcnZhdGlvbiBhbmQgcmVsZWFzZSB2aWEgYGFsbG9jX3RhZy5jYCwgYW5kIHRoZSBmYWxsYmFjayBoYW5kbGluZyBpZiB0YWdzIGFyZW4mIzM5O3QgYWRkcmVzc2FibGUsIHdoaWNoIGFyZSBrZXkgZHVyaW5nIGxvYWRpbmcgYW5kIHVubG9hZGluZy4KClRoaXMgZGlyZWN0bHkgaW1wbGljYXRlcyBob3cgRUxGIG1vZHVsZXMgYXJlIHBhcnNlZCwgbWVtb3J5IGFsbG9jYXRlZCwgYW5kIGluaXRpYWxpemVkL2NsZWFuZWQgdXAgd2hlbiBhIG1vZHVsZSBsb2Fkcy4gYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4KClRoZXJlZm9yZSwgdGhpcyBpcyAqYWJzb2x1dGVseSogd29ydGggZnV6emluZy4gSSYjMzk7bGwgZmxhZyBgV29ydGhGdXp6aW5nYCBhcyBgdHJ1ZWAgYW5kIHRoZSByZWFzb25pbmcgaXMgY29uY2lzZTogV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtb2R1bGUgbG9hZGluZyBsb2dpYywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiBFTEYgc2VjdGlvbnMgYW5kIGNvZGV0YWdzIGR1cmluZyBtb2R1bGUgbGlmZWN5Y2xlLgoKVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTogYGluaXRfbW9kdWxlYCwgYGZpbml0X21vZHVsZWAsIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCwgYW5kIGBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zYC4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgTU9EVUxFU2AgYW5kIGBNRU1fQUxMT0NfUFJPRklMSU5HYC4KCkkmIzM5O3ZlIHZlcmlmaWVkIGV2ZXJ5dGhpbmcg4oCTIGl0JiMzOTtzIGFsbCBhY2N1cmF0ZSBhbmQgY29uc2lzdGVudC4gVGltZSB0byBzZXQgdGhlIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT0RVTEVTJiMzNDssCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtmaW5pdF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbiYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgY29yZSBrZXJuZWwgbW9kdWxlIGxvYWRpbmcgYW5kIGxheW91dCBsb2dpYyBmb3Igc3RhbmRhbG9uZSBzZWN0aW9ucyAocGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZ3MvYWxsb2MgdGFncykgYXMgd2VsbCBhcyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFnIHJlc2VydmF0aW9uIGZhbGxiYWNrIGhhbmRsaW5nIHdoZW4gdGFncyBhcmUgbm90IGFkZHJlc3NhYmxlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBsb2FkaW5nIHN5c2NhbGxzIChpbml0X21vZHVsZSBhbmQgZmluaXRfbW9kdWxlKSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luaXRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2Zpbml0X21vZHVsZSYjMzQ7LAogICAgJiMzNDtjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRUxGIHNlY3Rpb24gbGF5b3V0IGFuZCBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzdGFuZGFsb25lIG1vZHVsZSBzZWN0aW9ucyAoc3VjaCBhcyBwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFnL2FsbG9jX3RhZyBzZWN0aW9ucykgZHVyaW5nIG1vZHVsZSBsb2FkaW5nIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGFkanVzdHMgZXJyb3IgaGFuZGxpbmcgaW4gYG1tL2FsbG9jX3RhZy5jYC5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgbGVhdmUgc3RydWN0dXJlIHBhZGRpbmdzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gVGhlIHNlY3Rpb24gZGF0YSBjb3BpZWQgdmlhIGBtZW1jcHkoKWAgb3JpZ2luYXRlcyBmcm9tIGFscmVhZHktbG9hZGVkIEVMRiBpbWFnZSBidWZmZXJzLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5ZDcxMTRmODlmMmFmNzhmZWFkMzk3NjBlM2NlZmJjYTIxMWEyNDllCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAwMDoyOTowNiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IDk2Y2M5ODU2OGVlYTUuLjBjNmYzMmRkY2JmMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMzI1LDYgJiM0MzszMjUsOCBAQCBlbnVtIG1vZF9tZW1fdHlwZSB7CiAJTU9EX0lOSVRfUk9EQVRBLAogCiAJTU9EX01FTV9OVU1fVFlQRVMsCiYjNDM7CiYjNDM7CU1PRF9TVEFOREFMT05FID0gLTIsCiAJTU9EX0lOVkFMSUQgPSAtMSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaCBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaAppbmRleCAwNjExNjFjYzc5ZDkwLi40YzczODA3NGEyN2I4IDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oCkBAIC0yOSw2ICYjNDM7MjksMTQgQEAKICNkZWZpbmUgU0hfRU5UU0laRV9UWVBFX01BU0sJKCgxVUwgJmx0OyZsdDsgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSkKICNkZWZpbmUgU0hfRU5UU0laRV9PRkZTRVRfTUFTSwkoKDFVTCAmbHQ7Jmx0OyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKQogCiYjNDM7LyoKJiM0MzsgKiBNYXJrZXIgZm9yIHNlY3Rpb25zIHdpdGggYSBzZXBhcmF0ZSBhbGxvY2F0aW9uLCB3aGljaCBhcmUgbm90IHBsYWNlZAomIzQzOyAqIGludG8gbW9kLSZndDttZW1bXS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFNIX0VOVFNJWkVfU1RBTkRBTE9ORQkJCQkJXAomIzQzOwkoKCh1bnNpZ25lZCBsb25nKU1PRF9TVEFOREFMT05FICZhbXA7IFNIX0VOVFNJWkVfVFlQRV9NQVNLKQlcCiYjNDM7CSAmbHQ7Jmx0OyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQpCiYjNDM7CiAvKiBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4gYnkgbW9kdWxlX2ZsYWdzKCkgKi8KICNkZWZpbmUgTU9EVUxFX0ZMQUdTX0JVRl9TSVpFIChUQUlOVF9GTEFHU19DT1VOVCAmIzQzOyA0KQogCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IGMxYjM0ZGMxZTg5YWMuLjc2MDQ0OWRkYWIyMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0xNjE3LDE0ICYjNDM7MTYxNyw4IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogCQlpZiAoaW5mb3NlYyAmZ3Q7PSBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW0pCiAJCQljb250aW51ZTsKIAotCQkvKgotCQkgKiBEb24mIzM5O3QgYm90aGVyIHdpdGggbm9uLWFsbG9jYXRlZCBzZWN0aW9ucy4KLQkJICogQW4gZXhjZXB0aW9uIGlzIHRoZSBwZXJjcHUgc2VjdGlvbiwgd2hpY2ggaGFzIHNlcGFyYXRlIGFsbG9jYXRpb25zCi0JCSAqIGZvciBpbmRpdmlkdWFsIENQVXMuIFdlIHJlbG9jYXRlIHRoZSBwZXJjcHUgc2VjdGlvbiBpbiB0aGUgaW5pdGlhbAotCQkgKiBFTEYgdGVtcGxhdGUgYW5kIHN1YnNlcXVlbnRseSBjb3B5IGl0IHRvIHRoZSBwZXItQ1BVIGRlc3RpbmF0aW9ucy4KLQkJICovCi0JCWlmICghKGluZm8tJmd0O3NlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKSAmYW1wOyZhbXA7Ci0JCSAgICAoIWluZm9zZWMgfHwgaW5mb3NlYyAhPSBpbmZvLSZndDtpbmRleC5wY3B1KSkKJiM0MzsJCS8qIERvbiYjMzk7dCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zLiAqLwomIzQzOwkJaWYgKCEoaW5mby0mZ3Q7c2VjaGRyc1tpbmZvc2VjXS5zaF9mbGFncyAmYW1wOyBTSEZfQUxMT0MpKQogCQkJY29udGludWU7CiAKIAkJaWYgKGluZm8tJmd0O3NlY2hkcnNbaV0uc2hfZmxhZ3MgJmFtcDsgU0hGX1JFTEFfTElWRVBBVENIKQpAQCAtMTcxNSwyNyAmIzQzOzE3MDksMTMgQEAgc3RhdGljIHZvaWQgX19sYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBib29sIGkKIAogCQkJaWYgKChzLSZndDtzaF9mbGFncyAmYW1wOyBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF0KIAkJCSAgICB8fCAocy0mZ3Q7c2hfZmxhZ3MgJmFtcDsgbWFza3NbbV1bMV0pCi0JCQkgICAgfHwgcy0mZ3Q7c2hfZW50c2l6ZSAhPSB+MFVMCiYjNDM7CQkJICAgIHx8IHMtJmd0O3NoX2VudHNpemUgIT0gfjBVTCAvKiBvZmZzZXQgb3Igc3RhbmRhbG9uZSAqLwogCQkJICAgIHx8IGlzX2luaXQgIT0gbW9kdWxlX2luaXRfbGF5b3V0X3NlY3Rpb24oc25hbWUpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAoV0FSTl9PTl9PTkNFKHR5cGUgPT0gTU9EX0lOVkFMSUQpKQogCQkJCWNvbnRpbnVlOwogCi0JCQkvKgotCQkJICogRG8gbm90IGFsbG9jYXRlIGNvZGV0YWcgbWVtb3J5IGFzIHdlIGxvYWQgaXQgaW50bwotCQkJICogcHJlYWxsb2NhdGVkIGNvbnRpZ3VvdXMgbWVtb3J5LgotCQkJICovCi0JCQlpZiAoY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihtb2QsIHNuYW1lLCBzLSZndDtzaF9zaXplKSkgewotCQkJCS8qCi0JCQkJICogcy0mZ3Q7c2hfZW50c2l6ZSB3b24mIzM5O3QgYmUgdXNlZCBidXQgcG9wdWxhdGUgdGhlCi0JCQkJICogdHlwZSBmaWVsZCB0byBhdm9pZCBjb25mdXNpb24uCi0JCQkJICovCi0JCQkJcy0mZ3Q7c2hfZW50c2l6ZSA9ICgodW5zaWduZWQgbG9uZykodHlwZSkgJmFtcDsgU0hfRU5UU0laRV9UWVBFX01BU0spCi0JCQkJCQkmbHQ7Jmx0OyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KIAkJCXMtJmd0O3NoX2VudHNpemUgPSBtb2R1bGVfZ2V0X29mZnNldF9hbmRfdHlwZShtb2QsIHR5cGUsIHMsIGkpOwogCQkJcHJfZGVidWcoJiMzNDtcdCVzXG4mIzM0Oywgc25hbWUpOwogCQl9CkBAIC0xNzQ1LDE2ICYjNDM7MTcyNSwxMCBAQCBzdGF0aWMgdm9pZCBfX2xheW91dF9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGJvb2wgaQogLyoKICAqIExheSBvdXQgdGhlIFNIRl9BTExPQyBzZWN0aW9ucyBpbiBhIHdheSBub3QgZGlzc2ltaWxhciB0byBob3cgbGQKICAqIG1pZ2h0IC0tIGNvZGUsIHJlYWQtb25seSBkYXRhLCByZWFkLXdyaXRlIGRhdGEsIHNtYWxsIGRhdGEuICBUYWxseQotICogc2l6ZXMsIGFuZCBwbGFjZSB0aGUgb2Zmc2V0cyBpbnRvIHNoX2VudHNpemUgZmllbGRzOiBoaWdoIGJpdCBtZWFucyBpdAotICogYmVsb25ncyBpbiBpbml0LgomIzQzOyAqIHNpemVzLCBhbmQgcGxhY2UgdGhlIG9mZnNldHMgaW50byBzaF9lbnRzaXplIGZpZWxkcy4KICAqLwogc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW07IGkmIzQzOyYjNDM7KQotCQlpbmZvLSZndDtzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMOwotCiAJcHJfZGVidWcoJiMzNDtDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XG4mIzM0OywgbW9kLSZndDtuYW1lKTsKIAlfX2xheW91dF9zZWN0aW9ucyhtb2QsIGluZm8sIGZhbHNlKTsKIApAQCAtMjgwMCw3ICYjNDM7Mjc3NCw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogewogCWludCBpLCByZXQ7CiAJZW51bSBtb2RfbWVtX3R5cGUgdCA9IE1PRF9NRU1fTlVNX1RZUEVTOwotCWJvb2wgY29kZXRhZ19zZWN0aW9uX2ZvdW5kID0gZmFsc2U7CiAKIAlmb3JfZWFjaF9tb2RfbWVtX3R5cGUodHlwZSkgewogCQlpZiAoIW1vZC0mZ3Q7bWVtW3R5cGVdLnNpemUpIHsKQEAgLTI4MjAsMzQgJiM0MzsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQogCWZvciAoaSA9IDA7IGkgJmx0OyBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW07IGkmIzQzOyYjNDM7KSB7CiAJCXZvaWQgKmRlc3Q7CiAJCUVsZl9TaGRyICpzaGRyID0gJmFtcDtpbmZvLSZndDtzZWNoZHJzW2ldOwotCQljb25zdCBjaGFyICpzbmFtZTsKIAotCQlpZiAoIShzaGRyLSZndDtzaF9mbGFncyAmYW1wOyBTSEZfQUxMT0MpKQomIzQzOwkJaWYgKCEoc2hkci0mZ3Q7c2hfZmxhZ3MgJmFtcDsgU0hGX0FMTE9DKQomIzQzOwkJICAgIHx8IHNoZHItJmd0O3NoX2VudHNpemUgPT0gU0hfRU5UU0laRV9TVEFOREFMT05FKQogCQkJY29udGludWU7CiAKLQkJc25hbWUgPSBpbmZvLSZndDtzZWNzdHJpbmdzICYjNDM7IHNoZHItJmd0O3NoX25hbWU7Ci0JCS8qCi0JCSAqIExvYWQgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IGFzIHRoZXkgbWlnaHQgc3RpbGwgYmUgdXNlZAotCQkgKiBhZnRlciBtb2R1bGUgdW5sb2FkLgotCQkgKi8KLQkJaWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci0mZ3Q7c2hfc2l6ZSkpIHsKLQkJCWRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItJmd0O3NoX3NpemUsCi0JCQkJCWFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChtb2QsIGkpLCBzaGRyLSZndDtzaF9hZGRyYWxpZ24pOwotCQkJaWYgKFdBUk5fT04oIWRlc3QpKSB7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dF9lcnI7Ci0JCQl9Ci0JCQlpZiAoSVNfRVJSKGRlc3QpKSB7Ci0JCQkJcmV0ID0gUFRSX0VSUihkZXN0KTsKLQkJCQlnb3RvIG91dF9lcnI7Ci0JCQl9Ci0JCQljb2RldGFnX3NlY3Rpb25fZm91bmQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IHNoZHItJmd0O3NoX2VudHNpemUgJmd0OyZndDsgU0hfRU5UU0laRV9UWVBFX1NISUZUOwotCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLSZndDtzaF9lbnRzaXplICZhbXA7IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0s7Ci0KLQkJCWRlc3QgPSBtb2QtJmd0O21lbVt0eXBlXS5iYXNlICYjNDM7IG9mZnNldDsKLQkJfQomIzQzOwkJZGVzdCA9IG1vZC0mZ3Q7bWVtW3NoZHItJmd0O3NoX2VudHNpemUgJmd0OyZndDsgU0hfRU5UU0laRV9UWVBFX1NISUZUXS5iYXNlICYjNDM7CiYjNDM7CQkgICAgICAgKHNoZHItJmd0O3NoX2VudHNpemUgJmFtcDsgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7CiAKIAkJaWYgKHNoZHItJmd0O3NoX3R5cGUgIT0gU0hUX05PQklUUykgewogCQkJLyoKQEAgLTI4NzksOCAmIzQzOzI4MzEsNiBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykKIAltb2R1bGVfbWVtb3J5X3Jlc3RvcmVfcm94KG1vZCk7CiAJd2hpbGUgKHQtLSkKIAkJbW9kdWxlX21lbW9yeV9mcmVlKG1vZCwgdCk7Ci0JaWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZCkKLQkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5NTEsOSAmIzQzOzI5MDEsNTEgQEAgc3RhdGljIGJvb2wgYmxhY2tsaXN0ZWQoY29uc3QgY2hhciAqbW9kdWxlX25hbWUpCiB9CiBjb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTsKIAomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5LiBUaGV5IGFyZSBsb2FkZWQgaW50byBwcmVhbGxvY2F0ZWQKJiM0MzsgKiBjb250aWd1b3VzIG1lbW9yeSBiZWNhdXNlIHRoZXkgbWF5IHN0aWxsIGJlIHVzZWQgYWZ0ZXIgdGhlIG1vZHVsZSBpcwomIzQzOyAqIHVubG9hZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhlIHNlcGFyYXRlIGFsbG9jYXRpb24gb3ZlcmZsb3dzLCBhbGxvY2F0ZSB0aGUgc2VjdGlvbiBub3JtYWxseQomIzQzOyAqIHNvIHRoYXQgdGhlIG1vZHVsZSBjYW4gc3RpbGwgYmUgbG9hZGVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgJmx0OyBpbmZvLSZndDtoZHItJmd0O2Vfc2hudW07IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlFbGZfU2hkciAqc2hkciA9ICZhbXA7aW5mby0mZ3Q7c2VjaGRyc1tpXTsKJiM0MzsJCWNvbnN0IGNoYXIgKnNuYW1lID0gaW5mby0mZ3Q7c2Vjc3RyaW5ncyAmIzQzOyBzaGRyLSZndDtzaF9uYW1lOwomIzQzOwkJdm9pZCAqZGVzdDsKJiM0MzsKJiM0MzsJCWlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLSZndDttb2QsIHNuYW1lLCBzaGRyLSZndDtzaF9zaXplKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tJmd0O21vZCwgc25hbWUsIHNoZHItJmd0O3NoX3NpemUsCiYjNDM7CQkJCWFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLSZndDttb2QsIGkpLCBzaGRyLSZndDtzaF9hZGRyYWxpZ24pOwomIzQzOwkJaWYgKFdBUk5fT04oIWRlc3QpKSB7CiYjNDM7CQkJY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLSZndDttb2QpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJaWYgKGRlc3QgPT0gRVJSX1BUUigtRUFHQUlOKSkKJiM0MzsJCQkvKiBBbGxvY2F0ZSB0aGUgc2VjdGlvbiBhcyBhIHJlZ3VsYXIgc2VjdGlvbi4gKi8KJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChJU19FUlIoZGVzdCkpIHsKJiM0MzsJCQljb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tJmd0O21vZCk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZGVzdCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoc2hkci0mZ3Q7c2hfdHlwZSAhPSBTSFRfTk9CSVRTKQomIzQzOwkJCW1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItJmd0O3NoX2FkZHIsIHNoZHItJmd0O3NoX3NpemUpOwomIzQzOwkJc2hkci0mZ3Q7c2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7CiYjNDM7CQlzaGRyLSZndDtzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiYjNDM7CXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKIAkvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovCkBAIC0yOTY3LDggJiM0MzsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAomIzQzOwkvKiBSZXB1cnBvc2Ugc2hfZW50c2l6ZSB0byB0cmFjayB3aGVyZSBlYWNoIHNlY3Rpb24gaXMgYWxsb2NhdGVkLiAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby0mZ3Q7aGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7CiYjNDM7CiAJLyogV2Ugd2lsbCBkbyBhIHNwZWNpYWwgYWxsb2NhdGlvbiBmb3IgcGVyLWNwdSBzZWN0aW9ucyBsYXRlci4gKi8KLQlpbmZvLSZndDtzZWNoZHJzW2luZm8tJmd0O2luZGV4LnBjcHVdLnNoX2ZsYWdzICZhbXA7PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwomIzQzOwlpZiAoaW5mby0mZ3Q7aW5kZXgucGNwdSkKJiM0MzsJCWluZm8tJmd0O3NlY2hkcnNbaW5mby0mZ3Q7aW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTsKIAogCS8qCiAJICogTWFyayByZWxldmFudCBzZWN0aW9ucyBhcyBTSEZfUk9fQUZURVJfSU5JVCBzbyBsYXlvdXRfc2VjdGlvbnMoKSBjYW4KQEAgLTI5NzcsMTggJiM0MzsyOTc0LDIxIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncykKIAkgKi8KIAltb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tJmd0O2hkciwgaW5mby0mZ3Q7c2VjaGRycywgaW5mby0mZ3Q7c2Vjc3RyaW5ncyk7CiAKLQkvKgotCSAqIERldGVybWluZSB0b3RhbCBzaXplcywgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICBGb3Igbm93Ci0JICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgYW55Ci0JICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuCi0JICovCiYjNDM7CS8qIEFsbG93IGNvZGV0YWcgc2VjdGlvbnMgdG8gYmUgYWxsb2NhdGVkIHNlcGFyYXRlbHkgZmlyc3QuICovCiYjNDM7CWVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnIpOwomIzQzOwomIzQzOwkvKiBEZXRlcm1pbmUgdG90YWwgc2l6ZXMgYW5kIHB1dCBvZmZzZXRzIGluIHNoX2VudHNpemUuICovCiAJbGF5b3V0X3NlY3Rpb25zKGluZm8tJmd0O21vZCwgaW5mbyk7CiAJbGF5b3V0X3N5bXRhYihpbmZvLSZndDttb2QsIGluZm8pOwogCiAJLyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovCiAJZXJyID0gbW92ZV9tb2R1bGUoaW5mby0mZ3Q7bW9kLCBpbmZvKTsKLQlpZiAoZXJyKQomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQljb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tJmd0O21vZCk7CiAJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CX0KIAogCS8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqLwogCW1vZCA9ICh2b2lkICopaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5tb2RdLnNoX2FkZHI7CmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jCmluZGV4IGYzMGVmOGRkMjRjNzAuLjhmMTMzNjliMzJlY2QgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC04NDMsNiAmIzQzOzg0Myw1MiBAQCBzdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKQomIzQzO3sKJiM0MzsJTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKJiM0MzsJc3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnOwomIzQzOwlzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnOwomIzQzOwlzdHJ1Y3QgbW9kdWxlICp2YWw7CiYjNDM7CiYjNDM7CW1hc19sb2NrKCZhbXA7bWFzKTsKJiM0MzsJbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQomIzQzOwkJaWYgKHZhbCA9PSBtb2QpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CWlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJaWYgKCF1c2VkKQomIzQzOwkJZ290byByZWxlYXNlX2FyZWE7CiYjNDM7CiYjNDM7CXN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmluZGV4KTsKJiM0MzsJZW5kX3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgJiM0MzsgbWFzLmxhc3QpOwomIzQzOwlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7CiYjNDM7CQlzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7CiYjNDM7CiYjNDM7CQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7CiYjNDM7CiYjNDM7CQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKJiM0MzsJCQlwcl9pbmZvKCYjMzQ7JXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcbiYjMzQ7LAomIzQzOwkJCQl0YWctJmd0O2N0LmZpbGVuYW1lLCB0YWctJmd0O2N0LmxpbmVubywgdGFnLSZndDtjdC5tb2RuYW1lLAomIzQzOwkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXVzZWQgPSBmYWxzZTsKJiM0MzsJfQomIzQzO3JlbGVhc2VfYXJlYToKJiM0MzsJbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKJiM0MzsJdmFsID0gbWFzX3ByZXZfcmFuZ2UoJmFtcDttYXMsIDApOwomIzQzOwlpZiAodmFsID09ICZhbXA7cHJlcGVuZF9tb2QpCiYjNDM7CQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwomIzQzO291dDoKJiM0MzsJbWFzX3VubG9jaygmYW1wO21hcyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJIHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKQogewpAQCAtOTEyLDEwICYjNDM7OTU4LDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQlpbnQgZ3Jvd19yZXM7CiAKIAkJbW9kdWxlX3RhZ3Muc2l6ZSA9IG9mZnNldCAmIzQzOyBzaXplOwotCQlpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgJmFtcDsmYW1wOyAhdGFnc19hZGRyZXNzYWJsZSgpKSB7CiYjNDM7CQlpZiAoIXRhZ3NfYWRkcmVzc2FibGUoKSkgewogCQkJc2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTsKLQkJCXByX3dhcm4oJiMzNDtXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAotCQkJCW1vZC0mZ3Q7bmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpOwomIzQzOwkJCXByX3dhcm5fb25jZSgmIzM0O1dpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxuJiMzNDssCiYjNDM7CQkJCSAgICAgbW9kLSZndDtuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7CiYjNDM7CQkJcmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKIAkJfQogCiAJCWdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTsKQEAgLTkyMyw2ICYjNDM7OTcxLDcgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQlzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpOwogCQkJcHJfZXJyKCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcbiYjMzQ7LAogCQkJICAgICAgIG1vZC0mZ3Q7bmFtZSk7CiYjNDM7CQkJcmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTsKIAkJCXJldHVybiBFUlJfUFRSKGdyb3dfcmVzKTsKIAkJfQogCX0KQEAgLTkzMCw1MiAmIzQzOzk3OSw2IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLAogCXJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG9mZnNldCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpCi17Ci0JTUFfU1RBVEUobWFzLCAmYW1wO21vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTsKLQlzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7Ci0Jc3RydWN0IGFsbG9jX3RhZyAqZW5kX3RhZzsKLQlzdHJ1Y3QgbW9kdWxlICp2YWw7Ci0KLQltYXNfbG9jaygmYW1wO21hcyk7Ci0JbWFzX2Zvcl9lYWNoX3JldigmYW1wO21hcywgdmFsLCAwKQotCQlpZiAodmFsID09IG1vZCkKLQkJCWJyZWFrOwotCi0JaWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi8KLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXVzZWQpCi0JCWdvdG8gcmVsZWFzZV9hcmVhOwotCi0Jc3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciAmIzQzOyBtYXMuaW5kZXgpOwotCWVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICYjNDM7IG1hcy5sYXN0KTsKLQlpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7Ci0JCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKLQotCQlmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnICZsdDs9IGVuZF90YWc7IHRhZyYjNDM7JiM0MzspIHsKLQkJCXN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjsKLQotCQkJaWYgKCF0YWctJmd0O2NvdW50ZXJzKQotCQkJCWNvbnRpbnVlOwotCi0JCQljb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTsKLQkJCXByX2luZm8oJiMzNDslczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxuJiMzNDssCi0JCQkJdGFnLSZndDtjdC5maWxlbmFtZSwgdGFnLSZndDtjdC5saW5lbm8sIHRhZy0mZ3Q7Y3QubW9kbmFtZSwKLQkJCQl0YWctJmd0O2N0LmZ1bmN0aW9uLCBjb3VudGVyLmJ5dGVzKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXVzZWQgPSBmYWxzZTsKLQl9Ci1yZWxlYXNlX2FyZWE6Ci0JbWFzX3N0b3JlKCZhbXA7bWFzLCB1c2VkID8gJmFtcDt1bmxvYWRlZF9tb2QgOiBOVUxMKTsKLQl2YWwgPSBtYXNfcHJldl9yYW5nZSgmYW1wO21hcywgMCk7Ci0JaWYgKHZhbCA9PSAmYW1wO3ByZXBlbmRfbW9kKQotCQltYXNfc3RvcmUoJmFtcDttYXMsIE5VTEwpOwotb3V0OgotCW1hc191bmxvY2soJmFtcDttYXMpOwotfQotCiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcCkKIHsKIAkvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY3OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc3Nlc3MgaWYgaXQgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIHdoaWNoIHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSYjMzk7bGwgc3RhcnQgYnkgcmVhZGluZyB0aGUgcGF0Y2ggZGlmZiBpdHNlbGYuIEl0JiMzOTtzIHRvdWNoaW5nIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvbW9kdWxlLmhgLCBga2VybmVsL21vZHVsZS9pbnRlcm5hbC5oYCwgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoaXMgc3VnZ2VzdHMgY2hhbmdlcyB0byBob3cgbW9kdWxlcyBhcmUgbG9hZGVkLCByZWxvY2F0ZWQsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgaXMgbWFuYWdlZC4KCkZpcnN0LCB0aGUgZW51bSBjaGFuZ2UuIEFkZGluZyBgTU9EX1NUQU5EQUxPTkUgPSAtMmAgdG8gYGVudW0gbW9kX21lbV90eXBlYCBpbiBgaW5jbHVkZS9saW51eC9tb2R1bGUuaGAgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGVuIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIGluIGBrZXJuZWwvbW9kdWxlL2ludGVybmFsLmhgIHNlZW1zIHRvIGJlIGEgZGVyaXZlZCB2YWx1ZSBiYXNlZCBvbiB0aGF0IGVudW0uIEl0IGxvb2tzIGxpa2UgYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgaXMgcmVsYXRlZCB0byBjb2RldGFnIHNlY3Rpb25zLiBJIHdpbGwga2VlcCB0aGF0IGluIG1pbmQuCgpOb3cgZm9yIHRoZSBtZWF0IG9mIGl0IGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIEludGVyZXN0aW5nLiBUaGUgcGF0Y2ggaXMgcmVtb3ZpbmcgZXhjZXB0aW9ucyBhbmQgaGFuZGxpbmcgcmVsYXRlZCB0byBgaW5mb3NlY2Agd2l0aGluIGBhcHBseV9yZWxvY2F0aW9ucygpYC4gQWxzbywgY29kZSB0byByZW1vdmUgY29kZXRhZyBoYW5kbGluZyBmcm9tIGJvdGggYF9fbGF5b3V0X3NlY3Rpb25zKClgIGFuZCBgbW92ZV9tb2R1bGUoKWAuIFRoZSBwYXRjaCBhbHNvIG1vdmVzIHJlc2V0dGluZyBgaW5mby0mZ3Q7c2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtgIGZyb20gYGxheW91dF9zZWN0aW9ucygpYCB0byBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYC4gVGhlIG5ldyBmdW5jdGlvbiBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCBpcyB2ZXJ5IGludGVyZXN0aW5nLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHNlY3Rpb25zLCBjb25kaXRpb25hbGx5IGNhbGxzIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKClgLCBhbmQgY29waWVzIGRhdGEsIHNldHRpbmcgYHNoZHItJmd0O3NoX2FkZHJgIGFuZCBgc2hkci0mZ3Q7c2hfZW50c2l6ZWAgdG8gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAuIEkgbmVlZCB0byBpbnNwZWN0IHRoaXMgZnVuY3Rpb24gY2FyZWZ1bGx5IHdpdGggcmVzcGVjdCB0byBhbGxvY2F0aW9uIGFuZCBjb3B5IHNlbWFudGljczsgc3BlY2lmaWNhbGx5IHRoZSBkYXRhIGNvcHlpbmcgaW50byB0aGUgZGVzdCB2YXJpYWJsZS4gRmluYWxseSwgSSBzZWUgdGhhdCB0aGUgYGxheW91dF9hbmRfYWxsb2NhdGUoKWAgZnVuY3Rpb24gbm93IGluaXRpYWxpemVzIGBzaF9lbnRzaXplYCB0byBgfjBVTGAgYW5kIGFsc28gc2V0cyBgaW5mby0mZ3Q7c2VjaGRyc1tpbmZvLSZndDtpbmRleC5wY3B1XS5zaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO2AgZm9yIG5vbi16ZXJvIGBwY3B1YCBpbmRpY2VzIGJlZm9yZSBjYWxsaW5nIG90aGVyIGxheW91dCBmdW5jdGlvbnMuCgpGaW5hbGx5LCBpbiBgbW0vYWxsb2NfdGFnLmNgLCB0aGUgcmVvcmRlcmluZyBvZiBgcmVsZWFzZV9tb2R1bGVfdGFncygpYCBhbmQgYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWAgbG9va3MgaW1wb3J0YW50LiBUaGUgbG9naWMgaW4gYHJlc2VydmVfbW9kdWxlX3RhZ3MoKWAgYXJvdW5kIGB0YWdzX2FkZHJlc3NhYmxlKClgIGFuZCB0aGUgc3Vic2VxdWVudCBjYWxscyB0byBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZygpYCwgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAsIGFuZCBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKWAgaXMgd2hhdCBJIG5lZWQgdG8gd2F0Y2guIEFueSBmYWlsdXJlIHNjZW5hcmlvcyBoZXJlIGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4KCk15IG5leHQgc3RlcCBpcyB0byBkZWVwbHkgZXhhbWluZSB0aGUgdXNhZ2Ugb2YgYGluZm8tJmd0O3NlY2hkcnNgIGFuZCBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgbWFuYWdlZCwgZXNwZWNpYWxseSBhcm91bmQgYGxheW91dF9hbmRfYWxsb2NhdGUoKWAsIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKClgIGFuZCB0aGUgY29kZXRhZyByZWxhdGVkIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIGBncmVwcGVyYCBvciBlcXVpdmFsZW50IHRvb2xzIHRvIHNlYXJjaCBmb3IgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVpciByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyB0byBnZXQgYSBmdWxsIHBpY3R1cmUuIEkgd2lsbCBiZSBsb29raW5nIGZvciBwYXR0ZXJucyB0aGF0IGNhbiBsZWFkIHRvIG1lbW9yeSBsZWFrYWdlLCB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW55dGhpbmcgc3VzcGljaW91cy4gVGhpcyBpcyB3aGVyZSB0aGUgZGV2aWwgaXMgZ29pbmcgdG8gYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL21vZHVsZS9tYWluLmM9MjkwMj1jb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTExLSAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6MjkxMjpzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MTMte1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDU9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NzctXHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6Mjk3ODpcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTc5LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1vZHVsZSBSZWxvY2F0aW9uKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGggbW9kdWxlIGxheW91dCBhbmQgYWxsb2NhdGlvbiwgYW5kIGhvdyBtb2R1bGVzIGFyZSBtb3ZlZCBhcm91bmQgaW4gbWVtb3J5LiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgY29kZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBtb2R1bGUgbWFuaXB1bGF0aW9uIHJlc2lkZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBtb2R1bGUgcmVsb2NhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgZG9uZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gZGVjaWRlcyB3aGVyZSB0byBwdXQgdGhlIG1vZHVsZSwgYW5kIHByZWNpc2VseSBob3cgaXQgaGFuZGxlcyB0aGUgZGF0YSB0cmFuc2ZlciB3aGVuIGl0IG5lZWRzIHRvIGJlIHJlcG9zaXRpb25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk0NTpcdHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbjI5NDY6XHR7XG4yOTQ3Olx0XHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4yOTQ4Olx0XHR1bnNpZ25lZCBpbnQgaTtcbjI5NDk6XHRcdGludCBlcnI7XG4yOTUwOlx0XG4yOTUxOlx0XHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG4yOTUyOlx0XHRlcnIgPSBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsXG4yOTUzOlx0XHRcdFx0XHRcdGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NTU6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NTY6XHRcbjI5NTc6XHRcdGVyciA9IG1vZHVsZV9lbmZvcmNlX3J3eF9zZWN0aW9ucyhpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLFxuMjk1ODpcdFx0XHRcdFx0XHQgIGluZm8tXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cdTAwM2Vtb2QpO1xuMjk1OTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjI5NjA6XHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbjI5NjE6XHRcbjI5NjI6XHRcdC8qIFJlcHVycG9zZSBzaF9lbnRzaXplIHRvIHRyYWNrIHdoZXJlIGVhY2ggc2VjdGlvbiBpcyBhbGxvY2F0ZWQuICovXG4yOTYzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBpbmZvLVx1MDAzZWhkci1cdTAwM2VlX3NobnVtOyBpJiM0MzsmIzQzOylcbjI5NjQ6XHRcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xuMjk2NTpcdFxuMjk2NjpcdFx0LyogV2Ugd2lsbCBkbyBhIHNwZWNpYWwgYWxsb2NhdGlvbiBmb3IgcGVyLWNwdSBzZWN0aW9ucyBsYXRlci4gKi9cbjI5Njc6XHRcdGlmIChpbmZvLVx1MDAzZWluZGV4LnBjcHUpXG4yOTY4Olx0XHRcdGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnBjcHVdLnNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7XG4yOTY5Olx0XG4yOTcwOlx0XHQvKlxuMjk3MTpcdFx0ICogTWFyayByZWxldmFudCBzZWN0aW9ucyBhcyBTSEZfUk9fQUZURVJfSU5JVCBzbyBsYXlvdXRfc2VjdGlvbnMoKSBjYW5cbjI5NzI6XHRcdCAqIHB1dCB0aGVtIGluIHRoZSByaWdodCBwbGFjZS5cbjI5NzM6XHRcdCAqIE5vdGU6IHJvX2FmdGVyX2luaXQgc2VjdGlvbnMgYWxzbyBoYXZlIFNIRl97V1JJVEUsQUxMT0N9IHNldC5cbjI5NzQ6XHRcdCAqL1xuMjk3NTpcdFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVx1MDAzZWhkciwgaW5mby1cdTAwM2VzZWNoZHJzLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MpO1xuMjk3NjpcdFxuMjk3NzpcdFx0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cbjI5Nzg6XHRcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4yOTc5Olx0XHRpZiAoZXJyKVxuMjk4MDpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjk4MTpcdFxuMjk4MjpcdFx0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xuMjk4MzpcdFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbjI5ODQ6XHRcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuMjk4NTpcdFxuMjk4NjpcdFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4yOTg3Olx0XHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4yOTg4Olx0XHRpZiAoZXJyKSB7XG4yOTg5Olx0XHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cdTAwM2Vtb2QpO1xuMjk5MDpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuMjk5MTpcdFx0fVxuMjk5MjpcdFxuMjk5MzpcdFx0LyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovXG4yOTk0Olx0XHRtb2QgPSAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcbjI5OTU6XHRcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XG4yOTk2Olx0XHRjb2RldGFnX21vZHVsZV9yZXBsYWNlZChpbmZvLVx1MDAzZW1vZCwgbW9kKTtcbjI5OTc6XHRcbjI5OTg6XHRcdHJldHVybiBtb2Q7XG4yOTk5Olx0fVxuMzAwMDpcdFxuMzAwMTpcdC8qIG1vZCBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgdGhpcyEgKi9cbjMwMDI6XHRzdGF0aWMgdm9pZCBtb2R1bGVfZGVhbGxvY2F0ZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4zMDAzOlx0e1xuMzAwNDpcdFx0cGVyY3B1X21vZGZyZWUobW9kKTtcbjMwMDU6XHRcdG1vZHVsZV9hcmNoX2ZyZWVpbmdfaW5pdChtb2QpO1xuMzAwNjpcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpO1xuMzAwNzpcdFxuMzAwODpcdFx0ZnJlZV9tb2RfbWVtKG1vZCk7XG4zMDA5Olx0fVxuMzAxMDpcdFxuMzAxMTpcdGludCBfX3dlYWsgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsXG4zMDEyOlx0XHRcdFx0ICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsXG4zMDEzOlx0XHRcdFx0ICAgc3RydWN0IG1vZHVsZSAqbWUpXG4zMDE0Olx0e1xuMzAxNTpcdFx0cmV0dXJuIDA7XG4zMDE2Olx0fVxuMzAxNzpcdFxuMzAxODpcdHN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbjMwMTk6XHR7XG4zMDIwOlx0XHQvKiBTb3J0IGV4Y2VwdGlvbiB0YWJsZSBub3cgcmVsb2NhdGlvbnMgYXJlIGRvbmUuICovXG4zMDIxOlx0XHRzb3J0X2V4dGFibGUobW9kLVx1MDAzZWV4dGFibGUsIG1vZC1cdTAwM2VleHRhYmxlICYjNDM7IG1vZC1cdTAwM2VudW1fZXhlbnRyaWVzKTtcbjMwMjI6XHRcbjMwMjM6XHRcdC8qIENvcHkgcmVsb2NhdGVkIHBlcmNwdSBhcmVhIG92ZXIuICovXG4zMDI0Olx0XHRwZXJjcHVfbW9kY29weShtb2QsICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMDA6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk1OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQ29kZSBUYWcgU2VjdGlvbiBBbGxvY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9uc2AgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGl0ZXJhdGluZyB0aHJvdWdoIHNlY3Rpb24gaGVhZGVycywgc3RhcnRpbmcgZnJvbSB0aGUgc2Vjb25kIG9uZSAoaW5kZXggMSkuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBzZWN0aW9ucyB0aGF0IG1lZXQgYSBzcGVjaWZpYyAmIzM0O2NvZGV0YWcmIzM0OyBjcml0ZXJpYSB3aXRoaW4gYSBtb2R1bGUuIFRoZSBmdW5jdGlvbiBpcyBnb2luZyB0aHJvdWdoIHRoZSBzZWN0aW9uIGhlYWRlcnMgYW5kIGl0IGxvb2tzIGxpa2UgYGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb25gIGRlY2lkZXMgd2hpY2ggc2VjdGlvbnMgc2hvdWxkIGJlIG1vdmVkIG9yIG1hbmFnZWQgZGlmZmVyZW50bHkuCgpUaGUgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gIGNhbGwgaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIHRvIGhhbmRsZSB0aGUgYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uLCBwb3RlbnRpYWxseSBwcmVwZW5kaW5nIHNvbWV0aGluZyBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBoYW5kbGluZyBhbGlnbm1lbnQgYW5kIHRoZSBzZWN0aW9uJiMzOTtzIHNpemUuIFRoZXJlJiMzOTtzIGVycm9yIGhhbmRsaW5nIHRvIG1hbmFnZSBhbGxvY2F0aW9uIGZhaWx1cmUgdXNpbmcgYFdBUk5fT05gLCBhbmQgc29tZSBmYWxsYmFjayBsb2dpYyBpbnZvbHZpbmcgYC1FQUdBSU5gIHRvIHRyZWF0IGl0IGxpa2UgYSByZWd1bGFyIHNlY3Rpb24sIGFuZCBnZW5lcmFsIGVycm9yIGhhbmRsaW5nLCBmcmVlaW5nIGFsbG9jYXRpb25zIG9uIGZhaWx1cmUuCgpGaW5hbGx5LCBpZiBhbGxvY2F0aW9uIGlzIHN1Y2Nlc3NmdWwgYW5kIHRoZSBzZWN0aW9uIGlzICpub3QqIGEgbm8tYml0cyBzZWN0aW9uLCB3ZSBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIG9yaWdpbmFsIHNlY3Rpb24gYWRkcmVzcyAoYHNoZHItJmd0O3NoX2FkZHJgKSB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIGRlc3RpbmF0aW9uLiBUaGUgYHNoZHItJmd0O3NoX2FkZHJgIGlzIHRoZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9uLCBhbmQgdGhlIHNlY3Rpb24gc2l6ZSBpcyBzZXQuCgpOb3csIGEga2V5IHF1ZXN0aW9uIGlzIGhvdyBgc2hkci0mZ3Q7c2hfYWRkcmAgaXMgKmluaXRpYWxseSogc2V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGF0IHZhbHVlIGNvbWVzIGZyb20gYmVmb3JlIHdlIHJlYWNoIHRoaXMgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIGhhcHBlbnMgaW4gYGxheW91dF9hbmRfYWxsb2NhdGVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgc2VjdGlvbiBhZGRyZXNzZXMgYXJlIGluaXRpYWxseSBzZXQgd2l0aGluIHRoZSBtb2R1bGUgbG9hZGluZyBwcm9jZXNzLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHVzZXMgb2YgdGhlIGBzZXR1cF9sb2FkX2luZm9gIGZ1bmN0aW9uIG9yIHRoZSBgbG9hZF9pbmZvYCBzdHJ1Y3R1cmUgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIGhvdyBgc2hkci0mZ3Q7c2hfYWRkcmAgZ2V0cyBpdHMgaW5pdGlhbCB2YWx1ZSBpcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NoX2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MTEzPXZvaWQgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE0MS1cdC8qIEFwcGVuZCByb29tIGZvciBjb3JlIHN5bWJvbHMgYXQgZW5kIG9mIGNvcmUgcGFydC4gKi9cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzoxNDI6XHRpbmZvLVx1MDAzZXN5bW9mZnMgPSBBTElHTihtb2RfbWVtX2RhdGEtXHUwMDNlc2l6ZSwgc3ltc2VjdC1cdTAwM2VzaF9hZGRyYWxpZ24gPzogMSk7XG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTQzLVx0aW5mby1cdTAwM2VzdHJvZmZzID0gbW9kX21lbV9kYXRhLVx1MDAzZXNpemUgPSBpbmZvLVx1MDAzZXN5bW9mZnMgJiM0MzsgbmRzdCAqIHNpemVvZihFbGZfU3ltKTtcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MTcwPXZvaWQgYWRkX2thbGxzeW1zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTgzLVxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjE4NDpcdGthbGxzeW1zLVx1MDAzZXN5bXRhYiA9ICh2b2lkICopc3ltc2VjLVx1MDAzZXNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTg1LVx0a2FsbHN5bXMtXHUwMDNlbnVtX3N5bXRhYiA9IHN5bXNlYy1cdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pO1xua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE4Ni1cdC8qIE1ha2Ugc3VyZSB3ZSBnZXQgcGVybWFuZW50IHN0cnRhYjogZG9uJiMzOTt0IHVzZSBpbmZvLVx1MDAzZXN0cnRhYi4gKi9cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzoxODc6XHRrYWxsc3ltcy1cdTAwM2VzdHJ0YWIgPSAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnN0cl0uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0xODgtXHRrYWxsc3ltcy1cdTAwM2V0eXBldGFiID0gaW5pdF9kYXRhX2Jhc2UgJiM0MzsgaW5mby1cdTAwM2Vpbml0X3R5cGVvZmZzO1xuLS1cbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0yMjU9dm9pZCBpbml0X2J1aWxkX2lkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMjMyLVx0XHRpZiAoIXNlY3RfZW1wdHkoc2VjaGRyKSBcdTAwMjZcdTAwMjYgc2VjaGRyLVx1MDAzZXNoX3R5cGUgPT0gU0hUX05PVEUgXHUwMDI2XHUwMDI2XG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MjMzOlx0XHQgICAgIWJ1aWxkX2lkX3BhcnNlX2J1Zigodm9pZCAqKXNlY2hkci1cdTAwM2VzaF9hZGRyLCBtb2QtXHUwMDNlYnVpbGRfaWQsXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMjM0LVx0XHRcdFx0XHRzZWNoZHItXHUwMDNlc2hfc2l6ZSkpXG4tLVxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYz0xOD1pbnQgY29weV9tb2R1bGVfZWxmKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTUzLVx0ICogRm9yIGxpdmVwYXRjaCBtb2R1bGVzLCBjb3JlX2thbGxzeW1zLnN5bXRhYiBpcyBhIGNvbXBsZXRlXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jOjU0Olx0ICogY29weSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHRhYmxlLiBBZGp1c3Qgc2hfYWRkciB0byBwb2ludFxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy01NS1cdCAqIHRvIGNvcmVfa2FsbHN5bXMuc3ltdGFiIHNpbmNlIHRoZSBjb3B5IG9mIHRoZSBzeW10YWIgaW4gbW9kdWxlXG4tLVxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy01Ny1cdCAqL1xua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYzo1ODpcdG1vZC1cdTAwM2VrbHBfaW5mby1cdTAwM2VzZWNoZHJzW3N5bW5keF0uc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKW1vZC1cdTAwM2Vjb3JlX2thbGxzeW1zLnN5bXRhYjtcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmMtNTktXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9Mjg0PXN0YXRpYyB2b2lkICpzZWN0aW9uX2FkZHIoY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqbmFtZSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4NS17XG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODY6XHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMC4gKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4NzpcdHJldHVybiAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tmaW5kX3NlYyhpbmZvLCBuYW1lKV0uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4OC19XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MjkxPXN0YXRpYyB2b2lkICpzZWN0aW9uX29ianMoY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTctXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTg6XHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMCBhbmQgc2hfc2l6ZSAwLiAqL1xua2VybmVsL21vZHVsZS9tYWluLmMtMjk5LVx0Km51bSA9IGluZm8tXHUwMDNlc2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMwMDpcdHJldHVybiAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tzZWNdLnNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDEtfVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMyMD1zdGF0aWMgX19tYXliZV91bnVzZWQgdm9pZCAqYW55X3NlY3Rpb25fb2Jqcyhjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMyNi1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMyNzpcdC8qIFNlY3Rpb24gMCBoYXMgc2hfYWRkciAwIGFuZCBzaF9zaXplIDAuICovXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMjgtXHQqbnVtID0gaW5mby1cdTAwM2VzZWNoZHJzW3NlY10uc2hfc2l6ZSAvIG9iamVjdF9zaXplO1xua2VybmVsL21vZHVsZS9tYWluLmM6MzI5Olx0cmV0dXJuICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW3NlY10uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMzMC19XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9NDU1PXN0YXRpYyBpbnQgcGVyY3B1X21vZGFsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy00NTctXHRFbGZfU2hkciAqcGNwdXNlYyA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnBjcHVdO1xua2VybmVsL21vZHVsZS9tYWluLmM6NDU4Olx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IHBjcHVzZWMtXHUwMDNlc2hfYWRkcmFsaWduO1xua2VybmVsL21vZHVsZS9tYWluLmMtNDU5LVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTExMzg9c3RhdGljIGNoYXIgKmdldF9uZXh0X21vZGluZm8oY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqdGFnLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDctXHQgKiBnZXRfbW9kaW5mbygpIGNhbGxzIG1hZGUgYmVmb3JlIHJld3JpdGVfc2VjdGlvbl9oZWFkZXJzKClcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjExNDg6XHQgKiBtdXN0IHVzZSBzaF9vZmZzZXQsIGFzIHNoX2FkZHIgaXNuJiMzOTt0IHNldCFcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDktXHQgKi9cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNTI5PXN0YXRpYyBpbnQgc2ltcGxpZnlfc3ltYm9scyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMTUzMS1cdEVsZl9TaGRyICpzeW1zZWMgPSBcdTAwMjZpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5zeW1dO1xua2VybmVsL21vZHVsZS9tYWluLmM6MTUzMjpcdEVsZl9TeW0gKnN5bSA9ICh2b2lkICopc3ltc2VjLVx1MDAzZXNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTMzLVx0dW5zaWduZWQgbG9uZyBzZWNiYXNlO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE1OTctXHRcdFx0ZWxzZVxua2VybmVsL21vZHVsZS9tYWluLmM6MTU5ODpcdFx0XHRcdHNlY2Jhc2UgPSBpbmZvLVx1MDAzZXNlY2hkcnNbc3ltW2ldLnN0X3NobmR4XS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS9tYWluLmMtMTU5OS1cdFx0XHRzeW1baV0uc3RfdmFsdWUgJiM0Mzs9IHNlY2Jhc2U7XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmM9MTY1MD1sb25nIG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjU2LVx0bW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplICYjNDM7PSBhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBzZWN0aW9uKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE2NTc6XHRvZmZzZXQgPSBBTElHTihtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUsIHNlY2hkci1cdTAwM2VzaF9hZGRyYWxpZ24gPzogMSk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNjU4LVx0bW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplID0gb2Zmc2V0ICYjNDM7IHNlY2hkci1cdTAwM2VzaF9zaXplO1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTE5MTU9c3RhdGljIGludCBlbGZfdmFsaWRpdHlfY2FjaGVfc2VjaGRycyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE5NTAtXHQgICAgfHwgc2VjaGRyc1swXS5zaF9zaXplICE9IDBcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE5NTE6XHQgICAgfHwgc2VjaGRyc1swXS5zaF9hZGRyICE9IDApIHtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE5NTItXHRcdHByX2VycihcJiMzNDtFTEYgU3BlYyB2aW9sYXRpb246IHNlY3Rpb24gMCB0eXBlKCVkKSE9U0hfTlVMTCBvciBub24temVybyBsZW4gb3IgYWRkclxcblwmIzM0Oyxcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNTE2PXN0YXRpYyBpbnQgcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjAtXHQvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYnV0IGxldCYjMzk7cyBiZSBzdXJlLiAqL1xua2VybmVsL21vZHVsZS9tYWluLmM6MjUyMTpcdGluZm8tXHUwMDNlc2VjaGRyc1swXS5zaF9hZGRyID0gMDtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjItXG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyNi1cdFx0Lypcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI1Mjc6XHRcdCAqIE1hcmsgYWxsIHNlY3Rpb25zIHNoX2FkZHIgd2l0aCB0aGVpciBhZGRyZXNzIGluIHRoZVxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyOC1cdFx0ICogdGVtcG9yYXJ5IGltYWdlLlxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyOS1cdFx0ICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNTMwOlx0XHRzaGRyLVx1MDAzZXNoX2FkZHIgPSAoc2l6ZV90KWluZm8tXHUwMDNlaGRyICYjNDM7IHNoZHItXHUwMDNlc2hfb2Zmc2V0O1xua2VybmVsL21vZHVsZS9tYWluLmMtMjUzMS1cbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yNzczPXN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MTUtXHRcdFx0fVxua2VybmVsL21vZHVsZS9tYWluLmM6MjgxNjpcdFx0XHRtZW1jcHkoZGVzdCwgKHZvaWQgKilzaGRyLVx1MDAzZXNoX2FkZHIsIHNoZHItXHUwMDNlc2hfc2l6ZSk7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODE3LVx0XHR9XG4tLVxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyMy1cdFx0ICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODI0Olx0XHRzaGRyLVx1MDAzZXNoX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXN0O1xua2VybmVsL21vZHVsZS9tYWluLmM6MjgyNTpcdFx0cHJfZGVidWcoXCYjMzQ7XFx0MHglbHggMHglLjhseCAlc1xcblwmIzM0OywgKGxvbmcpc2hkci1cdTAwM2VzaF9hZGRyLFxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyNi1cdFx0XHQgKGxvbmcpc2hkci1cdTAwM2VzaF9zaXplLCBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgJiM0Mzsgc2hkci1cdTAwM2VzaF9uYW1lKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTEyPXN0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MjItXHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxua2VybmVsL21vZHVsZS9tYWluLmM6MjkyMzpcdFx0XHRcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVx1MDAzZW1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MjQtXHRcdGlmIChXQVJOX09OKCFkZXN0KSkge1xuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzYtXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUylcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5Mzc6XHRcdFx0bWVtY3B5KGRlc3QsICh2b2lkICopc2hkci1cdTAwM2VzaF9hZGRyLCBzaGRyLVx1MDAzZXNoX3NpemUpO1xua2VybmVsL21vZHVsZS9tYWluLmM6MjkzODpcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzktXHRcdHNoZHItXHUwMDNlc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTkzLVx0LyogTW9kdWxlIGhhcyBiZWVuIGNvcGllZCB0byBpdHMgZmluYWwgcGxhY2Ugbm93OiByZXR1cm4gaXQuICovXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTk0Olx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTk1LVx0a21lbWxlYWtfbG9hZF9tb2R1bGUobW9kLCBpbmZvKTtcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDE4PXN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbi0tXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDIzLVx0LyogQ29weSByZWxvY2F0ZWQgcGVyY3B1IGFyZWEgb3Zlci4gKi9cbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMwMjQ6XHRwZXJjcHVfbW9kY29weShtb2QsICh2b2lkICopaW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfYWRkcixcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMjUtXHRcdCAgICAgICBpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5wY3B1XS5zaF9zaXplKTtcbi0tXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmM9NjU9c3RhdGljIGludCBhZGRfc2VjdF9hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jLTEwNC1cdFx0c2F0dHItXHUwMDNlcmVhZCA9IG1vZHVsZV9zZWN0X3JlYWQ7XG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmM6MTA1Olx0XHRzYXR0ci1cdTAwM2Vwcml2YXRlID0gKHZvaWQgKilzZWMtXHUwMDNlc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYy0xMDYtXHRcdHNhdHRyLVx1MDAzZXNpemUgPSBNT0RVTEVfU0VDVF9SRUFEX1NJWkU7XG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jPTE1MT1zdGF0aWMgaW50IGFkZF9ub3Rlc19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4tLVxua2VybmVsL21vZHVsZS9zeXNmcy5jLTE5MC1cdFx0XHRuYXR0ci1cdTAwM2VzaXplID0gaW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX3NpemU7XG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmM6MTkxOlx0XHRcdG5hdHRyLVx1MDAzZXByaXZhdGUgPSAodm9pZCAqKWluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS9zeXNmcy5jLTE5Mi1cdFx0XHRuYXR0ci1cdTAwM2VyZWFkID0gc3lzZnNfYmluX2F0dHJfc2ltcGxlX3JlYWQ7XG4tLVxua2VybmVsL21vZHVsZS92ZXJzaW9uLmM9MTM9aW50IGNoZWNrX3ZlcnNpb24oY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcbi0tXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYy00Ny1cbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jOjQ4Olx0dmVyc2lvbnMgPSAodm9pZCAqKXNlY2hkcnNbdmVyc2luZGV4XS5zaF9hZGRyO1xua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtNDktXHRudW1fdmVyc2lvbnMgPSBzZWNoZHJzW3ZlcnNpbmRleF0uc2hfc2l6ZVxuLS1cbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jPTEwNz12b2lkIG1vZHZlcnNpb25fZXh0X3N0YXJ0KGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8sXG4tLVxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtMTIyLVxua2VybmVsL21vZHVsZS92ZXJzaW9uLmM6MTIzOlx0c3RhcnQtXHUwMDNlY3JjID0gKGNvbnN0IHUzMiAqKXNlY2hkcnNbY3JjX2lkeF0uc2hfYWRkcjtcbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jOjEyNDpcdHN0YXJ0LVx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXNlY2hkcnNbbmFtZV9pZHhdLnNoX2FkZHI7XG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYy0xMjUtXHRzdGFydC1cdTAwM2VyZW1haW5pbmcgPSBzZWNoZHJzW2NyY19pZHhdLnNoX3NpemUgLyBzaXplb2YoKnN0YXJ0LVx1MDAzZWNyYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDAwOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjg0CgkJCQkJCQlvdXRwdXQ6IDIzNwoJCQkJCQkJdGhvdWdodHM6IDE0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTW9kdWxlIExvYWRpbmcgYW5kIEtNU0FOIERldGVybWluYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNlbnRlcnMgb24gaG93IHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgc2VjdGlvbnMgZGVzaWduYXRlZCBhcyAmIzM0O3N0YW5kYWxvbmUsJiMzNDsgc3VjaCBhcyBwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RlIHRhZyBzZWN0aW9ucy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgYXBwZWFycyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCByZWxhdGVzIHRvIHRoZSBFTEYgc2VjdGlvbiBsYXlvdXQgYW5kIGFsbG9jYXRpb24uIFRoZSBpbnRlbnRpb24gaXMgdG8gaGFuZGxlIHRoZXNlIHN0YW5kYWxvbmUgc2VjdGlvbnMgc2VwYXJhdGVseSwgcG90ZW50aWFsbHkgYWxsb2NhdGluZyB0aGVtIGludG8gZGVkaWNhdGVkIG1lbW9yeSByZWdpb25zIHJhdGhlciB0aGFuIHBsYWNpbmcgdGhlbSB3aXRoaW4gdGhlIG1haW4gbW9kdWxlIG1lbW9yeSBhcmVhLiBUaGlzIGludm9sdmVzIGFuIGludGVyZXN0aW5nIGRhbmNlIHdpdGggYHNoX2VudHNpemVgIGJlaW5nIHNldCB0byBgU0hfRU5UU0laRV9TVEFOREFMT05FYCBhbmQgdGhlbiB0aGUgc3Vic2VxdWVudCBzdGVwcyBiYXNlZCBvbiB0aGF0IHNldHRpbmcuCgpUaGUgcHJvY2VzcyBraWNrcyBvZmYgd2l0aCBgcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnNgIHdoaWNoLCBhcyBleHBlY3RlZCwgc2V0cyBgc2hfYWRkcmAgYmFzZWQgb24gdGhlIHNlY3Rpb24mIzM5O3Mgb2Zmc2V0IGludG8gdGhlIGluaXRpYWwgbW9kdWxlIGltYWdlLiBUaGVuLCBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgaXMgY2FsbGVkLiBIZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBsb2dpYyBpbiBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9uc2AgYXR0ZW1wdHMgdG8gYWxsb2NhdGUgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IHVzaW5nIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYC4gSWYgc3VjY2Vzc2Z1bCwgdGhlIGRhdGEgaXMgY29waWVkIHVzaW5nIGBtZW1jcHlgLiBDcnVjaWFsbHksIGlmIHRoaXMgYWxsb2NhdGlvbiBmYWlscyAocmV0dXJuaW5nIGAtRUFHQUlOYCksIHRoZSBzZWN0aW9uIGlzICpub3QqIG1hcmtlZCBhcyBzdGFuZGFsb25lLCB3aGljaCBtZWFucyBgbGF5b3V0X3NlY3Rpb25zYCB3aWxsIGxheSBpdCBvdXQgaW4gdGhlIG5vcm1hbCBtb2R1bGUgbWVtb3J5LiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludCB0byBjaGVjay4gYGxheW91dF9zZWN0aW9uc2Agc3Vic2VxdWVudGx5IHNraXBzIHN0YW5kYWxvbmUgc2VjdGlvbnMsIG1lYW5pbmcgdGhvc2UgYXJlICpub3QqIGhhbmRsZWQgYnkgdGhlIGdlbmVyYWwgbGF5b3V0IGxvZ2ljLiBBZnRlciBzZWN0aW9uIGxheW91dCBpcyBkb25lLCBgbW92ZV9tb2R1bGVgIGlzIGNhbGxlZCwgYW5kLCBhZ2Fpbiwgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgc2tpcHBlZC4gVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBsYWlkIG91dCBpbiB0aGUgbm9ybWFsIG1vZHVsZSBtZW1vcnkgYXJlIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBFTEYgYnVmZmVyLgoKTXkgbWluZCB0aGVuIHNoaWZ0cyB0byBgYXBwbHlfcmVsb2NhdGlvbnMoKWAuIFRoZSBoaXN0b3JpY2FsIGhhbmRsaW5nIG9mIHRoZSBgcGNwdWAgc2VjdGlvbiBpcyB3aGVyZSB0aGUgY2hhbmdlIGlzIG1vc3QgZXZpZGVudC4gQmVmb3JlLCB0aGUgYHBjcHVgIHNlY3Rpb24gd2FzIHNwZWNpYWwsIGFuZCBpdHMgYFNIRl9BTExPQ2AgZmxhZyB3YXMgc3RyaXBwZWQsIHdoaWNoIGlzIHdoeSBpdCB3YXMgaGFuZGxlZCBpbiBhIGRpZmZlcmVudCBtYW5uZXIgd2l0aCByZWxvY2F0aW9ucyBhcHBsaWVkIHRvIHRoZSBpbml0aWFsIEVMRiB0ZW1wbGF0ZSBhbmQgdGhlbiBjb3BpZWQuIFRoaXMgcGF0Y2gsIGhvd2V2ZXIsIG1haW50YWlucyB0aGUgYFNIRl9BTExPQ2AgZmxhZyBmb3IgdGhlIGBwY3B1YCBzZWN0aW9uLCBidXQgaXQgaXMgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBzdGFuZGFsb25lIHNlY3Rpb24uIFRoZSBgc2hfZW50c2l6ZWAgYmVpbmcgc2V0IHRvIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIGVmZmVjdGl2ZWx5IGZsYWdzIGl0IGZvciBzZXBhcmF0ZSBoYW5kbGluZyBhbmQgaXMgdGhlbiBwcm9wZXJseSByZWxvY2F0ZWQuCgpUaGUgYW5hbHlzaXMgb2YgdGhlIGBhbGxvY190YWcuY2AgY2hhbmdlcyBpcyBzdHJhaWdodGZvcndhcmQuIFRoZXkgaW52b2x2ZSBlcnJvciBoYW5kbGluZyBpbiB0YWcgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBmYWlsdXJlcyBpbiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZWAuCgpOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0JiMzOTtzIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdC4gQWZ0ZXIgYSBkZXRhaWxlZCByZXZpZXcsIHRoZSBpbml0aWFsIEVMRiBtb2R1bGUgaW1hZ2UgKGBpbmZvLSZndDtoZHIgJiM0Mzsgc2hkci0mZ3Q7c2hfb2Zmc2V0YCkgaXMgYWx3YXlzIHZhbGlkIG1lbW9yeS4gU2VjdGlvbiBkYXRhIGlzIGNvcGllZCB1c2luZyBgbWVtY3B5YCBmcm9tIGluaXRpYWxpemVkIEVMRiBpbWFnZSBtZW1vcnksIGFuZCBubyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlIGFyZSBwcmVzZW50LiBObyBjb25kaXRpb25hbCBicmFuY2hpbmcgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgYW5kIHRoZSBzdHJ1Y3R1cmVzIGFyZSBhbHdheXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIEluIHNob3J0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgd3JpdHRlbiwgb3IgY29waWVkIHRoYXQgY291bGQgbGVhZCB0byB2dWxuZXJhYmlsaXRpZXMuIEFueSBtZW1vcnkgZXJyb3JzIHRoYXQgYXJpc2UgaGVyZSAob3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMsIG1lbW9yeSBsZWFrcywgZXRjLikgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOLgoKR2l2ZW4gdGhpcyB0aG9yb3VnaCBhbmFseXNpcywgYW5kIGJhc2VkIG9uIHRoZSBLTVNBTiBjcml0ZXJpYSwgdGhlcmUmIzM5O3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBuZWVkaW5nIEtNU0FOLiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgb2YgdGhlIHZ1bG5lcmFiaWxpdGllcyB0aGF0IEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLCBzdWNoIGFzIHVuaW5pdGlhbGl6ZWQga2VybmVsLXRvLXVzZXIgc3BhY2UgZGF0YSBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFRoaXMgcmVhbGx5IGJvaWxzIGRvd24gdG86IHRoaXMgcGF0Y2ggaXMgcmVmYWN0b3JpbmcgbW9kdWxlIGxvYWRpbmcuIEl0IGNoYW5nZXMgaG93IHN0YW5kYWxvbmUgc2VjdGlvbnMgYXJlIGhhbmRsZWQgZHVyaW5nIG1vZHVsZSBsb2FkaW5nLiBNZW1vcnkgaXMgYWxsb2NhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGxvYWRlZCBFTEYgbW9kdWxlIGltYWdlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIHN0YW5kYXJkIG1lbW9yeSBpc3N1ZXMsIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAwMDozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXG5cbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cbi0gQW55IHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIHNlY3Rpb24gbGF5b3V0cywgcmVsb2NhdGlvbnMsIG9yIHNlcGFyYXRlIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIHNlY3Rpb24gcmVhZHMvd3JpdGVzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zKSBhcmUgYWRkcmVzc2FibGUgZXJyb3JzIHRoYXQgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgRUxGIHNlY3Rpb24gbGF5b3V0IGFuZCBhbGxvY2F0aW9uIGxvZ2ljIGZvciBzdGFuZGFsb25lIG1vZHVsZSBzZWN0aW9ucyAoc3VjaCBhcyBwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFnL2FsbG9jX3RhZyBzZWN0aW9ucykgZHVyaW5nIG1vZHVsZSBsb2FkaW5nIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgYW5kIGFkanVzdHMgZXJyb3IgaGFuZGxpbmcgaW4gYG1tL2FsbG9jX3RhZy5jYC5cblxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XG4tIEtNU0FOIGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIHZhcmlhYmxlcywgZG9lcyBub3QgbGVhdmUgc3RydWN0dXJlIHBhZGRpbmdzIHVuaW5pdGlhbGl6ZWQsIGRvZXMgbm90IGV4cG9zZSBkYXRhIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBzdGF0ZS4gVGhlIHNlY3Rpb24gZGF0YSBjb3BpZWQgdmlhIGBtZW1jcHkoKWAgb3JpZ2luYXRlcyBmcm9tIGFscmVhZHktbG9hZGVkIEVMRiBpbWFnZSBidWZmZXJzLlxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXG5cblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTowOC4zMjU0MjYxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzg0NzE2MjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5pdF9tb2R1bGVcIixcbiAgICBcImZpbml0X21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvblwiLFxuICAgIFwiY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBFTEYgc2VjdGlvbiBsYXlvdXQgYW5kIGFsbG9jYXRpb24gbG9naWMgZm9yIHN0YW5kYWxvbmUgbW9kdWxlIHNlY3Rpb25zIChzdWNoIGFzIHBlci1DUFUgc2VjdGlvbnMgYW5kIGNvZGV0YWcvYWxsb2NfdGFnIHNlY3Rpb25zKSBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBhbmQgYWRqdXN0cyBlcnJvciBoYW5kbGluZyBpbiBgbW0vYWxsb2NfdGFnLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBkb2VzIG5vdCBsZWF2ZSBzdHJ1Y3R1cmUgcGFkZGluZ3MgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBUaGUgc2VjdGlvbiBkYXRhIGNvcGllZCB2aWEgYG1lbWNweSgpYCBvcmlnaW5hdGVzIGZyb20gYWxyZWFkeS1sb2FkZWQgRUxGIGltYWdlIGJ1ZmZlcnMuXFxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MDguMzI1NDMwMjM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTYxNzc2NjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDAwOjI5OjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuaW5kZXggOTZjYzk4NTY4ZWVhNS4uMGM2ZjMyZGRjYmYyZCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxcbkBAIC0zMjUsNiArMzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xcbiBcXHRNT0RfSU5JVF9ST0RBVEEsXFxuIFxcbiBcXHRNT0RfTUVNX05VTV9UWVBFUyxcXG4rXFxuK1xcdE1PRF9TVEFOREFMT05FID0gLTIsXFxuIFxcdE1PRF9JTlZBTElEID0gLTEsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmggYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmhcXG5pbmRleCAwNjExNjFjYzc5ZDkwLi40YzczODA3NGEyN2I4IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxcbisrKyBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxcbkBAIC0yOSw2ICsyOSwxNCBAQFxcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcXG4gI2RlZmluZSBTSF9FTlRTSVpFX09GRlNFVF9NQVNLXFx0KCgxVUwgXFx1MDAzY1xcdTAwM2MgKEJJVFNfUEVSX0xPTkcgLSBTSF9FTlRTSVpFX1RZUEVfQklUUykpIC0gMSlcXG4gXFxuKy8qXFxuKyAqIE1hcmtlciBmb3Igc2VjdGlvbnMgd2l0aCBhIHNlcGFyYXRlIGFsbG9jYXRpb24sIHdoaWNoIGFyZSBub3QgcGxhY2VkXFxuKyAqIGludG8gbW9kLVxcdTAwM2VtZW1bXS5cXG4rICovXFxuKyNkZWZpbmUgU0hfRU5UU0laRV9TVEFOREFMT05FXFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQoKCh1bnNpZ25lZCBsb25nKU1PRF9TVEFOREFMT05FIFxcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXFx0XFxcXFxcbitcXHQgXFx1MDAzY1xcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUKVxcbitcXG4gLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovXFxuICNkZWZpbmUgTU9EVUxFX0ZMQUdTX0JVRl9TSVpFIChUQUlOVF9GTEFHU19DT1VOVCArIDQpXFxuIFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXFxuaW5kZXggYzFiMzRkYzFlODlhYy4uNzYwNDQ5ZGRhYjIyNCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uY1xcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXFxuQEAgLTE2MTcsMTQgKzE2MTcsOCBAQCBzdGF0aWMgaW50IGFwcGx5X3JlbG9jYXRpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4gXFx0XFx0aWYgKGluZm9zZWMgXFx1MDAzZT0gaW5mby1cXHUwMDNlaGRyLVxcdTAwM2VlX3NobnVtKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuXFxuLVxcdFxcdCAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9uc1xcbi1cXHRcXHQgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWxcXG4tXFx0XFx0ICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIShpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm9zZWNdLnNoX2ZsYWdzIFxcdTAwMjYgU0hGX0FMTE9DKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgKCFpbmZvc2VjIHx8IGluZm9zZWMgIT0gaW5mby1cXHUwMDNlaW5kZXgucGNwdSkpXFxuK1xcdFxcdC8qIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuICovXFxuK1xcdFxcdGlmICghKGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXFx1MDAyNiBTSEZfQUxMT0MpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChpbmZvLVxcdTAwM2VzZWNoZHJzW2ldLnNoX2ZsYWdzIFxcdTAwMjYgU0hGX1JFTEFfTElWRVBBVENIKVxcbkBAIC0xNzE1LDI3ICsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXFxuIFxcbiBcXHRcXHRcXHRpZiAoKHMtXFx1MDAzZXNoX2ZsYWdzIFxcdTAwMjYgbWFza3NbbV1bMF0pICE9IG1hc2tzW21dWzBdXFxuIFxcdFxcdFxcdCAgICB8fCAocy1cXHUwMDNlc2hfZmxhZ3MgXFx1MDAyNiBtYXNrc1ttXVsxXSlcXG4tXFx0XFx0XFx0ICAgIHx8IHMtXFx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxcbitcXHRcXHRcXHQgICAgfHwgcy1cXHUwMDNlc2hfZW50c2l6ZSAhPSB+MFVMIC8qIG9mZnNldCBvciBzdGFuZGFsb25lICovXFxuIFxcdFxcdFxcdCAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKHR5cGUgPT0gTU9EX0lOVkFMSUQpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG9cXG4tXFx0XFx0XFx0ICogcHJlYWxsb2NhdGVkIGNvbnRpZ3VvdXMgbWVtb3J5Llxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy1cXHUwMDNlc2hfc2l6ZSkpIHtcXG4tXFx0XFx0XFx0XFx0LypcXG4tXFx0XFx0XFx0XFx0ICogcy1cXHUwMDNlc2hfZW50c2l6ZSB3b24ndCBiZSB1c2VkIGJ1dCBwb3B1bGF0ZSB0aGVcXG4tXFx0XFx0XFx0XFx0ICogdHlwZSBmaWVsZCB0byBhdm9pZCBjb25mdXNpb24uXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRzLVxcdTAwM2VzaF9lbnRzaXplID0gKCh1bnNpZ25lZCBsb25nKSh0eXBlKSBcXHUwMDI2IFNIX0VOVFNJWkVfVFlQRV9NQVNLKVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDNjXFx1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQ7XFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcbiBcXHRcXHRcXHRzLVxcdTAwM2VzaF9lbnRzaXplID0gbW9kdWxlX2dldF9vZmZzZXRfYW5kX3R5cGUobW9kLCB0eXBlLCBzLCBpKTtcXG4gXFx0XFx0XFx0cHJfZGVidWcoXFxcIlxcXFx0JXNcXFxcblxcXCIsIHNuYW1lKTtcXG4gXFx0XFx0fVxcbkBAIC0xNzQ1LDE2ICsxNzI1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXFxuIC8qXFxuICAqIExheSBvdXQgdGhlIFNIRl9BTExPQyBzZWN0aW9ucyBpbiBhIHdheSBub3QgZGlzc2ltaWxhciB0byBob3cgbGRcXG4gICogbWlnaHQgLS0gY29kZSwgcmVhZC1vbmx5IGRhdGEsIHJlYWQtd3JpdGUgZGF0YSwgc21hbGwgZGF0YS4gIFRhbGx5XFxuLSAqIHNpemVzLCBhbmQgcGxhY2UgdGhlIG9mZnNldHMgaW50byBzaF9lbnRzaXplIGZpZWxkczogaGlnaCBiaXQgbWVhbnMgaXRcXG4tICogYmVsb25ncyBpbiBpbml0LlxcbisgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBsYXlvdXRfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbi1cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluZm8tXFx1MDAzZWhkci1cXHUwMDNlZV9zaG51bTsgaSsrKVxcbi1cXHRcXHRpbmZvLVxcdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xcbi1cXG4gXFx0cHJfZGVidWcoXFxcIkNvcmUgc2VjdGlvbiBhbGxvY2F0aW9uIG9yZGVyIGZvciAlczpcXFxcblxcXCIsIG1vZC1cXHUwMDNlbmFtZSk7XFxuIFxcdF9fbGF5b3V0X3NlY3Rpb25zKG1vZCwgaW5mbywgZmFsc2UpO1xcbiBcXG5AQCAtMjgwMCw3ICsyNzc0LDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0aW50IGksIHJldDtcXG4gXFx0ZW51bSBtb2RfbWVtX3R5cGUgdCA9IE1PRF9NRU1fTlVNX1RZUEVTO1xcbi1cXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xcbiBcXG4gXFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcXG4gXFx0XFx0aWYgKCFtb2QtXFx1MDAzZW1lbVt0eXBlXS5zaXplKSB7XFxuQEAgLTI4MjAsMzQgKzI3OTMsMTMgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbmZvLVxcdTAwM2VoZHItXFx1MDAzZWVfc2hudW07IGkrKykge1xcbiBcXHRcXHR2b2lkICpkZXN0O1xcbiBcXHRcXHRFbGZfU2hkciAqc2hkciA9IFxcdTAwMjZpbmZvLVxcdTAwM2VzZWNoZHJzW2ldO1xcbi1cXHRcXHRjb25zdCBjaGFyICpzbmFtZTtcXG4gXFxuLVxcdFxcdGlmICghKHNoZHItXFx1MDAzZXNoX2ZsYWdzIFxcdTAwMjYgU0hGX0FMTE9DKSlcXG4rXFx0XFx0aWYgKCEoc2hkci1cXHUwMDNlc2hfZmxhZ3MgXFx1MDAyNiBTSEZfQUxMT0MpXFxuK1xcdFxcdCAgICB8fCBzaGRyLVxcdTAwM2VzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRzbmFtZSA9IGluZm8tXFx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVxcdTAwM2VzaF9uYW1lO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBMb2FkIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSBhcyB0aGV5IG1pZ2h0IHN0aWxsIGJlIHVzZWRcXG4tXFx0XFx0ICogYWZ0ZXIgbW9kdWxlIHVubG9hZC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUpKSB7XFxuLVxcdFxcdFxcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXFx1MDAzZXNoX3NpemUsXFxuLVxcdFxcdFxcdFxcdFxcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChtb2QsIGkpLCBzaGRyLVxcdTAwM2VzaF9hZGRyYWxpZ24pO1xcbi1cXHRcXHRcXHRpZiAoV0FSTl9PTighZGVzdCkpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoZGVzdCkpIHtcXG4tXFx0XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihkZXN0KTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXRfZXJyO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGVudW0gbW9kX21lbV90eXBlIHR5cGUgPSBzaGRyLVxcdTAwM2VzaF9lbnRzaXplIFxcdTAwM2VcXHUwMDNlIFNIX0VOVFNJWkVfVFlQRV9TSElGVDtcXG4tXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBvZmZzZXQgPSBzaGRyLVxcdTAwM2VzaF9lbnRzaXplIFxcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSztcXG4tXFxuLVxcdFxcdFxcdGRlc3QgPSBtb2QtXFx1MDAzZW1lbVt0eXBlXS5iYXNlICsgb2Zmc2V0O1xcbi1cXHRcXHR9XFxuK1xcdFxcdGRlc3QgPSBtb2QtXFx1MDAzZW1lbVtzaGRyLVxcdTAwM2VzaF9lbnRzaXplIFxcdTAwM2VcXHUwMDNlIFNIX0VOVFNJWkVfVFlQRV9TSElGVF0uYmFzZSArXFxuK1xcdFxcdCAgICAgICAoc2hkci1cXHUwMDNlc2hfZW50c2l6ZSBcXHUwMDI2IFNIX0VOVFNJWkVfT0ZGU0VUX01BU0spO1xcbiBcXG4gXFx0XFx0aWYgKHNoZHItXFx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xcbiBcXHRcXHRcXHQvKlxcbkBAIC0yODc5LDggKzI4MzEsNiBAQCBzdGF0aWMgaW50IG1vdmVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4gXFx0bW9kdWxlX21lbW9yeV9yZXN0b3JlX3JveChtb2QpO1xcbiBcXHR3aGlsZSAodC0tKVxcbiBcXHRcXHRtb2R1bGVfbWVtb3J5X2ZyZWUobW9kLCB0KTtcXG4tXFx0aWYgKGNvZGV0YWdfc2VjdGlvbl9mb3VuZClcXG4tXFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhtb2QpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yOTUxLDkgKzI5MDEsNTEgQEAgc3RhdGljIGJvb2wgYmxhY2tsaXN0ZWQoY29uc3QgY2hhciAqbW9kdWxlX25hbWUpXFxuIH1cXG4gY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7XFxuIFxcbisvKlxcbisgKiBBbGxvY2F0ZSBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkuIFRoZXkgYXJlIGxvYWRlZCBpbnRvIHByZWFsbG9jYXRlZFxcbisgKiBjb250aWd1b3VzIG1lbW9yeSBiZWNhdXNlIHRoZXkgbWF5IHN0aWxsIGJlIHVzZWQgYWZ0ZXIgdGhlIG1vZHVsZSBpc1xcbisgKiB1bmxvYWRlZC5cXG4rICpcXG4rICogSWYgdGhlIHNlcGFyYXRlIGFsbG9jYXRpb24gb3ZlcmZsb3dzLCBhbGxvY2F0ZSB0aGUgc2VjdGlvbiBub3JtYWxseVxcbisgKiBzbyB0aGF0IHRoZSBtb2R1bGUgY2FuIHN0aWxsIGJlIGxvYWRlZC5cXG4rICovXFxuK3N0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbit7XFxuK1xcdGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNlaGRyLVxcdTAwM2VlX3NobnVtOyBpKyspIHtcXG4rXFx0XFx0RWxmX1NoZHIgKnNoZHIgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpXTtcXG4rXFx0XFx0Y29uc3QgY2hhciAqc25hbWUgPSBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzICsgc2hkci1cXHUwMDNlc2hfbmFtZTtcXG4rXFx0XFx0dm9pZCAqZGVzdDtcXG4rXFxuK1xcdFxcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVxcdTAwM2Vtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihpbmZvLVxcdTAwM2Vtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbitcXHRcXHRcXHRcXHRhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQoaW5mby1cXHUwMDNlbW9kLCBpKSwgc2hkci1cXHUwMDNlc2hfYWRkcmFsaWduKTtcXG4rXFx0XFx0aWYgKFdBUk5fT04oIWRlc3QpKSB7XFxuK1xcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKGRlc3QgPT0gRVJSX1BUUigtRUFHQUlOKSlcXG4rXFx0XFx0XFx0LyogQWxsb2NhdGUgdGhlIHNlY3Rpb24gYXMgYSByZWd1bGFyIHNlY3Rpb24uICovXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoSVNfRVJSKGRlc3QpKSB7XFxuK1xcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kKTtcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChzaGRyLVxcdTAwM2VzaF90eXBlICE9IFNIVF9OT0JJVFMpXFxuK1xcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbitcXHRcXHRzaGRyLVxcdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcXG4rXFx0XFx0c2hkci1cXHUwMDNlc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogQWxsb3cgYXJjaGVzIHRvIGZyb2Igc2VjdGlvbiBjb250ZW50cyBhbmQgc2l6ZXMuICAqL1xcbkBAIC0yOTY3LDggKzI5NTksMTMgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFxuK1xcdC8qIFJlcHVycG9zZSBzaF9lbnRzaXplIHRvIHRyYWNrIHdoZXJlIGVhY2ggc2VjdGlvbiBpcyBhbGxvY2F0ZWQuICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbmZvLVxcdTAwM2VoZHItXFx1MDAzZWVfc2hudW07IGkrKylcXG4rXFx0XFx0aW5mby1cXHUwMDNlc2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtcXG4rXFxuIFxcdC8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovXFxuLVxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXFx1MDAyNj0gfih1bnNpZ25lZCBsb25nKVNIRl9BTExPQztcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWluZGV4LnBjcHUpXFxuK1xcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXFxuQEAgLTI5NzcsMTggKzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbiBcXHQgKi9cXG4gXFx0bW9kdWxlX21hcmtfcm9fYWZ0ZXJfaW5pdChpbmZvLVxcdTAwM2VoZHIsIGluZm8tXFx1MDAzZXNlY2hkcnMsIGluZm8tXFx1MDAzZXNlY3N0cmluZ3MpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcXG4tXFx0ICogdGhpcyBpcyBkb25lIGdlbmVyaWNhbGx5OyB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhbnlcXG4tXFx0ICogc3BlY2lhbCBjYXNlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZXMuXFxuLVxcdCAqL1xcbitcXHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xcbitcXHRlcnIgPSBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKGluZm8pO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXG4rXFx0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xcbiBcXHRsYXlvdXRfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4gXFx0bGF5b3V0X3N5bXRhYihpbmZvLVxcdTAwM2Vtb2QsIGluZm8pO1xcbiBcXG4gXFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXFxuIFxcdGVyciA9IG1vdmVfbW9kdWxlKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuLVxcdGlmIChlcnIpXFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVxcdTAwM2Vtb2QpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBNb2R1bGUgaGFzIGJlZW4gY29waWVkIHRvIGl0cyBmaW5hbCBwbGFjZSBub3c6IHJldHVybiBpdC4gKi9cXG4gXFx0bW9kID0gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcXG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xcbmluZGV4IGYzMGVmOGRkMjRjNzAuLjhmMTMzNjliMzJlY2QgMTAwNjQ0XFxuLS0tIGEvbW0vYWxsb2NfdGFnLmNcXG4rKysgYi9tbS9hbGxvY190YWcuY1xcbkBAIC04NDMsNiArODQzLDUyIEBAIHN0YXRpYyBpbnQgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUodm9pZClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXFxuK3tcXG4rXFx0TUFfU1RBVEUobWFzLCBcXHUwMDI2bW9kX2FyZWFfbXQsIG1vZHVsZV90YWdzLnNpemUsIG1vZHVsZV90YWdzLnNpemUpO1xcbitcXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XFxuK1xcdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XFxuK1xcdHN0cnVjdCBtb2R1bGUgKnZhbDtcXG4rXFxuK1xcdG1hc19sb2NrKFxcdTAwMjZtYXMpO1xcbitcXHRtYXNfZm9yX2VhY2hfcmV2KFxcdTAwMjZtYXMsIHZhbCwgMClcXG4rXFx0XFx0aWYgKHZhbCA9PSBtb2QpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRpZiAoIXVzZWQpXFxuK1xcdFxcdGdvdG8gcmVsZWFzZV9hcmVhO1xcbitcXG4rXFx0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XFxuK1xcdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xcbitcXHRpZiAoIWNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKSB7XFxuK1xcdFxcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcXG4rXFxuK1xcdFxcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFsbG9jX3RhZ19jb3VudGVycyBjb3VudGVyO1xcbitcXG4rXFx0XFx0XFx0aWYgKCF0YWctXFx1MDAzZWNvdW50ZXJzKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xcbitcXHRcXHRcXHRwcl9pbmZvKFxcXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0dGFnLVxcdTAwM2VjdC5maWxlbmFtZSwgdGFnLVxcdTAwM2VjdC5saW5lbm8sIHRhZy1cXHUwMDNlY3QubW9kbmFtZSxcXG4rXFx0XFx0XFx0XFx0dGFnLVxcdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dXNlZCA9IGZhbHNlO1xcbitcXHR9XFxuK3JlbGVhc2VfYXJlYTpcXG4rXFx0bWFzX3N0b3JlKFxcdTAwMjZtYXMsIHVzZWQgPyBcXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XFxuK1xcdHZhbCA9IG1hc19wcmV2X3JhbmdlKFxcdTAwMjZtYXMsIDApO1xcbitcXHRpZiAodmFsID09IFxcdTAwMjZwcmVwZW5kX21vZClcXG4rXFx0XFx0bWFzX3N0b3JlKFxcdTAwMjZtYXMsIE5VTEwpO1xcbitvdXQ6XFxuK1xcdG1hc191bmxvY2soXFx1MDAyNm1hcyk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbiBcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuIHtcXG5AQCAtOTEyLDEwICs5NTgsMTIgQEAgc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuIFxcdFxcdGludCBncm93X3JlcztcXG4gXFxuIFxcdFxcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xcbi1cXHRcXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xcbitcXHRcXHRpZiAoIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xcbiBcXHRcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbi1cXHRcXHRcXHRwcl93YXJuKFxcXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdG1vZC1cXHUwMDNlbmFtZSwgTlJfVU5VU0VEX1BBR0VGTEFHX0JJVFMpO1xcbitcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIldpdGggbW9kdWxlICVzIHRoZXJlIGFyZSB0b28gbWFueSB0YWdzIHRvIGZpdCBpbiAlZCBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICBtb2QtXFx1MDAzZW5hbWUsIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKTtcXG4rXFx0XFx0XFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdGdyb3dfcmVzID0gdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKTtcXG5AQCAtOTIzLDYgKzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbiBcXHRcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbiBcXHRcXHRcXHRwcl9lcnIoXFxcIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFsbG9jYXRpb24gdGFncyBpbiB0aGUgbW9kdWxlICVzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICAgICAgbW9kLVxcdTAwM2VuYW1lKTtcXG4rXFx0XFx0XFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTMwLDUyICs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBvZmZzZXQpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxcbi17XFxuLVxcdE1BX1NUQVRFKG1hcywgXFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcXG4tXFx0c3RydWN0IGFsbG9jX3RhZyAqc3RhcnRfdGFnO1xcbi1cXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xcbi1cXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XFxuLVxcbi1cXHRtYXNfbG9jayhcXHUwMDI2bWFzKTtcXG4tXFx0bWFzX2Zvcl9lYWNoX3JldihcXHUwMDI2bWFzLCB2YWwsIDApXFxuLVxcdFxcdGlmICh2YWwgPT0gbW9kKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdGlmICghdmFsKSAvKiBtb2R1bGUgbm90IGZvdW5kICovXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXG4tXFx0aWYgKCF1c2VkKVxcbi1cXHRcXHRnb3RvIHJlbGVhc2VfYXJlYTtcXG4tXFxuLVxcdHN0YXJ0X3RhZyA9IChzdHJ1Y3QgYWxsb2NfdGFnICopKG1vZHVsZV90YWdzLnN0YXJ0X2FkZHIgKyBtYXMuaW5kZXgpO1xcbi1cXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcXG4tXFx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xcbi1cXHRcXHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XFxuLVxcbi1cXHRcXHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFxcdTAwM2M9IGVuZF90YWc7IHRhZysrKSB7XFxuLVxcdFxcdFxcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcXG4tXFxuLVxcdFxcdFxcdGlmICghdGFnLVxcdTAwM2Vjb3VudGVycylcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRcXHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcXG4tXFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZmlsZW5hbWUsIHRhZy1cXHUwMDNlY3QubGluZW5vLCB0YWctXFx1MDAzZWN0Lm1vZG5hbWUsXFxuLVxcdFxcdFxcdFxcdHRhZy1cXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xcbi1cXHRcXHR9XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHVzZWQgPSBmYWxzZTtcXG4tXFx0fVxcbi1yZWxlYXNlX2FyZWE6XFxuLVxcdG1hc19zdG9yZShcXHUwMDI2bWFzLCB1c2VkID8gXFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xcbi1cXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcXHUwMDI2bWFzLCAwKTtcXG4tXFx0aWYgKHZhbCA9PSBcXHUwMDI2cHJlcGVuZF9tb2QpXFxuLVxcdFxcdG1hc19zdG9yZShcXHUwMDI2bWFzLCBOVUxMKTtcXG4tb3V0Olxcbi1cXHRtYXNfdW5sb2NrKFxcdTAwMjZtYXMpO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcXG4ge1xcbiBcXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTowOS44ODgxNjUyOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjUxNjIzMzc2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PRFVMRVNcIixcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbml0X21vZHVsZVwiLFxuICAgIFwiZmluaXRfbW9kdWxlXCIsXG4gICAgXCJjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uXCIsXG4gICAgXCJjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6Mjk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuaW5kZXggOTZjYzk4NTY4ZWVhNS4uMGM2ZjMyZGRjYmYyZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbkBAIC0zMjUsNiArMzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xuIFx0TU9EX0lOSVRfUk9EQVRBLFxuIFxuIFx0TU9EX01FTV9OVU1fVFlQRVMsXG4rXG4rXHRNT0RfU1RBTkRBTE9ORSA9IC0yLFxuIFx0TU9EX0lOVkFMSUQgPSAtMSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaCBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuaW5kZXggMDYxMTYxY2M3OWQ5MC4uNGM3MzgwNzRhMjdiOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuKysrIGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG5AQCAtMjksNiArMjksMTQgQEBcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXHQoKDFVTCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcbiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0tcdCgoMVVMIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKVxuIFxuKy8qXG4rICogTWFya2VyIGZvciBzZWN0aW9ucyB3aXRoIGEgc2VwYXJhdGUgYWxsb2NhdGlvbiwgd2hpY2ggYXJlIG5vdCBwbGFjZWRcbisgKiBpbnRvIG1vZC1cdTAwM2VtZW1bXS5cbisgKi9cbisjZGVmaW5lIFNIX0VOVFNJWkVfU1RBTkRBTE9ORVx0XHRcdFx0XHRcXFxuK1x0KCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSBcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXHRcXFxuK1x0IFx1MDAzY1x1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQpXG4rXG4gLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovXG4gI2RlZmluZSBNT0RVTEVfRkxBR1NfQlVGX1NJWkUgKFRBSU5UX0ZMQUdTX0NPVU5UICsgNClcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTYxNywxNCArMTYxNyw4IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0XHRpZiAoaW5mb3NlYyBcdTAwM2U9IGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW0pXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuXG4tXHRcdCAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9uc1xuLVx0XHQgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWxcbi1cdFx0ICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWluZm9zZWMgfHwgaW5mb3NlYyAhPSBpbmZvLVx1MDAzZWluZGV4LnBjcHUpKVxuK1x0XHQvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zLiAqL1xuK1x0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZmxhZ3MgXHUwMDI2IFNIRl9SRUxBX0xJVkVQQVRDSClcbkBAIC0xNzE1LDI3ICsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gXG4gXHRcdFx0aWYgKChzLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF1cbiBcdFx0XHQgICAgfHwgKHMtXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IG1hc2tzW21dWzFdKVxuLVx0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxuK1x0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTCAvKiBvZmZzZXQgb3Igc3RhbmRhbG9uZSAqL1xuIFx0XHRcdCAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmIChXQVJOX09OX09OQ0UodHlwZSA9PSBNT0RfSU5WQUxJRCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG9cbi1cdFx0XHQgKiBwcmVhbGxvY2F0ZWQgY29udGlndW91cyBtZW1vcnkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIHMtXHUwMDNlc2hfZW50c2l6ZSB3b24ndCBiZSB1c2VkIGJ1dCBwb3B1bGF0ZSB0aGVcbi1cdFx0XHRcdCAqIHR5cGUgZmllbGQgdG8gYXZvaWQgY29uZnVzaW9uLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzLVx1MDAzZXNoX2VudHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpKHR5cGUpIFx1MDAyNiBTSF9FTlRTSVpFX1RZUEVfTUFTSylcbi1cdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuIFx0XHRcdHMtXHUwMDNlc2hfZW50c2l6ZSA9IG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKG1vZCwgdHlwZSwgcywgaSk7XG4gXHRcdFx0cHJfZGVidWcoXCJcXHQlc1xcblwiLCBzbmFtZSk7XG4gXHRcdH1cbkBAIC0xNzQ1LDE2ICsxNzI1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gLypcbiAgKiBMYXkgb3V0IHRoZSBTSEZfQUxMT0Mgc2VjdGlvbnMgaW4gYSB3YXkgbm90IGRpc3NpbWlsYXIgdG8gaG93IGxkXG4gICogbWlnaHQgLS0gY29kZSwgcmVhZC1vbmx5IGRhdGEsIHJlYWQtd3JpdGUgZGF0YSwgc21hbGwgZGF0YS4gIFRhbGx5XG4tICogc2l6ZXMsIGFuZCBwbGFjZSB0aGUgb2Zmc2V0cyBpbnRvIHNoX2VudHNpemUgZmllbGRzOiBoaWdoIGJpdCBtZWFucyBpdFxuLSAqIGJlbG9uZ3MgaW4gaW5pdC5cbisgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXG4gICovXG4gc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKylcbi1cdFx0aW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xuLVxuIFx0cHJfZGVidWcoXCJDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbiBcdF9fbGF5b3V0X3NlY3Rpb25zKG1vZCwgaW5mbywgZmFsc2UpO1xuIFxuQEAgLTI4MDAsNyArMjc3NCw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIHtcbiBcdGludCBpLCByZXQ7XG4gXHRlbnVtIG1vZF9tZW1fdHlwZSB0ID0gTU9EX01FTV9OVU1fVFlQRVM7XG4tXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xuIFxuIFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbiBcdFx0aWYgKCFtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcbkBAIC0yODIwLDM0ICsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKSB7XG4gXHRcdHZvaWQgKmRlc3Q7XG4gXHRcdEVsZl9TaGRyICpzaGRyID0gXHUwMDI2aW5mby1cdTAwM2VzZWNoZHJzW2ldO1xuLVx0XHRjb25zdCBjaGFyICpzbmFtZTtcbiBcbi1cdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSlcbitcdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKVxuK1x0XHQgICAgfHwgc2hkci1cdTAwM2VzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0c25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4tXHRcdC8qXG4tXHRcdCAqIExvYWQgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IGFzIHRoZXkgbWlnaHQgc3RpbGwgYmUgdXNlZFxuLVx0XHQgKiBhZnRlciBtb2R1bGUgdW5sb2FkLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSxcbi1cdFx0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi1cdFx0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChJU19FUlIoZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IFBUUl9FUlIoZGVzdCk7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwM2VcdTAwM2UgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAyNiBTSF9FTlRTSVpFX09GRlNFVF9NQVNLO1xuLVxuLVx0XHRcdGRlc3QgPSBtb2QtXHUwMDNlbWVtW3R5cGVdLmJhc2UgKyBvZmZzZXQ7XG4tXHRcdH1cbitcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlRdLmJhc2UgK1xuK1x0XHQgICAgICAgKHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7XG4gXG4gXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xuIFx0XHRcdC8qXG5AQCAtMjg3OSw4ICsyODMxLDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4gXHRtb2R1bGVfbWVtb3J5X3Jlc3RvcmVfcm94KG1vZCk7XG4gXHR3aGlsZSAodC0tKVxuIFx0XHRtb2R1bGVfbWVtb3J5X2ZyZWUobW9kLCB0KTtcbi1cdGlmIChjb2RldGFnX3NlY3Rpb25fZm91bmQpXG4tXHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI5NTEsOSArMjkwMSw1MSBAQCBzdGF0aWMgYm9vbCBibGFja2xpc3RlZChjb25zdCBjaGFyICptb2R1bGVfbmFtZSlcbiB9XG4gY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7XG4gXG4rLypcbisgKiBBbGxvY2F0ZSBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkuIFRoZXkgYXJlIGxvYWRlZCBpbnRvIHByZWFsbG9jYXRlZFxuKyAqIGNvbnRpZ3VvdXMgbWVtb3J5IGJlY2F1c2UgdGhleSBtYXkgc3RpbGwgYmUgdXNlZCBhZnRlciB0aGUgbW9kdWxlIGlzXG4rICogdW5sb2FkZWQuXG4rICpcbisgKiBJZiB0aGUgc2VwYXJhdGUgYWxsb2NhdGlvbiBvdmVyZmxvd3MsIGFsbG9jYXRlIHRoZSBzZWN0aW9uIG5vcm1hbGx5XG4rICogc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBzdGlsbCBiZSBsb2FkZWQuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4re1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKykge1xuK1x0XHRFbGZfU2hkciAqc2hkciA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpXTtcbitcdFx0Y29uc3QgY2hhciAqc25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4rXHRcdHZvaWQgKmRlc3Q7XG4rXG4rXHRcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVx1MDAzZW1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuK1x0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKGluZm8tXHUwMDNlbW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuK1x0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbitcdFx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRpZiAoZGVzdCA9PSBFUlJfUFRSKC1FQUdBSU4pKVxuK1x0XHRcdC8qIEFsbG9jYXRlIHRoZSBzZWN0aW9uIGFzIGEgcmVndWxhciBzZWN0aW9uLiAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoSVNfRVJSKGRlc3QpKSB7XG4rXHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNoZHItXHUwMDNlc2hfdHlwZSAhPSBTSFRfTk9CSVRTKVxuK1x0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbitcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbitcdFx0c2hkci1cdTAwM2VzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG5AQCAtMjk2Nyw4ICsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXG4rXHQvKiBSZXB1cnBvc2Ugc2hfZW50c2l6ZSB0byB0cmFjayB3aGVyZSBlYWNoIHNlY3Rpb24gaXMgYWxsb2NhdGVkLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKVxuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XG4rXG4gXHQvKiBXZSB3aWxsIGRvIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciBwZXItY3B1IHNlY3Rpb25zIGxhdGVyLiAqL1xuLVx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuK1x0aWYgKGluZm8tXHUwMDNlaW5kZXgucGNwdSlcbitcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcbiBcbiBcdC8qXG4gXHQgKiBNYXJrIHJlbGV2YW50IHNlY3Rpb25zIGFzIFNIRl9ST19BRlRFUl9JTklUIHNvIGxheW91dF9zZWN0aW9ucygpIGNhblxuQEAgLTI5NzcsMTggKzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbi1cdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55XG4tXHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbi1cdCAqL1xuK1x0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cbitcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xuIFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFxuIFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4gXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4tXHRpZiAoZXJyKVxuK1x0aWYgKGVycikge1xuK1x0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdH1cbiBcbiBcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xuIFx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggZjMwZWY4ZGQyNGM3MC4uOGYxMzM2OWIzMmVjZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTg0Myw2ICs4NDMsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4re1xuK1x0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuK1x0c3RydWN0IG1vZHVsZSAqdmFsO1xuK1xuK1x0bWFzX2xvY2soXHUwMDI2bWFzKTtcbitcdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4rXHRcdGlmICh2YWwgPT0gbW9kKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIXVzZWQpXG4rXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuK1xuK1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4rXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbitcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbitcdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuK1xuK1x0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbitcdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4rXG4rXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbitcdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbitcdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR1c2VkID0gZmFsc2U7XG4rXHR9XG4rcmVsZWFzZV9hcmVhOlxuK1x0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuK1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbitcdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4rXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuK291dDpcbitcdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkxMiwxMCArOTU4LDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRpbnQgZ3Jvd19yZXM7XG4gXG4gXHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xuLVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbitcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbi1cdFx0XHRcdG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cHJfd2Fybl9vbmNlKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4rXHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0fVxuIFxuIFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG5AQCAtOTIzLDYgKzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gXHRcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbiBcdFx0XHQgICAgICAgbW9kLVx1MDAzZW5hbWUpO1xuK1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTMwLDUyICs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcbi17XG4tXHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbi1cdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcbi1cdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XG4tXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4tXG4tXHRtYXNfbG9jayhcdTAwMjZtYXMpO1xuLVx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbi1cdFx0aWYgKHZhbCA9PSBtb2QpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmICghdXNlZClcbi1cdFx0Z290byByZWxlYXNlX2FyZWE7XG4tXG4tXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwiLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXHUwMDNlY3QubGluZW5vLCB0YWctXHUwMDNlY3QubW9kbmFtZSxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHVzZWQgPSBmYWxzZTtcbi1cdH1cbi1yZWxlYXNlX2FyZWE6XG4tXHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4tXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcdTAwMjZtYXMsIDApO1xuLVx0aWYgKHZhbCA9PSBcdTAwMjZwcmVwZW5kX21vZClcbi1cdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4tb3V0OlxuLVx0bWFzX3VubG9jayhcdTAwMjZtYXMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiB7XG4gXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MDkuODg4MTY3NzYyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDM0NDY0NDc4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgcG90ZW50aWFsIGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBjb25zaWRlcmluZyB3aGF0IGNvbmZpZyBvcHRpb25zIG1pZ2h0IGJlIGludm9sdmVkLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBmaWxlcywgYW5kIGltbWVkaWF0ZWx5IEknbSBsb29raW5nIGZvciB0aGUgXCJ3aHlcIiBiZWhpbmQgdGhlc2UgY2hhbmdlcy5cblxuRmlyc3QsIGBpbmNsdWRlL2xpbnV4L21vZHVsZS5oYCBoYXMgYSBuZXcgZW51bSB2YWx1ZSwgYE1PRF9TVEFOREFMT05FID0gLTJgLCBhZGRlZCB0byBgZW51bSBtb2RfbWVtX3R5cGVgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBUaGVuIGBrZXJuZWwvbW9kdWxlL2ludGVybmFsLmhgIGFkZHMgdGhlIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIG1hY3JvIOKAkyBzbyB0aGlzIGAtMmAgaXMgZGVmaW5pdGVseSBjb25uZWN0ZWQgdG8gdGhlIHN0YW5kYWxvbmUgbWVtb3J5IHR5cGUuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGEgZGlzdGluY3QgbWVtb3J5IHJlZ2lvbiBmb3IgbW9kdWxlIGxvYWRpbmcuXG5cblRoZSByZWFsIG1lYXQgb2YgdGhlIGNoYW5nZXMgc2VlbXMgdG8gYmUgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYC4gSXQncyBtb2RpZnlpbmcgY29yZSBtb2R1bGUgbGF5b3V0IGFuZCBhbGxvY2F0aW9uIHJvdXRpbmVzOiBgYXBwbHlfcmVsb2NhdGlvbnNgLCBgX19sYXlvdXRfc2VjdGlvbnNgLCBgbGF5b3V0X3NlY3Rpb25zYCwgYG1vdmVfbW9kdWxlYCwgYW5kIGBsYXlvdXRfYW5kX2FsbG9jYXRlYC4gUGx1cywgdGhlcmUncyB0aGUgaW50cm9kdWN0aW9uIG9mIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYC4gVGhpcyBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IHNlY3Rpb25zLCBwYXJ0aWN1bGFybHkgY29kZXRhZyBzZWN0aW9ucyBhbmQgcGVyY3B1IHNlY3Rpb25zIChzdGFuZGFsb25lIHNlY3Rpb25zKSwgYXJlIGhhbmRsZWQgZHVyaW5nIG1vZHVsZSBsb2FkaW5nLiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGZvY3VzZWQgb24gZW5zdXJpbmcgdGhhdCB0aGVzZSBuZXcgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IG1hbmFnZWQgZHVyaW5nIGxvYWRpbmcgYW5kIHJlbG9jYXRpb24uXG5cbkZpbmFsbHksIGBtbS9hbGxvY190YWcuY2Agc2VlcyBzb21lIGludGVyZXN0aW5nIHJlb3JkZXJpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGFyb3VuZCBtb2R1bGUgdGFnIGFsbG9jYXRpb24uIFRoZSBgcmVsZWFzZV9tb2R1bGVfdGFnc2AgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuIEluIGByZXNlcnZlX21vZHVsZV90YWdzYCwgdGhlcmUncyBhIHNwZWNpZmljIGNoZWNrIGZvciBgIXRhZ3NfYWRkcmVzc2FibGUoKWAsIGFuZCBpZiBpdCdzIHRydWUsIGl0IHJlbGVhc2VzIHRhZ3MgYW5kIHJldHVybnMgYC1FQUdBSU5gLiBBbHNvLCB0aGVyZSdzIGEgZmFpbHVyZSByZWxlYXNlIGZvciBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGUoKWAuIFRoaXMgaXMga2V5LiBJdCBpbXBsaWVzIGEgbmV3IGFwcHJvYWNoIG9yIGNvbmRpdGlvbiB3aGVyZSBtZW1vcnkgdGFnZ2luZyBtaWdodCBmYWlsIGFuZCByZXF1aXJlcyBhIHJldHJ5IG9yIGZhbGxiYWNrLiBUaGlzIGNvdWxkIG9wZW4gaW50ZXJlc3RpbmcgZnV6emluZyBwb3NzaWJpbGl0aWVzLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZnV6emFibGUuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBjb250cm9sbGVkIGJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFyb3VuZCBgYWxsb2NfdGFnYCBhbmQgbW9kdWxlIGxvYWRpbmcsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgb3IgdHJpZ2dlcnMgZm9yIHRoZXNlIGNoYW5nZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGV4cG9zZSB0aGVzZSBuZXcgcGF0aHMsIHNvIEkgY2FuIGNyZWF0ZSBhIGZ1enppbmcgY29uZmlndXJhdGlvbiB0aGF0IHJlYWNoZXMgdGhlc2UgbmV3IGZlYXR1cmVzLiBUaGlzIHBhdGNoIGhhcyBkZWZpbml0ZWx5IGNhdWdodCBteSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2ODEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToxNC4yMzI4MTQ5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk2NjY5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjItXFxubW0vS2NvbmZpZy5kZWJ1ZzozMjM6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9LY29uZmlnLmRlYnVnLTMyNC1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzUtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMzY6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzctXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbm1tL0tjb25maWcuZGVidWctMzM4LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWcuZGVidWc6MzM5OlxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWctMzQwLVxcbm1tL0tjb25maWcuZGVidWc6MzQxOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDItXFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcbm1tL0tjb25maWcuZGVidWctMzQzLVxcdGRlZmF1bHQgblxcbm1tL0tjb25maWcuZGVidWc6MzQ0OlxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL0tjb25maWcuZGVidWc6MzQ1OlxcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbm1tL0tjb25maWcuZGVidWctMzQ2LVxcdGhlbHBcXG4tLVxcbm1tL01ha2VmaWxlPTE0OT1vYmotJChDT05GSUdfTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUKSArPSB0ZXN0cy9sYXp5X21tdV9tb2RlX2t1bml0Lm9cXG5tbS9NYWtlZmlsZToxNTA6b2JqLSQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpICs9IGFsbG9jX3RhZy5vXFxuLS1cXG5tbS9hbGxvY190YWcuYy0yOS1cXG5tbS9hbGxvY190YWcuYzozMDojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vYWxsb2NfdGFnLmMtMzEtc3RhdGljIGJvb2wgbWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gdHJ1ZTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ5PUVYUE9SVF9TWU1CT0woX3NoYXJlZF9hbGxvY190YWcpO1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNTEtXFxubW0vYWxsb2NfdGFnLmM6NTI6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbm1tL2FsbG9jX3RhZy5jLTUzLVxcdFxcdFxcdG1lbV9hbGxvY19wcm9maWxpbmdfa2V5KTtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTExMjk9c3RhdGljIF9faW5pdCBib29sIG5lZWRfcGFnZV9hbGxvY190YWdnaW5nKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMTM2LVxcbm1tL2FsbG9jX3RhZy5jOjExMzc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vYWxsb2NfdGFnLmMtMTEzOC0vKlxcbi0tXFxubW0vYWxsb2NfdGFnLmM9MTIxNT1zdGF0aWMgdm9pZCBfX2luaXQgY2xlYXJfZWFybHlfYWxsb2NfcGZuX3RhZ19yZWZzKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMjY4LX1cXG5tbS9hbGxvY190YWcuYzoxMjY5OiNlbHNlIC8qICFDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL2FsbG9jX3RhZy5jLTEyNzAtc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBjbGVhcl9lYXJseV9hbGxvY19wZm5fdGFnX3JlZnModm9pZCkge31cXG5tbS9hbGxvY190YWcuYzoxMjcxOiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbm1tL2FsbG9jX3RhZy5jLTEyNzItXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMjkwPXN0YXRpYyBpbnQgcHJvY19tZW1fcHJvZmlsaW5nX2hhbmRsZXIoY29uc3Qgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzMDEtXFxubW0vYWxsb2NfdGFnLmM6MTMwMjojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9hbGxvY190YWcuYy0xMzAzLVxcdFxcdC8qIFVzZXIgY2FuJ3QgdG9nZ2xlIHByb2ZpbGluZyB3aGlsZSBkZWJ1Z2dpbmcgKi9cXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0xMjAyPXN0YXRpYyB2b2lkIGNsZWFyX2hpZ2hwYWdlc19rYXNhbl90YWdnZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMjE2LVxcbm1tL3BhZ2VfYWxsb2MuYzoxMjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3BhZ2VfYWxsb2MuYy0xMjE4LVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEyODM9c3RhdGljIGlubGluZSB2b2lkIHBnYWxsb2NfdGFnX3N1Yl9wYWdlcyhzdHJ1Y3QgYWxsb2NfdGFnICp0YWcsIHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMjg4LVxcbm1tL3BhZ2VfYWxsb2MuYzoxMjg5OiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vcGFnZV9hbGxvYy5jLTEyOTAtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MTI5ND1zdGF0aWMgaW5saW5lIHZvaWQgcGdhbGxvY190YWdfc3ViX3BhZ2VzKHN0cnVjdCBhbGxvY190YWcgKnRhZywgdW5zaWduZWQgaW50IG5yKSB7fVxcbm1tL3BhZ2VfYWxsb2MuYy0xMjk1LVxcbm1tL3BhZ2VfYWxsb2MuYzoxMjk2OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3BhZ2VfYWxsb2MuYy0xMjk3LVxcbi0tXFxubW0vcGFnZV9leHQuYz04MD1zdGF0aWMgc3RydWN0IHBhZ2VfZXh0X29wZXJhdGlvbnMgKnBhZ2VfZXh0X29wc1tdIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5tbS9wYWdlX2V4dC5jLTg2LSNlbmRpZlxcbm1tL3BhZ2VfZXh0LmM6ODc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGFnZV9leHQuYy04OC1cXHRcXHUwMDI2cGFnZV9hbGxvY190YWdnaW5nX29wcyxcXG4tLVxcbm1tL3BhZ2VfZXh0LmM9MTAwPXN0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX3VzYWdlO1xcbm1tL3BhZ2VfZXh0LmMtMTAxLVxcbm1tL3BhZ2VfZXh0LmM6MTAyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbm1tL3BhZ2VfZXh0LmMtMTAzLS8qXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD0zNT1zdHJ1Y3QgcGNwdW9ial9leHQge1xcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmgtMzgtI2VuZGlmXFxubW0vcGVyY3B1LWludGVybmFsLmg6Mzk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGVyY3B1LWludGVybmFsLmgtNDAtXFx0dW5pb24gY29kZXRhZ19yZWZcXHR0YWc7XFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC00My1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo0NDojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIHx8IGRlZmluZWQoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkcpXFxubW0vcGVyY3B1LWludGVybmFsLmgtNDUtI2RlZmluZSBORUVEX1BDUFVPQkpfRVhUXFxuLS1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaD05MD1zdGF0aWMgaW5saW5lIGJvb2wgbmVlZF9wY3B1b2JqX2V4dCh2b2lkKVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTkxLXtcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDo5MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORykpXFxubW0vcGVyY3B1LWludGVybmFsLmgtOTMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9wZXJjcHUuYz0xNjg4PXN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfZnJlZV9ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9wZXJjcHUuYy0xNjkyLVxcbm1tL3BlcmNwdS5jOjE2OTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vcGVyY3B1LmMtMTY5NC1zdGF0aWMgdm9pZCBwY3B1X2FsbG9jX3RhZ19hbGxvY19ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZixcXG4tLVxcbm1tL3Nob3dfbWVtLmM9NDA4PXZvaWQgX19zaG93X21lbSh1bnNpZ25lZCBpbnQgZmlsdGVyLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzayxcXG4tLVxcbm1tL3Nob3dfbWVtLmMtNDM0LSNlbmRpZlxcbm1tL3Nob3dfbWVtLmM6NDM1OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3Nob3dfbWVtLmMtNDM2LVxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWVtX2FsbG9jX3Byb2ZpbGluZ19zcGlubG9jayk7XFxuLS1cXG5tbS9zbGFiLmg9NjA0PXN0cnVjdCBzbGFib2JqX2V4dCB7XFxuLS1cXG5tbS9zbGFiLmgtNjEyLSNlbmRpZlxcbm1tL3NsYWIuaDo2MTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2xhYi5oLTYxNC1cXHRcXHR1bmlvbiBjb2RldGFnX3JlZiBfY3RyZWY7XFxuLS1cXG5tbS9zbGFiLmgtNjE4LVxcbm1tL3NsYWIuaDo2MTk6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2xhYi5oOjYyMDpERUNMQVJFX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbm1tL3NsYWIuaC02MjEtXFx0XFx0XFx0IHNsYWJfb2JqX2V4dF9oYXNfY29kZXRhZ19rZXkpO1xcbi0tXFxubW0vc2xhYi5oPTYyMz1zdGF0aWMgaW5saW5lIGJvb2wgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnKHZvaWQpXFxubW0vc2xhYi5oLTYyNC17XFxubW0vc2xhYi5oOjYyNTpcXHRyZXR1cm4gc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFQsXFxubW0vc2xhYi5oLTYyNi1cXHRcXHRcXHRcXHQgICBcXHUwMDI2c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuLS1cXG5tbS9zbGFiLmg9ODA3PXNsYWJfb2JqX2V4dF9zZXRfb2JqY2coc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBzbGFib2JqX2V4dCAqb2JqX2V4dCxcXG4tLVxcbm1tL3NsYWIuaC04MTYtXFxubW0vc2xhYi5oOjgxNzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9zbGFiLmgtODE4LXN0YXRpYyBpbmxpbmUgdW5pb24gY29kZXRhZ19yZWYgKlxcbi0tXFxubW0vc2x1Yi5jPTIxND1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xcbi0tXFxubW0vc2x1Yi5jLTIxNi1cXG5tbS9zbHViLmM6MjE3OiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xcbm1tL3NsdWIuYzoyMTg6REVGSU5FX1NUQVRJQ19LRVlfTUFZQkUoQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxULFxcbm1tL3NsdWIuYy0yMTktXFx0XFx0XFx0c2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2tleSk7XFxuLS1cXG5tbS9zbHViLmM9MjA2OT1zdGF0aWMgaW5saW5lIHZvaWQgZGVjX3NsYWJzX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTIwODYtXFxubW0vc2x1Yi5jOjIwODc6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vc2x1Yi5jLTIwODgtXFxuLS1cXG5tbS9zbHViLmM9MjEyND1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIxNDktXFxubW0vc2x1Yi5jOjIxNTA6I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG5tbS9zbHViLmMtMjE1MS1cXG4tLVxcbm1tL3NsdWIuYz0yMTU0PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjE1Ni1cXG5tbS9zbHViLmM6MjE1NzojZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG5tbS9zbHViLmMtMjE1OC1cXG4tLVxcbm1tL3NsdWIuYz0yMzQ2PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzNTItXFxubW0vc2x1Yi5jOjIzNTM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzNTQtXFxuLS1cXG5tbS9zbHViLmM9MjQ2OT1zdGF0aWMgdm9pZCBfX2luaXQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDgwLVxcbm1tL3NsdWIuYzoyNDgxOiNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HICovXFxubW0vc2x1Yi5jLTI0ODItXFxuLS1cXG5tbS9zbHViLmM9MjQ5NT1zdGF0aWMgaW5saW5lIHZvaWQgc2xhYl9vYmpfZXh0X2hhc19jb2RldGFnX2luaXQodm9pZClcXG4tLVxcbm1tL3NsdWIuYy0yNDk4LVxcbm1tL3NsdWIuYzoyNDk5OiNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElORyAqL1xcbm1tL3NsdWIuYy0yNTAwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToxNC4zMzI0ODY2NTNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA4MTQwMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipLY29uZmlnIERlZXAgRGl2ZTogQ09ERV9UQUdHSU5HIGFuZCBNRU1fQUxMT0NfUFJPRklMSU5HKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIGRpdmUgaW50byBzb21lIEtjb25maWcgb3B0aW9ucy4gTGV0J3Mgc2VlLi4uIHdoYXQncyBvbiB0aGUgYWdlbmRhIHRvZGF5PyBBaCwgeWVzLCBgQ09ERV9UQUdHSU5HYCBhbmQgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaG9zZSB0d28gYXJlIG9mdGVuIGludGVydHdpbmVkLCBlc3BlY2lhbGx5IHdoZW4gd2UncmUgdGhpbmtpbmcgYWJvdXQgbG93LWxldmVsIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXkgcGxheSB0b2dldGhlciBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncywgYW5kIHdoYXQgaW1wbGljYXRpb25zIGVhY2ggaGFzIG9uIHRoZSBrZXJuZWwncyBiZWhhdmlvciBhbmQgcGVyZm9ybWFuY2UsIGFuZCB0aGUgYW1vdW50IG9mIGluc3RydW1lbnRhdGlvbiB0byBiZSBhd2FyZSBvZi4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSB0byBkZXRlcm1pbmUgaG93IHRoaXMgYWZmZWN0cyB0aGUgc3lzdGVtLCBhbmQgd2hhdCB0aGUgdHJhZGUtb2ZmcyBhcmUuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB3aGVyZSB0aGVzZSBhcmUgdXNlZCBhcyB0aGlzIGNvdWxkIGFmZmVjdCB0aGUgZW50aXJlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzNzgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToxNi40NDA2Mjk5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY5NTQ5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENPREVfVEFHR0lOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTEwMTQ9Y29uZmlnIERFQlVHX1NUQUNLT1ZFUkZMT1dcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTEwMzEtXFxubGliL0tjb25maWcuZGVidWc6MTAzMjpjb25maWcgQ09ERV9UQUdHSU5HXFxubGliL0tjb25maWcuZGVidWctMTAzMy1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjE2LjU0NzU5NTU4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1OTY0MTA0NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIEtjb25maWcgaW4gdGhlIFdpbGQqKlxuXG5Pa2F5LCBzbyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMsIGNoYXNpbmcgZG93biBhIGJ1Zy4gVGhlIHByb2JsZW0ncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgZGVidWcgY29uZmlndXJhdGlvbiBvcHRpb24uIEtub3dpbmcgdGhpcyBjb2RlYmFzZSwgSSBjYW4gYWxtb3N0IHNtZWxsIHdoZXJlIHRoZSBpc3N1ZSBtaWdodCBiZS4gTXkgZ3V0IHRlbGxzIG1lIHRvIHplcm8gaW4gb24gYGxpYi9LY29uZmlnLmRlYnVnYC4gSXQncyBhIGtleSBmaWxlIGZvciBhbnkgZGVidWdnaW5nLXJlbGF0ZWQgc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoYXQgbGluZSAxMDMyIG1pZ2h0IGhvbGQgYSBjbHVlLiBJdCdzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50IGZvciBkaWdnaW5nIGluIGFuZCB0YWtpbmcgYSBsb29rLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MTkuMTQ0MDA4NjA4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9LY29uZmlnLmRlYnVnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjU6XFx0XFx0ICBpbnZvbHZlZC5cXG4xMDI2OlxcdFxcbjEwMjc6XFx0XFx0ICBVc2UgdGhpcyBpbiBjYXNlcyB3aGVyZSB5b3Ugc2VlIGFwcGFyZW50bHkgcmFuZG9tIG1lbW9yeVxcbjEwMjg6XFx0XFx0ICBjb3JydXB0aW9uLCBlc3BlY2lhbGx5IGlmIGl0IGFwcGVhcnMgaW4gJ3N0cnVjdCB0aHJlYWRfaW5mbydcXG4xMDI5OlxcdFxcbjEwMzA6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IFxcXCJOXFxcIi5cXG4xMDMxOlxcdFxcbjEwMzI6XFx0Y29uZmlnIENPREVfVEFHR0lOR1xcbjEwMzM6XFx0XFx0Ym9vbFxcbjEwMzQ6XFx0XFx0c2VsZWN0IEtBTExTWU1TXFxuMTAzNTpcXHRcXG4xMDM2OlxcdHNvdXJjZSBcXFwibGliL0tjb25maWcua2FzYW5cXFwiXFxuMTAzNzpcXHRzb3VyY2UgXFxcImxpYi9LY29uZmlnLmtmZW5jZVxcXCJcXG4xMDM4OlxcdHNvdXJjZSBcXFwibGliL0tjb25maWcua21zYW5cXFwiXFxuMTAzOTpcXHRcXG4xMDQwOlxcdGVuZG1lbnUgIyBcXFwiTWVtb3J5IERlYnVnZ2luZ1xcXCJcXG4xMDQxOlxcdFxcbjEwNDI6XFx0Y29uZmlnIERFQlVHX1NISVJRXFxuMTA0MzpcXHRcXHRib29sIFxcXCJEZWJ1ZyBzaGFyZWQgSVJRIGhhbmRsZXJzXFxcIlxcbjEwNDQ6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcXG4xMDQ1OlxcdFxcdGhlbHBcXG4xMDQ2OlxcdFxcdCAgRW5hYmxlIHRoaXMgdG8gZ2VuZXJhdGUgYSBzcHVyaW91cyBpbnRlcnJ1cHQganVzdCBiZWZvcmUgYSBzaGFyZWRcXG4xMDQ3OlxcdFxcdCAgaW50ZXJydXB0IGhhbmRsZXIgaXMgZGVyZWdpc3RlcmVkIChnZW5lcmF0aW5nIG9uZSB3aGVuIHJlZ2lzdGVyaW5nXFxuMTA0ODpcXHRcXHQgIGlzIGN1cnJlbnRseSBkaXNhYmxlZCkuIERyaXZlcnMgbmVlZCB0byBoYW5kbGUgdGhpcyBjb3JyZWN0bHkuIFNvbWVcXG4xMDQ5OlxcdFxcdCAgZG9uJ3QgYW5kIG5lZWQgdG8gYmUgY2F1Z2h0LlxcbjEwNTA6XFx0XFxuMTA1MTpcXHRtZW51IFxcXCJEZWJ1ZyBPb3BzLCBMb2NrdXBzIGFuZCBIYW5nc1xcXCJcXG4xMDUyOlxcdFxcbjEwNTM6XFx0Y29uZmlnIFBBTklDX09OX09PUFNcXG4xMDU0OlxcdFxcdGJvb2wgXFxcIlBhbmljIG9uIE9vcHNcXFwiXFxuMTA1NTpcXHRcXHRoZWxwXFxuMTA1NjpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBrZXJuZWwgdG8gcGFuaWMgd2hlbiBpdCBvb3BzZXMuIFRoaXNcXG4xMDU3OlxcdFxcdCAgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzZXR0aW5nIG9vcHM9cGFuaWMgb24gdGhlIGtlcm5lbCBjb21tYW5kXFxuMTA1ODpcXHRcXHQgIGxpbmUuXFxuMTA1OTpcXHRcXG4xMDYwOlxcdFxcdCAgVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCB0byBlbnN1cmUgdGhhdCB0aGUga2VybmVsIGRvZXMgbm90IGRvXFxuMTA2MTpcXHRcXHQgIGFueXRoaW5nIGVycm9uZW91cyBhZnRlciBhbiBvb3BzIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBkYXRhXFxuMTA2MjpcXHRcXHQgIGNvcnJ1cHRpb24gb3Igb3RoZXIgaXNzdWVzLlxcbjEwNjM6XFx0XFxuMTA2NDpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MTkuMTQ0MTg5MjM4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4MzUyMDE5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBEZWJ1ZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIHRyb3VibGVzaG9vdGluZyBzb21ldGhpbmcsIGFuZCBteSBndXQgZmVlbGluZyBpcyB0ZWxsaW5nIG1lIGl0J3MgbGlrZWx5IGEgY29uZmlndXJhdGlvbiBpc3N1ZSByZWxhdGVkIHRvIGRlYnVnZ2luZy4gR2l2ZW4gdGhhdCwgbGV0J3MgemVybyBpbiBvbiBgbW0vS2NvbmZpZy5kZWJ1Z2AuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBzd2VldCBzcG90IHRvIGxvb2sgZm9yIHRoaXMgaXNzdWUgbWlnaHQgYmUgYXJvdW5kIGxpbmUgMzIwLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQncyBhIGZhaXJseSBjb21tb24gc3BvdCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgZGVidWcgb3B0aW9ucywgb3IgcGVyaGFwcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHN1Y2ggb3B0aW9ucywgdG8gYmUgZGVmaW5lZC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBqdW1wcyBvdXQsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGNvbmRpdGlvbmFscyBvciByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgY29uZmlnIG9wdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRlcGVuZGVuY2llcyBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToyMS4wMjc3MTE4MjhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0ICBmYXVsdHMgaGFuZGxlZCB1bmRlciBwcm90ZWN0aW9uIG9mIHBlci12bWEgbG9ja3MuIFdoZW4gZW5hYmxlZCwgdGhlXFxuIDMxNjpcXHRcXHQgIGNvdW50ZXJzIGFyZSBleHBvc2VkIGluIC9wcm9jL3Ztc3RhdC4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yXFxuIDMxNzpcXHRcXHQgIGtlcm5lbCBkZXZlbG9wZXJzIHRvIGV2YWx1YXRlIGVmZmVjdGl2ZW5lc3Mgb2YgcGVyLXZtYSBsb2NrcyBhbmQgdG9cXG4gMzE4OlxcdFxcdCAgaWRlbnRpZnkgcGF0aG9sb2dpY2FsIGNhc2VzLiBDb3VudGluZyB0aGVzZSBldmVudHMgaW50cm9kdWNlcyBhIHNtYWxsXFxuIDMxOTpcXHRcXHQgIG92ZXJoZWFkIGluIHRoZSBwYWdlIGZhdWx0IHBhdGguXFxuIDMyMDpcXHRcXG4gMzIxOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAzMjI6XFx0XFxuIDMyMzpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzMjQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZ1xcXCJcXG4gMzI1OlxcdFxcdGRlZmF1bHQgblxcbiAzMjY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gMzI3OlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAzMjg6XFx0XFx0c2VsZWN0IENPREVfVEFHR0lOR1xcbiAzMjk6XFx0XFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuIDMzMDpcXHRcXHRzZWxlY3QgU0xBQl9PQkpfRVhUXFxuIDMzMTpcXHRcXHRoZWxwXFxuIDMzMjpcXHRcXHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcXG4gMzMzOlxcdFxcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xcbiAzMzQ6XFx0XFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cXG4gMzM1OlxcdFxcbiAzMzY6XFx0Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxuIDMzNzpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuIDMzODpcXHRcXHRkZWZhdWx0IHlcXG4gMzM5OlxcdFxcdGRlcGVuZHMgb24gTUVNX0FMTE9DX1BST0ZJTElOR1xcbiAzNDA6XFx0XFxuIDM0MTpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbiAzNDI6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcbiAzNDM6XFx0XFx0ZGVmYXVsdCBuXFxuIDM0NDpcXHRcXHRkZXBlbmRzIG9uIE1FTV9BTExPQ19QUk9GSUxJTkdcXG4gMzQ1OlxcdFxcdHNlbGVjdCBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxcbiAzNDY6XFx0XFx0aGVscFxcbiAzNDc6XFx0XFx0ICBBZGRzIHdhcm5pbmdzIHdpdGggaGVscGZ1bCBlcnJvciBtZXNzYWdlcyBmb3IgbWVtb3J5IGFsbG9jYXRpb25cXG4gMzQ4OlxcdFxcdCAgcHJvZmlsaW5nLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOToyMS4wMjc3OTU3NThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjY0MTE1NTc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYENPREVfVEFHR0lOR2AgU2VsZWN0aW9uIENyaXRlcmlhKipcblxuQWxyaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgQ09ERV9UQUdHSU5HYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHBhdXNlIGFuZCB0cnkgdG8gZ2V0IGEgaG9saXN0aWMgdmlldyBvZiBpdHMgcHVycG9zZS5cblxuVGhlIGltcGxpY2l0IGFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSBhcmUgb3RoZXIgc2VsZWN0aW9uIG1ldGhvZHMsIGZlYXR1cmVzLCBydWxlcywgb3IgaW5wdXRzIGluIHBsYXkuIFRoaW5raW5nIHN5c3RlbWF0aWNhbGx5LCBJIG5lZWQgdG8ga25vdzogd2hhdCBjcml0ZXJpYSBiZXNpZGVzIHRoZSBleHBsaWNpdGx5IG1lbnRpb25lZCBvbmUgZGV0ZXJtaW5lIHRoZSBzZWxlY3Rpb24gb2YgYENPREVfVEFHR0lOR2A/IFdoYXQgYXJlIGFsbCB0aGUgdHJpZ2dlcnMsIGNvbnN0cmFpbnRzLCBvciBjb250ZXh0dWFsIGZhY3RvcnMgaW5mbHVlbmNpbmcgaXRzIGludm9jYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNldCBvZiBjb25kaXRpb25zLCBub3QganVzdCB0aGUgb2J2aW91cyBvbmUuIFNvLCB3aGF0IGVsc2UgaXMgY29udHJpYnV0aW5nIHRvLCBvciBwb3RlbnRpYWxseSBpbmZsdWVuY2luZywgYSBwcm9jZXNzIHRoYXQgY2hvb3NlcyBgQ09ERV9UQUdHSU5HYD9cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNDMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjIzLjY2ODk1NDQ0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MzI3MTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgQ09ERV9UQUdHSU5HXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MzIzPWNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMyNy1cXHRkZXBlbmRzIG9uIFBST0NfRlNcXG5tbS9LY29uZmlnLmRlYnVnOjMyODpcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjktXFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjI1Ljg1MjIzMjE4M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzQ4MDU1ODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNb2R1bGUgTG9hZGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBtb2R1bGUgbG9hZGluZywgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhlIGBNT0RVTEVTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBpbnZvbHZlZCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBjb3JlIG1vZHVsZSBsb2FkaW5nIGNvZGUgKGBrZXJuZWwvbW9kdWxlL21haW4uY2ApLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIHRoZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdC5cblxuTGV0J3Mgc2VlLCBJJ3ZlIGdvdCBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIGFzIHRoZSBwcmltYXJ5IGFmZmVjdGVkIGZpbGVzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gRnJvbSBhIHF1aWNrIGdsYW5jZSBhdCBga2VybmVsL21vZHVsZS9tYWluLmNgLCBpdCBsb29rcyBsaWtlIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gdG91Y2hlZDogYGFwcGx5X3JlbG9jYXRpb25zYCwgYF9fbGF5b3V0X3NlY3Rpb25zYCwgYGxheW91dF9zZWN0aW9uc2AsIGBtb3ZlX21vZHVsZWAsIGBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zYCwgYW5kIGBsYXlvdXRfYW5kX2FsbG9jYXRlYC4gSSBzaG91bGQgbm90ZSB0aGF0IHRoZXkgYXJlIGFsbCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZWlyIHZpc2liaWxpdHkgaXMgbGltaXRlZCB0byB0aGUgZmlsZSBzY29wZSwgdXN1YWxseSBpbXByb3ZpbmcgcGVyZm9ybWFuY2UuXG5cbkNydWNpYWxseSwgSSBzZWUgdGhhdCB0aGUgYGxvYWRfbW9kdWxlYCBmdW5jdGlvbiBjYWxscyBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAuIEFuZCBgbG9hZF9tb2R1bGVgIGl0c2VsZiBpcyBhIHZlcnkgaW1wb3J0YW50IGVudHJ5IHBvaW50LCB3aGljaCBpcyBjYWxsZWQgaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGVudHJ5IHBvaW50IHRvIHN0YXJ0IG15IGludmVzdGlnYXRpb24uXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBocy4gU28sIEkgd2lsbCBjaGVjayB0aGUgY2FsbGVycyBvZiBib3RoIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCBhbmQgYGxvYWRfbW9kdWxlYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcyB0aHJvdWdoIHRoZSBzeXN0ZW0uIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHN1cnByaXNpbmcgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgd2l0aGluIHRoZSBtb2R1bGUgbG9hZGluZyBwcm9jZXNzLCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGxlYWQgdG8gYSBsYXJnZXIgY2hhbmdlIGluIGhvdyB0aGUgbW9kdWxlcyBhcmUgYmVpbmcgbG9hZGVkIGFuZCBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI0MzksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6MjkuMjAwMjkwNzIxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Njk1NjczOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYXlvdXRfYW5kX2FsbG9jYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaD0xNjQ9c3RhdGljIGlubGluZSBib29sIHNldF9saXZlcGF0Y2hfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xNzktICogXFx0b3IgYmVpbmcgcHJvY2Vzc2VkIG9uIG91ciBcXHUwMDI2bW9kdWxlcyBsaXN0LiBUaGlzIGhhcHBlbnMgb24gZWFybHlfbW9kX2NoZWNrKClcXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTgwOiAqIFxcdHJpZ2h0IGJlZm9yZSBsYXlvdXRfYW5kX2FsbG9jYXRlKCkuIFRoZSBrZXJuZWwgd291bGQgaGF2ZSBhbHJlYWR5XFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE4MS0gKiBcXHR2bWFsbG9jKCknZCBzcGFjZSBmb3IgdGhlIGVudGlyZSBtb2R1bGUgdGhyb3VnaCBmaW5pdF9tb2R1bGUoKS4gSWZcXG4tLVxcbmtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaC0xODctICpcXHRvZiB0aGlzIGFsbG9jYXRlZCB5ZXQgYW5vdGhlciBwcml2YXRlIGtlcm5lbCBjb3B5IG9mIHRoZSBtb2R1bGUgc3BhY2UgaW5cXG5rZXJuZWwvbW9kdWxlL2ludGVybmFsLmg6MTg4OiAqXFx0bGF5b3V0X2FuZF9hbGxvY2F0ZSgpIGJ1dCBhZnRlciB0aGlzIGRldGVybWluZWQgaW4gYWRkX3VuZm9ybWVkX21vZHVsZSgpXFxua2VybmVsL21vZHVsZS9pbnRlcm5hbC5oLTE4OS0gKlxcdHRoYXQgYW5vdGhlciBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgbG9hZGVkIG9yIGJlaW5nIHByb2Nlc3NlZC5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MTI9c3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTQ0LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5NDU6c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5NDYte1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MzQzMz1zdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICp1YXJncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM0NzAtXFx0LyogRmlndXJlIG91dCBtb2R1bGUgbGF5b3V0LCBhbmQgYWxsb2NhdGUgYWxsIHRoZSBtZW1vcnkuICovXFxua2VybmVsL21vZHVsZS9tYWluLmM6MzQ3MTpcXHRtb2QgPSBsYXlvdXRfYW5kX2FsbG9jYXRlKGluZm8sIGZsYWdzKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNDcyLVxcdGlmIChJU19FUlIobW9kKSkge1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQyLSAqICAgICAgZnJvbSBrZXJuZWxfcmVhZF9maWxlX2Zyb21fZmQoKSBpcyBmcmVlZCByaWdodCBhd2F5Llxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzo0MzogKiAgIGMpIGxheW91dF9hbmRfYWxsb2NhdGUoKSBhbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBmaW5hbCByZXN0aW5nXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTQ0LSAqICAgICAgcGxhY2Ugd2hlcmUgd2Ugd291bGQga2VlcCB0aGUgbW9kdWxlIGlmIGl0IHdlcmUgdG8gYmUgcHJvY2Vzc2VkXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtODgtICogICBhKSBGQUlMX0RVUF9NT0RfQkVDT01JTkc6IGF0IHRoZSBlbmQgb2YgZWFybHlfbW9kX2NoZWNrKCkgYmVmb3JlXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjg5OiAqXFx0bGF5b3V0X2FuZF9hbGxvY2F0ZSgpLlxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05MC0gKlxcdC0gd2l0aCBtb2R1bGUgZGVjb21wcmVzc2lvbjogMiB2aXJ0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGNhbGxzXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTkxLSAqXFx0LSB3aXRob3V0IG1vZHVsZSBkZWNvbXByZXNzaW9uOiAxIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6OTI6ICogICBiKSBGQUlMX0RVUF9NT0RfTE9BRDogYWZ0ZXIgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpIG9uIGFkZF91bmZvcm1lZF9tb2R1bGUoKVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy05My0gKiAgIFxcdC0gd2l0aCBtb2R1bGUgZGVjb21wcmVzc2lvbiAzIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYz0xMDA9c3RhdGljIExJU1RfSEVBRChkdXBfZmFpbGVkX21vZHVsZXMpO1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTEzOS0gKiAgICAgYXQgdGhlIGVuZCBvZiBlYXJseV9tb2RfY2hlY2soKSBwcmV2ZW50cyBkdXBsaWNhdGUgYWxsb2NhdGlvbnNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmM6MTQwOiAqICAgICBvbiBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIG1vZHVsZXMgYWxyZWFkeSBiZWluZyBwcm9jZXNzZWQuIFRoZXNlXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE0MS0gKiAgICAgZHVwbGljYXRlIGZhaWxlZCBtb2R1bGVzIGFyZSBub24tZmF0YWwsIGhvd2V2ZXIgdGhleSB0eXBpY2FsbHkgYXJlXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTY2LSAqICAgICBpcyB1bmlxdWUuICBBIG1vZHVsZSBjYW4gc3RpbGwgZmFpbCB0byBsb2FkIGlmIHdlIGRldGVjdCB0aGUgbW9kdWxlIGlzXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE2NzogKiAgICAgbG9hZGVkIGFmdGVyIHdlIGFsbG9jYXRlIHNwYWNlIGZvciBpdCB3aXRoIGxheW91dF9hbmRfYWxsb2NhdGUoKSwgd2UgZG9cXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTY4LSAqICAgICB0aGlzIGNoZWNrIHJpZ2h0IGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBtb2R1bGUgYXMgbGl2ZSBhbmQgcnVuIGl0c1xcbi0tXFxua2VybmVsL21vZHVsZS9zdGF0cy5jLTE4MC0gKiAgKiBmYWlsZWRfYmVjb21pbmc6IGhvdyBtYW55IG1vZHVsZXMgZmFpbGVkIGFmdGVyIHdlIGtlcm5lbF9yZWFkX2ZpbGVfZnJvbV9mZCgpXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE4MTogKiAgICBpdCBhbmQgYmVmb3JlIHdlIGFsbG9jYXRlIG1lbW9yeSBmb3IgaXQgd2l0aCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkuIFRoaXNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTgyLSAqICAgIGNvdW50ZXIgaXMgbmV2ZXIgaW5jcmVtZW50ZWQgaWYgeW91IG1hbmFnZSB0byB2YWxpZGF0ZSB0aGUgbW9kdWxlIGFuZFxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYzoxODM6ICogICAgY2FsbCBsYXlvdXRfYW5kX2FsbG9jYXRlKCkgZm9yIGl0Llxcbmtlcm5lbC9tb2R1bGUvc3RhdHMuYy0xODQtICogICogZmFpbGVkX2xvYWRfbW9kdWxlczogaG93IG1hbnkgbW9kdWxlcyBmYWlsZWQgb25jZSB3ZSd2ZSBhbGxvY2F0ZWQgb3VyXFxua2VybmVsL21vZHVsZS9zdGF0cy5jOjE4NTogKiAgICBwcml2YXRlIHNwYWNlIGZvciBvdXIgbW9kdWxlIHVzaW5nIGxheW91dF9hbmRfYWxsb2NhdGUoKS4gVGhlc2UgZmFpbHVyZXNcXG5rZXJuZWwvbW9kdWxlL3N0YXRzLmMtMTg2LSAqICAgIHNob3VsZCBob3BlZnVsbHkgbW9zdGx5IGJlIGRlYWx0IHdpdGggYWxyZWFkeS4gUmFjZXMgaW4gdGhlb3J5IGNvdWxkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjI5LjI4NzI1Mjc3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDg3MTM5NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byBLZXJuZWwgTW9kdWxlIExvYWRpbmcqKlxuXG5BbHJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cga2VybmVsIG1vZHVsZXMgYXJlIGxvYWRlZCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHN5c3RlbSBjYWxsIGxldmVsLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBgZmluaXRfbW9kdWxlYCBhbmQgYGluaXRfbW9kdWxlYCBhcmUgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIOKAkyB0aGV5J3JlIHRoZSBkaXJlY3Qgc3lzdGVtIGNhbGxzIGV4cG9zZWQgdG8gYXBwbGljYXRpb25zIG9yLCBpbiB0aGlzIGNhc2UsIGEgcHJpdmlsZWdlZCBwcm9jZXNzIGxpa2UgU3l6a2FsbGVyLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN5c2NhbGxzIHdvcmsgdW5kZXIgdGhlIGhvb2QuIFNvLCBuZXh0LCBJJ2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBzeXNjYWxsIGVudHJ5cG9pbnRzIGluIHRoZSBrZXJuZWwgc291cmNlLCBwcm9iYWJseSBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGxpa2VseSBoYXBwZW5zIOKAkyB3aGVyZSB0aGUga2VybmVsIGZpZ3VyZXMgb3V0IHdoYXQgdG8gKmRvKiB3aXRoIHRob3NlIHVzZXItc3BhY2UgY29tbWFuZHMgdG8gbG9hZCBhIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQxMjMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTozMS42MzU5NjkxNzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDY3MzQ1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTWVNDQUxMX0RFRklORS4qbW9kdWxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9tb2R1bGUvbWFpbi5jPTgwMj1zdGF0aWMgdm9pZCBmcmVlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTgwMy1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzo4MDQ6U1lTQ0FMTF9ERUZJTkUyKGRlbGV0ZV9tb2R1bGUsIGNvbnN0IGNoYXIgX191c2VyICosIG5hbWVfdXNlcixcXG5rZXJuZWwvbW9kdWxlL21haW4uYy04MDUtXFx0XFx0dW5zaWduZWQgaW50LCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM0MzM9c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyIF9fdXNlciAqdWFyZ3MsXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zNjUwLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM2NTE6U1lTQ0FMTF9ERUZJTkUzKGluaXRfbW9kdWxlLCB2b2lkIF9fdXNlciAqLCB1bW9kLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM2NTItXFx0XFx0dW5zaWduZWQgbG9uZywgbGVuLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1YXJncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTM3OTc9c3RhdGljIGludCBpZGVtcG90ZW50X2luaXRfbW9kdWxlKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqIHVhcmdzLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zODE1LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjM4MTY6U1lTQ0FMTF9ERUZJTkUzKGZpbml0X21vZHVsZSwgaW50LCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgdWFyZ3MsIGludCwgZmxhZ3MpXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzgxNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjMyLjMzMDY0OTU3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDgxODE4MDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYGFsbG9jX3RhZy5jYCBGdW5jdGlvbiBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYGFsbG9jX3RhZy5jYCBmaWxlIGRpcmVjdGx5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiBpdC4gTXkgcHJpbWFyeSB0YXJnZXRzIGFyZSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgYW5kIGByZWxlYXNlX21vZHVsZV90YWdzYC4gSSBzZWUgdGhleSdyZSBkZWNsYXJlZCBhcyBzdGF0aWMgd2l0aGluIGBtbS9hbGxvY190YWcuY2AuIE15IG5leHQgcXVlc3Rpb24gaXMsIHdoZXJlIGFyZSB0aGVzZSBmdW5jdGlvbnMgYWN0dWFsbHkgKnVzZWQqPyBXaGF0J3MgdGhlIGNhbGwgcGF0aD8gVG8gZmlndXJlIHRoYXQgb3V0LCBJJ20gZ29pbmcgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGNvZGV0YWcgbW9kdWxlIGNhbGxiYWNrcy4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgdHJhY2luZyB0aGVpciBleGVjdXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ2OTksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTozNC40MTI0NzE4M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQxMzMwNTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvY29kZXRhZy5oPTkyPWJvb2wgY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtOTMtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHNpemUpO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk0OnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk1LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD0xMDc9c3RhdGljIGlubGluZSB2b2lkICpcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMDg6Y29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTA5LVxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBpbnQgcHJlcGVuZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5MTI9c3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTIxLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjI6XFx0XFx0ZGVzdCA9IGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oaW5mby1cXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cXHUwMDNlc2hfc2l6ZSxcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTIzLVxcdFxcdFxcdFxcdGFyY2hfbW9kX3NlY3Rpb25fcHJlcGVuZChpbmZvLVxcdTAwM2Vtb2QsIGkpLCBzaGRyLVxcdTAwM2VzaF9hZGRyYWxpZ24pO1xcbi0tXFxubGliL2NvZGV0YWcuYz0yNTU9Ym9vbCBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmxpYi9jb2RldGFnLmMtMjgyLVxcbmxpYi9jb2RldGFnLmM6MjgzOnZvaWQgKmNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb24oc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpuYW1lLFxcbmxpYi9jb2RldGFnLmMtMjg0LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjM2LjgyNTc4MTgyM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzEyNTEyMTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBDb2RlOiBgY29kZXRhZy5jYCBhbmQgU2VjdGlvbiBBbGxvY2F0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCdzIHN0YXJ0IHdpdGggYGxpYi9jb2RldGFnLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29kZSB0YWdzIGFyZSBiZWluZyBtYW5hZ2VkLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGZvY3VzaW5nIG9uIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIGtleSB0byBob3cgd2UncmUgY2FydmluZyBvdXQgbWVtb3J5IGZvciB0aGVzZSB0YWdzIHdpdGhpbiB0aGUgbW9kdWxlIHN0cnVjdHVyZS4gSSB3YW50IHRvIHNlZSBob3cgaXQncyBkb25lLCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGZyYWdtZW50YXRpb24uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgb2Ygb3VyIGN1cnJlbnQgdGFnZ2luZyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzNTgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTozOS4xMzgyOTY0NTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTk4Mjc5NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD05ND12b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk2LVxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk3OnZvaWQgY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhzdHJ1Y3QgbW9kdWxlICptb2QpO1xcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTk4LXZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTEwOD1jb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTExMC1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pIHsgcmV0dXJuIE5VTEw7IH1cXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaDoxMTE6c3RhdGljIGlubGluZSB2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKSB7fVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTExMi1zdGF0aWMgaW5saW5lIHZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKSB7fVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MjkxMj1zdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MjQtXFx0XFx0aWYgKFdBUk5fT04oIWRlc3QpKSB7XFxua2VybmVsL21vZHVsZS9tYWluLmM6MjkyNTpcXHRcXHRcXHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCk7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyNi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzEtXFx0XFx0aWYgKElTX0VSUihkZXN0KSkge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MzI6XFx0XFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVxcdTAwM2Vtb2QpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzMtXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTQ1PXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5ODgtXFx0aWYgKGVycikge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5ODk6XFx0XFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVxcdTAwM2Vtb2QpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OTAtXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMwMDI9c3RhdGljIHZvaWQgbW9kdWxlX2RlYWxsb2NhdGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAwNS1cXHRtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQobW9kKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDA2OlxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0zMDA3LVxcbi0tXFxubGliL2NvZGV0YWcuYz0yODM9dm9pZCAqY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5saWIvY29kZXRhZy5jLTMwNy1cXG5saWIvY29kZXRhZy5jOjMwODp2b2lkIGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmxpYi9jb2RldGFnLmMtMzA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NDEuMzM4MTI4ODIyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODA2MjA2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgQ29kZXRhZyBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhlIGNvZGV0YWcgbW9kdWxlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGFsbG9jYXRlcyBhbmQgZnJlZXMgc2VjdGlvbnMuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uYCBhbmQgYGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnNgLiBJIGtub3cgdGhlc2UgYXJlIGV4cG9ydGVkIG9yIGRlZmluZWQgd2l0aGluIGBsaWIvY29kZXRhZy5jYC4gTm93LCB0aGUgYmVzdCBwbGFjZSB0byBqdW1wIGluIGlzIHByb2JhYmx5IGRpcmVjdGx5IGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbXMuIEknbSBnb2luZyB0byBxdWlja2x5IG5hdmlnYXRlIHRvIGBsaWIvY29kZXRhZy5jYCwgYW5kIEknbSBndWVzc2luZyB0aGF0IGxpbmUgMjgzIG9yIGFyb3VuZCB0aGF0IGFyZWEgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGluc3BlY3QgdGhlIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBsb2dpYy4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYzMTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTo0My4zMTg3NTMzODJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1ODExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi9jb2RldGFnLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjc1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAyNzY6XFx0XFx0XFx0fVxcbiAyNzc6XFx0XFx0fVxcbiAyNzg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb2RldGFnX2xvY2spO1xcbiAyNzk6XFx0XFxuIDI4MDpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyODE6XFx0fVxcbiAyODI6XFx0XFxuIDI4MzpcXHR2b2lkICpjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqbmFtZSxcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgaW50IHByZXBlbmQsXFxuIDI4NTpcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGFsaWduKVxcbiAyODY6XFx0e1xcbiAyODc6XFx0XFx0Y29uc3QgY2hhciAqdHlwZV9uYW1lID0gbmFtZSArIHN0cmxlbihDT0RFVEFHX1NFQ1RJT05fUFJFRklYKTtcXG4gMjg4OlxcdFxcdHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZTtcXG4gMjg5OlxcdFxcdHZvaWQgKnJldCA9IEVSUl9QVFIoLUVJTlZBTCk7XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmNvZGV0YWdfbG9jayk7XFxuIDI5MjpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXFx1MDAyNmNvZGV0YWdfdHlwZXMsIGxpbmspIHtcXG4gMjkzOlxcdFxcdFxcdGlmIChzdHJjbXAodHlwZV9uYW1lLCBjdHR5cGUtXFx1MDAzZWRlc2Muc2VjdGlvbikgPT0gMCkge1xcbiAyOTQ6XFx0XFx0XFx0XFx0aWYgKFdBUk5fT04oIWN0dHlwZS1cXHUwMDNlZGVzYy5hbGxvY19zZWN0aW9uX21lbSkpXFxuIDI5NTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0XFx0XFx0ZG93bl93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIDI5ODpcXHRcXHRcXHRcXHRyZXQgPSBjdHR5cGUtXFx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW0obW9kLCBzaXplLCBwcmVwZW5kLCBhbGlnbik7XFxuIDI5OTpcXHRcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2Y3R0eXBlLVxcdTAwM2Vtb2RfbG9jayk7XFxuIDMwMDpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzAxOlxcdFxcdFxcdH1cXG4gMzAyOlxcdFxcdH1cXG4gMzAzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG4gMzA0OlxcdFxcbiAzMDU6XFx0XFx0cmV0dXJuIHJldDtcXG4gMzA2OlxcdH1cXG4gMzA3OlxcdFxcbiAzMDg6XFx0dm9pZCBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4gMzA5OlxcdHtcXG4gMzEwOlxcdFxcdHN0cnVjdCBjb2RldGFnX3R5cGUgKmN0dHlwZTtcXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG4gMzEzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3R0eXBlLCBcXHUwMDI2Y29kZXRhZ190eXBlcywgbGluaykge1xcbiAzMTQ6XFx0XFx0XFx0aWYgKCFjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbSlcXG4gMzE1OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRcXHRkb3duX3dyaXRlKFxcdTAwMjZjdHR5cGUtXFx1MDAzZW1vZF9sb2NrKTtcXG4gMzE4OlxcdFxcdFxcdGN0dHlwZS1cXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKG1vZCwgZmFsc2UpO1xcbiAzMTk6XFx0XFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbiAzMjA6XFx0XFx0fVxcbiAzMjE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb2RldGFnX2xvY2spO1xcbiAzMjI6XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHR2b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NDMuMzE4ODcxNjcxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNDg5ODI0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGFsbG9jX3RhZ2AgQWxsb2NhdGlvbiBNZWNoYW5pc20qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGFsbG9jX3RhZ2Agc3R1ZmYuIFRoZSBjbHVlIEkgaGF2ZSBpcyB0aGF0IHRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uLCBgY3R0eXBlLVx1MDAzZWRlc2MuYWxsb2Nfc2VjdGlvbl9tZW1gLCByZWxhdGVkIHRvIGBhbGxvY190YWdgLCBpcyByZWdpc3RlcmVkIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBNeSBuZXh0IG1vdmUsIG5hdHVyYWxseSwgaXMgdG8gcGlucG9pbnQgKndoZXJlKiBleGFjdGx5IGBhbGxvY19zZWN0aW9uX21lbWAgaXMgYWN0dWFsbHkgKnNldCogd2l0aGluIHRoYXQgYG1tL2FsbG9jX3RhZy5jYCBmaWxlLiBHb3R0YSB0cmFjZSBpdHMgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGhpbmcgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIGNvbmZpZ3VyZWQuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjg4LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDoyOTo0NS40Njc4NTc3MjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTUzNDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NlY3Rpb25fbWVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz0xMzM3PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzQzLVxcdFxcdC5uZWVkc19zZWN0aW9uX21lbVxcdD0gbmVlZHNfc2VjdGlvbl9tZW0sXFxubW0vYWxsb2NfdGFnLmM6MTM0NDpcXHRcXHQuYWxsb2Nfc2VjdGlvbl9tZW1cXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXFxubW0vYWxsb2NfdGFnLmMtMTM0NS1cXHRcXHQuZnJlZV9zZWN0aW9uX21lbVxcdD0gcmVsZWFzZV9tb2R1bGVfdGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NDUuNTQzNDE2MDE3WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc3ODE4NjYyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1vZHVsZSBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCdzIGZ1bmRhbWVudGFsbHkgb3ZlcmhhdWxpbmcgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBtb2R1bGUgbGF5b3V0IGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBmb3Igc3BlY2lmaWMgc2VjdGlvbiB0eXBlcywgc3BlY2lmaWNhbGx5IHRoaW5ncyBsaWtlIGNvZGV0YWcgYW5kIHBlcmNwdSBzZWN0aW9ucy4gSSBzZWUgdGhleSdyZSBpbnRyb2R1Y2luZyBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCB3aGljaCBpcyBub3cgY2FsbGVkICpiZWZvcmUqIHRoZSByZWd1bGFyIHNlY3Rpb24gbGF5b3V0IHByb2Nlc3MuIFRoYXQncyBhIHNpZ25pZmljYW50IGNoYW5nZS4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1hcmtpbmcgdGhlc2Ugc3RhbmRhbG9uZSBzZWN0aW9ucyB3aXRoIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgLCBhbmQgaWYgYWxsb2NhdGlvbiBmYWlscyBpbiB0aGUgdGFnIHBhdGggd2l0aCBgRUFHQUlOYCwgaXQgZmFsbHMgYmFjayB0byBhIHJlZ3VsYXIgYWxsb2NhdGlvbi4gVGhlIGBtb3ZlX21vZHVsZSgpYCBmdW5jdGlvbiBpcyB0aGVuIHVwZGF0ZWQgdG8gc2tpcCB0aGUgc3RhbmRhbG9uZSBzZWN0aW9ucy4gUGVyY3B1IHNlY3Rpb25zIGFyZSBhbHNvIGdldHRpbmcgdGhpcyB0cmVhdG1lbnQsIHVzaW5nIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgIHJhdGhlciB0aGFuIHNvbWUgY3VzdG9tIGxvZ2ljIGR1cmluZyByZWxvY2F0aW9uLiBBbmQgdGhlcmUncyBhbHNvIGEgZmFsbGJhY2sgaW1wbGVtZW50ZWQsIHVzaW5nIGBFUlJfUFRSKC1FQUdBSU4pYCwgaW4gYG1tL2FsbG9jX3RhZy5jYCBpZiBgdGFnc19hZGRyZXNzYWJsZSgpYCBpc24ndCB0cnVlLCB3aGljaCBmb3JjZXMgdGhlIG1vZHVsZSBsb2FkZXIgdG8gdXNlIHRoZSBub3JtYWwgYWxsb2NhdGlvbiBwcm9jZXNzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyEgSXQncyB0b3VjaGluZyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBsb2dpYyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBob3cgbWVtb3J5IGFsbG9jYXRpb24gdGFncyBhcmUgbWFuYWdlZCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYC4gTW9kdWxlIGxvYWRpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBgaW5pdF9tb2R1bGVgIGFuZCBgZmluaXRfbW9kdWxlYCBzeXN0ZW0gY2FsbHMsIHdoaWNoIFN5emthbGxlciBhbHJlYWR5IHRhcmdldHMgd2l0aGluIFFFTVUgYW5kIEdDRSBlbnZpcm9ubWVudHMuXG5cbk15IHRoaW5raW5nIGlzIHRoYXQgdGhlIEVMRiBwYXJzaW5nLCBzZWN0aW9uIGxheW91dCwgcmVsb2NhdGlvbiBoYW5kbGluZywgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbXMsIGFuZCB0aGUgZXJyb3IgdW53aW5kaW5nIGxvZ2ljIHdoZW4gbG9hZGluZyBtb2R1bGVzIGFyZSBhbGwgKmNyaXRpY2FsKiBjb2RlIHBhdGhzLiBUaGVzZSBhcmUgcHJpbWUgdGFyZ2V0cyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgbGF5b3V0IGJ1Z3MsIHNpemUgY2FsY3VsYXRpb24gZXJyb3JzLCBvciBldmVuIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdGllcy5cblxuU28sIGxldCdzIGZvY3VzIG9uIGlkZW50aWZ5aW5nIHRoZSBrZXkgZW50cnkgcG9pbnRzIGFuZCBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHplcm9pbmcgaW4gb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG9yIGZ1bmN0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBvYnZpb3VzOiBgaW5pdF9tb2R1bGVgIChvciBwb3NzaWJseSB0aGUgYF9feDY0X3N5c19pbml0X21vZHVsZWAgdmFyaWF0aW9ucyksIGBmaW5pdF9tb2R1bGVgICwgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gLCBhbmQgYGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnNgLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGNoZWNrIHN0YW5kYXJkIHN5bWJvbCBuYW1lcyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBgbGliL2NvZGV0YWcuY2AgYXMgd2VsbC4gSSdsbCBhbHNvIGxvb2sgYXQgYW55dGhpbmcgcmVsYXRlZCB0byByZWxvY2F0aW9uLCBzdWNoIGFzIGBhcHBseV9yZWxvY2F0ZV9hZGRgLiBJIGNhbiBwcm9iYWJseSB1c2UgYG5tYCBvciBTeXprYWxsZXIncyB0YXJnZXRpbmcgbWV0aG9kcyB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHMgaW4gdGhlIGtlcm5lbCBjb2RlLiBMZXQncyBtYWtlIHN1cmUgSSBmaW5kIGFueXRoaW5nIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgdGhhdCdzIG5vdCBzdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjI5OjUzLjMyNTI4NDk3NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjEyMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bXiBcXFxcdCNcXFxcL10uKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9tb2R1bGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTM5MSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTI9bWVudWNvbmZpZyBNT0RVTEVTXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctOS1cXHQgIHBlcm1hbmVudGx5IGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gIFlvdSB1c2UgdGhlIFxcXCJtb2Rwcm9iZVxcXCJcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MTA6XFx0ICB0b29sIHRvIGFkZCAoYW5kIHNvbWV0aW1lcyByZW1vdmUpIHRoZW0uICBJZiB5b3Ugc2F5IFkgaGVyZSxcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTEtXFx0ICBtYW55IHBhcnRzIG9mIHRoZSBrZXJuZWwgY2FuIGJlIGJ1aWx0IGFzIG1vZHVsZXMgKGJ5XFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOlxcdCAgYW5zd2VyaW5nIE0gaW5zdGVhZCBvZiBZIHdoZXJlIGluZGljYXRlZCk6IHRoaXMgaXMgbW9zdFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMy1cXHQgIHVzZWZ1bCBmb3IgaW5mcmVxdWVudGx5IHVzZWQgb3B0aW9ucyB3aGljaCBhcmUgbm90IHJlcXVpcmVkXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTktXFx0ICB3aGVyZSBtb2Rwcm9iZSBjYW4gZmluZCB0aGVtICh5b3UgbWF5IG5lZWQgdG8gYmUgcm9vdCB0byBkb1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoyMDpcXHQgIHRoaXMpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yMS1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz02Mz1jb25maWcgTU9EVUxFX0RFQlVHX0FVVE9MT0FEX0RVUFNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02Ni1cXHQgIE1vZHVsZSBhdXRvbG9hZGluZyBhbGxvd3MgaW4ta2VybmVsIGNvZGUgdG8gcmVxdWVzdCBtb2R1bGVzIHRocm91Z2hcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Njc6XFx0ICB0aGUgKnJlcXVlc3RfbW9kdWxlKigpIEFQSSBjYWxscy4gVGhpcyBpbiB0dXJuIGp1c3QgY2FsbHMgdXNlcnNwYWNlXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTY4LVxcdCAgbW9kcHJvYmUuIEFsdGhvdWdoIG1vZHByb2JlIGNoZWNrcyB0byBzZWUgaWYgYSBtb2R1bGUgaXMgYWxyZWFkeVxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTcwLVxcdCAgd2hpY2ggbXVsdGlwbGUgZHVwbGljYXRlIHJlcXVlc3RzIGNhbiBlbmQgdXAgaW4gdXNlcnNwYWNlIGFuZCBtdWx0aXBsZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo3MTpcXHQgIG1vZHByb2JlIGNhbGxzIHJhY2UgY2FsbGluZyBmaW5pdF9tb2R1bGUoKSBhcm91bmQgdGhlIHNhbWUgdGltZSBmb3JcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NzI6XFx0ICBkdXBsaWNhdGUgbW9kdWxlcy4gVGhlIGZpbml0X21vZHVsZSgpIHN5c3RlbSBjYWxsIGNhbiBjb25zdW1lIGluIHRoZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy03My1cXHQgIHdvcnN0IGNhc2UgbW9yZSB0aGFuIHR3aWNlIHRoZSByZXNwZWN0aXZlIG1vZHVsZSBzaXplIGluIHZpcnR1YWxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy03OC1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6Nzk6XFx0ICBUaGlzIGRlYnVnZ2luZyBmYWNpbGl0eSB3aWxsIGNyZWF0ZSBwcl93YXJuKCkgc3BsYXRzIGZvciBkdXBsaWNhdGVcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODAtXFx0ICBtb2R1bGUgcmVxdWVzdHMgdG8gaGVscCBpZGVudGlmeSBpZiBtb2R1bGUgYXV0by1sb2FkaW5nIG1heSBiZSB0aGVcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy04NC1cXHQgIHJlcXVlc3RzIGZvciB0aGUgc2FtZSBtb2R1bGUgdG8gYSBzaW5nbGUgcmVxdWVzdC4gWW91IGNhbiBib290IHdpdGhcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6ODU6XFx0ICB0aGUgbW9kdWxlLmVuYWJsZV9kdXBzX3RyYWNlPTEga2VybmVsIHBhcmFtZXRlciB0byB1c2UgV0FSTl9PTigpXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjg2OlxcdCAgaW5zdGVhZCBvZiB0aGUgcHJfd2FybigpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy04Ny1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6ODg6XFx0ICBJZiB0aGUgZmlyc3QgbW9kdWxlIHJlcXVlc3QgdXNlZCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3ZSBjYW5ub3RcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctODktXFx0ICB1c2UgdGhhdCBhcyB0aGUgYW5jaG9yIHRvIHdhaXQgZm9yIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMsIHNpbmNlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkwOlxcdCAgdXNlcnMgb2YgcmVxdWVzdF9tb2R1bGUoKSBkbyB3YW50IGEgcHJvcGVyIHJldHVybiB2YWx1ZS4gSWYgYSBjYWxsXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkxOlxcdCAgZm9yIHRoZSBzYW1lIG1vZHVsZSBoYXBwZW5lZCBlYXJsaWVyIHdpdGggcmVxdWVzdF9tb2R1bGUoKSB0aG91Z2gsXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkyOlxcdCAgdGhlbiBhIGR1cGxpY2F0ZSByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3b3VsZCBiZSBkZXRlY3RlZC4gVGhlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjkzOlxcdCAgbm9uLXdhaXQgcmVxdWVzdF9tb2R1bGUoKSBjYWxsIGlzIHN5bmNocm9ub3VzIGFuZCB3YWl0cyB1bnRpbCBtb2Rwcm9iZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy05NC1cXHQgIGNvbXBsZXRlcy4gU3Vic2VxdWVudCBhdXRvLWxvYWRpbmcgcmVxdWVzdHMgZm9yIHRoZSBzYW1lIG1vZHVsZSBkb1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo5NTpcXHQgIG5vdCB0cmlnZ2VyIGEgbmV3IGZpbml0X21vZHVsZSgpIGNhbGxzIGFuZCBkbyBub3Qgc3RyYWluIHZpcnR1YWxcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctOTYtXFx0ICBtZW1vcnksIGFuZCBzbyBhcyBzb29uIGFzIG1vZHByb2JlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMgd2UgcmVtb3ZlXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTAyLVxcdCAgYWJ1c2Ugd2FzIGR1ZSB0byBtb2R1bGUgYXV0by1sb2FkaW5nLiBUaGVzZSBpc3N1ZXMgYXJlIGN1cnJlbnRseSBvbmx5XFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEwMzpcXHQgIGtub3duIHRvIG9jY3VyIG9uIHN5c3RlbXMgd2l0aCBtYW55IENQVXMgKG92ZXIgNDAwKSBhbmQgaXMgbGlrZWx5IHRoZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMDQtXFx0ICByZXN1bHQgb2YgdWRldiBpc3N1aW5nIGR1cGxpY2F0ZSBtb2R1bGUgcmVxdWVzdHMgZm9yIGVhY2ggQ1BVLCBhbmQgc29cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xMTI9Y29uZmlnIE1PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTX1RSQUNFXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTE2LVxcdCAgRW5hYmxpbmcgdGhpcyB3aWxsIGZvcmNlIGEgZnVsbCBzdGFjayB0cmFjZSBmb3IgZHVwbGljYXRlIG1vZHVsZVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxMTc6XFx0ICBhdXRvLWxvYWRpbmcgcmVxdWVzdHMgdXNpbmcgV0FSTl9PTigpIGluc3RlYWQgb2YgcHJfd2FybigpLiBZb3VcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTE4LVxcdCAgc2hvdWxkIGtlZXAgdGhpcyBkaXNhYmxlZCBhdCBhbGwgdGltZXMgdW5sZXNzIHlvdSBhcmUgYSBkZXZlbG9wZXJcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xMjQ9Y29uZmlnIE1PRFVMRV9GT1JDRV9MT0FEXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTI4LVxcdCAgQWxsb3cgbG9hZGluZyBvZiBtb2R1bGVzIHdpdGhvdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoaWUuIG1vZHByb2JlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEyOTpcXHQgIC0tZm9yY2UpLiAgRm9yY2VkIG1vZHVsZSBsb2FkaW5nIHNldHMgdGhlICdGJyAoZm9yY2VkKSB0YWludCBmbGFnIGFuZFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzAtXFx0ICBpcyB1c3VhbGx5IGEgcmVhbGx5IGJhZCBpZGVhLlxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTEzMj1jb25maWcgTU9EVUxFX1VOTE9BRFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTEzNi1cXHQgIG1vZHVsZXMgKG5vdGUgdGhhdCBzb21lIG1vZHVsZXMgbWF5IG5vdCBiZSB1bmxvYWRhYmxlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjEzNzpcXHQgIGFueXdheSksIHdoaWNoIG1ha2VzIHlvdXIga2VybmVsIHNtYWxsZXIsIGZhc3Rlclxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xMzgtXFx0ICBhbmQgc2ltcGxlci4gIElmIHVuc3VyZSwgc2F5IFkuXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTQwPWNvbmZpZyBNT0RVTEVfRk9SQ0VfVU5MT0FEXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTQ2LVxcdCAgd2l0aG91dCB3YWl0aW5nIGZvciBhbnlvbmUgdG8gc3RvcCB1c2luZyBpdCAodXNpbmcgdGhlIC1mIG9wdGlvbiB0b1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNDc6XFx0ICBybW1vZCkuICBUaGlzIGlzIG1haW5seSBmb3Iga2VybmVsIGRldmVsb3BlcnMgYW5kIGRlc3BlcmF0ZSB1c2Vycy5cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTQ4LVxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0xNTA9Y29uZmlnIE1PRFVMRV9VTkxPQURfVEFJTlRfVFJBQ0tJTkdcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xNTYtXFx0ICBtb2R1bGUgdGhhdCB0YWludGVkIHRoZSBrZXJuZWwuIEluIGFkZGl0aW9uIHRvIGRpc3BsYXlpbmcgYVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNTc6XFx0ICBsaXN0IG9mIGxpbmtlZCAob3IgbG9hZGVkKSBtb2R1bGVzIGUuZy4gb24gZGV0ZWN0aW9uIG9mIGEgYmFkXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjE1ODpcXHQgIHBhZ2UgKHNlZSBiYWRfcGFnZSgpKSwgdGhlIGFmb3JlbWVudGlvbmVkIGRldGFpbHMgYXJlIGFsc29cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTU5LVxcdCAgc2hvd24uIElmIHVuc3VyZSwgc2F5IE4uXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTYxPWNvbmZpZyBNT0RWRVJTSU9OU1xcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTE2Ny1cXHQgIGNvbXBpbGVkIGZvciBkaWZmZXJlbnQga2VybmVscywgYnkgYWRkaW5nIGVub3VnaCBpbmZvcm1hdGlvblxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxNjg6XFx0ICB0byB0aGUgbW9kdWxlcyB0byAoaG9wZWZ1bGx5KSBzcG90IGFueSBjaGFuZ2VzIHdoaWNoIHdvdWxkXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTE2OS1cXHQgIG1ha2UgdGhlbSBpbmNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsIHlvdSBhcmUgcnVubmluZy4gIElmXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9MTgxPWNvbmZpZyBHRU5LU1lNU1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxODI6XFx0Ym9vbCBcXFwiZ2Vua3N5bXMgKGZyb20gc291cmNlIGNvZGUpXFxcIlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xODMtXFx0aGVscFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTE4OT1jb25maWcgR0VORFdBUkZLU1lNU1xcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTA6XFx0Ym9vbCBcXFwiZ2VuZHdhcmZrc3ltcyAoZnJvbSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24pXFxcIlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0xOTEtXFx0ZGVwZW5kcyBvbiBERUJVR19JTkZPXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMTk3LVxcdCMgWDg2LCByZXF1aXJlcyBwYWhvbGUgYmVmb3JlIGNvbW1pdCA0N2RjYjUzNGUyNTMgKFxcXCJidGZfZW5jb2RlcjogU3RvcFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTg6XFx0IyBpbmRleGluZyBzeW1ib2xzIGZvciBWQVJzXFxcIikgb3IgYWZ0ZXIgY29tbWl0IDk4MTA3NTgwMDNjZSAoXFxcImJ0Zl9lbmNvZGVyOlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzoxOTk6XFx0IyBWZXJpZnkgMCBhZGRyZXNzIERXQVJGIHZhcmlhYmxlcyBhcmUgaW4gRUxGIHNlY3Rpb25cXFwiKS5cXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMjAwLVxcdGRlcGVuZHMgb24gIVg4NiB8fCAhREVCVUdfSU5GT19CVEYgfHwgUEFIT0xFX1ZFUlNJT04gXFx1MDAzYyAxMjggfHwgUEFIT0xFX1ZFUlNJT04gXFx1MDAzZSAxMjlcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yNDE9Y29uZmlnIE1PRFVMRV9TUkNWRVJTSU9OX0FMTFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTI0OC1cXHQgIG90aGVycyBzb21ldGltZXMgY2hhbmdlIHRoZSBtb2R1bGUgc291cmNlIHdpdGhvdXQgdXBkYXRpbmdcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6MjQ5OlxcdCAgdGhlIHZlcnNpb24pLiAgV2l0aCB0aGlzIG9wdGlvbiwgc3VjaCBhIFxcXCJzcmN2ZXJzaW9uXFxcIiBmaWVsZFxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yNTAtXFx0ICB3aWxsIGJlIGNyZWF0ZWQgZm9yIGFsbCBtb2R1bGVzLiAgSWYgdW5zdXJlLCBzYXkgTi5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz0yNTI9Y29uZmlnIE1PRFVMRV9TSUdcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy0yNzAtXFx0ICBtb2R1bGUgRE9FUyBOT1QgZ2V0IHN0cmlwcGVkIGFmdGVyIGJlaW5nIHNpZ25lZC4gIFRoaXMgaW5jbHVkZXMgdGhlXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjI3MTpcXHQgIGRlYnVnaW5mbyBzdHJpcCBkb25lIGJ5IHNvbWUgcGFja2FnZXJzIChzdWNoIGFzIHJwbWJ1aWxkKSBhbmRcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctMjcyLVxcdCAgaW5jbHVzaW9uIGludG8gYW4gaW5pdHJhbWZzIHRoYXQgd2FudHMgdGhlIG1vZHVsZSBzaXplIHJlZHVjZWQuXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9NDA2PWNvbmZpZyBNT0RVTEVfQUxMT1dfTUlTU0lOR19OQU1FU1BBQ0VfSU1QT1JUU1xcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQwOC1cXHRoZWxwXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQwOTpcXHQgIFN5bWJvbHMgZXhwb3J0ZWQgd2l0aCBFWFBPUlRfU1lNQk9MX05TKigpIGFyZSBjb25zaWRlcmVkIGV4cG9ydGVkIGluXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQxMC1cXHQgIGEgbmFtZXNwYWNlLiBBIG1vZHVsZSB0aGF0IG1ha2VzIHVzZSBvZiBhIHN5bWJvbCBleHBvcnRlZCB3aXRoIHN1Y2ggYVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0MTE6XFx0ICBuYW1lc3BhY2UgaXMgcmVxdWlyZWQgdG8gaW1wb3J0IHRoZSBuYW1lc3BhY2UgdmlhIE1PRFVMRV9JTVBPUlRfTlMoXFxcIlxcXCIpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MTItXFx0ICBUaGVyZSBpcyBubyB0ZWNobmljYWwgcmVhc29uIHRvIGVuZm9yY2UgY29ycmVjdCBuYW1lc3BhY2UgaW1wb3J0cyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZz00MTk9Y29uZmlnIE1PRFBST0JFX1BBVEhcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MjgtXFx0ICByZW1vdmVzIHRoZSBrZXJuZWwncyBhYmlsaXR5IHRvIHJlcXVlc3QgbW9kdWxlcyAoYnV0XFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQyOTpcXHQgIHVzZXJzcGFjZSBjYW4gc3RpbGwgbG9hZCBtb2R1bGVzIGV4cGxpY2l0bHkpLlxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MzAtXFxua2VybmVsL21vZHVsZS9LY29uZmlnPTQzMT1jb25maWcgVFJJTV9VTlVTRURfS1NZTVNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00MzQtXFx0ICBUaGUga2VybmVsIGFuZCBzb21lIG1vZHVsZXMgbWFrZSBtYW55IHN5bWJvbHMgYXZhaWxhYmxlIGZvclxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo0MzU6XFx0ICBvdGhlciBtb2R1bGVzIHRvIHVzZSB2aWEgRVhQT1JUX1NZTUJPTCgpIGFuZCB2YXJpYW50cy4gRGVwZW5kaW5nXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQzNi1cXHQgIG9uIHRoZSBzZXQgb2YgbW9kdWxlcyBiZWluZyBzZWxlY3RlZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLFxcbi0tXFxua2VybmVsL21vZHVsZS9LY29uZmlnLTQ0MC1cXHQgIHRoZSBidWlsZC4gSW4gdHVybiwgdGhpcyBwcm92aWRlcyB0aGUgY29tcGlsZXIgbW9yZSBvcHBvcnR1bml0aWVzXFxua2VybmVsL21vZHVsZS9LY29uZmlnOjQ0MTpcXHQgIChlc3BlY2lhbGx5IHdoZW4gdXNpbmcgTFRPKSBmb3Igb3B0aW1pemluZyB0aGUgY29kZSBhbmQgcmVkdWNpbmdcXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNDQyLVxcdCAgYmluYXJ5IHNpemUuICBUaGlzIG1pZ2h0IGhhdmUgc29tZSBzZWN1cml0eSBhZHZhbnRhZ2VzIGFzIHdlbGwuXFxuLS1cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlPTEyPW9iai15ICs9IGttb2Qub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTM6b2JqLSQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTKSArPSBkdXBzLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE0Om9iai0kKENPTkZJR19NT0RVTEVfREVDT01QUkVTUykgKz0gZGVjb21wcmVzcy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfTU9EVUxFX1NJRykgKz0gc2lnbmluZy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfTElWRVBBVENIKSArPSBsaXZlcGF0Y2gub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTc6b2JqLSQoQ09ORklHX01PRFVMRVNfVFJFRV9MT09LVVApICs9IHRyZWVfbG9va3VwLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19ERUJVR19LTUVNTEVBSykgKz0gZGVidWdfa21lbWxlYWsub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX0tBTExTWU1TKSArPSBrYWxsc3ltcy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvY2ZzLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19TWVNGUykgKz0gc3lzZnMub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0tHREJfS0RCKSArPSBrZGIub1xcbmtlcm5lbC9tb2R1bGUvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX01PRFZFUlNJT05TKSArPSB2ZXJzaW9uLm9cXG5rZXJuZWwvbW9kdWxlL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NT0RVTEVfVU5MT0FEX1RBSU5UX1RSQUNLSU5HKSArPSB0cmFja2luZy5vXFxua2VybmVsL21vZHVsZS9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTU9EVUxFX1NUQVRTKSArPSBzdGF0cy5vXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM9MTI9dm9pZCBrbWVtbGVha19sb2FkX21vZHVsZShjb25zdCBzdHJ1Y3QgbW9kdWxlICptb2QsXFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjEzOlxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMTQte1xcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYy0xNS1cXHQvKiBvbmx5IHNjYW4gd3JpdGFibGUsIG5vbi1leGVjdXRhYmxlIHNlY3Rpb25zICovXFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jOjE2OlxcdGZvcl9lYWNoX21vZF9tZW1fdHlwZSh0eXBlKSB7XFxua2VybmVsL21vZHVsZS9kZWJ1Z19rbWVtbGVhay5jLTE3LVxcdFxcdGlmICh0eXBlICE9IE1PRF9EQVRBIFxcdTAwMjZcXHUwMDI2IHR5cGUgIT0gTU9EX0lOSVRfREFUQSBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9tb2R1bGUvZGVidWdfa21lbWxlYWsuYzoxODpcXHRcXHQgICAgIW1vZC1cXHUwMDNlbWVtW3R5cGVdLmlzX3JveClcXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmM6MTk6XFx0XFx0XFx0a21lbWxlYWtfbm9fc2Nhbihtb2QtXFx1MDAzZW1lbVt0eXBlXS5iYXNlKTtcXG5rZXJuZWwvbW9kdWxlL2RlYnVnX2ttZW1sZWFrLmMtMjAtXFx0fVxcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTYtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTc6c3RhdGljIGludCBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgZXh0ZW50KVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIyLVxcdG5ld19wYWdlcyA9IGt2cmVhbGxvYyhpbmZvLVxcdTAwM2VwYWdlcyxcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzpcXHRcXHRcXHQgICAgICBzaXplX211bChuZXdfbWF4LCBzaXplb2YoKmluZm8tXFx1MDAzZXBhZ2VzKSksXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQ6XFx0XFx0XFx0ICAgICAgR0ZQX0tFUk5FTCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjU6XFx0aWYgKCFuZXdfcGFnZXMpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjYtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zMy1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNDpzdGF0aWMgc3RydWN0IHBhZ2UgKm1vZHVsZV9nZXRfbmV4dF9wYWdlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzUte1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzgtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mzk6XFx0aWYgKGluZm8tXFx1MDAzZW1heF9wYWdlcyA9PSBpbmZvLVxcdTAwM2V1c2VkX3BhZ2VzKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDA6XFx0XFx0ZXJyb3IgPSBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhpbmZvLCBpbmZvLVxcdTAwM2V1c2VkX3BhZ2VzKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0MTpcXHRcXHRpZiAoZXJyb3IpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTQzLVxcdH1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy00NC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzo0NTpcXHRwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfSElHSE1FTSk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NDY6XFx0aWYgKCFwYWdlKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjQ3OlxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTQ4LVxcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNjItICovXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6NjM6c3RhdGljIHNpemVfdCBtb2R1bGVfZ3ppcF9oZWFkZXJfbGVuKGNvbnN0IHU4ICpidWYsIHNpemVfdCBzaXplKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTY0LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTY3LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjY4OlxcdGlmIChzaXplIFxcdTAwM2MgbGVuIHx8IG1lbWNtcChidWYsIHNpZ25hdHVyZSwgc2l6ZW9mKHNpZ25hdHVyZSkpKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTY5LVxcdFxcdHJldHVybiAwO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTcwLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjcxOlxcdGlmIChidWZbM10gXFx1MDAyNiAweDA4KSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNzItXFx0XFx0ZG8ge1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtNzYtXFx0XFx0XFx0ICovXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Nzc6XFx0XFx0XFx0aWYgKGxlbiA9PSBzaXplKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTc4LVxcdFxcdFxcdFxcdHJldHVybiAwO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjc5OlxcdFxcdH0gd2hpbGUgKGJ1ZltsZW4rK10gIT0gJ1xcXFwwJyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODAtXFx0fVxcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9ODU9c3RhdGljIHNzaXplX3QgbW9kdWxlX2d6aXBfZGVjb21wcmVzcyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjg2OlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtODcte1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtOTMtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6OTQ6XFx0Z3ppcF9oZHJfbGVuID0gbW9kdWxlX2d6aXBfaGVhZGVyX2xlbihidWYsIHNpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjk1OlxcdGlmICghZ3ppcF9oZHJfbGVuKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6OTY6XFx0XFx0cHJfZXJyKFxcXCJub3QgYSBnemlwIGNvbXByZXNzZWQgbW9kdWxlXFxcXG5cXFwiKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy05Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEwMi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDM6XFx0cy53b3Jrc3BhY2UgPSBrdm1hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLCBHRlBfS0VSTkVMKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDQ6XFx0aWYgKCFzLndvcmtzcGFjZSlcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMDUtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTA2LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEwNzpcXHRyYyA9IHpsaWJfaW5mbGF0ZUluaXQyKFxcdTAwMjZzLCAtTUFYX1dCSVRTKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDg6XFx0aWYgKHJjICE9IFpfT0spIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMDk6XFx0XFx0cHJfZXJyKFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZWNvbXByZXNzb3I6ICVkXFxcXG5cXFwiLCByYyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTEwLVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMTQtXFx0ZG8ge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExNTpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1vZHVsZV9nZXRfbmV4dF9wYWdlKGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExNi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMTc6XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjExODpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTExOS1cXHRcXHRcXHRnb3RvIG91dF9pbmZsYXRlX2VuZDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyMS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMjI6XFx0XFx0cy5uZXh0X291dCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMjMtXFx0XFx0cy5hdmFpbF9vdXQgPSBQQUdFX1NJWkU7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTI0OlxcdFxcdHJjID0gemxpYl9pbmZsYXRlKFxcdTAwMjZzLCAwKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMjU6XFx0XFx0a3VubWFwX2xvY2FsKHMubmV4dF9vdXQpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyNi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMjctXFx0XFx0bmV3X3NpemUgKz0gUEFHRV9TSVpFIC0gcy5hdmFpbF9vdXQ7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTI4OlxcdH0gd2hpbGUgKHJjID09IFpfT0spO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTEyOS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxMzA6XFx0aWYgKHJjICE9IFpfU1RSRUFNX0VORCkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEzMTpcXHRcXHRwcl9lcnIoXFxcImRlY29tcHJlc3Npb24gZmFpbGVkIHdpdGggc3RhdHVzICVkXFxcXG5cXFwiLCByYyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTMyLVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xMzgtb3V0X2luZmxhdGVfZW5kOlxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjEzOTpcXHR6bGliX2luZmxhdGVFbmQoXFx1MDAyNnMpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE0MC1vdXQ6XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTQxOlxcdGt2ZnJlZShzLndvcmtzcGFjZSk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTQyLVxcdHJldHVybiByZXR2YWw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYz0xNDk9c3RhdGljIHNzaXplX3QgbW9kdWxlX3h6X2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNTA6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTUxLXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE1OC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNTk6XFx0aWYgKHNpemUgXFx1MDAzYyBzaXplb2Yoc2lnbmF0dXJlKSB8fFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2MDpcXHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNjE6XFx0XFx0cHJfZXJyKFxcXCJub3QgYW4geHogY29tcHJlc3NlZCBtb2R1bGVcXFxcblxcXCIpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE2Mi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE2NC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNjU6XFx0eHpfZGVjID0geHpfZGVjX2luaXQoWFpfRFlOQUxMT0MsICh1MzIpLTEpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE2NjpcXHRpZiAoIXh6X2RlYylcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNjctXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xNzMtXFx0ZG8ge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE3NDpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1vZHVsZV9nZXRfbmV4dF9wYWdlKGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE3NS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxNzY6XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjE3NzpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE3OC1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4MC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxODE6XFx0XFx0eHpfYnVmLm91dCA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODItXFx0XFx0eHpfYnVmLm91dF9wb3MgPSAwO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4My1cXHRcXHR4el9idWYub3V0X3NpemUgPSBQQUdFX1NJWkU7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTg0OlxcdFxcdHh6X3JldCA9IHh6X2RlY19ydW4oeHpfZGVjLCBcXHUwMDI2eHpfYnVmKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxODU6XFx0XFx0a3VubWFwX2xvY2FsKHh6X2J1Zi5vdXQpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4Ni1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xODctXFx0XFx0bmV3X3NpemUgKz0geHpfYnVmLm91dF9wb3M7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTg4OlxcdH0gd2hpbGUgKHh6X2J1Zi5vdXRfcG9zID09IFBBR0VfU0laRSBcXHUwMDI2XFx1MDAyNiB4el9yZXQgPT0gWFpfT0spO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTE4OS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxOTA6XFx0aWYgKHh6X3JldCAhPSBYWl9TVFJFQU1fRU5EKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MTkxOlxcdFxcdHByX2VycihcXFwiZGVjb21wcmVzc2lvbiBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcXFxcblxcXCIsIHh6X3JldCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMTkyLVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0xOTgtIG91dDpcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoxOTk6XFx0eHpfZGVjX2VuZCh4el9kZWMpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIwMC1cXHRyZXR1cm4gcmV0dmFsO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM9MjA3PXN0YXRpYyBzc2l6ZV90IG1vZHVsZV96c3RkX2RlY29tcHJlc3Moc3RydWN0IGxvYWRfaW5mbyAqaW5mbyxcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMDg6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjA5LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIyMC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMjE6XFx0aWYgKHNpemUgXFx1MDAzYyBzaXplb2Yoc2lnbmF0dXJlKSB8fFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIyMjpcXHQgICAgbWVtY21wKGJ1Ziwgc2lnbmF0dXJlLCBzaXplb2Yoc2lnbmF0dXJlKSkpIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMjM6XFx0XFx0cHJfZXJyKFxcXCJub3QgYSB6c3RkIGNvbXByZXNzZWQgbW9kdWxlXFxcXG5cXFwiKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yMzAtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjMxOlxcdHJldCA9IHpzdGRfZ2V0X2ZyYW1lX2hlYWRlcihcXHUwMDI2aGVhZGVyLCB6c3RkX2J1Zi5zcmMsIHpzdGRfYnVmLnNpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzMjpcXHRpZiAocmV0ICE9IDApIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzM6XFx0XFx0cHJfZXJyKFxcXCJaU1RELWNvbXByZXNzZWQgZGF0YSBoYXMgYW4gaW5jb21wbGV0ZSBmcmFtZSBoZWFkZXJcXFxcblxcXCIpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTIzNC1cXHRcXHRyZXR2YWwgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjM2LVxcdH1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyMzc6XFx0aWYgKGhlYWRlci53aW5kb3dTaXplIFxcdTAwM2UgKDEgXFx1MDAzY1xcdTAwM2MgWlNURF9XSU5ET1dMT0dfTUFYKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjIzODpcXHRcXHRwcl9lcnIoXFxcIlpTVEQtY29tcHJlc3NlZCBkYXRhIGhhcyB0b28gbGFyZ2UgYSB3aW5kb3cgc2l6ZVxcXFxuXFxcIik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjM5LVxcdFxcdHJldHZhbCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNDItXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjQzOlxcdHdrc3Bfc2l6ZSA9IHpzdGRfZHN0cmVhbV93b3Jrc3BhY2VfYm91bmQoaGVhZGVyLndpbmRvd1NpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI0NDpcXHR3a3NwID0ga3ZtYWxsb2Mod2tzcF9zaXplLCBHRlBfS0VSTkVMKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNDU6XFx0aWYgKCF3a3NwKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjQ2LVxcdFxcdHJldHZhbCA9IC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNDktXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjUwOlxcdGRzdHJlYW0gPSB6c3RkX2luaXRfZHN0cmVhbShoZWFkZXIud2luZG93U2l6ZSwgd2tzcCwgd2tzcF9zaXplKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNTE6XFx0aWYgKCFkc3RyZWFtKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjUyOlxcdFxcdHByX2VycihcXFwiQ2FuJ3QgaW5pdGlhbGl6ZSBaU1REIHN0cmVhbVxcXFxuXFxcIik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjUzLVxcdFxcdHJldHZhbCA9IC1FTk9NRU07XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNTctXFx0ZG8ge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI1ODpcXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IG1vZHVsZV9nZXRfbmV4dF9wYWdlKGluZm8pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI1OS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNjA6XFx0XFx0aWYgKElTX0VSUihwYWdlKSkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI2MTpcXHRcXHRcXHRyZXR2YWwgPSBQVFJfRVJSKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI2Mi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI2NC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNjU6XFx0XFx0enN0ZF9kZWMuZHN0ID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI2Ni1cXHRcXHR6c3RkX2RlYy5wb3MgPSAwO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjY4LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI2OTpcXHRcXHRyZXQgPSB6c3RkX2RlY29tcHJlc3Nfc3RyZWFtKGRzdHJlYW0sIFxcdTAwMjZ6c3RkX2RlYywgXFx1MDAyNnpzdGRfYnVmKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzA6XFx0XFx0a3VubWFwX2xvY2FsKHpzdGRfZGVjLmRzdCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MjcxOlxcdFxcdHJldHZhbCA9IHpzdGRfZ2V0X2Vycm9yX2NvZGUocmV0KTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzI6XFx0XFx0aWYgKHJldHZhbClcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzMtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzUtXFx0XFx0bmV3X3NpemUgKz0genN0ZF9kZWMucG9zO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjI3NjpcXHR9IHdoaWxlICh6c3RkX2RlYy5wb3MgPT0gUEFHRV9TSVpFIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAwKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yNzctXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjc4OlxcdGlmIChyZXR2YWwpIHtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyNzk6XFx0XFx0cHJfZXJyKFxcXCJaU1RELWRlY29tcHJlc3Npb24gZmFpbGVkIHdpdGggc3RhdHVzICVkXFxcXG5cXFwiLCByZXR2YWwpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI4MC1cXHRcXHRyZXR2YWwgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjg2LSBvdXQ6XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6Mjg3OlxcdGt2ZnJlZSh3a3NwKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0yODgtXFx0cmV0dXJuIHJldHZhbDtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTI5My1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzoyOTQ6aW50IG1vZHVsZV9kZWNvbXByZXNzKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMjk1LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMwNy1cXHQgKi9cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMDg6XFx0bl9wYWdlcyA9IERJVl9ST1VORF9VUChzaXplLCBQQUdFX1NJWkUpICogMjtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMDk6XFx0ZXJyb3IgPSBtb2R1bGVfZXh0ZW5kX21heF9wYWdlcyhpbmZvLCBuX3BhZ2VzKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTA6XFx0aWYgKGVycm9yKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMxMS1cXHRcXHRyZXR1cm4gZXJyb3I7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzEyLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMxMzpcXHRkYXRhX3NpemUgPSBNT0RVTEVfREVDT01QUkVTU19GTihpbmZvLCBidWYsIHNpemUpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjMxNDpcXHRpZiAoZGF0YV9zaXplIFxcdTAwM2MgMCkge1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMxNS1cXHRcXHRlcnJvciA9IGRhdGFfc2l6ZTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMxOC1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMTk6XFx0aW5mby1cXHUwMDNlaGRyID0gdm1hcChpbmZvLVxcdTAwM2VwYWdlcywgaW5mby1cXHUwMDNldXNlZF9wYWdlcywgVk1fTUFQLCBQQUdFX0tFUk5FTCk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzIwOlxcdGlmICghaW5mby1cXHUwMDNlaGRyKSB7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzIxLVxcdFxcdGVycm9yID0gLUVOT01FTTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMyOC1lcnI6XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzI5OlxcdG1vZHVsZV9kZWNvbXByZXNzX2NsZWFudXAoaW5mbyk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzMwLVxcdHJldHVybiBlcnJvcjtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzMi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMzM6dm9pZCBtb2R1bGVfZGVjb21wcmVzc19jbGVhbnVwKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM0LXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTMzNi1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMzc6XFx0aWYgKGluZm8tXFx1MDAzZWhkcilcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozMzg6XFx0XFx0dnVubWFwKGluZm8tXFx1MDAzZWhkcik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzM5LVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MDpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaW5mby1cXHUwMDNldXNlZF9wYWdlczsgaSsrKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MTpcXHRcXHRfX2ZyZWVfcGFnZShpbmZvLVxcdTAwM2VwYWdlc1tpXSk7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzQyLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM0MzpcXHRrdmZyZWUoaW5mby1cXHUwMDNlcGFnZXMpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM0NC1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jPTM1MD1zdGF0aWMgc3NpemVfdCBjb21wcmVzc2lvbl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM1MTpcXHRcXHRcXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTIte1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM1MzpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIF9fc3RyaW5naWZ5KE1PRFVMRV9DT01QUkVTU0lPTikgXFxcIlxcXFxuXFxcIik7XFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmMtMzU0LX1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNTUtXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzU2OnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbW9kdWxlX2NvbXByZXNzaW9uX2F0dHIgPSBfX0FUVFJfUk8oY29tcHJlc3Npb24pO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1Ny1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYzozNTg6c3RhdGljIGludCBfX2luaXQgbW9kdWxlX2RlY29tcHJlc3Nfc3lzZnNfaW5pdCh2b2lkKVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM1OS17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjItXFx0ZXJyb3IgPSBzeXNmc19jcmVhdGVfZmlsZShcXHUwMDI2bW9kdWxlX2tzZXQtXFx1MDAzZWtvYmosXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzYzOlxcdFxcdFxcdFxcdCAgXFx1MDAyNm1vZHVsZV9jb21wcmVzc2lvbl9hdHRyLmF0dHIpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM2NDpcXHRpZiAoZXJyb3IpXFxua2VybmVsL21vZHVsZS9kZWNvbXByZXNzLmM6MzY1OlxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byBjcmVhdGUgJ2NvbXByZXNzaW9uJyBhdHRyaWJ1dGVcXFwiKTtcXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjYtXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2RlY29tcHJlc3MuYy0zNjgtfVxcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jOjM2OTpsYXRlX2luaXRjYWxsKG1vZHVsZV9kZWNvbXByZXNzX3N5c2ZzX2luaXQpO1xcbmtlcm5lbC9tb2R1bGUvZGVjb21wcmVzcy5jLTM3MC0jZW5kaWZcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTMwLSNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCBcXFwibW9kdWxlLlxcXCJcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozMTpzdGF0aWMgYm9vbCBlbmFibGVfZHVwc190cmFjZSA9IElTX0VOQUJMRUQoQ09ORklHX01PRFVMRV9ERUJVR19BVVRPTE9BRF9EVVBTX1RSQUNFKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzozMjptb2R1bGVfcGFyYW0oZW5hYmxlX2R1cHNfdHJhY2UsIGJvb2xfZW5hYmxlX29ubHksIDA2NDQpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTMzLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTM0LS8qIEEgbXV0ZXgtcHJvdGVjdGVkIGxpc3Qgb2YgYWN0aXZlIGttb2QgcmVxdWVzdHMuICovXFxua2VybmVsL21vZHVsZS9kdXBzLmM6MzU6c3RhdGljIERFRklORV9NVVRFWChrbW9kX2R1cF9tdXRleCk7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6MzY6c3RhdGljIExJU1RfSEVBRChkdXBfa21vZF9yZXFzKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0zNy1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYz0zOD1zdHJ1Y3Qga21vZF9kdXBfcmVxIHtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTQ2LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjQ3OnN0YXRpYyB2b2lkIGdldF9rbW9kX3JlcShzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX3JlcSlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy00OC17XFxua2VybmVsL21vZHVsZS9kdXBzLmM6NDk6XFx0cmVmY291bnRfaW5jKFxcdTAwMjZrbW9kX3JlcS1cXHUwMDNlcmVmY291bnQpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTUwLX1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy01MS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1MjpzdGF0aWMgdm9pZCBwdXRfa21vZF9yZXEoc3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEpXFxua2VybmVsL21vZHVsZS9kdXBzLmMtNTMte1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjU0OlxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VyZWZjb3VudCkpXFxua2VybmVsL21vZHVsZS9kdXBzLmM6NTU6XFx0XFx0a2ZyZWUoa21vZF9yZXEpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU2LX1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy01Ny1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo1ODpERUZJTkVfRlJFRShwdXRfa21vZF9yZXEsIHN0cnVjdCBrbW9kX2R1cF9yZXEgKiwgaWYgKF9UKSBwdXRfa21vZF9yZXEoX1QpKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTU5LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjYwOnN0YXRpYyBzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX2R1cF9yZXF1ZXN0X2xvb2t1cChjaGFyICptb2R1bGVfbmFtZSlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy02MS17XFxuLS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy02My1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo2NDpcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZrbW9kX2R1cF9tdXRleCk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtNjUtXFxua2VybmVsL21vZHVsZS9kdXBzLmM6NjY6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShrbW9kX3JlcSwgXFx1MDAyNmR1cF9rbW9kX3JlcXMsIGxpc3QpIHtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo2NzpcXHRcXHRpZiAoIXN0cmNtcChrbW9kX3JlcS1cXHUwMDNlbmFtZSwgbW9kdWxlX25hbWUpKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTY4LVxcdFxcdFxcdHJldHVybiBrbW9kX3JlcTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTczLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjc0OnN0YXRpYyB2b2lkIGttb2RfZHVwX3JlcXVlc3RfZGVsZXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy03NS17XFxua2VybmVsL21vZHVsZS9kdXBzLmMtNzYtXFx0c3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXE7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6Nzc6XFx0a21vZF9yZXEgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3Qga21vZF9kdXBfcmVxLCBkZWxldGVfd29yayk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtNzgtXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy04My1cXHQgKiBtb2R1bGUgaXMgbG9hZGVkIHNvIHdpbGwganVzdCByZXR1cm4gMCByaWdodCBhd2F5LiBUaGVyZSBpcyBzdGlsbFxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjg0OlxcdCAqIGEgc21hbGwgY2hhbmNlIHJpZ2h0IGFmdGVyIHdlIGRlbGV0ZSB0aGlzIGVudHJ5IG5ldyByZXF1ZXN0X21vZHVsZSgpXFxua2VybmVsL21vZHVsZS9kdXBzLmMtODUtXFx0ICogY2FsbHMgbWF5IGhhcHBlbiBhZnRlciB0aGF0LCB0aGV5IGNhbiBoYXBwZW4uIFRoZXNlIGhldXJpc3RpY3NcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzo4NjpcXHQgKiBhcmUgdG8gcHJvdGVjdCBmaW5pdF9tb2R1bGUoKSBhYnVzZSBmb3IgYXV0by1sb2FkaW5nLCBpZiBtb2R1bGVzXFxua2VybmVsL21vZHVsZS9kdXBzLmMtODctXFx0ICogYXJlIHN0aWxsIHRyeWlnbiB0byBhdXRvLWxvYWQgZXZlbiBpZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGxvYWRlZCxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTkxLVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjkyOlxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNmttb2RfZHVwX211dGV4KVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjkzOlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZrbW9kX3JlcS1cXHUwMDNlbGlzdCk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtOTQtXFxua2VybmVsL21vZHVsZS9kdXBzLmM6OTU6XFx0cHV0X2ttb2RfcmVxKGttb2RfcmVxKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy05Ni19XFxua2VybmVsL21vZHVsZS9kdXBzLmMtOTctXFxua2VybmVsL21vZHVsZS9kdXBzLmM6OTg6c3RhdGljIHN0cnVjdCBrbW9kX2R1cF9yZXEgKmFsbG9jX2ttb2RfcmVxKGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTk5LXtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMDA6XFx0c3RydWN0IGttb2RfZHVwX3JlcSAqa21vZF9yZXEgPSBremFsbG9jX29iaigqa21vZF9yZXEpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEwMS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMDI6XFx0aWYgKCFrbW9kX3JlcSlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMDMtXFx0XFx0cmV0dXJuIE5VTEw7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTA0LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwNTpcXHRyZWZjb3VudF9zZXQoXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VyZWZjb3VudCwgMSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTA2OlxcdHN0cnNjcHkoa21vZF9yZXEtXFx1MDAzZW5hbWUsIG1vZHVsZV9uYW1lKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMDc6XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VkZWxldGVfd29yaywga21vZF9kdXBfcmVxdWVzdF9kZWxldGUpO1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEwODpcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmttb2RfcmVxLVxcdTAwM2VmaXJzdF9yZXFfZG9uZSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTA5LVxcdHJldHVybiBrbW9kX3JlcTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExMS1cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMTI6Ym9vbCBrbW9kX2R1cF9yZXF1ZXN0X2V4aXN0c193YWl0KGNoYXIgKm1vZHVsZV9uYW1lLCBib29sIHdhaXQsIGludCAqZHVwX3JldClcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMTMte1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjExNDpcXHRzdHJ1Y3Qga21vZF9kdXBfcmVxICprbW9kX3JlcSBfX2ZyZWUocHV0X2ttb2RfcmVxKSA9IE5VTEw7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTE1LVxcdGludCByZXQ7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTE2LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjExNzpcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZrbW9kX2R1cF9tdXRleCkge1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTExOC1cXHRcXHRzdHJ1Y3Qga21vZF9kdXBfcmVxICpuZXdfa21vZF9yZXE7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTE5LVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEyMDpcXHRcXHRrbW9kX3JlcSA9IGttb2RfZHVwX3JlcXVlc3RfbG9va3VwKG1vZHVsZV9uYW1lKTtcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMjE6XFx0XFx0aWYgKGttb2RfcmVxKSB7XFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTIyOlxcdFxcdFxcdGdldF9rbW9kX3JlcShrbW9kX3JlcSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTIzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTI3LVxcdFxcdCAqIElmIHRoZSBmaXJzdCByZXF1ZXN0IHRoYXQgY2FtZSB0aHJvdWdoIGZvciBhIG1vZHVsZVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEyODpcXHRcXHQgKiB3YXMgd2l0aCByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKSB3ZSBjYW5ub3Qgd2FpdCBmb3IgaXRcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMjktXFx0XFx0ICogYW5kIHNoYXJlIGl0cyByZXR1cm4gdmFsdWUgd2l0aCBvdGhlciB1c2VycyB3aGljaCBtYXlcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMzA6XFx0XFx0ICogaGF2ZSB1c2VkIHJlcXVlc3RfbW9kdWxlKCkgYW5kIG5lZWQgYSBwcm9wZXIgcmV0dXJuIHZhbHVlXFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTMxLVxcdFxcdCAqIHNvIGp1c3Qgc2tpcCB1c2luZyB0aGVtIGFzIGFuIGFuY2hvci5cXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEzMy1cXHRcXHQgKiBJZiBhIHByaW9yIHJlcXVlc3QgdG8gdGhpcyBvbmUgY2FtZSB0aHJvdWdoIHdpdGhcXG5rZXJuZWwvbW9kdWxlL2R1cHMuYzoxMzQ6XFx0XFx0ICogcmVxdWVzdF9tb2R1bGUoKSB0aG91Z2gsIHRoZW4gYSByZXF1ZXN0X21vZHVsZV9ub3dhaXQoKVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTEzNS1cXHRcXHQgKiB3b3VsZCBiZW5lZml0IGZyb20gZHVwbGljYXRlIGRldGVjdGlvbi5cXG5rZXJuZWwvbW9kdWxlL2R1cHMuYy0xMzYtXFx0XFx0ICovXFxua2VybmVsL21vZHVsZS9kdXBzLmM6MTM3OlxcdFxcdGlmICghd2FpdCkge1xcbmtlcm5lbC9tb2R1bGUvZHVwcy5jOjEzODpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiTmV3IHJlcXVlc3RfbW9kdWxlX25vd2FpdCgpIGZvciAlcyAtLSBjYW5ub3QgdHJhY2sgZHVwbGljYXRlcyBmb3IgdGhpcyByZXF1ZXN0XFxcXG5cXFwiLCBtb2R1bGVfbmFtZSk7XFxua2VybmVsL21vZHVsZS9kdXBzLmMtMTM5LVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvZHVwcy5jLTE0NS1cXHRcXHQgKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6Mjk6NTMuNDI2OTAxNzg0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc5NTMwNjIxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudDogS2VybmVsIE1vZHVsZSBMb2FkaW5nIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUgcHJpbWFyaWx5IHdpdGhpbiBga2VybmVsL21vZHVsZS9tYWluLmNg4oCUZnVuY3Rpb25zIGxpa2UgYGluaXRfbW9kdWxlYCwgYGZpbml0X21vZHVsZWAsIGFuZCBgZGVsZXRlX21vZHVsZWDigJRhbG9uZyB3aXRoIGBsaWIvY29kZXRhZy5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY29kZXRhZyBhbGxvY2F0aW9uIChgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAsIGBjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zYCwgYW5kIGBjb2RldGFnX25lZWRzX21vZHVsZV9zZWN0aW9uYCkuIFRoaXMgcG9pbnRzIHRvIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgRUxGIG1vZHVsZSBwYXJzaW5nIGFuZCBtb2R1bGUgbGlmZWN5Y2xlLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIGBNT0RVTEVTYCBpcyBhIGdpdmVuLCBlc3NlbnRpYWwgZm9yIG1vZHVsZSBsb2FkaW5nLiBIb3dldmVyLCB0aGUgY3JpdGljYWwgb25lIGhlcmUgaXMgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBicmluZ3MgaW4gYWxsb2NfdGFnIGNvZGV0YWcgc3VwcG9ydCwgdGh1cyBgQ09ERV9UQUdHSU5HYCwgYFBBR0VfRVhURU5TSU9OYCwgYW5kIGBTTEFCX09CSl9FWFRgLiBJJ2xsIGNyb3NzLXJlZmVyZW5jZSBgbW0vS2NvbmZpZy5kZWJ1Z2AgYW5kIGNvbmZpcm0gdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kcyBvbiBgTU1VYCBhbmQgYFBST0NfRlNgLlxuXG5Ob3csIGRpZ2dpbmcgaW50byB0aGUgYFdvcnRoRnV6emluZ2AgYXNzZXNzbWVudDogdGhlIGNoYW5nZXMgdG91Y2ggY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1vZHVsZSBsb2FkaW5nIGxvZ2ljLiBTcGVjaWZpY2FsbHksIGhvdyBFTEYgc2VjdGlvbnMgYXJlIGhhbmRsZWQsIGFuZCB0aGUgcmVsb2NhdGlvbiBvZiBjb2RldGFncyBhbmQgcGVyLWNwdSBzZWN0aW9ucyBpcyBjcnVjaWFsLiBUaGUgbW9kaWZpY2F0aW9ucyBlbmNvbXBhc3MgZnVuY3Rpb25zIGludm9sdmVkIGluIEVMRiBzZWN0aW9uIGxheW91dCAoYF9fbGF5b3V0X3NlY3Rpb25zYCwgYG1vdmVfbW9kdWxlYCwgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgLCBhbmQgYGxheW91dF9hbmRfYWxsb2NhdGVgKSB3aGljaCByZWxhdGVzIHRvIGhvdyBjb2RldGFncyBhbmQgcGVyLWNwdSBzZWN0aW9ucyBhcmUgdHJhY2tlZCBhbmQgcmVsb2NhdGVkIGR1cmluZyBtb2R1bGUgbG9hZGluZy4gTWVtb3J5IHJlc2VydmF0aW9uIGFuZCByZWxlYXNlIHZpYSBgYWxsb2NfdGFnLmNgLCBhbmQgdGhlIGZhbGxiYWNrIGhhbmRsaW5nIGlmIHRhZ3MgYXJlbid0IGFkZHJlc3NhYmxlLCB3aGljaCBhcmUga2V5IGR1cmluZyBsb2FkaW5nIGFuZCB1bmxvYWRpbmcuXG5cblRoaXMgZGlyZWN0bHkgaW1wbGljYXRlcyBob3cgRUxGIG1vZHVsZXMgYXJlIHBhcnNlZCwgbWVtb3J5IGFsbG9jYXRlZCwgYW5kIGluaXRpYWxpemVkL2NsZWFuZWQgdXAgd2hlbiBhIG1vZHVsZSBsb2Fkcy4gYGluaXRfbW9kdWxlYCBhbmQgYGZpbml0X21vZHVsZWAgYXJlIGludm9sdmVkIGluIHRoZSBwcm9jZXNzLCB3aGljaCBpcyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuVGhlcmVmb3JlLCB0aGlzIGlzICphYnNvbHV0ZWx5KiB3b3J0aCBmdXp6aW5nLiBJJ2xsIGZsYWcgYFdvcnRoRnV6emluZ2AgYXMgYHRydWVgIGFuZCB0aGUgcmVhc29uaW5nIGlzIGNvbmNpc2U6IFdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtb2R1bGUgbG9hZGluZyBsb2dpYywgZXNwZWNpYWxseSBjb25jZXJuaW5nIHRoZSBoYW5kbGluZyBvZiBFTEYgc2VjdGlvbnMgYW5kIGNvZGV0YWdzIGR1cmluZyBtb2R1bGUgbGlmZWN5Y2xlLlxuXG5UaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOiBgaW5pdF9tb2R1bGVgLCBgZmluaXRfbW9kdWxlYCwgYGNvZGV0YWdfYWxsb2NfbW9kdWxlX3NlY3Rpb25gLCBhbmQgYGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnNgLlxuXG5UaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYE1PRFVMRVNgIGFuZCBgTUVNX0FMTE9DX1BST0ZJTElOR2AuXG5cbkkndmUgdmVyaWZpZWQgZXZlcnl0aGluZyDigJMgaXQncyBhbGwgYWNjdXJhdGUgYW5kIGNvbnNpc3RlbnQuIFRpbWUgdG8gc2V0IHRoZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODg5OSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MDEuMzc5OTY3MzNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE1Njk4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PRFVMRVNcIixcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbml0X21vZHVsZVwiLFxuICAgIFwiZmluaXRfbW9kdWxlXCIsXG4gICAgXCJjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uXCIsXG4gICAgXCJjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyBjb3JlIGtlcm5lbCBtb2R1bGUgbG9hZGluZyBhbmQgbGF5b3V0IGxvZ2ljIGZvciBzdGFuZGFsb25lIHNlY3Rpb25zIChwZXItQ1BVIHNlY3Rpb25zIGFuZCBjb2RldGFncy9hbGxvYyB0YWdzKSBhcyB3ZWxsIGFzIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyB0YWcgcmVzZXJ2YXRpb24gZmFsbGJhY2sgaGFuZGxpbmcgd2hlbiB0YWdzIGFyZSBub3QgYWRkcmVzc2FibGUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSB2aWEgbW9kdWxlIGxvYWRpbmcgc3lzY2FsbHMgKGluaXRfbW9kdWxlIGFuZCBmaW5pdF9tb2R1bGUpIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaW5pdF9tb2R1bGVcIixcbiAgICBcImZpbml0X21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvblwiLFxuICAgIFwiY29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9uc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgY29yZSBrZXJuZWwgbW9kdWxlIGxvYWRpbmcgYW5kIGxheW91dCBsb2dpYyBmb3Igc3RhbmRhbG9uZSBzZWN0aW9ucyAocGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZ3MvYWxsb2MgdGFncykgYXMgd2VsbCBhcyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgdGFnIHJlc2VydmF0aW9uIGZhbGxiYWNrIGhhbmRsaW5nIHdoZW4gdGFncyBhcmUgbm90IGFkZHJlc3NhYmxlLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgdmlhIG1vZHVsZSBsb2FkaW5nIHN5c2NhbGxzIChpbml0X21vZHVsZSBhbmQgZmluaXRfbW9kdWxlKSBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjMwOjAxLjUxMTU0NjY4OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2NjEwMjc5NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDozMDowMS41MTQ0NTg3NDhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNDY1ODExMDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBFTEYgc2VjdGlvbiBsYXlvdXQgYW5kIGFsbG9jYXRpb24gbG9naWMgZm9yIHN0YW5kYWxvbmUgbW9kdWxlIHNlY3Rpb25zIChzdWNoIGFzIHBlci1DUFUgc2VjdGlvbnMgYW5kIGNvZGV0YWcvYWxsb2NfdGFnIHNlY3Rpb25zKSBkdXJpbmcgbW9kdWxlIGxvYWRpbmcgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBhbmQgYWRqdXN0cyBlcnJvciBoYW5kbGluZyBpbiBgbW0vYWxsb2NfdGFnLmNgLlxcblxcbktNU0FOIHZzIEtBU0FOIGFuYWx5c2lzOlxcbi0gS01TQU4gZGV0ZWN0cyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBkb2VzIG5vdCBsZWF2ZSBzdHJ1Y3R1cmUgcGFkZGluZ3MgdW5pbml0aWFsaXplZCwgZG9lcyBub3QgZXhwb3NlIGRhdGEgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIHN0YXRlLiBUaGUgc2VjdGlvbiBkYXRhIGNvcGllZCB2aWEgYG1lbWNweSgpYCBvcmlnaW5hdGVzIGZyb20gYWxyZWFkeS1sb2FkZWQgRUxGIGltYWdlIGJ1ZmZlcnMuXFxuLSBBbnkgcG90ZW50aWFsIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gc2VjdGlvbiBsYXlvdXRzLCByZWxvY2F0aW9ucywgb3Igc2VwYXJhdGUgbWVtb3J5IGFsbG9jYXRpb25zIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgc2VjdGlvbiByZWFkcy93cml0ZXMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMpIGFyZSBhZGRyZXNzYWJsZSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWQ3MTE0Zjg5ZjJhZjc4ZmVhZDM5NzYwZTNjZWZiY2EyMTFhMjQ5ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMDA6Mjk6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuaW5kZXggOTZjYzk4NTY4ZWVhNS4uMGM2ZjMyZGRjYmYyZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbkBAIC0zMjUsNiArMzI1LDggQEAgZW51bSBtb2RfbWVtX3R5cGUge1xuIFx0TU9EX0lOSVRfUk9EQVRBLFxuIFxuIFx0TU9EX01FTV9OVU1fVFlQRVMsXG4rXG4rXHRNT0RfU1RBTkRBTE9ORSA9IC0yLFxuIFx0TU9EX0lOVkFMSUQgPSAtMSxcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaCBiL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuaW5kZXggMDYxMTYxY2M3OWQ5MC4uNGM3MzgwNzRhMjdiOCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaFxuKysrIGIva2VybmVsL21vZHVsZS9pbnRlcm5hbC5oXG5AQCAtMjksNiArMjksMTQgQEBcbiAjZGVmaW5lIFNIX0VOVFNJWkVfVFlQRV9NQVNLXHQoKDFVTCBcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX0JJVFMpIC0gMSlcbiAjZGVmaW5lIFNIX0VOVFNJWkVfT0ZGU0VUX01BU0tcdCgoMVVMIFx1MDAzY1x1MDAzYyAoQklUU19QRVJfTE9ORyAtIFNIX0VOVFNJWkVfVFlQRV9CSVRTKSkgLSAxKVxuIFxuKy8qXG4rICogTWFya2VyIGZvciBzZWN0aW9ucyB3aXRoIGEgc2VwYXJhdGUgYWxsb2NhdGlvbiwgd2hpY2ggYXJlIG5vdCBwbGFjZWRcbisgKiBpbnRvIG1vZC1cdTAwM2VtZW1bXS5cbisgKi9cbisjZGVmaW5lIFNIX0VOVFNJWkVfU1RBTkRBTE9ORVx0XHRcdFx0XHRcXFxuK1x0KCgodW5zaWduZWQgbG9uZylNT0RfU1RBTkRBTE9ORSBcdTAwMjYgU0hfRU5UU0laRV9UWVBFX01BU0spXHRcXFxuK1x0IFx1MDAzY1x1MDAzYyBTSF9FTlRTSVpFX1RZUEVfU0hJRlQpXG4rXG4gLyogTWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGJ5IG1vZHVsZV9mbGFncygpICovXG4gI2RlZmluZSBNT0RVTEVfRkxBR1NfQlVGX1NJWkUgKFRBSU5UX0ZMQUdTX0NPVU5UICsgNClcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCBjMWIzNGRjMWU4OWFjLi43NjA0NDlkZGFiMjI0IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbisrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTYxNywxNCArMTYxNyw4IEBAIHN0YXRpYyBpbnQgYXBwbHlfcmVsb2NhdGlvbnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0XHRpZiAoaW5mb3NlYyBcdTAwM2U9IGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW0pXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qXG4tXHRcdCAqIERvbid0IGJvdGhlciB3aXRoIG5vbi1hbGxvY2F0ZWQgc2VjdGlvbnMuXG4tXHRcdCAqIEFuIGV4Y2VwdGlvbiBpcyB0aGUgcGVyY3B1IHNlY3Rpb24sIHdoaWNoIGhhcyBzZXBhcmF0ZSBhbGxvY2F0aW9uc1xuLVx0XHQgKiBmb3IgaW5kaXZpZHVhbCBDUFVzLiBXZSByZWxvY2F0ZSB0aGUgcGVyY3B1IHNlY3Rpb24gaW4gdGhlIGluaXRpYWxcbi1cdFx0ICogRUxGIHRlbXBsYXRlIGFuZCBzdWJzZXF1ZW50bHkgY29weSBpdCB0byB0aGUgcGVyLUNQVSBkZXN0aW5hdGlvbnMuXG4tXHRcdCAqL1xuLVx0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoIWluZm9zZWMgfHwgaW5mb3NlYyAhPSBpbmZvLVx1MDAzZWluZGV4LnBjcHUpKVxuK1x0XHQvKiBEb24ndCBib3RoZXIgd2l0aCBub24tYWxsb2NhdGVkIHNlY3Rpb25zLiAqL1xuK1x0XHRpZiAoIShpbmZvLVx1MDAzZXNlY2hkcnNbaW5mb3NlY10uc2hfZmxhZ3MgXHUwMDI2IFNIRl9BTExPQykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZmxhZ3MgXHUwMDI2IFNIRl9SRUxBX0xJVkVQQVRDSClcbkBAIC0xNzE1LDI3ICsxNzA5LDEzIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gXG4gXHRcdFx0aWYgKChzLVx1MDAzZXNoX2ZsYWdzIFx1MDAyNiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF1cbiBcdFx0XHQgICAgfHwgKHMtXHUwMDNlc2hfZmxhZ3MgXHUwMDI2IG1hc2tzW21dWzFdKVxuLVx0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTFxuK1x0XHRcdCAgICB8fCBzLVx1MDAzZXNoX2VudHNpemUgIT0gfjBVTCAvKiBvZmZzZXQgb3Igc3RhbmRhbG9uZSAqL1xuIFx0XHRcdCAgICB8fCBpc19pbml0ICE9IG1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNuYW1lKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGlmIChXQVJOX09OX09OQ0UodHlwZSA9PSBNT0RfSU5WQUxJRCkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHQvKlxuLVx0XHRcdCAqIERvIG5vdCBhbGxvY2F0ZSBjb2RldGFnIG1lbW9yeSBhcyB3ZSBsb2FkIGl0IGludG9cbi1cdFx0XHQgKiBwcmVhbGxvY2F0ZWQgY29udGlndW91cyBtZW1vcnkuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgcy1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIHMtXHUwMDNlc2hfZW50c2l6ZSB3b24ndCBiZSB1c2VkIGJ1dCBwb3B1bGF0ZSB0aGVcbi1cdFx0XHRcdCAqIHR5cGUgZmllbGQgdG8gYXZvaWQgY29uZnVzaW9uLlxuLVx0XHRcdFx0ICovXG4tXHRcdFx0XHRzLVx1MDAzZXNoX2VudHNpemUgPSAoKHVuc2lnbmVkIGxvbmcpKHR5cGUpIFx1MDAyNiBTSF9FTlRTSVpFX1RZUEVfTUFTSylcbi1cdFx0XHRcdFx0XHRcdTAwM2NcdTAwM2MgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuIFx0XHRcdHMtXHUwMDNlc2hfZW50c2l6ZSA9IG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKG1vZCwgdHlwZSwgcywgaSk7XG4gXHRcdFx0cHJfZGVidWcoXCJcXHQlc1xcblwiLCBzbmFtZSk7XG4gXHRcdH1cbkBAIC0xNzQ1LDE2ICsxNzI1LDEwIEBAIHN0YXRpYyB2b2lkIF9fbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgYm9vbCBpXG4gLypcbiAgKiBMYXkgb3V0IHRoZSBTSEZfQUxMT0Mgc2VjdGlvbnMgaW4gYSB3YXkgbm90IGRpc3NpbWlsYXIgdG8gaG93IGxkXG4gICogbWlnaHQgLS0gY29kZSwgcmVhZC1vbmx5IGRhdGEsIHJlYWQtd3JpdGUgZGF0YSwgc21hbGwgZGF0YS4gIFRhbGx5XG4tICogc2l6ZXMsIGFuZCBwbGFjZSB0aGUgb2Zmc2V0cyBpbnRvIHNoX2VudHNpemUgZmllbGRzOiBoaWdoIGJpdCBtZWFucyBpdFxuLSAqIGJlbG9uZ3MgaW4gaW5pdC5cbisgKiBzaXplcywgYW5kIHBsYWNlIHRoZSBvZmZzZXRzIGludG8gc2hfZW50c2l6ZSBmaWVsZHMuXG4gICovXG4gc3RhdGljIHZvaWQgbGF5b3V0X3NlY3Rpb25zKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbi1cbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKylcbi1cdFx0aW5mby1cdTAwM2VzZWNoZHJzW2ldLnNoX2VudHNpemUgPSB+MFVMO1xuLVxuIFx0cHJfZGVidWcoXCJDb3JlIHNlY3Rpb24gYWxsb2NhdGlvbiBvcmRlciBmb3IgJXM6XFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbiBcdF9fbGF5b3V0X3NlY3Rpb25zKG1vZCwgaW5mbywgZmFsc2UpO1xuIFxuQEAgLTI4MDAsNyArMjc3NCw2IEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIHtcbiBcdGludCBpLCByZXQ7XG4gXHRlbnVtIG1vZF9tZW1fdHlwZSB0ID0gTU9EX01FTV9OVU1fVFlQRVM7XG4tXHRib29sIGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IGZhbHNlO1xuIFxuIFx0Zm9yX2VhY2hfbW9kX21lbV90eXBlKHR5cGUpIHtcbiBcdFx0aWYgKCFtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpIHtcbkBAIC0yODIwLDM0ICsyNzkzLDEzIEBAIHN0YXRpYyBpbnQgbW92ZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKSB7XG4gXHRcdHZvaWQgKmRlc3Q7XG4gXHRcdEVsZl9TaGRyICpzaGRyID0gXHUwMDI2aW5mby1cdTAwM2VzZWNoZHJzW2ldO1xuLVx0XHRjb25zdCBjaGFyICpzbmFtZTtcbiBcbi1cdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKSlcbitcdFx0aWYgKCEoc2hkci1cdTAwM2VzaF9mbGFncyBcdTAwMjYgU0hGX0FMTE9DKVxuK1x0XHQgICAgfHwgc2hkci1cdTAwM2VzaF9lbnRzaXplID09IFNIX0VOVFNJWkVfU1RBTkRBTE9ORSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0c25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4tXHRcdC8qXG4tXHRcdCAqIExvYWQgY29kZXRhZyBzZWN0aW9ucyBzZXBhcmF0ZWx5IGFzIHRoZXkgbWlnaHQgc3RpbGwgYmUgdXNlZFxuLVx0XHQgKiBhZnRlciBtb2R1bGUgdW5sb2FkLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb24obW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplKSkge1xuLVx0XHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKG1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSxcbi1cdFx0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKG1vZCwgaSksIHNoZHItXHUwMDNlc2hfYWRkcmFsaWduKTtcbi1cdFx0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IC1FSU5WQUw7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGlmIChJU19FUlIoZGVzdCkpIHtcbi1cdFx0XHRcdHJldCA9IFBUUl9FUlIoZGVzdCk7XG4tXHRcdFx0XHRnb3RvIG91dF9lcnI7XG4tXHRcdFx0fVxuLVx0XHRcdGNvZGV0YWdfc2VjdGlvbl9mb3VuZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZW51bSBtb2RfbWVtX3R5cGUgdHlwZSA9IHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwM2VcdTAwM2UgU0hfRU5UU0laRV9UWVBFX1NISUZUO1xuLVx0XHRcdHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAyNiBTSF9FTlRTSVpFX09GRlNFVF9NQVNLO1xuLVxuLVx0XHRcdGRlc3QgPSBtb2QtXHUwMDNlbWVtW3R5cGVdLmJhc2UgKyBvZmZzZXQ7XG4tXHRcdH1cbitcdFx0ZGVzdCA9IG1vZC1cdTAwM2VtZW1bc2hkci1cdTAwM2VzaF9lbnRzaXplIFx1MDAzZVx1MDAzZSBTSF9FTlRTSVpFX1RZUEVfU0hJRlRdLmJhc2UgK1xuK1x0XHQgICAgICAgKHNoZHItXHUwMDNlc2hfZW50c2l6ZSBcdTAwMjYgU0hfRU5UU0laRV9PRkZTRVRfTUFTSyk7XG4gXG4gXHRcdGlmIChzaGRyLVx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUykge1xuIFx0XHRcdC8qXG5AQCAtMjg3OSw4ICsyODMxLDYgQEAgc3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4gXHRtb2R1bGVfbWVtb3J5X3Jlc3RvcmVfcm94KG1vZCk7XG4gXHR3aGlsZSAodC0tKVxuIFx0XHRtb2R1bGVfbWVtb3J5X2ZyZWUobW9kLCB0KTtcbi1cdGlmIChjb2RldGFnX3NlY3Rpb25fZm91bmQpXG4tXHRcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI5NTEsOSArMjkwMSw1MSBAQCBzdGF0aWMgYm9vbCBibGFja2xpc3RlZChjb25zdCBjaGFyICptb2R1bGVfbmFtZSlcbiB9XG4gY29yZV9wYXJhbShtb2R1bGVfYmxhY2tsaXN0LCBtb2R1bGVfYmxhY2tsaXN0LCBjaGFycCwgMDQwMCk7XG4gXG4rLypcbisgKiBBbGxvY2F0ZSBjb2RldGFnIHNlY3Rpb25zIHNlcGFyYXRlbHkuIFRoZXkgYXJlIGxvYWRlZCBpbnRvIHByZWFsbG9jYXRlZFxuKyAqIGNvbnRpZ3VvdXMgbWVtb3J5IGJlY2F1c2UgdGhleSBtYXkgc3RpbGwgYmUgdXNlZCBhZnRlciB0aGUgbW9kdWxlIGlzXG4rICogdW5sb2FkZWQuXG4rICpcbisgKiBJZiB0aGUgc2VwYXJhdGUgYWxsb2NhdGlvbiBvdmVyZmxvd3MsIGFsbG9jYXRlIHRoZSBzZWN0aW9uIG5vcm1hbGx5XG4rICogc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBzdGlsbCBiZSBsb2FkZWQuXG4rICovXG4rc3RhdGljIGludCBhbGxvY2F0ZV9jb2RldGFnX3NlY3Rpb25zKHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXG4re1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgXHUwMDNjIGluZm8tXHUwMDNlaGRyLVx1MDAzZWVfc2hudW07IGkrKykge1xuK1x0XHRFbGZfU2hkciAqc2hkciA9IFx1MDAyNmluZm8tXHUwMDNlc2VjaGRyc1tpXTtcbitcdFx0Y29uc3QgY2hhciAqc25hbWUgPSBpbmZvLVx1MDAzZXNlY3N0cmluZ3MgKyBzaGRyLVx1MDAzZXNoX25hbWU7XG4rXHRcdHZvaWQgKmRlc3Q7XG4rXG4rXHRcdGlmICghY29kZXRhZ19uZWVkc19tb2R1bGVfc2VjdGlvbihpbmZvLVx1MDAzZW1vZCwgc25hbWUsIHNoZHItXHUwMDNlc2hfc2l6ZSkpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGRlc3QgPSBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKGluZm8tXHUwMDNlbW9kLCBzbmFtZSwgc2hkci1cdTAwM2VzaF9zaXplLFxuK1x0XHRcdFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKGluZm8tXHUwMDNlbW9kLCBpKSwgc2hkci1cdTAwM2VzaF9hZGRyYWxpZ24pO1xuK1x0XHRpZiAoV0FSTl9PTighZGVzdCkpIHtcbitcdFx0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRpZiAoZGVzdCA9PSBFUlJfUFRSKC1FQUdBSU4pKVxuK1x0XHRcdC8qIEFsbG9jYXRlIHRoZSBzZWN0aW9uIGFzIGEgcmVndWxhciBzZWN0aW9uLiAqL1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoSVNfRVJSKGRlc3QpKSB7XG4rXHRcdFx0Y29kZXRhZ19mcmVlX21vZHVsZV9zZWN0aW9ucyhpbmZvLVx1MDAzZW1vZCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoZGVzdCk7XG4rXHRcdH1cbitcbitcdFx0aWYgKHNoZHItXHUwMDNlc2hfdHlwZSAhPSBTSFRfTk9CSVRTKVxuK1x0XHRcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXHUwMDNlc2hfYWRkciwgc2hkci1cdTAwM2VzaF9zaXplKTtcbitcdFx0c2hkci1cdTAwM2VzaF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZGVzdDtcbitcdFx0c2hkci1cdTAwM2VzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBBbGxvdyBhcmNoZXMgdG8gZnJvYiBzZWN0aW9uIGNvbnRlbnRzIGFuZCBzaXplcy4gICovXG5AQCAtMjk2Nyw4ICsyOTU5LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpsYXlvdXRfYW5kX2FsbG9jYXRlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGludCBmbGFncylcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXG4rXHQvKiBSZXB1cnBvc2Ugc2hfZW50c2l6ZSB0byB0cmFjayB3aGVyZSBlYWNoIHNlY3Rpb24gaXMgYWxsb2NhdGVkLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby1cdTAwM2VoZHItXHUwMDNlZV9zaG51bTsgaSsrKVxuK1x0XHRpbmZvLVx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XG4rXG4gXHQvKiBXZSB3aWxsIGRvIGEgc3BlY2lhbCBhbGxvY2F0aW9uIGZvciBwZXItY3B1IHNlY3Rpb25zIGxhdGVyLiAqL1xuLVx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZmxhZ3MgXHUwMDI2PSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DO1xuK1x0aWYgKGluZm8tXHUwMDNlaW5kZXgucGNwdSlcbitcdFx0aW5mby1cdTAwM2VzZWNoZHJzW2luZm8tXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcbiBcbiBcdC8qXG4gXHQgKiBNYXJrIHJlbGV2YW50IHNlY3Rpb25zIGFzIFNIRl9ST19BRlRFUl9JTklUIHNvIGxheW91dF9zZWN0aW9ucygpIGNhblxuQEAgLTI5NzcsMTggKzI5NzQsMjEgQEAgc3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxuIFx0ICovXG4gXHRtb2R1bGVfbWFya19yb19hZnRlcl9pbml0KGluZm8tXHUwMDNlaGRyLCBpbmZvLVx1MDAzZXNlY2hkcnMsIGluZm8tXHUwMDNlc2Vjc3RyaW5ncyk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHRvdGFsIHNpemVzLCBhbmQgcHV0IG9mZnNldHMgaW4gc2hfZW50c2l6ZS4gIEZvciBub3dcbi1cdCAqIHRoaXMgaXMgZG9uZSBnZW5lcmljYWxseTsgdGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYW55XG4tXHQgKiBzcGVjaWFsIGNhc2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlcy5cbi1cdCAqL1xuK1x0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cbitcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xuIFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kLCBpbmZvKTtcbiBcdGxheW91dF9zeW10YWIoaW5mby1cdTAwM2Vtb2QsIGluZm8pO1xuIFxuIFx0LyogQWxsb2NhdGUgYW5kIG1vdmUgdG8gdGhlIGZpbmFsIHBsYWNlICovXG4gXHRlcnIgPSBtb3ZlX21vZHVsZShpbmZvLVx1MDAzZW1vZCwgaW5mbyk7XG4tXHRpZiAoZXJyKVxuK1x0aWYgKGVycikge1xuK1x0XHRjb2RldGFnX2ZyZWVfbW9kdWxlX3NlY3Rpb25zKGluZm8tXHUwMDNlbW9kKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdH1cbiBcbiBcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xuIFx0bW9kID0gKHZvaWQgKilpbmZvLVx1MDAzZXNlY2hkcnNbaW5mby1cdTAwM2VpbmRleC5tb2RdLnNoX2FkZHI7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggZjMwZWY4ZGQyNGM3MC4uOGYxMzM2OWIzMmVjZCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTg0Myw2ICs4NDMsNTIgQEAgc3RhdGljIGludCB2bV9tb2R1bGVfdGFnc19wb3B1bGF0ZSh2b2lkKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJlbGVhc2VfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCBib29sIHVzZWQpXG4re1xuK1x0TUFfU1RBVEUobWFzLCBcdTAwMjZtb2RfYXJlYV9tdCwgbW9kdWxlX3RhZ3Muc2l6ZSwgbW9kdWxlX3RhZ3Muc2l6ZSk7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdGFydF90YWc7XG4rXHRzdHJ1Y3QgYWxsb2NfdGFnICplbmRfdGFnO1xuK1x0c3RydWN0IG1vZHVsZSAqdmFsO1xuK1xuK1x0bWFzX2xvY2soXHUwMDI2bWFzKTtcbitcdG1hc19mb3JfZWFjaF9yZXYoXHUwMDI2bWFzLCB2YWwsIDApXG4rXHRcdGlmICh2YWwgPT0gbW9kKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0aWYgKCF2YWwpIC8qIG1vZHVsZSBub3QgZm91bmQgKi9cbitcdFx0Z290byBvdXQ7XG4rXG4rXHRpZiAoIXVzZWQpXG4rXHRcdGdvdG8gcmVsZWFzZV9hcmVhO1xuK1xuK1x0c3RhcnRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5pbmRleCk7XG4rXHRlbmRfdGFnID0gKHN0cnVjdCBhbGxvY190YWcgKikobW9kdWxlX3RhZ3Muc3RhcnRfYWRkciArIG1hcy5sYXN0KTtcbitcdGlmICghY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpIHtcbitcdFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuK1xuK1x0XHRmb3IgKHRhZyA9IHN0YXJ0X3RhZzsgdGFnIFx1MDAzYz0gZW5kX3RhZzsgdGFnKyspIHtcbitcdFx0XHRzdHJ1Y3QgYWxsb2NfdGFnX2NvdW50ZXJzIGNvdW50ZXI7XG4rXG4rXHRcdFx0aWYgKCF0YWctXHUwMDNlY291bnRlcnMpXG4rXHRcdFx0XHRjb250aW51ZTtcbitcbitcdFx0XHRjb3VudGVyID0gYWxsb2NfdGFnX3JlYWQodGFnKTtcbitcdFx0XHRwcl9pbmZvKFwiJXM6JXUgbW9kdWxlICVzIGZ1bmM6JXMgaGFzICVsbHUgYWxsb2NhdGVkIGF0IG1vZHVsZSB1bmxvYWRcXG5cIixcbitcdFx0XHRcdHRhZy1cdTAwM2VjdC5maWxlbmFtZSwgdGFnLVx1MDAzZWN0LmxpbmVubywgdGFnLVx1MDAzZWN0Lm1vZG5hbWUsXG4rXHRcdFx0XHR0YWctXHUwMDNlY3QuZnVuY3Rpb24sIGNvdW50ZXIuYnl0ZXMpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR1c2VkID0gZmFsc2U7XG4rXHR9XG4rcmVsZWFzZV9hcmVhOlxuK1x0bWFzX3N0b3JlKFx1MDAyNm1hcywgdXNlZCA/IFx1MDAyNnVubG9hZGVkX21vZCA6IE5VTEwpO1xuK1x0dmFsID0gbWFzX3ByZXZfcmFuZ2UoXHUwMDI2bWFzLCAwKTtcbitcdGlmICh2YWwgPT0gXHUwMDI2cHJlcGVuZF9tb2QpXG4rXHRcdG1hc19zdG9yZShcdTAwMjZtYXMsIE5VTEwpO1xuK291dDpcbitcdG1hc191bmxvY2soXHUwMDI2bWFzKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4gXHRcdFx0XHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXG4ge1xuQEAgLTkxMiwxMCArOTU4LDEyIEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRpbnQgZ3Jvd19yZXM7XG4gXG4gXHRcdG1vZHVsZV90YWdzLnNpemUgPSBvZmZzZXQgKyBzaXplO1xuLVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbitcdFx0aWYgKCF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbiBcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xuLVx0XHRcdHByX3dhcm4oXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbi1cdFx0XHRcdG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cHJfd2Fybl9vbmNlKFwiV2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCIsXG4rXHRcdFx0XHQgICAgIG1vZC1cdTAwM2VuYW1lLCBOUl9VTlVTRURfUEFHRUZMQUdfQklUUyk7XG4rXHRcdFx0cmVsZWFzZV9tb2R1bGVfdGFncyhtb2QsIGZhbHNlKTtcbitcdFx0XHRyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTtcbiBcdFx0fVxuIFxuIFx0XHRncm93X3JlcyA9IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKCk7XG5AQCAtOTIzLDYgKzk3MSw3IEBAIHN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuIFx0XHRcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XG4gXHRcdFx0cHJfZXJyKFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cIixcbiBcdFx0XHQgICAgICAgbW9kLVx1MDAzZW5hbWUpO1xuK1x0XHRcdHJlbGVhc2VfbW9kdWxlX3RhZ3MobW9kLCBmYWxzZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZ3Jvd19yZXMpO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTMwLDUyICs5NzksNiBAQCBzdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcbiBcdHJldHVybiAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgb2Zmc2V0KTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcbi17XG4tXHRNQV9TVEFURShtYXMsIFx1MDAyNm1vZF9hcmVhX210LCBtb2R1bGVfdGFncy5zaXplLCBtb2R1bGVfdGFncy5zaXplKTtcbi1cdHN0cnVjdCBhbGxvY190YWcgKnN0YXJ0X3RhZztcbi1cdHN0cnVjdCBhbGxvY190YWcgKmVuZF90YWc7XG4tXHRzdHJ1Y3QgbW9kdWxlICp2YWw7XG4tXG4tXHRtYXNfbG9jayhcdTAwMjZtYXMpO1xuLVx0bWFzX2Zvcl9lYWNoX3JldihcdTAwMjZtYXMsIHZhbCwgMClcbi1cdFx0aWYgKHZhbCA9PSBtb2QpXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRpZiAoIXZhbCkgLyogbW9kdWxlIG5vdCBmb3VuZCAqL1xuLVx0XHRnb3RvIG91dDtcbi1cbi1cdGlmICghdXNlZClcbi1cdFx0Z290byByZWxlYXNlX2FyZWE7XG4tXG4tXHRzdGFydF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmluZGV4KTtcbi1cdGVuZF90YWcgPSAoc3RydWN0IGFsbG9jX3RhZyAqKShtb2R1bGVfdGFncy5zdGFydF9hZGRyICsgbWFzLmxhc3QpO1xuLVx0aWYgKCFjbGVhbl91bnVzZWRfY291bnRlcnMoc3RhcnRfdGFnLCBlbmRfdGFnKSkge1xuLVx0XHRzdHJ1Y3QgYWxsb2NfdGFnICp0YWc7XG4tXG4tXHRcdGZvciAodGFnID0gc3RhcnRfdGFnOyB0YWcgXHUwMDNjPSBlbmRfdGFnOyB0YWcrKykge1xuLVx0XHRcdHN0cnVjdCBhbGxvY190YWdfY291bnRlcnMgY291bnRlcjtcbi1cbi1cdFx0XHRpZiAoIXRhZy1cdTAwM2Vjb3VudGVycylcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRcdGNvdW50ZXIgPSBhbGxvY190YWdfcmVhZCh0YWcpO1xuLVx0XHRcdHByX2luZm8oXCIlczoldSBtb2R1bGUgJXMgZnVuYzolcyBoYXMgJWxsdSBhbGxvY2F0ZWQgYXQgbW9kdWxlIHVubG9hZFxcblwiLFxuLVx0XHRcdFx0dGFnLVx1MDAzZWN0LmZpbGVuYW1lLCB0YWctXHUwMDNlY3QubGluZW5vLCB0YWctXHUwMDNlY3QubW9kbmFtZSxcbi1cdFx0XHRcdHRhZy1cdTAwM2VjdC5mdW5jdGlvbiwgY291bnRlci5ieXRlcyk7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdHVzZWQgPSBmYWxzZTtcbi1cdH1cbi1yZWxlYXNlX2FyZWE6XG4tXHRtYXNfc3RvcmUoXHUwMDI2bWFzLCB1c2VkID8gXHUwMDI2dW5sb2FkZWRfbW9kIDogTlVMTCk7XG4tXHR2YWwgPSBtYXNfcHJldl9yYW5nZShcdTAwMjZtYXMsIDApO1xuLVx0aWYgKHZhbCA9PSBcdTAwMjZwcmVwZW5kX21vZClcbi1cdFx0bWFzX3N0b3JlKFx1MDAyNm1hcywgTlVMTCk7XG4tb3V0OlxuLVx0bWFzX3VubG9jayhcdTAwMjZtYXMpO1xuLX1cbi1cbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbiB7XG4gXHQvKiBBbGxvY2F0ZSBtb2R1bGUgYWxsb2NfdGFnIHBlcmNwdSBjb3VudGVycyAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MDEuNTE0NDYwODk4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MzA4MDQ2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBpZiBpdCBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgd2hpY2ggd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJ2xsIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIHBhdGNoIGRpZmYgaXRzZWxmLiBJdCdzIHRvdWNoaW5nIG1vZHVsZSBsb2FkaW5nLCBzcGVjaWZpY2FsbHkgYGluY2x1ZGUvbGludXgvbW9kdWxlLmhgLCBga2VybmVsL21vZHVsZS9pbnRlcm5hbC5oYCwgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCwgYW5kIGBtbS9hbGxvY190YWcuY2AuIFRoaXMgc3VnZ2VzdHMgY2hhbmdlcyB0byBob3cgbW9kdWxlcyBhcmUgbG9hZGVkLCByZWxvY2F0ZWQsIGFuZCBwb3RlbnRpYWxseSBtZW1vcnkgaXMgbWFuYWdlZC5cblxuRmlyc3QsIHRoZSBlbnVtIGNoYW5nZS4gQWRkaW5nIGBNT0RfU1RBTkRBTE9ORSA9IC0yYCB0byBgZW51bSBtb2RfbWVtX3R5cGVgIGluIGBpbmNsdWRlL2xpbnV4L21vZHVsZS5oYCBpcyBzdHJhaWdodGZvcndhcmQuIFRoZW4gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgaW4gYGtlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaGAgc2VlbXMgdG8gYmUgYSBkZXJpdmVkIHZhbHVlIGJhc2VkIG9uIHRoYXQgZW51bS4gSXQgbG9va3MgbGlrZSBgU0hfRU5UU0laRV9TVEFOREFMT05FYCBpcyByZWxhdGVkIHRvIGNvZGV0YWcgc2VjdGlvbnMuIEkgd2lsbCBrZWVwIHRoYXQgaW4gbWluZC5cblxuTm93IGZvciB0aGUgbWVhdCBvZiBpdCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBJbnRlcmVzdGluZy4gVGhlIHBhdGNoIGlzIHJlbW92aW5nIGV4Y2VwdGlvbnMgYW5kIGhhbmRsaW5nIHJlbGF0ZWQgdG8gYGluZm9zZWNgIHdpdGhpbiBgYXBwbHlfcmVsb2NhdGlvbnMoKWAuIEFsc28sIGNvZGUgdG8gcmVtb3ZlIGNvZGV0YWcgaGFuZGxpbmcgZnJvbSBib3RoIGBfX2xheW91dF9zZWN0aW9ucygpYCBhbmQgYG1vdmVfbW9kdWxlKClgLiBUaGUgcGF0Y2ggYWxzbyBtb3ZlcyByZXNldHRpbmcgYGluZm8tXHUwMDNlc2VjaGRyc1tpXS5zaF9lbnRzaXplID0gfjBVTDtgIGZyb20gYGxheW91dF9zZWN0aW9ucygpYCB0byBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYC4gVGhlIG5ldyBmdW5jdGlvbiBgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucygpYCBpcyB2ZXJ5IGludGVyZXN0aW5nLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHNlY3Rpb25zLCBjb25kaXRpb25hbGx5IGNhbGxzIGBjb2RldGFnX2FsbG9jX21vZHVsZV9zZWN0aW9uKClgLCBhbmQgY29waWVzIGRhdGEsIHNldHRpbmcgYHNoZHItXHUwMDNlc2hfYWRkcmAgYW5kIGBzaGRyLVx1MDAzZXNoX2VudHNpemVgIHRvIGBTSF9FTlRTSVpFX1NUQU5EQUxPTkVgLiBJIG5lZWQgdG8gaW5zcGVjdCB0aGlzIGZ1bmN0aW9uIGNhcmVmdWxseSB3aXRoIHJlc3BlY3QgdG8gYWxsb2NhdGlvbiBhbmQgY29weSBzZW1hbnRpY3M7IHNwZWNpZmljYWxseSB0aGUgZGF0YSBjb3B5aW5nIGludG8gdGhlIGRlc3QgdmFyaWFibGUuIEZpbmFsbHksIEkgc2VlIHRoYXQgdGhlIGBsYXlvdXRfYW5kX2FsbG9jYXRlKClgIGZ1bmN0aW9uIG5vdyBpbml0aWFsaXplcyBgc2hfZW50c2l6ZWAgdG8gYH4wVUxgIGFuZCBhbHNvIHNldHMgYGluZm8tXHUwMDNlc2VjaGRyc1tpbmZvLVx1MDAzZWluZGV4LnBjcHVdLnNoX2VudHNpemUgPSBTSF9FTlRTSVpFX1NUQU5EQUxPTkU7YCBmb3Igbm9uLXplcm8gYHBjcHVgIGluZGljZXMgYmVmb3JlIGNhbGxpbmcgb3RoZXIgbGF5b3V0IGZ1bmN0aW9ucy5cblxuRmluYWxseSwgaW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhlIHJlb3JkZXJpbmcgb2YgYHJlbGVhc2VfbW9kdWxlX3RhZ3MoKWAgYW5kIGByZXNlcnZlX21vZHVsZV90YWdzKClgIGxvb2tzIGltcG9ydGFudC4gVGhlIGxvZ2ljIGluIGByZXNlcnZlX21vZHVsZV90YWdzKClgIGFyb3VuZCBgdGFnc19hZGRyZXNzYWJsZSgpYCBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gYHNodXRkb3duX21lbV9wcm9maWxpbmcoKWAsIGByZWxlYXNlX21vZHVsZV90YWdzKClgLCBhbmQgYHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKClgIGlzIHdoYXQgSSBuZWVkIHRvIHdhdGNoLiBBbnkgZmFpbHVyZSBzY2VuYXJpb3MgaGVyZSBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZWVwbHkgZXhhbWluZSB0aGUgdXNhZ2Ugb2YgYGluZm8tXHUwMDNlc2VjaGRyc2AgYW5kIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBtYW5hZ2VkLCBlc3BlY2lhbGx5IGFyb3VuZCBgbGF5b3V0X2FuZF9hbGxvY2F0ZSgpYCwgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoKWAgYW5kIHRoZSBjb2RldGFnIHJlbGF0ZWQgY29kZS4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcHBlcmAgb3IgZXF1aXZhbGVudCB0b29scyB0byBzZWFyY2ggZm9yIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMgdG8gZ2V0IGEgZnVsbCBwaWN0dXJlLiBJIHdpbGwgYmUgbG9va2luZyBmb3IgcGF0dGVybnMgdGhhdCBjYW4gbGVhZCB0byBtZW1vcnkgbGVha2FnZSwgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIHN1c3BpY2lvdXMuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGdvaW5nIHRvIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njc4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MDcuOTQ1MjY3ODU4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTMxOTc5NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL21vZHVsZS9tYWluLmM9MjkwMj1jb3JlX3BhcmFtKG1vZHVsZV9ibGFja2xpc3QsIG1vZHVsZV9ibGFja2xpc3QsIGNoYXJwLCAwNDAwKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MTEtICovXFxua2VybmVsL21vZHVsZS9tYWluLmM6MjkxMjpzdGF0aWMgaW50IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTEzLXtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI5NDU9c3RhdGljIHN0cnVjdCBtb2R1bGUgKmxheW91dF9hbmRfYWxsb2NhdGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgaW50IGZsYWdzKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk3Ny1cXHQvKiBBbGxvdyBjb2RldGFnIHNlY3Rpb25zIHRvIGJlIGFsbG9jYXRlZCBzZXBhcmF0ZWx5IGZpcnN0LiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5Nzg6XFx0ZXJyID0gYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhpbmZvKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTc5LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjMwOjEwLjA3NzI2MDk2NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTczNjkyNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNb2R1bGUgUmVsb2NhdGlvbioqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBtb2R1bGUgbGF5b3V0IGFuZCBhbGxvY2F0aW9uLCBhbmQgaG93IG1vZHVsZXMgYXJlIG1vdmVkIGFyb3VuZCBpbiBtZW1vcnkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBjb2RlIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIG1vZHVsZSBtYW5pcHVsYXRpb24gcmVzaWRlcy4gTGV0J3Mgc3RhcnQgd2l0aCBga2VybmVsL21vZHVsZS9tYWluLmNgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIHRoZSBgbGF5b3V0X2FuZF9hbGxvY2F0ZWAgYW5kIGBtb3ZlX21vZHVsZWAgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIGxpa2VseSB3aGVyZSB0aGUgaGVhdnkgbGlmdGluZyBvZiBtb2R1bGUgcmVsb2NhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgaXMgZG9uZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgdGhlIHN5c3RlbSBkZWNpZGVzIHdoZXJlIHRvIHB1dCB0aGUgbW9kdWxlLCBhbmQgcHJlY2lzZWx5IGhvdyBpdCBoYW5kbGVzIHRoZSBkYXRhIHRyYW5zZmVyIHdoZW4gaXQgbmVlZHMgdG8gYmUgcmVwb3NpdGlvbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDY4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MTIuMDUwOTU3MzE0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NzIzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL21vZHVsZS9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk0NSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk0NTpcXHRzdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuMjk0NjpcXHR7XFxuMjk0NzpcXHRcXHRzdHJ1Y3QgbW9kdWxlICptb2Q7XFxuMjk0ODpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4yOTQ5OlxcdFxcdGludCBlcnI7XFxuMjk1MDpcXHRcXG4yOTUxOlxcdFxcdC8qIEFsbG93IGFyY2hlcyB0byBmcm9iIHNlY3Rpb24gY29udGVudHMgYW5kIHNpemVzLiAgKi9cXG4yOTUyOlxcdFxcdGVyciA9IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLFxcbjI5NTM6XFx0XFx0XFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTU0OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NTU6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTU2OlxcdFxcbjI5NTc6XFx0XFx0ZXJyID0gbW9kdWxlX2VuZm9yY2Vfcnd4X3NlY3Rpb25zKGluZm8tXFx1MDAzZWhkciwgaW5mby1cXHUwMDNlc2VjaGRycyxcXG4yOTU4OlxcdFxcdFxcdFxcdFxcdFxcdCAgaW5mby1cXHUwMDNlc2Vjc3RyaW5ncywgaW5mby1cXHUwMDNlbW9kKTtcXG4yOTU5OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI5NjA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTYxOlxcdFxcbjI5NjI6XFx0XFx0LyogUmVwdXJwb3NlIHNoX2VudHNpemUgdG8gdHJhY2sgd2hlcmUgZWFjaCBzZWN0aW9uIGlzIGFsbG9jYXRlZC4gKi9cXG4yOTYzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBpbmZvLVxcdTAwM2VoZHItXFx1MDAzZWVfc2hudW07IGkrKylcXG4yOTY0OlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaV0uc2hfZW50c2l6ZSA9IH4wVUw7XFxuMjk2NTpcXHRcXG4yOTY2OlxcdFxcdC8qIFdlIHdpbGwgZG8gYSBzcGVjaWFsIGFsbG9jYXRpb24gZm9yIHBlci1jcHUgc2VjdGlvbnMgbGF0ZXIuICovXFxuMjk2NzpcXHRcXHRpZiAoaW5mby1cXHUwMDNlaW5kZXgucGNwdSlcXG4yOTY4OlxcdFxcdFxcdGluZm8tXFx1MDAzZXNlY2hkcnNbaW5mby1cXHUwMDNlaW5kZXgucGNwdV0uc2hfZW50c2l6ZSA9IFNIX0VOVFNJWkVfU1RBTkRBTE9ORTtcXG4yOTY5OlxcdFxcbjI5NzA6XFx0XFx0LypcXG4yOTcxOlxcdFxcdCAqIE1hcmsgcmVsZXZhbnQgc2VjdGlvbnMgYXMgU0hGX1JPX0FGVEVSX0lOSVQgc28gbGF5b3V0X3NlY3Rpb25zKCkgY2FuXFxuMjk3MjpcXHRcXHQgKiBwdXQgdGhlbSBpbiB0aGUgcmlnaHQgcGxhY2UuXFxuMjk3MzpcXHRcXHQgKiBOb3RlOiByb19hZnRlcl9pbml0IHNlY3Rpb25zIGFsc28gaGF2ZSBTSEZfe1dSSVRFLEFMTE9DfSBzZXQuXFxuMjk3NDpcXHRcXHQgKi9cXG4yOTc1OlxcdFxcdG1vZHVsZV9tYXJrX3JvX2FmdGVyX2luaXQoaW5mby1cXHUwMDNlaGRyLCBpbmZvLVxcdTAwM2VzZWNoZHJzLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzKTtcXG4yOTc2OlxcdFxcbjI5Nzc6XFx0XFx0LyogQWxsb3cgY29kZXRhZyBzZWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgc2VwYXJhdGVseSBmaXJzdC4gKi9cXG4yOTc4OlxcdFxcdGVyciA9IGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnMoaW5mbyk7XFxuMjk3OTpcXHRcXHRpZiAoZXJyKVxcbjI5ODA6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4yOTgxOlxcdFxcbjI5ODI6XFx0XFx0LyogRGV0ZXJtaW5lIHRvdGFsIHNpemVzIGFuZCBwdXQgb2Zmc2V0cyBpbiBzaF9lbnRzaXplLiAqL1xcbjI5ODM6XFx0XFx0bGF5b3V0X3NlY3Rpb25zKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NDpcXHRcXHRsYXlvdXRfc3ltdGFiKGluZm8tXFx1MDAzZW1vZCwgaW5mbyk7XFxuMjk4NTpcXHRcXG4yOTg2OlxcdFxcdC8qIEFsbG9jYXRlIGFuZCBtb3ZlIHRvIHRoZSBmaW5hbCBwbGFjZSAqL1xcbjI5ODc6XFx0XFx0ZXJyID0gbW92ZV9tb2R1bGUoaW5mby1cXHUwMDNlbW9kLCBpbmZvKTtcXG4yOTg4OlxcdFxcdGlmIChlcnIpIHtcXG4yOTg5OlxcdFxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMoaW5mby1cXHUwMDNlbW9kKTtcXG4yOTkwOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMjk5MTpcXHRcXHR9XFxuMjk5MjpcXHRcXG4yOTkzOlxcdFxcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xcbjI5OTQ6XFx0XFx0bW9kID0gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcXG4yOTk1OlxcdFxcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XFxuMjk5NjpcXHRcXHRjb2RldGFnX21vZHVsZV9yZXBsYWNlZChpbmZvLVxcdTAwM2Vtb2QsIG1vZCk7XFxuMjk5NzpcXHRcXG4yOTk4OlxcdFxcdHJldHVybiBtb2Q7XFxuMjk5OTpcXHR9XFxuMzAwMDpcXHRcXG4zMDAxOlxcdC8qIG1vZCBpcyBubyBsb25nZXIgdmFsaWQgYWZ0ZXIgdGhpcyEgKi9cXG4zMDAyOlxcdHN0YXRpYyB2b2lkIG1vZHVsZV9kZWFsbG9jYXRlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4zMDAzOlxcdHtcXG4zMDA0OlxcdFxcdHBlcmNwdV9tb2RmcmVlKG1vZCk7XFxuMzAwNTpcXHRcXHRtb2R1bGVfYXJjaF9mcmVlaW5nX2luaXQobW9kKTtcXG4zMDA2OlxcdFxcdGNvZGV0YWdfZnJlZV9tb2R1bGVfc2VjdGlvbnMobW9kKTtcXG4zMDA3OlxcdFxcbjMwMDg6XFx0XFx0ZnJlZV9tb2RfbWVtKG1vZCk7XFxuMzAwOTpcXHR9XFxuMzAxMDpcXHRcXG4zMDExOlxcdGludCBfX3dlYWsgbW9kdWxlX2ZpbmFsaXplKGNvbnN0IEVsZl9FaGRyICpoZHIsXFxuMzAxMjpcXHRcXHRcXHRcXHQgICBjb25zdCBFbGZfU2hkciAqc2VjaGRycyxcXG4zMDEzOlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBtb2R1bGUgKm1lKVxcbjMwMTQ6XFx0e1xcbjMwMTU6XFx0XFx0cmV0dXJuIDA7XFxuMzAxNjpcXHR9XFxuMzAxNzpcXHRcXG4zMDE4OlxcdHN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4zMDE5OlxcdHtcXG4zMDIwOlxcdFxcdC8qIFNvcnQgZXhjZXB0aW9uIHRhYmxlIG5vdyByZWxvY2F0aW9ucyBhcmUgZG9uZS4gKi9cXG4zMDIxOlxcdFxcdHNvcnRfZXh0YWJsZShtb2QtXFx1MDAzZWV4dGFibGUsIG1vZC1cXHUwMDNlZXh0YWJsZSArIG1vZC1cXHUwMDNlbnVtX2V4ZW50cmllcyk7XFxuMzAyMjpcXHRcXG4zMDIzOlxcdFxcdC8qIENvcHkgcmVsb2NhdGVkIHBlcmNwdSBhcmVhIG92ZXIuICovXFxuMzAyNDpcXHRcXHRwZXJjcHVfbW9kY29weShtb2QsICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5wY3B1XS5zaF9hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDozMDoxMi4wNTM5MzY1NTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzgzMzgwNTY4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29kZSBUYWcgU2VjdGlvbiBBbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGl0ZXJhdGluZyB0aHJvdWdoIHNlY3Rpb24gaGVhZGVycywgc3RhcnRpbmcgZnJvbSB0aGUgc2Vjb25kIG9uZSAoaW5kZXggMSkuIFRoZSBnb2FsIHNlZW1zIHRvIGJlIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBzZWN0aW9ucyB0aGF0IG1lZXQgYSBzcGVjaWZpYyBcImNvZGV0YWdcIiBjcml0ZXJpYSB3aXRoaW4gYSBtb2R1bGUuIFRoZSBmdW5jdGlvbiBpcyBnb2luZyB0aHJvdWdoIHRoZSBzZWN0aW9uIGhlYWRlcnMgYW5kIGl0IGxvb2tzIGxpa2UgYGNvZGV0YWdfbmVlZHNfbW9kdWxlX3NlY3Rpb25gIGRlY2lkZXMgd2hpY2ggc2VjdGlvbnMgc2hvdWxkIGJlIG1vdmVkIG9yIG1hbmFnZWQgZGlmZmVyZW50bHkuXG5cblRoZSBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAgY2FsbCBpcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgdG8gaGFuZGxlIHRoZSBhY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24sIHBvdGVudGlhbGx5IHByZXBlbmRpbmcgc29tZXRoaW5nIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUsIGhhbmRsaW5nIGFsaWdubWVudCBhbmQgdGhlIHNlY3Rpb24ncyBzaXplLiBUaGVyZSdzIGVycm9yIGhhbmRsaW5nIHRvIG1hbmFnZSBhbGxvY2F0aW9uIGZhaWx1cmUgdXNpbmcgYFdBUk5fT05gLCBhbmQgc29tZSBmYWxsYmFjayBsb2dpYyBpbnZvbHZpbmcgYC1FQUdBSU5gIHRvIHRyZWF0IGl0IGxpa2UgYSByZWd1bGFyIHNlY3Rpb24sIGFuZCBnZW5lcmFsIGVycm9yIGhhbmRsaW5nLCBmcmVlaW5nIGFsbG9jYXRpb25zIG9uIGZhaWx1cmUuXG5cbkZpbmFsbHksIGlmIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bCBhbmQgdGhlIHNlY3Rpb24gaXMgKm5vdCogYSBuby1iaXRzIHNlY3Rpb24sIHdlIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgb3JpZ2luYWwgc2VjdGlvbiBhZGRyZXNzIChgc2hkci1cdTAwM2VzaF9hZGRyYCkgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBkZXN0aW5hdGlvbi4gVGhlIGBzaGRyLVx1MDAzZXNoX2FkZHJgIGlzIHRoZW4gdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGxvY2F0aW9uLCBhbmQgdGhlIHNlY3Rpb24gc2l6ZSBpcyBzZXQuXG5cbk5vdywgYSBrZXkgcXVlc3Rpb24gaXMgaG93IGBzaGRyLVx1MDAzZXNoX2FkZHJgIGlzICppbml0aWFsbHkqIHNldC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhhdCB2YWx1ZSBjb21lcyBmcm9tIGJlZm9yZSB3ZSByZWFjaCB0aGlzIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBoYXBwZW5zIGluIGBsYXlvdXRfYW5kX2FsbG9jYXRlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHNlY3Rpb24gYWRkcmVzc2VzIGFyZSBpbml0aWFsbHkgc2V0IHdpdGhpbiB0aGUgbW9kdWxlIGxvYWRpbmcgcHJvY2Vzcy4gSSdsbCBzZWFyY2ggZm9yIHVzZXMgb2YgdGhlIGBzZXR1cF9sb2FkX2luZm9gIGZ1bmN0aW9uIG9yIHRoZSBgbG9hZF9pbmZvYCBzdHJ1Y3R1cmUgaXRzZWxmLiBVbmRlcnN0YW5kaW5nIGhvdyBgc2hkci1cdTAwM2VzaF9hZGRyYCBnZXRzIGl0cyBpbml0aWFsIHZhbHVlIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk1OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDAwOjMwOjE1Ljg4Nzc0NDc2NVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1MTY2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvbW9kdWxlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM9MTEzPXZvaWQgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTQxLVxcdC8qIEFwcGVuZCByb29tIGZvciBjb3JlIHN5bWJvbHMgYXQgZW5kIG9mIGNvcmUgcGFydC4gKi9cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MTQyOlxcdGluZm8tXFx1MDAzZXN5bW9mZnMgPSBBTElHTihtb2RfbWVtX2RhdGEtXFx1MDAzZXNpemUsIHN5bXNlY3QtXFx1MDAzZXNoX2FkZHJhbGlnbiA/OiAxKTtcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTQzLVxcdGluZm8tXFx1MDAzZXN0cm9mZnMgPSBtb2RfbWVtX2RhdGEtXFx1MDAzZXNpemUgPSBpbmZvLVxcdTAwM2VzeW1vZmZzICsgbmRzdCAqIHNpemVvZihFbGZfU3ltKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0xNzA9dm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE4My1cXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmM6MTg0OlxcdGthbGxzeW1zLVxcdTAwM2VzeW10YWIgPSAodm9pZCAqKXN5bXNlYy1cXHUwMDNlc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMTg1LVxcdGthbGxzeW1zLVxcdTAwM2VudW1fc3ltdGFiID0gc3ltc2VjLVxcdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pO1xcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0xODYtXFx0LyogTWFrZSBzdXJlIHdlIGdldCBwZXJtYW5lbnQgc3RydGFiOiBkb24ndCB1c2UgaW5mby1cXHUwMDNlc3RydGFiLiAqL1xcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYzoxODc6XFx0a2FsbHN5bXMtXFx1MDAzZXN0cnRhYiA9ICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5zdHJdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jLTE4OC1cXHRrYWxsc3ltcy1cXHUwMDNldHlwZXRhYiA9IGluaXRfZGF0YV9iYXNlICsgaW5mby1cXHUwMDNlaW5pdF90eXBlb2ZmcztcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYz0yMjU9dm9pZCBpbml0X2J1aWxkX2lkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUva2FsbHN5bXMuYy0yMzItXFx0XFx0aWYgKCFzZWN0X2VtcHR5KHNlY2hkcikgXFx1MDAyNlxcdTAwMjYgc2VjaGRyLVxcdTAwM2VzaF90eXBlID09IFNIVF9OT1RFIFxcdTAwMjZcXHUwMDI2XFxua2VybmVsL21vZHVsZS9rYWxsc3ltcy5jOjIzMzpcXHRcXHQgICAgIWJ1aWxkX2lkX3BhcnNlX2J1Zigodm9pZCAqKXNlY2hkci1cXHUwMDNlc2hfYWRkciwgbW9kLVxcdTAwM2VidWlsZF9pZCxcXG5rZXJuZWwvbW9kdWxlL2thbGxzeW1zLmMtMjM0LVxcdFxcdFxcdFxcdFxcdHNlY2hkci1cXHUwMDNlc2hfc2l6ZSkpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jPTE4PWludCBjb3B5X21vZHVsZV9lbGYoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9saXZlcGF0Y2guYy01My1cXHQgKiBGb3IgbGl2ZXBhdGNoIG1vZHVsZXMsIGNvcmVfa2FsbHN5bXMuc3ltdGFiIGlzIGEgY29tcGxldGVcXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jOjU0OlxcdCAqIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHN5bWJvbCB0YWJsZS4gQWRqdXN0IHNoX2FkZHIgdG8gcG9pbnRcXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTU1LVxcdCAqIHRvIGNvcmVfa2FsbHN5bXMuc3ltdGFiIHNpbmNlIHRoZSBjb3B5IG9mIHRoZSBzeW10YWIgaW4gbW9kdWxlXFxuLS1cXG5rZXJuZWwvbW9kdWxlL2xpdmVwYXRjaC5jLTU3LVxcdCAqL1xcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmM6NTg6XFx0bW9kLVxcdTAwM2VrbHBfaW5mby1cXHUwMDNlc2VjaGRyc1tzeW1uZHhdLnNoX2FkZHIgPSAodW5zaWduZWQgbG9uZyltb2QtXFx1MDAzZWNvcmVfa2FsbHN5bXMuc3ltdGFiO1xcbmtlcm5lbC9tb2R1bGUvbGl2ZXBhdGNoLmMtNTktXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yODQ9c3RhdGljIHZvaWQgKnNlY3Rpb25fYWRkcihjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBjb25zdCBjaGFyICpuYW1lKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4NS17XFxua2VybmVsL21vZHVsZS9tYWluLmM6Mjg2OlxcdC8qIFNlY3Rpb24gMCBoYXMgc2hfYWRkciAwLiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4NzpcXHRyZXR1cm4gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2ZpbmRfc2VjKGluZm8sIG5hbWUpXS5zaF9hZGRyO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4OC19XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTE9c3RhdGljIHZvaWQgKnNlY3Rpb25fb2Jqcyhjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjk3LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5ODpcXHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMCBhbmQgc2hfc2l6ZSAwLiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5OS1cXHQqbnVtID0gaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDA6XFx0cmV0dXJuICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAxLX1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTMyMD1zdGF0aWMgX19tYXliZV91bnVzZWQgdm9pZCAqYW55X3NlY3Rpb25fb2Jqcyhjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzI2LVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjMyNzpcXHQvKiBTZWN0aW9uIDAgaGFzIHNoX2FkZHIgMCBhbmQgc2hfc2l6ZSAwLiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMyOC1cXHQqbnVtID0gaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX3NpemUgLyBvYmplY3Rfc2l6ZTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMjk6XFx0cmV0dXJuICh2b2lkICopaW5mby1cXHUwMDNlc2VjaGRyc1tzZWNdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMzMwLX1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTQ1NT1zdGF0aWMgaW50IHBlcmNwdV9tb2RhbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy00NTctXFx0RWxmX1NoZHIgKnBjcHVzZWMgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5wY3B1XTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzo0NTg6XFx0dW5zaWduZWQgbG9uZyBhbGlnbiA9IHBjcHVzZWMtXFx1MDAzZXNoX2FkZHJhbGlnbjtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy00NTktXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xMTM4PXN0YXRpYyBjaGFyICpnZXRfbmV4dF9tb2RpbmZvKGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKnRhZyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDctXFx0ICogZ2V0X21vZGluZm8oKSBjYWxscyBtYWRlIGJlZm9yZSByZXdyaXRlX3NlY3Rpb25faGVhZGVycygpXFxua2VybmVsL21vZHVsZS9tYWluLmM6MTE0ODpcXHQgKiBtdXN0IHVzZSBzaF9vZmZzZXQsIGFzIHNoX2FkZHIgaXNuJ3Qgc2V0IVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTExNDktXFx0ICovXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0xNTI5PXN0YXRpYyBpbnQgc2ltcGxpZnlfc3ltYm9scyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTMxLVxcdEVsZl9TaGRyICpzeW1zZWMgPSBcXHUwMDI2aW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5zeW1dO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjE1MzI6XFx0RWxmX1N5bSAqc3ltID0gKHZvaWQgKilzeW1zZWMtXFx1MDAzZXNoX2FkZHI7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMTUzMy1cXHR1bnNpZ25lZCBsb25nIHNlY2Jhc2U7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTk3LVxcdFxcdFxcdGVsc2VcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxNTk4OlxcdFxcdFxcdFxcdHNlY2Jhc2UgPSBpbmZvLVxcdTAwM2VzZWNoZHJzW3N5bVtpXS5zdF9zaG5keF0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0xNTk5LVxcdFxcdFxcdHN5bVtpXS5zdF92YWx1ZSArPSBzZWNiYXNlO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9MTY1MD1sb25nIG1vZHVsZV9nZXRfb2Zmc2V0X2FuZF90eXBlKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE2NTYtXFx0bW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSArPSBhcmNoX21vZF9zZWN0aW9uX3ByZXBlbmQobW9kLCBzZWN0aW9uKTtcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxNjU3OlxcdG9mZnNldCA9IEFMSUdOKG1vZC1cXHUwMDNlbWVtW3R5cGVdLnNpemUsIHNlY2hkci1cXHUwMDNlc2hfYWRkcmFsaWduID86IDEpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE2NTgtXFx0bW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IG9mZnNldCArIHNlY2hkci1cXHUwMDNlc2hfc2l6ZTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTE5MTU9c3RhdGljIGludCBlbGZfdmFsaWRpdHlfY2FjaGVfc2VjaGRycyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMTk1MC1cXHQgICAgfHwgc2VjaGRyc1swXS5zaF9zaXplICE9IDBcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoxOTUxOlxcdCAgICB8fCBzZWNoZHJzWzBdLnNoX2FkZHIgIT0gMCkge1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTE5NTItXFx0XFx0cHJfZXJyKFxcXCJFTEYgU3BlYyB2aW9sYXRpb246IHNlY3Rpb24gMCB0eXBlKCVkKSE9U0hfTlVMTCBvciBub24temVybyBsZW4gb3IgYWRkclxcXFxuXFxcIixcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI1MTY9c3RhdGljIGludCByZXdyaXRlX3NlY3Rpb25faGVhZGVycyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yNTIwLVxcdC8qIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlLCBidXQgbGV0J3MgYmUgc3VyZS4gKi9cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNTIxOlxcdGluZm8tXFx1MDAzZXNlY2hkcnNbMF0uc2hfYWRkciA9IDA7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjUyMi1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjYtXFx0XFx0LypcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyNTI3OlxcdFxcdCAqIE1hcmsgYWxsIHNlY3Rpb25zIHNoX2FkZHIgd2l0aCB0aGVpciBhZGRyZXNzIGluIHRoZVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjgtXFx0XFx0ICogdGVtcG9yYXJ5IGltYWdlLlxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI1MjktXFx0XFx0ICovXFxua2VybmVsL21vZHVsZS9tYWluLmM6MjUzMDpcXHRcXHRzaGRyLVxcdTAwM2VzaF9hZGRyID0gKHNpemVfdClpbmZvLVxcdTAwM2VoZHIgKyBzaGRyLVxcdTAwM2VzaF9vZmZzZXQ7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjUzMS1cXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jPTI3NzM9c3RhdGljIGludCBtb3ZlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODE1LVxcdFxcdFxcdH1cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODE2OlxcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI4MTctXFx0XFx0fVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjgyMy1cXHRcXHQgKi9cXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyODI0OlxcdFxcdHNoZHItXFx1MDAzZXNoX2FkZHIgPSAodW5zaWduZWQgbG9uZylkZXN0O1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI4MjU6XFx0XFx0cHJfZGVidWcoXFxcIlxcXFx0MHglbHggMHglLjhseCAlc1xcXFxuXFxcIiwgKGxvbmcpc2hkci1cXHUwMDNlc2hfYWRkcixcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yODI2LVxcdFxcdFxcdCAobG9uZylzaGRyLVxcdTAwM2VzaF9zaXplLCBpbmZvLVxcdTAwM2VzZWNzdHJpbmdzICsgc2hkci1cXHUwMDNlc2hfbmFtZSk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0yOTEyPXN0YXRpYyBpbnQgYWxsb2NhdGVfY29kZXRhZ19zZWN0aW9ucyhzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKVxcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyMi1cXHRcXHRkZXN0ID0gY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbihpbmZvLVxcdTAwM2Vtb2QsIHNuYW1lLCBzaGRyLVxcdTAwM2VzaF9zaXplLFxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5MjM6XFx0XFx0XFx0XFx0YXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKGluZm8tXFx1MDAzZW1vZCwgaSksIHNoZHItXFx1MDAzZXNoX2FkZHJhbGlnbik7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkyNC1cXHRcXHRpZiAoV0FSTl9PTighZGVzdCkpIHtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTI5MzYtXFx0XFx0aWYgKHNoZHItXFx1MDAzZXNoX3R5cGUgIT0gU0hUX05PQklUUylcXG5rZXJuZWwvbW9kdWxlL21haW4uYzoyOTM3OlxcdFxcdFxcdG1lbWNweShkZXN0LCAodm9pZCAqKXNoZHItXFx1MDAzZXNoX2FkZHIsIHNoZHItXFx1MDAzZXNoX3NpemUpO1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5Mzg6XFx0XFx0c2hkci1cXHUwMDNlc2hfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRlc3Q7XFxua2VybmVsL21vZHVsZS9tYWluLmMtMjkzOS1cXHRcXHRzaGRyLVxcdTAwM2VzaF9lbnRzaXplID0gU0hfRU5UU0laRV9TVEFOREFMT05FO1xcbi0tXFxua2VybmVsL21vZHVsZS9tYWluLmM9Mjk0NT1zdGF0aWMgc3RydWN0IG1vZHVsZSAqbGF5b3V0X2FuZF9hbGxvY2F0ZShzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLCBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTkzLVxcdC8qIE1vZHVsZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXRzIGZpbmFsIHBsYWNlIG5vdzogcmV0dXJuIGl0LiAqL1xcbmtlcm5lbC9tb2R1bGUvbWFpbi5jOjI5OTQ6XFx0bW9kID0gKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4Lm1vZF0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL21haW4uYy0yOTk1LVxcdGttZW1sZWFrX2xvYWRfbW9kdWxlKG1vZCwgaW5mbyk7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL21haW4uYz0zMDE4PXN0YXRpYyBpbnQgcG9zdF9yZWxvY2F0aW9uKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTMwMjMtXFx0LyogQ29weSByZWxvY2F0ZWQgcGVyY3B1IGFyZWEgb3Zlci4gKi9cXG5rZXJuZWwvbW9kdWxlL21haW4uYzozMDI0OlxcdHBlcmNwdV9tb2Rjb3B5KG1vZCwgKHZvaWQgKilpbmZvLVxcdTAwM2VzZWNoZHJzW2luZm8tXFx1MDAzZWluZGV4LnBjcHVdLnNoX2FkZHIsXFxua2VybmVsL21vZHVsZS9tYWluLmMtMzAyNS1cXHRcXHQgICAgICAgaW5mby1cXHUwMDNlc2VjaGRyc1tpbmZvLVxcdTAwM2VpbmRleC5wY3B1XS5zaF9zaXplKTtcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYz02NT1zdGF0aWMgaW50IGFkZF9zZWN0X2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbylcXG4tLVxcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYy0xMDQtXFx0XFx0c2F0dHItXFx1MDAzZXJlYWQgPSBtb2R1bGVfc2VjdF9yZWFkO1xcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYzoxMDU6XFx0XFx0c2F0dHItXFx1MDAzZXByaXZhdGUgPSAodm9pZCAqKXNlYy1cXHUwMDNlc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMTA2LVxcdFxcdHNhdHRyLVxcdTAwM2VzaXplID0gTU9EVUxFX1NFQ1RfUkVBRF9TSVpFO1xcbi0tXFxua2VybmVsL21vZHVsZS9zeXNmcy5jPTE1MT1zdGF0aWMgaW50IGFkZF9ub3Rlc19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8gKmluZm8pXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMTkwLVxcdFxcdFxcdG5hdHRyLVxcdTAwM2VzaXplID0gaW5mby1cXHUwMDNlc2VjaGRyc1tpXS5zaF9zaXplO1xcbmtlcm5lbC9tb2R1bGUvc3lzZnMuYzoxOTE6XFx0XFx0XFx0bmF0dHItXFx1MDAzZXByaXZhdGUgPSAodm9pZCAqKWluZm8tXFx1MDAzZXNlY2hkcnNbaV0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL3N5c2ZzLmMtMTkyLVxcdFxcdFxcdG5hdHRyLVxcdTAwM2VyZWFkID0gc3lzZnNfYmluX2F0dHJfc2ltcGxlX3JlYWQ7XFxuLS1cXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYz0xMz1pbnQgY2hlY2tfdmVyc2lvbihjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtNDctXFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmM6NDg6XFx0dmVyc2lvbnMgPSAodm9pZCAqKXNlY2hkcnNbdmVyc2luZGV4XS5zaF9hZGRyO1xcbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jLTQ5LVxcdG51bV92ZXJzaW9ucyA9IHNlY2hkcnNbdmVyc2luZGV4XS5zaF9zaXplXFxuLS1cXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYz0xMDc9dm9pZCBtb2R2ZXJzaW9uX2V4dF9zdGFydChjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLFxcbi0tXFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtMTIyLVxcbmtlcm5lbC9tb2R1bGUvdmVyc2lvbi5jOjEyMzpcXHRzdGFydC1cXHUwMDNlY3JjID0gKGNvbnN0IHUzMiAqKXNlY2hkcnNbY3JjX2lkeF0uc2hfYWRkcjtcXG5rZXJuZWwvbW9kdWxlL3ZlcnNpb24uYzoxMjQ6XFx0c3RhcnQtXFx1MDAzZW5hbWUgPSAoY29uc3QgY2hhciAqKXNlY2hkcnNbbmFtZV9pZHhdLnNoX2FkZHI7XFxua2VybmVsL21vZHVsZS92ZXJzaW9uLmMtMTI1LVxcdHN0YXJ0LVxcdTAwM2VyZW1haW5pbmcgPSBzZWNoZHJzW2NyY19pZHhdLnNoX3NpemUgLyBzaXplb2YoKnN0YXJ0LVxcdTAwM2VjcmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QwMDozMDoxNS45NjMyNjcxODNaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAyMDkyNzM5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTW9kdWxlIExvYWRpbmcgYW5kIEtNU0FOIERldGVybWluYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBjZW50ZXJzIG9uIGhvdyB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBtb2R1bGUgbG9hZGluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHNlY3Rpb25zIGRlc2lnbmF0ZWQgYXMgXCJzdGFuZGFsb25lLFwiIHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZSB0YWcgc2VjdGlvbnMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIGFwcGVhcnMgaW4gYGtlcm5lbC9tb2R1bGUvbWFpbi5jYCBhbmQgcmVsYXRlcyB0byB0aGUgRUxGIHNlY3Rpb24gbGF5b3V0IGFuZCBhbGxvY2F0aW9uLiBUaGUgaW50ZW50aW9uIGlzIHRvIGhhbmRsZSB0aGVzZSBzdGFuZGFsb25lIHNlY3Rpb25zIHNlcGFyYXRlbHksIHBvdGVudGlhbGx5IGFsbG9jYXRpbmcgdGhlbSBpbnRvIGRlZGljYXRlZCBtZW1vcnkgcmVnaW9ucyByYXRoZXIgdGhhbiBwbGFjaW5nIHRoZW0gd2l0aGluIHRoZSBtYWluIG1vZHVsZSBtZW1vcnkgYXJlYS4gVGhpcyBpbnZvbHZlcyBhbiBpbnRlcmVzdGluZyBkYW5jZSB3aXRoIGBzaF9lbnRzaXplYCBiZWluZyBzZXQgdG8gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgYW5kIHRoZW4gdGhlIHN1YnNlcXVlbnQgc3RlcHMgYmFzZWQgb24gdGhhdCBzZXR0aW5nLlxuXG5UaGUgcHJvY2VzcyBraWNrcyBvZmYgd2l0aCBgcmV3cml0ZV9zZWN0aW9uX2hlYWRlcnNgIHdoaWNoLCBhcyBleHBlY3RlZCwgc2V0cyBgc2hfYWRkcmAgYmFzZWQgb24gdGhlIHNlY3Rpb24ncyBvZmZzZXQgaW50byB0aGUgaW5pdGlhbCBtb2R1bGUgaW1hZ2UuIFRoZW4sIGBsYXlvdXRfYW5kX2FsbG9jYXRlYCBpcyBjYWxsZWQuIEhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgbG9naWMgaW4gYGFsbG9jYXRlX2NvZGV0YWdfc2VjdGlvbnNgIGF0dGVtcHRzIHRvIGFsbG9jYXRlIGNvZGV0YWcgc2VjdGlvbnMgc2VwYXJhdGVseSB1c2luZyBgY29kZXRhZ19hbGxvY19tb2R1bGVfc2VjdGlvbmAuIElmIHN1Y2Nlc3NmdWwsIHRoZSBkYXRhIGlzIGNvcGllZCB1c2luZyBgbWVtY3B5YC4gQ3J1Y2lhbGx5LCBpZiB0aGlzIGFsbG9jYXRpb24gZmFpbHMgKHJldHVybmluZyBgLUVBR0FJTmApLCB0aGUgc2VjdGlvbiBpcyAqbm90KiBtYXJrZWQgYXMgc3RhbmRhbG9uZSwgd2hpY2ggbWVhbnMgYGxheW91dF9zZWN0aW9uc2Agd2lsbCBsYXkgaXQgb3V0IGluIHRoZSBub3JtYWwgbW9kdWxlIG1lbW9yeS4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludCB0byBjaGVjay4gYGxheW91dF9zZWN0aW9uc2Agc3Vic2VxdWVudGx5IHNraXBzIHN0YW5kYWxvbmUgc2VjdGlvbnMsIG1lYW5pbmcgdGhvc2UgYXJlICpub3QqIGhhbmRsZWQgYnkgdGhlIGdlbmVyYWwgbGF5b3V0IGxvZ2ljLiBBZnRlciBzZWN0aW9uIGxheW91dCBpcyBkb25lLCBgbW92ZV9tb2R1bGVgIGlzIGNhbGxlZCwgYW5kLCBhZ2Fpbiwgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgc2tpcHBlZC4gVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBsYWlkIG91dCBpbiB0aGUgbm9ybWFsIG1vZHVsZSBtZW1vcnkgYXJlIGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hbCBFTEYgYnVmZmVyLlxuXG5NeSBtaW5kIHRoZW4gc2hpZnRzIHRvIGBhcHBseV9yZWxvY2F0aW9ucygpYC4gVGhlIGhpc3RvcmljYWwgaGFuZGxpbmcgb2YgdGhlIGBwY3B1YCBzZWN0aW9uIGlzIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbW9zdCBldmlkZW50LiBCZWZvcmUsIHRoZSBgcGNwdWAgc2VjdGlvbiB3YXMgc3BlY2lhbCwgYW5kIGl0cyBgU0hGX0FMTE9DYCBmbGFnIHdhcyBzdHJpcHBlZCwgd2hpY2ggaXMgd2h5IGl0IHdhcyBoYW5kbGVkIGluIGEgZGlmZmVyZW50IG1hbm5lciB3aXRoIHJlbG9jYXRpb25zIGFwcGxpZWQgdG8gdGhlIGluaXRpYWwgRUxGIHRlbXBsYXRlIGFuZCB0aGVuIGNvcGllZC4gVGhpcyBwYXRjaCwgaG93ZXZlciwgbWFpbnRhaW5zIHRoZSBgU0hGX0FMTE9DYCBmbGFnIGZvciB0aGUgYHBjcHVgIHNlY3Rpb24sIGJ1dCBpdCBpcyB0cmVhdGVkIGxpa2UgYW55IG90aGVyIHN0YW5kYWxvbmUgc2VjdGlvbi4gVGhlIGBzaF9lbnRzaXplYCBiZWluZyBzZXQgdG8gYFNIX0VOVFNJWkVfU1RBTkRBTE9ORWAgZWZmZWN0aXZlbHkgZmxhZ3MgaXQgZm9yIHNlcGFyYXRlIGhhbmRsaW5nIGFuZCBpcyB0aGVuIHByb3Blcmx5IHJlbG9jYXRlZC5cblxuVGhlIGFuYWx5c2lzIG9mIHRoZSBgYWxsb2NfdGFnLmNgIGNoYW5nZXMgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGV5IGludm9sdmUgZXJyb3IgaGFuZGxpbmcgaW4gdGFnIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSBhcm91bmQgZmFpbHVyZXMgaW4gYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGFuZCBgdm1fbW9kdWxlX3RhZ3NfcG9wdWxhdGVgLlxuXG5Ob3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcz8gTGV0J3MgZ28gdGhyb3VnaCB0aGUgY2hlY2tsaXN0LiBBZnRlciBhIGRldGFpbGVkIHJldmlldywgdGhlIGluaXRpYWwgRUxGIG1vZHVsZSBpbWFnZSAoYGluZm8tXHUwMDNlaGRyICsgc2hkci1cdTAwM2VzaF9vZmZzZXRgKSBpcyBhbHdheXMgdmFsaWQgbWVtb3J5LiBTZWN0aW9uIGRhdGEgaXMgY29waWVkIHVzaW5nIGBtZW1jcHlgIGZyb20gaW5pdGlhbGl6ZWQgRUxGIGltYWdlIG1lbW9yeSwgYW5kIG5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXIgc3BhY2UgYXJlIHByZXNlbnQuIE5vIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBhbmQgdGhlIHN0cnVjdHVyZXMgYXJlIGFsd2F5cyBwcm9wZXJseSBpbml0aWFsaXplZC4gSW4gc2hvcnQsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyByZWFkLCB3cml0dGVuLCBvciBjb3BpZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHZ1bG5lcmFiaWxpdGllcy4gQW55IG1lbW9yeSBlcnJvcnMgdGhhdCBhcmlzZSBoZXJlIChvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcywgbWVtb3J5IGxlYWtzLCBldGMuKSB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cbkdpdmVuIHRoaXMgdGhvcm91Z2ggYW5hbHlzaXMsIGFuZCBiYXNlZCBvbiB0aGUgS01TQU4gY3JpdGVyaWEsIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGZsYWcgdGhpcyBhcyBuZWVkaW5nIEtNU0FOLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBvZiB0aGUgdnVsbmVyYWJpbGl0aWVzIHRoYXQgS01TQU4gaXMgZGVzaWduZWQgdG8gY2F0Y2gsIHN1Y2ggYXMgdW5pbml0aWFsaXplZCBrZXJuZWwtdG8tdXNlciBzcGFjZSBkYXRhIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhpcyByZWFsbHkgYm9pbHMgZG93biB0bzogdGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyBtb2R1bGUgbG9hZGluZy4gSXQgY2hhbmdlcyBob3cgc3RhbmRhbG9uZSBzZWN0aW9ucyBhcmUgaGFuZGxlZCBkdXJpbmcgbW9kdWxlIGxvYWRpbmcuIE1lbW9yeSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgbG9hZGVkIEVMRiBtb2R1bGUgaW1hZ2UuIEFueSBwb3RlbnRpYWwgYnVncyBhcmUgc3RhbmRhcmQgbWVtb3J5IGlzc3Vlcywgd2hpY2ggd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4uIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg0LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMDA6MzA6MjYuMTcyNTQ0MjQ2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXFxuXFxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBzZWN0aW9uIGxheW91dHMsIHJlbG9jYXRpb25zLCBvciBzZXBhcmF0ZSBtZW1vcnkgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBzZWN0aW9uIHJlYWRzL3dyaXRlcywgYnVmZmVyIG92ZXJmbG93cywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIGFkZHJlc3NhYmxlIGVycm9ycyB0aGF0IGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEVMRiBzZWN0aW9uIGxheW91dCBhbmQgYWxsb2NhdGlvbiBsb2dpYyBmb3Igc3RhbmRhbG9uZSBtb2R1bGUgc2VjdGlvbnMgKHN1Y2ggYXMgcGVyLUNQVSBzZWN0aW9ucyBhbmQgY29kZXRhZy9hbGxvY190YWcgc2VjdGlvbnMpIGR1cmluZyBtb2R1bGUgbG9hZGluZyBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgIGFuZCBhZGp1c3RzIGVycm9yIGhhbmRsaW5nIGluIGBtbS9hbGxvY190YWcuY2AuXFxuXFxuS01TQU4gdnMgS0FTQU4gYW5hbHlzaXM6XFxuLSBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGRvZXMgbm90IGxlYXZlIHN0cnVjdHVyZSBwYWRkaW5ncyB1bmluaXRpYWxpemVkLCBkb2VzIG5vdCBleHBvc2UgZGF0YSB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBzZWN0aW9uIGRhdGEgY29waWVkIHZpYSBgbWVtY3B5KClgIG9yaWdpbmF0ZXMgZnJvbSBhbHJlYWR5LWxvYWRlZCBFTEYgaW1hZ2UgYnVmZmVycy5cXG4tIEFueSBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBzZWN0aW9uIGxheW91dHMsIHJlbG9jYXRpb25zLCBvciBzZXBhcmF0ZSBtZW1vcnkgYWxsb2NhdGlvbnMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBzZWN0aW9uIHJlYWRzL3dyaXRlcywgYnVmZmVyIG92ZXJmbG93cywgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucykgYXJlIGFkZHJlc3NhYmxlIGVycm9ycyB0aGF0IGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfl745[1] Phase: Succeeded StartedAt: 2026-09-03 00:30:38 +0000 UTC FinishedAt: 2026-09-03 00:30:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 00:30:38 +0000 UTC FinishedAt: 2026-09-03 00:30:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2] Phase: Succeeded StartedAt: 2026-09-03 00:30:38 +0000 UTC FinishedAt: 2026-09-03 04:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 00:30:38 +0000 UTC FinishedAt: 2026-09-03 04:15:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 00:30:38 +0000 UTC FinishedAt: 2026-09-03 00:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 00:30:38 +0000 UTC FinishedAt: 2026-09-03 00:30:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowfl745/series-workflowfl745-convert-artifact-11737667/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 00:30:48 +0000 UTC FinishedAt: 2026-09-03 00:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 00:30:48 +0000 UTC FinishedAt: 2026-09-03 00:49:09 +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:*d9cea0a8-b2c3-4998-bf87-722c569b5ffe,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-workflowfl745/series-workflowfl745-convert-artifact-11737667/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": "2a8c6215-7648-416d-b19e-093025382827", "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-workflowfl745/series-workflowfl745-build-action-772183217/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 00:30:48 +0000 UTC FinishedAt: 2026-09-03 00:48:59 +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:*d9cea0a8-b2c3-4998-bf87-722c569b5ffe,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-workflowfl745/series-workflowfl745-convert-artifact-11737667/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": "2a8c6215-7648-416d-b19e-093025382827", "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-workflowfl745/series-workflowfl745-build-action-772183217/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 00:49:09 +0000 UTC FinishedAt: 2026-09-03 00:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 00:49:09 +0000 UTC FinishedAt: 2026-09-03 00:49:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 00:49:09 +0000 UTC FinishedAt: 2026-09-03 00:49:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 00:49:09 +0000 UTC FinishedAt: 2026-09-03 00:49:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowfl745/series-workflowfl745-convert-artifact-925538042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 00:49:33 +0000 UTC FinishedAt: 2026-09-03 00:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 00:49:33 +0000 UTC FinishedAt: 2026-09-03 00:51:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2a8c6215-7648-416d-b19e-093025382827,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-workflowfl745/series-workflowfl745-build-action-772183217/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-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 00:51:51 +0000 UTC FinishedAt: 2026-09-03 00:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 00:51:51 +0000 UTC FinishedAt: 2026-09-03 00:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 00:51:51 +0000 UTC FinishedAt: 2026-09-03 01:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 00:51:51 +0000 UTC FinishedAt: 2026-09-03 01:12:03 +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:*d9cea0a8-b2c3-4998-bf87-722c569b5ffe,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-workflowfl745/series-workflowfl745-convert-artifact-925538042/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": "70b323a2-09f6-4659-b9db-29c98c9efd72", "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-workflowfl745/series-workflowfl745-build-action-4186256990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 00:51:51 +0000 UTC FinishedAt: 2026-09-03 01:11:53 +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:*d9cea0a8-b2c3-4998-bf87-722c569b5ffe,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-workflowfl745/series-workflowfl745-convert-artifact-925538042/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": "70b323a2-09f6-4659-b9db-29c98c9efd72", "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-workflowfl745/series-workflowfl745-build-action-4186256990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 01:12:03 +0000 UTC FinishedAt: 2026-09-03 01:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 01:12:03 +0000 UTC FinishedAt: 2026-09-03 01:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 01:12:03 +0000 UTC FinishedAt: 2026-09-03 01:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 01:12:03 +0000 UTC FinishedAt: 2026-09-03 01:13:55 +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:*70b323a2-09f6-4659-b9db-29c98c9efd72,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-workflowfl745/series-workflowfl745-build-action-4186256990/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-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 01:14:05 +0000 UTC FinishedAt: 2026-09-03 04:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 01:14:05 +0000 UTC FinishedAt: 2026-09-03 04:15:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*2a8c6215-7648-416d-b19e-093025382827,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*70b323a2-09f6-4659-b9db-29c98c9efd72,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-workflowfl745/series-workflowfl745-build-action-772183217/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-workflowfl745/series-workflowfl745-build-action-4186256990/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 01:14:05 +0000 UTC FinishedAt: 2026-09-03 01:14:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 01:14:05 +0000 UTC FinishedAt: 2026-09-03 01:14:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfl745/series-workflowfl745-convert-artifact-2077804847/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 01:14:05 +0000 UTC FinishedAt: 2026-09-03 01:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 01:14:05 +0000 UTC FinishedAt: 2026-09-03 01:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 01:14:05 +0000 UTC FinishedAt: 2026-09-03 01:14:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 01:14:15 +0000 UTC FinishedAt: 2026-09-03 04:15:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfl745[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["init_module","finit_module","codetag_alloc_module_section","codetag_free_module_sections"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"178b3d97bf1f15f598ea7cc615a40c115e528e1c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","MEM_ALLOC_PROFILING"],"series_id":"c0c5c9c5-01b2-486c-9d19-1d457ba28bce","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 01:14:15 +0000 UTC FinishedAt: 2026-09-03 04:15:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2a8c6215-7648-416d-b19e-093025382827,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*70b323a2-09f6-4659-b9db-29c98c9efd72,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-workflowfl745/series-workflowfl745-build-action-772183217/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-workflowfl745/series-workflowfl745-build-action-4186256990/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-workflowfl745/series-workflowfl745-convert-artifact-2077804847/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,}