Name: series-workflowftbtx Phase: Succeeded StartedAt: 2026-08-22 17:04:09 +0000 UTC FinishedAt: 2026-08-22 21:25:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[0] Phase: Succeeded StartedAt: 2026-08-22 17:04:09 +0000 UTC FinishedAt: 2026-08-22 17:43:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 17:04:09 +0000 UTC FinishedAt: 2026-08-22 17:43:22 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_MESH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_MESH" ], "series_id": "c15c525a-8d2b-463b-8492-a40edc83c20a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mesh_path_send_to_gates", "mesh_path_timer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX3BhdGhfc2VuZF90b19nYXRlcyYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfdGltZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja3MgdG8gYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHByZXBhcmVfZm9yX2dhdGVgIGluIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gbWFuaXB1bGF0aW5nIHNrYiBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgY2FsbGVkIHZpYSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGZyb20gYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBtZXNoX3BhdGhfdGltZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzcwMzQxZjUwZTlkNmMyMmM1NzI5ZTM1OGVlNmU3ODIyOWZkYmE2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDE3OjM1OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtMTMxLDIyICYjNDM7MTMxLDMyIEBAIHZvaWQgbWVzaF9wYXRoX2Fzc2lnbl9uZXh0aG9wKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bXBhdGgtXHUwMDNlZnJhbWVfcXVldWUubG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxuLVx0XHRcdCAgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiYjNDM7c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjtcbiBcdGludCBtZXNoX2hkcmxlbiwgaGRybGVuO1xuIFx0Y2hhciAqbmV4dF9ob3A7XG4gXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXHRoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIGhkcmxlbiAmIzQzOyA2KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bXNoZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItXHUwMDNlZGF0YSAmIzQzOyBoZHJsZW4pO1xuIFxuIFx0aWYgKCEobXNoZHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfRkxBR1NfQUUpKSB7XG4gXHRcdC8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovXG4gXHRcdG1lc2hfaGRybGVuID0gNjtcbiBcbiYjNDM7XHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgMiAqIEVUSF9BTEVOKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cbiBcdFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xuIFx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBoZHIsIGhkcmxlbiAmIzQzOyBtZXNoX2hkcmxlbik7XG5AQCAtMTY5LDYgJiM0MzsxNzksNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRtZW1jcHkoaGRyLVx1MDAzZWFkZHIyLCBnYXRlX21wYXRoLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4gXHRtZW1jcHkoaGRyLVx1MDAzZWFkZHIzLCBkc3RfYWRkciwgRVRIX0FMRU4pO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTgsOCAmIzQzOzIyOSwxMCBAQCBzdGF0aWMgdm9pZCBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoLFxuIFx0XHRpZiAoV0FSTl9PTighc2tiKSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0cHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtXHUwMDNlZHN0LCBnYXRlX21wYXRoKTtcbi1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z2F0ZV9tcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZSwgc2tiKTtcbiYjNDM7XHRcdGlmIChwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cdTAwM2Vkc3QsIGdhdGVfbXBhdGgpID09IDApXG4mIzQzO1x0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmdhdGVfbXBhdGgtXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFxuIFx0XHRpZiAoY29weSlcbiBcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lc2hfcGF0aF9zZW5kX3RvX2dhdGVzJiMzNDssCiAgICAmIzM0O21lc2hfcGF0aF90aW1lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNzAzNDFmNTBlOWQ2YzIyYzU3MjllMzU4ZWU2ZTc4MjI5ZmRiYTY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTc6MzU6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtMTMxLDIyICYjNDM7MTMxLDMyIEBAIHZvaWQgbWVzaF9wYXRoX2Fzc2lnbl9uZXh0aG9wKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bXBhdGgtJmd0O2ZyYW1lX3F1ZXVlLmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkciwKLQkJCSAgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aCkKJiM0MztzdGF0aWMgaW50IHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsCiYjNDM7CQkJICAgIHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1zaGRyOwogCWludCBtZXNoX2hkcmxlbiwgaGRybGVuOwogCWNoYXIgKm5leHRfaG9wOwogCiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLSZndDtkYXRhOwogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLSZndDtmcmFtZV9jb250cm9sKTsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgaGRybGVuICYjNDM7IDYpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAltc2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBoZHJsZW4pOwogCiAJaWYgKCEobXNoZHItJmd0O2ZsYWdzICZhbXA7IE1FU0hfRkxBR1NfQUUpKSB7CiAJCS8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovCiAJCW1lc2hfaGRybGVuID0gNjsKIAomIzQzOwkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgMiAqIEVUSF9BTEVOKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQkvKiBtYWtlIHJvb20gZm9yIHRoZSB0d28gZXh0ZW5kZWQgYWRkcmVzc2VzICovCiAJCXNrYl9wdXNoKHNrYiwgMiAqIEVUSF9BTEVOKTsKIAkJbWVtbW92ZShza2ItJmd0O2RhdGEsIGhkciwgaGRybGVuICYjNDM7IG1lc2hfaGRybGVuKTsKQEAgLTE2OSw2ICYjNDM7MTc5LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkciwKIAlyY3VfcmVhZF91bmxvY2soKTsKIAltZW1jcHkoaGRyLSZndDthZGRyMiwgZ2F0ZV9tcGF0aC0mZ3Q7c2RhdGEtJmd0O3ZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGhkci0mZ3Q7YWRkcjMsIGRzdF9hZGRyLCBFVEhfQUxFTik7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTIxOCw4ICYjNDM7MjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsCiAJCWlmIChXQVJOX09OKCFza2IpKQogCQkJYnJlYWs7CiAKLQkJcHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtJmd0O2RzdCwgZ2F0ZV9tcGF0aCk7Ci0JCXNrYl9xdWV1ZV90YWlsKCZhbXA7Z2F0ZV9tcGF0aC0mZ3Q7ZnJhbWVfcXVldWUsIHNrYik7CiYjNDM7CQlpZiAocHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtJmd0O2RzdCwgZ2F0ZV9tcGF0aCkgPT0gMCkKJiM0MzsJCQlza2JfcXVldWVfdGFpbCgmYW1wO2dhdGVfbXBhdGgtJmd0O2ZyYW1lX3F1ZXVlLCBza2IpOwomIzQzOwkJZWxzZQomIzQzOwkJCWtmcmVlX3NrYihza2IpOwogCiAJCWlmIChjb3B5KQogCQkJY29udGludWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYG1hYzgwMjExYCBNZXNoIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIHRoYW5rZnVsbHkuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYmVlZmluZyB1cCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHByZXBhcmVfZm9yX2dhdGVgLCBjaGFuZ2luZyBpdCB0byByZXR1cm4gYW4gYGludGAgaW5zdGVhZCBvZiBgdm9pZGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0OyBtb3JlIGV4cGxpY2l0IGVycm9yIHNpZ25hbGluZyBpcyBhbHdheXMgd2VsY29tZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBhZGRpbmcgc2V2ZXJhbCBsZW5ndGggY2hlY2tzIG9uIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgd2l0aGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgc2VlIHRocmVlIGNoZWNrcyBzcGVjaWZpY2FsbHk6IG9uZSB2ZXJpZmllcyB0aGUgYHNrYmAgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYW4gODAyLjExIGhlYWRlciwgYW5vdGhlciBjaGVja3MgaXQgaGFzIGVub3VnaCBkYXRhIGZvciB0aGUgaGVhZGVyIGxlbmd0aCBwbHVzIGEgZml4ZWQgb2Zmc2V0IG9mIDYgYnl0ZXMsIGFuZCBhIHRoaXJkIG1ha2VzIHN1cmUgdGhlcmUmIzM5O3MgZW5vdWdoIGhlYWRyb29tIGluIHRoZSBza2IgZm9yIGFkZGluZyBNQUMgYWRkcmVzc2VzLCBzcGVjaWZpY2FsbHkgMiAqIGBFVEhfQUxFTmAuIFRoYXQmIzM5O3Mgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nOyBiZXR0ZXIgdG8gcmVqZWN0IGEgbWFsZm9ybWVkIHBhY2tldCB0aGFuIHJpc2sgYSBjcmFzaC4gSSYjMzk7dmUgc2VlbiBlbm91Z2ggb2YgdGhlc2UgdG8ga25vdyB0aGF0IHRoaXMgY2FuIGRlZmluaXRlbHkgYmUgYSBwcm9ibGVtLgoKVGhlIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnVuY3Rpb24gaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgYHByZXBhcmVfZm9yX2dhdGVgLiBJZiB0aGUgcmV0dXJuIGlzIHplcm8gKHN1Y2Nlc3MpLCB0aGUgYHNrYmAgaXMgcXVldWVkLiBPdGhlcndpc2UsIGl0IGlzIGZyZWVkIHVzaW5nIGBrZnJlZV9za2JgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydCBiZWNhdXNlIHRoaXMgbWVhbnMgYW55IG9mIHRoZSBlcnJvcnMgdGhhdCBgcHJlcGFyZV9mb3JfZ2F0ZWAgc2lnbmFscyBhcmUgaGFuZGxlZCwgYW5kIHRoZSBiYWQgc2tiIGlzIHNhZmVseSBmcmVlZC4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0LgoKVGhpcyBjaGFuZ2UgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhhdCBgbWFjODAyMTFgIGlzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggaXMgc29mdHdhcmUtZW11bGF0ZWQgYW5kIGZ1enppbmctaGVhdnkgdmlhIHN5emthbGxlciwgaXQmIzM5O3MgYSBjcml0aWNhbCBmaXguIEkmIzM5O3ZlIGRlYWx0IHdpdGggdGhpcyB0eXBlIG9mIHRoaW5nIGJlZm9yZSwgYW5kIHN5emthbGxlciBkb2VzIGEgZ3JlYXQgam9iIG9mIGZpbmRpbmcgdGhlc2UgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgY29udGV4dCByaWdodC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlLCBhbmQgZW5zdXJlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkLiBJJiMzOTtsbCBjaGVjayB0aGF0IGBwcmVwYXJlX2Zvcl9nYXRlYCBhbmQgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBhcmUgYm90aCBzdGF0aWMsIHdoaWNoIEkgYXNzdW1lIHRoZXkgYXJlIGdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFllcywgYm90aCBhcmUgaW5kZWVkIHN0YXRpYy4KCkkmIzM5O2xsIGFsc28gcXVpY2tseSB0cmFjZSB0aGUgY2FsbHMgdG8gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy4gSSYjMzk7bGwgdXNlIG15IHRvb2xzIGFuZCBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMuIEp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVzaF9wYXRoX21vdmVfdG9fcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEzND1zdGF0aWMgaW50IHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4NS0vKipcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxODY6ICogbWVzaF9wYXRoX21vdmVfdG9fcXVldWUgLSBNb3ZlIG9yIGNvcHkgZnJhbWVzIGZyb20gb25lIG1wYXRoIHF1ZXVlIHRvIGFub3RoZXJcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xODctICpcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjAxLSAqL1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjIwMjpzdGF0aWMgdm9pZCBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoLFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMy1cdFx0XHRcdCAgICBzdHJ1Y3QgbWVzaF9wYXRoICpmcm9tX21wYXRoLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NzY9aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05ODktXHRcdFx0bXBhdGhfZGJnKHNkYXRhLCBcJiMzNDtGb3J3YXJkaW5nIHRvICVwTVxcblwmIzM0OywgZ2F0ZS1cdTAwM2Vkc3QpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk5MDpcdFx0XHRtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShnYXRlLCBmcm9tX21wYXRoLCBjb3B5KTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05OTEtXHRcdFx0ZnJvbV9tcGF0aCA9IGdhdGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgY2FsbGluZyBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIElzIHRoaXMgYSBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9uLCBwZXJoYXBzIGEgcGFydCBvZiBhbiBBUEk/IE9yIGlzIGl0IGludGVybmFsIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGNhbGxlZCBmcm9tIG90aGVyIGFyZWFzIG9mIHRoZSBjb2RlYmFzZS4gVGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3QsIGFuZCBnaXZlIG1lIHRoZSBzY29wZSBvZiB3aGVyZSB0byBsb29rLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHNvIEkgdW5kZXJzdGFuZCB3aGF0IHdpbGwgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfcGF0aF9zZW5kX3RvX2dhdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaC5oPTMyNT1pbnQgbWVzaF9wYXRoX2FkZF9nYXRlKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzI2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTMyNy1pbnQgbWVzaF9nYXRlX251bShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyOTA9dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTYtXHRcdGlmICghbXBhdGgtXHUwMDNlaXNfZ2F0ZSBcdTAwMjZcdTAwMjYgbWVzaF9nYXRlX251bShzZGF0YSkgXHUwMDNlIDApIHtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMzE3Olx0XHRcdHJldCA9IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMzE4LVx0XHRcdGlmIChyZXQpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk1Nz12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NjQtLyoqXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTY1OiAqIG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzIC0gc2VuZHMgcGVuZGluZyBmcmFtZXMgdG8gYWxsIGtub3duIG1lc2ggZ2F0ZXNcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NjYtICpcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc1LSAqL1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk3NjppbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODY1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIHRyaWdnZXJlZCBmcm9tIGBtZXNoX3BhdGhfdGltZXJgIGluIGBuZXQvbWFjODAyMTEvbWVzaF9od21wLmNgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbnRleHQsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEhXTVAgbWVzaCByb3V0aW5nIHByb3RvY29sLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aW1lZCBldmVudHMuIEhvd2V2ZXIsIEkgd2FudCB0byB0YWtlIGEgd2lkZXIgbG9vayB0byBtYWtlIHN1cmUgSSBhbSBjb21wbGV0ZWx5IGF3YXJlIG9mIGFsbCBvZiBpdHMgdXNlIGNhc2VzLiBUaGlzIHN1Z2dlc3RzIGl0IG1pZ2h0IGFsc28gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIGFzIHdlbGw7IGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiAqdGhpcyogcGFydGljdWxhciBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfcGF0aF9zZW5kX3RvX2dhdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoLmg9MzI1PWludCBtZXNoX3BhdGhfYWRkX2dhdGUoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xubmV0L21hYzgwMjExL21lc2guaDozMjY6aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzI3LWludCBtZXNoX2dhdGVfbnVtKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MTI5MD12b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTMxNi1cdFx0aWYgKCFtcGF0aC1cdTAwM2Vpc19nYXRlIFx1MDAyNlx1MDAyNiBtZXNoX2dhdGVfbnVtKHNkYXRhKSBcdTAwM2UgMCkge1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEzMTc6XHRcdFx0cmV0ID0gbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMobXBhdGgpO1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTgtXHRcdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9OTU3PXZvaWQgbWVzaF9wYXRoX3R4X3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2NC0vKipcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NjU6ICogbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMgLSBzZW5kcyBwZW5kaW5nIGZyYW1lcyB0byBhbGwga25vd24gbWVzaCBnYXRlc1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2Ni0gKlxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NzUtICovXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTc2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05Nzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIGBtZXNoX3BhdGhfdGltZXJgKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGBtZXNoX3BhdGhfdGltZXJgLiBJdCYjMzk7cyBhIHRpbWVyIGNhbGxiYWNrLCBzbyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRyaWdnZXIgZm9yIHNvbWV0aGluZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgbWVjaGFuaXNtIHRoYXQgY2FsbHMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYD8gIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCBuby4gIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgdGhlIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhlcmUsIGl0IHNlZW1zIGxpa2UgYSBnb29kIGZvY3VzIHN5bWJvbC4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIGBtZXNoX3BhdGh0YmwuY2AgdGhhdCByZWxhdGUgdG8gdGhlIHBhdGggdGFibGUgb3IgYXJlIGFsc28gbm9uLXN0YXRpYy4gIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IHVzZWZ1bCBmb3IgbWUgcmlnaHQgbm93LiAgYHByZXBhcmVfZm9yX2dhdGVgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgdGhhdCBmb3Igbm93LiAgQWgsIGJ1dCBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgICppcyogZXhwb3J0ZWQgKG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMpLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGFsbCB0aGlzIHRvIGJlIGVuYWJsZWQsIGFuZCBtYXliZSB0aGF0JiMzOTtsbCBnaXZlIG1lIGEgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9NRVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjM1PWNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0OTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1lc2ggTmV0d29ya2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbWVzaCBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYE1BQzgwMjExX01FU0hgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyIGhlcmUuJiMzNDsgQnV0LCB3YWl0IGEgbWludXRlLCB0byBtYWtlIHRoYXQgd29yaywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRoZSBjb3JlIGBNQUM4MDIxMWAgZnJhbWV3b3JrIGFzIHdlbGwuIExldCYjMzk7cyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFfTUVTSGAuIFdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBwdXp6bGUgZG9lcyBpdCByZWx5IG9uPyBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSByZXF1aXJlZCBjb21wb25lbnRzIGFuZCBob3cgdGhleSBmaXQgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjU6XHRcdGhlbHBcbiAgNjY6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgbWFjODAyMTEgaW50ZXJuYWxzIHdpdGgga3VuaXQuXG4gIDY3Olx0XG4gIDY4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIE1BQzgwMjExX01FU0hcbiAgNzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgODAyLjExIG1lc2ggb3BlcmF0aW9uIGluIG1hYzgwMjExXG4gIDc1Olx0XHQgIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0LiAgODAyLjExIG1lc2ggY29ubmVjdHMgbXVsdGlwbGUgc3RhdGlvbnNcbiAgNzY6XHRcdCAgb3ZlciAocG9zc2libHkgbXVsdGktaG9wKSB3aXJlbGVzcyBsaW5rcyB0byBmb3JtIGEgc2luZ2xlIGxvZ2ljYWxcbiAgNzc6XHRcdCAgTEFOLlxuICA3ODpcdFxuICA3OTpcdGNvbmZpZyBNQUM4MDIxMV9MRURTXG4gIDgwOlx0XHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbiAgODE6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgODI6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcbiAgODM6XHRcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4gIDg0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBNZXNoIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYE1BQzgwMjExX01FU0hgIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgTUFDODAyMTFgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBgQ0ZHODAyMTFgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBkb2VzIGVuYWJsaW5nIGp1c3QgYE1BQzgwMjExX01FU0hgIGNvdmVyIGV2ZXJ5dGhpbmcgd2UgbmVlZCBmb3IgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gTG9va3MgbGlrZSB0aGUgYW5zd2VyIGlzIHllcywgYE1BQzgwMjExX01FU0hgIGFsb25lIGlzIHRoZSByZWxldmFudCBjb25maWcuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVzc2VudGlhbCBmdW5jdGlvbiBvciBzeW1ib2wgdG8gZXhhbWluZS4gVGhlIHRleHQgbWVudGlvbnMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgc28gdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIHRoZSBwcmltYXJ5IHRhcmdldCBvZiBhbnkgbW9kaWZpY2F0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBpcyBgbWVzaF9wYXRoX2FkZF9nYXRlYCBhbHNvIHRvdWNoZWQ/IE5vLCBpdCYjMzk7cyBub3QuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGBwcmVwYXJlX2Zvcl9nYXRlYCBhbmQgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYC4gTm93LCB0aGUgY3J1Y2lhbCBsaW5rOiB3aG8gY2FsbHMgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gT25seSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLiBCaW5nby4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbjogYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyBpbmRlZWQgdGhlIGZvY2FsIHBvaW50IGhlcmUuCgpJJiMzOTtsbCBwcm9jZWVkIGJ5IG1ha2luZyBzdXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXNoX3BhdGhfbW92ZV90b19xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTM0PXN0YXRpYyBpbnQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTg1LS8qKlxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjE4NjogKiBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZSAtIE1vdmUgb3IgY29weSBmcmFtZXMgZnJvbSBvbmUgbXBhdGggcXVldWUgdG8gYW5vdGhlclxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4Ny0gKlxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0yMDEtICovXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MjAyOnN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjAzLVx0XHRcdFx0ICAgIHN0cnVjdCBtZXNoX3BhdGggKmZyb21fbXBhdGgsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk3Nj1pbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk4OS1cdFx0XHRtcGF0aF9kYmcoc2RhdGEsIFwmIzM0O0ZvcndhcmRpbmcgdG8gJXBNXFxuXCYjMzQ7LCBnYXRlLVx1MDAzZWRzdCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTkwOlx0XHRcdG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKGdhdGUsIGZyb21fbXBhdGgsIGNvcHkpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk5MS1cdFx0XHRmcm9tX21wYXRoID0gZ2F0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkFuYWx5emluZyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIENhbGxlcnMgYW5kIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0IGRpcmVjdGx5LiBOb3csIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdW5kZXJzdGFuZGluZyB0aGlzIGNvZGUgaXMgZGV0ZXJtaW5pbmcgaXRzIHNjb3BlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBpbmRpcmVjdCBjYWxscywgb3IgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHZpc2libGUgdG8gYW55IG90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpczogYGludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClgLgoKQWxyaWdodCwgSSBzZWUgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGdsb2JhbGx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBvciBwZXJoYXBzIGV2ZW4gYmV5b25kIGlmIGl0JiMzOTtzIGRlY2xhcmVkIGluIGEgaGVhZGVyIGZpbGUgdGhhdCYjMzk7cyBpbmNsdWRlZCBlbHNld2hlcmUuIFNvLCBldmVuIHRob3VnaCBpdCAqYXBwZWFycyogdG8gb25seSBiZSBjYWxsZWQgaW4gb25lIHBsYWNlIGN1cnJlbnRseSwgdGhhdCYjMzk7cyBub3QgZGVmaW5pdGl2ZS4gVGhlcmUmIzM5O3MgYSByaXNrIHRoYXQgb3RoZXIgbW9kdWxlcyBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIHRoaXMgZnVuY3Rpb24uIFNvLCBiZWZvcmUgbW92aW5nIG9uLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnkgb3RoZXIgY29kZSB0aGF0IGNhbGxzIGBwcmVwYXJlX2Zvcl9nYXRlYC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcGFyZV9mb3JfZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTE1PXZvaWQgbWVzaF9wYXRoX2Fzc2lnbl9uZXh0aG9wKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTMzLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEzNDpzdGF0aWMgaW50IHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTM1LVx0XHRcdCAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0yMDI9c3RhdGljIHZvaWQgbWVzaF9wYXRoX21vdmVfdG9fcXVldWUoc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aCxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjMxLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjIzMjpcdFx0aWYgKHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLVx1MDAzZWRzdCwgZ2F0ZV9tcGF0aCkgPT0gMClcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0yMzMtXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z2F0ZV9tcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZSwgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVzaCBQYXRoIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGBtZXNoX3BhdGhgIHN0dWZmLiBJJiMzOTttIHNlZWluZyBhIGNvcmUgZnVuY3Rpb24gaGVyZSwgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCwgYW5kIHRoYXQmIzM5O3MgaXQsIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBpbml0aWFsbHkganVtcGluZyBvdXQgYXQgbWUuCgpUaGVuIEkmIzM5O20gcXVpY2tseSBwaXZvdGluZyB0byB3aGF0IHNlZW1zIHRvIGJlIHRoZSBzdWJzZXF1ZW50IHBvaW50IG9mIGludGVyZXN0LCB3aGljaCBhcHBlYXJzIHRvIGJlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgcHJvY2Vzc2luZyBzZWVtcyB0byB0YWtlIHBsYWNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBhdCB0aGUgdG9wIG9mIG15IG1pbmQgYXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24uCgpSaWdodCwgbGV0IG1lIGtlZXAgYW4gZXllIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvbywgYE1BQzgwMjExX01FU0hgIGFuZCBgTUFDODAyMTFgLiBTaW5jZSBJIGFtIGZvY3VzaW5nIG9uIHRoaXMgbWVzaCBwYXRoLCBJIG9ubHkgbmVlZCBgTUFDODAyMTFfTUVTSGAuCgpIYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24gaXNuJiMzOTt0IGp1c3QgY2FsbGVkIG91dCBvZiB0aGUgYmx1ZS4gSXQmIzM5O3MgdGllZCB0byBgbWVzaF9wYXRoX3RpbWVyYCwgYW5kIHRoYXQmIzM5O3MgYSAqdGltZXIgY2FsbGJhY2sqISBPa2F5LCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIG1lY2hhbmlzbS4KClNvLCBob3cgaXMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCB0cmlnZ2VyZWQ/IElzIHRoZSB0aW1lciBjYWxsYmFjayB0aGUgb25seSB3YXkgdG8gcmVhY2ggaXQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgYG1lc2hfcGF0aF90aW1lcmAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfcGF0aF90aW1lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9NzcwPXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCB7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC03NzEtXHRzdHJ1Y3QgdGltZXJfbGlzdCBob3VzZWtlZXBpbmdfdGltZXI7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo3NzI6XHRzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfdGltZXI7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC03NzMtXHRzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfcm9vdF90aW1lcjtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5jPTY0NT1pbnQgbWVzaF9hZGRfZWh0X29wZXJfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy02NzItXG5uZXQvbWFjODAyMTEvbWVzaC5jOjY3MzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxubmV0L21hYzgwMjExL21lc2guYy02NzQte1xubmV0L21hYzgwMjExL21lc2guYy02NzUtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9XG5uZXQvbWFjODAyMTEvbWVzaC5jOjY3NjpcdFx0dGltZXJfY29udGFpbmVyX29mKHNkYXRhLCB0LCB1Lm1lc2gubWVzaF9wYXRoX3RpbWVyKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmMtNjc3LVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTE5OT12b2lkIGllZWU4MDIxMV9zdG9wX21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy0xMjMwLVx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2RhdGEtXHUwMDNldS5tZXNoLm1lc2hfcGF0aF9yb290X3RpbWVyKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmM6MTIzMTpcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNkYXRhLVx1MDAzZXUubWVzaC5tZXNoX3BhdGhfdGltZXIpO1xubmV0L21hYzgwMjExL21lc2guYy0xMjMyLVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc1Nz12b2lkIGllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy0xNzc3LVxubmV0L21hYzgwMjExL21lc2guYzoxNzc4Olx0dGltZXJfc2V0dXAoXHUwMDI2aWZtc2gtXHUwMDNlbWVzaF9wYXRoX3RpbWVyLCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyLCAwKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc3OS1cdHRpbWVyX3NldHVwKFx1MDAyNmlmbXNoLVx1MDAzZW1lc2hfcGF0aF9yb290X3RpbWVyLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmg9MzU3PWludCBtZXNoX3BhdGhfZGVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjb25zdCB1OCAqYWRkcik7XG5uZXQvbWFjODAyMTEvbWVzaC5oOjM1ODp2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1OS12b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9OTk2PXN0YXRpYyB2b2lkIG1lc2hfcXVldWVfcHJlcShzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgdTggZmxhZ3MpXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEwNDQtXHR9IGVsc2Vcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMDQ1Olx0XHRtb2RfdGltZXIoXHUwMDI2aWZtc2gtXHUwMDNlbWVzaF9wYXRoX3RpbWVyLCBpZm1zaC1cdTAwM2VsYXN0X3ByZXEgJiM0Mztcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMDQ2LVx0XHRcdFx0XHRcdG1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODktXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6MTI5MDp2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMjkxLXtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9NDE2PXN0cnVjdCBtZXNoX3BhdGggKm1lc2hfcGF0aF9uZXcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQzMi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ld19tcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo0MzM6XHR0aW1lcl9zZXR1cChcdTAwMjZuZXdfbXBhdGgtXHUwMDNldGltZXIsIG1lc2hfcGF0aF90aW1lciwgMCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lc2ggUGF0aCBUaW1lcioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG1lc2hfcGF0aF9uZXdgLCBzcGVjaWZpY2FsbHkgYXNzaWduZWQgdG8gYG5ld19tcGF0aC0mZ3Q7dGltZXJgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodCDigJMgdGhpcyBpcyBhIHRpbWVyIGRlZGljYXRlZCB0byBlYWNoIGluZGl2aWR1YWwgbWVzaCBwYXRoLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgcmVzb3VyY2UgcGVyc3BlY3RpdmUuIFRoZSB0aW1lciYjMzk7cyBwcmltYXJ5IHJvbGUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gbWFuYWdlIG1lc2ggcGF0aCBleHBpcmF0aW9uIGFuZCBhbnkgbmVjZXNzYXJ5IG1haW50ZW5hbmNlLiBJJiMzOTttIHdvbmRlcmluZyB0aG91Z2gsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMgdG8gdGhlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24/IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEFoLCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgYmVpbmcgY2FsbGVkICp3aXRoaW4qIGBtZXNoX3BhdGhfdGltZXJgLiBTbyBpdOKAmXMgbGlrZWx5IGEgZGlyZWN0IGRlcGVuZGVuY3kuIExldCBtZSBjb25maXJtIHRoYXQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL21lc2hfaHdtcC5jYCBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9od21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHR2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbjEyOTE6XHR7XG4xMjkyOlx0XHRzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCA9IHRpbWVyX2NvbnRhaW5lcl9vZihtcGF0aCwgdCwgdGltZXIpO1xuMTI5MzpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBtcGF0aC1cdTAwM2VzZGF0YTtcbjEyOTQ6XHRcdGludCByZXQ7XG4xMjk1Olx0XG4xMjk2Olx0XHRpZiAoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcXVpZXNjaW5nKVxuMTI5NzpcdFx0XHRyZXR1cm47XG4xMjk4Olx0XG4xMjk5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4xMzAwOlx0XHRpZiAobXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfUEFUSF9SRVNPTFZFRCB8fFxuMTMwMTpcdFx0XHRcdCghKG1wYXRoLVx1MDAzZWZsYWdzIFx1MDAyNiBNRVNIX1BBVEhfUkVTT0xWSU5HKSkpIHtcbjEzMDI6XHRcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfUkVTT0xWRUQpO1xuMTMwMzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbjEzMDQ6XHRcdH0gZWxzZSBpZiAobXBhdGgtXHUwMDNlZGlzY292ZXJ5X3JldHJpZXMgXHUwMDNjIG1heF9wcmVxX3JldHJpZXMoc2RhdGEpKSB7XG4xMzA1Olx0XHRcdCYjNDM7JiM0MzttcGF0aC1cdTAwM2VkaXNjb3ZlcnlfcmV0cmllcztcbjEzMDY6XHRcdFx0bXBhdGgtXHUwMDNlZGlzY292ZXJ5X3RpbWVvdXQgKj0gMjtcbjEzMDc6XHRcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TUVTSF9QQVRIX1JFUV9RVUVVRUQ7XG4xMzA4Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuMTMwOTpcdFx0XHRtZXNoX3F1ZXVlX3ByZXEobXBhdGgsIDApO1xuMTMxMDpcdFx0fSBlbHNlIHtcbjEzMTE6XHRcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KE1FU0hfUEFUSF9SRVNPTFZJTkcgfFxuMTMxMjpcdFx0XHRcdFx0ICBNRVNIX1BBVEhfUkVTT0xWRUQgfFxuMTMxMzpcdFx0XHRcdFx0ICBNRVNIX1BBVEhfUkVRX1FVRVVFRCk7XG4xMzE0Olx0XHRcdG1wYXRoLVx1MDAzZWV4cF90aW1lID0gamlmZmllcztcbjEzMTU6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4xMzE2Olx0XHRcdGlmICghbXBhdGgtXHUwMDNlaXNfZ2F0ZSBcdTAwMjZcdTAwMjYgbWVzaF9nYXRlX251bShzZGF0YSkgXHUwMDNlIDApIHtcbjEzMTc6XHRcdFx0XHRyZXQgPSBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhtcGF0aCk7XG4xMzE4Olx0XHRcdFx0aWYgKHJldClcbjEzMTk6XHRcdFx0XHRcdG1od21wX2RiZyhzZGF0YSwgXCYjMzQ7bm8gZ2F0ZSB3YXMgcmVhY2hhYmxlXFxuXCYjMzQ7KTtcbjEzMjA6XHRcdFx0fSBlbHNlXG4xMzIxOlx0XHRcdFx0bWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcobXBhdGgpO1xuMTMyMjpcdFx0fVxuMTMyMzpcdH1cbjEzMjQ6XHRcbjEzMjU6XHR2b2lkIG1lc2hfcGF0aF90eF9yb290X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuMTMyNjpcdHtcbjEzMjc6XHRcdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lm1lc2g7XG4xMzI4Olx0XHR1MzIgaW50ZXJ2YWwgPSBpZm1zaC1cdTAwM2Vtc2hjZmcuZG90MTFNZXNoSFdNUFJhbm5JbnRlcnZhbDtcbjEzMjk6XHRcdHU4IGZsYWdzLCB0YXJnZXRfZmxhZ3MgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVzaCBQYXRoIEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGZ1bmN0aW9uIOKAkyBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnQgd2hlbiBtZXNoIHBhdGggcmVzb2x1dGlvbiBmYWlscyBhZnRlciBhIGJ1bmNoIG9mIHJldHJpZXMuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqbW92ZXMqIGEgcGF0aCB0byBhIHF1ZXVlIG90aGVyIHRoYW4gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gTGV0IG1lIHNlZS4uLiBOb3BlLiBBbmQgdGhlIHNhbWUgcXVlc3Rpb24gYWJvdXQgYHByZXBhcmVfZm9yX2dhdGVgPyBBbnl0aGluZyBlbHNlIGNhbGxzIHRoYXQ/IE5vcGUsIGp1c3QgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYC4KCkFscmlnaHQsIEkmIzM5O20gbGlraW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgYXMgdGhlIHByaW1hcnkgZm9jdXMsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAuIEFueXRoaW5nIHRoZXJlIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoaW5ncz8gTm8sIGl0JiMzOTtzIGp1c3QgYSBoZWxwZXIuIFdoYXQgYWJvdXQgc29tZXRoaW5nIGluIGBtZXNoX3BhdGhfdHhfcGVuZGluZ2A/IEhtbSwgZG9lcyAqdGhhdCogY2FsbCBgcHJlcGFyZV9mb3JfZ2F0ZWA/IE5vLCBpdCBkb2VzbiYjMzk7dC4gT2theSwgSSYjMzk7bGwga2VlcCBhbiBleWUgb24gdGhhdCBvbmUgYW5kIGRvdWJsZSBjaGVjayBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVzaF9wYXRoX3R4X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoLmg9MzUzPXZvaWQgbWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xubmV0L21hYzgwMjExL21lc2guaDozNTQ6dm9pZCBtZXNoX3BhdGhfdHhfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1NS12b2lkIG1lc2hfcGF0aHRibF9pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MzQ0PXN0YXRpYyB1MzIgaHdtcF9yb3V0ZV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtNDgzLVx0XHRcdGV3bWFfbWVzaF9mYWlsX2F2Z19hZGQoXHUwMDI2c3RhLVx1MDAzZW1lc2gtXHUwMDNlZmFpbF9hdmcsIDEpO1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjQ4NDpcdFx0XHRtZXNoX3BhdGhfdHhfcGVuZGluZyhtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtNDg1LVx0XHRcdC8qIGRyYWZ0IHNheXMgcHJlcV9pZCBzaG91bGQgYmUgc2F2ZWQgdG8sIGJ1dCB0aGVyZSBkb2VzXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTUzMy1cdFx0XHRld21hX21lc2hfZmFpbF9hdmdfYWRkKFx1MDAyNnN0YS1cdTAwM2VtZXNoLVx1MDAzZWZhaWxfYXZnLCAxKTtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzo1MzQ6XHRcdFx0bWVzaF9wYXRoX3R4X3BlbmRpbmcobXBhdGgpO1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTUzNS1cdFx0fSBlbHNlXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTkzNz1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk0OS0vKipcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NTA6ICogbWVzaF9wYXRoX3R4X3BlbmRpbmcgLSBzZW5kcyBwZW5kaW5nIGZyYW1lcyBpbiBhIG1lc2ggcGF0aCBxdWV1ZVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk1MS0gKlxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTYtICovXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTU3OnZvaWQgbWVzaF9wYXRoX3R4X3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTU4LXtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9OTc2PWludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTAwMS1cdFx0bXBhdGhfZGJnKHNkYXRhLCBcJiMzNDtTZW5kaW5nIHRvICVwTVxcblwmIzM0OywgZ2F0ZS1cdTAwM2Vkc3QpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEwMDI6XHRcdG1lc2hfcGF0aF90eF9wZW5kaW5nKGdhdGUpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwMDMtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwNjA9dm9pZCBtZXNoX3BhdGhfZml4X25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqbmV4dF9ob3ApXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzQtXHRld21hX21lc2hfZmFpbF9hdmdfYWRkKFx1MDAyNm5leHRfaG9wLVx1MDAzZW1lc2gtXHUwMDNlZmFpbF9hdmcsIDEpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEwNzU6XHRtZXNoX3BhdGhfdHhfcGVuZGluZyhtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTA3Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBNZXNoIE5ldHdvcmtpbmcgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIHRhcmdldCB0aGlzIG1lc2ggbmV0d29ya2luZyBjb2RlIGZvciBmdXp6aW5nLiBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgaXQgY2FsbHMgYG1lc2hfcGF0aF90eF9wZW5kaW5nKGdhdGUpYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuCgpIb2xkIG9uLCBJIGFsc28gc2VlIHRoYXQgYHByZXBhcmVfZm9yX2dhdGVgIGdldHMgY2FsbGVkIGZyb20gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYC4gSG1tLCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgb25seSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGNhbGxzIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAuIEdvb2QsIGNvbmZpcm1lZC4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBgTUFDODAyMTFfTUVTSGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIG9uZSBoZXJlLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QuCgpDYW4gSSBhY3R1YWxseSBnZXQgdG8gYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBmcm9tIHVzZXJzcGFjZT8gSXQmIzM5O3MgYSB0aW1lciBjYWxsYmFjaywgc28gaXQmIzM5O3MgcmVhY2hhYmxlIGlmIG1lc2ggbmV0d29ya2luZyBpcyBjb25maWd1cmVkIGFuZCBydW5uaW5nLiBTeXprYWxsZXIgY2FuIGNvbmZpZ3VyZSBtYWM4MDIxMSBtZXNoIGludGVyZmFjZXMgYW5kIHNlbmQgcGFja2V0cywgc28gdGhhdCYjMzk7cyBhIHllcy4gR29vZC4KCldoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZz8gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBpcyBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgbm90IGdvaW5nIHRvIGJlIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIGZ1enppbmcuIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGEgcG9zc2liaWxpdHkuIFdoYXQgYWJvdXQgYG1lc2hfcGF0aF90aW1lcmA/IEl0JiMzOTtzIGFsc28gbm9uLXN0YXRpYywgc28gbWF5YmUgdGhhdCYjMzk7cyBhbHNvIGFuIGludGVyZXN0aW5nIHRhcmdldC4gV2FpdCBhIHNlY29uZCwgaXMgYG1lc2hfcGF0aF90aW1lcmAgYWN0dWFsbHkgbm9uLXN0YXRpYz8gTGV0IG1lIGNvbmZpcm0uIFllcCwgYHZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KWAgaXMgaW4gYG5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY2AsIGFuZCBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIGluIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLgoKT2theSwgc28gbGV0JiMzOTtzIGFkZCBgbWVzaF9wYXRoX3RpbWVyYCB0byB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgZnVuY3Rpb25zIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBtb3JlLiBJIHNob3VsZCBwcm9iYWJseSBub3cgZ28gY2hlY2sgYG1lc2hfcGF0aF90aW1lcmAgbW9yZSBjbG9zZWx5IGluIGBuZXQvbWFjODAyMTEvbWVzaF9od21wLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG1lc2hfcGF0aF90aW1lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2guaD0zNTc9aW50IG1lc2hfcGF0aF9kZWwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNvbnN0IHU4ICphZGRyKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzU4OnZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzU5LXZvaWQgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3Aoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjU4PWludCBtZXNoX25leHRob3BfbG9va3VwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMjg5LVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyOTA6dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTE5CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDkxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBNZXNoIEdhdGUgUHJlcGFyYXRpb24qKgoKT2theSwgc28gYG1lc2hfcGF0aF90aW1lcmAgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS4gSSBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgSSB3YXMgZm9sbG93aW5nIGEgdmFsaWQgY2FsbCBjaGFpbi4gSXQgbG9va3MgbGlrZSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHRpbWVyLiBJJiMzOTt2ZSBwaW5wb2ludGVkIG15IGZvY3VzOiBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGFuZCBgbWVzaF9wYXRoX3RpbWVyYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTUFDODAyMTFfTUVTSGAsIGFuZCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgTUFDODAyMTFfTUVTSGAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGJvdGguCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBwYXRjaC4gSXQgY2hhbmdlcyB0aGUgYHByZXBhcmVfZm9yX2dhdGVgIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBgaW50YCByYXRoZXIgdGhhbiBgdm9pZGAuIFRoaXMgc3VnZ2VzdHMgYW4gaW1wb3J0YW50IHNoaWZ04oCUaXQgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZy4gSXQgbm93IGluY2x1ZGVzIG11bHRpcGxlIGNoZWNrcyB0byBtYWtlIHN1cmUgYHNrYmAgaXMgb2YgYSB2YWxpZCBzaXplIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IGRhdGEgbWFuaXB1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoZWNraW5nIHRoYXQgdGhlIGBza2JgIGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSA4MDIuMTEgaGVhZGVyLCB0aGUgaGVhZGVyIGxlbmd0aCwgYW5kIHJvb20gZm9yIGFkZGl0aW9uYWwgYWRkcmVzc2VzIGFmdGVyIHRoZSA4MDIuMTEgaGVhZGVyLiBGdXJ0aGVyLCBpdCBjaGVja3MgaWYgYHNrYl9oZWFkcm9vbWAgaXMgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBleHRlbmRlZCBhZGRyZXNzLiBJbXBvcnRhbnRseSwgYW55IGVycm9ycyB0cmlnZ2VyIGByZXR1cm4gLUVJTlZBTGAsIHByZXZlbnRpbmcgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhaW1lZCBhdCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW9kaWZ5aW5nIHRoZSBgc2tiYC4gVGhlIGNhbGxzaXRlIG9mIGBwcmVwYXJlX2Zvcl9nYXRlYCBpbiBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGlzIG1vZGlmaWVkIHRvIGNoZWNrIGZvciBub24temVybyByZXR1cm4gY29kZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IsIHRoZSBgc2tiYCBpcyBmcmVlZC4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGludm9sdmluZyBib3VuZHMgY2hlY2tpbmcgYW5kIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgYHNrYmAgc3RydWN0dXJlcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gdmFsaWRhdGUgdGhlIHBhdGNoIGFuZCBlbnN1cmUgaXQgcHJldmVudHMgdGhlIHBvdGVudGlhbCBpc3N1ZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gbWl0aWdhdGUuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMgYW5kIG1vdmluZyBmb3J3YXJkIHdpdGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX3BhdGhfc2VuZF90b19nYXRlcyYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfdGltZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHByZXBhcmVfZm9yX2dhdGVgIGluIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gbWFuaXB1bGF0aW5nIHNrYiBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgY2FsbGVkIHZpYSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGZyb20gYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBtZXNoX3BhdGhfdGltZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9NRVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX3RpbWVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwcmVwYXJlX2Zvcl9nYXRlYCBpbiBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIG1hbmlwdWxhdGluZyBza2IgaGVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGNhbGxlZCB2aWEgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBmcm9tIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbWVzaF9wYXRoX3RpbWVyYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja3MgdG8gYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzcwMzQxZjUwZTlkNmMyMmM1NzI5ZTM1OGVlNmU3ODIyOWZkYmE2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDE3OjM1OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDAzMTcxY2YwMDg1NTcuLmIzNDRmMzA1YTg1ZjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTEzMSwyMiAmIzQzOzEzMSwzMiBAQCB2b2lkIG1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpzdGEpCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21wYXRoLSZndDtmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsCi0JCQkgICAgIHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgpCiYjNDM7c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjsKIAlpbnQgbWVzaF9oZHJsZW4sIGhkcmxlbjsKIAljaGFyICpuZXh0X2hvcDsKIAomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiYjNDM7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IGhkcmxlbiAmIzQzOyA2KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJbXNoZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItJmd0O2RhdGEgJiM0MzsgaGRybGVuKTsKIAogCWlmICghKG1zaGRyLSZndDtmbGFncyAmYW1wOyBNRVNIX0ZMQUdTX0FFKSkgewogCQkvKiBzaXplIG9mIHRoZSBmaXhlZCBwYXJ0IG9mIHRoZSBtZXNoIGhlYWRlciAqLwogCQltZXNoX2hkcmxlbiA9IDY7CiAKJiM0MzsJCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IDIgKiBFVEhfQUxFTikKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkJLyogbWFrZSByb29tIGZvciB0aGUgdHdvIGV4dGVuZGVkIGFkZHJlc3NlcyAqLwogCQlza2JfcHVzaChza2IsIDIgKiBFVEhfQUxFTik7CiAJCW1lbW1vdmUoc2tiLSZndDtkYXRhLCBoZHIsIGhkcmxlbiAmIzQzOyBtZXNoX2hkcmxlbik7CkBAIC0xNjksNiAmIzQzOzE3OSw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJbWVtY3B5KGhkci0mZ3Q7YWRkcjIsIGdhdGVfbXBhdGgtJmd0O3NkYXRhLSZndDt2aWYuYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItJmd0O2FkZHIzLCBkc3RfYWRkciwgRVRIX0FMRU4pOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yMTgsOCAmIzQzOzIyOSwxMCBAQCBzdGF0aWMgdm9pZCBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoLAogCQlpZiAoV0FSTl9PTighc2tiKSkKIAkJCWJyZWFrOwogCi0JCXByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLSZndDtkc3QsIGdhdGVfbXBhdGgpOwotCQlza2JfcXVldWVfdGFpbCgmYW1wO2dhdGVfbXBhdGgtJmd0O2ZyYW1lX3F1ZXVlLCBza2IpOwomIzQzOwkJaWYgKHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLSZndDtkc3QsIGdhdGVfbXBhdGgpID09IDApCiYjNDM7CQkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtnYXRlX21wYXRoLSZndDtmcmFtZV9xdWV1ZSwgc2tiKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKIAogCQlpZiAoY29weSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1OAoJCQkJCQkJb3V0cHV0OiAxNDUKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVzaCBQYXRoIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgcHJlcGFyZV9mb3JfZ2F0ZWAgd2l0aGluIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhZGRpbmcgbGVuZ3RoIGNoZWNrcyBmb3IgdGhlIGBza2JgIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIGRhdGEsIHdoaWNoIGlzIGEgdmVyeSBnb29kIHByYWN0aWNlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGd1YXJkaW5nIGFnYWluc3QgdGhvc2UgcmVhZHMgYW5kIGBza2JfcHVzaGAgb3BlcmF0aW9ucyB3aXRoIGBza2ItJmd0O2xlbmAgY29tcGFyaXNvbnM6IG1ha2luZyBzdXJlIHRoZSBgc2tiYCBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmVsZXZhbnQgSUVFRSA4MDIuMTEgaGVhZGVyLCB0aGUgaGVhZGVyIGxlbmd0aCBwbHVzIGEgZml4ZWQgb2Zmc2V0LCBhbmQgZW5vdWdoIGhlYWRyb29tLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgaXNzdWVzIG9uIGBza2ItJmd0O2RhdGFgIGFuZCBgc2tiX3B1c2hgLCB3aGljaCBhcmUsIG9mIGNvdXJzZSwgYmVpbmcgY2F1Z2h0IGJ5IEtBU0FOLiBFeGNlbGxlbnQuCgpHaXZlbiB0aGF0IEtBU0FOIGlzIHJlcG9ydGluZyB0aGVzZSBpc3N1ZXMsIGFkZGluZyB2YWxpZGF0aW9uIGxpa2UgdGhpcyBpcyB0aGUgY29ycmVjdCByZXNwb25zZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7aXMgdGhpcyBzaW1wbHkgYSBmaXgsIG9yIGlzIGl0ICppbnRyb2R1Y2luZyogYW55IG90aGVyIGlzc3Vlcz8mIzM0OyBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGFjY2lkZW50YWxseSBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGRpZyBpbi4gYHByZXBhcmVfZm9yX2dhdGVgIG1vZGlmaWVzIHRoZSBgc2tiYCBpdHNlbGYuIEl0IHVzZXMgYHNrYl9wdXNoYCB0byBtYWtlIHJvb20gYW5kIHRoZW4gYG1lbW1vdmVgIGFuZCBgbWVtY3B5YCB0byB3cml0ZSBkYXRhLiBJdCBsb29rcyBsaWtlIGl0IGNvcGllcyBleGlzdGluZyBoZWFkZXIgZGF0YSBhbmQgYWRkcmVzc2VzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIEl0JiMzOTtzIHNpbXBseSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGlzIGJpZyBlbm91Z2guIFRoZSBwYXRjaCBpcyAqb25seSogYWRkaW5nIHRoZSBib3VuZHMgY2hlY2tzLiBTbywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBvbiB0aGlzIG9uZS4gSXQmIzM5O3MgYSBjbGVhbiBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNrcyB0byBgc2tiLVx1MDAzZWxlbmAgYW5kIGBza2JfaGVhZHJvb20oc2tiKWAgaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIElFRUUgODAyLjExIGhlYWRlciBhbmQgbWVzaCBoZWFkZXIsIGFuZCB3aGVuIHB1c2hpbmcgZGF0YSB0byB0aGUgc2tiLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tzIHRvIGBza2ItXHUwMDNlbGVuYCBhbmQgYHNrYl9oZWFkcm9vbShza2IpYCBpbiBgcHJlcGFyZV9mb3JfZ2F0ZWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIGFjY2Vzc2luZyB0aGUgSUVFRSA4MDIuMTEgaGVhZGVyIGFuZCBtZXNoIGhlYWRlciwgYW5kIHdoZW4gcHVzaGluZyBkYXRhIHRvIHRoZSBza2IuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM1OjMwLjU3MDY1NDgyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDgxMDI3NzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gICAgXCJtZXNoX3BhdGhfdGltZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNrcyB0byBgc2tiLVxcdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM1OjMwLjU3MDY2MTI5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2OTA3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzcwMzQxZjUwZTlkNmMyMmM1NzI5ZTM1OGVlNmU3ODIyOWZkYmE2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNzozNToyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5iMzQ0ZjMwNWE4NWYwIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbkBAIC0xMzEsMjIgKzEzMSwzMiBAQCB2b2lkIG1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1wYXRoLVxcdTAwM2VmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcXG4rc3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1zaGRyO1xcbiBcXHRpbnQgbWVzaF9oZHJsZW4sIGhkcmxlbjtcXG4gXFx0Y2hhciAqbmV4dF9ob3A7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItXFx1MDAzZWRhdGE7XFxuIFxcdGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKTtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIGhkcmxlbiArIDYpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0bXNoZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItXFx1MDAzZWRhdGEgKyBoZHJsZW4pO1xcbiBcXG4gXFx0aWYgKCEobXNoZHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUVTSF9GTEFHU19BRSkpIHtcXG4gXFx0XFx0Lyogc2l6ZSBvZiB0aGUgZml4ZWQgcGFydCBvZiB0aGUgbWVzaCBoZWFkZXIgKi9cXG4gXFx0XFx0bWVzaF9oZHJsZW4gPSA2O1xcbiBcXG4rXFx0XFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgMiAqIEVUSF9BTEVOKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cXG4gXFx0XFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xcbiBcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlZGF0YSwgaGRyLCBoZHJsZW4gKyBtZXNoX2hkcmxlbik7XFxuQEAgLTE2OSw2ICsxNzksNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0bWVtY3B5KGhkci1cXHUwMDNlYWRkcjIsIGdhdGVfbXBhdGgtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xcbiBcXHRtZW1jcHkoaGRyLVxcdTAwM2VhZGRyMywgZHN0X2FkZHIsIEVUSF9BTEVOKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMTgsOCArMjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxuIFxcdFxcdGlmIChXQVJOX09OKCFza2IpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLVxcdTAwM2Vkc3QsIGdhdGVfbXBhdGgpO1xcbi1cXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Z2F0ZV9tcGF0aC1cXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XFxuK1xcdFxcdGlmIChwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cXHUwMDNlZHN0LCBnYXRlX21wYXRoKSA9PSAwKVxcbitcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Z2F0ZV9tcGF0aC1cXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcbiBcXHRcXHRpZiAoY29weSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM1OjMwLjk2ODI0MzM4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMTgyNzI5Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gICAgXCJtZXNoX3BhdGhfdGltZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3MDM0MWY1MGU5ZDZjMjJjNTcyOWUzNThlZTZlNzgyMjlmZGJhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNzozNToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtMTMxLDIyICsxMzEsMzIgQEAgdm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKVxuK3N0YXRpYyBpbnQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbitcdFx0XHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjtcbiBcdGludCBtZXNoX2hkcmxlbiwgaGRybGVuO1xuIFx0Y2hhciAqbmV4dF9ob3A7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXHRoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBoZHJsZW4gKyA2KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdG1zaGRyID0gKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBoZHJsZW4pO1xuIFxuIFx0aWYgKCEobXNoZHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfRkxBR1NfQUUpKSB7XG4gXHRcdC8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovXG4gXHRcdG1lc2hfaGRybGVuID0gNjtcbiBcbitcdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyICogRVRIX0FMRU4pXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cbiBcdFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xuIFx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBoZHIsIGhkcmxlbiArIG1lc2hfaGRybGVuKTtcbkBAIC0xNjksNiArMTc5LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMiwgZ2F0ZV9tcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMywgZHN0X2FkZHIsIEVUSF9BTEVOKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTgsOCArMjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXG4gXHRcdGlmIChXQVJOX09OKCFza2IpKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cdTAwM2Vkc3QsIGdhdGVfbXBhdGgpO1xuLVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZnYXRlX21wYXRoLVx1MDAzZWZyYW1lX3F1ZXVlLCBza2IpO1xuK1x0XHRpZiAocHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtXHUwMDNlZHN0LCBnYXRlX21wYXRoKSA9PSAwKVxuK1x0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmdhdGVfbXBhdGgtXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBcdFx0aWYgKGNvcHkpXG4gXHRcdFx0Y29udGludWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNTozMC45NjgyNDQ3OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ3NjQ0NDcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBgbWFjODAyMTFgIE1lc2ggTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgdGhhbmtmdWxseS4gU2VlbXMgbGlrZSB0aGV5J3JlIGJlZWZpbmcgdXAgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCwgY2hhbmdpbmcgaXQgdG8gcmV0dXJuIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBUaGF0J3MgYSBnb29kIHN0YXJ0OyBtb3JlIGV4cGxpY2l0IGVycm9yIHNpZ25hbGluZyBpcyBhbHdheXMgd2VsY29tZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFkZGluZyBzZXZlcmFsIGxlbmd0aCBjaGVja3Mgb24gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3aXRoaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gSSBzZWUgdGhyZWUgY2hlY2tzIHNwZWNpZmljYWxseTogb25lIHZlcmlmaWVzIHRoZSBgc2tiYCBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBhbiA4MDIuMTEgaGVhZGVyLCBhbm90aGVyIGNoZWNrcyBpdCBoYXMgZW5vdWdoIGRhdGEgZm9yIHRoZSBoZWFkZXIgbGVuZ3RoIHBsdXMgYSBmaXhlZCBvZmZzZXQgb2YgNiBieXRlcywgYW5kIGEgdGhpcmQgbWFrZXMgc3VyZSB0aGVyZSdzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIGZvciBhZGRpbmcgTUFDIGFkZHJlc3Nlcywgc3BlY2lmaWNhbGx5IDIgKiBgRVRIX0FMRU5gLiBUaGF0J3Mgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nOyBiZXR0ZXIgdG8gcmVqZWN0IGEgbWFsZm9ybWVkIHBhY2tldCB0aGFuIHJpc2sgYSBjcmFzaC4gSSd2ZSBzZWVuIGVub3VnaCBvZiB0aGVzZSB0byBrbm93IHRoYXQgdGhpcyBjYW4gZGVmaW5pdGVseSBiZSBhIHByb2JsZW0uXG5cblRoZSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGZ1bmN0aW9uIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGBwcmVwYXJlX2Zvcl9nYXRlYC4gSWYgdGhlIHJldHVybiBpcyB6ZXJvIChzdWNjZXNzKSwgdGhlIGBza2JgIGlzIHF1ZXVlZC4gT3RoZXJ3aXNlLCBpdCBpcyBmcmVlZCB1c2luZyBga2ZyZWVfc2tiYC4gVGhpcyBpcyB0aGUgaW1wb3J0YW50IHBhcnQgYmVjYXVzZSB0aGlzIG1lYW5zIGFueSBvZiB0aGUgZXJyb3JzIHRoYXQgYHByZXBhcmVfZm9yX2dhdGVgIHNpZ25hbHMgYXJlIGhhbmRsZWQsIGFuZCB0aGUgYmFkIHNrYiBpcyBzYWZlbHkgZnJlZWQuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdC5cblxuVGhpcyBjaGFuZ2UgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhhdCBgbWFjODAyMTFgIGlzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggaXMgc29mdHdhcmUtZW11bGF0ZWQgYW5kIGZ1enppbmctaGVhdnkgdmlhIHN5emthbGxlciwgaXQncyBhIGNyaXRpY2FsIGZpeC4gSSd2ZSBkZWFsdCB3aXRoIHRoaXMgdHlwZSBvZiB0aGluZyBiZWZvcmUsIGFuZCBzeXprYWxsZXIgZG9lcyBhIGdyZWF0IGpvYiBvZiBmaW5kaW5nIHRoZXNlIG1lbW9yeSBzYWZldHkgcHJvYmxlbXMuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb250ZXh0IHJpZ2h0LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUsIGFuZCBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQuIEknbGwgY2hlY2sgdGhhdCBgcHJlcGFyZV9mb3JfZ2F0ZWAgYW5kIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBJIGFzc3VtZSB0aGV5IGFyZSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBZZXMsIGJvdGggYXJlIGluZGVlZCBzdGF0aWMuXG5cbkknbGwgYWxzbyBxdWlja2x5IHRyYWNlIHRoZSBjYWxscyB0byBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLiBJJ2xsIHVzZSBteSB0b29scyBhbmQgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzLiBKdXN0IHRvIGJlIHN1cmUuIEknbSBzYXRpc2ZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNjowMy40NDQ2OTIxODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0NTU3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9wYXRoX21vdmVfdG9fcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMzQ9c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4NS0vKipcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTg2OiAqIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlIC0gTW92ZSBvciBjb3B5IGZyYW1lcyBmcm9tIG9uZSBtcGF0aCBxdWV1ZSB0byBhbm90aGVyXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4Ny0gKlxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMS0gKi9cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MjAyOnN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZnJvbV9tcGF0aCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NzY9aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk4OS1cXHRcXHRcXHRtcGF0aF9kYmcoc2RhdGEsIFxcXCJGb3J3YXJkaW5nIHRvICVwTVxcXFxuXFxcIiwgZ2F0ZS1cXHUwMDNlZHN0KTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTkwOlxcdFxcdFxcdG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKGdhdGUsIGZyb21fbXBhdGgsIGNvcHkpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05OTEtXFx0XFx0XFx0ZnJvbV9tcGF0aCA9IGdhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM2OjAzLjQ5MzE1NjIzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzQ0MjgyMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgY2FsbGluZyBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIElzIHRoaXMgYSBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9uLCBwZXJoYXBzIGEgcGFydCBvZiBhbiBBUEk/IE9yIGlzIGl0IGludGVybmFsIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgZXhwb3J0ZWQgb3IgY2FsbGVkIGZyb20gb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGViYXNlLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgYW5kIGdpdmUgbWUgdGhlIHNjb3BlIG9mIHdoZXJlIHRvIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBzbyBJIHVuZGVyc3RhbmQgd2hhdCB3aWxsIGhhcHBlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjA0LjIzNzQ0MjYzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzODY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXNoX3BhdGhfc2VuZF90b19nYXRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoLmg9MzI1PWludCBtZXNoX3BhdGhfYWRkX2dhdGUoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzI2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2guaC0zMjctaW50IG1lc2hfZ2F0ZV9udW0oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyOTA9dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTMxNi1cXHRcXHRpZiAoIW1wYXRoLVxcdTAwM2Vpc19nYXRlIFxcdTAwMjZcXHUwMDI2IG1lc2hfZ2F0ZV9udW0oc2RhdGEpIFxcdTAwM2UgMCkge1xcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMzE3OlxcdFxcdFxcdHJldCA9IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTMxOC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk1Nz12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2NC0vKipcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTY1OiAqIG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzIC0gc2VuZHMgcGVuZGluZyBmcmFtZXMgdG8gYWxsIGtub3duIG1lc2ggZ2F0ZXNcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTY2LSAqXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc1LSAqL1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NzY6aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05Nzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNzowNC4yODU2ODk4NTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzgzNzgyNjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgdHJpZ2dlcmVkIGZyb20gYG1lc2hfcGF0aF90aW1lcmAgaW4gYG5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY2AuIFRoYXQncyB0aGUgcHJpbWFyeSBjb250ZXh0LCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEhXTVAgbWVzaCByb3V0aW5nIHByb3RvY29sLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbidzIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBleGVjdXRpb24gZmxvdywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRpbWVkIGV2ZW50cy4gSG93ZXZlciwgSSB3YW50IHRvIHRha2UgYSB3aWRlciBsb29rIHRvIG1ha2Ugc3VyZSBJIGFtIGNvbXBsZXRlbHkgYXdhcmUgb2YgYWxsIG9mIGl0cyB1c2UgY2FzZXMuIFRoaXMgc3VnZ2VzdHMgaXQgbWlnaHQgYWxzbyBiZSBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMgYXMgd2VsbDsgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IGEgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgKnRoaXMqIHBhcnRpY3VsYXIgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjE4LjEyMzUyMDQ4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4NTQyNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWVzaC5oPTMyNT1pbnQgbWVzaF9wYXRoX2FkZF9nYXRlKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oOjMyNjppbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzI3LWludCBtZXNoX2dhdGVfbnVtKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjkwPXZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTYtXFx0XFx0aWYgKCFtcGF0aC1cXHUwMDNlaXNfZ2F0ZSBcXHUwMDI2XFx1MDAyNiBtZXNoX2dhdGVfbnVtKHNkYXRhKSBcXHUwMDNlIDApIHtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6MTMxNzpcXHRcXHRcXHRyZXQgPSBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTgtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NTc9dm9pZCBtZXNoX3BhdGhfdHhfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NjQtLyoqXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk2NTogKiBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyAtIHNlbmRzIHBlbmRpbmcgZnJhbWVzIHRvIGFsbCBrbm93biBtZXNoIGdhdGVzXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2Ni0gKlxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk3NS0gKi9cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTc2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6Mzc6MTkuODgyMDY4NjA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgyMDk1NTcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIGBtZXNoX3BhdGhfdGltZXJgKipcblxuT2theSwgc28gSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgbWVzaF9wYXRoX3RpbWVyYC4gSXQncyBhIHRpbWVyIGNhbGxiYWNrLCBzbyB0aGF0J3MgdGhlIHByaW1hcnkgdHJpZ2dlciBmb3Igc29tZXRoaW5nLiBJcyB0aGVyZSAqYW55KiBvdGhlciBtZWNoYW5pc20gdGhhdCBjYWxscyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgPyAgQXMgZmFyIGFzIEkgY2FuIHRlbGwsIG5vLiAgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaGVyZSwgaXQgc2VlbXMgbGlrZSBhIGdvb2QgZm9jdXMgc3ltYm9sLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYSBiaXQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIGBtZXNoX3BhdGh0YmwuY2AgdGhhdCByZWxhdGUgdG8gdGhlIHBhdGggdGFibGUgb3IgYXJlIGFsc28gbm9uLXN0YXRpYy4gIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdXNlZnVsIGZvciBtZSByaWdodCBub3cuICBgcHJlcGFyZV9mb3JfZ2F0ZWAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aGF0IGZvciBub3cuICBBaCwgYnV0IGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgKmlzKiBleHBvcnRlZCAob3IgYXQgbGVhc3Qgbm9uLXN0YXRpYykuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi5cblxuTm93LCBsZXQncyBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCBmb3IgYWxsIHRoaXMgdG8gYmUgZW5hYmxlZCwgYW5kIG1heWJlIHRoYXQnbGwgZ2l2ZSBtZSBhIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjM4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjM4LjA5MTYzMDY4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNDE1ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX01FU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjM1PWNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjM4LjE0MzY3ODgwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ3OTg4NjUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1lc2ggTmV0d29ya2luZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lc2ggbmV0d29ya2luZyBpbXBsZW1lbnRhdGlvbiwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiUmlnaHQsIGBNQUM4MDIxMV9NRVNIYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBsYXllciBoZXJlLlwiIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgdG8gbWFrZSB0aGF0IHdvcmssIEknbSBnb2luZyB0byBuZWVkIHRoZSBjb3JlIGBNQUM4MDIxMWAgZnJhbWV3b3JrIGFzIHdlbGwuIExldCdzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9NRVNIYC4gV2hhdCBvdGhlciBwaWVjZXMgb2YgdGhlIHB1enpsZSBkb2VzIGl0IHJlbHkgb24/IEl0J3MgdGltZSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgcmVxdWlyZWQgY29tcG9uZW50cyBhbmQgaG93IHRoZXkgZml0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHByZXJlcXVpc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNzo1My42MjM1Njg0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXHRoZWxwXFxuICA2NjpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IG1hYzgwMjExIGludGVybmFscyB3aXRoIGt1bml0LlxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2OTpcXHRcXG4gIDcwOlxcdGNvbmZpZyBNQUM4MDIxMV9NRVNIXFxuICA3MTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgODAyLjExIG1lc2ggb3BlcmF0aW9uIGluIG1hYzgwMjExXFxuICA3NTpcXHRcXHQgIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0LiAgODAyLjExIG1lc2ggY29ubmVjdHMgbXVsdGlwbGUgc3RhdGlvbnNcXG4gIDc2OlxcdFxcdCAgb3ZlciAocG9zc2libHkgbXVsdGktaG9wKSB3aXJlbGVzcyBsaW5rcyB0byBmb3JtIGEgc2luZ2xlIGxvZ2ljYWxcXG4gIDc3OlxcdFxcdCAgTEFOLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRjb25maWcgTUFDODAyMTFfTEVEU1xcbiAgODA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4gIDgxOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gIDgzOlxcdFxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuICA4NDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjUzLjYyMzY1MTE5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTAwNTY5NTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1BQzgwMjExIE1lc2ggQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgTUFDODAyMTFfTUVTSGAgY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoYXQncyBidWlsdCBvbiB0b3Agb2YgYE1BQzgwMjExYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYENGRzgwMjExYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgZG9lcyBlbmFibGluZyBqdXN0IGBNQUM4MDIxMV9NRVNIYCBjb3ZlciBldmVyeXRoaW5nIHdlIG5lZWQgZm9yIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IExvb2tzIGxpa2UgdGhlIGFuc3dlciBpcyB5ZXMsIGBNQUM4MDIxMV9NRVNIYCBhbG9uZSBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVzc2VudGlhbCBmdW5jdGlvbiBvciBzeW1ib2wgdG8gZXhhbWluZS4gVGhlIHRleHQgbWVudGlvbnMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgc28gdGhhdCdzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgdGhlIHByaW1hcnkgdGFyZ2V0IG9mIGFueSBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gaXMgYG1lc2hfcGF0aF9hZGRfZ2F0ZWAgYWxzbyB0b3VjaGVkPyBObywgaXQncyBub3QuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGBwcmVwYXJlX2Zvcl9nYXRlYCBhbmQgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYC4gTm93LCB0aGUgY3J1Y2lhbCBsaW5rOiB3aG8gY2FsbHMgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gT25seSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLiBCaW5nby4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbjogYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyBpbmRlZWQgdGhlIGZvY2FsIHBvaW50IGhlcmUuXG5cbkknbGwgcHJvY2VlZCBieSBtYWtpbmcgc3VyZSBubyBvdGhlciBmdW5jdGlvbnMgYXJlIGNydWNpYWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxOCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjE4LjYyOTM0OTk2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDQzOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9wYXRoX21vdmVfdG9fcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMzQ9c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4NS0vKipcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTg2OiAqIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlIC0gTW92ZSBvciBjb3B5IGZyYW1lcyBmcm9tIG9uZSBtcGF0aCBxdWV1ZSB0byBhbm90aGVyXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4Ny0gKlxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMS0gKi9cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MjAyOnN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZnJvbV9tcGF0aCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NzY9aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk4OS1cXHRcXHRcXHRtcGF0aF9kYmcoc2RhdGEsIFxcXCJGb3J3YXJkaW5nIHRvICVwTVxcXFxuXFxcIiwgZ2F0ZS1cXHUwMDNlZHN0KTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTkwOlxcdFxcdFxcdG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKGdhdGUsIGZyb21fbXBhdGgsIGNvcHkpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05OTEtXFx0XFx0XFx0ZnJvbV9tcGF0aCA9IGdhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjE4LjY3NjE5OTk1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjkyMDcwMzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgQ2FsbGVycyBhbmQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0IGRpcmVjdGx5LiBOb3csIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdW5kZXJzdGFuZGluZyB0aGlzIGNvZGUgaXMgZGV0ZXJtaW5pbmcgaXRzIHNjb3BlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGluZGlyZWN0IGNhbGxzLCBvciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdmlzaWJsZSB0byBhbnkgb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzOiBgaW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKWAuXG5cbkFscmlnaHQsIEkgc2VlIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgZ2xvYmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIG9yIHBlcmhhcHMgZXZlbiBiZXlvbmQgaWYgaXQncyBkZWNsYXJlZCBpbiBhIGhlYWRlciBmaWxlIHRoYXQncyBpbmNsdWRlZCBlbHNld2hlcmUuIFNvLCBldmVuIHRob3VnaCBpdCAqYXBwZWFycyogdG8gb25seSBiZSBjYWxsZWQgaW4gb25lIHBsYWNlIGN1cnJlbnRseSwgdGhhdCdzIG5vdCBkZWZpbml0aXZlLiBUaGVyZSdzIGEgcmlzayB0aGF0IG90aGVyIG1vZHVsZXMgY291bGQgcG90ZW50aWFsbHkgY2FsbCB0aGlzIGZ1bmN0aW9uLiBTbywgYmVmb3JlIG1vdmluZyBvbiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW55IG90aGVyIGNvZGUgdGhhdCBjYWxscyBgcHJlcGFyZV9mb3JfZ2F0ZWAuIFRoYXQncyB0aGUgbmV4dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjM1LjU5NjkwOTE5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzg5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9mb3JfZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTExNT12b2lkIG1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTMzLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMzQ6c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMzUtXFx0XFx0XFx0ICAgIHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MjAyPXN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjMxLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoyMzI6XFx0XFx0aWYgKHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLVxcdTAwM2Vkc3QsIGdhdGVfbXBhdGgpID09IDApXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIzMy1cXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Z2F0ZV9tcGF0aC1cXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjM1LjY0NTQ1MzM3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTM0MjM3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZXNoIFBhdGggTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiB0aGlzIGBtZXNoX3BhdGhgIHN0dWZmLiBJJ20gc2VlaW5nIGEgY29yZSBmdW5jdGlvbiBoZXJlLCBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLCBhbmQgdGhhdCdzIGl0LCB0aGF0J3Mgd2hhdCdzIGluaXRpYWxseSBqdW1waW5nIG91dCBhdCBtZS5cblxuVGhlbiBJJ20gcXVpY2tseSBwaXZvdGluZyB0byB3aGF0IHNlZW1zIHRvIGJlIHRoZSBzdWJzZXF1ZW50IHBvaW50IG9mIGludGVyZXN0LCB3aGljaCBhcHBlYXJzIHRvIGJlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBwcm9jZXNzaW5nIHNlZW1zIHRvIHRha2UgcGxhY2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgb25lIGF0IHRoZSB0b3Agb2YgbXkgbWluZCBhcyB0aGUgY2VudHJhbCBmdW5jdGlvbi5cblxuUmlnaHQsIGxldCBtZSBrZWVwIGFuIGV5ZSBvbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0b28sIGBNQUM4MDIxMV9NRVNIYCBhbmQgYE1BQzgwMjExYC4gU2luY2UgSSBhbSBmb2N1c2luZyBvbiB0aGlzIG1lc2ggcGF0aCwgSSBvbmx5IG5lZWQgYE1BQzgwMjExX01FU0hgLlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24gaXNuJ3QganVzdCBjYWxsZWQgb3V0IG9mIHRoZSBibHVlLiBJdCdzIHRpZWQgdG8gYG1lc2hfcGF0aF90aW1lcmAsIGFuZCB0aGF0J3MgYSAqdGltZXIgY2FsbGJhY2sqISBPa2F5LCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIG1lY2hhbmlzbS5cblxuU28sIGhvdyBpcyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIHRyaWdnZXJlZD8gSXMgdGhlIHRpbWVyIGNhbGxiYWNrIHRoZSBvbmx5IHdheSB0byByZWFjaCBpdD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIGBtZXNoX3BhdGhfdGltZXJgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6Mzg6NDAuNTc5Njk1NTA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI5MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXNoX3BhdGhfdGltZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD03NzA9c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC03NzEtXFx0c3RydWN0IHRpbWVyX2xpc3QgaG91c2VrZWVwaW5nX3RpbWVyO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjc3MjpcXHRzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfdGltZXI7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtNzczLVxcdHN0cnVjdCB0aW1lcl9saXN0IG1lc2hfcGF0aF9yb290X3RpbWVyO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guYz02NDU9aW50IG1lc2hfYWRkX2VodF9vcGVyX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2guYy02NzItXFxubmV0L21hYzgwMjExL21lc2guYzo2NzM6c3RhdGljIHZvaWQgaWVlZTgwMjExX21lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbWFjODAyMTEvbWVzaC5jLTY3NC17XFxubmV0L21hYzgwMjExL21lc2guYy02NzUtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPVxcbm5ldC9tYWM4MDIxMS9tZXNoLmM6Njc2OlxcdFxcdHRpbWVyX2NvbnRhaW5lcl9vZihzZGF0YSwgdCwgdS5tZXNoLm1lc2hfcGF0aF90aW1lcik7XFxubmV0L21hYzgwMjExL21lc2guYy02NzctXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jPTExOTk9dm9pZCBpZWVlODAyMTFfc3RvcF9tZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2guYy0xMjMwLVxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzZGF0YS1cXHUwMDNldS5tZXNoLm1lc2hfcGF0aF9yb290X3RpbWVyKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jOjEyMzE6XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm1lc2gubWVzaF9wYXRoX3RpbWVyKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jLTEyMzItXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jPTE3NTc9dm9pZCBpZWVlODAyMTFfbWVzaF9pbml0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2guYy0xNzc3LVxcbm5ldC9tYWM4MDIxMS9tZXNoLmM6MTc3ODpcXHR0aW1lcl9zZXR1cChcXHUwMDI2aWZtc2gtXFx1MDAzZW1lc2hfcGF0aF90aW1lciwgaWVlZTgwMjExX21lc2hfcGF0aF90aW1lciwgMCk7XFxubmV0L21hYzgwMjExL21lc2guYy0xNzc5LVxcdHRpbWVyX3NldHVwKFxcdTAwMjZpZm1zaC1cXHUwMDNlbWVzaF9wYXRoX3Jvb3RfdGltZXIsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM1Nz1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzU4OnZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1OS12b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz05OTY9c3RhdGljIHZvaWQgbWVzaF9xdWV1ZV9wcmVxKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCB1OCBmbGFncylcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMDQ0LVxcdH0gZWxzZVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMDQ1OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2aWZtc2gtXFx1MDAzZW1lc2hfcGF0aF90aW1lciwgaWZtc2gtXFx1MDAzZWxhc3RfcHJlcSArXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEwNDYtXFx0XFx0XFx0XFx0XFx0XFx0bWluX3ByZXFfaW50X2ppZmYoc2RhdGEpKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjU4PWludCBtZXNoX25leHRob3BfbG9va3VwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODktXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyOTA6dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyOTEte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTQxNj1zdHJ1Y3QgbWVzaF9wYXRoICptZXNoX3BhdGhfbmV3KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQzMi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV3X21wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6NDMzOlxcdHRpbWVyX3NldHVwKFxcdTAwMjZuZXdfbXBhdGgtXFx1MDAzZXRpbWVyLCBtZXNoX3BhdGhfdGltZXIsIDApO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy00MzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjQwLjYyODk5NDY2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE5ODU2NzU3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZXNoIFBhdGggVGltZXIqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG1lc2hfcGF0aF9uZXdgLCBzcGVjaWZpY2FsbHkgYXNzaWduZWQgdG8gYG5ld19tcGF0aC1cdTAwM2V0aW1lcmAuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0IOKAkyB0aGlzIGlzIGEgdGltZXIgZGVkaWNhdGVkIHRvIGVhY2ggaW5kaXZpZHVhbCBtZXNoIHBhdGgsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSByZXNvdXJjZSBwZXJzcGVjdGl2ZS4gVGhlIHRpbWVyJ3MgcHJpbWFyeSByb2xlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIG1hbmFnZSBtZXNoIHBhdGggZXhwaXJhdGlvbiBhbmQgYW55IG5lY2Vzc2FyeSBtYWludGVuYW5jZS4gSSdtIHdvbmRlcmluZyB0aG91Z2gsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMgdG8gdGhlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24/IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEFoLCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgYmVpbmcgY2FsbGVkICp3aXRoaW4qIGBtZXNoX3BhdGhfdGltZXJgLiBTbyBpdOKAmXMgbGlrZWx5IGEgZGlyZWN0IGRlcGVuZGVuY3kuIExldCBtZSBjb25maXJtIHRoYXQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGdvIHRvIGBuZXQvbWFjODAyMTEvbWVzaF9od21wLmNgIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDoyMi42MTQ2NzM4NzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdHZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbjEyOTE6XFx0e1xcbjEyOTI6XFx0XFx0c3RydWN0IG1lc2hfcGF0aCAqbXBhdGggPSB0aW1lcl9jb250YWluZXJfb2YobXBhdGgsIHQsIHRpbWVyKTtcXG4xMjkzOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbXBhdGgtXFx1MDAzZXNkYXRhO1xcbjEyOTQ6XFx0XFx0aW50IHJldDtcXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcXVpZXNjaW5nKVxcbjEyOTc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyOTg6XFx0XFxuMTI5OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4xMzAwOlxcdFxcdGlmIChtcGF0aC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRVNIX1BBVEhfUkVTT0xWRUQgfHxcXG4xMzAxOlxcdFxcdFxcdFxcdCghKG1wYXRoLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1FU0hfUEFUSF9SRVNPTFZJTkcpKSkge1xcbjEzMDI6XFx0XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oTUVTSF9QQVRIX1JFU09MVklORyB8IE1FU0hfUEFUSF9SRVNPTFZFRCk7XFxuMTMwMzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbjEzMDQ6XFx0XFx0fSBlbHNlIGlmIChtcGF0aC1cXHUwMDNlZGlzY292ZXJ5X3JldHJpZXMgXFx1MDAzYyBtYXhfcHJlcV9yZXRyaWVzKHNkYXRhKSkge1xcbjEzMDU6XFx0XFx0XFx0KyttcGF0aC1cXHUwMDNlZGlzY292ZXJ5X3JldHJpZXM7XFxuMTMwNjpcXHRcXHRcXHRtcGF0aC1cXHUwMDNlZGlzY292ZXJ5X3RpbWVvdXQgKj0gMjtcXG4xMzA3OlxcdFxcdFxcdG1wYXRoLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+TUVTSF9QQVRIX1JFUV9RVUVVRUQ7XFxuMTMwODpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbjEzMDk6XFx0XFx0XFx0bWVzaF9xdWV1ZV9wcmVxKG1wYXRoLCAwKTtcXG4xMzEwOlxcdFxcdH0gZWxzZSB7XFxuMTMxMTpcXHRcXHRcXHRtcGF0aC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihNRVNIX1BBVEhfUkVTT0xWSU5HIHxcXG4xMzEyOlxcdFxcdFxcdFxcdFxcdCAgTUVTSF9QQVRIX1JFU09MVkVEIHxcXG4xMzEzOlxcdFxcdFxcdFxcdFxcdCAgTUVTSF9QQVRIX1JFUV9RVUVVRUQpO1xcbjEzMTQ6XFx0XFx0XFx0bXBhdGgtXFx1MDAzZWV4cF90aW1lID0gamlmZmllcztcXG4xMzE1OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtcGF0aC1cXHUwMDNlc3RhdGVfbG9jayk7XFxuMTMxNjpcXHRcXHRcXHRpZiAoIW1wYXRoLVxcdTAwM2Vpc19nYXRlIFxcdTAwMjZcXHUwMDI2IG1lc2hfZ2F0ZV9udW0oc2RhdGEpIFxcdTAwM2UgMCkge1xcbjEzMTc6XFx0XFx0XFx0XFx0cmV0ID0gbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMobXBhdGgpO1xcbjEzMTg6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4xMzE5OlxcdFxcdFxcdFxcdFxcdG1od21wX2RiZyhzZGF0YSwgXFxcIm5vIGdhdGUgd2FzIHJlYWNoYWJsZVxcXFxuXFxcIik7XFxuMTMyMDpcXHRcXHRcXHR9IGVsc2VcXG4xMzIxOlxcdFxcdFxcdFxcdG1lc2hfcGF0aF9mbHVzaF9wZW5kaW5nKG1wYXRoKTtcXG4xMzIyOlxcdFxcdH1cXG4xMzIzOlxcdH1cXG4xMzI0OlxcdFxcbjEzMjU6XFx0dm9pZCBtZXNoX3BhdGhfdHhfcm9vdF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4xMzI2OlxcdHtcXG4xMzI3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUubWVzaDtcXG4xMzI4OlxcdFxcdHUzMiBpbnRlcnZhbCA9IGlmbXNoLVxcdTAwM2Vtc2hjZmcuZG90MTFNZXNoSFdNUFJhbm5JbnRlcnZhbDtcXG4xMzI5OlxcdFxcdHU4IGZsYWdzLCB0YXJnZXRfZmxhZ3MgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDoyMi42MTQ3ODYyMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1NzI2ODkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVzaCBQYXRoIEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBmdW5jdGlvbiDigJMgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50IHdoZW4gbWVzaCBwYXRoIHJlc29sdXRpb24gZmFpbHMgYWZ0ZXIgYSBidW5jaCBvZiByZXRyaWVzLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqbW92ZXMqIGEgcGF0aCB0byBhIHF1ZXVlIG90aGVyIHRoYW4gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gTGV0IG1lIHNlZS4uLiBOb3BlLiBBbmQgdGhlIHNhbWUgcXVlc3Rpb24gYWJvdXQgYHByZXBhcmVfZm9yX2dhdGVgPyBBbnl0aGluZyBlbHNlIGNhbGxzIHRoYXQ/IE5vcGUsIGp1c3QgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYC5cblxuQWxyaWdodCwgSSdtIGxpa2luZyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAuIEFueXRoaW5nIHRoZXJlIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoaW5ncz8gTm8sIGl0J3MganVzdCBhIGhlbHBlci4gV2hhdCBhYm91dCBzb21ldGhpbmcgaW4gYG1lc2hfcGF0aF90eF9wZW5kaW5nYD8gSG1tLCBkb2VzICp0aGF0KiBjYWxsIGBwcmVwYXJlX2Zvcl9nYXRlYD8gTm8sIGl0IGRvZXNuJ3QuIE9rYXksIEknbGwga2VlcCBhbiBleWUgb24gdGhhdCBvbmUgYW5kIGRvdWJsZSBjaGVjayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDoyOS4xNzIwNTkyMzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTU2NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lc2hfcGF0aF90eF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL21lc2guaD0zNTM9dm9pZCBtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2guaDozNTQ6dm9pZCBtZXNoX3BhdGhfdHhfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2guaC0zNTUtdm9pZCBtZXNoX3BhdGh0YmxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MzQ0PXN0YXRpYyB1MzIgaHdtcF9yb3V0ZV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy00ODMtXFx0XFx0XFx0ZXdtYV9tZXNoX2ZhaWxfYXZnX2FkZChcXHUwMDI2c3RhLVxcdTAwM2VtZXNoLVxcdTAwM2VmYWlsX2F2ZywgMSk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjQ4NDpcXHRcXHRcXHRtZXNoX3BhdGhfdHhfcGVuZGluZyhtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTQ4NS1cXHRcXHRcXHQvKiBkcmFmdCBzYXlzIHByZXFfaWQgc2hvdWxkIGJlIHNhdmVkIHRvLCBidXQgdGhlcmUgZG9lc1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTUzMy1cXHRcXHRcXHRld21hX21lc2hfZmFpbF9hdmdfYWRkKFxcdTAwMjZzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZWZhaWxfYXZnLCAxKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6NTM0OlxcdFxcdFxcdG1lc2hfcGF0aF90eF9wZW5kaW5nKG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtNTM1LVxcdFxcdH0gZWxzZVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTkzNz1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTQ5LS8qKlxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NTA6ICogbWVzaF9wYXRoX3R4X3BlbmRpbmcgLSBzZW5kcyBwZW5kaW5nIGZyYW1lcyBpbiBhIG1lc2ggcGF0aCBxdWV1ZVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTEtICpcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTYtICovXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk1Nzp2b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTgte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk3Nj1pbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTAwMS1cXHRcXHRtcGF0aF9kYmcoc2RhdGEsIFxcXCJTZW5kaW5nIHRvICVwTVxcXFxuXFxcIiwgZ2F0ZS1cXHUwMDNlZHN0KTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTAwMjpcXHRcXHRtZXNoX3BhdGhfdHhfcGVuZGluZyhnYXRlKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTAwMy1cXHR9XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTA2MD12b2lkIG1lc2hfcGF0aF9maXhfbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDc0LVxcdGV3bWFfbWVzaF9mYWlsX2F2Z19hZGQoXFx1MDAyNm5leHRfaG9wLVxcdTAwM2VtZXNoLVxcdTAwM2VmYWlsX2F2ZywgMSk7XFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEwNzU6XFx0bWVzaF9wYXRoX3R4X3BlbmRpbmcobXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6MjkuMjIxMjIyMDIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNzgxNTY2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIE1lc2ggTmV0d29ya2luZyBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIHRhcmdldCB0aGlzIG1lc2ggbmV0d29ya2luZyBjb2RlIGZvciBmdXp6aW5nLiBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgaXQgY2FsbHMgYG1lc2hfcGF0aF90eF9wZW5kaW5nKGdhdGUpYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuXG5cbkhvbGQgb24sIEkgYWxzbyBzZWUgdGhhdCBgcHJlcGFyZV9mb3JfZ2F0ZWAgZ2V0cyBjYWxsZWQgZnJvbSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBIbW0sIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IG9ubHkgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBjYWxscyBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBHb29kLCBjb25maXJtZWQuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBgTUFDODAyMTFfTUVTSGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIG9uZSBoZXJlLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdC5cblxuQ2FuIEkgYWN0dWFsbHkgZ2V0IHRvIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnJvbSB1c2Vyc3BhY2U/IEl0J3MgYSB0aW1lciBjYWxsYmFjaywgc28gaXQncyByZWFjaGFibGUgaWYgbWVzaCBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQgYW5kIHJ1bm5pbmcuIFN5emthbGxlciBjYW4gY29uZmlndXJlIG1hYzgwMjExIG1lc2ggaW50ZXJmYWNlcyBhbmQgc2VuZCBwYWNrZXRzLCBzbyB0aGF0J3MgYSB5ZXMuIEdvb2QuXG5cbldoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZz8gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBpcyBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgbm90IGdvaW5nIHRvIGJlIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIGZ1enppbmcuIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIHNvIGl0J3MgYSBwb3NzaWJpbGl0eS4gV2hhdCBhYm91dCBgbWVzaF9wYXRoX3RpbWVyYD8gSXQncyBhbHNvIG5vbi1zdGF0aWMsIHNvIG1heWJlIHRoYXQncyBhbHNvIGFuIGludGVyZXN0aW5nIHRhcmdldC4gV2FpdCBhIHNlY29uZCwgaXMgYG1lc2hfcGF0aF90aW1lcmAgYWN0dWFsbHkgbm9uLXN0YXRpYz8gTGV0IG1lIGNvbmZpcm0uIFllcCwgYHZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KWAgaXMgaW4gYG5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY2AsIGFuZCBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIGluIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLlxuXG5Pa2F5LCBzbyBsZXQncyBhZGQgYG1lc2hfcGF0aF90aW1lcmAgdG8gdGhlIGxpc3Qgb2YgcG90ZW50aWFsIGZ1bmN0aW9ucyBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgbW9yZS4gSSBzaG91bGQgcHJvYmFibHkgbm93IGdvIGNoZWNrIGBtZXNoX3BhdGhfdGltZXJgIG1vcmUgY2xvc2VseSBpbiBgbmV0L21hYzgwMjExL21lc2hfaHdtcC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6MzguNTk5MzgyOTI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDgyMTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG1lc2hfcGF0aF90aW1lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoLmg9MzU3PWludCBtZXNoX3BhdGhfZGVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjb25zdCB1OCAqYWRkcik7XFxubmV0L21hYzgwMjExL21lc2guaDozNTg6dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzU5LXZvaWQgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3Aoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4OS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6MTI5MDp2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjQwOjM4LjY1MDIxMDQ1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDA2Mzk0MDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBNZXNoIEdhdGUgUHJlcGFyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWVzaF9wYXRoX3RpbWVyYCBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBJIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBJIHdhcyBmb2xsb3dpbmcgYSB2YWxpZCBjYWxsIGNoYWluLiBJdCBsb29rcyBsaWtlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgdGltZXIuIEkndmUgcGlucG9pbnRlZCBteSBmb2N1czogYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBhbmQgYG1lc2hfcGF0aF90aW1lcmAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE1BQzgwMjExX01FU0hgLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhhdCBgTUFDODAyMTFfTUVTSGAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBzbyBJJ2xsIGluY2x1ZGUgYm90aC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBwYXRjaC4gSXQgY2hhbmdlcyB0aGUgYHByZXBhcmVfZm9yX2dhdGVgIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBgaW50YCByYXRoZXIgdGhhbiBgdm9pZGAuIFRoaXMgc3VnZ2VzdHMgYW4gaW1wb3J0YW50IHNoaWZ04oCUaXQgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZy4gSXQgbm93IGluY2x1ZGVzIG11bHRpcGxlIGNoZWNrcyB0byBtYWtlIHN1cmUgYHNrYmAgaXMgb2YgYSB2YWxpZCBzaXplIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IGRhdGEgbWFuaXB1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hlY2tpbmcgdGhhdCB0aGUgYHNrYmAgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIDgwMi4xMSBoZWFkZXIsIHRoZSBoZWFkZXIgbGVuZ3RoLCBhbmQgcm9vbSBmb3IgYWRkaXRpb25hbCBhZGRyZXNzZXMgYWZ0ZXIgdGhlIDgwMi4xMSBoZWFkZXIuIEZ1cnRoZXIsIGl0IGNoZWNrcyBpZiBgc2tiX2hlYWRyb29tYCBpcyBzdWZmaWNpZW50IHRvIGNvbnRhaW4gdGhlIGV4dGVuZGVkIGFkZHJlc3MuIEltcG9ydGFudGx5LCBhbnkgZXJyb3JzIHRyaWdnZXIgYHJldHVybiAtRUlOVkFMYCwgcHJldmVudGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb2RpZnlpbmcgdGhlIGBza2JgLiBUaGUgY2FsbHNpdGUgb2YgYHByZXBhcmVfZm9yX2dhdGVgIGluIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgZm9yIG5vbi16ZXJvIHJldHVybiBjb2RlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciwgdGhlIGBza2JgIGlzIGZyZWVkLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgYm91bmRzIGNoZWNraW5nIGFuZCBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIGBza2JgIHN0cnVjdHVyZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBwYXRjaCBhbmQgZW5zdXJlIGl0IHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgaXNzdWVzIGl0J3MgZGVzaWduZWQgdG8gbWl0aWdhdGUuIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0cyBhbmQgbW92aW5nIGZvcndhcmQgd2l0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExOSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6NTIuNzE0MTU0NDM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzODM0NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNcIixcbiAgICBcIm1lc2hfcGF0aF90aW1lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwcmVwYXJlX2Zvcl9nYXRlYCBpbiBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIG1hbmlwdWxhdGluZyBza2IgaGVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGNhbGxlZCB2aWEgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBmcm9tIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbWVzaF9wYXRoX3RpbWVyYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gICAgXCJtZXNoX3BhdGhfdGltZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjQwOjUyLjc5NTU0NjIyN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NTg1Mzc0NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6NTIuNzk2MTU3NjY3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzODU4NDc1ODQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tzIHRvIGBza2ItXFx1MDAzZWxlbmAgYW5kIGBza2JfaGVhZHJvb20oc2tiKWAgaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIElFRUUgODAyLjExIGhlYWRlciBhbmQgbWVzaCBoZWFkZXIsIGFuZCB3aGVuIHB1c2hpbmcgZGF0YSB0byB0aGUgc2tiLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3MDM0MWY1MGU5ZDZjMjJjNTcyOWUzNThlZTZlNzgyMjlmZGJhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNzozNToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtMTMxLDIyICsxMzEsMzIgQEAgdm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKVxuK3N0YXRpYyBpbnQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbitcdFx0XHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjtcbiBcdGludCBtZXNoX2hkcmxlbiwgaGRybGVuO1xuIFx0Y2hhciAqbmV4dF9ob3A7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXHRoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBoZHJsZW4gKyA2KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdG1zaGRyID0gKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBoZHJsZW4pO1xuIFxuIFx0aWYgKCEobXNoZHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfRkxBR1NfQUUpKSB7XG4gXHRcdC8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovXG4gXHRcdG1lc2hfaGRybGVuID0gNjtcbiBcbitcdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyICogRVRIX0FMRU4pXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cbiBcdFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xuIFx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBoZHIsIGhkcmxlbiArIG1lc2hfaGRybGVuKTtcbkBAIC0xNjksNiArMTc5LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMiwgZ2F0ZV9tcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMywgZHN0X2FkZHIsIEVUSF9BTEVOKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTgsOCArMjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXG4gXHRcdGlmIChXQVJOX09OKCFza2IpKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cdTAwM2Vkc3QsIGdhdGVfbXBhdGgpO1xuLVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZnYXRlX21wYXRoLVx1MDAzZWZyYW1lX3F1ZXVlLCBza2IpO1xuK1x0XHRpZiAocHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtXHUwMDNlZHN0LCBnYXRlX21wYXRoKSA9PSAwKVxuK1x0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmdhdGVfbXBhdGgtXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBcdFx0aWYgKGNvcHkpXG4gXHRcdFx0Y29udGludWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDo1Mi43OTYxNjAzMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4NTg0NzM0NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lc2ggUGF0aCBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBwcmVwYXJlX2Zvcl9nYXRlYCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhZGRpbmcgbGVuZ3RoIGNoZWNrcyBmb3IgdGhlIGBza2JgIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIGRhdGEsIHdoaWNoIGlzIGEgdmVyeSBnb29kIHByYWN0aWNlLiBTcGVjaWZpY2FsbHksIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCB0aG9zZSByZWFkcyBhbmQgYHNrYl9wdXNoYCBvcGVyYXRpb25zIHdpdGggYHNrYi1cdTAwM2VsZW5gIGNvbXBhcmlzb25zOiBtYWtpbmcgc3VyZSB0aGUgYHNrYmAgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlbGV2YW50IElFRUUgODAyLjExIGhlYWRlciwgdGhlIGhlYWRlciBsZW5ndGggcGx1cyBhIGZpeGVkIG9mZnNldCwgYW5kIGVub3VnaCBoZWFkcm9vbS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgaXNzdWVzIG9uIGBza2ItXHUwMDNlZGF0YWAgYW5kIGBza2JfcHVzaGAsIHdoaWNoIGFyZSwgb2YgY291cnNlLCBiZWluZyBjYXVnaHQgYnkgS0FTQU4uIEV4Y2VsbGVudC5cblxuR2l2ZW4gdGhhdCBLQVNBTiBpcyByZXBvcnRpbmcgdGhlc2UgaXNzdWVzLCBhZGRpbmcgdmFsaWRhdGlvbiBsaWtlIHRoaXMgaXMgdGhlIGNvcnJlY3QgcmVzcG9uc2UuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiaXMgdGhpcyBzaW1wbHkgYSBmaXgsIG9yIGlzIGl0ICppbnRyb2R1Y2luZyogYW55IG90aGVyIGlzc3Vlcz9cIiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgYWNjaWRlbnRhbGx5IGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBkaWcgaW4uIGBwcmVwYXJlX2Zvcl9nYXRlYCBtb2RpZmllcyB0aGUgYHNrYmAgaXRzZWxmLiBJdCB1c2VzIGBza2JfcHVzaGAgdG8gbWFrZSByb29tIGFuZCB0aGVuIGBtZW1tb3ZlYCBhbmQgYG1lbWNweWAgdG8gd3JpdGUgZGF0YS4gSXQgbG9va3MgbGlrZSBpdCBjb3BpZXMgZXhpc3RpbmcgaGVhZGVyIGRhdGEgYW5kIGFkZHJlc3Nlcy4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIEl0J3Mgc2ltcGx5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgYmlnIGVub3VnaC4gVGhlIHBhdGNoIGlzICpvbmx5KiBhZGRpbmcgdGhlIGJvdW5kcyBjaGVja3MuIFNvLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgIG9uIHRoaXMgb25lLiBJdCdzIGEgY2xlYW4gZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU4LCJPdXRwdXRUb2tlbnMiOjE0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjQzOjExLjM4MDg5ODQzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tzIHRvIGBza2ItXFx1MDAzZWxlbmAgYW5kIGBza2JfaGVhZHJvb20oc2tiKWAgaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIElFRUUgODAyLjExIGhlYWRlciBhbmQgbWVzaCBoZWFkZXIsIGFuZCB3aGVuIHB1c2hpbmcgZGF0YSB0byB0aGUgc2tiLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNrcyB0byBgc2tiLVxcdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowftbtx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 17:04:09 +0000 UTC FinishedAt: 2026-08-22 17:43:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_MESH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "ca800a9302764c445de0da0e84d2252400a770ee", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "MAC80211_MESH" ], "series_id": "c15c525a-8d2b-463b-8492-a40edc83c20a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mesh_path_send_to_gates", "mesh_path_timer" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX3BhdGhfc2VuZF90b19nYXRlcyYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfdGltZXImIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja3MgdG8gYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHByZXBhcmVfZm9yX2dhdGVgIGluIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gbWFuaXB1bGF0aW5nIHNrYiBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgY2FsbGVkIHZpYSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGZyb20gYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBtZXNoX3BhdGhfdGltZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzcwMzQxZjUwZTlkNmMyMmM1NzI5ZTM1OGVlNmU3ODIyOWZkYmE2OFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDIyIDE3OjM1OjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtMTMxLDIyICYjNDM7MTMxLDMyIEBAIHZvaWQgbWVzaF9wYXRoX2Fzc2lnbl9uZXh0aG9wKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2bXBhdGgtXHUwMDNlZnJhbWVfcXVldWUubG9jaywgZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxuLVx0XHRcdCAgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiYjNDM7c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxuJiM0MztcdFx0XHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjtcbiBcdGludCBtZXNoX2hkcmxlbiwgaGRybGVuO1xuIFx0Y2hhciAqbmV4dF9ob3A7XG4gXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXHRoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIGhkcmxlbiAmIzQzOyA2KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0bXNoZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItXHUwMDNlZGF0YSAmIzQzOyBoZHJsZW4pO1xuIFxuIFx0aWYgKCEobXNoZHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfRkxBR1NfQUUpKSB7XG4gXHRcdC8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovXG4gXHRcdG1lc2hfaGRybGVuID0gNjtcbiBcbiYjNDM7XHRcdGlmIChza2JfaGVhZHJvb20oc2tiKSBcdTAwM2MgMiAqIEVUSF9BTEVOKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cbiBcdFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xuIFx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBoZHIsIGhkcmxlbiAmIzQzOyBtZXNoX2hkcmxlbik7XG5AQCAtMTY5LDYgJiM0MzsxNzksNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRtZW1jcHkoaGRyLVx1MDAzZWFkZHIyLCBnYXRlX21wYXRoLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi5hZGRyLCBFVEhfQUxFTik7XG4gXHRtZW1jcHkoaGRyLVx1MDAzZWFkZHIzLCBkc3RfYWRkciwgRVRIX0FMRU4pO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTgsOCAmIzQzOzIyOSwxMCBAQCBzdGF0aWMgdm9pZCBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoLFxuIFx0XHRpZiAoV0FSTl9PTighc2tiKSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0cHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtXHUwMDNlZHN0LCBnYXRlX21wYXRoKTtcbi1cdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z2F0ZV9tcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZSwgc2tiKTtcbiYjNDM7XHRcdGlmIChwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cdTAwM2Vkc3QsIGdhdGVfbXBhdGgpID09IDApXG4mIzQzO1x0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmdhdGVfbXBhdGgtXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGtmcmVlX3NrYihza2IpO1xuIFxuIFx0XHRpZiAoY29weSlcbiBcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lc2hfcGF0aF9zZW5kX3RvX2dhdGVzJiMzNDssCiAgICAmIzM0O21lc2hfcGF0aF90aW1lciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNzAzNDFmNTBlOWQ2YzIyYzU3MjllMzU4ZWU2ZTc4MjI5ZmRiYTY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTc6MzU6MjkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtMTMxLDIyICYjNDM7MTMxLDMyIEBAIHZvaWQgbWVzaF9wYXRoX2Fzc2lnbl9uZXh0aG9wKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7bXBhdGgtJmd0O2ZyYW1lX3F1ZXVlLmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkciwKLQkJCSAgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aCkKJiM0MztzdGF0aWMgaW50IHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsCiYjNDM7CQkJICAgIHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1zaGRyOwogCWludCBtZXNoX2hkcmxlbiwgaGRybGVuOwogCWNoYXIgKm5leHRfaG9wOwogCiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLSZndDtkYXRhOwogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLSZndDtmcmFtZV9jb250cm9sKTsKJiM0MzsKJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgaGRybGVuICYjNDM7IDYpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAltc2hkciA9IChzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKikgKHNrYi0mZ3Q7ZGF0YSAmIzQzOyBoZHJsZW4pOwogCiAJaWYgKCEobXNoZHItJmd0O2ZsYWdzICZhbXA7IE1FU0hfRkxBR1NfQUUpKSB7CiAJCS8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovCiAJCW1lc2hfaGRybGVuID0gNjsKIAomIzQzOwkJaWYgKHNrYl9oZWFkcm9vbShza2IpICZsdDsgMiAqIEVUSF9BTEVOKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwogCQkvKiBtYWtlIHJvb20gZm9yIHRoZSB0d28gZXh0ZW5kZWQgYWRkcmVzc2VzICovCiAJCXNrYl9wdXNoKHNrYiwgMiAqIEVUSF9BTEVOKTsKIAkJbWVtbW92ZShza2ItJmd0O2RhdGEsIGhkciwgaGRybGVuICYjNDM7IG1lc2hfaGRybGVuKTsKQEAgLTE2OSw2ICYjNDM7MTc5LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkciwKIAlyY3VfcmVhZF91bmxvY2soKTsKIAltZW1jcHkoaGRyLSZndDthZGRyMiwgZ2F0ZV9tcGF0aC0mZ3Q7c2RhdGEtJmd0O3ZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGhkci0mZ3Q7YWRkcjMsIGRzdF9hZGRyLCBFVEhfQUxFTik7CiYjNDM7CXJldHVybiAwOwogfQogCiAvKioKQEAgLTIxOCw4ICYjNDM7MjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsCiAJCWlmIChXQVJOX09OKCFza2IpKQogCQkJYnJlYWs7CiAKLQkJcHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtJmd0O2RzdCwgZ2F0ZV9tcGF0aCk7Ci0JCXNrYl9xdWV1ZV90YWlsKCZhbXA7Z2F0ZV9tcGF0aC0mZ3Q7ZnJhbWVfcXVldWUsIHNrYik7CiYjNDM7CQlpZiAocHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtJmd0O2RzdCwgZ2F0ZV9tcGF0aCkgPT0gMCkKJiM0MzsJCQlza2JfcXVldWVfdGFpbCgmYW1wO2dhdGVfbXBhdGgtJmd0O2ZyYW1lX3F1ZXVlLCBza2IpOwomIzQzOwkJZWxzZQomIzQzOwkJCWtmcmVlX3NrYihza2IpOwogCiAJCWlmIChjb3B5KQogCQkJY29udGludWU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjEKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgYG1hYzgwMjExYCBNZXNoIE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0JiMzOTtzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIHRoYW5rZnVsbHkuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYmVlZmluZyB1cCB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHByZXBhcmVfZm9yX2dhdGVgLCBjaGFuZ2luZyBpdCB0byByZXR1cm4gYW4gYGludGAgaW5zdGVhZCBvZiBgdm9pZGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0OyBtb3JlIGV4cGxpY2l0IGVycm9yIHNpZ25hbGluZyBpcyBhbHdheXMgd2VsY29tZS4KClRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpcyBhZGRpbmcgc2V2ZXJhbCBsZW5ndGggY2hlY2tzIG9uIHRoZSBgc2tiYCAoc29ja2V0IGJ1ZmZlcikgd2l0aGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMuIEkgc2VlIHRocmVlIGNoZWNrcyBzcGVjaWZpY2FsbHk6IG9uZSB2ZXJpZmllcyB0aGUgYHNrYmAgaXMgYXQgbGVhc3QgdGhlIHNpemUgb2YgYW4gODAyLjExIGhlYWRlciwgYW5vdGhlciBjaGVja3MgaXQgaGFzIGVub3VnaCBkYXRhIGZvciB0aGUgaGVhZGVyIGxlbmd0aCBwbHVzIGEgZml4ZWQgb2Zmc2V0IG9mIDYgYnl0ZXMsIGFuZCBhIHRoaXJkIG1ha2VzIHN1cmUgdGhlcmUmIzM5O3MgZW5vdWdoIGhlYWRyb29tIGluIHRoZSBza2IgZm9yIGFkZGluZyBNQUMgYWRkcmVzc2VzLCBzcGVjaWZpY2FsbHkgMiAqIGBFVEhfQUxFTmAuIFRoYXQmIzM5O3Mgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nOyBiZXR0ZXIgdG8gcmVqZWN0IGEgbWFsZm9ybWVkIHBhY2tldCB0aGFuIHJpc2sgYSBjcmFzaC4gSSYjMzk7dmUgc2VlbiBlbm91Z2ggb2YgdGhlc2UgdG8ga25vdyB0aGF0IHRoaXMgY2FuIGRlZmluaXRlbHkgYmUgYSBwcm9ibGVtLgoKVGhlIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnVuY3Rpb24gaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2YgYHByZXBhcmVfZm9yX2dhdGVgLiBJZiB0aGUgcmV0dXJuIGlzIHplcm8gKHN1Y2Nlc3MpLCB0aGUgYHNrYmAgaXMgcXVldWVkLiBPdGhlcndpc2UsIGl0IGlzIGZyZWVkIHVzaW5nIGBrZnJlZV9za2JgLiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydCBiZWNhdXNlIHRoaXMgbWVhbnMgYW55IG9mIHRoZSBlcnJvcnMgdGhhdCBgcHJlcGFyZV9mb3JfZ2F0ZWAgc2lnbmFscyBhcmUgaGFuZGxlZCwgYW5kIHRoZSBiYWQgc2tiIGlzIHNhZmVseSBmcmVlZC4gVGhpcyBpcyB3aGF0IEkgZXhwZWN0LgoKVGhpcyBjaGFuZ2UgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhhdCBgbWFjODAyMTFgIGlzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggaXMgc29mdHdhcmUtZW11bGF0ZWQgYW5kIGZ1enppbmctaGVhdnkgdmlhIHN5emthbGxlciwgaXQmIzM5O3MgYSBjcml0aWNhbCBmaXguIEkmIzM5O3ZlIGRlYWx0IHdpdGggdGhpcyB0eXBlIG9mIHRoaW5nIGJlZm9yZSwgYW5kIHN5emthbGxlciBkb2VzIGEgZ3JlYXQgam9iIG9mIGZpbmRpbmcgdGhlc2UgbWVtb3J5IHNhZmV0eSBwcm9ibGVtcy4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGUgY29udGV4dCByaWdodC4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHNjb3BlLCBhbmQgZW5zdXJlIHRoYXQgdGhlIGNoYW5nZXMgYXJlIGlzb2xhdGVkLiBJJiMzOTtsbCBjaGVjayB0aGF0IGBwcmVwYXJlX2Zvcl9nYXRlYCBhbmQgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBhcmUgYm90aCBzdGF0aWMsIHdoaWNoIEkgYXNzdW1lIHRoZXkgYXJlIGdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFllcywgYm90aCBhcmUgaW5kZWVkIHN0YXRpYy4KCkkmIzM5O2xsIGFsc28gcXVpY2tseSB0cmFjZSB0aGUgY2FsbHMgdG8gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHN1cnByaXNlcy4gSSYjMzk7bGwgdXNlIG15IHRvb2xzIGFuZCBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMuIEp1c3QgdG8gYmUgc3VyZS4gSSYjMzk7bSBzYXRpc2ZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVzaF9wYXRoX21vdmVfdG9fcXVldWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEzND1zdGF0aWMgaW50IHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4NS0vKipcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxODY6ICogbWVzaF9wYXRoX21vdmVfdG9fcXVldWUgLSBNb3ZlIG9yIGNvcHkgZnJhbWVzIGZyb20gb25lIG1wYXRoIHF1ZXVlIHRvIGFub3RoZXJcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xODctICpcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjAxLSAqL1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjIwMjpzdGF0aWMgdm9pZCBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoLFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMy1cdFx0XHRcdCAgICBzdHJ1Y3QgbWVzaF9wYXRoICpmcm9tX21wYXRoLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NzY9aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05ODktXHRcdFx0bXBhdGhfZGJnKHNkYXRhLCBcJiMzNDtGb3J3YXJkaW5nIHRvICVwTVxcblwmIzM0OywgZ2F0ZS1cdTAwM2Vkc3QpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk5MDpcdFx0XHRtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShnYXRlLCBmcm9tX21wYXRoLCBjb3B5KTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05OTEtXHRcdFx0ZnJvbV9tcGF0aCA9IGdhdGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDExNAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgY2FsbGluZyBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIElzIHRoaXMgYSBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9uLCBwZXJoYXBzIGEgcGFydCBvZiBhbiBBUEk/IE9yIGlzIGl0IGludGVybmFsIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGV4cG9ydGVkIG9yIGNhbGxlZCBmcm9tIG90aGVyIGFyZWFzIG9mIHRoZSBjb2RlYmFzZS4gVGhhdCB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UgYW5kIHBvdGVudGlhbCBpbXBhY3QsIGFuZCBnaXZlIG1lIHRoZSBzY29wZSBvZiB3aGVyZSB0byBsb29rLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkIHNvIEkgdW5kZXJzdGFuZCB3aGF0IHdpbGwgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfcGF0aF9zZW5kX3RvX2dhdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaC5oPTMyNT1pbnQgbWVzaF9wYXRoX2FkZF9nYXRlKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzI2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTMyNy1pbnQgbWVzaF9nYXRlX251bShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyOTA9dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTYtXHRcdGlmICghbXBhdGgtXHUwMDNlaXNfZ2F0ZSBcdTAwMjZcdTAwMjYgbWVzaF9nYXRlX251bShzZGF0YSkgXHUwMDNlIDApIHtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMzE3Olx0XHRcdHJldCA9IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMzE4LVx0XHRcdGlmIChyZXQpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk1Nz12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NjQtLyoqXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTY1OiAqIG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzIC0gc2VuZHMgcGVuZGluZyBmcmFtZXMgdG8gYWxsIGtub3duIG1lc2ggZ2F0ZXNcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NjYtICpcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc1LSAqL1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk3NjppbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODY1CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIHRyaWdnZXJlZCBmcm9tIGBtZXNoX3BhdGhfdGltZXJgIGluIGBuZXQvbWFjODAyMTEvbWVzaF9od21wLmNgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGNvbnRleHQsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEhXTVAgbWVzaCByb3V0aW5nIHByb3RvY29sLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgd2hlcmUgaXQgZml0cyBpbiB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgcmVsYXRlZCB0byB0aW1lZCBldmVudHMuIEhvd2V2ZXIsIEkgd2FudCB0byB0YWtlIGEgd2lkZXIgbG9vayB0byBtYWtlIHN1cmUgSSBhbSBjb21wbGV0ZWx5IGF3YXJlIG9mIGFsbCBvZiBpdHMgdXNlIGNhc2VzLiBUaGlzIHN1Z2dlc3RzIGl0IG1pZ2h0IGFsc28gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGxhY2VzIGFzIHdlbGw7IGxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIHBvdGVudGlhbCBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIGJlZm9yZSBkaXZpbmcgZGVlcGVyIGludG8gdGhlIHNwZWNpZmljcyBvZiAqdGhpcyogcGFydGljdWxhciBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfcGF0aF9zZW5kX3RvX2dhdGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoLmg9MzI1PWludCBtZXNoX3BhdGhfYWRkX2dhdGUoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xubmV0L21hYzgwMjExL21lc2guaDozMjY6aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzI3LWludCBtZXNoX2dhdGVfbnVtKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MTI5MD12b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTMxNi1cdFx0aWYgKCFtcGF0aC1cdTAwM2Vpc19nYXRlIFx1MDAyNlx1MDAyNiBtZXNoX2dhdGVfbnVtKHNkYXRhKSBcdTAwM2UgMCkge1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEzMTc6XHRcdFx0cmV0ID0gbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMobXBhdGgpO1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTgtXHRcdFx0aWYgKHJldClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9OTU3PXZvaWQgbWVzaF9wYXRoX3R4X3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2NC0vKipcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NjU6ICogbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMgLSBzZW5kcyBwZW5kaW5nIGZyYW1lcyB0byBhbGwga25vd24gbWVzaCBnYXRlc1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2Ni0gKlxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NzUtICovXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTc2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05Nzcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIGBtZXNoX3BhdGhfdGltZXJgKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGBtZXNoX3BhdGhfdGltZXJgLiBJdCYjMzk7cyBhIHRpbWVyIGNhbGxiYWNrLCBzbyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IHRyaWdnZXIgZm9yIHNvbWV0aGluZy4gSXMgdGhlcmUgKmFueSogb3RoZXIgbWVjaGFuaXNtIHRoYXQgY2FsbHMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYD8gIEFzIGZhciBhcyBJIGNhbiB0ZWxsLCBuby4gIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgdGhlIGtleSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhlcmUsIGl0IHNlZW1zIGxpa2UgYSBnb29kIGZvY3VzIHN5bWJvbC4KCkFscmlnaHQsIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIGBtZXNoX3BhdGh0YmwuY2AgdGhhdCByZWxhdGUgdG8gdGhlIHBhdGggdGFibGUgb3IgYXJlIGFsc28gbm9uLXN0YXRpYy4gIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IHVzZWZ1bCBmb3IgbWUgcmlnaHQgbm93LiAgYHByZXBhcmVfZm9yX2dhdGVgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBpZ25vcmUgdGhhdCBmb3Igbm93LiAgQWgsIGJ1dCBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgICppcyogZXhwb3J0ZWQgKG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMpLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLgoKTm93LCBsZXQmIzM5O3MgY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb25maWcgb3B0aW9ucyBhcmUgcmVxdWlyZWQgZm9yIGFsbCB0aGlzIHRvIGJlIGVuYWJsZWQsIGFuZCBtYXliZSB0aGF0JiMzOTtsbCBnaXZlIG1lIGEgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQUM4MDIxMV9NRVNIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1Rcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZy02OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy03MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjM1PWNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNDktXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjY5LVxubmV0L21hYzgwMjExL0tjb25maWc6MjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXHRib29sIFwmIzM0O1ZlcmJvc2UgbWVzaCBwb3dlcnNhdmUgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0OTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1lc2ggTmV0d29ya2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbWVzaCBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uLCBhbmQgbXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtSaWdodCwgYE1BQzgwMjExX01FU0hgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyIGhlcmUuJiMzNDsgQnV0LCB3YWl0IGEgbWludXRlLCB0byBtYWtlIHRoYXQgd29yaywgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRoZSBjb3JlIGBNQUM4MDIxMWAgZnJhbWV3b3JrIGFzIHdlbGwuIExldCYjMzk7cyBub3QgZ2V0IGFoZWFkIG9mIG91cnNlbHZlcy4gTm93LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgTUFDODAyMTFfTUVTSGAuIFdoYXQgb3RoZXIgcGllY2VzIG9mIHRoZSBwdXp6bGUgZG9lcyBpdCByZWx5IG9uPyBJdCYjMzk7cyB0aW1lIHRvIHN0YXJ0IG1hcHBpbmcgb3V0IHRoZSByZXF1aXJlZCBjb21wb25lbnRzIGFuZCBob3cgdGhleSBmaXQgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgcHJlcmVxdWlzaXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjU6XHRcdGhlbHBcbiAgNjY6XHRcdCAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgbWFjODAyMTEgaW50ZXJuYWxzIHdpdGgga3VuaXQuXG4gIDY3Olx0XG4gIDY4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDY5Olx0XG4gIDcwOlx0Y29uZmlnIE1BQzgwMjExX01FU0hcbiAgNzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XCYjMzQ7XG4gIDcyOlx0XHRkZXBlbmRzIG9uIE1BQzgwMjExXG4gIDczOlx0XHRoZWxwXG4gIDc0Olx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgODAyLjExIG1lc2ggb3BlcmF0aW9uIGluIG1hYzgwMjExXG4gIDc1Olx0XHQgIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0LiAgODAyLjExIG1lc2ggY29ubmVjdHMgbXVsdGlwbGUgc3RhdGlvbnNcbiAgNzY6XHRcdCAgb3ZlciAocG9zc2libHkgbXVsdGktaG9wKSB3aXJlbGVzcyBsaW5rcyB0byBmb3JtIGEgc2luZ2xlIGxvZ2ljYWxcbiAgNzc6XHRcdCAgTEFOLlxuICA3ODpcdFxuICA3OTpcdGNvbmZpZyBNQUM4MDIxMV9MRURTXG4gIDgwOlx0XHRib29sIFwmIzM0O0VuYWJsZSBMRUQgdHJpZ2dlcnNcJiMzNDtcbiAgODE6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgODI6XHRcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcbiAgODM6XHRcdHNlbGVjdCBMRURTX1RSSUdHRVJTXG4gIDg0Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMTgKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBNZXNoIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgYE1BQzgwMjExX01FU0hgIGNvbmZpZ3VyYXRpb24uIFJpZ2h0LCB0aGF0JiMzOTtzIGJ1aWx0IG9uIHRvcCBvZiBgTUFDODAyMTFgLCB3aGljaCBpbiB0dXJuIHJlbGllcyBvbiBgQ0ZHODAyMTFgLiBOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCBkb2VzIGVuYWJsaW5nIGp1c3QgYE1BQzgwMjExX01FU0hgIGNvdmVyIGV2ZXJ5dGhpbmcgd2UgbmVlZCBmb3IgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gTG9va3MgbGlrZSB0aGUgYW5zd2VyIGlzIHllcywgYE1BQzgwMjExX01FU0hgIGFsb25lIGlzIHRoZSByZWxldmFudCBjb25maWcuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MuCgpOZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVzc2VudGlhbCBmdW5jdGlvbiBvciBzeW1ib2wgdG8gZXhhbWluZS4gVGhlIHRleHQgbWVudGlvbnMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgc28gdGhhdCYjMzk7cyB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGF0IGZ1bmN0aW9uIGlzIHRoZSBwcmltYXJ5IHRhcmdldCBvZiBhbnkgbW9kaWZpY2F0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBpcyBgbWVzaF9wYXRoX2FkZF9nYXRlYCBhbHNvIHRvdWNoZWQ/IE5vLCBpdCYjMzk7cyBub3QuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGBwcmVwYXJlX2Zvcl9nYXRlYCBhbmQgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYC4gTm93LCB0aGUgY3J1Y2lhbCBsaW5rOiB3aG8gY2FsbHMgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gT25seSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLiBCaW5nby4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbjogYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyBpbmRlZWQgdGhlIGZvY2FsIHBvaW50IGhlcmUuCgpJJiMzOTtsbCBwcm9jZWVkIGJ5IG1ha2luZyBzdXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBhcmUgY3J1Y2lhbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXNoX3BhdGhfbW92ZV90b19xdWV1ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTM0PXN0YXRpYyBpbnQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTg1LS8qKlxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjE4NjogKiBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZSAtIE1vdmUgb3IgY29weSBmcmFtZXMgZnJvbSBvbmUgbXBhdGggcXVldWUgdG8gYW5vdGhlclxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4Ny0gKlxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0yMDEtICovXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MjAyOnN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjAzLVx0XHRcdFx0ICAgIHN0cnVjdCBtZXNoX3BhdGggKmZyb21fbXBhdGgsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk3Nj1pbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk4OS1cdFx0XHRtcGF0aF9kYmcoc2RhdGEsIFwmIzM0O0ZvcndhcmRpbmcgdG8gJXBNXFxuXCYjMzQ7LCBnYXRlLVx1MDAzZWRzdCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTkwOlx0XHRcdG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKGdhdGUsIGZyb21fbXBhdGgsIGNvcHkpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk5MS1cdFx0XHRmcm9tX21wYXRoID0gZ2F0ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk4NgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkFuYWx5emluZyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIENhbGxlcnMgYW5kIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0IGRpcmVjdGx5LiBOb3csIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdW5kZXJzdGFuZGluZyB0aGlzIGNvZGUgaXMgZGV0ZXJtaW5pbmcgaXRzIHNjb3BlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBpbmRpcmVjdCBjYWxscywgb3IgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHZpc2libGUgdG8gYW55IG90aGVyIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpczogYGludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClgLgoKQWxyaWdodCwgSSBzZWUgaXQmIzM5O3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGdsb2JhbGx5IHZpc2libGUgd2l0aGluIHRoZSBjb21waWxhdGlvbiB1bml0LCBvciBwZXJoYXBzIGV2ZW4gYmV5b25kIGlmIGl0JiMzOTtzIGRlY2xhcmVkIGluIGEgaGVhZGVyIGZpbGUgdGhhdCYjMzk7cyBpbmNsdWRlZCBlbHNld2hlcmUuIFNvLCBldmVuIHRob3VnaCBpdCAqYXBwZWFycyogdG8gb25seSBiZSBjYWxsZWQgaW4gb25lIHBsYWNlIGN1cnJlbnRseSwgdGhhdCYjMzk7cyBub3QgZGVmaW5pdGl2ZS4gVGhlcmUmIzM5O3MgYSByaXNrIHRoYXQgb3RoZXIgbW9kdWxlcyBjb3VsZCBwb3RlbnRpYWxseSBjYWxsIHRoaXMgZnVuY3Rpb24uIFNvLCBiZWZvcmUgbW92aW5nIG9uLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBpcyBhbnkgb3RoZXIgY29kZSB0aGF0IGNhbGxzIGBwcmVwYXJlX2Zvcl9nYXRlYC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBjaGVjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHJlcGFyZV9mb3JfZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTE1PXZvaWQgbWVzaF9wYXRoX2Fzc2lnbl9uZXh0aG9wKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTMzLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEzNDpzdGF0aWMgaW50IHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTM1LVx0XHRcdCAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0yMDI9c3RhdGljIHZvaWQgbWVzaF9wYXRoX21vdmVfdG9fcXVldWUoc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aCxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjMxLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjIzMjpcdFx0aWYgKHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLVx1MDAzZWRzdCwgZ2F0ZV9tcGF0aCkgPT0gMClcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0yMzMtXHRcdFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z2F0ZV9tcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZSwgc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY3NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVzaCBQYXRoIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGlzIGBtZXNoX3BhdGhgIHN0dWZmLiBJJiMzOTttIHNlZWluZyBhIGNvcmUgZnVuY3Rpb24gaGVyZSwgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCwgYW5kIHRoYXQmIzM5O3MgaXQsIHRoYXQmIzM5O3Mgd2hhdCYjMzk7cyBpbml0aWFsbHkganVtcGluZyBvdXQgYXQgbWUuCgpUaGVuIEkmIzM5O20gcXVpY2tseSBwaXZvdGluZyB0byB3aGF0IHNlZW1zIHRvIGJlIHRoZSBzdWJzZXF1ZW50IHBvaW50IG9mIGludGVyZXN0LCB3aGljaCBhcHBlYXJzIHRvIGJlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgcHJvY2Vzc2luZyBzZWVtcyB0byB0YWtlIHBsYWNlLiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBhdCB0aGUgdG9wIG9mIG15IG1pbmQgYXMgdGhlIGNlbnRyYWwgZnVuY3Rpb24uCgpSaWdodCwgbGV0IG1lIGtlZXAgYW4gZXllIG9uIHRoZXNlIGNvbmZpZ3VyYXRpb25zIHRvbywgYE1BQzgwMjExX01FU0hgIGFuZCBgTUFDODAyMTFgLiBTaW5jZSBJIGFtIGZvY3VzaW5nIG9uIHRoaXMgbWVzaCBwYXRoLCBJIG9ubHkgbmVlZCBgTUFDODAyMTFfTUVTSGAuCgpIYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24gaXNuJiMzOTt0IGp1c3QgY2FsbGVkIG91dCBvZiB0aGUgYmx1ZS4gSXQmIzM5O3MgdGllZCB0byBgbWVzaF9wYXRoX3RpbWVyYCwgYW5kIHRoYXQmIzM5O3MgYSAqdGltZXIgY2FsbGJhY2sqISBPa2F5LCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIG1lY2hhbmlzbS4KClNvLCBob3cgaXMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCB0cmlnZ2VyZWQ/IElzIHRoZSB0aW1lciBjYWxsYmFjayB0aGUgb25seSB3YXkgdG8gcmVhY2ggaXQ/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgYG1lc2hfcGF0aF90aW1lcmAgZnVuY3Rpb24gYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfcGF0aF90aW1lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9NzcwPXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCB7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC03NzEtXHRzdHJ1Y3QgdGltZXJfbGlzdCBob3VzZWtlZXBpbmdfdGltZXI7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo3NzI6XHRzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfdGltZXI7XG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC03NzMtXHRzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfcm9vdF90aW1lcjtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5jPTY0NT1pbnQgbWVzaF9hZGRfZWh0X29wZXJfaWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy02NzItXG5uZXQvbWFjODAyMTEvbWVzaC5jOjY3MzpzdGF0aWMgdm9pZCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxubmV0L21hYzgwMjExL21lc2guYy02NzQte1xubmV0L21hYzgwMjExL21lc2guYy02NzUtXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9XG5uZXQvbWFjODAyMTEvbWVzaC5jOjY3NjpcdFx0dGltZXJfY29udGFpbmVyX29mKHNkYXRhLCB0LCB1Lm1lc2gubWVzaF9wYXRoX3RpbWVyKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmMtNjc3LVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTE5OT12b2lkIGllZWU4MDIxMV9zdG9wX21lc2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy0xMjMwLVx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2c2RhdGEtXHUwMDNldS5tZXNoLm1lc2hfcGF0aF9yb290X3RpbWVyKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmM6MTIzMTpcdHRpbWVyX2RlbGV0ZV9zeW5jKFx1MDAyNnNkYXRhLVx1MDAzZXUubWVzaC5tZXNoX3BhdGhfdGltZXIpO1xubmV0L21hYzgwMjExL21lc2guYy0xMjMyLVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc1Nz12b2lkIGllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy0xNzc3LVxubmV0L21hYzgwMjExL21lc2guYzoxNzc4Olx0dGltZXJfc2V0dXAoXHUwMDI2aWZtc2gtXHUwMDNlbWVzaF9wYXRoX3RpbWVyLCBpZWVlODAyMTFfbWVzaF9wYXRoX3RpbWVyLCAwKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc3OS1cdHRpbWVyX3NldHVwKFx1MDAyNmlmbXNoLVx1MDAzZW1lc2hfcGF0aF9yb290X3RpbWVyLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmg9MzU3PWludCBtZXNoX3BhdGhfZGVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjb25zdCB1OCAqYWRkcik7XG5uZXQvbWFjODAyMTEvbWVzaC5oOjM1ODp2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1OS12b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9OTk2PXN0YXRpYyB2b2lkIG1lc2hfcXVldWVfcHJlcShzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgdTggZmxhZ3MpXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEwNDQtXHR9IGVsc2Vcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMDQ1Olx0XHRtb2RfdGltZXIoXHUwMDI2aWZtc2gtXHUwMDNlbWVzaF9wYXRoX3RpbWVyLCBpZm1zaC1cdTAwM2VsYXN0X3ByZXEgJiM0Mztcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMDQ2LVx0XHRcdFx0XHRcdG1pbl9wcmVxX2ludF9qaWZmKHNkYXRhKSk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODktXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6MTI5MDp2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMjkxLXtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9NDE2PXN0cnVjdCBtZXNoX3BhdGggKm1lc2hfcGF0aF9uZXcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQzMi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNm5ld19tcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo0MzM6XHR0aW1lcl9zZXR1cChcdTAwMjZuZXdfbXBhdGgtXHUwMDNldGltZXIsIG1lc2hfcGF0aF90aW1lciwgMCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMgoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDEyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lc2ggUGF0aCBUaW1lcioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG1lc2hfcGF0aF9uZXdgLCBzcGVjaWZpY2FsbHkgYXNzaWduZWQgdG8gYG5ld19tcGF0aC0mZ3Q7dGltZXJgLiBUaGF0IGNvbmZpcm1zIG15IGluaXRpYWwgdGhvdWdodCDigJMgdGhpcyBpcyBhIHRpbWVyIGRlZGljYXRlZCB0byBlYWNoIGluZGl2aWR1YWwgbWVzaCBwYXRoLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgcmVzb3VyY2UgcGVyc3BlY3RpdmUuIFRoZSB0aW1lciYjMzk7cyBwcmltYXJ5IHJvbGUsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gbWFuYWdlIG1lc2ggcGF0aCBleHBpcmF0aW9uIGFuZCBhbnkgbmVjZXNzYXJ5IG1haW50ZW5hbmNlLiBJJiMzOTttIHdvbmRlcmluZyB0aG91Z2gsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMgdG8gdGhlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24/IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEFoLCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgYmVpbmcgY2FsbGVkICp3aXRoaW4qIGBtZXNoX3BhdGhfdGltZXJgLiBTbyBpdOKAmXMgbGlrZWx5IGEgZGlyZWN0IGRlcGVuZGVuY3kuIExldCBtZSBjb25maXJtIHRoYXQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBnbyB0byBgbmV0L21hYzgwMjExL21lc2hfaHdtcC5jYCBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9od21wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyOTA6XHR2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbjEyOTE6XHR7XG4xMjkyOlx0XHRzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCA9IHRpbWVyX2NvbnRhaW5lcl9vZihtcGF0aCwgdCwgdGltZXIpO1xuMTI5MzpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBtcGF0aC1cdTAwM2VzZGF0YTtcbjEyOTQ6XHRcdGludCByZXQ7XG4xMjk1Olx0XG4xMjk2Olx0XHRpZiAoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlcXVpZXNjaW5nKVxuMTI5NzpcdFx0XHRyZXR1cm47XG4xMjk4Olx0XG4xMjk5Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4xMzAwOlx0XHRpZiAobXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfUEFUSF9SRVNPTFZFRCB8fFxuMTMwMTpcdFx0XHRcdCghKG1wYXRoLVx1MDAzZWZsYWdzIFx1MDAyNiBNRVNIX1BBVEhfUkVTT0xWSU5HKSkpIHtcbjEzMDI6XHRcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfUkVTT0xWRUQpO1xuMTMwMzpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbjEzMDQ6XHRcdH0gZWxzZSBpZiAobXBhdGgtXHUwMDNlZGlzY292ZXJ5X3JldHJpZXMgXHUwMDNjIG1heF9wcmVxX3JldHJpZXMoc2RhdGEpKSB7XG4xMzA1Olx0XHRcdCYjNDM7JiM0MzttcGF0aC1cdTAwM2VkaXNjb3ZlcnlfcmV0cmllcztcbjEzMDY6XHRcdFx0bXBhdGgtXHUwMDNlZGlzY292ZXJ5X3RpbWVvdXQgKj0gMjtcbjEzMDc6XHRcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+TUVTSF9QQVRIX1JFUV9RVUVVRUQ7XG4xMzA4Olx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuMTMwOTpcdFx0XHRtZXNoX3F1ZXVlX3ByZXEobXBhdGgsIDApO1xuMTMxMDpcdFx0fSBlbHNlIHtcbjEzMTE6XHRcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+KE1FU0hfUEFUSF9SRVNPTFZJTkcgfFxuMTMxMjpcdFx0XHRcdFx0ICBNRVNIX1BBVEhfUkVTT0xWRUQgfFxuMTMxMzpcdFx0XHRcdFx0ICBNRVNIX1BBVEhfUkVRX1FVRVVFRCk7XG4xMzE0Olx0XHRcdG1wYXRoLVx1MDAzZWV4cF90aW1lID0gamlmZmllcztcbjEzMTU6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4xMzE2Olx0XHRcdGlmICghbXBhdGgtXHUwMDNlaXNfZ2F0ZSBcdTAwMjZcdTAwMjYgbWVzaF9nYXRlX251bShzZGF0YSkgXHUwMDNlIDApIHtcbjEzMTc6XHRcdFx0XHRyZXQgPSBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhtcGF0aCk7XG4xMzE4Olx0XHRcdFx0aWYgKHJldClcbjEzMTk6XHRcdFx0XHRcdG1od21wX2RiZyhzZGF0YSwgXCYjMzQ7bm8gZ2F0ZSB3YXMgcmVhY2hhYmxlXFxuXCYjMzQ7KTtcbjEzMjA6XHRcdFx0fSBlbHNlXG4xMzIxOlx0XHRcdFx0bWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcobXBhdGgpO1xuMTMyMjpcdFx0fVxuMTMyMzpcdH1cbjEzMjQ6XHRcbjEzMjU6XHR2b2lkIG1lc2hfcGF0aF90eF9yb290X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuMTMyNjpcdHtcbjEzMjc6XHRcdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lm1lc2g7XG4xMzI4Olx0XHR1MzIgaW50ZXJ2YWwgPSBpZm1zaC1cdTAwM2Vtc2hjZmcuZG90MTFNZXNoSFdNUFJhbm5JbnRlcnZhbDtcbjEzMjk6XHRcdHU4IGZsYWdzLCB0YXJnZXRfZmxhZ3MgPSAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU1NwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVzaCBQYXRoIEZhaWx1cmUgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGZ1bmN0aW9uIOKAkyBpdCBzZWVtcyBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnQgd2hlbiBtZXNoIHBhdGggcmVzb2x1dGlvbiBmYWlscyBhZnRlciBhIGJ1bmNoIG9mIHJldHJpZXMuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqbW92ZXMqIGEgcGF0aCB0byBhIHF1ZXVlIG90aGVyIHRoYW4gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gTGV0IG1lIHNlZS4uLiBOb3BlLiBBbmQgdGhlIHNhbWUgcXVlc3Rpb24gYWJvdXQgYHByZXBhcmVfZm9yX2dhdGVgPyBBbnl0aGluZyBlbHNlIGNhbGxzIHRoYXQ/IE5vcGUsIGp1c3QgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYC4KCkFscmlnaHQsIEkmIzM5O20gbGlraW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgYXMgdGhlIHByaW1hcnkgZm9jdXMsIGJ1dCBsZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAuIEFueXRoaW5nIHRoZXJlIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoaW5ncz8gTm8sIGl0JiMzOTtzIGp1c3QgYSBoZWxwZXIuIFdoYXQgYWJvdXQgc29tZXRoaW5nIGluIGBtZXNoX3BhdGhfdHhfcGVuZGluZ2A/IEhtbSwgZG9lcyAqdGhhdCogY2FsbCBgcHJlcGFyZV9mb3JfZ2F0ZWA/IE5vLCBpdCBkb2VzbiYjMzk7dC4gT2theSwgSSYjMzk7bGwga2VlcCBhbiBleWUgb24gdGhhdCBvbmUgYW5kIGRvdWJsZSBjaGVjayBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVzaF9wYXRoX3R4X3BlbmRpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9tZXNoLmg9MzUzPXZvaWQgbWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xubmV0L21hYzgwMjExL21lc2guaDozNTQ6dm9pZCBtZXNoX3BhdGhfdHhfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1NS12b2lkIG1lc2hfcGF0aHRibF9pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MzQ0PXN0YXRpYyB1MzIgaHdtcF9yb3V0ZV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtNDgzLVx0XHRcdGV3bWFfbWVzaF9mYWlsX2F2Z19hZGQoXHUwMDI2c3RhLVx1MDAzZW1lc2gtXHUwMDNlZmFpbF9hdmcsIDEpO1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjQ4NDpcdFx0XHRtZXNoX3BhdGhfdHhfcGVuZGluZyhtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtNDg1LVx0XHRcdC8qIGRyYWZ0IHNheXMgcHJlcV9pZCBzaG91bGQgYmUgc2F2ZWQgdG8sIGJ1dCB0aGVyZSBkb2VzXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTUzMy1cdFx0XHRld21hX21lc2hfZmFpbF9hdmdfYWRkKFx1MDAyNnN0YS1cdTAwM2VtZXNoLVx1MDAzZWZhaWxfYXZnLCAxKTtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzo1MzQ6XHRcdFx0bWVzaF9wYXRoX3R4X3BlbmRpbmcobXBhdGgpO1xubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTUzNS1cdFx0fSBlbHNlXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTkzNz1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk0OS0vKipcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NTA6ICogbWVzaF9wYXRoX3R4X3BlbmRpbmcgLSBzZW5kcyBwZW5kaW5nIGZyYW1lcyBpbiBhIG1lc2ggcGF0aCBxdWV1ZVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk1MS0gKlxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTYtICovXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTU3OnZvaWQgbWVzaF9wYXRoX3R4X3BlbmRpbmcoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTU4LXtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9OTc2PWludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTAwMS1cdFx0bXBhdGhfZGJnKHNkYXRhLCBcJiMzNDtTZW5kaW5nIHRvICVwTVxcblwmIzM0OywgZ2F0ZS1cdTAwM2Vkc3QpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEwMDI6XHRcdG1lc2hfcGF0aF90eF9wZW5kaW5nKGdhdGUpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwMDMtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwNjA9dm9pZCBtZXNoX3BhdGhfZml4X25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqbmV4dF9ob3ApXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzQtXHRld21hX21lc2hfZmFpbF9hdmdfYWRkKFx1MDAyNm5leHRfaG9wLVx1MDAzZW1lc2gtXHUwMDNlZmFpbF9hdmcsIDEpO1xubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEwNzU6XHRtZXNoX3BhdGhfdHhfcGVuZGluZyhtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTA3Ni19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzIGluIHRoZSBNZXNoIE5ldHdvcmtpbmcgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIHRhcmdldCB0aGlzIG1lc2ggbmV0d29ya2luZyBjb2RlIGZvciBmdXp6aW5nLiBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgaXQgY2FsbHMgYG1lc2hfcGF0aF90eF9wZW5kaW5nKGdhdGUpYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuCgpIb2xkIG9uLCBJIGFsc28gc2VlIHRoYXQgYHByZXBhcmVfZm9yX2dhdGVgIGdldHMgY2FsbGVkIGZyb20gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYC4gSG1tLCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgb25seSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGNhbGxzIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAuIEdvb2QsIGNvbmZpcm1lZC4KCk5vdywgbGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBgTUFDODAyMTFfTUVTSGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIG9uZSBoZXJlLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QuCgpDYW4gSSBhY3R1YWxseSBnZXQgdG8gYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBmcm9tIHVzZXJzcGFjZT8gSXQmIzM5O3MgYSB0aW1lciBjYWxsYmFjaywgc28gaXQmIzM5O3MgcmVhY2hhYmxlIGlmIG1lc2ggbmV0d29ya2luZyBpcyBjb25maWd1cmVkIGFuZCBydW5uaW5nLiBTeXprYWxsZXIgY2FuIGNvbmZpZ3VyZSBtYWM4MDIxMSBtZXNoIGludGVyZmFjZXMgYW5kIHNlbmQgcGFja2V0cywgc28gdGhhdCYjMzk7cyBhIHllcy4gR29vZC4KCldoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZz8gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBpcyBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgbm90IGdvaW5nIHRvIGJlIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIGZ1enppbmcuIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIGEgcG9zc2liaWxpdHkuIFdoYXQgYWJvdXQgYG1lc2hfcGF0aF90aW1lcmA/IEl0JiMzOTtzIGFsc28gbm9uLXN0YXRpYywgc28gbWF5YmUgdGhhdCYjMzk7cyBhbHNvIGFuIGludGVyZXN0aW5nIHRhcmdldC4gV2FpdCBhIHNlY29uZCwgaXMgYG1lc2hfcGF0aF90aW1lcmAgYWN0dWFsbHkgbm9uLXN0YXRpYz8gTGV0IG1lIGNvbmZpcm0uIFllcCwgYHZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KWAgaXMgaW4gYG5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY2AsIGFuZCBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIGluIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLgoKT2theSwgc28gbGV0JiMzOTtzIGFkZCBgbWVzaF9wYXRoX3RpbWVyYCB0byB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgZnVuY3Rpb25zIEkgd2FudCB0byBpbnZlc3RpZ2F0ZSBtb3JlLiBJIHNob3VsZCBwcm9iYWJseSBub3cgZ28gY2hlY2sgYG1lc2hfcGF0aF90aW1lcmAgbW9yZSBjbG9zZWx5IGluIGBuZXQvbWFjODAyMTEvbWVzaF9od21wLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIG1lc2hfcGF0aF90aW1lciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2guaD0zNTc9aW50IG1lc2hfcGF0aF9kZWwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNvbnN0IHU4ICphZGRyKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzU4OnZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzU5LXZvaWQgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3Aoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjU4PWludCBtZXNoX25leHRob3BfbG9va3VwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMjg5LVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyOTA6dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI5MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTE5CgkJCQkJCQlvdXRwdXQ6IDE1NgoJCQkJCQkJdGhvdWdodHM6IDkxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBNZXNoIEdhdGUgUHJlcGFyYXRpb24qKgoKT2theSwgc28gYG1lc2hfcGF0aF90aW1lcmAgaXMgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGdvb2QgdG8gY29uZmlybS4gSSBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgSSB3YXMgZm9sbG93aW5nIGEgdmFsaWQgY2FsbCBjaGFpbi4gSXQgbG9va3MgbGlrZSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgY2FsbHMgdGhlIHRpbWVyLiBJJiMzOTt2ZSBwaW5wb2ludGVkIG15IGZvY3VzOiBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGFuZCBgbWVzaF9wYXRoX3RpbWVyYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTUFDODAyMTFfTUVTSGAsIGFuZCBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgTUFDODAyMTFfTUVTSGAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBzbyBJJiMzOTtsbCBpbmNsdWRlIGJvdGguCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBwYXRjaC4gSXQgY2hhbmdlcyB0aGUgYHByZXBhcmVfZm9yX2dhdGVgIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBgaW50YCByYXRoZXIgdGhhbiBgdm9pZGAuIFRoaXMgc3VnZ2VzdHMgYW4gaW1wb3J0YW50IHNoaWZ04oCUaXQgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZy4gSXQgbm93IGluY2x1ZGVzIG11bHRpcGxlIGNoZWNrcyB0byBtYWtlIHN1cmUgYHNrYmAgaXMgb2YgYSB2YWxpZCBzaXplIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IGRhdGEgbWFuaXB1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoZWNraW5nIHRoYXQgdGhlIGBza2JgIGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSA4MDIuMTEgaGVhZGVyLCB0aGUgaGVhZGVyIGxlbmd0aCwgYW5kIHJvb20gZm9yIGFkZGl0aW9uYWwgYWRkcmVzc2VzIGFmdGVyIHRoZSA4MDIuMTEgaGVhZGVyLiBGdXJ0aGVyLCBpdCBjaGVja3MgaWYgYHNrYl9oZWFkcm9vbWAgaXMgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBleHRlbmRlZCBhZGRyZXNzLiBJbXBvcnRhbnRseSwgYW55IGVycm9ycyB0cmlnZ2VyIGByZXR1cm4gLUVJTlZBTGAsIHByZXZlbnRpbmcgZnVydGhlciBwcm9jZXNzaW5nLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhaW1lZCBhdCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gbW9kaWZ5aW5nIHRoZSBgc2tiYC4gVGhlIGNhbGxzaXRlIG9mIGBwcmVwYXJlX2Zvcl9nYXRlYCBpbiBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGlzIG1vZGlmaWVkIHRvIGNoZWNrIGZvciBub24temVybyByZXR1cm4gY29kZS4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IsIHRoZSBgc2tiYCBpcyBmcmVlZC4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGludm9sdmluZyBib3VuZHMgY2hlY2tpbmcgYW5kIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgYHNrYmAgc3RydWN0dXJlcywgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gdmFsaWRhdGUgdGhlIHBhdGNoIGFuZCBlbnN1cmUgaXQgcHJldmVudHMgdGhlIHBvdGVudGlhbCBpc3N1ZXMgaXQmIzM5O3MgZGVzaWduZWQgdG8gbWl0aWdhdGUuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZCB3aXRoIHNldHRpbmcgdGhlIHJlc3VsdHMgYW5kIG1vdmluZyBmb3J3YXJkIHdpdGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX3BhdGhfc2VuZF90b19nYXRlcyYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfdGltZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHByZXBhcmVfZm9yX2dhdGVgIGluIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgYWNjZXNzIHdoZW4gbWFuaXB1bGF0aW5nIHNrYiBoZWFkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgY2FsbGVkIHZpYSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGZyb20gYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgd2hpY2ggaXMgdHJpZ2dlcmVkIGJ5IGBtZXNoX3BhdGhfdGltZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9NRVNIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX3RpbWVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwcmVwYXJlX2Zvcl9nYXRlYCBpbiBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIG1hbmlwdWxhdGluZyBza2IgaGVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGNhbGxlZCB2aWEgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBmcm9tIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbWVzaF9wYXRoX3RpbWVyYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNzo0MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja3MgdG8gYHNrYi1cdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzcwMzQxZjUwZTlkNmMyMmM1NzI5ZTM1OGVlNmU3ODIyOWZkYmE2OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDIyIDE3OjM1OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDAzMTcxY2YwMDg1NTcuLmIzNDRmMzA1YTg1ZjAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTEzMSwyMiAmIzQzOzEzMSwzMiBAQCB2b2lkIG1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpzdGEpCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO21wYXRoLSZndDtmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsCi0JCQkgICAgIHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgpCiYjNDM7c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJc3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjsKIAlpbnQgbWVzaF9oZHJsZW4sIGhkcmxlbjsKIAljaGFyICpuZXh0X2hvcDsKIAomIzQzOwlpZiAoc2tiLSZndDtsZW4gJmx0OyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0mZ3Q7ZGF0YTsKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCk7CiYjNDM7CiYjNDM7CWlmIChza2ItJmd0O2xlbiAmbHQ7IGhkcmxlbiAmIzQzOyA2KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJbXNoZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItJmd0O2RhdGEgJiM0MzsgaGRybGVuKTsKIAogCWlmICghKG1zaGRyLSZndDtmbGFncyAmYW1wOyBNRVNIX0ZMQUdTX0FFKSkgewogCQkvKiBzaXplIG9mIHRoZSBmaXhlZCBwYXJ0IG9mIHRoZSBtZXNoIGhlYWRlciAqLwogCQltZXNoX2hkcmxlbiA9IDY7CiAKJiM0MzsJCWlmIChza2JfaGVhZHJvb20oc2tiKSAmbHQ7IDIgKiBFVEhfQUxFTikKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkJLyogbWFrZSByb29tIGZvciB0aGUgdHdvIGV4dGVuZGVkIGFkZHJlc3NlcyAqLwogCQlza2JfcHVzaChza2IsIDIgKiBFVEhfQUxFTik7CiAJCW1lbW1vdmUoc2tiLSZndDtkYXRhLCBoZHIsIGhkcmxlbiAmIzQzOyBtZXNoX2hkcmxlbik7CkBAIC0xNjksNiAmIzQzOzE3OSw3IEBAIHN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJbWVtY3B5KGhkci0mZ3Q7YWRkcjIsIGdhdGVfbXBhdGgtJmd0O3NkYXRhLSZndDt2aWYuYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItJmd0O2FkZHIzLCBkc3RfYWRkciwgRVRIX0FMRU4pOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0yMTgsOCAmIzQzOzIyOSwxMCBAQCBzdGF0aWMgdm9pZCBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZShzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoLAogCQlpZiAoV0FSTl9PTighc2tiKSkKIAkJCWJyZWFrOwogCi0JCXByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLSZndDtkc3QsIGdhdGVfbXBhdGgpOwotCQlza2JfcXVldWVfdGFpbCgmYW1wO2dhdGVfbXBhdGgtJmd0O2ZyYW1lX3F1ZXVlLCBza2IpOwomIzQzOwkJaWYgKHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLSZndDtkc3QsIGdhdGVfbXBhdGgpID09IDApCiYjNDM7CQkJc2tiX3F1ZXVlX3RhaWwoJmFtcDtnYXRlX21wYXRoLSZndDtmcmFtZV9xdWV1ZSwgc2tiKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlrZnJlZV9za2Ioc2tiKTsKIAogCQlpZiAoY29weSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTc6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1OAoJCQkJCQkJb3V0cHV0OiAxNDUKCQkJCQkJCXRob3VnaHRzOiA0MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVzaCBQYXRoIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIG1vZGlmeWluZyBgcHJlcGFyZV9mb3JfZ2F0ZWAgd2l0aGluIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJdCYjMzk7cyBhZGRpbmcgbGVuZ3RoIGNoZWNrcyBmb3IgdGhlIGBza2JgIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIGRhdGEsIHdoaWNoIGlzIGEgdmVyeSBnb29kIHByYWN0aWNlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGd1YXJkaW5nIGFnYWluc3QgdGhvc2UgcmVhZHMgYW5kIGBza2JfcHVzaGAgb3BlcmF0aW9ucyB3aXRoIGBza2ItJmd0O2xlbmAgY29tcGFyaXNvbnM6IG1ha2luZyBzdXJlIHRoZSBgc2tiYCBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgcmVsZXZhbnQgSUVFRSA4MDIuMTEgaGVhZGVyLCB0aGUgaGVhZGVyIGxlbmd0aCBwbHVzIGEgZml4ZWQgb2Zmc2V0LCBhbmQgZW5vdWdoIGhlYWRyb29tLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgaXNzdWVzIG9uIGBza2ItJmd0O2RhdGFgIGFuZCBgc2tiX3B1c2hgLCB3aGljaCBhcmUsIG9mIGNvdXJzZSwgYmVpbmcgY2F1Z2h0IGJ5IEtBU0FOLiBFeGNlbGxlbnQuCgpHaXZlbiB0aGF0IEtBU0FOIGlzIHJlcG9ydGluZyB0aGVzZSBpc3N1ZXMsIGFkZGluZyB2YWxpZGF0aW9uIGxpa2UgdGhpcyBpcyB0aGUgY29ycmVjdCByZXNwb25zZS4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7aXMgdGhpcyBzaW1wbHkgYSBmaXgsIG9yIGlzIGl0ICppbnRyb2R1Y2luZyogYW55IG90aGVyIGlzc3Vlcz8mIzM0OyBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGFjY2lkZW50YWxseSBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGRpZyBpbi4gYHByZXBhcmVfZm9yX2dhdGVgIG1vZGlmaWVzIHRoZSBgc2tiYCBpdHNlbGYuIEl0IHVzZXMgYHNrYl9wdXNoYCB0byBtYWtlIHJvb20gYW5kIHRoZW4gYG1lbW1vdmVgIGFuZCBgbWVtY3B5YCB0byB3cml0ZSBkYXRhLiBJdCBsb29rcyBsaWtlIGl0IGNvcGllcyBleGlzdGluZyBoZWFkZXIgZGF0YSBhbmQgYWRkcmVzc2VzLiBJIGRvbiYjMzk7dCBzZWUgYW55IG9idmlvdXMgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIEl0JiMzOTtzIHNpbXBseSBtYWtpbmcgc3VyZSB0aGF0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGlzIGJpZyBlbm91Z2guIFRoZSBwYXRjaCBpcyAqb25seSogYWRkaW5nIHRoZSBib3VuZHMgY2hlY2tzLiBTbywgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYCBvbiB0aGlzIG9uZS4gSXQmIzM5O3MgYSBjbGVhbiBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNrcyB0byBgc2tiLVx1MDAzZWxlbmAgYW5kIGBza2JfaGVhZHJvb20oc2tiKWAgaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIElFRUUgODAyLjExIGhlYWRlciBhbmQgbWVzaCBoZWFkZXIsIGFuZCB3aGVuIHB1c2hpbmcgZGF0YSB0byB0aGUgc2tiLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tzIHRvIGBza2ItXHUwMDNlbGVuYCBhbmQgYHNrYl9oZWFkcm9vbShza2IpYCBpbiBgcHJlcGFyZV9mb3JfZ2F0ZWAgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyB3aGVuIGFjY2Vzc2luZyB0aGUgSUVFRSA4MDIuMTEgaGVhZGVyIGFuZCBtZXNoIGhlYWRlciwgYW5kIHdoZW4gcHVzaGluZyBkYXRhIHRvIHRoZSBza2IuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIG5vciBkb2VzIGl0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIHVzZSBpdCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM1OjMwLjU3MDY1NDgyOFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MDgxMDI3NzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gICAgXCJtZXNoX3BhdGhfdGltZXJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNrcyB0byBgc2tiLVxcdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM1OjMwLjU3MDY2MTI5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2OTA3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzcwMzQxZjUwZTlkNmMyMmM1NzI5ZTM1OGVlNmU3ODIyOWZkYmE2OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNzozNToyOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5iMzQ0ZjMwNWE4NWYwIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbkBAIC0xMzEsMjIgKzEzMSwzMiBAQCB2b2lkIG1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1wYXRoLVxcdTAwM2VmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcXG4rc3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1zaGRyO1xcbiBcXHRpbnQgbWVzaF9oZHJsZW4sIGhkcmxlbjtcXG4gXFx0Y2hhciAqbmV4dF9ob3A7XFxuIFxcbitcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzYyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItXFx1MDAzZWRhdGE7XFxuIFxcdGhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKTtcXG4rXFxuK1xcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIGhkcmxlbiArIDYpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0bXNoZHIgPSAoc3RydWN0IGllZWU4MDIxMXNfaGRyICopIChza2ItXFx1MDAzZWRhdGEgKyBoZHJsZW4pO1xcbiBcXG4gXFx0aWYgKCEobXNoZHItXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUVTSF9GTEFHU19BRSkpIHtcXG4gXFx0XFx0Lyogc2l6ZSBvZiB0aGUgZml4ZWQgcGFydCBvZiB0aGUgbWVzaCBoZWFkZXIgKi9cXG4gXFx0XFx0bWVzaF9oZHJsZW4gPSA2O1xcbiBcXG4rXFx0XFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFxcdTAwM2MgMiAqIEVUSF9BTEVOKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuIFxcdFxcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cXG4gXFx0XFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xcbiBcXHRcXHRtZW1tb3ZlKHNrYi1cXHUwMDNlZGF0YSwgaGRyLCBoZHJsZW4gKyBtZXNoX2hkcmxlbik7XFxuQEAgLTE2OSw2ICsxNzksNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0bWVtY3B5KGhkci1cXHUwMDNlYWRkcjIsIGdhdGVfbXBhdGgtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xcbiBcXHRtZW1jcHkoaGRyLVxcdTAwM2VhZGRyMywgZHN0X2FkZHIsIEVUSF9BTEVOKTtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0yMTgsOCArMjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxuIFxcdFxcdGlmIChXQVJOX09OKCFza2IpKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLVxcdTAwM2Vkc3QsIGdhdGVfbXBhdGgpO1xcbi1cXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Z2F0ZV9tcGF0aC1cXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XFxuK1xcdFxcdGlmIChwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cXHUwMDNlZHN0LCBnYXRlX21wYXRoKSA9PSAwKVxcbitcXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Z2F0ZV9tcGF0aC1cXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIFxcbiBcXHRcXHRpZiAoY29weSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM1OjMwLjk2ODI0MzM4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMyMTgyNzI5Nzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gICAgXCJtZXNoX3BhdGhfdGltZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3MDM0MWY1MGU5ZDZjMjJjNTcyOWUzNThlZTZlNzgyMjlmZGJhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNzozNToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtMTMxLDIyICsxMzEsMzIgQEAgdm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKVxuK3N0YXRpYyBpbnQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbitcdFx0XHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjtcbiBcdGludCBtZXNoX2hkcmxlbiwgaGRybGVuO1xuIFx0Y2hhciAqbmV4dF9ob3A7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXHRoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBoZHJsZW4gKyA2KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdG1zaGRyID0gKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBoZHJsZW4pO1xuIFxuIFx0aWYgKCEobXNoZHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfRkxBR1NfQUUpKSB7XG4gXHRcdC8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovXG4gXHRcdG1lc2hfaGRybGVuID0gNjtcbiBcbitcdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyICogRVRIX0FMRU4pXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cbiBcdFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xuIFx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBoZHIsIGhkcmxlbiArIG1lc2hfaGRybGVuKTtcbkBAIC0xNjksNiArMTc5LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMiwgZ2F0ZV9tcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMywgZHN0X2FkZHIsIEVUSF9BTEVOKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTgsOCArMjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXG4gXHRcdGlmIChXQVJOX09OKCFza2IpKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cdTAwM2Vkc3QsIGdhdGVfbXBhdGgpO1xuLVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZnYXRlX21wYXRoLVx1MDAzZWZyYW1lX3F1ZXVlLCBza2IpO1xuK1x0XHRpZiAocHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtXHUwMDNlZHN0LCBnYXRlX21wYXRoKSA9PSAwKVxuK1x0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmdhdGVfbXBhdGgtXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBcdFx0aWYgKGNvcHkpXG4gXHRcdFx0Y29udGludWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNTozMC45NjgyNDQ3OTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ3NjQ0NDcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBgbWFjODAyMTFgIE1lc2ggTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZpeCwgdGhhbmtmdWxseS4gU2VlbXMgbGlrZSB0aGV5J3JlIGJlZWZpbmcgdXAgdGhlIGVycm9yIGhhbmRsaW5nIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCwgY2hhbmdpbmcgaXQgdG8gcmV0dXJuIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLiBUaGF0J3MgYSBnb29kIHN0YXJ0OyBtb3JlIGV4cGxpY2l0IGVycm9yIHNpZ25hbGluZyBpcyBhbHdheXMgd2VsY29tZS5cblxuVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGlzIGFkZGluZyBzZXZlcmFsIGxlbmd0aCBjaGVja3Mgb24gdGhlIGBza2JgIChzb2NrZXQgYnVmZmVyKSB3aXRoaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy4gSSBzZWUgdGhyZWUgY2hlY2tzIHNwZWNpZmljYWxseTogb25lIHZlcmlmaWVzIHRoZSBgc2tiYCBpcyBhdCBsZWFzdCB0aGUgc2l6ZSBvZiBhbiA4MDIuMTEgaGVhZGVyLCBhbm90aGVyIGNoZWNrcyBpdCBoYXMgZW5vdWdoIGRhdGEgZm9yIHRoZSBoZWFkZXIgbGVuZ3RoIHBsdXMgYSBmaXhlZCBvZmZzZXQgb2YgNiBieXRlcywgYW5kIGEgdGhpcmQgbWFrZXMgc3VyZSB0aGVyZSdzIGVub3VnaCBoZWFkcm9vbSBpbiB0aGUgc2tiIGZvciBhZGRpbmcgTUFDIGFkZHJlc3Nlcywgc3BlY2lmaWNhbGx5IDIgKiBgRVRIX0FMRU5gLiBUaGF0J3Mgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nOyBiZXR0ZXIgdG8gcmVqZWN0IGEgbWFsZm9ybWVkIHBhY2tldCB0aGFuIHJpc2sgYSBjcmFzaC4gSSd2ZSBzZWVuIGVub3VnaCBvZiB0aGVzZSB0byBrbm93IHRoYXQgdGhpcyBjYW4gZGVmaW5pdGVseSBiZSBhIHByb2JsZW0uXG5cblRoZSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIGZ1bmN0aW9uIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBjaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGBwcmVwYXJlX2Zvcl9nYXRlYC4gSWYgdGhlIHJldHVybiBpcyB6ZXJvIChzdWNjZXNzKSwgdGhlIGBza2JgIGlzIHF1ZXVlZC4gT3RoZXJ3aXNlLCBpdCBpcyBmcmVlZCB1c2luZyBga2ZyZWVfc2tiYC4gVGhpcyBpcyB0aGUgaW1wb3J0YW50IHBhcnQgYmVjYXVzZSB0aGlzIG1lYW5zIGFueSBvZiB0aGUgZXJyb3JzIHRoYXQgYHByZXBhcmVfZm9yX2dhdGVgIHNpZ25hbHMgYXJlIGhhbmRsZWQsIGFuZCB0aGUgYmFkIHNrYiBpcyBzYWZlbHkgZnJlZWQuIFRoaXMgaXMgd2hhdCBJIGV4cGVjdC5cblxuVGhpcyBjaGFuZ2UgaXMgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gR2l2ZW4gdGhhdCBgbWFjODAyMTFgIGlzIHJlYWNoYWJsZSB2aWEgYG1hYzgwMjExX2h3c2ltYCwgd2hpY2ggaXMgc29mdHdhcmUtZW11bGF0ZWQgYW5kIGZ1enppbmctaGVhdnkgdmlhIHN5emthbGxlciwgaXQncyBhIGNyaXRpY2FsIGZpeC4gSSd2ZSBkZWFsdCB3aXRoIHRoaXMgdHlwZSBvZiB0aGluZyBiZWZvcmUsIGFuZCBzeXprYWxsZXIgZG9lcyBhIGdyZWF0IGpvYiBvZiBmaW5kaW5nIHRoZXNlIG1lbW9yeSBzYWZldHkgcHJvYmxlbXMuXG5cbk5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgSSBoYXZlIHRoZSBjb250ZXh0IHJpZ2h0LiBJIG5lZWQgdG8gY29uZmlybSB0aGUgc2NvcGUsIGFuZCBlbnN1cmUgdGhhdCB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQuIEknbGwgY2hlY2sgdGhhdCBgcHJlcGFyZV9mb3JfZ2F0ZWAgYW5kIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBJIGFzc3VtZSB0aGV5IGFyZSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgY2hhbmdlLiBZZXMsIGJvdGggYXJlIGluZGVlZCBzdGF0aWMuXG5cbkknbGwgYWxzbyBxdWlja2x5IHRyYWNlIHRoZSBjYWxscyB0byBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLiBJJ2xsIHVzZSBteSB0b29scyBhbmQgaWRlbnRpZnkgYWxsIHRoZSBjYWxsZXJzLiBKdXN0IHRvIGJlIHN1cmUuIEknbSBzYXRpc2ZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NjEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNjowMy40NDQ2OTIxODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0NTU3MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9wYXRoX21vdmVfdG9fcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMzQ9c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4NS0vKipcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTg2OiAqIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlIC0gTW92ZSBvciBjb3B5IGZyYW1lcyBmcm9tIG9uZSBtcGF0aCBxdWV1ZSB0byBhbm90aGVyXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4Ny0gKlxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMS0gKi9cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MjAyOnN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZnJvbV9tcGF0aCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NzY9aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk4OS1cXHRcXHRcXHRtcGF0aF9kYmcoc2RhdGEsIFxcXCJGb3J3YXJkaW5nIHRvICVwTVxcXFxuXFxcIiwgZ2F0ZS1cXHUwMDNlZHN0KTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTkwOlxcdFxcdFxcdG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKGdhdGUsIGZyb21fbXBhdGgsIGNvcHkpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05OTEtXFx0XFx0XFx0ZnJvbV9tcGF0aCA9IGdhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM2OjAzLjQ5MzE1NjIzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNzQ0MjgyMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgY2FsbGluZyBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIElzIHRoaXMgYSBwdWJsaWMgZmFjaW5nIGZ1bmN0aW9uLCBwZXJoYXBzIGEgcGFydCBvZiBhbiBBUEk/IE9yIGlzIGl0IGludGVybmFsIHRvIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGNvbXBvbmVudD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgZXhwb3J0ZWQgb3IgY2FsbGVkIGZyb20gb3RoZXIgYXJlYXMgb2YgdGhlIGNvZGViYXNlLiBUaGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCwgYW5kIGdpdmUgbWUgdGhlIHNjb3BlIG9mIHdoZXJlIHRvIGxvb2suIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBzbyBJIHVuZGVyc3RhbmQgd2hhdCB3aWxsIGhhcHBlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDExNCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjA0LjIzNzQ0MjYzN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODIzODY3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXNoX3BhdGhfc2VuZF90b19nYXRlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoLmg9MzI1PWludCBtZXNoX3BhdGhfYWRkX2dhdGUoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzI2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2guaC0zMjctaW50IG1lc2hfZ2F0ZV9udW0oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyOTA9dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTMxNi1cXHRcXHRpZiAoIW1wYXRoLVxcdTAwM2Vpc19nYXRlIFxcdTAwMjZcXHUwMDI2IG1lc2hfZ2F0ZV9udW0oc2RhdGEpIFxcdTAwM2UgMCkge1xcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMzE3OlxcdFxcdFxcdHJldCA9IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTMxOC1cXHRcXHRcXHRpZiAocmV0KVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk1Nz12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2NC0vKipcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTY1OiAqIG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzIC0gc2VuZHMgcGVuZGluZyBmcmFtZXMgdG8gYWxsIGtub3duIG1lc2ggZ2F0ZXNcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTY2LSAqXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc1LSAqL1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NzY6aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05Nzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNzowNC4yODU2ODk4NTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzgzNzgyNjU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgdHJpZ2dlcmVkIGZyb20gYG1lc2hfcGF0aF90aW1lcmAgaW4gYG5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY2AuIFRoYXQncyB0aGUgcHJpbWFyeSBjb250ZXh0LCBhbmQgaXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIEhXTVAgbWVzaCByb3V0aW5nIHByb3RvY29sLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbidzIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZCB3aGVyZSBpdCBmaXRzIGluIHRoZSBleGVjdXRpb24gZmxvdywgZXNwZWNpYWxseSByZWxhdGVkIHRvIHRpbWVkIGV2ZW50cy4gSG93ZXZlciwgSSB3YW50IHRvIHRha2UgYSB3aWRlciBsb29rIHRvIG1ha2Ugc3VyZSBJIGFtIGNvbXBsZXRlbHkgYXdhcmUgb2YgYWxsIG9mIGl0cyB1c2UgY2FzZXMuIFRoaXMgc3VnZ2VzdHMgaXQgbWlnaHQgYWxzbyBiZSBjYWxsZWQgZnJvbSBvdGhlciBwbGFjZXMgYXMgd2VsbDsgbGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBwb3RlbnRpYWwgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IGEgY29tcGxldGUgcGljdHVyZSBiZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgKnRoaXMqIHBhcnRpY3VsYXIgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg2NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjE4LjEyMzUyMDQ4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU4NTQyNTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWVzaC5oPTMyNT1pbnQgbWVzaF9wYXRoX2FkZF9nYXRlKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oOjMyNjppbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzI3LWludCBtZXNoX2dhdGVfbnVtKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjkwPXZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTYtXFx0XFx0aWYgKCFtcGF0aC1cXHUwMDNlaXNfZ2F0ZSBcXHUwMDI2XFx1MDAyNiBtZXNoX2dhdGVfbnVtKHNkYXRhKSBcXHUwMDNlIDApIHtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6MTMxNzpcXHRcXHRcXHRyZXQgPSBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEzMTgtXFx0XFx0XFx0aWYgKHJldClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NTc9dm9pZCBtZXNoX3BhdGhfdHhfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NjQtLyoqXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk2NTogKiBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyAtIHNlbmRzIHBlbmRpbmcgZnJhbWVzIHRvIGFsbCBrbm93biBtZXNoIGdhdGVzXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk2Ni0gKlxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk3NS0gKi9cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTc2OmludCBtZXNoX3BhdGhfc2VuZF90b19nYXRlcyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTc3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6Mzc6MTkuODgyMDY4NjA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgyMDk1NTcyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gdGhlIGBtZXNoX3BhdGhfdGltZXJgKipcblxuT2theSwgc28gSSdtIHplcm9pbmcgaW4gb24gdGhpcyBgbWVzaF9wYXRoX3RpbWVyYC4gSXQncyBhIHRpbWVyIGNhbGxiYWNrLCBzbyB0aGF0J3MgdGhlIHByaW1hcnkgdHJpZ2dlciBmb3Igc29tZXRoaW5nLiBJcyB0aGVyZSAqYW55KiBvdGhlciBtZWNoYW5pc20gdGhhdCBjYWxscyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgPyAgQXMgZmFyIGFzIEkgY2FuIHRlbGwsIG5vLiAgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaGVyZSwgaXQgc2VlbXMgbGlrZSBhIGdvb2QgZm9jdXMgc3ltYm9sLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2sgYSBiaXQgYW5kIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGluIGBtZXNoX3BhdGh0YmwuY2AgdGhhdCByZWxhdGUgdG8gdGhlIHBhdGggdGFibGUgb3IgYXJlIGFsc28gbm9uLXN0YXRpYy4gIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdXNlZnVsIGZvciBtZSByaWdodCBub3cuICBgcHJlcGFyZV9mb3JfZ2F0ZWAgaXMgYWxzbyBzdGF0aWMsIHNvIEkgY2FuIGlnbm9yZSB0aGF0IGZvciBub3cuICBBaCwgYnV0IGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgKmlzKiBleHBvcnRlZCAob3IgYXQgbGVhc3Qgbm9uLXN0YXRpYykuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi5cblxuTm93LCBsZXQncyBjaGVjayBgbmV0L21hYzgwMjExL0tjb25maWdgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSByZXF1aXJlZCBmb3IgYWxsIHRoaXMgdG8gYmUgZW5hYmxlZCwgYW5kIG1heWJlIHRoYXQnbGwgZ2l2ZSBtZSBhIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjM4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjM4LjA5MTYzMDY4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNDE1ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BQzgwMjExX01FU0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjM1PWNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI0ODpjb25maWcgTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL0tjb25maWctMjQ5LVxcdGJvb2wgXFxcIlZlcmJvc2UgbWVzaCBzeW5jaHJvbml6YXRpb24gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI1OTpjb25maWcgTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIGNoYW5uZWwgc3dpdGNoIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjM4LjE0MzY3ODgwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ3OTg4NjUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE1lc2ggTmV0d29ya2luZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIG1lc2ggbmV0d29ya2luZyBpbXBsZW1lbnRhdGlvbiwgYW5kIG15IGZpcnN0IHRob3VnaHQgaXMsIFwiUmlnaHQsIGBNQUM4MDIxMV9NRVNIYCBpcyBkZWZpbml0ZWx5IGEga2V5IHBsYXllciBoZXJlLlwiIEJ1dCwgd2FpdCBhIG1pbnV0ZSwgdG8gbWFrZSB0aGF0IHdvcmssIEknbSBnb2luZyB0byBuZWVkIHRoZSBjb3JlIGBNQUM4MDIxMWAgZnJhbWV3b3JrIGFzIHdlbGwuIExldCdzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBNQUM4MDIxMV9NRVNIYC4gV2hhdCBvdGhlciBwaWVjZXMgb2YgdGhlIHB1enpsZSBkb2VzIGl0IHJlbHkgb24/IEl0J3MgdGltZSB0byBzdGFydCBtYXBwaW5nIG91dCB0aGUgcmVxdWlyZWQgY29tcG9uZW50cyBhbmQgaG93IHRoZXkgZml0IHRvZ2V0aGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHByZXJlcXVpc2l0ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0OTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzozNzo1My42MjM1Njg0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXHRoZWxwXFxuICA2NjpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IG1hYzgwMjExIGludGVybmFscyB3aXRoIGt1bml0LlxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2OTpcXHRcXG4gIDcwOlxcdGNvbmZpZyBNQUM4MDIxMV9NRVNIXFxuICA3MTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgODAyLjExIG1lc2ggb3BlcmF0aW9uIGluIG1hYzgwMjExXFxuICA3NTpcXHRcXHQgIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0LiAgODAyLjExIG1lc2ggY29ubmVjdHMgbXVsdGlwbGUgc3RhdGlvbnNcXG4gIDc2OlxcdFxcdCAgb3ZlciAocG9zc2libHkgbXVsdGktaG9wKSB3aXJlbGVzcyBsaW5rcyB0byBmb3JtIGEgc2luZ2xlIGxvZ2ljYWxcXG4gIDc3OlxcdFxcdCAgTEFOLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRjb25maWcgTUFDODAyMTFfTEVEU1xcbiAgODA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4gIDgxOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gIDgzOlxcdFxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuICA4NDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM3OjUzLjYyMzY1MTE5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTAwNTY5NTE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1BQzgwMjExIE1lc2ggQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIHRoZSBgTUFDODAyMTFfTUVTSGAgY29uZmlndXJhdGlvbi4gUmlnaHQsIHRoYXQncyBidWlsdCBvbiB0b3Agb2YgYE1BQzgwMjExYCwgd2hpY2ggaW4gdHVybiByZWxpZXMgb24gYENGRzgwMjExYC4gTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgZG9lcyBlbmFibGluZyBqdXN0IGBNQUM4MDIxMV9NRVNIYCBjb3ZlciBldmVyeXRoaW5nIHdlIG5lZWQgZm9yIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IExvb2tzIGxpa2UgdGhlIGFuc3dlciBpcyB5ZXMsIGBNQUM4MDIxMV9NRVNIYCBhbG9uZSBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGVzc2VudGlhbCBmdW5jdGlvbiBvciBzeW1ib2wgdG8gZXhhbWluZS4gVGhlIHRleHQgbWVudGlvbnMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCwgc28gdGhhdCdzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoYXQgZnVuY3Rpb24gaXMgdGhlIHByaW1hcnkgdGFyZ2V0IG9mIGFueSBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gaXMgYG1lc2hfcGF0aF9hZGRfZ2F0ZWAgYWxzbyB0b3VjaGVkPyBObywgaXQncyBub3QuIFRoZSBwYXRjaCBmb2N1c2VzIG9uIGBwcmVwYXJlX2Zvcl9nYXRlYCBhbmQgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYC4gTm93LCB0aGUgY3J1Y2lhbCBsaW5rOiB3aG8gY2FsbHMgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gT25seSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLiBCaW5nby4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbjogYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyBpbmRlZWQgdGhlIGZvY2FsIHBvaW50IGhlcmUuXG5cbkknbGwgcHJvY2VlZCBieSBtYWtpbmcgc3VyZSBubyBvdGhlciBmdW5jdGlvbnMgYXJlIGNydWNpYWwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAxOCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjE4LjYyOTM0OTk2NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NDQzOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9wYXRoX21vdmVfdG9fcXVldWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMzQ9c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4NS0vKipcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTg2OiAqIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlIC0gTW92ZSBvciBjb3B5IGZyYW1lcyBmcm9tIG9uZSBtcGF0aCBxdWV1ZSB0byBhbm90aGVyXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTE4Ny0gKlxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMS0gKi9cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MjAyOnN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIwMy1cXHRcXHRcXHRcXHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZnJvbV9tcGF0aCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05NzY9aW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTk4OS1cXHRcXHRcXHRtcGF0aF9kYmcoc2RhdGEsIFxcXCJGb3J3YXJkaW5nIHRvICVwTVxcXFxuXFxcIiwgZ2F0ZS1cXHUwMDNlZHN0KTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTkwOlxcdFxcdFxcdG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKGdhdGUsIGZyb21fbXBhdGgsIGNvcHkpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05OTEtXFx0XFx0XFx0ZnJvbV9tcGF0aCA9IGdhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjE4LjY3NjE5OTk1MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjkyMDcwMzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqQW5hbHl6aW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgQ2FsbGVycyBhbmQgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBpcyB0aGUgb25seSBmdW5jdGlvbiBjYWxsaW5nIGl0IGRpcmVjdGx5LiBOb3csIGEgY3J1Y2lhbCBhc3BlY3Qgb2YgdW5kZXJzdGFuZGluZyB0aGlzIGNvZGUgaXMgZGV0ZXJtaW5pbmcgaXRzIHNjb3BlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IGluZGlyZWN0IGNhbGxzLCBvciB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdmlzaWJsZSB0byBhbnkgb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzOiBgaW50IG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKWAuXG5cbkFscmlnaHQsIEkgc2VlIGl0J3Mgbm90IGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBUaGF0IG1lYW5zIGl0J3MgZ2xvYmFsbHkgdmlzaWJsZSB3aXRoaW4gdGhlIGNvbXBpbGF0aW9uIHVuaXQsIG9yIHBlcmhhcHMgZXZlbiBiZXlvbmQgaWYgaXQncyBkZWNsYXJlZCBpbiBhIGhlYWRlciBmaWxlIHRoYXQncyBpbmNsdWRlZCBlbHNld2hlcmUuIFNvLCBldmVuIHRob3VnaCBpdCAqYXBwZWFycyogdG8gb25seSBiZSBjYWxsZWQgaW4gb25lIHBsYWNlIGN1cnJlbnRseSwgdGhhdCdzIG5vdCBkZWZpbml0aXZlLiBUaGVyZSdzIGEgcmlzayB0aGF0IG90aGVyIG1vZHVsZXMgY291bGQgcG90ZW50aWFsbHkgY2FsbCB0aGlzIGZ1bmN0aW9uLiBTbywgYmVmb3JlIG1vdmluZyBvbiwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgaXMgYW55IG90aGVyIGNvZGUgdGhhdCBjYWxscyBgcHJlcGFyZV9mb3JfZ2F0ZWAuIFRoYXQncyB0aGUgbmV4dCBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjM1LjU5NjkwOTE5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg1Mzg5MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJlcGFyZV9mb3JfZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTExNT12b2lkIG1lc2hfcGF0aF9hc3NpZ25fbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTMzLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMzQ6c3RhdGljIGludCBwcmVwYXJlX2Zvcl9nYXRlKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKmRzdF9hZGRyLFxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMzUtXFx0XFx0XFx0ICAgIHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MjAyPXN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMjMxLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoyMzI6XFx0XFx0aWYgKHByZXBhcmVfZm9yX2dhdGUoc2tiLCBnYXRlX21wYXRoLVxcdTAwM2Vkc3QsIGdhdGVfbXBhdGgpID09IDApXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTIzMy1cXHRcXHRcXHRza2JfcXVldWVfdGFpbChcXHUwMDI2Z2F0ZV9tcGF0aC1cXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjM1LjY0NTQ1MzM3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTM0MjM3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZXNoIFBhdGggTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gemVyb2luZyBpbiBvbiB0aGlzIGBtZXNoX3BhdGhgIHN0dWZmLiBJJ20gc2VlaW5nIGEgY29yZSBmdW5jdGlvbiBoZXJlLCBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLCBhbmQgdGhhdCdzIGl0LCB0aGF0J3Mgd2hhdCdzIGluaXRpYWxseSBqdW1waW5nIG91dCBhdCBtZS5cblxuVGhlbiBJJ20gcXVpY2tseSBwaXZvdGluZyB0byB3aGF0IHNlZW1zIHRvIGJlIHRoZSBzdWJzZXF1ZW50IHBvaW50IG9mIGludGVyZXN0LCB3aGljaCBhcHBlYXJzIHRvIGJlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBwcm9jZXNzaW5nIHNlZW1zIHRvIHRha2UgcGxhY2UuIEkgbmVlZCB0byBrZWVwIHRoYXQgb25lIGF0IHRoZSB0b3Agb2YgbXkgbWluZCBhcyB0aGUgY2VudHJhbCBmdW5jdGlvbi5cblxuUmlnaHQsIGxldCBtZSBrZWVwIGFuIGV5ZSBvbiB0aGVzZSBjb25maWd1cmF0aW9ucyB0b28sIGBNQUM4MDIxMV9NRVNIYCBhbmQgYE1BQzgwMjExYC4gU2luY2UgSSBhbSBmb2N1c2luZyBvbiB0aGlzIG1lc2ggcGF0aCwgSSBvbmx5IG5lZWQgYE1BQzgwMjExX01FU0hgLlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24gaXNuJ3QganVzdCBjYWxsZWQgb3V0IG9mIHRoZSBibHVlLiBJdCdzIHRpZWQgdG8gYG1lc2hfcGF0aF90aW1lcmAsIGFuZCB0aGF0J3MgYSAqdGltZXIgY2FsbGJhY2sqISBPa2F5LCBub3cgSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHdob2xlIG1lY2hhbmlzbS5cblxuU28sIGhvdyBpcyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIHRyaWdnZXJlZD8gSXMgdGhlIHRpbWVyIGNhbGxiYWNrIHRoZSBvbmx5IHdheSB0byByZWFjaCBpdD8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQncyBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIGBtZXNoX3BhdGhfdGltZXJgIGZ1bmN0aW9uIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6Mzg6NDAuNTc5Njk1NTA3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI5MTE0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZXNoX3BhdGhfdGltZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD03NzA9c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHtcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC03NzEtXFx0c3RydWN0IHRpbWVyX2xpc3QgaG91c2VrZWVwaW5nX3RpbWVyO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjc3MjpcXHRzdHJ1Y3QgdGltZXJfbGlzdCBtZXNoX3BhdGhfdGltZXI7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtNzczLVxcdHN0cnVjdCB0aW1lcl9saXN0IG1lc2hfcGF0aF9yb290X3RpbWVyO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guYz02NDU9aW50IG1lc2hfYWRkX2VodF9vcGVyX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2guYy02NzItXFxubmV0L21hYzgwMjExL21lc2guYzo2NzM6c3RhdGljIHZvaWQgaWVlZTgwMjExX21lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbWFjODAyMTEvbWVzaC5jLTY3NC17XFxubmV0L21hYzgwMjExL21lc2guYy02NzUtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPVxcbm5ldC9tYWM4MDIxMS9tZXNoLmM6Njc2OlxcdFxcdHRpbWVyX2NvbnRhaW5lcl9vZihzZGF0YSwgdCwgdS5tZXNoLm1lc2hfcGF0aF90aW1lcik7XFxubmV0L21hYzgwMjExL21lc2guYy02NzctXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jPTExOTk9dm9pZCBpZWVlODAyMTFfc3RvcF9tZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2guYy0xMjMwLVxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZzZGF0YS1cXHUwMDNldS5tZXNoLm1lc2hfcGF0aF9yb290X3RpbWVyKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jOjEyMzE6XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm1lc2gubWVzaF9wYXRoX3RpbWVyKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jLTEyMzItXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jPTE3NTc9dm9pZCBpZWVlODAyMTFfbWVzaF9pbml0X3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2guYy0xNzc3LVxcbm5ldC9tYWM4MDIxMS9tZXNoLmM6MTc3ODpcXHR0aW1lcl9zZXR1cChcXHUwMDI2aWZtc2gtXFx1MDAzZW1lc2hfcGF0aF90aW1lciwgaWVlZTgwMjExX21lc2hfcGF0aF90aW1lciwgMCk7XFxubmV0L21hYzgwMjExL21lc2guYy0xNzc5LVxcdHRpbWVyX3NldHVwKFxcdTAwMjZpZm1zaC1cXHUwMDNlbWVzaF9wYXRoX3Jvb3RfdGltZXIsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM1Nz1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzU4OnZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1OS12b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz05OTY9c3RhdGljIHZvaWQgbWVzaF9xdWV1ZV9wcmVxKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoLCB1OCBmbGFncylcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMDQ0LVxcdH0gZWxzZVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMDQ1OlxcdFxcdG1vZF90aW1lcihcXHUwMDI2aWZtc2gtXFx1MDAzZW1lc2hfcGF0aF90aW1lciwgaWZtc2gtXFx1MDAzZWxhc3RfcHJlcSArXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEwNDYtXFx0XFx0XFx0XFx0XFx0XFx0bWluX3ByZXFfaW50X2ppZmYoc2RhdGEpKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjU4PWludCBtZXNoX25leHRob3BfbG9va3VwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODktXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyOTA6dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyOTEte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTQxNj1zdHJ1Y3QgbWVzaF9wYXRoICptZXNoX3BhdGhfbmV3KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQzMi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bmV3X21wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6NDMzOlxcdHRpbWVyX3NldHVwKFxcdTAwMjZuZXdfbXBhdGgtXFx1MDAzZXRpbWVyLCBtZXNoX3BhdGhfdGltZXIsIDApO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy00MzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjM4OjQwLjYyODk5NDY2MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDE5ODU2NzU3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZXNoIFBhdGggVGltZXIqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG1lc2hfcGF0aF9uZXdgLCBzcGVjaWZpY2FsbHkgYXNzaWduZWQgdG8gYG5ld19tcGF0aC1cdTAwM2V0aW1lcmAuIFRoYXQgY29uZmlybXMgbXkgaW5pdGlhbCB0aG91Z2h0IOKAkyB0aGlzIGlzIGEgdGltZXIgZGVkaWNhdGVkIHRvIGVhY2ggaW5kaXZpZHVhbCBtZXNoIHBhdGgsIHdoaWNoIG1ha2VzIHNlbnNlIGZyb20gYSByZXNvdXJjZSBwZXJzcGVjdGl2ZS4gVGhlIHRpbWVyJ3MgcHJpbWFyeSByb2xlLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIHRvIG1hbmFnZSBtZXNoIHBhdGggZXhwaXJhdGlvbiBhbmQgYW55IG5lY2Vzc2FyeSBtYWludGVuYW5jZS4gSSdtIHdvbmRlcmluZyB0aG91Z2gsIGFyZSB0aGVyZSAqYW55KiBvdGhlciBlbnRyeSBwb2ludHMgdG8gdGhlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnVuY3Rpb24/IEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGFsbCB0aGUgcG90ZW50aWFsIGNhbGwgcGF0aHMuIEFoLCB3YWl0IGEgbWludXRlLi4uIEkgcmVtZW1iZXIgc2VlaW5nIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgYmVpbmcgY2FsbGVkICp3aXRoaW4qIGBtZXNoX3BhdGhfdGltZXJgLiBTbyBpdOKAmXMgbGlrZWx5IGEgZGlyZWN0IGRlcGVuZGVuY3kuIExldCBtZSBjb25maXJtIHRoYXQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBgbWVzaF9wYXRoX3RpbWVyYCBmdW5jdGlvbiBkZWZpbml0aW9uIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGdvIHRvIGBuZXQvbWFjODAyMTEvbWVzaF9od21wLmNgIGZvciB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMiwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDoyMi42MTQ2NzM4NzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjkwOlxcdHZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbjEyOTE6XFx0e1xcbjEyOTI6XFx0XFx0c3RydWN0IG1lc2hfcGF0aCAqbXBhdGggPSB0aW1lcl9jb250YWluZXJfb2YobXBhdGgsIHQsIHRpbWVyKTtcXG4xMjkzOlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbXBhdGgtXFx1MDAzZXNkYXRhO1xcbjEyOTQ6XFx0XFx0aW50IHJldDtcXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0aWYgKHNkYXRhLVxcdTAwM2Vsb2NhbC1cXHUwMDNlcXVpZXNjaW5nKVxcbjEyOTc6XFx0XFx0XFx0cmV0dXJuO1xcbjEyOTg6XFx0XFxuMTI5OTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4xMzAwOlxcdFxcdGlmIChtcGF0aC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNRVNIX1BBVEhfUkVTT0xWRUQgfHxcXG4xMzAxOlxcdFxcdFxcdFxcdCghKG1wYXRoLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1FU0hfUEFUSF9SRVNPTFZJTkcpKSkge1xcbjEzMDI6XFx0XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH4oTUVTSF9QQVRIX1JFU09MVklORyB8IE1FU0hfUEFUSF9SRVNPTFZFRCk7XFxuMTMwMzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbjEzMDQ6XFx0XFx0fSBlbHNlIGlmIChtcGF0aC1cXHUwMDNlZGlzY292ZXJ5X3JldHJpZXMgXFx1MDAzYyBtYXhfcHJlcV9yZXRyaWVzKHNkYXRhKSkge1xcbjEzMDU6XFx0XFx0XFx0KyttcGF0aC1cXHUwMDNlZGlzY292ZXJ5X3JldHJpZXM7XFxuMTMwNjpcXHRcXHRcXHRtcGF0aC1cXHUwMDNlZGlzY292ZXJ5X3RpbWVvdXQgKj0gMjtcXG4xMzA3OlxcdFxcdFxcdG1wYXRoLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+TUVTSF9QQVRIX1JFUV9RVUVVRUQ7XFxuMTMwODpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbjEzMDk6XFx0XFx0XFx0bWVzaF9xdWV1ZV9wcmVxKG1wYXRoLCAwKTtcXG4xMzEwOlxcdFxcdH0gZWxzZSB7XFxuMTMxMTpcXHRcXHRcXHRtcGF0aC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfihNRVNIX1BBVEhfUkVTT0xWSU5HIHxcXG4xMzEyOlxcdFxcdFxcdFxcdFxcdCAgTUVTSF9QQVRIX1JFU09MVkVEIHxcXG4xMzEzOlxcdFxcdFxcdFxcdFxcdCAgTUVTSF9QQVRIX1JFUV9RVUVVRUQpO1xcbjEzMTQ6XFx0XFx0XFx0bXBhdGgtXFx1MDAzZWV4cF90aW1lID0gamlmZmllcztcXG4xMzE1OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZtcGF0aC1cXHUwMDNlc3RhdGVfbG9jayk7XFxuMTMxNjpcXHRcXHRcXHRpZiAoIW1wYXRoLVxcdTAwM2Vpc19nYXRlIFxcdTAwMjZcXHUwMDI2IG1lc2hfZ2F0ZV9udW0oc2RhdGEpIFxcdTAwM2UgMCkge1xcbjEzMTc6XFx0XFx0XFx0XFx0cmV0ID0gbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMobXBhdGgpO1xcbjEzMTg6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4xMzE5OlxcdFxcdFxcdFxcdFxcdG1od21wX2RiZyhzZGF0YSwgXFxcIm5vIGdhdGUgd2FzIHJlYWNoYWJsZVxcXFxuXFxcIik7XFxuMTMyMDpcXHRcXHRcXHR9IGVsc2VcXG4xMzIxOlxcdFxcdFxcdFxcdG1lc2hfcGF0aF9mbHVzaF9wZW5kaW5nKG1wYXRoKTtcXG4xMzIyOlxcdFxcdH1cXG4xMzIzOlxcdH1cXG4xMzI0OlxcdFxcbjEzMjU6XFx0dm9pZCBtZXNoX3BhdGhfdHhfcm9vdF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4xMzI2OlxcdHtcXG4xMzI3OlxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUubWVzaDtcXG4xMzI4OlxcdFxcdHUzMiBpbnRlcnZhbCA9IGlmbXNoLVxcdTAwM2Vtc2hjZmcuZG90MTFNZXNoSFdNUFJhbm5JbnRlcnZhbDtcXG4xMzI5OlxcdFxcdHU4IGZsYWdzLCB0YXJnZXRfZmxhZ3MgPSAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDoyMi42MTQ3ODYyMTVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU1NzI2ODkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVzaCBQYXRoIEZhaWx1cmUgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBmdW5jdGlvbiDigJMgaXQgc2VlbXMgbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50IHdoZW4gbWVzaCBwYXRoIHJlc29sdXRpb24gZmFpbHMgYWZ0ZXIgYSBidW5jaCBvZiByZXRyaWVzLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBOb3csIGlzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCAqbW92ZXMqIGEgcGF0aCB0byBhIHF1ZXVlIG90aGVyIHRoYW4gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYD8gTGV0IG1lIHNlZS4uLiBOb3BlLiBBbmQgdGhlIHNhbWUgcXVlc3Rpb24gYWJvdXQgYHByZXBhcmVfZm9yX2dhdGVgPyBBbnl0aGluZyBlbHNlIGNhbGxzIHRoYXQ/IE5vcGUsIGp1c3QgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYC5cblxuQWxyaWdodCwgSSdtIGxpa2luZyBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGFzIHRoZSBwcmltYXJ5IGZvY3VzLCBidXQgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBzdGF0aWMgZnVuY3Rpb24sIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAuIEFueXRoaW5nIHRoZXJlIHRoYXQgY291bGQgaW5mbHVlbmNlIHRoaW5ncz8gTm8sIGl0J3MganVzdCBhIGhlbHBlci4gV2hhdCBhYm91dCBzb21ldGhpbmcgaW4gYG1lc2hfcGF0aF90eF9wZW5kaW5nYD8gSG1tLCBkb2VzICp0aGF0KiBjYWxsIGBwcmVwYXJlX2Zvcl9nYXRlYD8gTm8sIGl0IGRvZXNuJ3QuIE9rYXksIEknbGwga2VlcCBhbiBleWUgb24gdGhhdCBvbmUgYW5kIGRvdWJsZSBjaGVjayBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDoyOS4xNzIwNTkyMzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTU2NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lc2hfcGF0aF90eF9wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL21lc2guaD0zNTM9dm9pZCBtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2guaDozNTQ6dm9pZCBtZXNoX3BhdGhfdHhfcGVuZGluZyhzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2guaC0zNTUtdm9pZCBtZXNoX3BhdGh0YmxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MzQ0PXN0YXRpYyB1MzIgaHdtcF9yb3V0ZV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy00ODMtXFx0XFx0XFx0ZXdtYV9tZXNoX2ZhaWxfYXZnX2FkZChcXHUwMDI2c3RhLVxcdTAwM2VtZXNoLVxcdTAwM2VmYWlsX2F2ZywgMSk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjQ4NDpcXHRcXHRcXHRtZXNoX3BhdGhfdHhfcGVuZGluZyhtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTQ4NS1cXHRcXHRcXHQvKiBkcmFmdCBzYXlzIHByZXFfaWQgc2hvdWxkIGJlIHNhdmVkIHRvLCBidXQgdGhlcmUgZG9lc1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTUzMy1cXHRcXHRcXHRld21hX21lc2hfZmFpbF9hdmdfYWRkKFxcdTAwMjZzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZWZhaWxfYXZnLCAxKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6NTM0OlxcdFxcdFxcdG1lc2hfcGF0aF90eF9wZW5kaW5nKG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtNTM1LVxcdFxcdH0gZWxzZVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTkzNz1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTQ5LS8qKlxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5NTA6ICogbWVzaF9wYXRoX3R4X3BlbmRpbmcgLSBzZW5kcyBwZW5kaW5nIGZyYW1lcyBpbiBhIG1lc2ggcGF0aCBxdWV1ZVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTEtICpcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTYtICovXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjk1Nzp2b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy05NTgte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTk3Nj1pbnQgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXMoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTAwMS1cXHRcXHRtcGF0aF9kYmcoc2RhdGEsIFxcXCJTZW5kaW5nIHRvICVwTVxcXFxuXFxcIiwgZ2F0ZS1cXHUwMDNlZHN0KTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTAwMjpcXHRcXHRtZXNoX3BhdGhfdHhfcGVuZGluZyhnYXRlKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTAwMy1cXHR9XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTA2MD12b2lkIG1lc2hfcGF0aF9maXhfbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDc0LVxcdGV3bWFfbWVzaF9mYWlsX2F2Z19hZGQoXFx1MDAyNm5leHRfaG9wLVxcdTAwM2VtZXNoLVxcdTAwM2VmYWlsX2F2ZywgMSk7XFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjEwNzU6XFx0bWVzaF9wYXRoX3R4X3BlbmRpbmcobXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDc2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6MjkuMjIxMjIyMDIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzNzgxNTY2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMgaW4gdGhlIE1lc2ggTmV0d29ya2luZyBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIHRhcmdldCB0aGlzIG1lc2ggbmV0d29ya2luZyBjb2RlIGZvciBmdXp6aW5nLiBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGxvb2tzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGJlY2F1c2UgaXQgY2FsbHMgYG1lc2hfcGF0aF90eF9wZW5kaW5nKGdhdGUpYC4gTXkgaW5pdGlhbCBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AuXG5cbkhvbGQgb24sIEkgYWxzbyBzZWUgdGhhdCBgcHJlcGFyZV9mb3JfZ2F0ZWAgZ2V0cyBjYWxsZWQgZnJvbSBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBIbW0sIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IG9ubHkgYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBjYWxscyBgbWVzaF9wYXRoX21vdmVfdG9fcXVldWVgLiBHb29kLCBjb25maXJtZWQuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSBjb25maWdzLiBgTUFDODAyMTFfTUVTSGAgc2VlbXMgdG8gYmUgdGhlIGNyaXRpY2FsIG9uZSBoZXJlLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdC5cblxuQ2FuIEkgYWN0dWFsbHkgZ2V0IHRvIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgZnJvbSB1c2Vyc3BhY2U/IEl0J3MgYSB0aW1lciBjYWxsYmFjaywgc28gaXQncyByZWFjaGFibGUgaWYgbWVzaCBuZXR3b3JraW5nIGlzIGNvbmZpZ3VyZWQgYW5kIHJ1bm5pbmcuIFN5emthbGxlciBjYW4gY29uZmlndXJlIG1hYzgwMjExIG1lc2ggaW50ZXJmYWNlcyBhbmQgc2VuZCBwYWNrZXRzLCBzbyB0aGF0J3MgYSB5ZXMuIEdvb2QuXG5cbldoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbnRlcmVzdGluZz8gYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBpcyBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgbm90IGdvaW5nIHRvIGJlIGluIHRoZSBzeW1ib2wgdGFibGUgZm9yIGZ1enppbmcuIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgZXhwb3J0ZWQsIG9yIGF0IGxlYXN0IG5vbi1zdGF0aWMsIHNvIGl0J3MgYSBwb3NzaWJpbGl0eS4gV2hhdCBhYm91dCBgbWVzaF9wYXRoX3RpbWVyYD8gSXQncyBhbHNvIG5vbi1zdGF0aWMsIHNvIG1heWJlIHRoYXQncyBhbHNvIGFuIGludGVyZXN0aW5nIHRhcmdldC4gV2FpdCBhIHNlY29uZCwgaXMgYG1lc2hfcGF0aF90aW1lcmAgYWN0dWFsbHkgbm9uLXN0YXRpYz8gTGV0IG1lIGNvbmZpcm0uIFllcCwgYHZvaWQgbWVzaF9wYXRoX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KWAgaXMgaW4gYG5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuY2AsIGFuZCBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgIGlzIGluIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLlxuXG5Pa2F5LCBzbyBsZXQncyBhZGQgYG1lc2hfcGF0aF90aW1lcmAgdG8gdGhlIGxpc3Qgb2YgcG90ZW50aWFsIGZ1bmN0aW9ucyBJIHdhbnQgdG8gaW52ZXN0aWdhdGUgbW9yZS4gSSBzaG91bGQgcHJvYmFibHkgbm93IGdvIGNoZWNrIGBtZXNoX3BhdGhfdGltZXJgIG1vcmUgY2xvc2VseSBpbiBgbmV0L21hYzgwMjExL21lc2hfaHdtcC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6MzguNTk5MzgyOTI4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDgyMTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2b2lkIG1lc2hfcGF0aF90aW1lclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9tZXNoLmg9MzU3PWludCBtZXNoX3BhdGhfZGVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjb25zdCB1OCAqYWRkcik7XFxubmV0L21hYzgwMjExL21lc2guaDozNTg6dm9pZCBtZXNoX3BhdGhfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzU5LXZvaWQgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3Aoc3RydWN0IHN0YV9pbmZvICpzdGEpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4OS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM6MTI5MDp2b2lkIG1lc2hfcGF0aF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI5MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjQwOjM4LjY1MDIxMDQ1M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDA2Mzk0MDA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBNZXNoIEdhdGUgUHJlcGFyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWVzaF9wYXRoX3RpbWVyYCBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZ29vZCB0byBjb25maXJtLiBJIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBJIHdhcyBmb2xsb3dpbmcgYSB2YWxpZCBjYWxsIGNoYWluLiBJdCBsb29rcyBsaWtlIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYWxscyB0aGUgdGltZXIuIEkndmUgcGlucG9pbnRlZCBteSBmb2N1czogYG1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzYCBhbmQgYG1lc2hfcGF0aF90aW1lcmAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYE1BQzgwMjExX01FU0hgLCBhbmQgSSd2ZSBjb25maXJtZWQgdGhhdCBgTUFDODAyMTFfTUVTSGAgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBzbyBJJ2xsIGluY2x1ZGUgYm90aC5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGFjdHVhbCBwYXRjaC4gSXQgY2hhbmdlcyB0aGUgYHByZXBhcmVfZm9yX2dhdGVgIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBgaW50YCByYXRoZXIgdGhhbiBgdm9pZGAuIFRoaXMgc3VnZ2VzdHMgYW4gaW1wb3J0YW50IHNoaWZ04oCUaXQgaW50cm9kdWNlcyBlcnJvciBoYW5kbGluZy4gSXQgbm93IGluY2x1ZGVzIG11bHRpcGxlIGNoZWNrcyB0byBtYWtlIHN1cmUgYHNrYmAgaXMgb2YgYSB2YWxpZCBzaXplIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggYW55IGRhdGEgbWFuaXB1bGF0aW9uLiBTcGVjaWZpY2FsbHksIGl0J3MgY2hlY2tpbmcgdGhhdCB0aGUgYHNrYmAgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIDgwMi4xMSBoZWFkZXIsIHRoZSBoZWFkZXIgbGVuZ3RoLCBhbmQgcm9vbSBmb3IgYWRkaXRpb25hbCBhZGRyZXNzZXMgYWZ0ZXIgdGhlIDgwMi4xMSBoZWFkZXIuIEZ1cnRoZXIsIGl0IGNoZWNrcyBpZiBgc2tiX2hlYWRyb29tYCBpcyBzdWZmaWNpZW50IHRvIGNvbnRhaW4gdGhlIGV4dGVuZGVkIGFkZHJlc3MuIEltcG9ydGFudGx5LCBhbnkgZXJyb3JzIHRyaWdnZXIgYHJldHVybiAtRUlOVkFMYCwgcHJldmVudGluZyBmdXJ0aGVyIHByb2Nlc3NpbmcuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFpbWVkIGF0IHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBtb2RpZnlpbmcgdGhlIGBza2JgLiBUaGUgY2FsbHNpdGUgb2YgYHByZXBhcmVfZm9yX2dhdGVgIGluIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgZm9yIG5vbi16ZXJvIHJldHVybiBjb2RlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciwgdGhlIGBza2JgIGlzIGZyZWVkLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbnZvbHZpbmcgYm91bmRzIGNoZWNraW5nIGFuZCBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIGBza2JgIHN0cnVjdHVyZXMsIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBwYXRjaCBhbmQgZW5zdXJlIGl0IHByZXZlbnRzIHRoZSBwb3RlbnRpYWwgaXNzdWVzIGl0J3MgZGVzaWduZWQgdG8gbWl0aWdhdGUuIEknbSByZWFkeSB0byBwcm9jZWVkIHdpdGggc2V0dGluZyB0aGUgcmVzdWx0cyBhbmQgbW92aW5nIGZvcndhcmQgd2l0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDExOSwiT3V0cHV0VG9rZW5zIjoxNTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6NTIuNzE0MTU0NDM2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzODM0NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNcIixcbiAgICBcIm1lc2hfcGF0aF90aW1lclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwcmVwYXJlX2Zvcl9nYXRlYCBpbiBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIGFjY2VzcyB3aGVuIG1hbmlwdWxhdGluZyBza2IgaGVhZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIGNhbGxlZCB2aWEgYG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlYCBmcm9tIGBtZXNoX3BhdGhfc2VuZF90b19nYXRlc2AsIHdoaWNoIGlzIHRyaWdnZXJlZCBieSBgbWVzaF9wYXRoX3RpbWVyYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfcGF0aF9zZW5kX3RvX2dhdGVzXCIsXG4gICAgXCJtZXNoX3BhdGhfdGltZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcHJlcGFyZV9mb3JfZ2F0ZWAgaW4gbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgd2hlbiBtYW5pcHVsYXRpbmcgc2tiIGhlYWRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBjYWxsZWQgdmlhIGBtZXNoX3BhdGhfbW92ZV90b19xdWV1ZWAgZnJvbSBgbWVzaF9wYXRoX3NlbmRfdG9fZ2F0ZXNgLCB3aGljaCBpcyB0cmlnZ2VyZWQgYnkgYG1lc2hfcGF0aF90aW1lcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjQwOjUyLjc5NTU0NjIyN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4NTg1Mzc0NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTc6NDA6NTIuNzk2MTU3NjY3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzODU4NDc1ODQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tzIHRvIGBza2ItXFx1MDAzZWxlbmAgYW5kIGBza2JfaGVhZHJvb20oc2tiKWAgaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIElFRUUgODAyLjExIGhlYWRlciBhbmQgbWVzaCBoZWFkZXIsIGFuZCB3aGVuIHB1c2hpbmcgZGF0YSB0byB0aGUgc2tiLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM3MDM0MWY1MGU5ZDZjMjJjNTcyOWUzNThlZTZlNzgyMjlmZGJhNjhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNzozNToyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uYjM0NGYzMDVhODVmMCAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtMTMxLDIyICsxMzEsMzIgQEAgdm9pZCBtZXNoX3BhdGhfYXNzaWduX25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZtcGF0aC1cdTAwM2VmcmFtZV9xdWV1ZS5sb2NrLCBmbGFncyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHByZXBhcmVfZm9yX2dhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqZHN0X2FkZHIsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgbWVzaF9wYXRoICpnYXRlX21wYXRoKVxuK3N0YXRpYyBpbnQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbitcdFx0XHQgICAgc3RydWN0IG1lc2hfcGF0aCAqZ2F0ZV9tcGF0aClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IGllZWU4MDIxMXNfaGRyICptc2hkcjtcbiBcdGludCBtZXNoX2hkcmxlbiwgaGRybGVuO1xuIFx0Y2hhciAqbmV4dF9ob3A7XG4gXG4rXHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLVx1MDAzZWRhdGE7XG4gXHRoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbitcbitcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBoZHJsZW4gKyA2KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdG1zaGRyID0gKHN0cnVjdCBpZWVlODAyMTFzX2hkciAqKSAoc2tiLVx1MDAzZWRhdGEgKyBoZHJsZW4pO1xuIFxuIFx0aWYgKCEobXNoZHItXHUwMDNlZmxhZ3MgXHUwMDI2IE1FU0hfRkxBR1NfQUUpKSB7XG4gXHRcdC8qIHNpemUgb2YgdGhlIGZpeGVkIHBhcnQgb2YgdGhlIG1lc2ggaGVhZGVyICovXG4gXHRcdG1lc2hfaGRybGVuID0gNjtcbiBcbitcdFx0aWYgKHNrYl9oZWFkcm9vbShza2IpIFx1MDAzYyAyICogRVRIX0FMRU4pXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRcdC8qIG1ha2Ugcm9vbSBmb3IgdGhlIHR3byBleHRlbmRlZCBhZGRyZXNzZXMgKi9cbiBcdFx0c2tiX3B1c2goc2tiLCAyICogRVRIX0FMRU4pO1xuIFx0XHRtZW1tb3ZlKHNrYi1cdTAwM2VkYXRhLCBoZHIsIGhkcmxlbiArIG1lc2hfaGRybGVuKTtcbkBAIC0xNjksNiArMTc5LDcgQEAgc3RhdGljIHZvaWQgcHJlcGFyZV9mb3JfZ2F0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICpkc3RfYWRkcixcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMiwgZ2F0ZV9tcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYuYWRkciwgRVRIX0FMRU4pO1xuIFx0bWVtY3B5KGhkci1cdTAwM2VhZGRyMywgZHN0X2FkZHIsIEVUSF9BTEVOKTtcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKipcbkBAIC0yMTgsOCArMjI5LDEwIEBAIHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9tb3ZlX3RvX3F1ZXVlKHN0cnVjdCBtZXNoX3BhdGggKmdhdGVfbXBhdGgsXG4gXHRcdGlmIChXQVJOX09OKCFza2IpKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRwcmVwYXJlX2Zvcl9nYXRlKHNrYiwgZ2F0ZV9tcGF0aC1cdTAwM2Vkc3QsIGdhdGVfbXBhdGgpO1xuLVx0XHRza2JfcXVldWVfdGFpbChcdTAwMjZnYXRlX21wYXRoLVx1MDAzZWZyYW1lX3F1ZXVlLCBza2IpO1xuK1x0XHRpZiAocHJlcGFyZV9mb3JfZ2F0ZShza2IsIGdhdGVfbXBhdGgtXHUwMDNlZHN0LCBnYXRlX21wYXRoKSA9PSAwKVxuK1x0XHRcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNmdhdGVfbXBhdGgtXHUwMDNlZnJhbWVfcXVldWUsIHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcbiBcdFx0aWYgKGNvcHkpXG4gXHRcdFx0Y29udGludWU7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNzo0MDo1Mi43OTYxNjAzMTZaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4NTg0NzM0NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lc2ggUGF0aCBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBwcmVwYXJlX2Zvcl9nYXRlYCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQncyBhZGRpbmcgbGVuZ3RoIGNoZWNrcyBmb3IgdGhlIGBza2JgIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIGRhdGEsIHdoaWNoIGlzIGEgdmVyeSBnb29kIHByYWN0aWNlLiBTcGVjaWZpY2FsbHksIGl0J3MgZ3VhcmRpbmcgYWdhaW5zdCB0aG9zZSByZWFkcyBhbmQgYHNrYl9wdXNoYCBvcGVyYXRpb25zIHdpdGggYHNrYi1cdTAwM2VsZW5gIGNvbXBhcmlzb25zOiBtYWtpbmcgc3VyZSB0aGUgYHNrYmAgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHJlbGV2YW50IElFRUUgODAyLjExIGhlYWRlciwgdGhlIGhlYWRlciBsZW5ndGggcGx1cyBhIGZpeGVkIG9mZnNldCwgYW5kIGVub3VnaCBoZWFkcm9vbS4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmaXggZm9yIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWQvd3JpdGUgaXNzdWVzIG9uIGBza2ItXHUwMDNlZGF0YWAgYW5kIGBza2JfcHVzaGAsIHdoaWNoIGFyZSwgb2YgY291cnNlLCBiZWluZyBjYXVnaHQgYnkgS0FTQU4uIEV4Y2VsbGVudC5cblxuR2l2ZW4gdGhhdCBLQVNBTiBpcyByZXBvcnRpbmcgdGhlc2UgaXNzdWVzLCBhZGRpbmcgdmFsaWRhdGlvbiBsaWtlIHRoaXMgaXMgdGhlIGNvcnJlY3QgcmVzcG9uc2UuXG5cbk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhbHdheXMsIFwiaXMgdGhpcyBzaW1wbHkgYSBmaXgsIG9yIGlzIGl0ICppbnRyb2R1Y2luZyogYW55IG90aGVyIGlzc3Vlcz9cIiBTbywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgYWNjaWRlbnRhbGx5IGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQncyBkaWcgaW4uIGBwcmVwYXJlX2Zvcl9nYXRlYCBtb2RpZmllcyB0aGUgYHNrYmAgaXRzZWxmLiBJdCB1c2VzIGBza2JfcHVzaGAgdG8gbWFrZSByb29tIGFuZCB0aGVuIGBtZW1tb3ZlYCBhbmQgYG1lbWNweWAgdG8gd3JpdGUgZGF0YS4gSXQgbG9va3MgbGlrZSBpdCBjb3BpZXMgZXhpc3RpbmcgaGVhZGVyIGRhdGEgYW5kIGFkZHJlc3Nlcy4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuIEl0J3Mgc2ltcGx5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgYmlnIGVub3VnaC4gVGhlIHBhdGNoIGlzICpvbmx5KiBhZGRpbmcgdGhlIGJvdW5kcyBjaGVja3MuIFNvLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgIG9uIHRoaXMgb25lLiBJdCdzIGEgY2xlYW4gZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjU4LCJPdXRwdXRUb2tlbnMiOjE0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE3OjQzOjExLjM4MDg5ODQzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tzIHRvIGBza2ItXFx1MDAzZWxlbmAgYW5kIGBza2JfaGVhZHJvb20oc2tiKWAgaW4gYHByZXBhcmVfZm9yX2dhdGVgIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIElFRUUgODAyLjExIGhlYWRlciBhbmQgbWVzaCBoZWFkZXIsIGFuZCB3aGVuIHB1c2hpbmcgZGF0YSB0byB0aGUgc2tiLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBub3IgZG9lcyBpdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciB1c2UgaXQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNrcyB0byBgc2tiLVxcdTAwM2VsZW5gIGFuZCBgc2tiX2hlYWRyb29tKHNrYilgIGluIGBwcmVwYXJlX2Zvcl9nYXRlYCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHdoZW4gYWNjZXNzaW5nIHRoZSBJRUVFIDgwMi4xMSBoZWFkZXIgYW5kIG1lc2ggaGVhZGVyLCBhbmQgd2hlbiBwdXNoaW5nIGRhdGEgdG8gdGhlIHNrYi4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgbm9yIGRvZXMgaXQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgdXNlIGl0IGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowftbtx[1] Phase: Succeeded StartedAt: 2026-08-22 17:43:22 +0000 UTC FinishedAt: 2026-08-22 17:43:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 17:43:22 +0000 UTC FinishedAt: 2026-08-22 17:43:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2] Phase: Succeeded StartedAt: 2026-08-22 17:43:22 +0000 UTC FinishedAt: 2026-08-22 21:25:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 17:43:22 +0000 UTC FinishedAt: 2026-08-22 21:25:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 17:43:22 +0000 UTC FinishedAt: 2026-08-22 17:43:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 17:43:22 +0000 UTC FinishedAt: 2026-08-22 17:43:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowftbtx/series-workflowftbtx-convert-artifact-3213711106/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 17:43:32 +0000 UTC FinishedAt: 2026-08-22 18:00:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 17:43:32 +0000 UTC FinishedAt: 2026-08-22 18:00:37 +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:*148e4f0f-a295-4ed3-97b5-1caeae524e8f,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-workflowftbtx/series-workflowftbtx-convert-artifact-3213711106/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": "57d7d220-2642-4f24-8ab0-a78d67965084", "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-workflowftbtx/series-workflowftbtx-build-action-594339264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 17:43:32 +0000 UTC FinishedAt: 2026-08-22 18:00:27 +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:*148e4f0f-a295-4ed3-97b5-1caeae524e8f,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-workflowftbtx/series-workflowftbtx-convert-artifact-3213711106/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": "57d7d220-2642-4f24-8ab0-a78d67965084", "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-workflowftbtx/series-workflowftbtx-build-action-594339264/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 18:00:37 +0000 UTC FinishedAt: 2026-08-22 18:00:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 18:00:37 +0000 UTC FinishedAt: 2026-08-22 18:00:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 18:00:37 +0000 UTC FinishedAt: 2026-08-22 18:00:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 18:00:37 +0000 UTC FinishedAt: 2026-08-22 18:00:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowftbtx/series-workflowftbtx-convert-artifact-1437820253/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 18:00:47 +0000 UTC FinishedAt: 2026-08-22 18:02:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 18:00:47 +0000 UTC FinishedAt: 2026-08-22 18:02:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57d7d220-2642-4f24-8ab0-a78d67965084,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-workflowftbtx/series-workflowftbtx-build-action-594339264/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-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 18:02:46 +0000 UTC FinishedAt: 2026-08-22 18:02:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 18:02:46 +0000 UTC FinishedAt: 2026-08-22 18:02:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 18:02:46 +0000 UTC FinishedAt: 2026-08-22 18:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 18:02:46 +0000 UTC FinishedAt: 2026-08-22 18:19:49 +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:*148e4f0f-a295-4ed3-97b5-1caeae524e8f,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-workflowftbtx/series-workflowftbtx-convert-artifact-1437820253/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": "7006169c-b8bb-4589-8f36-929efb6abeb2", "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-workflowftbtx/series-workflowftbtx-build-action-2164827705/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 18:02:46 +0000 UTC FinishedAt: 2026-08-22 18:19:39 +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:*148e4f0f-a295-4ed3-97b5-1caeae524e8f,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-workflowftbtx/series-workflowftbtx-convert-artifact-1437820253/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": "7006169c-b8bb-4589-8f36-929efb6abeb2", "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-workflowftbtx/series-workflowftbtx-build-action-2164827705/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 18:19:49 +0000 UTC FinishedAt: 2026-08-22 18:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 18:19:49 +0000 UTC FinishedAt: 2026-08-22 18:19:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 18:19:49 +0000 UTC FinishedAt: 2026-08-22 18:21:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 18:19:49 +0000 UTC FinishedAt: 2026-08-22 18:21:35 +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:*7006169c-b8bb-4589-8f36-929efb6abeb2,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-workflowftbtx/series-workflowftbtx-build-action-2164827705/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-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 18:21:45 +0000 UTC FinishedAt: 2026-08-22 21:25:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 18:21:45 +0000 UTC FinishedAt: 2026-08-22 21:25:41 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*57d7d220-2642-4f24-8ab0-a78d67965084,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7006169c-b8bb-4589-8f36-929efb6abeb2,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-workflowftbtx/series-workflowftbtx-build-action-594339264/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-workflowftbtx/series-workflowftbtx-build-action-2164827705/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 18:21:45 +0000 UTC FinishedAt: 2026-08-22 18:21:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 18:21:45 +0000 UTC FinishedAt: 2026-08-22 18:21:50 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowftbtx/series-workflowftbtx-convert-artifact-3313987042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 18:21:45 +0000 UTC FinishedAt: 2026-08-22 18:21:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 18:21:45 +0000 UTC FinishedAt: 2026-08-22 18:21:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 18:21:45 +0000 UTC FinishedAt: 2026-08-22 18:21:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 18:21:55 +0000 UTC FinishedAt: 2026-08-22 21:25:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowftbtx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_path_send_to_gates","mesh_path_timer"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ca800a9302764c445de0da0e84d2252400a770ee","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","MAC80211_MESH"],"series_id":"c15c525a-8d2b-463b-8492-a40edc83c20a","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 18:21:55 +0000 UTC FinishedAt: 2026-08-22 21:25:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*57d7d220-2642-4f24-8ab0-a78d67965084,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*7006169c-b8bb-4589-8f36-929efb6abeb2,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-workflowftbtx/series-workflowftbtx-build-action-594339264/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-workflowftbtx/series-workflowftbtx-build-action-2164827705/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-workflowftbtx/series-workflowftbtx-convert-artifact-3313987042/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,}